From 70a3a893ac5bf55b3d74239323067a37c234f465 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:17:22 +0000 Subject: [PATCH 001/133] test: harden the test harness and widen CI coverage - run-tests.mjs now runs every test file (it used to exit on the first failure, hiding ~500 tests), prints a failure summary, supports --jobs/--filter/--bail, includes scripts/ tests, and gives each file its own throwaway SENTINEL_STATE_PATH/DB/MEDIA so runs never touch a developer's real ~/.sentinel data - make run_task and shell tests independent of the host `node` binary - extend the bun:test type stub (test, spyOn, beforeAll, skipIf, ...) - exclude .claude and worktrees from tsc - CI: trigger on scripts/, desktop/, package.json, bun.lock and config changes, add a build job, run tests in parallel - add scripts/verify/{gate,tripwires}.mjs for revival phase gates Gate G1: typecheck ok, 183/183 test files (1150 tests) pass, format ok, next build ok. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 49 +++++++- scripts/run-tests.mjs | 148 ++++++++++++++++++++++--- scripts/verify/gate.mjs | 42 +++++++ scripts/verify/tripwires.mjs | 76 +++++++++++++ src/lib/ai/chat/tools/run-task.test.ts | 2 +- src/lib/ai/chat/tools/shell.test.ts | 8 +- src/types/bun-test.d.ts | 20 +++- tsconfig.json | 9 +- 8 files changed, 331 insertions(+), 23 deletions(-) create mode 100644 scripts/verify/gate.mjs create mode 100644 scripts/verify/tripwires.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fcc15dce..3a04bc51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,11 +4,27 @@ on: pull_request: paths: - "src/**" + - "scripts/**" + - "desktop/**" + - "manifests/**" + - "package.json" + - "bun.lock" + - "tsconfig.json" + - "next.config.js" + - ".github/**" push: branches: - main paths: - "src/**" + - "scripts/**" + - "desktop/**" + - "manifests/**" + - "package.json" + - "bun.lock" + - "tsconfig.json" + - "next.config.js" + - ".github/**" concurrency: group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -35,6 +51,14 @@ jobs: filters: | source: - 'src/**' + - 'scripts/**' + - 'desktop/**' + - 'manifests/**' + - 'package.json' + - 'bun.lock' + - 'tsconfig.json' + - 'next.config.js' + - '.github/**' pr-metadata: if: github.event_name == 'pull_request' @@ -117,4 +141,27 @@ jobs: - uses: ./.github/actions/setup-bun - name: Run tests - run: bun run test + run: node scripts/run-tests.mjs --jobs 3 + + build: + name: build + needs: changes + if: ${{ needs.changes.outputs.source == 'true' }} + runs-on: ubuntu-24.04 + timeout-minutes: 30 + permissions: + contents: read + env: + SKIP_ENV_VALIDATION: "1" + NODE_OPTIONS: "--max-old-space-size=4096" + SENTINEL_SKIP_STARTUP_TASKS: "1" + steps: + - uses: actions/checkout@v4 + + - uses: ./.github/actions/setup-bun + + - name: Build + run: bun run build + + - name: Tripwires + run: node scripts/verify/tripwires.mjs diff --git a/scripts/run-tests.mjs b/scripts/run-tests.mjs index 33c1a526..745c2b27 100644 --- a/scripts/run-tests.mjs +++ b/scripts/run-tests.mjs @@ -1,9 +1,39 @@ -import { readdirSync, statSync } from "node:fs"; +import { spawn } from "node:child_process"; +import { mkdtempSync, readdirSync, rmSync, statSync } from "node:fs"; +import os from "node:os"; import path from "node:path"; -import { spawnSync } from "node:child_process"; const TEST_FILE_PATTERN = /\.test\.(?:[cm]?[jt]sx?)$/; -const ROOTS = ["desktop", "src"]; +const ROOTS = ["desktop", "scripts", "src"]; +const SKIPPED_DIRECTORIES = new Set(["node_modules", "dist", ".next"]); + +function parseArgs(argv) { + const options = { bail: false, filters: [], jobs: 1 }; + + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + + if (arg === "--bail") { + options.bail = true; + } else if (arg === "--jobs" || arg === "-j") { + options.jobs = Math.max( + 1, + Number.parseInt(argv[++index] ?? "1", 10) || 1, + ); + } else if (arg.startsWith("--jobs=")) { + options.jobs = Math.max(1, Number.parseInt(arg.slice(7), 10) || 1); + } else if (arg === "--filter") { + const value = argv[++index]; + if (value) options.filters.push(value); + } else if (arg.startsWith("--filter=")) { + options.filters.push(arg.slice(9)); + } else { + options.filters.push(arg); + } + } + + return options; +} function collectTestFiles(root) { const entries = []; @@ -12,7 +42,9 @@ function collectTestFiles(root) { const fullPath = path.join(root, entry.name); if (entry.isDirectory()) { - entries.push(...collectTestFiles(fullPath)); + if (!SKIPPED_DIRECTORIES.has(entry.name)) { + entries.push(...collectTestFiles(fullPath)); + } continue; } @@ -28,6 +60,50 @@ function resolveBunCommand() { return process.platform === "win32" ? "bun.exe" : "bun"; } +// Each test file runs in its own bun process (mock.module is process-global) +// with its own throwaway Sentinel state, so files never share or touch the +// developer's real ~/.sentinel data. +function runTestFile(testFile, { captureOutput }) { + const stateRoot = mkdtempSync(path.join(os.tmpdir(), "sentinel-test-")); + const env = { + ...process.env, + SKIP_ENV_VALIDATION: process.env.SKIP_ENV_VALIDATION ?? "1", + SENTINEL_SKIP_STARTUP_TASKS: process.env.SENTINEL_SKIP_STARTUP_TASKS ?? "1", + SENTINEL_STATE_PATH: path.join(stateRoot, "state.json"), + SENTINEL_DB_PATH: path.join(stateRoot, "sentinel.db"), + SENTINEL_MEDIA_PATH: path.join(stateRoot, "media"), + }; + + return new Promise((resolve) => { + const child = spawn(resolveBunCommand(), ["test", testFile], { + cwd: process.cwd(), + env, + shell: false, + stdio: captureOutput ? ["ignore", "pipe", "pipe"] : "inherit", + }); + const chunks = []; + + if (captureOutput) { + child.stdout.on("data", (chunk) => chunks.push(chunk)); + child.stderr.on("data", (chunk) => chunks.push(chunk)); + } + + const finish = (status) => { + rmSync(stateRoot, { force: true, recursive: true }); + resolve({ + output: Buffer.concat(chunks).toString("utf8"), + status, + testFile, + }); + }; + + child.on("error", () => finish(1)); + child.on("close", (code) => finish(code ?? 1)); + }); +} + +const options = parseArgs(process.argv.slice(2)); + const testFiles = ROOTS.flatMap((root) => { try { if (!statSync(root).isDirectory()) { @@ -38,23 +114,65 @@ const testFiles = ROOTS.flatMap((root) => { } return collectTestFiles(root); -}).sort((left, right) => left.localeCompare(right)); +}) + .filter( + (file) => + options.filters.length === 0 || + options.filters.some((filter) => + path.relative(process.cwd(), file).includes(filter), + ), + ) + .sort((left, right) => left.localeCompare(right)); if (testFiles.length === 0) { - console.error("No test files were found under desktop/ or src/."); + console.error( + `No test files were found under ${ROOTS.join("/, ")}/${ + options.filters.length > 0 + ? ` matching ${options.filters.join(", ")}` + : "" + }.`, + ); process.exit(1); } -const bunCommand = resolveBunCommand(); +const captureOutput = options.jobs > 1; +const failures = []; +let nextIndex = 0; +let stopped = false; -for (const testFile of testFiles) { - const result = spawnSync(bunCommand, ["test", testFile], { - cwd: process.cwd(), - shell: false, - stdio: "inherit", - }); +async function worker() { + while (!stopped && nextIndex < testFiles.length) { + const testFile = testFiles[nextIndex++]; + const result = await runTestFile(testFile, { captureOutput }); - if (result.status !== 0) { - process.exit(result.status ?? 1); + if (captureOutput) { + process.stdout.write(result.output); + } + + if (result.status !== 0) { + failures.push(result.testFile); + if (options.bail) { + stopped = true; + } + } } } + +await Promise.all( + Array.from({ length: Math.min(options.jobs, testFiles.length) }, () => + worker(), + ), +); + +const relative = (file) => path.relative(process.cwd(), file); + +if (failures.length > 0) { + console.error( + `\n${failures.length} of ${testFiles.length} test files failed:\n${failures + .map((file) => ` - ${relative(file)}`) + .join("\n")}`, + ); + process.exit(1); +} + +console.log(`\nAll ${testFiles.length} test files passed.`); diff --git a/scripts/verify/gate.mjs b/scripts/verify/gate.mjs new file mode 100644 index 00000000..18cad105 --- /dev/null +++ b/scripts/verify/gate.mjs @@ -0,0 +1,42 @@ +// Runs the verification gates used for every revival commit. +// G0: frozen install, typecheck, tests, format check, tripwires +// G1: G0 + production Next build +// G2: G1 + unsigned macOS desktop package (includes the bundle audit) +// Usage: node scripts/verify/gate.mjs [G0|G1|G2] [--jobs N] +import { spawnSync } from "node:child_process"; + +const level = (process.argv[2] ?? "G0").toUpperCase(); +const jobsIndex = process.argv.indexOf("--jobs"); +const jobs = jobsIndex > -1 ? process.argv[jobsIndex + 1] : "4"; +const bun = process.platform === "win32" ? "bun.exe" : "bun"; + +const steps = [ + ["install", bun, ["install", "--frozen-lockfile"]], + ["typecheck", bun, ["run", "typecheck"]], + ["tests", "node", ["scripts/run-tests.mjs", "--jobs", jobs]], + ["format", bun, ["run", "format:check"]], + ["tripwires", "node", ["scripts/verify/tripwires.mjs"]], +]; + +if (level === "G1" || level === "G2") { + steps.push(["build", bun, ["run", "build"]]); +} +if (level === "G2") { + steps.push(["package", bun, ["run", "build:desktop:mac"]]); +} + +for (const [name, command, args] of steps) { + const startedAt = Date.now(); + console.log(`\n▶ ${level} ${name}: ${command} ${args.join(" ")}`); + const result = spawnSync(command, args, { shell: false, stdio: "inherit" }); + const seconds = ((Date.now() - startedAt) / 1000).toFixed(1); + + if (result.status !== 0) { + console.error(`\n✖ ${level} failed at ${name} after ${seconds}s`); + process.exit(result.status ?? 1); + } + + console.log(`✔ ${name} (${seconds}s)`); +} + +console.log(`\n✔ ${level} passed`); diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs new file mode 100644 index 00000000..34f1c44a --- /dev/null +++ b/scripts/verify/tripwires.mjs @@ -0,0 +1,76 @@ +// Forbidden-pattern registry for the dependency revival. Each tripwire guards +// against a pattern that a completed migration phase removed; it must stay at +// zero hits from then on. Run: node scripts/verify/tripwires.mjs +import { execFileSync } from "node:child_process"; +import { readFileSync } from "node:fs"; + +/** + * @typedef {{ + * id: string; + * description: string; + * pattern: RegExp; + * include?: RegExp; + * exclude?: RegExp; + * }} Tripwire + */ + +/** @type {Tripwire[]} */ +export const TRIPWIRES = []; + +const DEFAULT_EXCLUDE = + /(^|\/)(CHANGELOG\.md|bun\.lock)$|^scripts\/verify\/tripwires\.mjs$/; + +function listTrackedFiles() { + return execFileSync("git", ["ls-files", "-co", "--exclude-standard"], { + encoding: "utf8", + }) + .split("\n") + .filter(Boolean); +} + +export function findTripwireHits(tripwires = TRIPWIRES) { + const files = listTrackedFiles(); + const hits = []; + + for (const file of files) { + if (DEFAULT_EXCLUDE.test(file)) continue; + let content; + try { + content = readFileSync(file, "utf8"); + } catch { + continue; + } + + for (const tripwire of tripwires) { + if (tripwire.include && !tripwire.include.test(file)) continue; + if (tripwire.exclude?.test(file)) continue; + const lines = content.split("\n"); + lines.forEach((line, index) => { + if (tripwire.pattern.test(line)) { + hits.push({ + file, + id: tripwire.id, + line: index + 1, + text: line.trim(), + }); + } + }); + } + } + + return hits; +} + +if (import.meta.url === `file://${process.argv[1]}`) { + const hits = findTripwireHits(); + + if (hits.length > 0) { + for (const hit of hits) { + console.error(`${hit.file}:${hit.line} [${hit.id}] ${hit.text}`); + } + console.error(`\n${hits.length} tripwire hit(s).`); + process.exit(1); + } + + console.log(`Tripwires clean (${TRIPWIRES.length} active).`); +} diff --git a/src/lib/ai/chat/tools/run-task.test.ts b/src/lib/ai/chat/tools/run-task.test.ts index f2a28b23..24751c60 100644 --- a/src/lib/ai/chat/tools/run-task.test.ts +++ b/src/lib/ai/chat/tools/run-task.test.ts @@ -50,7 +50,7 @@ describe("run_task", () => { JSON.stringify({ packageManager: "bun@1.3.6", scripts: { - test: "node -e \"console.log('task-ok')\"", + test: "echo task-ok", }, }), ); diff --git a/src/lib/ai/chat/tools/shell.test.ts b/src/lib/ai/chat/tools/shell.test.ts index 16588ff5..9a6f51cf 100644 --- a/src/lib/ai/chat/tools/shell.test.ts +++ b/src/lib/ai/chat/tools/shell.test.ts @@ -18,6 +18,9 @@ const { } = await import("./shell.ts"); const workspaceRoot = process.cwd(); +// Use the runtime executing the tests (bun) rather than whatever `node` the +// host PATH resolves, so these tests do not depend on the machine setup. +const JS_RUNTIME = JSON.stringify(process.execPath); const originalHome = process.env.HOME; const originalPath = process.env.PATH; const originalShell = process.env.SHELL; @@ -111,7 +114,7 @@ describe("shell session manager", () => { it("truncates oversized stdout", async () => { const result = await executeShellCommand({ allowedRoot: workspaceRoot, - command: "node -e \"process.stdout.write('a'.repeat(70000))\"", + command: `${JS_RUNTIME} -e "process.stdout.write('a'.repeat(70000))"`, defaultDirectory: workspaceRoot, permissionMode: "full", threadId: "thread-shell-truncation", @@ -234,8 +237,7 @@ describe("shell session manager", () => { for await (const event of streamShellCommand({ allowedRoot: workspaceRoot, - command: - "node -e \"process.stdout.write('a'.repeat(9000)); process.stdout.write('\\n')\"", + command: `${JS_RUNTIME} -e "process.stdout.write('a'.repeat(9000)); process.stdout.write('\\n')"`, defaultDirectory: workspaceRoot, permissionMode: "full", threadId: "thread-shell-tail", diff --git a/src/types/bun-test.d.ts b/src/types/bun-test.d.ts index 6f04b01a..ee61b54d 100644 --- a/src/types/bun-test.d.ts +++ b/src/types/bun-test.d.ts @@ -1,8 +1,24 @@ declare module "bun:test" { + type TestFn = (...args: any[]) => any; + type TestApi = TestFn & { + each: (...args: any[]) => TestFn; + if: (condition: boolean) => TestFn; + only: TestFn; + skip: TestFn; + skipIf: (condition: boolean) => TestFn; + todo: TestFn; + }; + + export const afterAll: (...args: any[]) => any; export const afterEach: (...args: any[]) => any; + export const beforeAll: (...args: any[]) => any; export const beforeEach: (...args: any[]) => any; - export const describe: (...args: any[]) => any; + export const describe: TestApi; export const expect: any; - export const it: (...args: any[]) => any; + export const it: TestApi; + export const jest: any; export const mock: any; + export const setSystemTime: (...args: any[]) => any; + export const spyOn: any; + export const test: TestApi; } diff --git a/tsconfig.json b/tsconfig.json index a416e86e..d2db91b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -38,5 +38,12 @@ "**/*.js", ".next/types/**/*.ts" ], - "exclude": ["node_modules", "generated", "desktop/dist", "dist"] + "exclude": [ + "node_modules", + "generated", + "desktop/dist", + "dist", + ".claude", + "**/.worktrees" + ] } From 35dc0ee67669ea3ede60c73a748f2dd7f72c211b Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:20:22 +0000 Subject: [PATCH 002/133] build: move to Node 24 LTS Node 21.7.3 is end-of-life and below the minimum of the upgrade targets (ai 7, @ai-sdk/*, Electron 44, better-sqlite3 13, Copilot SDK 1.0 and Pi all require Node >= 22). Electron 44 embeds Node 24, which is also what the packaged Next server runs on, so pin the 24 LTS line everywhere: .nvmrc, .node-version, engines, @types/node, and the CI setup action (now reads .nvmrc). Gate G0: typecheck ok, 183/183 test files pass, format ok, tripwires ok. Co-Authored-By: Claude Opus 5.5 --- .github/actions/setup-bun/action.yml | 2 +- .node-version | 2 +- .nvmrc | 2 +- README.md | 2 +- bun.lock | 6 +++--- docs/product/getting-started/install.md | 2 +- package.json | 4 ++-- scripts/verify/tripwires.mjs | 8 +++++++- src/lib/ai/chat/tools/shell.test.ts | 2 +- 9 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/actions/setup-bun/action.yml b/.github/actions/setup-bun/action.yml index 541abc5c..475eb4f8 100644 --- a/.github/actions/setup-bun/action.yml +++ b/.github/actions/setup-bun/action.yml @@ -6,7 +6,7 @@ runs: steps: - uses: actions/setup-node@v4 with: - node-version: 21.7.3 + node-version-file: .nvmrc - uses: oven-sh/setup-bun@v2 with: diff --git a/.node-version b/.node-version index a7ac3d0d..a45fd52c 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -21.7.3 +24 diff --git a/.nvmrc b/.nvmrc index a7ac3d0d..a45fd52c 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -21.7.3 +24 diff --git a/README.md b/README.md index 59b8cb88..db12660e 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ This is a desktop app first. A lot of the useful parts depend on running close t ### Prerequisites - [Bun](https://bun.sh) -- Node.js +- Node.js 24 LTS (see `.nvmrc`) - Platform build tools for native dependencies when prebuilt binaries are not available: - macOS: Xcode Command Line Tools - Linux: `build-essential`, `python3`, `make`, and `g++` diff --git a/bun.lock b/bun.lock index ce54beb5..25ba4403 100644 --- a/bun.lock +++ b/bun.lock @@ -105,7 +105,7 @@ "@tailwindcss/postcss": "^4.0.15", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", - "@types/node": "^20.14.10", + "@types/node": "^24.12.4", "@types/pg": "^8.18.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", @@ -1009,7 +1009,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@20.19.37", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw=="], + "@types/node": ["@types/node@24.19.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ=="], "@types/pg": ["@types/pg@8.18.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q=="], @@ -2333,7 +2333,7 @@ "underscore": ["underscore@1.13.8", "", {}, "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ=="], - "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], diff --git a/docs/product/getting-started/install.md b/docs/product/getting-started/install.md index 19836212..e08bdb35 100644 --- a/docs/product/getting-started/install.md +++ b/docs/product/getting-started/install.md @@ -25,7 +25,7 @@ Linux notes: Sentinel uses Bun. -Source runs also need Node.js. Sentinel repairs native dependencies at startup by using prebuilt binaries when available and falling back to a local source build when a runtime, OS, or CPU combination does not have a matching prebuild. +Source runs also need Node.js 24 LTS (the version pinned in `.nvmrc`). Sentinel repairs native dependencies at startup by using prebuilt binaries when available and falling back to a local source build when a runtime, OS, or CPU combination does not have a matching prebuild. Install platform build tools only if the native repair step asks for them: diff --git a/package.json b/package.json index 4f321d6b..327bde88 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "packageManager": "bun@1.3.6", "engines": { "bun": "1.3.6", - "node": "21.7.3" + "node": ">=24.14.0 <25" }, "main": "desktop/main/index.mjs", "scripts": { @@ -143,7 +143,7 @@ "@tailwindcss/postcss": "^4.0.15", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", - "@types/node": "^20.14.10", + "@types/node": "^24.12.4", "@types/pg": "^8.18.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index 34f1c44a..3235f3b2 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -15,7 +15,13 @@ import { readFileSync } from "node:fs"; */ /** @type {Tripwire[]} */ -export const TRIPWIRES = []; +export const TRIPWIRES = [ + { + id: "P1-node-21", + description: "Node 21.7.3 pin replaced by Node 24 LTS", + pattern: /21\.7\.3/, + }, +]; const DEFAULT_EXCLUDE = /(^|\/)(CHANGELOG\.md|bun\.lock)$|^scripts\/verify\/tripwires\.mjs$/; diff --git a/src/lib/ai/chat/tools/shell.test.ts b/src/lib/ai/chat/tools/shell.test.ts index 9a6f51cf..797d4dc0 100644 --- a/src/lib/ai/chat/tools/shell.test.ts +++ b/src/lib/ai/chat/tools/shell.test.ts @@ -163,7 +163,7 @@ describe("shell session manager", () => { "share", "fnm", "node-versions", - "v21.7.3", + "v24.14.1", "installation", "bin", ); From d89bd8de94faa205d808236ce6348554d5bdbc41 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:21:11 +0000 Subject: [PATCH 003/133] build: move to bun 1.4.2 Bun 1.4 is the current release line. The full suite (183 files, 1150 tests, 260 mock.module call sites) passes unchanged on 1.4.2, so pin it for packageManager, engines and the CI setup action. Gate G0: typecheck ok, 183/183 test files pass on bun 1.4.2, format ok, tripwires ok. Co-Authored-By: Claude Opus 5.5 --- .github/actions/setup-bun/action.yml | 2 +- README.md | 2 +- package.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/setup-bun/action.yml b/.github/actions/setup-bun/action.yml index 475eb4f8..73bdbad9 100644 --- a/.github/actions/setup-bun/action.yml +++ b/.github/actions/setup-bun/action.yml @@ -10,7 +10,7 @@ runs: - uses: oven-sh/setup-bun@v2 with: - bun-version: 1.3.6 + bun-version: 1.4.2 - uses: actions/cache@v4 with: diff --git a/README.md b/README.md index db12660e..4d88d850 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ This is a desktop app first. A lot of the useful parts depend on running close t ### Prerequisites -- [Bun](https://bun.sh) +- [Bun](https://bun.sh) 1.4 or later - Node.js 24 LTS (see `.nvmrc`) - Platform build tools for native dependencies when prebuilt binaries are not available: - macOS: Xcode Command Line Tools diff --git a/package.json b/package.json index 327bde88..f0883693 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "description": "Sentinel local-first desktop app", "author": "Sentinel", "type": "module", - "packageManager": "bun@1.3.6", + "packageManager": "bun@1.4.2", "engines": { - "bun": "1.3.6", + "bun": ">=1.4.2", "node": ">=24.14.0 <25" }, "main": "desktop/main/index.mjs", From 5a5a13ebb42936d9ab91c157e3475c1c95cd7054 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:23:24 +0000 Subject: [PATCH 004/133] build(deps): bump in-range dependencies tRPC 11.19, TanStack Query 5.104, drizzle-orm 0.45.3 / drizzle-kit 0.31.11 (staying on 0.x; 1.0 is still a release candidate), sqlite-vec 0.1.9 (first non-alpha), Tailwind 4.3.3, tiptap 3.31, lucide-react 1.52, hugeicons, @pierre/diffs 1.5, notion 5.27, mongodb 7.7, mysql2, pg, react-hook-form 7.89, resumable-stream, turndown, electron-updater 6.8.9, prettier 3.9.9, lefthook 2.1.17, postcss, wait-on. Gate G0: typecheck ok, 183/183 test files pass. Co-Authored-By: Claude Opus 5.5 --- bun.lock | 506 ++++++++++++++++++++++++++++++--------------------- package.json | 68 +++---- 2 files changed, 329 insertions(+), 245 deletions(-) diff --git a/bun.lock b/bun.lock index 25ba4403..0d3be391 100644 --- a/bun.lock +++ b/bun.lock @@ -34,93 +34,93 @@ "@heroui/react": "^3.0.1", "@heroui/styles": "^3.0.1", "@hookform/resolvers": "^5.2.2", - "@hugeicons/core-free-icons": "^4.0.0", - "@hugeicons/react": "^1.1.5", + "@hugeicons/core-free-icons": "^4.3.5", + "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", "@linear/sdk": "^77.0.0", - "@notionhq/client": "^5.13.0", + "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", "@openrouter/ai-sdk-provider": "^2.3.3", "@paralleldrive/cuid2": "^3.3.0", - "@pierre/diffs": "^1.1.7", + "@pierre/diffs": "^1.5.2", "@slack/web-api": "^7.15.0", "@t3-oss/env-nextjs": "^0.12.0", - "@tanstack/react-query": "^5.69.0", - "@tiptap/extension-placeholder": "^3.20.1", - "@tiptap/pm": "^3.20.1", - "@tiptap/react": "^3.20.1", - "@tiptap/starter-kit": "^3.20.1", - "@tiptap/suggestion": "^3.20.1", - "@trpc/client": "^11.0.0", - "@trpc/react-query": "^11.0.0", - "@trpc/server": "^11.0.0", + "@tanstack/react-query": "^5.104.1", + "@tiptap/extension-placeholder": "^3.31.4", + "@tiptap/pm": "^3.31.4", + "@tiptap/react": "^3.31.4", + "@tiptap/starter-kit": "^3.31.4", + "@tiptap/suggestion": "^3.31.4", + "@trpc/client": "^11.19.0", + "@trpc/react-query": "^11.19.0", + "@trpc/server": "^11.19.0", "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "ai": "^6.0.116", "better-sqlite3": "12.6.2", - "border-beam": "^1.0.1", + "border-beam": "^1.4.1", "cmdk": "^1.1.1", "cronbake": "^0.4.0", - "date-fns": "^4.1.0", - "drizzle-orm": "^0.45.1", - "electron-updater": "^6.8.3", + "date-fns": "^4.4.0", + "drizzle-orm": "^0.45.3", + "electron-updater": "^6.8.9", "googleapis": "^171.4.0", "highlight.js": "^11.11.1", - "lucide-react": "^1.8.0", - "mammoth": "^1.12.0", - "mongodb": "^7.1.0", + "lucide-react": "^1.52.0", + "mammoth": "^1.13.0", + "mongodb": "^7.7.0", "motion": "^12.35.0", - "mysql2": "^3.20.0", + "mysql2": "^3.24.5", "next": "^15.2.3", "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", "officeparser": "^6.0.7", - "pg": "^8.20.0", + "pg": "^8.23.1", "ppt": "^0.0.2", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-hook-form": "^7.71.2", + "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", "rehype-highlight": "^7.0.2", "remark-gfm": "^4.0.1", - "resumable-stream": "^2.2.10", + "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", "server-only": "^0.0.1", "shiki": "^3.23.0", "sileo": "^0.1.5", - "sqlite-vec": "0.1.7-alpha.2", + "sqlite-vec": "^0.1.9", "superjson": "^2.2.1", "tailwind-variants": "^3.2.2", - "turndown": "^7.2.2", + "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2", }, "devDependencies": { "@commitlint/cli": "^20.5.0", "@commitlint/config-conventional": "^20.5.0", - "@tailwindcss/postcss": "^4.0.15", + "@tailwindcss/postcss": "^4.3.3", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", - "@types/pg": "^8.18.0", + "@types/pg": "^8.23.1", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "concurrently": "^9.2.1", - "drizzle-kit": "^0.31.9", + "drizzle-kit": "^0.31.11", "electron": "40.8.0", "electron-builder": "26.8.1", - "lefthook": "^2.1.4", + "lefthook": "^2.1.17", "lint-staged": "^16.4.0", - "postcss": "^8.5.3", - "prettier": "^3.8.1", + "postcss": "^8.5.29", + "prettier": "^3.9.9", "prettier-plugin-tailwindcss": "^0.7.2", - "tailwindcss": "^4.0.15", + "tailwindcss": "^4.3.3", "typescript": "^5.8.2", - "wait-on": "^9.0.4", + "wait-on": "^9.5.1", }, }, }, @@ -377,9 +377,9 @@ "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], - "@hugeicons/core-free-icons": ["@hugeicons/core-free-icons@4.0.0", "", {}, "sha512-bzfbKumv3ke3ajbe2MyXi9i0I/cdsZ6n/mO9EfIPNSL++pHLqs7nSGRIVUtjF4xrrEyVkfhxssv4Jek8DPA6gA=="], + "@hugeicons/core-free-icons": ["@hugeicons/core-free-icons@4.3.5", "", {}, "sha512-Sv+NjHRPnQk+yZsGCMcGznCHdTfJR9PMMOEKcJYAQU4gy90dmlc9PwdtvYOImBZIjiheMsTLL5eMn2DmHxUiUg=="], - "@hugeicons/react": ["@hugeicons/react@1.1.5", "", { "peerDependencies": { "react": ">=16.0.0" } }, "sha512-JX/iDz3oO7hWdVqbjwFwRrAjHk8h2vI+mBkNzp4JcXG3t4idoupfjon73nLOA7cr27m0M8hrRC1Q2h6nEBGKVA=="], + "@hugeicons/react": ["@hugeicons/react@1.1.10", "", { "peerDependencies": { "react": ">=16.0.0" } }, "sha512-9tAsd92yMVVGP+E+d8cM+wc0VnXuYZHNbWQi7TOe8k2neawmhiaFmVFbzyruejhOMa197/LbgvSED32ayUo3ZA=="], "@iconify/react": ["@iconify/react@6.0.2", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-SMmC2sactfpJD427WJEDN6PMyznTFMhByK9yLW0gOTtnjzzbsi/Ke/XqsumsavFPwNiXs8jSiYeZTmLCLwO+Fg=="], @@ -465,7 +465,7 @@ "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], - "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.4.6", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g=="], + "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.6.0", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-19jGXfpctLDJUELLUZGJ5BllcLT7rHdF+gTTaN2jzqu0bGkUhpdcYtgK2Vux+g3zuBAa0TM/W666QMIjYhYujw=="], "@napi-rs/canvas": ["@napi-rs/canvas@0.1.97", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.97", "@napi-rs/canvas-darwin-arm64": "0.1.97", "@napi-rs/canvas-darwin-x64": "0.1.97", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.97", "@napi-rs/canvas-linux-arm64-gnu": "0.1.97", "@napi-rs/canvas-linux-arm64-musl": "0.1.97", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.97", "@napi-rs/canvas-linux-x64-gnu": "0.1.97", "@napi-rs/canvas-linux-x64-musl": "0.1.97", "@napi-rs/canvas-win32-arm64-msvc": "0.1.97", "@napi-rs/canvas-win32-x64-msvc": "0.1.97" } }, "sha512-8cFniXvrIEnVwuNSRCW9wirRZbHvrD3JVujdS2P5n5xiJZNZMOZcfOvJ1pb66c7jXMKHHglJEDVJGbm8XWFcXQ=="], @@ -511,7 +511,7 @@ "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], - "@notionhq/client": ["@notionhq/client@5.13.0", "", {}, "sha512-SWVaqYVNaecLzAAllups4vklxxomaFenEMEkoUs3ylvhK1KFTU5Jevgu9Uwm/TSdhsErV0ru5YHcLd3SNyPi6Q=="], + "@notionhq/client": ["@notionhq/client@5.27.0", "", {}, "sha512-JnkLtAzSDrEnvtZ8dQ5L4KO+xyL5g01xK5qmKTmhJ5KFY8LWsMyFG033vHCj0mFcsz9thAMjfcAQz/SWxiexag=="], "@npmcli/agent": ["@npmcli/agent@3.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q=="], @@ -549,9 +549,11 @@ "@paralleldrive/cuid2": ["@paralleldrive/cuid2@3.3.0", "", { "dependencies": { "@noble/hashes": "^2.0.1", "bignumber.js": "^9.3.1", "error-causes": "^3.0.2" }, "bin": { "cuid2": "bin/cuid2.js" } }, "sha512-OqiFvSOF0dBSesELYY2CAMa4YINvlLpvKOz/rv6NeZEqiyttlHgv98Juwv4Ch+GrEV7IZ8jfI2VcEoYUjXXCjw=="], - "@pierre/diffs": ["@pierre/diffs@1.1.7", "", { "dependencies": { "@pierre/theme": "0.0.22", "@shikijs/transformers": "^3.0.0", "diff": "8.0.3", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-FWs2hHrjZPXmJl6ewnfFzOjNEM3aeSH1CB8ynZg4SOg95Wc5AxomeyJJhXf44PK9Cc+PNm1CgsJ1IvOdfgHyHA=="], + "@pierre/diffs": ["@pierre/diffs@1.5.2", "", { "dependencies": { "@pierre/theme": "2.0.0", "@pierre/theming": "1.0.1", "@shikijs/transformers": "^3.0.0 || ^4.0.0", "diff": "9.0.0", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0 || ^4.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-QVxIWQEnNoko22k63maERzozd29+FtaUNpRrZiw603WMe5R1mFSED+jMtPkcVP3SDYS1DWg5K7sa7sJbr3xkNQ=="], - "@pierre/theme": ["@pierre/theme@0.0.22", "", {}, "sha512-ePUIdQRNGjrveELTU7fY89Xa7YGHHEy5Po5jQy/18lm32eRn96+tnYJEtFooGdffrx55KBUtOXfvVy/7LDFFhA=="], + "@pierre/theme": ["@pierre/theme@2.0.0", "", {}, "sha512-yNDd9GYLQl1mEUJR8AneJ5e4ohLIHQd/wZLWr4fagt78vS2RwwZNW530vVgHqXFAyFVcFlRmGUD5ramXH46OXw=="], + + "@pierre/theming": ["@pierre/theming@1.0.1", "", { "peerDependencies": { "@pierre/theme": "^1.1.0 || ^2.0.0", "@shikijs/themes": "^3.0.0 || ^4.0.0", "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0", "shiki": "^3.0.0 || ^4.0.0" }, "optionalPeers": ["@pierre/theme", "@shikijs/themes", "react", "react-dom", "shiki"] }, "sha512-WCI5Qd7iprDpISL9fBYOLe8RV53+b7mFNA3bPzl60/2CKCSrsKN8zEcep6Y3BAzvARlmca50zGjDodqPGiTUKA=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], @@ -821,8 +823,6 @@ "@react-types/tooltip": ["@react-types/tooltip@3.5.2", "", { "dependencies": { "@react-types/overlays": "^3.9.4", "@react-types/shared": "^3.33.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FvSuZ2WP08NEWefrpCdBYpEEZh/5TvqvGjq0wqGzWg2OPwpc14HjD8aE7I3MOuylXkD4MSlMjl7J4DlvlcCs3Q=="], - "@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="], - "@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], @@ -875,99 +875,99 @@ "@t3-oss/env-nextjs": ["@t3-oss/env-nextjs@0.12.0", "", { "dependencies": { "@t3-oss/env-core": "0.12.0" }, "peerDependencies": { "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0" }, "optionalPeers": ["typescript", "valibot", "zod"] }, "sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw=="], - "@tailwindcss/node": ["@tailwindcss/node@4.2.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.31.1", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.1" } }, "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.1", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.1", "@tailwindcss/oxide-darwin-arm64": "4.2.1", "@tailwindcss/oxide-darwin-x64": "4.2.1", "@tailwindcss/oxide-freebsd-x64": "4.2.1", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", "@tailwindcss/oxide-linux-x64-musl": "4.2.1", "@tailwindcss/oxide-wasm32-wasi": "4.2.1", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" } }, "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.3", "@tailwindcss/oxide-darwin-arm64": "4.3.3", "@tailwindcss/oxide-darwin-x64": "4.3.3", "@tailwindcss/oxide-freebsd-x64": "4.3.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", "@tailwindcss/oxide-linux-x64-musl": "4.3.3", "@tailwindcss/oxide-wasm32-wasi": "4.3.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.1", "", { "os": "android", "cpu": "arm64" }, "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.3", "", { "os": "android", "cpu": "arm64" }, "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.1", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.1", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.1", "@tailwindcss/oxide": "4.2.1", "postcss": "^8.5.6", "tailwindcss": "4.2.1" } }, "sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.3", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "postcss": "^8.5.16", "tailwindcss": "4.3.3" } }, "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg=="], - "@tanstack/query-core": ["@tanstack/query-core@5.90.20", "", {}, "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg=="], + "@tanstack/query-core": ["@tanstack/query-core@5.104.1", "", {}, "sha512-TiRghcrGkUTE+M4JBxvpPSpBhxvIzQairw+cksrHYGr+2uwC77yW1SY9nYxnYRYOppvucf8rEg6b5byoz4rTpw=="], - "@tanstack/react-query": ["@tanstack/react-query@5.90.21", "", { "dependencies": { "@tanstack/query-core": "5.90.20" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg=="], + "@tanstack/react-query": ["@tanstack/react-query@5.104.1", "", { "dependencies": { "@tanstack/query-core": "5.104.1" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-Zz70EgjahNI7aCz8BZxM3vUGU44ycxEAzMuCUjLeA7SVhhOkg3ZgPjPJPvHjs6Rmky/dtmnu1WzjGHNHmhCoZQ=="], - "@tiptap/core": ["@tiptap/core@3.20.1", "", { "peerDependencies": { "@tiptap/pm": "^3.20.1" } }, "sha512-SwkPEWIfaDEZjC8SEIi4kZjqIYUbRgLUHUuQezo5GbphUNC8kM1pi3C3EtoOPtxXrEbY6e4pWEzW54Pcrd+rVA=="], + "@tiptap/core": ["@tiptap/core@3.31.4", "", { "peerDependencies": { "@tiptap/pm": "3.31.4" } }, "sha512-cIVUQYBycighzsk6GbmCef8ZiEDVxoT5EuAe4xg2q9dNkDqCXVqI4YGr9aavCQEiAS4uHiRwqvcsPqJHipFDfg=="], - "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-WzNXk/63PQI2fav4Ta6P0GmYRyu8Gap1pV3VUqaVK829iJ6Zt1T21xayATHEHWMK27VT1GLPJkx9Ycr2jfDyQw=="], + "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-FHnbvCIW0eDKgUUFjmvEB0ax9YUBW7/Unm+38qpuQROvU872yRqhnDtycKT9IKk46jNdjM4A4fAGUbge10CrAA=="], - "@tiptap/extension-bold": ["@tiptap/extension-bold@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-fz++Qv6Rk/Hov0IYG/r7TJ1Y4zWkuGONe0UN5g0KY32NIMg3HeOHicbi4xsNWTm9uAOl3eawWDkezEMrleObMw=="], + "@tiptap/extension-bold": ["@tiptap/extension-bold@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-QX1xoXvO0gz6uVsoLegumqQ4MJXL7lcUDQZ4J7la7LBqiIh4efrCmp2EXbhpr37M/YQL7w8q3g7H/VovSh7xIg=="], - "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.20.1", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-XaPvO6aCoWdFnCBus0s88lnj17NR/OopV79i8Qhgz3WMR0vrsL5zsd45l0lZuu9pSvm5VW47SoxakkJiZC1suw=="], + "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.31.4", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-Ml/yswuys+3QkOMajfXyAGlUKCxEbT3dMyF8vHwQ5mDk9MDm+dqp10It5CrDBkUT/KkVTa6AJI3kb0TXZJZiAA=="], - "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.20.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.1" } }, "sha512-mbrlvOZo5OF3vLhp+3fk9KuL/6J/wsN0QxF6ZFRAHzQ9NkJdtdfARcBeBnkWXGN8inB6YxbTGY1/E4lmBkOpOw=="], + "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.31.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.31.4" } }, "sha512-gHn1RDR4olCnmKpH+G9x+f8R+iKPNVdLlvbFkIpR/stjabZi7fB4Rr5GiHWsulbtxAjdQrNjnVeNdGM4rBxApw=="], - "@tiptap/extension-code": ["@tiptap/extension-code@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-509DHINIA/Gg+eTG7TEkfsS8RUiPLH5xZNyLRT0A1oaoaJmECKfrV6aAm05IdfTyqDqz6LW5pbnX6DdUC4keug=="], + "@tiptap/extension-code": ["@tiptap/extension-code@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-pzi8GNDs5J1DEoO1HNYiJ5WZpgOZzlc/2VIa77mMpEuD4hZxuK0BQzlF/O6Ps/O5P1lGJT4xS0Yowpzb9mD9RA=="], - "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-vKejwBq+Nlj4Ybd3qOyDxIQKzYymdNH+8eXkKwGShk2nfLJIxq69DCyGvmuHgipIO1qcYPJ149UNpGN+YGcdmA=="], + "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-su/B/cfQ1HpiHl6JfJ6wa+RVEptiYsV4dCntE8XQNj2dUcII4y6w6PQbbswOoDrU79uXHsAvpy44215rghG4LA=="], - "@tiptap/extension-document": ["@tiptap/extension-document@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-9vrqdGmRV7bQCSY3NLgu7UhIwgOCDp4sKqMNsoNRX0aZ021QQMTvBQDPkiRkCf7MNsnWrNNnr52PVnULEn3vFQ=="], + "@tiptap/extension-document": ["@tiptap/extension-document@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-vT20u62RWR+BLIyNJ54e24MPUY4zm8VF7tcgJnxQXi7BgVJWcNMtMWWDIkPJ4JNXwfoIznKh3jzYsaYmbCJgQQ=="], - "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.20.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.1" } }, "sha512-K18L9FX4znn+ViPSIbTLOGcIaXMx/gLNwAPE8wPLwswbHhQqdiY1zzdBw6drgOc1Hicvebo2dIoUlSXOZsOEcw=="], + "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.31.4", "", { "peerDependencies": { "@tiptap/extensions": "3.31.4" } }, "sha512-5TbCPCC4RL+QT1NYHjXCYDBHBtVqYOFvFEnk3v98lvXCM2PNL13ofXUfJPuykAVy1OdTAx4DlZOQAD9WKy/IdQ=="], - "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.20.1", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-BeDC6nfOesIMn5pFuUnkEjOxGv80sOJ8uk1mdt9/3Fkvra8cB9NIYYCVtd6PU8oQFmJ8vFqPrRkUWrG5tbqnOg=="], + "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.31.4", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-pKzulkDmolpVt7IP9FSPsC5pKbXQ5pyeqkaAYr8cyOVW+KUObpPRIzAuXvEso8PCjWgwJ1f2qyishOEMw8MbfQ=="], - "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.20.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.1" } }, "sha512-kZOtttV6Ai8VUAgEng3h4WKFbtdSNJ6ps7r0cRPY+FctWhVmgNb/JJwwyC+vSilR7nRENAhrA/Cv/RxVlvLw+g=="], + "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.31.4", "", { "peerDependencies": { "@tiptap/extensions": "3.31.4" } }, "sha512-hBogUAepQH6IQUhaePhPWzQ1Oeu+yqlJVMKO06Eue5m36uRy1PZZAQ780pCGT0SC4R5MH2td1N8EUQ7bupQdDA=="], - "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-9sKpmg/IIdlLXimYWUZ3PplIRcehv4Oc7V1miTqlnAthMzjMqigDkjjgte4JZV67RdnDJTQkRw8TklCAU28Emg=="], + "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-oLNajLyUvRMg1qtzFgKGduygTlpaHFB9PU+M+pUWdA4sa1bRnxS2Y++Ao4lHYopJ7nxatLndrYoCIHkotqkPDQ=="], - "@tiptap/extension-heading": ["@tiptap/extension-heading@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-unudyfQP6FxnyWinxvPqe/51DG91J6AaJm666RnAubgYMCgym+33kBftx4j4A6qf+ddWYbD00thMNKOnVLjAEQ=="], + "@tiptap/extension-heading": ["@tiptap/extension-heading@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-KqlSeLathpdxCc3kVHBCA/RkHvb+V7u5vgiSEu1Cv3L70r7F19COMGODav/k1AGYBgEXKL6lM9cy8cloE5/28g=="], - "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-rjFKFXNntdl0jay8oIGFvvykHlpyQTLmrH3Ag2fj3i8yh6MVvqhtaDomYQbw5sxECd5hBkL+T4n2d2DRuVw/QQ=="], + "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-ws0Kh8kfHL7ESILSXj0HJAXs8G10ewlW1sedXKm8dm0op9L8il+xl8bEJVoqG/jMf77900Fc2CaQldcCGRpF1g=="], - "@tiptap/extension-italic": ["@tiptap/extension-italic@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-ZYRX13Kt8tR8JOzSXirH3pRpi8x30o7LHxZY58uXBdUvr3tFzOkh03qbN523+diidSVeHP/aMd/+IrplHRkQug=="], + "@tiptap/extension-italic": ["@tiptap/extension-italic@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-pftTQBPYZocNDAj/u6OyDIp7YxmN0+N895cQPogJQ6qMHdLiRhzgawiEewJkniyN1w8k3Wx/Etp8pTKrxaOOBQ=="], - "@tiptap/extension-link": ["@tiptap/extension-link@3.20.1", "", { "dependencies": { "linkifyjs": "^4.3.2" }, "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-oYTTIgsQMqpkSnJAuAc+UtIKMuI4lv9e1y4LfI1iYm6NkEUHhONppU59smhxHLzb3Ww7YpDffbp5IgDTAiJztA=="], + "@tiptap/extension-link": ["@tiptap/extension-link@3.31.4", "", { "dependencies": { "linkifyjs": "^4.3.3" }, "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-LLxW3qfeL9gvDdMPVdxYFYZ0zZSjsoIDhOqjJ5U2UfaK3U2iwkKTBgV2qT+FWf3uUHmBRjBZ08q3dRPmWBAD5g=="], - "@tiptap/extension-list": ["@tiptap/extension-list@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-euBRAn0mkV7R2VEE+AuOt3R0j9RHEMFXamPFmtvTo8IInxDClusrm6mJoDjS8gCGAXsQCRiAe1SCQBPgGbOOwg=="], + "@tiptap/extension-list": ["@tiptap/extension-list@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-Wd4YRYxOdf+TtF33/QsRo1RK1CecVxjYGjUBIKNGHAywfh8tghgV4YOUCiV1iJqYt2IBs+RWlIqTmdIPzBrd4A=="], - "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.20.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.1" } }, "sha512-tzgnyTW82lYJkUnadYbatwkI9dLz/OWRSWuFpQPRje/ItmFMWuQ9c9NDD8qLbXPdEYnvrgSAA+ipCD/1G0qA0Q=="], + "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.31.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.31.4" } }, "sha512-ao8XAPvhOrtGFILs+fKtOM91omDSpUC8X19m44gbaq5xJDVpIMZ0rP+NAVUS72G7LskhcHa0bu/Pm022bUVjVw=="], - "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.20.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.1" } }, "sha512-Dr0xsQKx0XPOgDg7xqoWwfv7FFwZ3WeF3eOjqh3rDXlNHMj1v+UW5cj1HLphrsAZHTrVTn2C+VWPJkMZrSbpvQ=="], + "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.31.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.31.4" } }, "sha512-etdkl/YnYfwtALDxecJ+4WYgJAez1fn1vzzZqJklZBpgqiZtny3NxpvWS7/JhsltNG84Wo/oovpfJgVmzhddrw=="], - "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.20.1", "", { "peerDependencies": { "@tiptap/extension-list": "^3.20.1" } }, "sha512-Y+3Ad7OwAdagqdYwCnbqf7/to5ypD4NnUNHA0TXRCs7cAHRA8AdgPoIcGFpaaSpV86oosNU3yfeJouYeroffog=="], + "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.31.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.31.4" } }, "sha512-UNWyF+Dhm08znszIMnT8Y2kJ1lvtiCvUGs1aG7m9cPHxDa7VycWnOqdtXWkc+6xRLNiC0zgWCFWgLLHduV8pRQ=="], - "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-QFrAtXNyv7JSnomMQc1nx5AnG9mMznfbYJAbdOQYVdbLtAzTfiTuNPNbQrufy5ZGtGaHxDCoaygu2QEfzaKG+Q=="], + "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-WZlBgw+XVKXerRlmEsoQ7x1PwSU+dh3X+b70+ViZsLebdfsmmYBIaNDrvIGwG9UQr5eLnddJnZplMSTI2YKs+g=="], - "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.20.1", "", { "peerDependencies": { "@tiptap/extensions": "^3.20.1" } }, "sha512-k+jfbCugYGuIFBdojukgEopGazIMOgHrw46FnyN2X/6ICOIjQP2rh2ObslrsUOsJYoEevxCsNF9hZl1HvWX66g=="], + "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.31.4", "", { "peerDependencies": { "@tiptap/extensions": "3.31.4" } }, "sha512-3SoJopaOzaA9IZHSk9ZXHiO6ib8ErPh7ssRh3bIaxfD+BqRyXcm4hV4yfFXTqrDCnl5FE+DbBRGmeVAVkDko3g=="], - "@tiptap/extension-strike": ["@tiptap/extension-strike@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-EYgyma10lpsY+rwbVQL9u+gA7hBlKLSMFH7Zgd37FSxukOjr+HE8iKPQQ+SwbGejyDsPlLT8Z5Jnuxo5Ng90Pg=="], + "@tiptap/extension-strike": ["@tiptap/extension-strike@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-4MBr63TJIMqxCjE+gAPdlY1IdELgvbAP516K3Ntn/BkcpEbEoPMEYVz+XTxULyHQEuARDO6jsXPPxRXpA74jaw=="], - "@tiptap/extension-text": ["@tiptap/extension-text@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-7PlIbYW8UenV6NPOXHmv8IcmPGlGx6HFq66RmkJAOJRPXPkTLAiX0N8rQtzUJ6jDEHqoJpaHFEHJw0xzW1yF+A=="], + "@tiptap/extension-text": ["@tiptap/extension-text@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-WL2ZRpFksgQcXJN05/UQH09YCH9LlhdLrSEcviASvEH/aAfsKiJlDrouN8PET+YAWK/F5xFc5/Q1z0xj+I23jw=="], - "@tiptap/extension-underline": ["@tiptap/extension-underline@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1" } }, "sha512-fmHvDKzwCgnZUwRreq8tYkb1YyEwgzZ6QQkAQ0CsCRtvRMqzerr3Duz0Als4i8voZTuGDEL3VR6nAJbLAb/wPg=="], + "@tiptap/extension-underline": ["@tiptap/extension-underline@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4" } }, "sha512-0iFGPIqmqGkCrOFh1OPo7Dzv5s86dVN3bZaugsz0jK04otkb8bn04ZDKP2/6Wq+lcK0M9DfJ0QqfW5hC2nBZxQ=="], - "@tiptap/extensions": ["@tiptap/extensions@3.20.1", "", { "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-JRc/v+OBH0qLTdvQ7HvHWTxGJH73QOf1MC0R8NhOX2QnAbg2mPFv1h+FjGa2gfLGuCXBdWQomjekWkUKbC4e5A=="], + "@tiptap/extensions": ["@tiptap/extensions@3.31.4", "", { "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-nIupIne/sHpV2Kw1M4MOmr4+G454KI8BXM5+LWKOU2EpzfALZWVSy7koF9lVRna4Zp5Gv8hfg5Z8kvmrYQvhkw=="], - "@tiptap/pm": ["@tiptap/pm@3.20.1", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.24.1", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-6kCiGLvpES4AxcEuOhb7HR7/xIeJWMjZlb6J7e8zpiIh5BoQc7NoRdctsnmFEjZvC19bIasccshHQ7H2zchWqw=="], + "@tiptap/pm": ["@tiptap/pm@3.31.4", "", { "dependencies": { "prosemirror-changeset": "^2.4.1", "prosemirror-commands": "^1.7.1", "prosemirror-dropcursor": "^1.8.2", "prosemirror-gapcursor": "^1.4.1", "prosemirror-history": "^1.5.0", "prosemirror-inputrules": "^1.5.1", "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.11", "prosemirror-schema-list": "^1.5.1", "prosemirror-state": "^1.4.4", "prosemirror-tables": "^1.8.5", "prosemirror-transform": "^1.12.0", "prosemirror-view": "^1.42.3" } }, "sha512-x7dwth79cQp4QGae66/RJqMDJQv0+n7b7dD7cyFQBWqzPFLJxN/4paHY4qbWedZjNLhRyIOAD9a5q4AYM1zmPA=="], - "@tiptap/react": ["@tiptap/react@3.20.1", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-equals": "^5.3.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.20.1", "@tiptap/extension-floating-menu": "^3.20.1" }, "peerDependencies": { "@tiptap/core": "^3.20.1", "@tiptap/pm": "^3.20.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-UH1NpVpCaZBGB3Yr5N6aTS+rsCMDl9wHfrt/w+6+Gz4KHFZ2OILA82hELxZzhNc1Lmjz8vgCArKcsYql9gbzJA=="], + "@tiptap/react": ["@tiptap/react@3.31.4", "", { "dependencies": { "@types/use-sync-external-store": "^0.0.6", "fast-equals": "^5.3.3", "use-sync-external-store": "^1.4.0" }, "optionalDependencies": { "@tiptap/extension-bubble-menu": "3.31.4", "@tiptap/extension-floating-menu": "3.31.4" }, "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mBvvXgdPhMinT1NPfwHvFK1dFdMXHVWMSeNn0IPj7/zV0XBmOnASkEOwoIvl8NluKYEtpZBE1yA+6pN2enLa5g=="], - "@tiptap/starter-kit": ["@tiptap/starter-kit@3.20.1", "", { "dependencies": { "@tiptap/core": "^3.20.1", "@tiptap/extension-blockquote": "^3.20.1", "@tiptap/extension-bold": "^3.20.1", "@tiptap/extension-bullet-list": "^3.20.1", "@tiptap/extension-code": "^3.20.1", "@tiptap/extension-code-block": "^3.20.1", "@tiptap/extension-document": "^3.20.1", "@tiptap/extension-dropcursor": "^3.20.1", "@tiptap/extension-gapcursor": "^3.20.1", "@tiptap/extension-hard-break": "^3.20.1", "@tiptap/extension-heading": "^3.20.1", "@tiptap/extension-horizontal-rule": "^3.20.1", "@tiptap/extension-italic": "^3.20.1", "@tiptap/extension-link": "^3.20.1", "@tiptap/extension-list": "^3.20.1", "@tiptap/extension-list-item": "^3.20.1", "@tiptap/extension-list-keymap": "^3.20.1", "@tiptap/extension-ordered-list": "^3.20.1", "@tiptap/extension-paragraph": "^3.20.1", "@tiptap/extension-strike": "^3.20.1", "@tiptap/extension-text": "^3.20.1", "@tiptap/extension-underline": "^3.20.1", "@tiptap/extensions": "^3.20.1", "@tiptap/pm": "^3.20.1" } }, "sha512-opqWxL/4OTEiqmVC0wsU4o3JhAf6LycJ2G/gRIZVAIFLljI9uHfpPMTFGxZ5w9IVVJaP5PJysfwW/635kKqkrw=="], + "@tiptap/starter-kit": ["@tiptap/starter-kit@3.31.4", "", { "dependencies": { "@tiptap/core": "3.31.4", "@tiptap/extension-blockquote": "3.31.4", "@tiptap/extension-bold": "3.31.4", "@tiptap/extension-bullet-list": "3.31.4", "@tiptap/extension-code": "3.31.4", "@tiptap/extension-code-block": "3.31.4", "@tiptap/extension-document": "3.31.4", "@tiptap/extension-dropcursor": "3.31.4", "@tiptap/extension-gapcursor": "3.31.4", "@tiptap/extension-hard-break": "3.31.4", "@tiptap/extension-heading": "3.31.4", "@tiptap/extension-horizontal-rule": "3.31.4", "@tiptap/extension-italic": "3.31.4", "@tiptap/extension-link": "3.31.4", "@tiptap/extension-list": "3.31.4", "@tiptap/extension-list-item": "3.31.4", "@tiptap/extension-list-keymap": "3.31.4", "@tiptap/extension-ordered-list": "3.31.4", "@tiptap/extension-paragraph": "3.31.4", "@tiptap/extension-strike": "3.31.4", "@tiptap/extension-text": "3.31.4", "@tiptap/extension-underline": "3.31.4", "@tiptap/extensions": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-u7HIJ9vK6kFe4S4J2CIcDLrhRZzoTMSyU0XxjQ6lUNF7pWW3rMi//pvi8RcsZmxGjyb8CpXAqYgNl7f9WyaUeA=="], - "@tiptap/suggestion": ["@tiptap/suggestion@3.21.0", "", { "peerDependencies": { "@tiptap/core": "^3.21.0", "@tiptap/pm": "^3.21.0" } }, "sha512-ShgbaH2hbCRLV+AaVuSx7a/nzPOSdUeW0TNeuxZfWim62MBcx33qtllja1zOoY2tgGXokEihuzFODx83IyvGfQ=="], + "@tiptap/suggestion": ["@tiptap/suggestion@3.31.4", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } }, "sha512-J9WWMQDAzZOlF9VSdLohpxgrwlB1NscqvNhOPoS3WjwrzQqLj+FAvcchfJQcnybF5mYOtftFZexpOzOt1MqjUA=="], "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], @@ -975,11 +975,11 @@ "@trivago/prettier-plugin-sort-imports": ["@trivago/prettier-plugin-sort-imports@6.0.2", "", { "dependencies": { "@babel/generator": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "javascript-natural-sort": "^0.7.1", "lodash-es": "^4.17.21", "minimatch": "^9.0.0", "parse-imports-exports": "^0.2.4" }, "peerDependencies": { "@vue/compiler-sfc": "3.x", "prettier": "2.x - 3.x", "prettier-plugin-ember-template-tag": ">= 2.0.0", "prettier-plugin-svelte": "3.x", "svelte": "4.x || 5.x" }, "optionalPeers": ["@vue/compiler-sfc", "prettier-plugin-ember-template-tag", "prettier-plugin-svelte", "svelte"] }, "sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA=="], - "@trpc/client": ["@trpc/client@11.11.0", "", { "peerDependencies": { "@trpc/server": "11.11.0", "typescript": ">=5.7.2" } }, "sha512-tIPeetFO8GT/o0In+Lk5JA3f29m8qCBSaKNatQdAx6BOfZFjpqHOaoAsCmE/MdUu9AVhPRPorcoqUlZUdDc5gA=="], + "@trpc/client": ["@trpc/client@11.19.0", "", { "peerDependencies": { "@trpc/server": "11.19.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-0MKkPq6MejsKB5Opca1Rl22KVIaqo2+A1EiXyZ8EGUsl9TLrPdpGn+Usux20TZKFwnSC2+wI/WilqNJaP4ODfw=="], - "@trpc/react-query": ["@trpc/react-query@11.11.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.11.0", "@trpc/server": "11.11.0", "react": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-zAZj4Pj6ZuMWZ2JG1nZ1GWQGH14SrkDYgIsQQH2az++Zig58bPk9E+EcAUnHL/zdYp74qDXlABQB2vMU/oDipg=="], + "@trpc/react-query": ["@trpc/react-query@11.19.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.19.0", "@trpc/server": "11.19.0", "react": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-TrqZBa/6weXX27mf0P2dMCI65duqO3B/wf9BkP1MezUWSUg7SRGJrIv6K8vjgjeHdafFBI1mmcqPEYXHF4AlVQ=="], - "@trpc/server": ["@trpc/server@11.11.0", "", { "peerDependencies": { "typescript": ">=5.7.2" } }, "sha512-5CBK5Oit8qv2k2zgIHrUsa12tnCIVpZIJLvMa4n2tejuWz/d7Qb1B1v9zZioapr7y8sEvnk8zPcNnxcT2LlQxg=="], + "@trpc/server": ["@trpc/server@11.19.0", "", { "peerDependencies": { "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-7C1goiDurz82yFKtZUbEzjXd0Rg/jyisaIZQhdvus+1l7E6mwcEYZXjZ1US/HF8kOyz1LERL8UN3bcboJtjcyQ=="], "@types/better-sqlite3": ["@types/better-sqlite3@7.6.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA=="], @@ -999,19 +999,13 @@ "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], - "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="], - - "@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], - "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - "@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="], - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], "@types/node": ["@types/node@24.19.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ=="], - "@types/pg": ["@types/pg@8.18.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q=="], + "@types/pg": ["@types/pg@8.23.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A=="], "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], @@ -1091,7 +1085,7 @@ "aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - "axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "axios": ["axios@1.20.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.6", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg=="], "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], @@ -1109,17 +1103,17 @@ "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], - "bluebird": ["bluebird@3.4.7", "", {}, "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="], + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], "bmp-js": ["bmp-js@0.1.0", "", {}, "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="], "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], - "border-beam": ["border-beam@1.0.1", "", { "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-kswSYT8zRmt5en+wZMtJAbM8RjJglqSKwyRuQZWXnMHQsBwJisaznTfhD8SWvWJZKAtGbSkE2q/wY7seiNDmcw=="], + "border-beam": ["border-beam@1.4.1", "", { "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-YyugmKjrhkg1PBC1ZKX7JvFo/zYzha6NXOq24VWrnvBYmDRvGCgFS9oxZoKJ+oS9Kn436l1etYGlAdGiWK+3ag=="], "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "bson": ["bson@7.2.0", "", {}, "sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ=="], + "bson": ["bson@7.3.3", "", {}, "sha512-oz3LwE3qGEhTCSyhzQRLY3Bj1NLOsjFMf6tcmY5J8M+3R7EVcmoBfSHWvjUK3yXCLDUsGpIuB3aQL4nDZ1EV/g=="], "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], @@ -1227,8 +1221,6 @@ "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], - "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], - "cronbake": ["cronbake@0.4.0", "", {}, "sha512-xxRy6KNi858/3RuBXHziRgcntSCXaT9FgEKkY8zh/72/yPD+8IpTfUWYxmwjFcYsce4jDvcunr7tXCq4vz5Hrw=="], "cross-dirname": ["cross-dirname@0.1.0", "", {}, "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q=="], @@ -1239,7 +1231,7 @@ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], - "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + "date-fns": ["date-fns@4.4.0", "", {}, "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w=="], "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], @@ -1261,8 +1253,6 @@ "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], @@ -1273,7 +1263,7 @@ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], + "diff": ["diff@9.0.0", "", {}, "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw=="], "dingbat-to-unicode": ["dingbat-to-unicode@1.0.1", "", {}, "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w=="], @@ -1289,9 +1279,9 @@ "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], - "drizzle-kit": ["drizzle-kit@0.31.9", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-GViD3IgsXn7trFyBUUHyTFBpH/FsHTxYJ66qdbVggxef4UBPHRYxQaRzYLTuekYnk9i5FIEL9pbBIwMqX/Uwrg=="], + "drizzle-kit": ["drizzle-kit@0.31.11", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "tsx": "^4.21.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-YCYqxTLIB2OCqf6w9/Vef13baBVbwQIPcbT4Y56AfO6B9ajZhDhD8Jkveg/hJvT/iuMloKD/IYYkyMMNhr7Kqg=="], - "drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], + "drizzle-orm": ["drizzle-orm@0.45.3", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@netlify/db": ">=0.4.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@netlify/db", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-CAloER21cDdcgZ1OmjrZX82EeRNsdP+y0onX/eyoYDaYzki/adrAa91lzM5jWh7zZPK4qUbw/6LGv9J+A+uizA=="], "duck": ["duck@0.1.12", "", { "dependencies": { "underscore": "^1.13.1" } }, "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg=="], @@ -1313,7 +1303,7 @@ "electron-publish": ["electron-publish@26.8.1", "", { "dependencies": { "@types/fs-extra": "^9.0.11", "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "form-data": "^4.0.5", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } }, "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w=="], - "electron-updater": ["electron-updater@6.8.3", "", { "dependencies": { "builder-util-runtime": "9.5.1", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, "sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ=="], + "electron-updater": ["electron-updater@6.8.9", "", { "dependencies": { "builder-util-runtime": "9.7.0", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, "sha512-ZhVxM9iGONUpZGI1FxdMRgJjUFXi7AYGVa5PwKlO1tV1/4zDxQmfKpXOHVztKrd6L9rLcFjERvi1Mf2vxyTkig=="], "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], @@ -1323,9 +1313,7 @@ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - "enhanced-resolve": ["enhanced-resolve@5.20.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ=="], - - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "enhanced-resolve": ["enhanced-resolve@5.26.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw=="], "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], @@ -1349,8 +1337,6 @@ "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], @@ -1393,7 +1379,7 @@ "filelist": ["filelist@1.0.6", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA=="], - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "follow-redirects": ["follow-redirects@1.16.1", "", { "peerDependencies": { "debug": "*" }, "optionalPeers": ["debug"] }, "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -1411,6 +1397,8 @@ "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "gaxios": ["gaxios@7.1.3", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2", "rimraf": "^5.0.1" } }, "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ=="], @@ -1499,7 +1487,7 @@ "iconv-corefoundation": ["iconv-corefoundation@1.1.7", "", { "dependencies": { "cli-truncate": "^2.1.0", "node-addon-api": "^1.6.3" }, "os": "darwin" }, "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ=="], - "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "iconv-lite": ["iconv-lite@0.7.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ=="], "idb-keyval": ["idb-keyval@6.2.2", "", {}, "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg=="], @@ -1569,9 +1557,9 @@ "javascript-natural-sort": ["javascript-natural-sort@0.7.1", "", {}, "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="], - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], - "joi": ["joi@18.0.2", "", { "dependencies": { "@hapi/address": "^5.1.1", "@hapi/formula": "^3.0.2", "@hapi/hoek": "^11.0.7", "@hapi/pinpoint": "^2.0.1", "@hapi/tlds": "^1.1.1", "@hapi/topo": "^6.0.2", "@standard-schema/spec": "^1.0.0" } }, "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA=="], + "joi": ["joi@18.2.9", "", { "dependencies": { "@hapi/address": "^5.1.1", "@hapi/formula": "^3.0.2", "@hapi/hoek": "^11.0.7", "@hapi/pinpoint": "^2.0.1", "@hapi/tlds": "^1.1.1", "@hapi/topo": "^6.0.2", "@standard-schema/spec": "^1.1.0" } }, "sha512-2mD929bUVKUhOLQQEVhlf6EZ0Mlo0DeRb5MO7cViR9AXLtBauuccEtB1py9Ocxpo/P7ucnh442iY/iOwrh3IQw=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], @@ -1607,65 +1595,63 @@ "lazy-val": ["lazy-val@1.0.5", "", {}, "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q=="], - "lefthook": ["lefthook@2.1.4", "", { "optionalDependencies": { "lefthook-darwin-arm64": "2.1.4", "lefthook-darwin-x64": "2.1.4", "lefthook-freebsd-arm64": "2.1.4", "lefthook-freebsd-x64": "2.1.4", "lefthook-linux-arm64": "2.1.4", "lefthook-linux-x64": "2.1.4", "lefthook-openbsd-arm64": "2.1.4", "lefthook-openbsd-x64": "2.1.4", "lefthook-windows-arm64": "2.1.4", "lefthook-windows-x64": "2.1.4" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-JNfJ5gAn0KADvJ1I6/xMcx70+/6TL6U9gqGkKvPw5RNMfatC7jIg0Evl97HN846xmfz959BV70l8r3QsBJk30w=="], + "lefthook": ["lefthook@2.1.17", "", { "optionalDependencies": { "lefthook-darwin-arm64": "2.1.17", "lefthook-darwin-x64": "2.1.17", "lefthook-freebsd-arm64": "2.1.17", "lefthook-freebsd-x64": "2.1.17", "lefthook-linux-arm64": "2.1.17", "lefthook-linux-x64": "2.1.17", "lefthook-openbsd-arm64": "2.1.17", "lefthook-openbsd-x64": "2.1.17", "lefthook-windows-arm64": "2.1.17", "lefthook-windows-x64": "2.1.17" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-UWpD0VvZNIA2eA/+x4DvFlIT7uxH7aPrPrShE6nsIrX5qHJXxgDkoslAzF73X/YL2o0/9zDw3aOfpr98XchKFw=="], - "lefthook-darwin-arm64": ["lefthook-darwin-arm64@2.1.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BUAAE9+rUrjr39a+wH/1zHmGrDdwUQ2Yq/z6BQbM/yUb9qtXBRcQ5eOXxApqWW177VhGBpX31aqIlfAZ5Q7wzw=="], + "lefthook-darwin-arm64": ["lefthook-darwin-arm64@2.1.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BHF3rD0qmwBulLLe5EdPYQVGvPibZZqHnSPpWT+LgPyYk2+GxtScLJvSD/NgCOFU49Fzs6XgOHg/zlfXcdKFfQ=="], - "lefthook-darwin-x64": ["lefthook-darwin-x64@2.1.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-K1ncIMEe84fe+ss1hQNO7rIvqiKy2TJvTFpkypvqFodT7mJXZn7GLKYTIXdIuyPAYthRa9DwFnx5uMoHwD2F1Q=="], + "lefthook-darwin-x64": ["lefthook-darwin-x64@2.1.17", "", { "os": "darwin", "cpu": "x64" }, "sha512-wRgqAKw2UUQz8eR5pBRo1Cfk2Jaao3u5b6n8EsLcJ6bCVP0pLLhFrNjE1UsTCOlriN7+GgI9SC0l1+zr2eVbTA=="], - "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@2.1.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-PVUhjOhVN71YaYsVdQyNbFZ4a2jFB2Tg5hKrrn9kaWpx64aLz/XivLjwr8sEuTaP1GRlEWBpW6Bhrcsyo39qFw=="], + "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@2.1.17", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-pECdcOu/oImbaQyBbmnQyNhdpu1L/bUageBoHSesDB3+2vyHEd6Q3buTUETrI+/gsL993FK5jHnyzsY1X2IFsQ=="], - "lefthook-freebsd-x64": ["lefthook-freebsd-x64@2.1.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ZWV9o/LeyWNEBoVO+BhLqxH3rGTba05nkm5NvMjEFSj7LbUNUDbQmupZwtHl1OMGJO66eZP0CalzRfUH6GhBxQ=="], + "lefthook-freebsd-x64": ["lefthook-freebsd-x64@2.1.17", "", { "os": "freebsd", "cpu": "x64" }, "sha512-+z+GPl4mxZC0AcJICDazAWxExz4f8JPW7rvGUQ4Ao8flfmNUoyenrtsx9PUp00KdI+8zPjIujuLMSIEN52y1hQ=="], - "lefthook-linux-arm64": ["lefthook-linux-arm64@2.1.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-iWN0pGnTjrIvNIcSI1vQBJXUbybTqJ5CLMniPA0olabMXQfPDrdMKVQe+mgdwHK+E3/Y0H0ZNL3lnOj6Sk6szA=="], + "lefthook-linux-arm64": ["lefthook-linux-arm64@2.1.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-q01FgqafSJo4WQ6rHj4J1AUe8WLlReZ4Sx5qIjdXMjFuQsbLKlaWUWnJMmZkQQwsi195zDGtOycU44c0vozPiw=="], - "lefthook-linux-x64": ["lefthook-linux-x64@2.1.4", "", { "os": "linux", "cpu": "x64" }, "sha512-96bTBE/JdYgqWYAJDh+/e/0MaxJ25XTOAk7iy/fKoZ1ugf6S0W9bEFbnCFNooXOcxNVTan5xWKfcjJmPIKtsJA=="], + "lefthook-linux-x64": ["lefthook-linux-x64@2.1.17", "", { "os": "linux", "cpu": "x64" }, "sha512-NyWgJyhmkPspgnhNSvkusKNjCyOOnwiE/IFKkAFkMNfTlst0Dv3UVNxe0e/DlgsGbbFLVieFKhwd4twI2RKoOQ=="], - "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@2.1.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-oYUoK6AIJNEr9lUSpIMj6g7sWzotvtc3ryw7yoOyQM6uqmEduw73URV/qGoUcm4nqqmR93ZalZwR2r3Gd61zvw=="], + "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@2.1.17", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zhIY2sel/yHeIJbQfnlAx+xnIJf6Yh0/RG/Ont33VzCXrzMf4jczQwEAu6VdAD7Ms/Tiv3b9t8aTk7LrU4byJA=="], - "lefthook-openbsd-x64": ["lefthook-openbsd-x64@2.1.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/Dv9Jcm68y9cggr1PhyUhOabBGP9+hzQPoiyOhKks7y9qrJl79A8XfG6LHekSuYc2VpiSu5wdnnrE1cj2nfTg=="], + "lefthook-openbsd-x64": ["lefthook-openbsd-x64@2.1.17", "", { "os": "openbsd", "cpu": "x64" }, "sha512-aHGnjzyyFBOQEJjmie7px67nNVRUJ+DUG2R/BOSABdH/sGwVYLg6GG0pjnSUkWPoIv3T+CFoG9YcGYO+h3MLoQ=="], - "lefthook-windows-arm64": ["lefthook-windows-arm64@2.1.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-hSww7z+QX4YMnw2lK7DMrs3+w7NtxksuMKOkCKGyxUAC/0m1LAICo0ZbtdDtZ7agxRQQQ/SEbzFRhU5ysNcbjA=="], + "lefthook-windows-arm64": ["lefthook-windows-arm64@2.1.17", "", { "os": "win32", "cpu": "arm64" }, "sha512-NN6Ke+O019lhlGAbrbFDf719E4vGt0Y0O30Gr5Yoe3ZdFW6qQFOlP+gVq/shFvJ7iw6rFA/xyOu6wgM+Lytimg=="], - "lefthook-windows-x64": ["lefthook-windows-x64@2.1.4", "", { "os": "win32", "cpu": "x64" }, "sha512-eE68LwnogxwcPgGsbVGPGxmghyMGmU9SdGwcc+uhGnUxPz1jL89oECMWJNc36zjVK24umNeDAzB5KA3lw1MuWw=="], + "lefthook-windows-x64": ["lefthook-windows-x64@2.1.17", "", { "os": "win32", "cpu": "x64" }, "sha512-yV07jCYAzqr4UoMFtVs5frVgKzxppWd/tjr6OpXpxYqB47fomx3w9vxgEOlb2opODFTFm2wdeESLfwVO9Cy/DQ=="], "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], - "lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], - - "linkifyjs": ["linkifyjs@4.3.2", "", {}, "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA=="], + "linkifyjs": ["linkifyjs@4.3.3", "", {}, "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg=="], "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], - "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], @@ -1705,15 +1691,13 @@ "lru_map": ["lru_map@0.4.1", "", {}, "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg=="], - "lucide-react": ["lucide-react@1.8.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw=="], + "lucide-react": ["lucide-react@1.52.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-TUgPtl5ZI9WgxOcbu4ckaC5B3l1qxPQrCMgb6OfUB9owx/OvSJfcf93SMgUWAxRw5/1XDfh9uI5F5iNGXCcGDQ=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "make-fetch-happen": ["make-fetch-happen@14.0.3", "", { "dependencies": { "@npmcli/agent": "^3.0.0", "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "ssri": "^12.0.0" } }, "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ=="], - "mammoth": ["mammoth@1.12.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.6", "argparse": "~1.0.3", "base64-js": "^1.5.1", "bluebird": "~3.4.0", "dingbat-to-unicode": "^1.0.1", "jszip": "^3.7.1", "lop": "^0.4.2", "path-is-absolute": "^1.0.0", "underscore": "^1.13.1", "xmlbuilder": "^10.0.0" }, "bin": { "mammoth": "bin/mammoth" } }, "sha512-cwnK1RIcRdDMi2HRx2EXGYlxqIEh0Oo3bLhorgnsVJi2UkbX1+jKxuBNR9PC5+JaX7EkmJxFPmo6mjLpqShI2w=="], - - "markdown-it": ["markdown-it@14.1.1", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA=="], + "mammoth": ["mammoth@1.13.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.6", "argparse": "~1.0.3", "base64-js": "^1.5.1", "dingbat-to-unicode": "^1.0.1", "jszip": "^3.7.1", "lop": "^0.4.2", "underscore": "^1.13.1", "xmlbuilder": "^10.0.0" }, "bin": { "mammoth": "bin/mammoth" } }, "sha512-2cawcYFcP7ISfXbBcL9lmVgTNWo88v/52ND1gnywHtVT/pX0//puPnf0iMPV9ZgmuvNOE+zkIhDgZ9M2c2dDDg=="], "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], @@ -1751,8 +1735,6 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], - "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], "meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], @@ -1847,9 +1829,9 @@ "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], - "mongodb": ["mongodb@7.1.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.1.1", "mongodb-connection-string-url": "^7.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg=="], + "mongodb": ["mongodb@7.7.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.5.0", "bson": "^7.3.2", "mongodb-connection-string-url": "^7.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": "^7.2.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-XG1xXEqyouAV8GCb3PuRaujofeXKpAJAPvXYWZgHl6Dz4QHSJ1nRLl0+GpqaLTwKvC0RFE9truOur34RNFY1nw=="], - "mongodb-connection-string-url": ["mongodb-connection-string-url@7.0.1", "", { "dependencies": { "@types/whatwg-url": "^13.0.0", "whatwg-url": "^14.1.0" } }, "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ=="], + "mongodb-connection-string-url": ["mongodb-connection-string-url@7.0.2", "", { "dependencies": { "@types/whatwg-url": "^13.0.0", "whatwg-url": "^14.1.0" } }, "sha512-ZoS07RoFqpKYQwAk59qmrx8+jJHNHU30UjlU96QktiGn1ltvDr+vCznLX5DiUBLEpMAHatHNWV1nM/74ul66kA=="], "motion": ["motion@12.35.0", "", { "dependencies": { "framer-motion": "^12.35.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-BQUhNUIGvUcwXCzwmnT1JpjUqab34lIwxHnXUyWRht1WC1vAyp7/4qgMiUXxN3K6hgUhyoR+HNnLeQMwUZjVjw=="], @@ -1859,11 +1841,11 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "mysql2": ["mysql2@3.20.0", "", { "dependencies": { "aws-ssl-profiles": "^1.1.2", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.7.2", "long": "^5.3.2", "lru.min": "^1.1.4", "named-placeholders": "^1.1.6", "sql-escaper": "^1.3.3" }, "peerDependencies": { "@types/node": ">= 8" } }, "sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg=="], + "mysql2": ["mysql2@3.24.5", "", { "dependencies": { "aws-ssl-profiles": "^1.1.2", "generate-function": "^2.3.1", "iconv-lite": "^0.7.3", "long": "^5.3.2", "lru.min": "^1.1.4", "named-placeholders": "^1.1.6", "sql-escaper": "^1.5.1" }, "peerDependencies": { "@types/node": ">= 8" } }, "sha512-X6Ujsr2QSkkLpkQGjxzpKRAPn9nu4axpR63ntBzquFVEvPOArgbUQ1sJjFKI7hnaYtiVZxa17Z7q18KSubW0IQ=="], "named-placeholders": ["named-placeholders@1.1.6", "", { "dependencies": { "lru.min": "^1.1.0" } }, "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "nanoid": ["nanoid@3.3.20", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ=="], "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], @@ -1959,17 +1941,17 @@ "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], - "pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="], + "pg": ["pg@8.23.1", "", { "dependencies": { "pg-connection-string": "^2.14.1", "pg-pool": "^3.14.0", "pg-protocol": "^1.16.1", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.1" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ=="], - "pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="], + "pg-cloudflare": ["pg-cloudflare@1.4.1", "", {}, "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ=="], - "pg-connection-string": ["pg-connection-string@2.12.0", "", {}, "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ=="], + "pg-connection-string": ["pg-connection-string@2.14.1", "", {}, "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA=="], "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - "pg-pool": ["pg-pool@3.13.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA=="], + "pg-pool": ["pg-pool@3.14.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw=="], - "pg-protocol": ["pg-protocol@1.13.0", "", {}, "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w=="], + "pg-protocol": ["pg-protocol@1.16.1", "", {}, "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg=="], "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], @@ -1983,7 +1965,7 @@ "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], - "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "postcss": ["postcss@8.5.29", "", { "dependencies": { "nanoid": "^3.3.19", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ=="], "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], @@ -1999,7 +1981,7 @@ "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], - "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + "prettier": ["prettier@3.9.9", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg=="], "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.2", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA=="], @@ -2015,15 +1997,13 @@ "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], - "prosemirror-changeset": ["prosemirror-changeset@2.4.0", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng=="], - - "prosemirror-collab": ["prosemirror-collab@1.3.1", "", { "dependencies": { "prosemirror-state": "^1.0.0" } }, "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ=="], + "prosemirror-changeset": ["prosemirror-changeset@2.4.4", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-Gyuz9jYdrAeA9I7AholyOes9KUmv/lEwsC5O9s5xF5VB3EgTPsXMGUxz4+H1B+wKVPdZbvRcg1Cp3x8qX+8ofA=="], "prosemirror-commands": ["prosemirror-commands@1.7.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.10.2" } }, "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w=="], "prosemirror-dropcursor": ["prosemirror-dropcursor@1.8.2", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0", "prosemirror-view": "^1.1.0" } }, "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw=="], - "prosemirror-gapcursor": ["prosemirror-gapcursor@1.4.0", "", { "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-view": "^1.0.0" } }, "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ=="], + "prosemirror-gapcursor": ["prosemirror-gapcursor@1.4.1", "", { "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-view": "^1.0.0" } }, "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw=="], "prosemirror-history": ["prosemirror-history@1.5.0", "", { "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.31.0", "rope-sequence": "^1.3.0" } }, "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg=="], @@ -2031,13 +2011,7 @@ "prosemirror-keymap": ["prosemirror-keymap@1.2.3", "", { "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" } }, "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw=="], - "prosemirror-markdown": ["prosemirror-markdown@1.13.4", "", { "dependencies": { "@types/markdown-it": "^14.0.0", "markdown-it": "^14.0.0", "prosemirror-model": "^1.25.0" } }, "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw=="], - - "prosemirror-menu": ["prosemirror-menu@1.3.0", "", { "dependencies": { "crelt": "^1.0.0", "prosemirror-commands": "^1.0.0", "prosemirror-history": "^1.0.0", "prosemirror-state": "^1.0.0" } }, "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg=="], - - "prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], - - "prosemirror-schema-basic": ["prosemirror-schema-basic@1.2.4", "", { "dependencies": { "prosemirror-model": "^1.25.0" } }, "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ=="], + "prosemirror-model": ["prosemirror-model@1.25.12", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-Ue2gTmXMa7EhpLNhC7J+h4+ykD8ha12K6rrZFFKKJHBForfIStw5gJ6Zrf1mqqAa9NmpmEB4wp9bKmA4eUVjWg=="], "prosemirror-schema-list": ["prosemirror-schema-list@1.5.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.7.3" } }, "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q=="], @@ -2045,20 +2019,16 @@ "prosemirror-tables": ["prosemirror-tables@1.8.5", "", { "dependencies": { "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.4", "prosemirror-state": "^1.4.4", "prosemirror-transform": "^1.10.5", "prosemirror-view": "^1.41.4" } }, "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw=="], - "prosemirror-trailing-node": ["prosemirror-trailing-node@3.0.0", "", { "dependencies": { "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" }, "peerDependencies": { "prosemirror-model": "^1.22.1", "prosemirror-state": "^1.4.2", "prosemirror-view": "^1.33.8" } }, "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ=="], - - "prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + "prosemirror-transform": ["prosemirror-transform@1.12.2", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-PE/aY0HEY4zczvmqrilgkUK/WautF0chvMqkmM/iN5/aPHvwrCWaQZjS6CIZp+K84YrvPFqrL+YArrfJX8xX7g=="], - "prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + "prosemirror-view": ["prosemirror-view@1.42.6", "", { "dependencies": { "prosemirror-model": "^1.25.12", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-3g25f6hKV2bBxo3puH3EcYWmmVNSH0iWmNsMVT7sugDSpA025jgpOLarcDWr39SdzPjYMaiYtRdNtXialPSjEQ=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], @@ -2073,7 +2043,7 @@ "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - "react-hook-form": ["react-hook-form@7.71.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA=="], + "react-hook-form": ["react-hook-form@7.89.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-vKcoCfy8RKZDrhSdqsRFp0uEOdS1AhLjOL6hR7Wmfzg1akNxEhaPf5WORx8SgEQPVXakdDyDkqQp+KNxVnnPHg=="], "react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], @@ -2125,7 +2095,7 @@ "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - "resumable-stream": ["resumable-stream@2.2.10", "", {}, "sha512-pSJtiDVkPgirq4x+e+gu67IEkUVYGu1cPgW5AnTHCfYGRfIUjS3d4pj7VGveXmYWb9hy6yIMFTM4YzK7rqj14A=="], + "resumable-stream": ["resumable-stream@2.2.13", "", {}, "sha512-qy1ZZUP7sFKGXSx7OdbjU3f07VfSM7CghOlUaKT+35AuADX0sAYndmeCb5kVwgi4MSfkZZiL4yrdxWX1xx/Lnw=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], @@ -2203,7 +2173,7 @@ "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "source-map-js": ["source-map-js@1.2.2", "", {}, "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw=="], "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], @@ -2215,19 +2185,19 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "sql-escaper": ["sql-escaper@1.3.3", "", {}, "sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw=="], + "sql-escaper": ["sql-escaper@1.5.2", "", {}, "sha512-6CKD38c31SENivxOADeMNLdukOnUxUcflKtzVWzace7Riv1v7cAEym5Cx9Q7gYZ3ezIJI7ZpqecQq8cqNeSSFg=="], - "sqlite-vec": ["sqlite-vec@0.1.7-alpha.2", "", { "optionalDependencies": { "sqlite-vec-darwin-arm64": "0.1.7-alpha.2", "sqlite-vec-darwin-x64": "0.1.7-alpha.2", "sqlite-vec-linux-arm64": "0.1.7-alpha.2", "sqlite-vec-linux-x64": "0.1.7-alpha.2", "sqlite-vec-windows-x64": "0.1.7-alpha.2" } }, "sha512-rNgRCv+4V4Ed3yc33Qr+nNmjhtrMnnHzXfLVPeGb28Dx5mmDL3Ngw/Wk8vhCGjj76+oC6gnkmMG8y73BZWGBwQ=="], + "sqlite-vec": ["sqlite-vec@0.1.9", "", { "optionalDependencies": { "sqlite-vec-darwin-arm64": "0.1.9", "sqlite-vec-darwin-x64": "0.1.9", "sqlite-vec-linux-arm64": "0.1.9", "sqlite-vec-linux-x64": "0.1.9", "sqlite-vec-windows-x64": "0.1.9" } }, "sha512-L7XJWRIBNvR9O5+vh1FQ+IGkh/3D2AzVksW5gdtk28m78Hy8skFD0pqReKH1Yp0/BUKRGcffgKvyO/EON5JXpA=="], - "sqlite-vec-darwin-arm64": ["sqlite-vec-darwin-arm64@0.1.7-alpha.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-raIATOqFYkeCHhb/t3r7W7Cf2lVYdf4J3ogJ6GFc8PQEgHCPEsi+bYnm2JT84MzLfTlSTIdxr4/NKv+zF7oLPw=="], + "sqlite-vec-darwin-arm64": ["sqlite-vec-darwin-arm64@0.1.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jSsZpE42OfBkGL/ItyJTVCUwl6o6Ka3U5rc4j+UBDIQzC1ulSSKMEhQLthsOnF/MdAf1MuAkYhkdKmmcjaIZQg=="], - "sqlite-vec-darwin-x64": ["sqlite-vec-darwin-x64@0.1.7-alpha.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-jeZEELsQjjRsVojsvU5iKxOvkaVuE+JYC8Y4Ma8U45aAERrDYmqZoHvgSG7cg1PXL3bMlumFTAmHynf1y4pOzA=="], + "sqlite-vec-darwin-x64": ["sqlite-vec-darwin-x64@0.1.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-KDlVyqQT7pnOhU1ymB9gs7dMbSoVmKHitT+k1/xkjarcX8bBqPxWrGlK/R+C5WmWkfvWwyq5FfXfiBYCBs6PlA=="], - "sqlite-vec-linux-arm64": ["sqlite-vec-linux-arm64@0.1.7-alpha.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-6Spj4Nfi7tG13jsUG+W7jnT0bCTWbyPImu2M8nWp20fNrd1SZ4g3CSlDAK8GBdavX7wRlbBHCZ+BDa++rbDewA=="], + "sqlite-vec-linux-arm64": ["sqlite-vec-linux-arm64@0.1.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-5wXVJ9c9kR4CHm/wVqXb/R+XUHTdpZ4nWbPHlS+gc9qQFVHs92Km4bPnCKX4rtcPMzvNis+SIzMJR1SCEwpuUw=="], - "sqlite-vec-linux-x64": ["sqlite-vec-linux-x64@0.1.7-alpha.2", "", { "os": "linux", "cpu": "x64" }, "sha512-IcgrbHaDccTVhXDf8Orwdc2+hgDLAFORl6OBUhcvlmwswwBP1hqBTSEhovClG4NItwTOBNgpwOoQ7Qp3VDPWLg=="], + "sqlite-vec-linux-x64": ["sqlite-vec-linux-x64@0.1.9", "", { "os": "linux", "cpu": "x64" }, "sha512-w3tCH8xK2finW8fQJ/m8uqKodXUZ9KAuAar2UIhz4BHILfpE0WM/MTGCRfa7RjYbrYim5Luk3guvMOGI7T7JQA=="], - "sqlite-vec-windows-x64": ["sqlite-vec-windows-x64@0.1.7-alpha.2", "", { "os": "win32", "cpu": "x64" }, "sha512-TRP6hTjAcwvQ6xpCZvjP00pdlda8J38ArFy1lMYhtQWXiIBmWnhMaMbq4kaeCYwvTTddfidatRS+TJrwIKB/oQ=="], + "sqlite-vec-windows-x64": ["sqlite-vec-windows-x64@0.1.9", "", { "os": "win32", "cpu": "x64" }, "sha512-y3gEIyy/17bq2QFPQOWLE68TYWcRZkBQVA2XLrTPHNTOp55xJi/BBBmOm40tVMDMjtP+Elpk6UBUXdaq+46b0Q=="], "ssri": ["ssri@12.0.0", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ=="], @@ -2269,9 +2239,9 @@ "tailwind-variants": ["tailwind-variants@3.2.2", "", { "peerDependencies": { "tailwind-merge": ">=3.0.0", "tailwindcss": "*" }, "optionalPeers": ["tailwind-merge"] }, "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg=="], - "tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], + "tailwindcss": ["tailwindcss@4.3.3", "", {}, "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ=="], - "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], "tar": ["tar@7.5.10", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw=="], @@ -2315,9 +2285,11 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tsx": ["tsx@4.23.15", "", { "dependencies": { "esbuild": "~0.28.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw=="], + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - "turndown": ["turndown@7.2.2", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ=="], + "turndown": ["turndown@7.2.4", "", { "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ=="], "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], @@ -2327,8 +2299,6 @@ "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], "underscore": ["underscore@1.13.8", "", {}, "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ=="], @@ -2385,7 +2355,7 @@ "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], - "wait-on": ["wait-on@9.0.4", "", { "dependencies": { "axios": "^1.13.5", "joi": "^18.0.2", "lodash": "^4.17.23", "minimist": "^1.2.8", "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" } }, "sha512-k8qrgfwrPVJXTeFY8tl6BxVHiclK11u72DVKhpybHfUL/K6KM4bdyK9EhIVYGytB5MJe/3lq4Tf0hrjM+pvJZQ=="], + "wait-on": ["wait-on@9.5.1", "", { "dependencies": { "axios": "^1.20.0", "joi": "^18.2.9", "lodash": "^4.18.1", "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" } }, "sha512-bOtj1wRY6u+GPnNskZLcgZNHOaL5NC4+5hRCbEpVoVX6MbMrCLCqIBM2bjsAfrgst3ZC0siIo7vLb4LuYFfIow=="], "wasm-feature-detect": ["wasm-feature-detect@1.8.0", "", {}, "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ=="], @@ -2503,6 +2473,8 @@ "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "@malept/flatpak-bundler/lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "@npmcli/agent/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "@radix-ui/react-collection/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], @@ -2531,15 +2503,17 @@ "@slack/web-api/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@slack/web-api/axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" }, "bundled": true }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" }, "bundled": true }, "sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA=="], - "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -2551,8 +2525,6 @@ "@types/keyv/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], - "@types/pg/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], - "@types/plist/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], "@types/plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], @@ -2569,8 +2541,14 @@ "app-builder-lib/ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + "app-builder-lib/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "app-builder-lib/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "axios/form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], + + "axios/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "cacache/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -2587,6 +2565,8 @@ "concat-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "cosmiconfig-typescript-loader/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "dir-compare/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], @@ -2597,8 +2577,12 @@ "electron/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], + "electron-updater/builder-util-runtime": ["builder-util-runtime@9.7.0", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw=="], + "electron-winstaller/fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + "electron-winstaller/lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "extract-zip/yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], @@ -2627,8 +2611,6 @@ "lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -2657,6 +2639,36 @@ "proper-lockfile/retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "prosemirror-commands/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-commands/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-dropcursor/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-dropcursor/prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + + "prosemirror-history/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-history/prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + + "prosemirror-inputrules/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-schema-list/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-schema-list/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-state/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-state/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-state/prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + + "prosemirror-tables/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-tables/prosemirror-transform": ["prosemirror-transform@1.11.0", "", { "dependencies": { "prosemirror-model": "^1.21.0" } }, "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw=="], + + "prosemirror-tables/prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + "react-video-kit/tailwind-merge": ["tailwind-merge@2.6.1", "", {}, "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ=="], "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], @@ -2683,7 +2695,7 @@ "tiny-async-pool/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "unzipper/bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + "tsx/esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], "unzipper/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], @@ -2769,6 +2781,10 @@ "@slack/web-api/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "@slack/web-api/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@slack/web-api/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@types/better-sqlite3/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -2777,8 +2793,6 @@ "@types/keyv/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "@types/pg/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "@types/plist/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@types/responselike/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -2793,6 +2807,10 @@ "app-builder-lib/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], + "axios/form-data/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "axios/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], @@ -2827,14 +2845,80 @@ "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "next/postcss/source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "ora/cli-cursor/restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "prosemirror-dropcursor/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-dropcursor/prosemirror-view/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-history/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-history/prosemirror-view/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + + "prosemirror-inputrules/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + "tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "tsx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "tsx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], diff --git a/package.json b/package.json index f0883693..f87f45f5 100644 --- a/package.json +++ b/package.json @@ -72,93 +72,93 @@ "@heroui/react": "^3.0.1", "@heroui/styles": "^3.0.1", "@hookform/resolvers": "^5.2.2", - "@hugeicons/core-free-icons": "^4.0.0", - "@hugeicons/react": "^1.1.5", + "@hugeicons/core-free-icons": "^4.3.5", + "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", "@linear/sdk": "^77.0.0", - "@notionhq/client": "^5.13.0", + "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", "@openrouter/ai-sdk-provider": "^2.3.3", "@paralleldrive/cuid2": "^3.3.0", - "@pierre/diffs": "^1.1.7", + "@pierre/diffs": "^1.5.2", "@slack/web-api": "^7.15.0", "@t3-oss/env-nextjs": "^0.12.0", - "@tanstack/react-query": "^5.69.0", - "@tiptap/extension-placeholder": "^3.20.1", - "@tiptap/pm": "^3.20.1", - "@tiptap/react": "^3.20.1", - "@tiptap/starter-kit": "^3.20.1", - "@tiptap/suggestion": "^3.20.1", - "@trpc/client": "^11.0.0", - "@trpc/react-query": "^11.0.0", - "@trpc/server": "^11.0.0", + "@tanstack/react-query": "^5.104.1", + "@tiptap/extension-placeholder": "^3.31.4", + "@tiptap/pm": "^3.31.4", + "@tiptap/react": "^3.31.4", + "@tiptap/starter-kit": "^3.31.4", + "@tiptap/suggestion": "^3.31.4", + "@trpc/client": "^11.19.0", + "@trpc/react-query": "^11.19.0", + "@trpc/server": "^11.19.0", "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "ai": "^6.0.116", "better-sqlite3": "12.6.2", - "border-beam": "^1.0.1", + "border-beam": "^1.4.1", "cmdk": "^1.1.1", "cronbake": "^0.4.0", - "date-fns": "^4.1.0", - "drizzle-orm": "^0.45.1", - "electron-updater": "^6.8.3", + "date-fns": "^4.4.0", + "drizzle-orm": "^0.45.3", + "electron-updater": "^6.8.9", "googleapis": "^171.4.0", "highlight.js": "^11.11.1", - "lucide-react": "^1.8.0", - "mammoth": "^1.12.0", - "mongodb": "^7.1.0", + "lucide-react": "^1.52.0", + "mammoth": "^1.13.0", + "mongodb": "^7.7.0", "motion": "^12.35.0", - "mysql2": "^3.20.0", + "mysql2": "^3.24.5", "next": "^15.2.3", "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", "officeparser": "^6.0.7", - "pg": "^8.20.0", + "pg": "^8.23.1", "ppt": "^0.0.2", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-hook-form": "^7.71.2", + "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", "rehype-highlight": "^7.0.2", "remark-gfm": "^4.0.1", - "resumable-stream": "^2.2.10", + "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", "server-only": "^0.0.1", "shiki": "^3.23.0", "sileo": "^0.1.5", - "sqlite-vec": "0.1.7-alpha.2", + "sqlite-vec": "^0.1.9", "superjson": "^2.2.1", "tailwind-variants": "^3.2.2", - "turndown": "^7.2.2", + "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2" }, "devDependencies": { "@commitlint/cli": "^20.5.0", "@commitlint/config-conventional": "^20.5.0", - "@tailwindcss/postcss": "^4.0.15", + "@tailwindcss/postcss": "^4.3.3", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", - "@types/pg": "^8.18.0", + "@types/pg": "^8.23.1", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "concurrently": "^9.2.1", - "drizzle-kit": "^0.31.9", + "drizzle-kit": "^0.31.11", "electron": "40.8.0", "electron-builder": "26.8.1", - "lefthook": "^2.1.4", + "lefthook": "^2.1.17", "lint-staged": "^16.4.0", - "postcss": "^8.5.3", - "prettier": "^3.8.1", + "postcss": "^8.5.29", + "prettier": "^3.9.9", "prettier-plugin-tailwindcss": "^0.7.2", - "tailwindcss": "^4.0.15", + "tailwindcss": "^4.3.3", "typescript": "^5.8.2", - "wait-on": "^9.0.4" + "wait-on": "^9.5.1" }, "build": { "appId": "app.sentinel.desktop", From e7df4ad9945756f3058c578f45f6b15ef8b94edd Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:23:25 +0000 Subject: [PATCH 005/133] style: reformat with prettier 3.9 Prettier 3.9 collapses short union type annotations onto one line. Formatting only, no behaviour change. Co-Authored-By: Claude Opus 5.5 --- src/app/(app)/skills/page.tsx | 7 +------ src/components/chat/chat-composer-helpers.ts | 9 +++------ src/components/chat/composer-workspace-bar.tsx | 3 +-- .../chat/message-parts/tool/renderer.ts | 5 +---- .../integrations/gmail/gmail-search-sidebar.tsx | 3 +-- .../integrations/slack/slack-channel-action.tsx | 5 +---- .../tool/renderers/plan/plan-utils.ts | 5 +---- src/components/chat/repo-diff-sidebar-store.ts | 5 +---- src/components/chat/task-status-icon.tsx | 7 +------ .../shell/sidebar-command-palette.helpers.ts | 3 +-- src/hooks/use-thread-chat.ts | 6 +----- src/lib/ai/chat/context/model.ts | 3 +-- .../ai/chat/engines/codex-app-server/index.ts | 6 ++---- src/lib/ai/chat/runtime/claude/state.ts | 3 +-- src/lib/ai/chat/runtime/copilot/state.ts | 3 +-- src/lib/ai/chat/runtime/cursor/state.ts | 3 +-- src/lib/ai/chat/runtime/opencode/state.ts | 3 +-- src/lib/ai/chat/runtime/parse-request.ts | 3 +-- src/lib/ai/chat/tools/shell.ts | 15 +++------------ src/lib/ai/providers/models.ts | 5 +---- src/lib/browser/automation-server.ts | 6 ++---- src/lib/computer/automation-server.ts | 6 ++---- src/lib/desktop/contracts.ts | 12 ++---------- src/lib/git/pull-request-status.ts | 15 +++------------ .../integrations/providers/github/service.ts | 3 +-- src/lib/integrations/providers/gmail/service.ts | 7 +------ src/lib/memory/repository.ts | 3 +-- src/lib/plan/service.ts | 3 +-- src/lib/skills/index.ts | 17 +++-------------- src/lib/skills/install.ts | 7 +------ src/server/api/routers/repo.ts | 5 +---- src/server/db/knowledge-schema.ts | 5 +---- 32 files changed, 44 insertions(+), 147 deletions(-) diff --git a/src/app/(app)/skills/page.tsx b/src/app/(app)/skills/page.tsx index 227d09a4..14f02ea2 100644 --- a/src/app/(app)/skills/page.tsx +++ b/src/app/(app)/skills/page.tsx @@ -59,12 +59,7 @@ import { api, type RouterOutputs } from "@/trpc/react"; type SkillListItem = RouterOutputs["skills"]["list"]["skills"][number]; type RegistryItem = RouterOutputs["skills"]["registry"][number]; type SkillInstallTarget = - | "claude" - | "codex" - | "copilot" - | "cursor" - | "opencode" - | "sentinel"; + "claude" | "codex" | "copilot" | "cursor" | "opencode" | "sentinel"; type InstalledSkillAction = Pick; type UnifiedSkill = { diff --git a/src/components/chat/chat-composer-helpers.ts b/src/components/chat/chat-composer-helpers.ts index 26e167f4..ff515571 100644 --- a/src/components/chat/chat-composer-helpers.ts +++ b/src/components/chat/chat-composer-helpers.ts @@ -87,8 +87,7 @@ function matchesOpenCodeBuildTrait(option: { label: string; value: string }) { export function shouldHideOpenCodeTraitSelector( options: - | Array<{ isDefault?: boolean; label: string; value: string }> - | undefined, + Array<{ isDefault?: boolean; label: string; value: string }> | undefined, ) { if (!options || options.length < 2) { return false; @@ -106,16 +105,14 @@ export function shouldHideOpenCodeTraitSelector( export function shouldHideOpenCodeAgentSelector( options: - | Array<{ isDefault?: boolean; label: string; value: string }> - | undefined, + Array<{ isDefault?: boolean; label: string; value: string }> | undefined, ) { return shouldHideOpenCodeTraitSelector(options); } export function resolveOpenCodeTraitValueForThreadMode( options: - | Array<{ isDefault?: boolean; label: string; value: string }> - | undefined, + Array<{ isDefault?: boolean; label: string; value: string }> | undefined, currentValue: string | null | undefined, threadMode: "chat" | "plan", ) { diff --git a/src/components/chat/composer-workspace-bar.tsx b/src/components/chat/composer-workspace-bar.tsx index 8f47ca69..0eaa51ce 100644 --- a/src/components/chat/composer-workspace-bar.tsx +++ b/src/components/chat/composer-workspace-bar.tsx @@ -58,8 +58,7 @@ type ComposerWorkspaceBarProps = { }; type ComposerRepoContextSnapshot = - | (ComposerWorkspaceBarRepoContext & RepoThreadUiContext) - | null; + (ComposerWorkspaceBarRepoContext & RepoThreadUiContext) | null; function getPermissionModeLabel(value: PermissionMode) { return ( diff --git a/src/components/chat/message-parts/tool/renderer.ts b/src/components/chat/message-parts/tool/renderer.ts index 06c89c6b..62c6afff 100644 --- a/src/components/chat/message-parts/tool/renderer.ts +++ b/src/components/chat/message-parts/tool/renderer.ts @@ -3,10 +3,7 @@ import type { ComponentType } from "react"; import type { ToolPart as ToolPartType } from "../types"; export type ApprovalDecision = - | "accept" - | "acceptForSession" - | "cancel" - | "decline"; + "accept" | "acceptForSession" | "cancel" | "decline"; export type RendererProps = { onApprove?: (approvalId: string, response?: string) => void; diff --git a/src/components/chat/message-parts/tool/renderers/integrations/gmail/gmail-search-sidebar.tsx b/src/components/chat/message-parts/tool/renderers/integrations/gmail/gmail-search-sidebar.tsx index c6bf85b1..7cec8f5c 100644 --- a/src/components/chat/message-parts/tool/renderers/integrations/gmail/gmail-search-sidebar.tsx +++ b/src/components/chat/message-parts/tool/renderers/integrations/gmail/gmail-search-sidebar.tsx @@ -476,8 +476,7 @@ export const GmailSearchSidebar = memo(function GmailSearchSidebar({ ); const data = (await response.json()) as - | ({ error?: string } & Partial) - | undefined; + ({ error?: string } & Partial) | undefined; if (!response.ok) { throw new Error(data?.error ?? "Unable to fetch Gmail message."); diff --git a/src/components/chat/message-parts/tool/renderers/integrations/slack/slack-channel-action.tsx b/src/components/chat/message-parts/tool/renderers/integrations/slack/slack-channel-action.tsx index 50283643..046e2486 100644 --- a/src/components/chat/message-parts/tool/renderers/integrations/slack/slack-channel-action.tsx +++ b/src/components/chat/message-parts/tool/renderers/integrations/slack/slack-channel-action.tsx @@ -57,10 +57,7 @@ export const SlackChannelActionTool = memo(function SlackChannelActionTool({ const output = state.hasOutput && "output" in part ? (part.output as - | ChannelOutput - | SuccessOutput - | TopicOutput - | PurposeOutput) + ChannelOutput | SuccessOutput | TopicOutput | PurposeOutput) : null; const [isExpanded, setIsExpanded] = useToolExpansionState({ diff --git a/src/components/chat/message-parts/tool/renderers/plan/plan-utils.ts b/src/components/chat/message-parts/tool/renderers/plan/plan-utils.ts index 19a48bfa..85f49940 100644 --- a/src/components/chat/message-parts/tool/renderers/plan/plan-utils.ts +++ b/src/components/chat/message-parts/tool/renderers/plan/plan-utils.ts @@ -5,10 +5,7 @@ import { useRef } from "react"; import type { ThreadPlanAudience } from "@/lib/plan"; export type PlanToolName = - | "ask_question" - | "create_plan" - | "manage_task" - | "update_plan"; + "ask_question" | "create_plan" | "manage_task" | "update_plan"; export type PlanDraftPart = { input?: unknown; diff --git a/src/components/chat/repo-diff-sidebar-store.ts b/src/components/chat/repo-diff-sidebar-store.ts index e4791711..faf4c66f 100644 --- a/src/components/chat/repo-diff-sidebar-store.ts +++ b/src/components/chat/repo-diff-sidebar-store.ts @@ -209,10 +209,7 @@ export function useRepoDiffSidebarState() { // that are handled by ThreadRepoActions which owns the modals/mutations. export type DiffSidebarGitAction = - | "commit" - | "push" - | "pull-request" - | "branch"; + "commit" | "push" | "pull-request" | "branch"; type GitActionCallback = (action: DiffSidebarGitAction) => void; diff --git a/src/components/chat/task-status-icon.tsx b/src/components/chat/task-status-icon.tsx index d53695b4..8f9f1306 100644 --- a/src/components/chat/task-status-icon.tsx +++ b/src/components/chat/task-status-icon.tsx @@ -12,12 +12,7 @@ import { import { HugeiconsIcon } from "@hugeicons/react"; type TaskStatusIconStatus = - | "blocked" - | "canceled" - | "completed" - | "in_progress" - | "pending" - | "skipped"; + "blocked" | "canceled" | "completed" | "in_progress" | "pending" | "skipped"; const TASK_STATUS_ICONS: Record = { blocked: CancelCircleIcon, diff --git a/src/components/shell/sidebar-command-palette.helpers.ts b/src/components/shell/sidebar-command-palette.helpers.ts index e1ddbc09..ed9f13c6 100644 --- a/src/components/shell/sidebar-command-palette.helpers.ts +++ b/src/components/shell/sidebar-command-palette.helpers.ts @@ -8,8 +8,7 @@ export type SidebarCommandPaletteAction = { export type SidebarCommandPaletteThread = { id: string; linkedPullRequest?: - | import("@/lib/ai/chat/engines/types").RepoLastPullRequest - | null; + import("@/lib/ai/chat/engines/types").RepoLastPullRequest | null; pinnedAt?: Date | null; status?: "idle" | "streaming" | "awaiting_approval"; summary?: string | null; diff --git a/src/hooks/use-thread-chat.ts b/src/hooks/use-thread-chat.ts index 3c3194f0..772b2bc9 100644 --- a/src/hooks/use-thread-chat.ts +++ b/src/hooks/use-thread-chat.ts @@ -74,11 +74,7 @@ type AnswerPlanQuestionsInput = { type ToolApprovalResponseInput = ThreadToolApprovalResponse; type ThreadConnectionState = - | "connected" - | "connecting" - | "disconnected" - | "error" - | "idle"; + "connected" | "connecting" | "disconnected" | "error" | "idle"; type ClientTimingPhase = | "first_meaningful_assistant_update" diff --git a/src/lib/ai/chat/context/model.ts b/src/lib/ai/chat/context/model.ts index 9e66705e..9036a569 100644 --- a/src/lib/ai/chat/context/model.ts +++ b/src/lib/ai/chat/context/model.ts @@ -63,8 +63,7 @@ export async function resolveThreadChatModel( const reasoningEffort = ((request.reasoningEffort ?? (usableThreadModelId ? thread?.chatReasoningEffort : undefined)) as - | ReasoningEffort - | undefined) ?? undefined; + ReasoningEffort | undefined) ?? undefined; return { contextWindow: findModel(parsedModel.provider, parsedModel.model) diff --git a/src/lib/ai/chat/engines/codex-app-server/index.ts b/src/lib/ai/chat/engines/codex-app-server/index.ts index dc6e2a8d..fa090f64 100644 --- a/src/lib/ai/chat/engines/codex-app-server/index.ts +++ b/src/lib/ai/chat/engines/codex-app-server/index.ts @@ -395,8 +395,7 @@ export type CodexNotificationEvent = { export type CodexApprovalRequestEvent = { id: string; method: - | "item/commandExecution/requestApproval" - | "item/fileChange/requestApproval"; + "item/commandExecution/requestApproval" | "item/fileChange/requestApproval"; params: unknown; type: "approval-request"; }; @@ -416,8 +415,7 @@ export type CodexServerEvent = type CodexPendingApproval = { id: string; method: - | CodexApprovalRequestEvent["method"] - | CodexUserInputRequestEvent["method"]; + CodexApprovalRequestEvent["method"] | CodexUserInputRequestEvent["method"]; params: unknown; }; diff --git a/src/lib/ai/chat/runtime/claude/state.ts b/src/lib/ai/chat/runtime/claude/state.ts index 797d8326..bb2297a2 100644 --- a/src/lib/ai/chat/runtime/claude/state.ts +++ b/src/lib/ai/chat/runtime/claude/state.ts @@ -3,8 +3,7 @@ import type { ActiveClaudeRunControl } from "./run"; declare global { // eslint-disable-next-line no-var var __sentinelActiveClaudeRunControls: - | Map - | undefined; + Map | undefined; } // Keep this on globalThis so Bun's module isolation in tests and hot reloads diff --git a/src/lib/ai/chat/runtime/copilot/state.ts b/src/lib/ai/chat/runtime/copilot/state.ts index 5160e085..c0005b12 100644 --- a/src/lib/ai/chat/runtime/copilot/state.ts +++ b/src/lib/ai/chat/runtime/copilot/state.ts @@ -3,8 +3,7 @@ import type { ActiveCopilotRunControl } from "./run"; declare global { // eslint-disable-next-line no-var var __sentinelActiveCopilotRunControls: - | Map - | undefined; + Map | undefined; } // Copilot callbacks arrive outside the original request stack, so live controls diff --git a/src/lib/ai/chat/runtime/cursor/state.ts b/src/lib/ai/chat/runtime/cursor/state.ts index 91446a56..fec3529a 100644 --- a/src/lib/ai/chat/runtime/cursor/state.ts +++ b/src/lib/ai/chat/runtime/cursor/state.ts @@ -3,8 +3,7 @@ import type { ActiveCursorRunControl } from "./run"; declare global { // eslint-disable-next-line no-var var __sentinelActiveCursorRunControls: - | Map - | undefined; + Map | undefined; } // Cursor ACP requests can ask for approval/input while the prompt is running; diff --git a/src/lib/ai/chat/runtime/opencode/state.ts b/src/lib/ai/chat/runtime/opencode/state.ts index 13bf224b..08f3bb4b 100644 --- a/src/lib/ai/chat/runtime/opencode/state.ts +++ b/src/lib/ai/chat/runtime/opencode/state.ts @@ -3,8 +3,7 @@ import type { ActiveOpenCodeRunControl } from "./run"; declare global { // eslint-disable-next-line no-var var __sentinelActiveOpenCodeRunControls: - | Map - | undefined; + Map | undefined; } // OpenCode emits permission/question events from its SDK stream; this map keeps diff --git a/src/lib/ai/chat/runtime/parse-request.ts b/src/lib/ai/chat/runtime/parse-request.ts index 9c94a3e7..7ee92d89 100644 --- a/src/lib/ai/chat/runtime/parse-request.ts +++ b/src/lib/ai/chat/runtime/parse-request.ts @@ -110,8 +110,7 @@ export async function parseRequest( ); const openCode = parseOpenCodeOptions(input.openCode); const reasoningEffort = str(input.reasoningEffort) as - | ThreadChatRequest["reasoningEffort"] - | undefined; + ThreadChatRequest["reasoningEffort"] | undefined; const threadMode = input.threadMode === "plan" || input.threadMode === "chat" ? (input.threadMode as "plan" | "chat") diff --git a/src/lib/ai/chat/tools/shell.ts b/src/lib/ai/chat/tools/shell.ts index fbb50f17..7156254a 100644 --- a/src/lib/ai/chat/tools/shell.ts +++ b/src/lib/ai/chat/tools/shell.ts @@ -44,10 +44,7 @@ export type ShellCommandCompletedOutput = { }; export type ShellCommandBackgroundStatus = - | "completed" - | "failed" - | "running" - | "stopped"; + "completed" | "failed" | "running" | "stopped"; export type ShellCommandBackgroundOutput = { backgroundTaskId: string; @@ -76,16 +73,10 @@ export type ShellCommandOutput = export type ShellCommandResult = ShellCommandCompletedOutput; export type ShellCommandFailureKind = - | "missing_command" - | "missing_toolchain" - | "other" - | "permission"; + "missing_command" | "missing_toolchain" | "other" | "permission"; export type ShellCommandSuggestedNextAction = - | "install" - | "inspect" - | "none" - | "retry"; + "install" | "inspect" | "none" | "retry"; export type ShellCommandStreamEvent = | { output: ShellCommandRunningOutput; type: "running" } diff --git a/src/lib/ai/providers/models.ts b/src/lib/ai/providers/models.ts index 98140ba2..51a79893 100644 --- a/src/lib/ai/providers/models.ts +++ b/src/lib/ai/providers/models.ts @@ -2,10 +2,7 @@ import type { AIProvider } from "@/server/db/enums"; import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; export type ModelCapability = - | "vision" - | "reasoning" - | "tool_use" - | "object_generation"; + "vision" | "reasoning" | "tool_use" | "object_generation"; export type ModelAttachmentCapabilities = { supportsImages: boolean; diff --git a/src/lib/browser/automation-server.ts b/src/lib/browser/automation-server.ts index 6c833a54..05e55b02 100644 --- a/src/lib/browser/automation-server.ts +++ b/src/lib/browser/automation-server.ts @@ -34,8 +34,7 @@ type BrowserAutomationUserState = { declare global { // eslint-disable-next-line no-var var __sentinelBrowserAutomationClients: - | Map - | undefined; + Map | undefined; } const clients = @@ -83,8 +82,7 @@ function deliverCommand( command: BrowserAutomationCommandEnvelope, ) { const waiter = state.pollWaiters.values().next().value as - | ((command: BrowserAutomationCommandEnvelope | null) => void) - | undefined; + ((command: BrowserAutomationCommandEnvelope | null) => void) | undefined; if (waiter) { state.pollWaiters.delete(waiter); diff --git a/src/lib/computer/automation-server.ts b/src/lib/computer/automation-server.ts index 104fa700..6603dcc8 100644 --- a/src/lib/computer/automation-server.ts +++ b/src/lib/computer/automation-server.ts @@ -34,8 +34,7 @@ type ComputerAutomationUserState = { declare global { // eslint-disable-next-line no-var var __sentinelComputerAutomationClients: - | Map - | undefined; + Map | undefined; } const clients = @@ -71,8 +70,7 @@ function deliverCommand( command: ComputerAutomationCommandEnvelope, ) { const waiter = state.pollWaiters.values().next().value as - | ((command: ComputerAutomationCommandEnvelope | null) => void) - | undefined; + ((command: ComputerAutomationCommandEnvelope | null) => void) | undefined; if (waiter) { state.pollWaiters.delete(waiter); diff --git a/src/lib/desktop/contracts.ts b/src/lib/desktop/contracts.ts index 676c808d..a762df6d 100644 --- a/src/lib/desktop/contracts.ts +++ b/src/lib/desktop/contracts.ts @@ -23,10 +23,7 @@ export type DesktopArchitecture = string; export type DesktopPlatform = "darwin" | "linux" | "win32"; export type DesktopPermissionName = "microphone"; export type DesktopPermissionState = - | "denied" - | "granted" - | "prompt" - | "unsupported"; + "denied" | "granted" | "prompt" | "unsupported"; export type DesktopUpdateStatus = | "idle" | "checking" @@ -91,12 +88,7 @@ export type SentinelDesktopApi = { >; axAction: (input: { action: - | "decrement" - | "focus" - | "increment" - | "press" - | "setValue" - | "showMenu"; + "decrement" | "focus" | "increment" | "press" | "setValue" | "showMenu"; appName?: string; axPath?: string; bundleId?: string; diff --git a/src/lib/git/pull-request-status.ts b/src/lib/git/pull-request-status.ts index 2633de5b..66a12e03 100644 --- a/src/lib/git/pull-request-status.ts +++ b/src/lib/git/pull-request-status.ts @@ -1,20 +1,11 @@ export type RepoIntegrationStatus = - | "connected" - | "local_only" - | "needs_github" - | "unsupported_remote"; + "connected" | "local_only" | "needs_github" | "unsupported_remote"; export type RepoPullRequestReviewDecision = - | "APPROVED" - | "CHANGES_REQUESTED" - | "REVIEW_REQUIRED" - | null; + "APPROVED" | "CHANGES_REQUESTED" | "REVIEW_REQUIRED" | null; export type RepoPullRequestCheckState = - | "failure" - | "pending" - | "success" - | "unknown"; + "failure" | "pending" | "success" | "unknown"; export type RepoPullRequestMergeStatus = | "awaiting_review" diff --git a/src/lib/integrations/providers/github/service.ts b/src/lib/integrations/providers/github/service.ts index 048dd862..842ba002 100644 --- a/src/lib/integrations/providers/github/service.ts +++ b/src/lib/integrations/providers/github/service.ts @@ -727,8 +727,7 @@ export class GitHubService { textMatches: ( (item as Record).text_matches as - | { fragment: string }[] - | undefined + { fragment: string }[] | undefined )?.map((m) => m.fragment) ?? [], })), totalCount: data.total_count, diff --git a/src/lib/integrations/providers/gmail/service.ts b/src/lib/integrations/providers/gmail/service.ts index e5fcf3d0..e7b9e19d 100644 --- a/src/lib/integrations/providers/gmail/service.ts +++ b/src/lib/integrations/providers/gmail/service.ts @@ -404,12 +404,7 @@ export class GmailService { async bulkModify( messageIds: string[], action: - | "archive" - | "trash" - | "star" - | "unstar" - | "mark_read" - | "mark_unread", + "archive" | "trash" | "star" | "unstar" | "mark_read" | "mark_unread", ): Promise<{ modifiedCount: number }> { const perform = (id: string): Promise => { switch (action) { diff --git a/src/lib/memory/repository.ts b/src/lib/memory/repository.ts index 0802a852..6d80ee4f 100644 --- a/src/lib/memory/repository.ts +++ b/src/lib/memory/repository.ts @@ -376,8 +376,7 @@ export function upsertMemory(input: UpsertMemoryInput) { AND fingerprint = ?`, ) .get(input.userId, input.kind, workspaceId ?? "", fingerprint) as - | { id: string } - | undefined; + { id: string } | undefined; const semanticDuplicate = existing ? null : (( diff --git a/src/lib/plan/service.ts b/src/lib/plan/service.ts index 59d056f9..82f3e5ea 100644 --- a/src/lib/plan/service.ts +++ b/src/lib/plan/service.ts @@ -45,8 +45,7 @@ function normalizePlanDocumentPayload({ goal: unknown; summary: unknown; tasks: - | Array<{ description?: string | null; title: string }> - | ThreadPlanTask[]; + Array<{ description?: string | null; title: string }> | ThreadPlanTask[]; title: unknown; }) { const normalizedTitle = trimToString(title) || "Plan"; diff --git a/src/lib/skills/index.ts b/src/lib/skills/index.ts index 6df01369..7ce30e2f 100644 --- a/src/lib/skills/index.ts +++ b/src/lib/skills/index.ts @@ -32,16 +32,10 @@ const SOURCE_PRECEDENCE = [ export type SkillScope = (typeof SOURCE_PRECEDENCE)[number]["scope"]; export type SkillSourceKind = - | (typeof SOURCE_PRECEDENCE)[number]["sourceKind"] - | typeof CODEX_SOURCE_KIND; + (typeof SOURCE_PRECEDENCE)[number]["sourceKind"] | typeof CODEX_SOURCE_KIND; export type SkillInstallOrigin = "external" | "sentinel"; export type SkillTarget = - | "claude" - | "codex" - | "copilot" - | "cursor" - | "opencode" - | "sentinel"; + "claude" | "codex" | "copilot" | "cursor" | "opencode" | "sentinel"; export type SkillMetadata = { description: string; @@ -77,12 +71,7 @@ export type SkillSnapshot = { }; type SkillLookupTarget = - | "sentinel" - | "codex" - | "claude" - | "copilot" - | "cursor" - | "opencode"; + "sentinel" | "codex" | "claude" | "copilot" | "cursor" | "opencode"; type ConventionalSkillRoot = { containerDirectory: string; diff --git a/src/lib/skills/install.ts b/src/lib/skills/install.ts index f6f725ed..fac7c414 100644 --- a/src/lib/skills/install.ts +++ b/src/lib/skills/install.ts @@ -8,12 +8,7 @@ const SKILL_FILENAME = "SKILL.md"; const SENTINEL_INSTALL_METADATA_FILENAME = ".sentinel-install.json"; const SKILL_DIRECTORY_NAME_PATTERN = /^[a-z0-9][a-z0-9-_]*$/i; export type SkillInstallTarget = - | "sentinel" - | "codex" - | "claude" - | "copilot" - | "cursor" - | "opencode"; + "sentinel" | "codex" | "claude" | "copilot" | "cursor" | "opencode"; export type SkillInstallResult = { alreadyInstalled?: boolean; directory: string; diff --git a/src/server/api/routers/repo.ts b/src/server/api/routers/repo.ts index e277ca26..ea2307bb 100644 --- a/src/server/api/routers/repo.ts +++ b/src/server/api/routers/repo.ts @@ -105,10 +105,7 @@ const threadSwitchHandoffInputSchema = threadSwitchInspectInputSchema.extend({ }); type RepoBranchResumeStatus = - | "blocked_dirty" - | "matched" - | "missing_branch" - | "needs_checkout"; + "blocked_dirty" | "matched" | "missing_branch" | "needs_checkout"; type RepoWorktreeStatus = "creating" | "error" | "missing" | "none" | "ready"; const PULL_REQUEST_STATUS_TTL_MS = 15_000; diff --git a/src/server/db/knowledge-schema.ts b/src/server/db/knowledge-schema.ts index 3791d05f..2a5024a1 100644 --- a/src/server/db/knowledge-schema.ts +++ b/src/server/db/knowledge-schema.ts @@ -15,10 +15,7 @@ */ export type KnowledgeSourceStatus = - | "pending" - | "processing" - | "ready" - | "error"; + "pending" | "processing" | "ready" | "error"; export type KnowledgeSource = { id: string; From 433059fc8614cc79002571049550292cd0c403dc Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:26:10 +0000 Subject: [PATCH 006/133] build(deps): bump integration SDK and tooling majors - googleapis 183: build OAuth clients with google.auth.OAuth2 instead of importing the undeclared google-auth-library, which now resolves to a different major than the one googleapis uses - @linear/sdk 97, @slack/web-api 8 (fetch transport; Sentinel uses no axios-specific options or ErrorCode checks), motion 14 (no breaking changes for React), shiki 4 (only removed misspelled aliases, unused) - commitlint 21, lint-staged 17, concurrently 10 (verified the commit-msg hook and `concurrently -k` still behave) Gate G0: typecheck ok, 183/183 test files pass, format ok. Co-Authored-By: Claude Opus 5.5 --- bun.lock | 380 ++++++++++-------- package.json | 20 +- .../integrations/providers/gmail/service.ts | 3 +- .../providers/google-calendar/service.ts | 3 +- .../providers/google-drive/service.ts | 3 +- 5 files changed, 231 insertions(+), 178 deletions(-) diff --git a/bun.lock b/bun.lock index 0d3be391..1873b02a 100644 --- a/bun.lock +++ b/bun.lock @@ -37,14 +37,14 @@ "@hugeicons/core-free-icons": "^4.3.5", "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", - "@linear/sdk": "^77.0.0", + "@linear/sdk": "^97.0.0", "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", "@openrouter/ai-sdk-provider": "^2.3.3", "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", - "@slack/web-api": "^7.15.0", + "@slack/web-api": "^8.2.0", "@t3-oss/env-nextjs": "^0.12.0", "@tanstack/react-query": "^5.104.1", "@tiptap/extension-placeholder": "^3.31.4", @@ -66,12 +66,12 @@ "date-fns": "^4.4.0", "drizzle-orm": "^0.45.3", "electron-updater": "^6.8.9", - "googleapis": "^171.4.0", + "googleapis": "^183.0.0", "highlight.js": "^11.11.1", "lucide-react": "^1.52.0", "mammoth": "^1.13.0", "mongodb": "^7.7.0", - "motion": "^12.35.0", + "motion": "^14.0.0", "mysql2": "^3.24.5", "next": "^15.2.3", "node-pptx-parser": "^1.0.1", @@ -90,18 +90,18 @@ "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", "server-only": "^0.0.1", - "shiki": "^3.23.0", + "shiki": "^4.5.0", "sileo": "^0.1.5", "sqlite-vec": "^0.1.9", - "superjson": "^2.2.1", + "superjson": "^2.2.6", "tailwind-variants": "^3.2.2", "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2", }, "devDependencies": { - "@commitlint/cli": "^20.5.0", - "@commitlint/config-conventional": "^20.5.0", + "@commitlint/cli": "^21.2.3", + "@commitlint/config-conventional": "^21.2.3", "@tailwindcss/postcss": "^4.3.3", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", @@ -109,12 +109,12 @@ "@types/pg": "^8.23.1", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", - "concurrently": "^9.2.1", + "concurrently": "^10.0.5", "drizzle-kit": "^0.31.11", "electron": "40.8.0", "electron-builder": "26.8.1", "lefthook": "^2.1.17", - "lint-staged": "^16.4.0", + "lint-staged": "^17.6.0", "postcss": "^8.5.29", "prettier": "^3.9.9", "prettier-plugin-tailwindcss": "^0.7.2", @@ -203,41 +203,43 @@ "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], - "@commitlint/cli": ["@commitlint/cli@20.5.0", "", { "dependencies": { "@commitlint/format": "^20.5.0", "@commitlint/lint": "^20.5.0", "@commitlint/load": "^20.5.0", "@commitlint/read": "^20.5.0", "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "./cli.js" } }, "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ=="], + "@commitlint/cli": ["@commitlint/cli@21.2.3", "", { "dependencies": { "@commitlint/config-conventional": "^21.2.3", "@commitlint/format": "^21.2.3", "@commitlint/lint": "^21.2.3", "@commitlint/load": "^21.2.3", "@commitlint/read": "^21.2.3", "@commitlint/types": "^21.2.3", "tinyexec": "^1.0.0", "yargs": "^18.0.0" }, "bin": { "commitlint": "cli.js" } }, "sha512-5yOX6IRjcrIReCxpyAd04hgI/yhUMpVBJ/ouwFV0wk9yx5+fYRDWZWJ5h55Tbedgfol+5m2mU5nqzbB8g3v0vQ=="], - "@commitlint/config-conventional": ["@commitlint/config-conventional@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "conventional-changelog-conventionalcommits": "^9.2.0" } }, "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA=="], + "@commitlint/config-conventional": ["@commitlint/config-conventional@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "conventional-changelog-conventionalcommits": "^10.0.0" } }, "sha512-EP2n5DN2GwRWNVrLX0Jx3mpQlW5PfFi9HnD9OJ8hN/H0xFqpCFyHeGDhg+0P8/21iMMcdkcQgbNqmVklebqYsQ=="], - "@commitlint/config-validator": ["@commitlint/config-validator@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "ajv": "^8.11.0" } }, "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw=="], + "@commitlint/config-validator": ["@commitlint/config-validator@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "ajv": "^8.11.0" } }, "sha512-JQ13v0GafSM4fBYX8UowSy++07Was20auq0NcTdnzSEq6/05Cq5GBUMIfKkqjzyBwC9sJFmPpKWgLLhH7cygkw=="], - "@commitlint/ensure": ["@commitlint/ensure@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "lodash.upperfirst": "^4.3.1" } }, "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw=="], + "@commitlint/ensure": ["@commitlint/ensure@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "es-toolkit": "^1.46.0" } }, "sha512-gEjNKgRocbODI5/sMx2Qc9XOf2/zFTNV2aEK1QZ4gKDKxDC/VR7us3QtIX1C5d5xxHxx0I/tEbYbdSP1Am2LwA=="], - "@commitlint/execute-rule": ["@commitlint/execute-rule@20.0.0", "", {}, "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw=="], + "@commitlint/execute-rule": ["@commitlint/execute-rule@21.0.1", "", {}, "sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA=="], - "@commitlint/format": ["@commitlint/format@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "picocolors": "^1.1.1" } }, "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q=="], + "@commitlint/format": ["@commitlint/format@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "picocolors": "^1.1.1" } }, "sha512-KKwCjXYqA8r295uhLnulDXL9yekdXmj2yp2Q0XsBPhxQ2iPuvRE8F43j7g7yexo69wTdmUQmFz15jpderluzUQ=="], - "@commitlint/is-ignored": ["@commitlint/is-ignored@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "semver": "^7.6.0" } }, "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg=="], + "@commitlint/is-ignored": ["@commitlint/is-ignored@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "semver": "^7.6.0" } }, "sha512-Ng4nRj/LBAOvc+GQu7bsFW4/fL89LvZ14OOC/ERLbUpnG6QBwWRzY/1oXGwPs3C8YHWjJObin4kLYo2YeEn70w=="], - "@commitlint/lint": ["@commitlint/lint@20.5.0", "", { "dependencies": { "@commitlint/is-ignored": "^20.5.0", "@commitlint/parse": "^20.5.0", "@commitlint/rules": "^20.5.0", "@commitlint/types": "^20.5.0" } }, "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA=="], + "@commitlint/lint": ["@commitlint/lint@21.2.3", "", { "dependencies": { "@commitlint/is-ignored": "^21.2.3", "@commitlint/parse": "^21.2.3", "@commitlint/rules": "^21.2.3", "@commitlint/types": "^21.2.3" } }, "sha512-lUZcSuVLLEDkhge9ERk8Rp+FXQtrUhCK+h328BFnzKXrTuXGdqiYMEpTlNWdZaOrjyMhMJaz354ZaWEGJxcLeg=="], - "@commitlint/load": ["@commitlint/load@20.5.0", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/execute-rule": "^20.0.0", "@commitlint/resolve-extends": "^20.5.0", "@commitlint/types": "^20.5.0", "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", "is-plain-obj": "^4.1.0", "lodash.mergewith": "^4.6.2", "picocolors": "^1.1.1" } }, "sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw=="], + "@commitlint/load": ["@commitlint/load@21.2.3", "", { "dependencies": { "@commitlint/config-validator": "^21.2.3", "@commitlint/execute-rule": "^21.0.1", "@commitlint/resolve-extends": "^21.2.3", "@commitlint/types": "^21.2.3", "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", "es-toolkit": "^1.46.0", "is-plain-obj": "^4.1.0", "picocolors": "^1.1.1" } }, "sha512-cDrL8lOo23Lk7knGzQdjbFcq7z2JgvjwV6PhbESVvEc+Fe21MeLjPKBJi8nKjg7j+jh79CVbVSUbZc104thXRw=="], - "@commitlint/message": ["@commitlint/message@20.4.3", "", {}, "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ=="], + "@commitlint/message": ["@commitlint/message@21.2.0", "", {}, "sha512-YxGoiXD/HXNXLJPrQwE5poXa+XH0CBEm+mdvbHQP0g6MV/dmJyUFCzPNzZbxL93GvZ70TmtTK0Z0/IBpAqHv8g=="], - "@commitlint/parse": ["@commitlint/parse@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "conventional-changelog-angular": "^8.2.0", "conventional-commits-parser": "^6.3.0" } }, "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA=="], + "@commitlint/parse": ["@commitlint/parse@21.2.3", "", { "dependencies": { "@commitlint/types": "^21.2.3", "conventional-changelog-angular": "^9.0.0", "conventional-commits-parser": "^7.0.0" } }, "sha512-Jt61QpF1xA88damCELe8I0FlDZPSpXNc8IhN7z5kZ0EcDYPjdZ+ZHPvsSXl69r2MIlLnNKeHhOn2cmVpziFE9w=="], - "@commitlint/read": ["@commitlint/read@20.5.0", "", { "dependencies": { "@commitlint/top-level": "^20.4.3", "@commitlint/types": "^20.5.0", "git-raw-commits": "^5.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" } }, "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w=="], + "@commitlint/read": ["@commitlint/read@21.2.3", "", { "dependencies": { "@commitlint/top-level": "^21.2.0", "@commitlint/types": "^21.2.3", "@conventional-changelog/git-client": "^3.0.0", "tinyexec": "^1.0.0" } }, "sha512-szAepuLA1vTTr7fuudEg7jYyVHudf+FH+vptU91bhxE1WnE8TKrfTAi44HVllz8XpI8Pvp4GjR/iP5Nshgh+og=="], - "@commitlint/resolve-extends": ["@commitlint/resolve-extends@20.5.0", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/types": "^20.5.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0" } }, "sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg=="], + "@commitlint/resolve-extends": ["@commitlint/resolve-extends@21.2.3", "", { "dependencies": { "@commitlint/config-validator": "^21.2.3", "@commitlint/types": "^21.2.3", "es-toolkit": "^1.46.0", "global-directory": "^5.0.0", "resolve-from": "^5.0.0" } }, "sha512-bqJdmAtXgAQel+l02uIsF7rHgKgx1AGZdGBjam7uK4XW54ZAQtB6XAIUXezYprQiCcRMpBh4fHs5JodXK4mVZA=="], - "@commitlint/rules": ["@commitlint/rules@20.5.0", "", { "dependencies": { "@commitlint/ensure": "^20.5.0", "@commitlint/message": "^20.4.3", "@commitlint/to-lines": "^20.0.0", "@commitlint/types": "^20.5.0" } }, "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ=="], + "@commitlint/rules": ["@commitlint/rules@21.2.3", "", { "dependencies": { "@commitlint/ensure": "^21.2.3", "@commitlint/message": "^21.2.0", "@commitlint/to-lines": "^21.0.1", "@commitlint/types": "^21.2.3" } }, "sha512-5+YnI/LuTx3JDl9GjqfP2z9x96M8KKDrd+4jOel/T0L1BB3oAmBlSN8xppf63QsudiVEgR8C0gRoAMrPVrms6g=="], - "@commitlint/to-lines": ["@commitlint/to-lines@20.0.0", "", {}, "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw=="], + "@commitlint/to-lines": ["@commitlint/to-lines@21.0.1", "", {}, "sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw=="], - "@commitlint/top-level": ["@commitlint/top-level@20.4.3", "", { "dependencies": { "escalade": "^3.2.0" } }, "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ=="], + "@commitlint/top-level": ["@commitlint/top-level@21.2.0", "", { "dependencies": { "escalade": "^3.2.0" } }, "sha512-Y5gmQ+KxzqCrBFJfLvFEPvvwD3LDiNZoTT2yeFBm96M8qhmqSzQc5DvX3rheAaAMjyIvMXOCLS/mWfdpONsjyQ=="], - "@commitlint/types": ["@commitlint/types@20.5.0", "", { "dependencies": { "conventional-commits-parser": "^6.3.0", "picocolors": "^1.1.1" } }, "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA=="], + "@commitlint/types": ["@commitlint/types@21.2.3", "", { "dependencies": { "conventional-commits-parser": "^7.0.0", "picocolors": "^1.1.1" } }, "sha512-sGEA473TlCvhCGNoTBY9OXZVWdscIXdGt0dm8EpB+2MRfmt8LNh/X56P/T3nCtEB+eH5qGEa3odphSAoUxSfSQ=="], - "@conventional-changelog/git-client": ["@conventional-changelog/git-client@2.6.0", "", { "dependencies": { "@simple-libs/child-process-utils": "^1.0.0", "@simple-libs/stream-utils": "^1.2.0", "semver": "^7.5.2" }, "peerDependencies": { "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.3.0" }, "optionalPeers": ["conventional-commits-filter", "conventional-commits-parser"] }, "sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg=="], + "@conventional-changelog/git-client": ["@conventional-changelog/git-client@3.2.0", "", { "dependencies": { "@simple-libs/child-process-utils": "^2.0.0", "@simple-libs/stream-utils": "^2.0.0", "verkit": "^0.5.0" }, "peerDependencies": { "conventional-commits-filter": "^6.0.1", "conventional-commits-parser": "^7.1.3" }, "optionalPeers": ["conventional-commits-filter", "conventional-commits-parser"] }, "sha512-sD/E0vzpkoDz/dqM1Hhv0ihC4KBw6RXjefeO8SG1XrX+wGkMxe1pKeedkKDPCtr2JjuhbuS9aJNgOvnT8hbeBw=="], + + "@conventional-changelog/template": ["@conventional-changelog/template@1.4.0", "", {}, "sha512-aalGyl7dbB5PArRebDIX43ZvBlXrYm9uWzGJ26t+4SzJVPsOuvfILGGbw5X4yX7i50YEmJ8zvbiWnqH/AAnZqg=="], "@develar/schema-utils": ["@develar/schema-utils@2.6.5", "", { "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig=="], @@ -457,7 +459,7 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@linear/sdk": ["@linear/sdk@77.0.0", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.2.0" } }, "sha512-pI7ZNh/UZF12JoVhCi8tdubYnCp2DJ1hkraMA+kDyYqjU+elKOVd5yAdN/SoAR17V7Kg8dtDabgArjknvUnQSA=="], + "@linear/sdk": ["@linear/sdk@97.0.0", "", { "dependencies": { "@graphql-typed-document-node/core": "^3.2.0" } }, "sha512-ntgZI06I37DTp/XULYTPbOg1t7vJRo72JRSkMjdgG+GbUEHdSkYsUjN0dR42go/2LvLRKWJD3jVehm0wE5haEg=="], "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg=="], @@ -823,33 +825,35 @@ "@react-types/tooltip": ["@react-types/tooltip@3.5.2", "", { "dependencies": { "@react-types/overlays": "^3.9.4", "@react-types/shared": "^3.33.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FvSuZ2WP08NEWefrpCdBYpEEZh/5TvqvGjq0wqGzWg2OPwpc14HjD8aE7I3MOuylXkD4MSlMjl7J4DlvlcCs3Q=="], - "@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], + "@shikijs/core": ["@shikijs/core@4.5.0", "", { "dependencies": { "@shikijs/primitive": "4.5.0", "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" } }, "sha512-6CIgwq+bt2JZ3OSjb/nBkkwEf/CfpHcbam+Mg5Pllco7HAGRQ2/EFhZrrJtbyNTgKwknfVS+llsXGygiDGwJWw=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-Ed6UdEj84LyYkwnxM5CvSMWAD+id9ExTYri0/+x41U9zrgNifPSS9lZm0JqBP0VfYI8yr8tY5nbNq9+p9R0kFA=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-dKVmbJecVdB9recl8a/CU4jdpNXyjJQrIcesIkpS70s5HS02ohpnCSpMUbotPnEUzbAcLQ+S4hwZYbkBBiTcJw=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], + "@shikijs/langs": ["@shikijs/langs@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0" } }, "sha512-wwBTqwduXSz0X4v9Qa2EWeFaYJEw1clCncWjoRNQRbVDu3SPRTRWucnouYapKj3b8Q+sk/41Vbc4B5c8nuYzLA=="], - "@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], + "@shikijs/primitive": ["@shikijs/primitive@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-UM7ShlA8oz0OWxLLO8BmO9Ip6fVqdkt8yF0EH7nOCqHfrx1eEAzF0ZUVK7L+I8NEgeu1PEWSRlxaiPPeCb4iDg=="], - "@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], + "@shikijs/themes": ["@shikijs/themes@4.5.0", "", { "dependencies": { "@shikijs/types": "4.5.0" } }, "sha512-zGb87H3UBbpuI4yoh5UguB1XbU+2BDU3kflM7UfZ+Cy2hWo9lBtqjSVK20gmLY6ukYl040hAypGXMgud9vul8Q=="], "@shikijs/transformers": ["@shikijs/transformers@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/types": "3.23.0" } }, "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ=="], - "@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], + "@shikijs/types": ["@shikijs/types@4.5.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-drtPrtD8N0DENyD2cyt6Ajy+IWsiCLgMxODwLTpvH1UsN6a9jf90tNTPjqwHvA+0Lzu9e0txk8DjfqH1p9UJRw=="], "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@simple-libs/child-process-utils": ["@simple-libs/child-process-utils@1.0.2", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0" } }, "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw=="], + "@simple-libs/child-process-utils": ["@simple-libs/child-process-utils@2.0.0", "", { "dependencies": { "@simple-libs/stream-utils": "^2.0.0" } }, "sha512-dvNoRKLijXnD0XoJAz94pbNuB5GQgDr55UhpSPhffDkTT0Cmcqh9jSCOtwfT2d4H6MI9E7c4SgtMuJXZ6F3c6A=="], - "@simple-libs/stream-utils": ["@simple-libs/stream-utils@1.2.0", "", {}, "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA=="], + "@simple-libs/stream-utils": ["@simple-libs/stream-utils@2.0.0", "", {}, "sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ=="], "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], - "@slack/logger": ["@slack/logger@4.0.1", "", { "dependencies": { "@types/node": ">=18" } }, "sha512-6cmdPrV/RYfd2U0mDGiMK8S7OJqpCTm7enMLRR3edccsPX8j7zXTLnaEF4fhxxJJTAIOil6+qZrnUPTuaLvwrQ=="], + "@slack/logger": ["@slack/logger@5.0.0", "", { "dependencies": { "@types/node": ">=20" } }, "sha512-VGXhmmgsAo9shdQYh4tFDndd+7nsgp0Y5h0UPDaUp8K359pBasI6YdkMqFW3mCOxLQkq09qj7o7cq6f3DuXcJQ=="], - "@slack/types": ["@slack/types@2.20.1", "", {}, "sha512-eWX2mdt1ktpn8+40iiMc404uGrih+2fxiky3zBcPjtXKj6HLRdYlmhrPkJi7JTJm8dpXR6BWVWEDBXtaWMKD6A=="], + "@slack/types": ["@slack/types@3.2.0", "", {}, "sha512-IN4gdtlzQt8UJoj+1v+qAHeR4TxHO0KMlIs841SFfDQAcFFnsrWaGsEAE4goxVt8O/JOAFaGGdrFTzhNBop/Fg=="], - "@slack/web-api": ["@slack/web-api@7.15.0", "", { "dependencies": { "@slack/logger": "^4.0.1", "@slack/types": "^2.20.1", "@types/node": ">=18", "@types/retry": "0.12.0", "axios": "^1.13.5", "eventemitter3": "^5.0.1", "form-data": "^4.0.4", "is-electron": "2.2.2", "is-stream": "^2", "p-queue": "^6", "p-retry": "^4", "retry": "^0.13.1" } }, "sha512-va7zYIt3QHG1x9M/jqXXRPFMoOVlVSSRHC5YH+DzKYsrz5xUKOA3lR4THsu/Zxha9N1jOndbKFKLtr0WOPW1Vw=="], + "@slack/web-api": ["@slack/web-api@8.2.0", "", { "dependencies": { "@slack/logger": "^5.0.0", "@slack/types": "^3.2.0", "@types/node": ">=20", "@types/retry": "0.12.5", "eventemitter3": "^5.0.1", "p-queue": "^6.6.2", "p-retry": "^4.6.2", "retry": "^0.13.1" } }, "sha512-bIW8/8BLD/HLuHLIA2LfA7AhSokzui4swCbMJuwoRJxn/kzHVla6YEKLvN1nCFHK/DfX7g+4Wj3ess/ZSh/tWQ=="], "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="], @@ -1015,7 +1019,7 @@ "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], - "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], + "@types/retry": ["@types/retry@0.12.5", "", {}, "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw=="], "@types/turndown": ["@types/turndown@5.0.6", "", {}, "sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg=="], @@ -1053,9 +1057,7 @@ "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -1065,9 +1067,9 @@ "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + "argue-cli": ["argue-cli@3.2.0", "", {}, "sha512-VipTB0gXgGIFO2Rg9yEVN5wLt2AurJcZqDbgmYSwPwsykhLrQhs240/bfceev4w68lI8JshoOJIk9uW7tFzROw=="], - "array-ify": ["array-ify@1.0.0", "", {}, "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], @@ -1145,7 +1147,7 @@ "cfb": ["cfb@1.2.2", "", { "dependencies": { "adler-32": "~1.3.0", "crc-32": "~1.2.0" } }, "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA=="], - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], @@ -1161,15 +1163,15 @@ "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], + "cli-truncate": ["cli-truncate@2.1.0", "", { "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg=="], "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], @@ -1185,29 +1187,25 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], - "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="], - "compare-version": ["compare-version@0.1.2", "", {}, "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], - "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], + "concurrently": ["concurrently@10.0.5", "", { "dependencies": { "chalk": "5.6.2", "rxjs": "7.8.2", "shell-quote": "1.9.0", "supports-color": "10.2.2", "tree-kill": "1.2.2", "yargs": "18.0.0" }, "bin": { "conc": "dist/bin/index.js", "concurrently": "dist/bin/index.js" } }, "sha512-JaP/CoftUrCcAFW/g//RbgEGwlelnEae6cfBLgH6ZdO6s8jPkn6p9SB9u6pdVxYXoiSnFqseOlHfrEfF82TVOg=="], - "conventional-changelog-angular": ["conventional-changelog-angular@8.3.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA=="], + "conventional-changelog-angular": ["conventional-changelog-angular@9.4.0", "", { "dependencies": { "@conventional-changelog/template": "^1.4.0" } }, "sha512-HdxRxuS8bBXVIuo4V82gvSwAXT0vYQUizrjs/izmPg5JdDstr8v8I5hduGL3iQbG+o310dUDxC4+LetuS5hu9w=="], - "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@9.3.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA=="], + "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@10.4.1", "", { "dependencies": { "@conventional-changelog/template": "^1.4.0" } }, "sha512-jS1LRFSbRoAr6JbhhRy1JYfNNUj5LM3+v49hRE03CgccsiYqgdVj/RTmrw4J1rylrqijHwdOlJWiJa61JHOgHg=="], - "conventional-commits-parser": ["conventional-commits-parser@6.3.0", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "meow": "^13.0.0" }, "bin": { "conventional-commits-parser": "dist/cli/index.js" } }, "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg=="], + "conventional-commits-parser": ["conventional-commits-parser@7.1.3", "", { "dependencies": { "@simple-libs/stream-utils": "^2.0.0", "argue-cli": "^3.1.0" }, "bin": { "conventional-commits-parser": "./dist/cli/index.js" } }, "sha512-Q9oWm1o9uy/oEsZQIraoFMZ4RuPD+79KgwWj6mJVP356tazolCB0piRLZ5Kz9te9p027uSEcUW+Gu44Eh+X79g=="], "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], @@ -1273,8 +1271,6 @@ "dmg-license": ["dmg-license@1.0.11", "", { "dependencies": { "@types/plist": "^3.0.1", "@types/verror": "^1.10.3", "ajv": "^6.10.0", "crc": "^3.8.0", "iconv-corefoundation": "^1.1.7", "plist": "^3.0.4", "smart-buffer": "^4.0.2", "verror": "^1.10.0" }, "os": "darwin", "bin": { "dmg-license": "bin/dmg-license.js" } }, "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q=="], - "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], - "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], @@ -1307,7 +1303,7 @@ "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], @@ -1317,8 +1313,6 @@ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], - "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], "error-causes": ["error-causes@3.0.2", "", {}, "sha512-i0B8zq1dHL6mM85FGoxaJnVtx6LD5nL2v0hlpGdntg5FOSyzQ46c9lmz5qx0xRS2+PWHGOHcYxGIBC5Le2dRMw=="], @@ -1333,6 +1327,8 @@ "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + "es-toolkit": ["es-toolkit@1.52.0", "", {}, "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA=="], + "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], @@ -1383,11 +1379,11 @@ "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], - "framer-motion": ["framer-motion@12.35.0", "", { "dependencies": { "motion-dom": "^12.35.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-w8hghCMQ4oq10j6aZh3U2yeEQv5K69O/seDI/41PK4HtgkLrcBovUNc0ayBC3UyyU7V1mrY2yLzvYdWJX9pGZQ=="], + "framer-motion": ["framer-motion@14.0.0", "", { "dependencies": { "motion-dom": "14.0.0", "motion-utils": "14.0.0", "tslib": "^2.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-QAtHmybrDFSliyW1sexMtSQTQd+1jw2ajibEmzpuI4XdPVzQkn+dAzJMm2sW3pl9MJuSS4xN51djQ7huhlP/VA=="], "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], @@ -1421,15 +1417,13 @@ "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], - "git-raw-commits": ["git-raw-commits@5.0.1", "", { "dependencies": { "@conventional-changelog/git-client": "^2.6.0", "meow": "^13.0.0" }, "bin": { "git-raw-commits": "src/cli.js" } }, "sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ=="], - "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], - "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], + "global-directory": ["global-directory@5.0.0", "", { "dependencies": { "ini": "6.0.0" } }, "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -1437,9 +1431,9 @@ "google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="], - "googleapis": ["googleapis@171.4.0", "", { "dependencies": { "google-auth-library": "^10.2.0", "googleapis-common": "^8.0.0" } }, "sha512-xybFL2SmmUgIifgsbsRQYRdNrSAYwxWZDmkZTGjUIaRnX5jPqR8el/cEvo6rCqh7iaZx6MfEPS/lrDgZ0bymkg=="], + "googleapis": ["googleapis@183.0.0", "", { "dependencies": { "google-auth-library": "^11.0.0", "googleapis-common": "^9.0.0" } }, "sha512-Aa0KKctjSDfRrvKHFU6PtPYP9yBC/aOUmuc1VpIjJUrHtfoHz3n8/apLB7t4e3d8NbhTDF1x6JcZJO1au7VNHQ=="], - "googleapis-common": ["googleapis-common@8.0.1", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^7.0.0-rc.4", "google-auth-library": "^10.1.0", "qs": "^6.7.0", "url-template": "^2.0.8" } }, "sha512-eCzNACUXPb1PW5l0ULTzMHaL/ltPRADoPgjBlT8jWsTbxkCp6siv+qKJ/1ldaybCthGwsYFYallF7u9AkU4L+A=="], + "googleapis-common": ["googleapis-common@9.1.0", "", { "dependencies": { "extend": "^3.0.2", "gaxios": "^7.3.0", "google-auth-library": "^11.0.0", "google-logging-utils": "^2.0.0", "qs": "^6.7.0", "url-template": "^2.0.8" } }, "sha512-UJBElspYPJb0+fI8q0LxARw1hPnwd9yd5NqhKqEUPxjhnB1jdsRP7rlRTBp69JS5Vo10bCiRE9+ISsIG2A+Ttg=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], @@ -1457,7 +1451,7 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], @@ -1497,8 +1491,6 @@ "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], @@ -1523,22 +1515,16 @@ "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], - "is-electron": ["is-electron@2.2.2", "", {}, "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], - "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], - "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], @@ -1647,34 +1633,18 @@ "linkifyjs": ["linkifyjs@4.3.3", "", {}, "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg=="], - "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], - - "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], + "lint-staged": ["lint-staged@17.6.0", "", { "dependencies": { "picomatch": "^4.0.7", "string-argv": "^0.3.2", "tinyexec": "^1.3.1" }, "optionalDependencies": { "yaml": "^2.9.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-nOhBfYkZEwkFtNzD5pK9s9LkcWoxJ+whLzEnhqi9nl7zTB5n7tg8+9iYgMGx2Wm3VlLu8cbNj0RACzY+nWi5iQ=="], "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], - "lodash.kebabcase": ["lodash.kebabcase@4.1.1", "", {}, "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="], - - "lodash.mergewith": ["lodash.mergewith@4.6.2", "", {}, "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="], - - "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], - - "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], - - "lodash.upperfirst": ["lodash.upperfirst@4.3.1", "", {}, "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg=="], - "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], - "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], - "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], @@ -1737,8 +1707,6 @@ "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], - "meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], - "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], @@ -1803,8 +1771,6 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], @@ -1833,11 +1799,11 @@ "mongodb-connection-string-url": ["mongodb-connection-string-url@7.0.2", "", { "dependencies": { "@types/whatwg-url": "^13.0.0", "whatwg-url": "^14.1.0" } }, "sha512-ZoS07RoFqpKYQwAk59qmrx8+jJHNHU30UjlU96QktiGn1ltvDr+vCznLX5DiUBLEpMAHatHNWV1nM/74ul66kA=="], - "motion": ["motion@12.35.0", "", { "dependencies": { "framer-motion": "^12.35.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-BQUhNUIGvUcwXCzwmnT1JpjUqab34lIwxHnXUyWRht1WC1vAyp7/4qgMiUXxN3K6hgUhyoR+HNnLeQMwUZjVjw=="], + "motion": ["motion@14.0.0", "", { "dependencies": { "framer-motion": "14.0.0", "tslib": "^2.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-oGc2lkge2lkRZCP+J8/JsnYu4NFjqP1MtXirNdetn3QbvK2JqwM9A200EdT4C598KfzDhjLT12zF21xDM4Oilw=="], - "motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], + "motion-dom": ["motion-dom@14.0.0", "", { "dependencies": { "motion-utils": "14.0.0" } }, "sha512-aU3ApXo1yTpeUi3JU+jbDk2TELjxPE3MbBMUP7nZHlARb6RweJK+ojmLjpuB0YsY6zhbBl1YWGo8LMsI1/Llqw=="], - "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], + "motion-utils": ["motion-utils@14.0.0", "", {}, "sha512-jBsyjVxTTRZNeuvd/v+btVXr90LQkYl4HhRu9T2ARc+PMnvkmjsjRVeAg4Qm10b6TlTw+kykWI8gu/6LuvpLSQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1887,11 +1853,11 @@ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="], - "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], + "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="], "opencollective-postinstall": ["opencollective-postinstall@2.0.3", "", { "bin": { "opencollective-postinstall": "index.js" } }, "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="], @@ -1959,7 +1925,7 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], @@ -2093,14 +2059,12 @@ "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], "resumable-stream": ["resumable-stream@2.2.13", "", {}, "sha512-qy1ZZUP7sFKGXSx7OdbjU3f07VfSM7CghOlUaKT+35AuADX0sAYndmeCb5kVwgi4MSfkZZiL4yrdxWX1xx/Lnw=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - "rimraf": ["rimraf@5.0.10", "", { "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ=="], "roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="], @@ -2141,9 +2105,9 @@ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + "shell-quote": ["shell-quote@1.9.0", "", {}, "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA=="], - "shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], + "shiki": ["shiki@4.5.0", "", { "dependencies": { "@shikijs/core": "4.5.0", "@shikijs/engine-javascript": "4.5.0", "@shikijs/engine-oniguruma": "4.5.0", "@shikijs/langs": "4.5.0", "@shikijs/themes": "4.5.0", "@shikijs/types": "4.5.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-OcRW72ngQvc+MSVWBRIovC/BTW589iUE/Vxav7VeM4RcY9MUjqB+IR6ILG1k9nuW6LiG/nct9uma4/MBtnZbmQ=="], "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], @@ -2163,7 +2127,7 @@ "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], - "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], + "slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], @@ -2205,7 +2169,7 @@ "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "string-width": ["string-width@8.3.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -2213,7 +2177,7 @@ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2231,7 +2195,7 @@ "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], "swr": ["swr@2.4.1", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA=="], @@ -2343,6 +2307,8 @@ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "verkit": ["verkit@0.5.0", "", {}, "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g=="], + "verror": ["verror@1.10.1", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg=="], "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], @@ -2391,11 +2357,11 @@ "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "yaml": ["yaml@2.8.3", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg=="], + "yaml": ["yaml@2.9.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.2.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w=="], - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], "yauzl": ["yauzl@3.2.1", "", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A=="], @@ -2439,12 +2405,16 @@ "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@commitlint/read/tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="], + "@develar/schema-utils/ajv": ["ajv@6.14.0", "", { "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" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], "@electron/asar/commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], "@electron/asar/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "@electron/fuses/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@electron/fuses/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], "@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], @@ -2457,6 +2427,8 @@ "@electron/rebuild/node-abi": ["node-abi@4.26.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw=="], + "@electron/rebuild/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@electron/universal/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], "@electron/windows-sign/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], @@ -2467,8 +2439,6 @@ "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "@isaacs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], @@ -2499,11 +2469,15 @@ "@radix-ui/react-slider/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - "@slack/logger/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], + "@shikijs/core/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], + + "@shikijs/primitive/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], - "@slack/web-api/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], + "@shikijs/transformers/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], - "@slack/web-api/axios": ["axios@1.13.6", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ=="], + "@shikijs/transformers/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], + + "@shikijs/types/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" }, "bundled": true }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="], @@ -2545,26 +2519,26 @@ "app-builder-lib/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], - "axios/form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], - "axios/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "builder-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "cacache/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "cli-truncate/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "cli-truncate/string-width": ["string-width@8.2.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw=="], - - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], "concat-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "concurrently/yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], + "cosmiconfig-typescript-loader/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -2577,6 +2551,14 @@ "electron/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], + "electron-builder/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "electron-builder/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "electron-publish/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "electron-publish/form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "electron-updater/builder-util-runtime": ["builder-util-runtime@9.7.0", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw=="], "electron-winstaller/fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], @@ -2585,6 +2567,8 @@ "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "es-set-tostringtag/hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "extract-zip/yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], @@ -2593,11 +2577,19 @@ "gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "get-intrinsic/hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "global-directory/ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], + "global-directory/ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], + + "googleapis/google-auth-library": ["google-auth-library@11.1.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.1.4", "gcp-metadata": "^9.0.0", "google-logging-utils": "^2.0.0", "jws": "^4.0.0" } }, "sha512-YIBq5KNoHQrZ9PM4PeodDBqqBGlSTIxh1zibN8u3zNIO9UJg8gvKuCpdKV7fWXhsZ2zRkU6FhGrgKNgLJ2IRgw=="], + + "googleapis-common/gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="], + + "googleapis-common/google-auth-library": ["google-auth-library@11.1.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.1.4", "gcp-metadata": "^9.0.0", "google-logging-utils": "^2.0.0", "jws": "^4.0.0" } }, "sha512-YIBq5KNoHQrZ9PM4PeodDBqqBGlSTIxh1zibN8u3zNIO9UJg8gvKuCpdKV7fWXhsZ2zRkU6FhGrgKNgLJ2IRgw=="], - "iconv-corefoundation/cli-truncate": ["cli-truncate@2.1.0", "", { "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg=="], + "googleapis-common/google-logging-utils": ["google-logging-utils@2.0.1", "", {}, "sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A=="], "iconv-corefoundation/node-addon-api": ["node-addon-api@1.7.2", "", {}, "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="], @@ -2605,9 +2597,9 @@ "js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "log-update/slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], + "lint-staged/tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="], - "log-update/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "log-symbols/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], @@ -2623,10 +2615,14 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "ora/cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + "ora/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "ora/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "p-queue/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + "p-retry/@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -2673,20 +2669,24 @@ "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "rimraf/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "roarr/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], "rtf-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "shiki/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], - "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + "sileo/motion": ["motion@12.35.0", "", { "dependencies": { "framer-motion": "^12.35.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-BQUhNUIGvUcwXCzwmnT1JpjUqab34lIwxHnXUyWRht1WC1vAyp7/4qgMiUXxN3K6hgUhyoR+HNnLeQMwUZjVjw=="], + + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], @@ -2695,6 +2695,8 @@ "tiny-async-pool/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "tsx/esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], "unzipper/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], @@ -2705,7 +2707,9 @@ "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "wrap-ansi/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], @@ -2715,10 +2719,18 @@ "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "@electron/fuses/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], "@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + "@electron/rebuild/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@electron/rebuild/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "@electron/rebuild/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], @@ -2765,8 +2777,6 @@ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], @@ -2777,14 +2787,6 @@ "@radix-ui/react-slider/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@slack/logger/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "@slack/web-api/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "@slack/web-api/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - - "@slack/web-api/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "@types/better-sqlite3/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], @@ -2807,22 +2809,38 @@ "app-builder-lib/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], - "axios/form-data/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "axios/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "builder-util/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "cli-truncate/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "cli-truncate/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "concat-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "concurrently/yargs/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "dmg-license/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "electron-builder/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "electron-builder/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "electron-builder/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "electron-builder/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "electron-publish/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "electron-publish/form-data/hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "electron-winstaller/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], "electron-winstaller/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], @@ -2831,13 +2849,17 @@ "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "iconv-corefoundation/cli-truncate/slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], + "googleapis-common/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "googleapis-common/google-auth-library/gcp-metadata": ["gcp-metadata@9.0.4", "", { "dependencies": { "gaxios": "^7.1.3", "google-logging-utils": "^2.0.0", "json-bigint": "^1.0.0" } }, "sha512-p6WvbXOhfwnVtv/MyPq5kBiVhfV/qglMIxwwTVNEI1Ha1HmOgz5uHYHtYO6SfGckFaXe8blA11IJJ3wqXmvmBA=="], + + "googleapis/google-auth-library/gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="], - "log-update/slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "googleapis/google-auth-library/gcp-metadata": ["gcp-metadata@9.0.4", "", { "dependencies": { "gaxios": "^7.1.3", "google-logging-utils": "^2.0.0", "json-bigint": "^1.0.0" } }, "sha512-p6WvbXOhfwnVtv/MyPq5kBiVhfV/qglMIxwwTVNEI1Ha1HmOgz5uHYHtYO6SfGckFaXe8blA11IJJ3wqXmvmBA=="], - "log-update/slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], + "googleapis/google-auth-library/google-logging-utils": ["google-logging-utils@2.0.1", "", {}, "sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A=="], - "log-update/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "log-symbols/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], @@ -2853,7 +2875,9 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "ora/cli-cursor/restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "ora/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "ora/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "prosemirror-dropcursor/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], @@ -2865,6 +2889,10 @@ "prosemirror-inputrules/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + "sileo/motion/framer-motion": ["framer-motion@12.35.0", "", { "dependencies": { "motion-dom": "^12.35.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-w8hghCMQ4oq10j6aZh3U2yeEQv5K69O/seDI/41PK4HtgkLrcBovUNc0ayBC3UyyU7V1mrY2yLzvYdWJX9pGZQ=="], + + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], @@ -2919,20 +2947,48 @@ "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], - "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + "@electron/rebuild/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@electron/rebuild/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@electron/rebuild/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "@electron/rebuild/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "app-builder-lib/@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], "app-builder-lib/@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], "app-builder-lib/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "electron-builder/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "electron-builder/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "electron-builder/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "electron-builder/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "googleapis/google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "sileo/motion/framer-motion/motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], + + "sileo/motion/framer-motion/motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], + + "@electron/rebuild/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@electron/rebuild/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "electron-builder/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "ora/cli-cursor/restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "electron-builder/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], } } diff --git a/package.json b/package.json index f87f45f5..ce40f2cb 100644 --- a/package.json +++ b/package.json @@ -75,14 +75,14 @@ "@hugeicons/core-free-icons": "^4.3.5", "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", - "@linear/sdk": "^77.0.0", + "@linear/sdk": "^97.0.0", "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", "@openrouter/ai-sdk-provider": "^2.3.3", "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", - "@slack/web-api": "^7.15.0", + "@slack/web-api": "^8.2.0", "@t3-oss/env-nextjs": "^0.12.0", "@tanstack/react-query": "^5.104.1", "@tiptap/extension-placeholder": "^3.31.4", @@ -104,12 +104,12 @@ "date-fns": "^4.4.0", "drizzle-orm": "^0.45.3", "electron-updater": "^6.8.9", - "googleapis": "^171.4.0", + "googleapis": "^183.0.0", "highlight.js": "^11.11.1", "lucide-react": "^1.52.0", "mammoth": "^1.13.0", "mongodb": "^7.7.0", - "motion": "^12.35.0", + "motion": "^14.0.0", "mysql2": "^3.24.5", "next": "^15.2.3", "node-pptx-parser": "^1.0.1", @@ -128,18 +128,18 @@ "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", "server-only": "^0.0.1", - "shiki": "^3.23.0", + "shiki": "^4.5.0", "sileo": "^0.1.5", "sqlite-vec": "^0.1.9", - "superjson": "^2.2.1", + "superjson": "^2.2.6", "tailwind-variants": "^3.2.2", "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2" }, "devDependencies": { - "@commitlint/cli": "^20.5.0", - "@commitlint/config-conventional": "^20.5.0", + "@commitlint/cli": "^21.2.3", + "@commitlint/config-conventional": "^21.2.3", "@tailwindcss/postcss": "^4.3.3", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", @@ -147,12 +147,12 @@ "@types/pg": "^8.23.1", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", - "concurrently": "^9.2.1", + "concurrently": "^10.0.5", "drizzle-kit": "^0.31.11", "electron": "40.8.0", "electron-builder": "26.8.1", "lefthook": "^2.1.17", - "lint-staged": "^16.4.0", + "lint-staged": "^17.6.0", "postcss": "^8.5.29", "prettier": "^3.9.9", "prettier-plugin-tailwindcss": "^0.7.2", diff --git a/src/lib/integrations/providers/gmail/service.ts b/src/lib/integrations/providers/gmail/service.ts index e7b9e19d..4cbbf184 100644 --- a/src/lib/integrations/providers/gmail/service.ts +++ b/src/lib/integrations/providers/gmail/service.ts @@ -1,6 +1,5 @@ import "server-only"; -import { OAuth2Client } from "google-auth-library"; import { gmail_v1, google } from "googleapis"; export type ParsedEmail = { @@ -151,7 +150,7 @@ export class GmailService { private gmail: gmail_v1.Gmail; constructor(accessToken: string) { - const auth = new OAuth2Client(); + const auth = new google.auth.OAuth2(); auth.setCredentials({ access_token: accessToken }); this.gmail = google.gmail({ version: "v1", auth }); } diff --git a/src/lib/integrations/providers/google-calendar/service.ts b/src/lib/integrations/providers/google-calendar/service.ts index 2bbb4718..2e48e44d 100644 --- a/src/lib/integrations/providers/google-calendar/service.ts +++ b/src/lib/integrations/providers/google-calendar/service.ts @@ -1,6 +1,5 @@ import "server-only"; -import { OAuth2Client } from "google-auth-library"; import { calendar_v3, google } from "googleapis"; export type CalendarEntry = { @@ -76,7 +75,7 @@ export class GoogleCalendarService { private calendar: calendar_v3.Calendar; constructor(accessToken: string) { - const auth = new OAuth2Client(); + const auth = new google.auth.OAuth2(); auth.setCredentials({ access_token: accessToken }); this.calendar = google.calendar({ version: "v3", auth }); } diff --git a/src/lib/integrations/providers/google-drive/service.ts b/src/lib/integrations/providers/google-drive/service.ts index 4c5dfda1..20ea62bf 100644 --- a/src/lib/integrations/providers/google-drive/service.ts +++ b/src/lib/integrations/providers/google-drive/service.ts @@ -1,6 +1,5 @@ import "server-only"; -import { OAuth2Client } from "google-auth-library"; import { drive_v3, google } from "googleapis"; import { Readable } from "node:stream"; @@ -84,7 +83,7 @@ export class GoogleDriveService { private drive: drive_v3.Drive; constructor(accessToken: string) { - const auth = new OAuth2Client(); + const auth = new google.auth.OAuth2(); auth.setCredentials({ access_token: accessToken }); this.drive = google.drive({ version: "v3", auth }); } From b88ef14ab2106cbe93fa65bb743bbe8313a6986a Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:32:05 +0000 Subject: [PATCH 007/133] chore(deps): drop unused packages, cover office documents - remove tailwind-variants, highlight.js and rehype-highlight (no imports anywhere) and the two Prettier plugins, which never loaded because the repo has no Prettier config listing them - officeparser 6.1.1 (latest 6.x). Holding below 8: officeparser 8 pulls pdfjs-dist 6, which hangs under bun (the test runtime) on PDF parsing even though it works on Node. Revisit when bun or pdfjs fixes that. - add PDF and ODT regression tests for the officeparser extraction path (the document parsers are loaded through runtime specifiers, so they were easy to mistake for unused dependencies) Gate G0: typecheck ok, 183/183 test files pass, format ok. Co-Authored-By: Claude Opus 5.5 --- bun.lock | 125 +++++++++++++------------------ package.json | 7 +- src/lib/documents/loader.test.ts | 41 ++++++++++ 3 files changed, 93 insertions(+), 80 deletions(-) diff --git a/bun.lock b/bun.lock index 1873b02a..5639d501 100644 --- a/bun.lock +++ b/bun.lock @@ -67,7 +67,6 @@ "drizzle-orm": "^0.45.3", "electron-updater": "^6.8.9", "googleapis": "^183.0.0", - "highlight.js": "^11.11.1", "lucide-react": "^1.52.0", "mammoth": "^1.13.0", "mongodb": "^7.7.0", @@ -77,7 +76,7 @@ "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", - "officeparser": "^6.0.7", + "officeparser": "^6.1.1", "pg": "^8.23.1", "ppt": "^0.0.2", "react": "^19.0.0", @@ -85,7 +84,6 @@ "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", - "rehype-highlight": "^7.0.2", "remark-gfm": "^4.0.1", "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", @@ -94,7 +92,6 @@ "sileo": "^0.1.5", "sqlite-vec": "^0.1.9", "superjson": "^2.2.6", - "tailwind-variants": "^3.2.2", "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2", @@ -103,7 +100,6 @@ "@commitlint/cli": "^21.2.3", "@commitlint/config-conventional": "^21.2.3", "@tailwindcss/postcss": "^4.3.3", - "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", "@types/pg": "^8.23.1", @@ -117,7 +113,6 @@ "lint-staged": "^17.6.0", "postcss": "^8.5.29", "prettier": "^3.9.9", - "prettier-plugin-tailwindcss": "^0.7.2", "tailwindcss": "^4.3.3", "typescript": "^5.8.2", "wait-on": "^9.5.1", @@ -185,22 +180,8 @@ "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], - - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], - - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], - - "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], - - "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], "@commitlint/cli": ["@commitlint/cli@21.2.3", "", { "dependencies": { "@commitlint/config-conventional": "^21.2.3", "@commitlint/format": "^21.2.3", "@commitlint/lint": "^21.2.3", "@commitlint/load": "^21.2.3", "@commitlint/read": "^21.2.3", "@commitlint/types": "^21.2.3", "tinyexec": "^1.0.0", "yargs": "^18.0.0" }, "bin": { "commitlint": "cli.js" } }, "sha512-5yOX6IRjcrIReCxpyAd04hgI/yhUMpVBJ/ouwFV0wk9yx5+fYRDWZWJ5h55Tbedgfol+5m2mU5nqzbB8g3v0vQ=="], @@ -469,29 +450,29 @@ "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.6.0", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-19jGXfpctLDJUELLUZGJ5BllcLT7rHdF+gTTaN2jzqu0bGkUhpdcYtgK2Vux+g3zuBAa0TM/W666QMIjYhYujw=="], - "@napi-rs/canvas": ["@napi-rs/canvas@0.1.97", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.97", "@napi-rs/canvas-darwin-arm64": "0.1.97", "@napi-rs/canvas-darwin-x64": "0.1.97", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.97", "@napi-rs/canvas-linux-arm64-gnu": "0.1.97", "@napi-rs/canvas-linux-arm64-musl": "0.1.97", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.97", "@napi-rs/canvas-linux-x64-gnu": "0.1.97", "@napi-rs/canvas-linux-x64-musl": "0.1.97", "@napi-rs/canvas-win32-arm64-msvc": "0.1.97", "@napi-rs/canvas-win32-x64-msvc": "0.1.97" } }, "sha512-8cFniXvrIEnVwuNSRCW9wirRZbHvrD3JVujdS2P5n5xiJZNZMOZcfOvJ1pb66c7jXMKHHglJEDVJGbm8XWFcXQ=="], + "@napi-rs/canvas": ["@napi-rs/canvas@0.1.100", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.100", "@napi-rs/canvas-darwin-arm64": "0.1.100", "@napi-rs/canvas-darwin-x64": "0.1.100", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", "@napi-rs/canvas-linux-arm64-musl": "0.1.100", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-gnu": "0.1.100", "@napi-rs/canvas-linux-x64-musl": "0.1.100", "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", "@napi-rs/canvas-win32-x64-msvc": "0.1.100" } }, "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA=="], - "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.97", "", { "os": "android", "cpu": "arm64" }, "sha512-V1c/WVw+NzH8vk7ZK/O8/nyBSCQimU8sfMsB/9qeSvdkGKNU7+mxy/bIF0gTgeBFmHpj30S4E9WHMSrxXGQuVQ=="], + "@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.100", "", { "os": "android", "cpu": "arm64" }, "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ=="], - "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.97", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ok+SCEF4YejcxuJ9Rm+WWunHHpf2HmiPxfz6z1a/NFQECGXtsY7A4B8XocK1LmT1D7P174MzwPF9Wy3AUAwEPw=="], + "@napi-rs/canvas-darwin-arm64": ["@napi-rs/canvas-darwin-arm64@0.1.100", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A=="], - "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.97", "", { "os": "darwin", "cpu": "x64" }, "sha512-PUP6e6/UGlclUvAQNnuXCcnkpdUou6VYZfQOQxExLp86epOylmiwLkqXIvpFmjoTEDmPmXrI+coL/9EFU1gKPA=="], + "@napi-rs/canvas-darwin-x64": ["@napi-rs/canvas-darwin-x64@0.1.100", "", { "os": "darwin", "cpu": "x64" }, "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw=="], - "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.97", "", { "os": "linux", "cpu": "arm" }, "sha512-XyXH2L/cic8eTNtbrXCcvqHtMX/nEOxN18+7rMrAM2XtLYC/EB5s0wnO1FsLMWmK+04ZSLN9FBGipo7kpIkcOw=="], + "@napi-rs/canvas-linux-arm-gnueabihf": ["@napi-rs/canvas-linux-arm-gnueabihf@0.1.100", "", { "os": "linux", "cpu": "arm" }, "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA=="], - "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.97", "", { "os": "linux", "cpu": "arm64" }, "sha512-Kuq/M3djq0K8ktgz6nPlK7Ne5d4uWeDxPpyKWOjWDK2RIOhHVtLtyLiJw2fuldw7Vn4mhw05EZXCEr4Q76rs9w=="], + "@napi-rs/canvas-linux-arm64-gnu": ["@napi-rs/canvas-linux-arm64-gnu@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw=="], - "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.97", "", { "os": "linux", "cpu": "arm64" }, "sha512-kKmSkQVnWeqg7qdsiXvYxKhAFuHz3tkBjW/zyQv5YKUPhotpaVhpBGv5LqCngzyuRV85SXoe+OFj+Tv0a0QXkQ=="], + "@napi-rs/canvas-linux-arm64-musl": ["@napi-rs/canvas-linux-arm64-musl@0.1.100", "", { "os": "linux", "cpu": "arm64" }, "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ=="], - "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.97", "", { "os": "linux", "cpu": "none" }, "sha512-Jc7I3A51jnEOIAXeLsN/M/+Z28LUeakcsXs07FLq9prXc0eYOtVwsDEv913Gr+06IRo34gJJVgT0TXvmz+N2VA=="], + "@napi-rs/canvas-linux-riscv64-gnu": ["@napi-rs/canvas-linux-riscv64-gnu@0.1.100", "", { "os": "linux", "cpu": "none" }, "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw=="], - "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.97", "", { "os": "linux", "cpu": "x64" }, "sha512-iDUBe7AilfuBSRbSa8/IGX38Mf+iCSBqoVKLSQ5XaY2JLOaqz1TVyPFEyIck7wT6mRQhQt5sN6ogfjIDfi74tg=="], + "@napi-rs/canvas-linux-x64-gnu": ["@napi-rs/canvas-linux-x64-gnu@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg=="], - "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.97", "", { "os": "linux", "cpu": "x64" }, "sha512-AKLFd/v0Z5fvgqBDqhvqtAdx+fHMJ5t9JcUNKq4FIZ5WH+iegGm8HPdj00NFlCSnm83Fp3Ln8I2f7uq1aIiWaA=="], + "@napi-rs/canvas-linux-x64-musl": ["@napi-rs/canvas-linux-x64-musl@0.1.100", "", { "os": "linux", "cpu": "x64" }, "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA=="], - "@napi-rs/canvas-win32-arm64-msvc": ["@napi-rs/canvas-win32-arm64-msvc@0.1.97", "", { "os": "win32", "cpu": "arm64" }, "sha512-u883Yr6A6fO7Vpsy9YE4FVCIxzzo5sO+7pIUjjoDLjS3vQaNMkVzx5bdIpEL+ob+gU88WDK4VcxYMZ6nmnoX9A=="], + "@napi-rs/canvas-win32-arm64-msvc": ["@napi-rs/canvas-win32-arm64-msvc@0.1.100", "", { "os": "win32", "cpu": "arm64" }, "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw=="], - "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.97", "", { "os": "win32", "cpu": "x64" }, "sha512-sWtD2EE3fV0IzN+iiQUqr/Q1SwqWhs2O1FKItFlxtdDkikpEj5g7DKQpY3x55H/MAOnL8iomnlk3mcEeGiUMoQ=="], + "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA=="], "@next/env": ["@next/env@15.5.12", "", {}, "sha512-pUvdJN1on574wQHjaBfNGDt9Mz5utDSZFsIIQkMzPgNS8ZvT4H2mwOrOIClwsQOb6EGx5M76/CZr6G8i6pSpLg=="], @@ -977,8 +958,6 @@ "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@trivago/prettier-plugin-sort-imports": ["@trivago/prettier-plugin-sort-imports@6.0.2", "", { "dependencies": { "@babel/generator": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "javascript-natural-sort": "^0.7.1", "lodash-es": "^4.17.21", "minimatch": "^9.0.0", "parse-imports-exports": "^0.2.4" }, "peerDependencies": { "@vue/compiler-sfc": "3.x", "prettier": "2.x - 3.x", "prettier-plugin-ember-template-tag": ">= 2.0.0", "prettier-plugin-svelte": "3.x", "svelte": "4.x || 5.x" }, "optionalPeers": ["@vue/compiler-sfc", "prettier-plugin-ember-template-tag", "prettier-plugin-svelte", "svelte"] }, "sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA=="], - "@trpc/client": ["@trpc/client@11.19.0", "", { "peerDependencies": { "@trpc/server": "11.19.0", "typescript": ">=5.7.2" }, "bin": { "intent": "bin/intent.js" } }, "sha512-0MKkPq6MejsKB5Opca1Rl22KVIaqo2+A1EiXyZ8EGUsl9TLrPdpGn+Usux20TZKFwnSC2+wI/WilqNJaP4ODfw=="], "@trpc/react-query": ["@trpc/react-query@11.19.0", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.19.0", "@trpc/server": "11.19.0", "react": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-TrqZBa/6weXX27mf0P2dMCI65duqO3B/wf9BkP1MezUWSUg7SRGJrIv6K8vjgjeHdafFBI1mmcqPEYXHF4AlVQ=="], @@ -1091,7 +1070,7 @@ "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], @@ -1113,7 +1092,7 @@ "border-beam": ["border-beam@1.4.1", "", { "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-YyugmKjrhkg1PBC1ZKX7JvFo/zYzha6NXOq24VWrnvBYmDRvGCgFS9oxZoKJ+oS9Kn436l1etYGlAdGiWK+3ag=="], - "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], "bson": ["bson@7.3.3", "", {}, "sha512-oz3LwE3qGEhTCSyhzQRLY3Bj1NLOsjFMf6tcmY5J8M+3R7EVcmoBfSHWvjUK3yXCLDUsGpIuB3aQL4nDZ1EV/g=="], @@ -1369,7 +1348,9 @@ "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], - "file-type": ["file-type@21.3.4", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g=="], + "fflate": ["fflate@0.8.3", "", {}, "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA=="], + + "file-type": ["file-type@22.1.1", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.5", "token-types": "^6.1.2", "uint8array-extras": "^1.5.0" } }, "sha512-sEB0oStmeLGtpmSAD88RDNuLsvhv4iC3u0lE25CUvfCULvj49xoQ3l3K525Vn+ZzsZ6DOLajQCV6RmhwwhqiJg=="], "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], @@ -1453,18 +1434,12 @@ "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], - "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], - "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], - "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], - "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], @@ -1541,8 +1516,6 @@ "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], - "javascript-natural-sort": ["javascript-natural-sort@0.7.1", "", {}, "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="], - "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "joi": ["joi@18.2.9", "", { "dependencies": { "@hapi/address": "^5.1.1", "@hapi/formula": "^3.0.2", "@hapi/hoek": "^11.0.7", "@hapi/pinpoint": "^2.0.1", "@hapi/tlds": "^1.1.1", "@hapi/topo": "^6.0.2", "@standard-schema/spec": "^1.1.0" } }, "sha512-2mD929bUVKUhOLQQEVhlf6EZ0Mlo0DeRb5MO7cViR9AXLtBauuccEtB1py9Ocxpo/P7ucnh442iY/iOwrh3IQw=="], @@ -1551,8 +1524,6 @@ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], @@ -1637,8 +1608,6 @@ "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], - "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], - "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], @@ -1653,8 +1622,6 @@ "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], - "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], - "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], @@ -1773,7 +1740,7 @@ "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], - "minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -1849,7 +1816,7 @@ "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - "officeparser": ["officeparser@6.0.7", "", { "dependencies": { "@xmldom/xmldom": "^0.8.11", "concat-stream": "^2.0.0", "file-type": "^21.3.4", "pdfjs-dist": "^5.5.207", "tesseract.js": "^7.0.0", "yauzl": "^3.2.1" }, "bin": { "officeparser": "dist/index.js" } }, "sha512-MkNHyWIfEZRDtB8c0fgJHdb4Ui0I/WztBjlUjlPiEbTO6dIYaJMt+llS5p5Foj13guUZgGxkkM9VwsVRthHNAA=="], + "officeparser": ["officeparser@6.1.1", "", { "dependencies": { "@xmldom/xmldom": "^0.9.10", "fflate": "^0.8.2", "file-type": "^22.0.1", "pdfjs-dist": "5.6.205", "tesseract.js": "^7.0.0" }, "bin": { "officeparser": "dist/cli.js" } }, "sha512-C8XcY7h/4It+ZZDTnPs9p7v2c09zcJUVQKZH4Q8ZtBLeVrauSSrJvvV8Orcq8fSJjxPFuQAueQqkqTfGv3HlPw=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -1889,19 +1856,15 @@ "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "parse-imports-exports": ["parse-imports-exports@0.2.4", "", { "dependencies": { "parse-statements": "1.0.11" } }, "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ=="], - "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "parse-statements": ["parse-statements@1.0.11", "", {}, "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA=="], - "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "pdfjs-dist": ["pdfjs-dist@5.5.207", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.95", "node-readable-to-web-readable-stream": "^0.4.2" } }, "sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw=="], + "pdfjs-dist": ["pdfjs-dist@5.6.205", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.96", "node-readable-to-web-readable-stream": "^0.4.2" } }, "sha512-tlUj+2IDa7G1SbvBNN74UHRLJybZDWYom+k6p5KIZl7huBvsA4APi6mKL+zCxd3tLjN5hOOEE9Tv7VdzO88pfg=="], "pe-library": ["pe-library@0.4.1", "", {}, "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw=="], @@ -1949,8 +1912,6 @@ "prettier": ["prettier@3.9.9", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg=="], - "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.2", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA=="], - "proc-log": ["proc-log@5.0.0", "", {}, "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], @@ -2035,8 +1996,6 @@ "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], - "rehype-highlight": ["rehype-highlight@7.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-text": "^4.0.0", "lowlight": "^3.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA=="], - "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], @@ -2275,8 +2234,6 @@ "unique-slug": ["unique-slug@5.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg=="], - "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], - "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], @@ -2363,7 +2320,7 @@ "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], - "yauzl": ["yauzl@3.2.1", "", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A=="], + "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -2431,6 +2388,8 @@ "@electron/universal/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "@electron/universal/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "@electron/windows-sign/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], @@ -2517,8 +2476,6 @@ "app-builder-lib/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "app-builder-lib/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], - "axios/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], @@ -2569,8 +2526,6 @@ "es-set-tostringtag/hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - "extract-zip/yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], @@ -2615,6 +2570,8 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "officeparser/@xmldom/xmldom": ["@xmldom/xmldom@0.9.12", "", {}, "sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A=="], + "ora/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "ora/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2701,8 +2658,6 @@ "unzipper/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], - "word-extractor/yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -2731,6 +2686,8 @@ "@electron/rebuild/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "@electron/universal/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], @@ -2807,14 +2764,14 @@ "app-builder-lib/@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "app-builder-lib/minimatch/brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], - "axios/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "builder-util/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "cacache/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "cli-truncate/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "cli-truncate/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2847,6 +2804,8 @@ "electron/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "googleapis-common/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], @@ -2889,6 +2848,8 @@ "prosemirror-inputrules/prosemirror-transform/prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], + "rimraf/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "sileo/motion/framer-motion": ["framer-motion@12.35.0", "", { "dependencies": { "motion-dom": "^12.35.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-w8hghCMQ4oq10j6aZh3U2yeEQv5K69O/seDI/41PK4HtgkLrcBovUNc0ayBC3UyyU7V1mrY2yLzvYdWJX9pGZQ=="], "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -2953,6 +2914,8 @@ "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + "@electron/asar/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@electron/rebuild/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "@electron/rebuild/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -2961,14 +2924,18 @@ "@electron/rebuild/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@electron/universal/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "app-builder-lib/@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], "app-builder-lib/@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], - "app-builder-lib/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "cacache/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "dir-compare/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "electron-builder/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "electron-builder/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -2977,8 +2944,14 @@ "electron-builder/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "googleapis/google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "sileo/motion/framer-motion/motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], "sileo/motion/framer-motion/motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], @@ -2987,8 +2960,12 @@ "@electron/rebuild/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "electron-builder/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "electron-builder/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], } } diff --git a/package.json b/package.json index ce40f2cb..7ae19bce 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "drizzle-orm": "^0.45.3", "electron-updater": "^6.8.9", "googleapis": "^183.0.0", - "highlight.js": "^11.11.1", "lucide-react": "^1.52.0", "mammoth": "^1.13.0", "mongodb": "^7.7.0", @@ -115,7 +114,7 @@ "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", - "officeparser": "^6.0.7", + "officeparser": "^6.1.1", "pg": "^8.23.1", "ppt": "^0.0.2", "react": "^19.0.0", @@ -123,7 +122,6 @@ "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", - "rehype-highlight": "^7.0.2", "remark-gfm": "^4.0.1", "resumable-stream": "^2.2.13", "rtf2text": "^1.0.1", @@ -132,7 +130,6 @@ "sileo": "^0.1.5", "sqlite-vec": "^0.1.9", "superjson": "^2.2.6", - "tailwind-variants": "^3.2.2", "turndown": "^7.2.4", "word-extractor": "^1.0.4", "zod": "^3.24.2" @@ -141,7 +138,6 @@ "@commitlint/cli": "^21.2.3", "@commitlint/config-conventional": "^21.2.3", "@tailwindcss/postcss": "^4.3.3", - "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", "@types/pg": "^8.23.1", @@ -155,7 +151,6 @@ "lint-staged": "^17.6.0", "postcss": "^8.5.29", "prettier": "^3.9.9", - "prettier-plugin-tailwindcss": "^0.7.2", "tailwindcss": "^4.3.3", "typescript": "^5.8.2", "wait-on": "^9.5.1" diff --git a/src/lib/documents/loader.test.ts b/src/lib/documents/loader.test.ts index 1c4a6d13..818a7ad7 100644 --- a/src/lib/documents/loader.test.ts +++ b/src/lib/documents/loader.test.ts @@ -295,6 +295,40 @@ describe("document loader", () => { expect(result.content).toContain("| name | value |"); }); + it("extracts pdf text through officeparser", async () => { + const { loadInlineAttachmentDocument } = await import("./loader"); + + const result = await loadInlineAttachmentDocument({ + filename: "hello.pdf", + mediaType: "application/pdf", + url: toDataUrl( + Buffer.from(SAMPLE_PDF_BASE64, "base64"), + "application/pdf", + ), + }); + + expect(result.content).toContain("Hello PDF World"); + expect(result.content).toContain("Second line of text"); + }, 20_000); + + it("extracts odt headings, lists and tables through officeparser", async () => { + const { loadInlineAttachmentDocument } = await import("./loader"); + + const result = await loadInlineAttachmentDocument({ + filename: "report.odt", + mediaType: "application/vnd.oasis.opendocument.text", + url: toDataUrl( + Buffer.from(SAMPLE_ODT_BASE64, "base64"), + "application/vnd.oasis.opendocument.text", + ), + }); + + expect(result.content).toContain("Quarterly Report"); + expect(result.content).toContain("Revenue grew 12% this quarter."); + expect(result.content).toContain("First item"); + expect(result.content).toContain("B2"); + }, 20_000); + it("fails fast on malformed office documents", async () => { const { loadInlineAttachmentDocument } = await import("./loader"); @@ -311,3 +345,10 @@ describe("document loader", () => { ).rejects.toThrow(); }); }); + +// Tiny fixtures generated for the officeparser path: a one-page PDF with two +// text lines, and an ODT (macOS textutil) with a heading, list and table. +const SAMPLE_PDF_BASE64 = + "JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvQ29udGVudHMgNCAwIFIgL1Jlc291cmNlcyA8PCAvRm9udCA8PCAvRjEgNSAwIFIgPj4gPj4gPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0xlbmd0aCA4MCA+PgpzdHJlYW0KQlQgL0YxIDE4IFRmIDcyIDcyMCBUZCAoSGVsbG8gUERGIFdvcmxkKSBUaiAwIC0zMCBUZCAoU2Vjb25kIGxpbmUgb2YgdGV4dCkgVGogRVQKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UeXBlMSAvQmFzZUZvbnQgL0hlbHZldGljYSA+PgplbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwNTggMDAwMDAgbiAKMDAwMDAwMDExNSAwMDAwMCBuIAowMDAwMDAwMjQxIDAwMDAwIG4gCjAwMDAwMDAzNzEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA2IC9Sb290IDEgMCBSID4+CnN0YXJ0eHJlZgo0NDEKJSVFT0YK"; +const SAMPLE_ODT_BASE64 = + "UEsDBBQAAAAAAG1LR11exjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAAAAgAbUtHXQBXuJo2BAAA6BMAAAsAAABjb250ZW50LnhtbM1YzW7jNhC+71MIAnopIFGSnT8h9qItsKcE2G5SoFdaom2ilKiSdJT01Gfpo/VJOiQlmZItW0EDtxcvNPMN55tvRiNm7z+/Fsx7IUJSXi78OIx8j5QZz2m5Wfi/PH8Jbv3Py0/3fL2mGUlznu0KUqog46WCfz2ILmVqvQt/J8qUY0llWuKCyFRlKa9I2UalLjo1uaxFqjc2OdyA3WhFXtXUYI3txeLV9MwG7EbnAtdTgzUWRHXD13xq8KtkwZqD6kWFFR2weGW0/G3hb5WqUoTqug7rWcjFBsV3d3fIeDvCWYerdoIZVJ4hwohOJlEcxqjFFkThqfw01qVU7ooVEZOlwQofdFW+bCZPxMtmRJpsi8Xk2TDgfntn+fT2znI3tsBqO9KTW/QITvPz+LCfBVFMzaWxPakyQavJZVq0G88576jqAPuCGrpJFM2RfXbQ9Ul4LagiwoFnJ+EZZlmnOC+OiQa4GAEiIC96TLvB10LIkYAEWXcHlvno0b8+PjxlW1LgPZieBwe0lAqXWplmpfX26LJdmmvYlcEaZyTIScbk8t7Oemf27LPu2cJ/ptA534ORbgEFZW+tHS3v0dipjR3vFIfho1lgju3Smd9+Kr3OYr+xtYnMkvPbKPMUVAIaJxQlsgHXNNfjfRNGtPQ9uxcxoxsovcBiA8IYqk7mcRpfDyhUWOCNwNW2dYBBf3TMQ2CjnkD5HIu8Y9oFuWzXPLV8ghVXSg9XFCbJbAasUVcifBIOKzTy9loCZxmjpH+AMZmHUaXeUWVy2Srj6+ubf19lnLyzytklqmRkrXSNV1Fk5g88pjxa5nD0wg86lzPGkJFXcmhoSXFJlXlzQbmr5Lan3Di0ybKXx8mDxku5cE/mH9KTy5B9PtxHkHeURJusJnSzhc6vOMv9gTWALyIuR3z62sDIq+NlRMHXK5AVzswdOAqjYZfP1XDwqp+r4QNy6hX8E2e7ojy+0aFS7Rwsdms8bGtjb9b8LJxfJ1f6TbNeQVgwQCQ31zffv5cuYWyMLLiGVME0kK3Ced7qNbtNjull7vuMyma4eyQeYt8FMLhcsOYdWO0Y9MSzTm2HSfbto3UF+rK48P/+86+OpnOIQ9PE6MbCoQQuJMR8goyYxlXofYZXENRI2Xh1Jae49dxNsWj0CtA4Vjx/6x50eFN/1dB03v+vnThAvjz0w4u6/HkHF2Yi2Jv3jVRcqIaSDmjpVScyJGcygP+bvvDtiLcRpPZ6x5+hFiffTYbveaCl2lLp/W7rCk/Uo2U/PGowUXANLk7UPztf/xcqII8+5zgXdDTZByV/IvBXfv6e7HsDHG4uhea3uSD2b53W1stpPb3QZs+ModuNhz4gSPB6cApsnNEzzO5afhoXeH5e4B/iMV0HLC7M68fpvNBJBf8DSZP/qaTTeR1K6lr2W97ub9Rb7Wjk/+mW/wBQSwMEFAAAAAgAbUtHXf5JorSsAgAARAkAAAoAAABzdHlsZXMueG1spVbLbtswELz3KwzdZVpJCySC7dx6ak5NP4AmKYkIpSVIynL69V1SD1N+JAJ6CaDdWe7scDnO9uVUq9VRGCuh2SXZepOsRMOAy6bcJX/efqZPycv+2xaKQjKRc2BtLRqXWvehhF1hcWPzPrlLWtPkQK20eUNrYXPHctCiGYvyGJ2HVn0kHLa0PIDjaidObmmxx85q6WF55wCOq7mh3dJij0VN4/IClhafrEoLSBnUmjp5weKkZPO+SyrndE5I13Xr7nENpiTZ8/MzCdmJMJtwujUqoDgjQgnfzJJsnZERWwtHl/Lz2JhS09YHYRZLQx29ulV7LBdvxLG8Iw2rqFm8GwE8v95Hvvx6H3lcW1NX3bmTJ/KKyfDn9dd5F0y9tJfHzqRiRurFY/bouB4AJqq+oH+gge7DZvOd9N8RuvsU3hnphIng7FM4o4pNikN9SzTEZQQRqTj6NU1Wg4XMbGs/elQB6E8FZSLlgim73/a7NYVX/bfXaJe8SVQqWeEKjYBaqo8xTvZbcu/UId4b4diEi4K2arDHodF4pKaGlobqKhnRUyTVBqUxTqKl9in0GjwEdMqldbTx7rpZ/5CNpzQg0Mqu6wLN2WgF9EEr/2Iwe1hvtAuD3WC8ZIzggtMI4Sum0ZvkAQwXJq2BC7VLGChFtUX7++/GqYHuojlGYgI477sQOnVQCld5F6Ktg68axw17+X6j7Jwanty9xiHBFLUW6eF9xAszLsbw6UmgKUiWzjdG01Kkin5A6263vwG8GDdkOsm94zyFJZmilZBlhdaQ4Qvx8eEoI3EhwEh8TUjJvyANxhkqXSitqSllgwrqceui6AGc88/0KqFE4cJTnIfNwCDEz7cQjXPW7FqkIVHjDwTu01y6IehP+vTmYuWuxCVXZ53pXHQlt/8J2v8DUEsDBBQAAAAIAG1LR11fSf+O5QAAALsBAAAIAAAAbWV0YS54bWyNkDFPwzAQhXd+ReS9viQFlViOOxR1ZQExW841WCS+yHZIfz7EIVWLGBjt++69d0/uz32XfaIPllzNCp6zDJ2hxrq2Zq8vx80j26s7SaeTNSgaMmOPLm56jDr7XnVBLKOajd4J0sEG4XSPQUQjaEC3rohrWiSj5efcWfdRs/cYBwEwTROftpx8C0VVVZCmK9qYCzeMvktUYwA7nB0CFLyAlZ0T/jfUzF5HIqKL0YwvoZNdmef3sLxZ9nPMTX1q7WoWVTJJt+jQ60heHciQfn46vnkb0UO52z3wUsIvSsKNBvzVvvoCUEsDBBQAAAAIAG1LR10wLoZl9gAAAGECAAAVAAAATUVUQS1JTkYvbWFuaWZlc3QueG1srZGxasMwEIb3PIV6u6V2K8J2oHEKhbbO4AwdhXROBbJkrHOI375ywU1KuhSy6cR/33cn5etT59gRh2iDL+CB3wNDr4Ox/lDAvnnOHmFdrvK7qt40H7st65S3LUaSy4Ht9k+vLxsGmRB1j75uW6uRh+EgRNVU7G3JJbYQ23dgsFxxQwYS/JqZhvLxpyxgHLwMKtooveowStIyJJcJeuzQk/ydl/Ma5Yqdwa11mKXgMF0sgMaqjKYeC1B976xWlB5BHL3h3y5+qeCEJ4Jzdzs6l/WKPgsQIP4lm0kiTfw3TQdPs28O3JIbaXIYb47tkNQCzcXVT5ZfUEsBAhQAFAAAAAAAbUtHXV7GMgwnAAAAJwAAAAgAAAAAAAAAAQAAAAAAAAAAAG1pbWV0eXBlUEsBAhQAFAAAAAgAbUtHXQBXuJo2BAAA6BMAAAsAAAAAAAAAAQAAAAAATQAAAGNvbnRlbnQueG1sUEsBAhQAFAAAAAgAbUtHXf5JorSsAgAARAkAAAoAAAAAAAAAAQAAAAAArAQAAHN0eWxlcy54bWxQSwECFAAUAAAACABtS0ddX0n/juUAAAC7AQAACAAAAAAAAAABAAAAAACABwAAbWV0YS54bWxQSwECFAAUAAAACABtS0ddMC6GZfYAAABhAgAAFQAAAAAAAAABAAAAAACLCAAATUVUQS1JTkYvbWFuaWZlc3QueG1sUEsFBgAAAAAFAAUAIAEAALQJAAAAAA=="; From 350b455bdeb0f6bc3983309ae261860bcdc7dccd Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 10:00:46 +0000 Subject: [PATCH 008/133] build(deps): move to zod 4.6.5 zod 4.6.5 with @t3-oss/env-nextjs 0.13.11 and @hookform/resolvers 5.9.1. This also satisfies claude-agent-sdk's zod ^4 peer, and the lockfile now resolves a single zod copy (copilot-sdk's nested zod 4.3.6 is deduped onto the root), so instanceof ZodError checks see one class. Code changes for the v4 breaks: - z.record() takes an explicit key schema at all 19 one-argument sites (integration tools, providers router, thread message JSON schema) - appearance font size: invalid_type_error/required_error -> error fn, same messages as before - tRPC errorFormatter uses z.flattenError; tRPC 11 still calls zod's parseAsync, so input errors keep a ZodError cause and the zodError payload keeps its { formErrors, fieldErrors } shape - threadCreate threadId: z.guid() keeps zod 3's 8-4-4-4-12 check (v4 uuid() is RFC-strict); the only producer is crypto.randomUUID() - ZodTypeAny -> z.ZodType ai 6.0.116 -> 6.0.301 (and @ai-sdk/react 3.0.304 so ai stays single): provider-utils before 4.0.47 forced additionalProperties:false onto every zod 4 object schema, so record inputs (Mongo queries, Airtable fields, Notion properties: 23 tool fields) reached models as objects that accept no keys. ai 6.0.265 is the first release with the fix; the rest of the AI SDK stays where it is for P7. Checked and unchanged: no .default().optional() or .partial() over defaults, no superRefine ctx.path, .default() values already match the output types, env.js still validates and SKIP_ENV_VALIDATION still skips. Remaining zod 3 idioms that v4 still accepts (.url(), .email(), ZodIssueCode.custom, superRefine) are left as they are. Tool JSON schemas vs zod 3 (now snapshotted): .int() adds safe-integer min/max, records add propertyNames, the email field adds a pattern, computer_action's discriminated union is oneOf instead of anyOf, and .optional().nullable() drops the old anyOf/not:{} wrapper. Sentinel sends no strict tool schemas, and the Google converter keeps oneOf and drops the other new keywords. Tests: tool input JSON-schema snapshot over all 48 built-in and 159 integration tools (fails on objects that accept no properties), tRPC zodError shape, env.js validation and skip, appearance messages, thread/workspace schemas, engine-state round trip, settings defaults. Tripwires: invalid_type_error/required_error, one-argument z.record, ZodTypeAny. Gate G0: install, typecheck ok, 188/188 test files pass, format ok, tripwires clean (4 active). Co-Authored-By: Claude Opus 5.5 --- bun.lock | 48 +- package.json | 10 +- scripts/verify/tripwires.mjs | 19 + src/env.test.ts | 96 + src/lib/ai/chat/engines/types.test.ts | 47 + .../tool-json-schema.test.ts.snap | 6208 +++++++++++++++++ .../ai/chat/tools/tool-json-schema.test.ts | 219 + .../integrations/providers/airtable/tools.ts | 14 +- .../integrations/providers/mongodb/tools.ts | 8 +- src/lib/integrations/providers/mysql/tools.ts | 2 +- .../integrations/providers/notion/tools.ts | 12 +- .../providers/postgresql/tools.ts | 2 +- src/schemas/appearance.schema.test.ts | 52 + src/schemas/appearance.schema.ts | 6 +- src/schemas/automation.schema.ts | 2 +- src/schemas/settings.schema.test.ts | 44 + src/schemas/workspace-thread.schema.test.ts | 94 + src/schemas/workspace-thread.schema.ts | 4 +- src/server/api/routers/providers.ts | 2 +- src/server/api/trpc.test.ts | 97 + src/server/api/trpc.ts | 4 +- 21 files changed, 6942 insertions(+), 48 deletions(-) create mode 100644 src/env.test.ts create mode 100644 src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap create mode 100644 src/lib/ai/chat/tools/tool-json-schema.test.ts create mode 100644 src/schemas/appearance.schema.test.ts create mode 100644 src/schemas/workspace-thread.schema.test.ts create mode 100644 src/server/api/trpc.test.ts diff --git a/bun.lock b/bun.lock index 5639d501..07762c62 100644 --- a/bun.lock +++ b/bun.lock @@ -22,7 +22,7 @@ "@ai-sdk/moonshotai": "^2.0.12", "@ai-sdk/openai": "^3.0.41", "@ai-sdk/provider": "^3.0.8", - "@ai-sdk/react": "^3.0.118", + "@ai-sdk/react": "^3.0.304", "@ai-sdk/replicate": "^2.0.28", "@ai-sdk/xai": "^3.0.74", "@anthropic-ai/claude-agent-sdk": "^0.2.84", @@ -33,7 +33,7 @@ "@github/copilot-sdk": "^0.2.2", "@heroui/react": "^3.0.1", "@heroui/styles": "^3.0.1", - "@hookform/resolvers": "^5.2.2", + "@hookform/resolvers": "^5.9.1", "@hugeicons/core-free-icons": "^4.3.5", "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", @@ -45,7 +45,7 @@ "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", "@slack/web-api": "^8.2.0", - "@t3-oss/env-nextjs": "^0.12.0", + "@t3-oss/env-nextjs": "^0.13.11", "@tanstack/react-query": "^5.104.1", "@tiptap/extension-placeholder": "^3.31.4", "@tiptap/pm": "^3.31.4", @@ -58,7 +58,7 @@ "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", - "ai": "^6.0.116", + "ai": "^6.0.301", "better-sqlite3": "12.6.2", "border-beam": "^1.4.1", "cmdk": "^1.1.1", @@ -94,7 +94,7 @@ "superjson": "^2.2.6", "turndown": "^7.2.4", "word-extractor": "^1.0.4", - "zod": "^3.24.2", + "zod": "^4.6.5", }, "devDependencies": { "@commitlint/cli": "^21.2.3", @@ -138,7 +138,7 @@ "@ai-sdk/fal": ["@ai-sdk/fal@2.0.29", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-nDq05ik9EHEzbJBjagIhMU1hWMJnGEToZ3yduKmcg0acDU23t6eHpV56Gjv49F73dK1a26aZADS+clVjLpMvDw=="], - "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="], + "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.210", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@ai-sdk/provider-utils": "4.0.57", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XUC2HGvDLhpfHKT7yXirZELHWIHzPJLtE3CE3FO6fjcQHcKR5nrsHxOp00THk1SivDo3IZB1yS6Un4+kAQ8eJg=="], "@ai-sdk/google": ["@ai-sdk/google@3.0.43", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NGCgP5g8HBxrNdxvF8Dhww+UKfqAkZAmyYBvbu9YLoBkzAmGKDBGhVptN/oXPB5Vm0jggMdoLycZ8JReQM8Zqg=="], @@ -162,7 +162,7 @@ "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], - "@ai-sdk/react": ["@ai-sdk/react@3.0.118", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.19", "ai": "6.0.116", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-fBAix8Jftxse6/2YJnOFkwW1/O6EQK4DK68M9DlFmZGAzBmsaHXEPVS77sVIlkaOWCy11bE7434NAVXRY+3OsQ=="], + "@ai-sdk/react": ["@ai-sdk/react@3.0.304", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.57", "ai": "6.0.301", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-WDDMEhfzlSJlZ1W0xFn0EXiZbD1EnYwOdAEDg7xAR3rjbVUp372U0phULIARtICt1IvkWK7gLMSyzJyveKvJwA=="], "@ai-sdk/replicate": ["@ai-sdk/replicate@2.0.28", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TJM49IfVh+YFWIl7aydttcYGYBxFPVz8wi4cNspvLTcNmUO7NhEF56fGIB8P6kqz/5vXXtJ74bOOM00PeuClNw=="], @@ -358,7 +358,7 @@ "@heroui/styles": ["@heroui/styles@3.0.1", "", { "dependencies": { "tailwind-variants": "3.2.2", "tw-animate-css": "1.4.0" }, "peerDependencies": { "tailwindcss": ">=4.0.0" } }, "sha512-ZGXz6nse8713f3uZMNapa8STkiyERgE7P5qOJlWTGnO8qHC+OHCB9TRJOdz1JR+daAhxu68pBO1qdWlzvud1cw=="], - "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], + "@hookform/resolvers": ["@hookform/resolvers@5.9.1", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "@sinclair/typebox": ">=0.25.24", "@standard-schema/spec": "^1.0.0", "@typeschema/main": ">=0.13.7", "@vinejs/vine": "^2.0.0 || ^3.0.0 || ^4.0.0", "ajv": "^8.12.0", "ajv-errors": "^3.0.0", "ajv-formats": "^2.1.1", "arktype": "^2.0.0", "ata-validator": "^1.2.0", "class-transformer": ">=0.4.0", "class-validator": ">=0.12.0", "computed-types": "^1.0.0", "effect": "^3.10.3", "fluentvalidation-ts": "^3.0.0", "fp-ts": "^2.7.0", "io-ts": "^2.0.0", "joi": "^17.0.0 || ^18.0.0", "nope-validator": ">=0.12.0", "react-hook-form": "^7.55.0", "superstruct": ">=0.12.0", "typanion": "^3.3.2", "valibot": ">=0.31.0 || ^1.0.0-beta.4 || ^1.0.0-rc", "vest": ">=6.0.0", "yup": "^1.0.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@sinclair/typebox", "@standard-schema/spec", "@typeschema/main", "@vinejs/vine", "ajv", "ajv-errors", "ajv-formats", "arktype", "ata-validator", "class-transformer", "class-validator", "computed-types", "effect", "fluentvalidation-ts", "fp-ts", "io-ts", "joi", "nope-validator", "superstruct", "typanion", "valibot", "vest", "yup", "zod"] }, "sha512-7b7vsbraJxKgjVSA1Nur9tLwj539WGJUBLA7QNvXnFoT2pM5Z7G+6rlukk4B2/QrTZy6huRtH6wKeESPKuIr6w=="], "@hugeicons/core-free-icons": ["@hugeicons/core-free-icons@4.3.5", "", {}, "sha512-Sv+NjHRPnQk+yZsGCMcGznCHdTfJR9PMMOEKcJYAQU4gy90dmlc9PwdtvYOImBZIjiheMsTLL5eMn2DmHxUiUg=="], @@ -856,9 +856,9 @@ "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], - "@t3-oss/env-core": ["@t3-oss/env-core@0.12.0", "", { "peerDependencies": { "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0" }, "optionalPeers": ["typescript", "valibot", "zod"] }, "sha512-lOPj8d9nJJTt81mMuN9GMk8x5veOt7q9m11OSnCBJhwp1QrL/qR+M8Y467ULBSm9SunosryWNbmQQbgoiMgcdw=="], + "@t3-oss/env-core": ["@t3-oss/env-core@0.13.11", "", { "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-sM7GYY+KL7H/Hl0BE0inWfk3nRHZOLhmVn7sHGxaZt9FAR6KqREXAE+6TqKfiavfXmpRxO/OZ2QgKRd+oiBYRQ=="], - "@t3-oss/env-nextjs": ["@t3-oss/env-nextjs@0.12.0", "", { "dependencies": { "@t3-oss/env-core": "0.12.0" }, "peerDependencies": { "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0" }, "optionalPeers": ["typescript", "valibot", "zod"] }, "sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw=="], + "@t3-oss/env-nextjs": ["@t3-oss/env-nextjs@0.13.11", "", { "dependencies": { "@t3-oss/env-core": "0.13.11" }, "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-NC+3j7YWgpzdFu1t5y/8wqibTK0lm5RS4bjXA1n8uwik3wIR4iZM4Fa+U2BaMa5k3Qk8RZiYhoAIX0WogmGkzg=="], "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="], @@ -1016,7 +1016,7 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], + "@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], @@ -1030,7 +1030,7 @@ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="], + "ai": ["ai@6.0.301", "", { "dependencies": { "@ai-sdk/gateway": "3.0.210", "@ai-sdk/provider": "3.0.18", "@ai-sdk/provider-utils": "4.0.57", "@opentelemetry/api": "^1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-pb7vIIBXKw4VGpbLmXvD+u5qbUe+2Mm7hEEkHs6Z2XBiifxAUEB38gl5JbaRi3BWsFqN13GP25/NHhf/DvPjgg=="], "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], @@ -2226,6 +2226,8 @@ "underscore": ["underscore@1.13.8", "", {}, "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ=="], + "undici": ["undici@6.29.0", "", {}, "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg=="], + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], @@ -2326,7 +2328,7 @@ "zlibjs": ["zlibjs@0.3.1", "", {}, "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w=="], - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "zod": ["zod@4.6.5", "", {}, "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], @@ -2344,7 +2346,9 @@ "@ai-sdk/fal/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - "@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], + "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], + + "@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], "@ai-sdk/google/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], @@ -2356,7 +2360,7 @@ "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - "@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], + "@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], "@ai-sdk/replicate/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], @@ -2394,8 +2398,6 @@ "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], - "@github/copilot-sdk/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], @@ -2466,7 +2468,9 @@ "@types/yauzl/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], - "ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], + "ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], + + "ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], "ajv-keywords/ajv": ["ajv@6.14.0", "", { "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" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], @@ -2668,6 +2672,12 @@ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], + "@ai-sdk/gateway/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], + + "@ai-sdk/react/@ai-sdk/provider-utils/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], + + "@ai-sdk/react/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], "@develar/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -2758,6 +2768,8 @@ "@types/yauzl/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], + "ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "app-builder-lib/@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], diff --git a/package.json b/package.json index 7ae19bce..3e3f0427 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@ai-sdk/moonshotai": "^2.0.12", "@ai-sdk/openai": "^3.0.41", "@ai-sdk/provider": "^3.0.8", - "@ai-sdk/react": "^3.0.118", + "@ai-sdk/react": "^3.0.304", "@ai-sdk/replicate": "^2.0.28", "@ai-sdk/xai": "^3.0.74", "@anthropic-ai/claude-agent-sdk": "^0.2.84", @@ -71,7 +71,7 @@ "@github/copilot-sdk": "^0.2.2", "@heroui/react": "^3.0.1", "@heroui/styles": "^3.0.1", - "@hookform/resolvers": "^5.2.2", + "@hookform/resolvers": "^5.9.1", "@hugeicons/core-free-icons": "^4.3.5", "@hugeicons/react": "^1.1.10", "@iconify/react": "^6.0.2", @@ -83,7 +83,7 @@ "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", "@slack/web-api": "^8.2.0", - "@t3-oss/env-nextjs": "^0.12.0", + "@t3-oss/env-nextjs": "^0.13.11", "@tanstack/react-query": "^5.104.1", "@tiptap/extension-placeholder": "^3.31.4", "@tiptap/pm": "^3.31.4", @@ -96,7 +96,7 @@ "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", - "ai": "^6.0.116", + "ai": "^6.0.301", "better-sqlite3": "12.6.2", "border-beam": "^1.4.1", "cmdk": "^1.1.1", @@ -132,7 +132,7 @@ "superjson": "^2.2.6", "turndown": "^7.2.4", "word-extractor": "^1.0.4", - "zod": "^3.24.2" + "zod": "^4.6.5" }, "devDependencies": { "@commitlint/cli": "^21.2.3", diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index 3235f3b2..77018be3 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -21,6 +21,25 @@ export const TRIPWIRES = [ description: "Node 21.7.3 pin replaced by Node 24 LTS", pattern: /21\.7\.3/, }, + { + id: "P3-zod-v3-error-params", + description: "zod 4 replaced invalid_type_error/required_error with error", + pattern: /\b(?:invalid_type_error|required_error)\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P3-zod-single-arg-record", + description: "zod 4 z.record() needs an explicit key schema", + // One argument: no top-level comma before the closing parenthesis. + pattern: /(?:\bz|^\s*)\.record\((?:[^(),]|\((?:[^()]|\([^()]*\))*\))*\)/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P3-zod-type-any", + description: "zod 4 removed ZodTypeAny (use z.ZodType)", + pattern: /\bZodTypeAny\b/, + include: /\.[cm]?[jt]sx?$/, + }, ]; const DEFAULT_EXCLUDE = diff --git a/src/env.test.ts b/src/env.test.ts new file mode 100644 index 00000000..2cbdedf7 --- /dev/null +++ b/src/env.test.ts @@ -0,0 +1,96 @@ +import { describe, expect, it } from "bun:test"; +import { spawnSync } from "node:child_process"; +import { mkdtempSync, rmSync } from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const ENV_MODULE = fileURLToPath(new URL("./env.js", import.meta.url)); +const VALID_KEY = "ab".repeat(32); +const LEGACY_KEY = + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; + +// env.js validates at import time, so every case loads it in a fresh process +// with a throwaway HOME (it reads ~/.sentinel/desktop.env). +function loadEnv(variables: Record) { + const home = mkdtempSync(path.join(os.tmpdir(), "sentinel-env-")); + // Only what env.js needs; the test runner's SKIP_ENV_VALIDATION and + // NODE_ENV must not leak into the child. + const childEnv: Record = { + HOME: home, + PATH: process.env.PATH ?? "", + USERPROFILE: home, + ...variables, + }; + + try { + const result = spawnSync( + process.execPath, + [ + "-e", + `const { env } = await import(${JSON.stringify(ENV_MODULE)}); +console.log(JSON.stringify({ ENCRYPTION_KEY: env.ENCRYPTION_KEY, NODE_ENV: env.NODE_ENV ?? null }));`, + ], + { + encoding: "utf8", + env: childEnv as NodeJS.ProcessEnv, + }, + ); + + return { + exitCode: result.status, + output: `${result.stdout}${result.stderr}`, + values: + result.status === 0 + ? (JSON.parse(result.stdout.trim().split("\n").at(-1) ?? "{}") as { + ENCRYPTION_KEY: string; + NODE_ENV: string | null; + }) + : null, + }; + } finally { + rmSync(home, { force: true, recursive: true }); + } +} + +describe("env", () => { + it("validates a well-formed environment and applies defaults", () => { + const result = loadEnv({ ENCRYPTION_KEY: VALID_KEY, NODE_ENV: "" }); + + expect(result.exitCode).toBe(0); + expect(result.values).toEqual({ + ENCRYPTION_KEY: VALID_KEY, + NODE_ENV: "development", + }); + }); + + it("rejects a malformed encryption key", () => { + const result = loadEnv({ ENCRYPTION_KEY: "not-hex" }); + + expect(result.exitCode).not.toBe(0); + expect(result.output).toContain("Invalid environment variables"); + expect(result.output).toContain("ENCRYPTION_KEY must be a hex string"); + }); + + it("rejects the legacy encryption key", () => { + const result = loadEnv({ ENCRYPTION_KEY: LEGACY_KEY }); + + expect(result.exitCode).not.toBe(0); + expect(result.output).toContain( + "ENCRYPTION_KEY must not use the legacy default value.", + ); + }); + + it("skips validation when SKIP_ENV_VALIDATION is set", () => { + const result = loadEnv({ + ENCRYPTION_KEY: "not-hex", + SKIP_ENV_VALIDATION: "1", + }); + + expect(result.exitCode).toBe(0); + expect(result.values).toEqual({ + ENCRYPTION_KEY: "not-hex", + NODE_ENV: null, + }); + }); +}); diff --git a/src/lib/ai/chat/engines/types.test.ts b/src/lib/ai/chat/engines/types.test.ts index 64eb3a8b..86d4eac3 100644 --- a/src/lib/ai/chat/engines/types.test.ts +++ b/src/lib/ai/chat/engines/types.test.ts @@ -219,3 +219,50 @@ describe("mergeThreadChatEngineState", () => { }); }); }); + +describe("parseThreadChatEngineState", () => { + it("round-trips persisted state and drops unknown keys", () => { + const state = { + claude: { + cwd: "/tmp/project", + modelId: null, + permissionMode: "acceptEdits", + sessionId: "claude-session-1", + }, + codex: { + approvalPolicy: "on-request", + codexThreadId: "codex-thread-1", + pendingTurnId: null, + sandboxMode: "workspace-write", + }, + copilot: null, + permissionModeOverride: "full", + repo: { + lastPullRequest: { + base: "main", + createdAt: "2026-03-28T10:00:00.000Z", + draft: false, + head: "feature/test", + kind: "compare", + repoFullName: "openai/sentinel", + url: "https://github.com/openai/sentinel/compare/main...feature/test", + }, + projectMode: "worktree", + worktreePath: "/tmp/worktree", + }, + }; + const stored = JSON.parse( + JSON.stringify({ + ...state, + claude: { ...state.claude, legacyField: true }, + unknownEngine: { sessionId: "x" }, + }), + ); + + expect(parseThreadChatEngineState(stored)).toStrictEqual(state); + }); + + it("rejects state that is missing a session id", () => { + expect(parseThreadChatEngineState({ claude: { cwd: "/tmp" } })).toBeNull(); + }); +}); diff --git a/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap b/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap new file mode 100644 index 00000000..72a69c8e --- /dev/null +++ b/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap @@ -0,0 +1,6208 @@ +// Bun Snapshot v1, https://bun.sh/docs/test/snapshots + +exports[`tool input JSON schemas converts every built-in chat tool to a valid object schema 1`] = ` +{ + "apply_patch": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "patchText": { + "minLength": 1, + "type": "string", + }, + "rationale": { + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "patchText", + "rationale", + ], + "type": "object", + }, + "batch_read": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 400, + "minimum": 1, + "type": "integer", + }, + "offset": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "paths": { + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 25, + "minItems": 1, + "type": "array", + }, + }, + "required": [ + "paths", + ], + "type": "object", + }, + "browser_back": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_click": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "selector": { + "description": "CSS selector from browser_snapshot. Prefer this over x/y.", + "minLength": 1, + "type": "string", + }, + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + "x": { + "description": "Viewport x coordinate.", + "type": "number", + }, + "y": { + "description": "Viewport y coordinate.", + "type": "number", + }, + }, + "type": "object", + }, + "browser_console_logs": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "levels": { + "description": "Optional console levels to include.", + "items": { + "enum": [ + "debug", + "info", + "log", + "warn", + "error", + ], + "type": "string", + }, + "maxItems": 5, + "type": "array", + }, + "limit": { + "default": 50, + "maximum": 200, + "minimum": 1, + "type": "integer", + }, + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_fill": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "selector": { + "description": "CSS selector from browser_snapshot.", + "minLength": 1, + "type": "string", + }, + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + "value": { + "description": "Text to place in the field.", + "type": "string", + }, + }, + "required": [ + "selector", + "value", + ], + "type": "object", + }, + "browser_forward": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_navigate": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + "url": { + "description": "URL or search text to navigate to.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "url", + ], + "type": "object", + }, + "browser_open": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "url": { + "description": "URL or search text to open in a new Sentinel browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_press": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "key": { + "description": "Key to press, such as Enter or Escape.", + "minLength": 1, + "type": "string", + }, + "selector": { + "description": "Optional CSS selector to focus before pressing the key.", + "minLength": 1, + "type": "string", + }, + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "key", + ], + "type": "object", + }, + "browser_reload": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_screenshot": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fullPage": { + "description": "Reserved for future support. V1 captures the visible viewport.", + "type": "boolean", + }, + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_snapshot": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "tabId": { + "description": "Optional browser tab id. Defaults to the active browser tab.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "browser_tabs": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "computer_action": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Ordered desktop actions to perform in one conservative batch.", + "items": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "displayId": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer", + }, + "type": { + "const": "screenshot", + "type": "string", + }, + }, + "required": [ + "type", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "durationMs": { + "maximum": 10000, + "minimum": 0, + "type": "integer", + }, + "type": { + "const": "wait", + "type": "string", + }, + }, + "required": [ + "type", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "durationMs": { + "maximum": 2000, + "minimum": 0, + "type": "integer", + }, + "modifiers": { + "items": { + "enum": [ + "command", + "control", + "option", + "shift", + ], + "type": "string", + }, + "maxItems": 4, + "type": "array", + }, + "type": { + "const": "move", + "type": "string", + }, + "x": { + "type": "number", + }, + "y": { + "type": "number", + }, + }, + "required": [ + "type", + "x", + "y", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "button": { + "default": "left", + "enum": [ + "left", + "right", + "middle", + ], + "type": "string", + }, + "clickCount": { + "default": 1, + "maximum": 3, + "minimum": 1, + "type": "integer", + }, + "modifiers": { + "items": { + "enum": [ + "command", + "control", + "option", + "shift", + ], + "type": "string", + }, + "maxItems": 4, + "type": "array", + }, + "type": { + "const": "click", + "type": "string", + }, + "x": { + "type": "number", + }, + "y": { + "type": "number", + }, + }, + "required": [ + "type", + "x", + "y", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "button": { + "default": "left", + "enum": [ + "left", + "right", + "middle", + ], + "type": "string", + }, + "durationMs": { + "maximum": 5000, + "minimum": 0, + "type": "integer", + }, + "modifiers": { + "items": { + "enum": [ + "command", + "control", + "option", + "shift", + ], + "type": "string", + }, + "maxItems": 4, + "type": "array", + }, + "path": { + "items": { + "additionalProperties": false, + "properties": { + "x": { + "type": "number", + }, + "y": { + "type": "number", + }, + }, + "required": [ + "x", + "y", + ], + "type": "object", + }, + "maxItems": 50, + "minItems": 2, + "type": "array", + }, + "type": { + "const": "drag", + "type": "string", + }, + }, + "required": [ + "path", + "type", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "deltaX": { + "default": 0, + "type": "number", + }, + "deltaY": { + "type": "number", + }, + "modifiers": { + "items": { + "enum": [ + "command", + "control", + "option", + "shift", + ], + "type": "string", + }, + "maxItems": 4, + "type": "array", + }, + "type": { + "const": "scroll", + "type": "string", + }, + "x": { + "type": "number", + }, + "y": { + "type": "number", + }, + }, + "required": [ + "deltaY", + "type", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "text": { + "maxLength": 10000, + "minLength": 1, + "type": "string", + }, + "type": { + "const": "type", + "type": "string", + }, + }, + "required": [ + "text", + "type", + ], + "type": "object", + }, + { + "additionalProperties": false, + "properties": { + "key": { + "maxLength": 40, + "minLength": 1, + "type": "string", + }, + "modifiers": { + "items": { + "enum": [ + "command", + "control", + "option", + "shift", + ], + "type": "string", + }, + "maxItems": 4, + "type": "array", + }, + "type": { + "const": "keypress", + "type": "string", + }, + }, + "required": [ + "key", + "type", + ], + "type": "object", + }, + ], + }, + "maxItems": 25, + "minItems": 1, + "type": "array", + }, + "appName": { + "description": "Optional macOS app name to refocus immediately before executing the action batch.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "Optional macOS bundle id to refocus immediately before executing the action batch.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "actions", + ], + "type": "object", + }, + "computer_app": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "appName": { + "description": "macOS application name, such as Safari or Finder.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "macOS bundle identifier, such as com.apple.Safari.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "mode": { + "description": "Open the app if needed, or focus an already available app.", + "enum": [ + "open", + "focus", + ], + "type": "string", + }, + }, + "required": [ + "mode", + ], + "type": "object", + }, + "computer_apps": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "computer_ax_action": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "description": "Accessibility action to perform on the matched element.", + "enum": [ + "press", + "focus", + "setValue", + "increment", + "decrement", + "showMenu", + ], + "type": "string", + }, + "appName": { + "description": "Optional macOS app name to target. Defaults to frontmost app.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "axPath": { + "description": "AX path returned by computer_ax_tree or computer_ax_find.", + "maxLength": 400, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "Optional macOS bundle id to target. Defaults to frontmost app.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "query": { + "additionalProperties": false, + "description": "Fallback element query when axPath is not available.", + "properties": { + "description": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "role": { + "maxLength": 120, + "minLength": 1, + "type": "string", + }, + "subrole": { + "maxLength": 120, + "minLength": 1, + "type": "string", + }, + "title": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "value": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "value": { + "description": "Value to set when action is setValue.", + "maxLength": 100000, + "type": "string", + }, + }, + "required": [ + "action", + ], + "type": "object", + }, + "computer_ax_find": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "appName": { + "description": "Optional macOS app name to inspect. Defaults to frontmost app.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "Optional macOS bundle id to inspect. Defaults to frontmost app.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "maxDepth": { + "description": "Maximum AX tree depth to search. Defaults to 8.", + "maximum": 10, + "minimum": 1, + "type": "integer", + }, + "maxMatches": { + "description": "Maximum matching elements to return. Defaults to 25.", + "maximum": 100, + "minimum": 1, + "type": "integer", + }, + "maxNodes": { + "description": "Maximum AX nodes to inspect. Defaults to 750.", + "maximum": 2000, + "minimum": 1, + "type": "integer", + }, + "query": { + "additionalProperties": false, + "description": "Element query. Fields are case-insensitive substring matches.", + "properties": { + "description": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "role": { + "maxLength": 120, + "minLength": 1, + "type": "string", + }, + "subrole": { + "maxLength": 120, + "minLength": 1, + "type": "string", + }, + "title": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "value": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "computer_ax_tree": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "appName": { + "description": "Optional macOS app name to inspect. Defaults to frontmost app.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "Optional macOS bundle id to inspect. Defaults to frontmost app.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "maxDepth": { + "description": "Maximum AX tree depth to return. Defaults to 4.", + "maximum": 8, + "minimum": 1, + "type": "integer", + }, + "maxNodes": { + "description": "Maximum AX nodes to return. Defaults to 250.", + "maximum": 1000, + "minimum": 1, + "type": "integer", + }, + }, + "type": "object", + }, + "computer_clipboard": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "text": { + "description": "Text to write to the macOS clipboard for a later paste action.", + "maxLength": 100000, + "type": "string", + }, + }, + "required": [ + "text", + ], + "type": "object", + }, + "computer_screenshot": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "appName": { + "description": "Optional macOS app name to refocus immediately before capture, useful after approval brings Sentinel to the front.", + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + "bundleId": { + "description": "Optional macOS bundle id to refocus immediately before capture.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "displayId": { + "description": "Optional display id from computer_status. Defaults to primary.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer", + }, + }, + "type": "object", + }, + "computer_status": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "create_file": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "description": "Full file contents to create.", + "maxLength": 200000, + "type": "string", + }, + "path": { + "description": "File path to create. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "rationale": { + "description": "Why this file should be created.", + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "content", + "path", + "rationale", + ], + "type": "object", + }, + "delete_file": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "path": { + "description": "File path to delete. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "rationale": { + "description": "Why this file should be deleted.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "path", + "rationale", + ], + "type": "object", + }, + "diagnostics": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 200, + "minimum": 1, + "type": "integer", + }, + "mode": { + "enum": [ + "auto", + "lint", + "lsp", + ], + "type": "string", + }, + "path": { + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "diff": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "comparePath": { + "minLength": 1, + "type": "string", + }, + "contextLines": { + "maximum": 20, + "minimum": 0, + "type": "integer", + }, + "path": { + "minLength": 1, + "type": "string", + }, + "proposedContent": { + "type": "string", + }, + }, + "required": [ + "path", + ], + "type": "object", + }, + "edit": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "newString": { + "description": "Replacement text.", + "type": "string", + }, + "oldString": { + "description": "Exact text to replace.", + "minLength": 1, + "type": "string", + }, + "path": { + "description": "File path to modify. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "rationale": { + "description": "Why this edit is needed.", + "minLength": 1, + "type": "string", + }, + "replaceAll": { + "description": "Replace every occurrence instead of exactly one.", + "type": "boolean", + }, + }, + "required": [ + "newString", + "oldString", + "path", + "rationale", + ], + "type": "object", + }, + "forget_memory": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "memoryId": { + "description": "The memory ID to remove.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "memoryId", + ], + "type": "object", + }, + "generate_image": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "aspectRatio": { + "description": "Optional aspect ratio like 1:1 or 16:9.", + "pattern": "^\\d+:\\d+$", + "type": "string", + }, + "count": { + "default": 1, + "description": "Number of images to generate per provider.", + "maximum": 4, + "minimum": 1, + "type": "integer", + }, + "mode": { + "default": "single", + "description": "Use single for one provider or multi_model to fan out.", + "enum": [ + "single", + "multi_model", + ], + "type": "string", + }, + "modelId": { + "description": "Optional model override for single-provider generation.", + "minLength": 1, + "type": "string", + }, + "prompt": { + "description": "Describe the image you want to generate.", + "minLength": 1, + "type": "string", + }, + "provider": { + "description": "Optional provider override for single-provider generation.", + "enum": [ + "openai", + "anthropic", + "google", + "google_vertex", + "vercel", + "xai", + "black_forest_labs", + "klingai", + "bytedance", + "fal", + "replicate", + "azure", + "amazon_bedrock", + "groq", + "cohere", + "moonshotai", + "mistral", + "ollama", + "openrouter", + "deepseek", + ], + "type": "string", + }, + "providers": { + "description": "Optional provider subset when mode is multi_model.", + "items": { + "enum": [ + "openai", + "anthropic", + "google", + "google_vertex", + "vercel", + "xai", + "black_forest_labs", + "klingai", + "bytedance", + "fal", + "replicate", + "azure", + "amazon_bedrock", + "groq", + "cohere", + "moonshotai", + "mistral", + "ollama", + "openrouter", + "deepseek", + ], + "type": "string", + }, + "maxItems": 6, + "minItems": 1, + "type": "array", + }, + "referenceImageAttachmentIndex": { + "description": "Optional attachment index when multiple images share a filename.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "referenceImageFilename": { + "description": "Optional image attachment filename for reference-image generation.", + "minLength": 1, + "type": "string", + }, + "referenceImageMessageId": { + "description": "Optional message id containing the reference image attachment.", + "minLength": 1, + "type": "string", + }, + "seed": { + "description": "Optional deterministic seed.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer", + }, + "size": { + "description": "Optional size like 1024x1024.", + "pattern": "^\\d+x\\d+$", + "type": "string", + }, + }, + "required": [ + "prompt", + ], + "type": "object", + }, + "generate_video": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "aspectRatio": { + "description": "Optional aspect ratio like 16:9 or 9:16.", + "pattern": "^\\d+:\\d+$", + "type": "string", + }, + "count": { + "default": 1, + "description": "Number of videos to generate per provider.", + "maximum": 2, + "minimum": 1, + "type": "integer", + }, + "duration": { + "description": "Optional target duration in seconds.", + "maximum": 30, + "minimum": 1, + "type": "integer", + }, + "fps": { + "description": "Optional target frames per second.", + "maximum": 60, + "minimum": 1, + "type": "integer", + }, + "mode": { + "default": "single", + "description": "Use single for one provider or multi_model to fan out.", + "enum": [ + "single", + "multi_model", + ], + "type": "string", + }, + "modelId": { + "description": "Optional model override for single-provider generation.", + "minLength": 1, + "type": "string", + }, + "prompt": { + "description": "Describe the video you want to generate.", + "minLength": 1, + "type": "string", + }, + "provider": { + "description": "Optional provider override for single-provider generation.", + "enum": [ + "openai", + "anthropic", + "google", + "google_vertex", + "vercel", + "xai", + "black_forest_labs", + "klingai", + "bytedance", + "fal", + "replicate", + "azure", + "amazon_bedrock", + "groq", + "cohere", + "moonshotai", + "mistral", + "ollama", + "openrouter", + "deepseek", + ], + "type": "string", + }, + "providers": { + "description": "Optional provider subset when mode is multi_model.", + "items": { + "enum": [ + "openai", + "anthropic", + "google", + "google_vertex", + "vercel", + "xai", + "black_forest_labs", + "klingai", + "bytedance", + "fal", + "replicate", + "azure", + "amazon_bedrock", + "groq", + "cohere", + "moonshotai", + "mistral", + "ollama", + "openrouter", + "deepseek", + ], + "type": "string", + }, + "maxItems": 4, + "minItems": 1, + "type": "array", + }, + "referenceImageAttachmentIndex": { + "description": "Optional attachment index when multiple images share a filename.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "referenceImageFilename": { + "description": "Optional image attachment filename for image-to-video generation.", + "minLength": 1, + "type": "string", + }, + "referenceImageMessageId": { + "description": "Optional message id containing the reference image attachment.", + "minLength": 1, + "type": "string", + }, + "resolution": { + "description": "Optional resolution like 1280x720.", + "pattern": "^\\d+x\\d+$", + "type": "string", + }, + "seed": { + "description": "Optional deterministic seed.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer", + }, + }, + "required": [ + "prompt", + ], + "type": "object", + }, + "git": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "enum": [ + "status", + "diff", + "log", + "branch_list", + "branch_create", + "checkout", + "add", + "commit", + ], + "type": "string", + }, + "branch": { + "minLength": 1, + "type": "string", + }, + "limit": { + "maximum": 50, + "minimum": 1, + "type": "integer", + }, + "message": { + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + "name": { + "minLength": 1, + "type": "string", + }, + "path": { + "minLength": 1, + "type": "string", + }, + "paths": { + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + }, + "ref": { + "minLength": 1, + "type": "string", + }, + "staged": { + "type": "boolean", + }, + }, + "required": [ + "action", + ], + "type": "object", + }, + "glob": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxDepth": { + "description": "Maximum directory depth to recurse into. Defaults to 12 levels.", + "maximum": 64, + "minimum": 0, + "type": "integer", + }, + "path": { + "description": "Directory path to search in. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "pattern": { + "description": "Glob pattern to match, for example "*.ts" or "**/*.test.ts".", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "pattern", + ], + "type": "object", + }, + "grep": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "include": { + "description": "Optional file glob to include in the search, for example "*.ts" or "*.{ts,tsx}".", + "minLength": 1, + "type": "string", + }, + "path": { + "description": "Directory path to search. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "pattern": { + "description": "Regular expression pattern to search for in file contents.", + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "pattern", + ], + "type": "object", + }, + "list": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "ignore": { + "description": "Optional path prefixes, names, or simple glob patterns to exclude from the listing.", + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 32, + "type": "array", + }, + "maxDepth": { + "description": "Maximum directory depth to recurse into. Defaults to 12 levels.", + "maximum": 64, + "minimum": 0, + "type": "integer", + }, + "path": { + "description": "Directory path to inspect. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "load_document": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "attachmentIndex": { + "description": "1-based index used to disambiguate duplicate filenames on the same message.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "filename": { + "description": "Filename of the attachment to load when source is message_attachment.", + "minLength": 1, + "type": "string", + }, + "maxChars": { + "description": "Optional maximum character count for normalized output.", + "maximum": 120000, + "minimum": 1, + "type": "integer", + }, + "messageId": { + "description": "Optional source message id. Defaults to the current source message when loading attachments.", + "minLength": 1, + "type": "string", + }, + "path": { + "description": "Workspace file path to load when source is workspace_path. In default permissions mode this must stay inside the selected workspace root or discovered skill directories.", + "minLength": 1, + "type": "string", + }, + "source": { + "enum": [ + "workspace_path", + "message_attachment", + ], + "type": "string", + }, + }, + "required": [ + "source", + ], + "type": "object", + }, + "load_skill": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "name": { + "description": "The discovered skill name to load.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", + }, + "manage_task": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "description": "Required. The action to perform: 'create' a new task, 'update' an existing task's status/title/description, or 'delete' a task.", + "enum": [ + "create", + "update", + "delete", + ], + "type": "string", + }, + "description": { + "anyOf": [ + { + "maxLength": 600, + "type": "string", + }, + { + "type": "null", + }, + ], + "description": "Optional task description.", + }, + "planId": { + "description": "Optional plan ID. Omit to use the current thread plan.", + "minLength": 1, + "type": "string", + }, + "status": { + "description": "Task status: 'pending', 'in_progress', 'completed', or 'blocked'. Required for update actions.", + "enum": [ + "pending", + "in_progress", + "completed", + "blocked", + ], + "type": "string", + }, + "taskId": { + "description": "Required for update and delete actions. The ID of the task to modify.", + "minLength": 1, + "type": "string", + }, + "title": { + "description": "Task title. Required for create actions.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "action", + ], + "type": "object", + }, + "move_file": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fromPath": { + "minLength": 1, + "type": "string", + }, + "rationale": { + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + "toPath": { + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "fromPath", + "rationale", + "toPath", + ], + "type": "object", + }, + "multiedit": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "edits": { + "description": "Ordered exact-text edits to apply to the same file.", + "items": { + "additionalProperties": false, + "properties": { + "newString": { + "description": "Replacement text.", + "type": "string", + }, + "oldString": { + "description": "Exact text to replace.", + "minLength": 1, + "type": "string", + }, + "replaceAll": { + "description": "Replace every occurrence for this edit instead of exactly one.", + "type": "boolean", + }, + }, + "required": [ + "newString", + "oldString", + ], + "type": "object", + }, + "maxItems": 20, + "minItems": 1, + "type": "array", + }, + "path": { + "description": "File path to modify. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "rationale": { + "description": "Why these coordinated edits are needed.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "edits", + "path", + "rationale", + ], + "type": "object", + }, + "read": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 400, + "minimum": 1, + "type": "integer", + }, + "offset": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "path": { + "description": "File or directory path to read. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "path", + ], + "type": "object", + }, + "run_subagent": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "allowMutations": { + "default": true, + "type": "boolean", + }, + "prompt": { + "maxLength": 20000, + "minLength": 1, + "type": "string", + }, + "toolHints": { + "additionalProperties": false, + "properties": { + "categories": { + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 8, + "type": "array", + }, + "integrationNamespaces": { + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 8, + "type": "array", + }, + "mcpNamespaces": { + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 8, + "type": "array", + }, + "note": { + "maxLength": 1000, + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "virtualKey": { + "maxLength": 120, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "prompt", + ], + "type": "object", + }, + "run_task": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "path": { + "description": "Directory path to run the task from. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "rationale": { + "description": "Why this project task should run.", + "minLength": 1, + "type": "string", + }, + "task": { + "description": "Project task to run using the nearest package.json script.", + "enum": [ + "build", + "format", + "lint", + "test", + "typecheck", + ], + "type": "string", + }, + }, + "required": [ + "rationale", + "task", + ], + "type": "object", + }, + "save_memory": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "description": "Durable information worth keeping for future conversations.", + "maxLength": 8000, + "minLength": 8, + "type": "string", + }, + "kind": { + "description": "The kind of memory being stored.", + "enum": [ + "preference", + "profile", + "workflow", + "project", + "fact", + ], + "type": "string", + }, + "salience": { + "description": "How important this memory is for future recall.", + "maximum": 1, + "minimum": 0, + "type": "number", + }, + "scope": { + "description": "Store as global memory or attach it to the active workspace.", + "enum": [ + "global", + "workspace", + "auto", + ], + "type": "string", + }, + "summary": { + "description": "Compact memory summary for prompt injection.", + "maxLength": 160, + "type": "string", + }, + }, + "required": [ + "content", + "kind", + ], + "type": "object", + }, + "search_memory": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "description": "Maximum number of memories to return.", + "maximum": 12, + "minimum": 1, + "type": "integer", + }, + "query": { + "description": "What to look up in long-term memory.", + "minLength": 1, + "type": "string", + }, + "scope": { + "description": "Search global memory, workspace memory, or both.", + "enum": [ + "auto", + "both", + "global", + "workspace", + ], + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "shell_command": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "backgroundTaskId": { + "description": "Background task id returned by start_background. Required for check_background and stop_background.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + "command": { + "description": "One shell command to run in the linked workspace root or discovered skill directory. Required for run and start_background modes.", + "maxLength": 2000, + "minLength": 1, + "type": "string", + }, + "mode": { + "description": "How to use the shell. Use run for normal foreground commands, start_background for long-running commands, check_background to poll a background task, and stop_background to stop one.", + "enum": [ + "run", + "start_background", + "check_background", + "stop_background", + ], + "type": "string", + }, + "rationale": { + "description": "Why this command is needed and what you expect to learn.", + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + "runInBackground": { + "description": "Convenience flag equivalent to mode=start_background when true.", + "type": "boolean", + }, + "waitForCompletion": { + "description": "For check_background, wait until the background command completes instead of returning the current snapshot.", + "type": "boolean", + }, + }, + "required": [ + "rationale", + ], + "type": "object", + }, + "webfetch": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "format": { + "default": "markdown", + "description": "The response format to return. Prefer markdown for documentation pages unless plain text or raw HTML is specifically needed.", + "enum": [ + "text", + "markdown", + "html", + ], + "type": "string", + }, + "timeout": { + "description": "Optional timeout in seconds, up to 120.", + "maximum": 120, + "minimum": 1, + "type": "integer", + }, + "url": { + "description": "A single URL to fetch.", + "minLength": 1, + "type": "string", + }, + "urls": { + "description": "Optional batch of URLs to fetch when batch mode is enabled in General settings.", + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + }, + }, + "type": "object", + }, + "websearch": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "livecrawl": { + "enum": [ + "never", + "preferred", + "always", + ], + "type": "string", + }, + "provider": { + "enum": [ + "exa", + "searxng", + ], + "type": "string", + }, + "query": { + "description": "Search query to run on the web.", + "minLength": 1, + "type": "string", + }, + "resultCount": { + "description": "Maximum number of search results to return.", + "maximum": 25, + "minimum": 1, + "type": "integer", + }, + "searchType": { + "description": "Search depth and speed mode.", + "enum": [ + "auto", + "fast", + "deep", + ], + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, +} +`; + +exports[`tool input JSON schemas converts every plan-mode tool to a valid object schema 1`] = ` +{ + "ask_question": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "questions": { + "items": { + "additionalProperties": false, + "properties": { + "allowMultiple": { + "description": "When true the user can select multiple options instead of one. Use for questions where several answers apply simultaneously.", + "type": "boolean", + }, + "header": { + "maxLength": 80, + "minLength": 1, + "type": "string", + }, + "id": { + "maxLength": 80, + "minLength": 1, + "type": "string", + }, + "options": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "maxLength": 400, + "minLength": 1, + "type": "string", + }, + "label": { + "maxLength": 160, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "description", + "label", + ], + "type": "object", + }, + "maxItems": 8, + "minItems": 2, + "type": "array", + }, + "question": { + "maxLength": 400, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "header", + "options", + "question", + ], + "type": "object", + }, + "maxItems": 6, + "minItems": 1, + "type": "array", + }, + }, + "required": [ + "questions", + ], + "type": "object", + }, + "create_plan": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "audience": { + "enum": [ + "technical", + "general", + ], + "type": "string", + }, + "document": { + "maxLength": 40000, + "minLength": 1, + "type": "string", + }, + "goal": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "summary": { + "maxLength": 2000, + "minLength": 1, + "type": "string", + }, + "tasks": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "description": { + "anyOf": [ + { + "maxLength": 600, + "type": "string", + }, + { + "type": "null", + }, + ], + }, + "title": { + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "title", + ], + "type": "object", + }, + "maxItems": 20, + "type": "array", + }, + "title": { + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "audience", + "document", + "goal", + "summary", + "title", + ], + "type": "object", + }, + "glob": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxDepth": { + "description": "Maximum directory depth to recurse into. Defaults to 12 levels.", + "maximum": 64, + "minimum": 0, + "type": "integer", + }, + "path": { + "description": "Directory path to search in. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "pattern": { + "description": "Glob pattern to match, for example "*.ts" or "**/*.test.ts".", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "pattern", + ], + "type": "object", + }, + "grep": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "include": { + "description": "Optional file glob to include in the search, for example "*.ts" or "*.{ts,tsx}".", + "minLength": 1, + "type": "string", + }, + "path": { + "description": "Directory path to search. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + "pattern": { + "description": "Regular expression pattern to search for in file contents.", + "maxLength": 500, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "pattern", + ], + "type": "object", + }, + "list": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "ignore": { + "description": "Optional path prefixes, names, or simple glob patterns to exclude from the listing.", + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 32, + "type": "array", + }, + "maxDepth": { + "description": "Maximum directory depth to recurse into. Defaults to 12 levels.", + "maximum": 64, + "minimum": 0, + "type": "integer", + }, + "path": { + "description": "Directory path to inspect. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, + "load_document": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "attachmentIndex": { + "description": "1-based index used to disambiguate duplicate filenames on the same message.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "filename": { + "description": "Filename of the attachment to load when source is message_attachment.", + "minLength": 1, + "type": "string", + }, + "maxChars": { + "description": "Optional maximum character count for normalized output.", + "maximum": 120000, + "minimum": 1, + "type": "integer", + }, + "messageId": { + "description": "Optional source message id. Defaults to the current source message when loading attachments.", + "minLength": 1, + "type": "string", + }, + "path": { + "description": "Workspace file path to load when source is workspace_path. In default permissions mode this must stay inside the selected workspace root or discovered skill directories.", + "minLength": 1, + "type": "string", + }, + "source": { + "enum": [ + "workspace_path", + "message_attachment", + ], + "type": "string", + }, + }, + "required": [ + "source", + ], + "type": "object", + }, + "load_skill": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "name": { + "description": "The discovered skill name to load.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", + }, + "manage_task": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "description": "Required. The action to perform: 'create' a new task, 'update' an existing task's status/title/description, or 'delete' a task.", + "enum": [ + "create", + "update", + "delete", + ], + "type": "string", + }, + "description": { + "anyOf": [ + { + "maxLength": 600, + "type": "string", + }, + { + "type": "null", + }, + ], + "description": "Optional task description.", + }, + "planId": { + "description": "Optional plan ID. Omit to use the current thread plan.", + "minLength": 1, + "type": "string", + }, + "status": { + "description": "Task status: 'pending', 'in_progress', 'completed', or 'blocked'. Required for update actions.", + "enum": [ + "pending", + "in_progress", + "completed", + "blocked", + ], + "type": "string", + }, + "taskId": { + "description": "Required for update and delete actions. The ID of the task to modify.", + "minLength": 1, + "type": "string", + }, + "title": { + "description": "Task title. Required for create actions.", + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "action", + ], + "type": "object", + }, + "read": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 400, + "minimum": 1, + "type": "integer", + }, + "offset": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer", + }, + "path": { + "description": "File or directory path to read. In default permissions mode this must be relative to the selected workspace root.", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "path", + ], + "type": "object", + }, + "update_plan": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "audience": { + "enum": [ + "technical", + "general", + ], + "type": "string", + }, + "document": { + "maxLength": 40000, + "minLength": 1, + "type": "string", + }, + "goal": { + "maxLength": 300, + "minLength": 1, + "type": "string", + }, + "planId": { + "minLength": 1, + "type": "string", + }, + "summary": { + "maxLength": 2000, + "minLength": 1, + "type": "string", + }, + "title": { + "maxLength": 200, + "minLength": 1, + "type": "string", + }, + }, + "type": "object", + }, +} +`; + +exports[`tool input JSON schemas converts every integration tool to a valid object schema 1`] = ` +{ + "airtable_create_comment": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "recordId": { + "description": "The record ID", + "minLength": 1, + "type": "string", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + "text": { + "description": "The comment text", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "recordId", + "text", + ], + "type": "object", + }, + "airtable_create_field": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "description": { + "description": "Optional description", + "type": "string", + }, + "name": { + "description": "Name for the new field", + "minLength": 1, + "type": "string", + }, + "options": { + "additionalProperties": {}, + "description": "REQUIRED for singleSelect/multipleSelects: { choices: [{ name: "Value" }] }. For number: { precision: 0 }. For currency: { precision: 2, symbol: "$" }", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "tableIdOrName": { + "description": "The table ID or name (name will be resolved to ID)", + "minLength": 1, + "type": "string", + }, + "type": { + "description": "Field type: singleLineText, multilineText, number, singleSelect, multipleSelects, date, dateTime, checkbox, email, url, phoneNumber, currency, percent, rating", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "name", + "type", + ], + "type": "object", + }, + "airtable_create_records": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "records": { + "description": "Records to create (max 10)", + "items": { + "additionalProperties": false, + "properties": { + "fields": { + "additionalProperties": {}, + "description": "Field values for the record", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "fields", + ], + "type": "object", + }, + "maxItems": 10, + "minItems": 1, + "type": "array", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "records", + ], + "type": "object", + }, + "airtable_create_table": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "description": { + "description": "Optional description", + "type": "string", + }, + "fields": { + "description": "Initial fields for the table", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string", + }, + "name": { + "minLength": 1, + "type": "string", + }, + "options": { + "additionalProperties": {}, + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "type": { + "description": "Field type (e.g. singleLineText, number, singleSelect)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "name", + "type", + ], + "type": "object", + }, + "minItems": 1, + "type": "array", + }, + "name": { + "description": "Name for the new table", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "name", + "fields", + ], + "type": "object", + }, + "airtable_delete_records": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "recordIds": { + "description": "Record IDs to delete (max 10)", + "items": { + "minLength": 1, + "type": "string", + }, + "maxItems": 10, + "minItems": 1, + "type": "array", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "recordIds", + ], + "type": "object", + }, + "airtable_get_record": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "recordId": { + "description": "The record ID (e.g. recXXXXXXXXXXXXXX)", + "minLength": 1, + "type": "string", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "recordId", + ], + "type": "object", + }, + "airtable_get_table": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + ], + "type": "object", + }, + "airtable_get_user": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "airtable_list_bases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "airtable_list_comments": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "recordId": { + "description": "The record ID", + "minLength": 1, + "type": "string", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "recordId", + ], + "type": "object", + }, + "airtable_list_records": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "fields": { + "description": "Specific field names to return", + "items": { + "type": "string", + }, + "type": "array", + }, + "filterByFormula": { + "description": "Airtable formula to filter records (e.g. {Status}='Done')", + "type": "string", + }, + "maxRecords": { + "description": "Maximum number of records to return", + "type": "number", + }, + "pageSize": { + "description": "Number of records per page (max 100)", + "type": "number", + }, + "sort": { + "description": "Sort configuration", + "items": { + "additionalProperties": false, + "properties": { + "direction": { + "enum": [ + "asc", + "desc", + ], + "type": "string", + }, + "field": { + "type": "string", + }, + }, + "required": [ + "field", + ], + "type": "object", + }, + "type": "array", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + "view": { + "description": "View name or ID to filter by", + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + ], + "type": "object", + }, + "airtable_list_tables": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID (e.g. appXXXXXXXXXXXXXX)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + ], + "type": "object", + }, + "airtable_update_field": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "description": { + "description": "New description", + "type": "string", + }, + "fieldIdOrName": { + "description": "The field ID (e.g. fldXXXXXXXXXXXXXX)", + "minLength": 1, + "type": "string", + }, + "name": { + "description": "New name for the field", + "type": "string", + }, + "tableIdOrName": { + "description": "The table ID or name (name will be resolved to ID)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "fieldIdOrName", + ], + "type": "object", + }, + "airtable_update_records": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "baseId": { + "description": "The Airtable base ID", + "minLength": 1, + "type": "string", + }, + "records": { + "description": "Records to update (max 10)", + "items": { + "additionalProperties": false, + "properties": { + "fields": { + "additionalProperties": {}, + "description": "Field values to update", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "id": { + "description": "The record ID to update", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "id", + "fields", + ], + "type": "object", + }, + "maxItems": 10, + "minItems": 1, + "type": "array", + }, + "tableIdOrName": { + "description": "The table ID or name", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "baseId", + "tableIdOrName", + "records", + ], + "type": "object", + }, + "arxiv_get_paper": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "arxivId": { + "description": "ArXiv paper ID (e.g. '2301.07041', 'arxiv:2301.07041', or full URL).", + "type": "string", + }, + }, + "required": [ + "arxivId", + ], + "type": "object", + }, + "arxiv_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "default": 10, + "description": "Maximum number of papers to return.", + "maximum": 30, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "Search query. Use arXiv syntax: 'all:' for any field, 'ti:' for title, 'au:' for author, 'abs:' for abstract, 'cat:' for category.", + "type": "string", + }, + "sortBy": { + "default": "relevance", + "description": "Sort order for results.", + "enum": [ + "relevance", + "lastUpdatedDate", + "submittedDate", + ], + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "gcal_create_event": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "attendees": { + "description": "List of attendee email addresses.", + "items": { + "type": "string", + }, + "type": "array", + }, + "calendarId": { + "description": "Calendar ID (defaults to 'primary').", + "type": "string", + }, + "description": { + "description": "Event description.", + "type": "string", + }, + "endDateTime": { + "description": "End date/time in ISO 8601 format.", + "type": "string", + }, + "location": { + "description": "Event location.", + "type": "string", + }, + "startDateTime": { + "description": "Start date/time in ISO 8601 format.", + "type": "string", + }, + "summary": { + "description": "Event title.", + "type": "string", + }, + "timeZone": { + "description": "IANA time zone (e.g. 'America/New_York').", + "type": "string", + }, + }, + "required": [ + "summary", + "startDateTime", + "endDateTime", + ], + "type": "object", + }, + "gcal_delete_event": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID containing the event.", + "type": "string", + }, + "eventId": { + "description": "The event ID to delete.", + "type": "string", + }, + }, + "required": [ + "calendarId", + "eventId", + ], + "type": "object", + }, + "gcal_get_event": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID containing the event.", + "type": "string", + }, + "eventId": { + "description": "The event ID to retrieve.", + "type": "string", + }, + }, + "required": [ + "calendarId", + "eventId", + ], + "type": "object", + }, + "gcal_get_events": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID (defaults to 'primary').", + "type": "string", + }, + "maxResults": { + "default": 25, + "description": "Maximum number of events.", + "maximum": 100, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "Free text search term for events.", + "type": "string", + }, + "timeMax": { + "description": "End of the date range in ISO 8601 format.", + "type": "string", + }, + "timeMin": { + "description": "Start of the date range in ISO 8601 format (e.g. '2025-01-01T00:00:00Z').", + "type": "string", + }, + }, + "required": [ + "timeMin", + "timeMax", + ], + "type": "object", + }, + "gcal_get_free_busy": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarIds": { + "description": "Calendar IDs to check (defaults to primary).", + "items": { + "type": "string", + }, + "type": "array", + }, + "timeMax": { + "description": "End of the range in ISO 8601 format.", + "type": "string", + }, + "timeMin": { + "description": "Start of the range in ISO 8601 format.", + "type": "string", + }, + }, + "required": [ + "timeMin", + "timeMax", + ], + "type": "object", + }, + "gcal_get_today": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID (defaults to 'primary').", + "type": "string", + }, + }, + "type": "object", + }, + "gcal_list_calendars": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "gcal_move_event": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Source calendar ID.", + "type": "string", + }, + "destinationCalendarId": { + "description": "Destination calendar ID.", + "type": "string", + }, + "eventId": { + "description": "The event ID to move.", + "type": "string", + }, + }, + "required": [ + "calendarId", + "eventId", + "destinationCalendarId", + ], + "type": "object", + }, + "gcal_quick_add": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID (defaults to 'primary').", + "type": "string", + }, + "text": { + "description": "Natural language description of the event.", + "type": "string", + }, + }, + "required": [ + "text", + ], + "type": "object", + }, + "gcal_rsvp": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "calendarId": { + "description": "Calendar ID containing the event.", + "type": "string", + }, + "eventId": { + "description": "The event ID to respond to.", + "type": "string", + }, + "status": { + "description": "Your response to the invitation.", + "enum": [ + "accepted", + "declined", + "tentative", + ], + "type": "string", + }, + }, + "required": [ + "calendarId", + "eventId", + "status", + ], + "type": "object", + }, + "gcal_update_event": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "attendees": { + "description": "Updated attendee email list.", + "items": { + "type": "string", + }, + "type": "array", + }, + "calendarId": { + "description": "Calendar ID (defaults to 'primary').", + "type": "string", + }, + "description": { + "description": "New event description.", + "type": "string", + }, + "endDateTime": { + "description": "New end date/time in ISO 8601.", + "type": "string", + }, + "eventId": { + "description": "The event ID to update.", + "type": "string", + }, + "location": { + "description": "New event location.", + "type": "string", + }, + "startDateTime": { + "description": "New start date/time in ISO 8601.", + "type": "string", + }, + "summary": { + "description": "New event title.", + "type": "string", + }, + "timeZone": { + "description": "IANA time zone.", + "type": "string", + }, + }, + "required": [ + "eventId", + ], + "type": "object", + }, + "gdrive_create_folder": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "name": { + "description": "Name for the new folder.", + "type": "string", + }, + "parentFolderId": { + "description": "Parent folder ID. Defaults to root.", + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", + }, + "gdrive_download": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fileId": { + "description": "Google Drive file ID to download.", + "type": "string", + }, + "localPath": { + "description": "Local path to save the file to. Defaults to ./downloads/{filename}.", + "type": "string", + }, + }, + "required": [ + "fileId", + ], + "type": "object", + }, + "gdrive_get_file": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fileId": { + "description": "The Google Drive file ID.", + "type": "string", + }, + }, + "required": [ + "fileId", + ], + "type": "object", + }, + "gdrive_list_files": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "folderId": { + "description": "Folder ID to list. Defaults to root.", + "type": "string", + }, + "maxResults": { + "default": 50, + "description": "Maximum number of files to return.", + "maximum": 100, + "minimum": 1, + "type": "number", + }, + }, + "type": "object", + }, + "gdrive_move": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fileId": { + "description": "The file ID to move.", + "type": "string", + }, + "newParentFolderId": { + "description": "The destination folder ID.", + "type": "string", + }, + }, + "required": [ + "fileId", + "newParentFolderId", + ], + "type": "object", + }, + "gdrive_rename": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fileId": { + "description": "The file ID to rename.", + "type": "string", + }, + "newName": { + "description": "The new name for the file.", + "type": "string", + }, + }, + "required": [ + "fileId", + "newName", + ], + "type": "object", + }, + "gdrive_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "default": 20, + "description": "Maximum number of results to return.", + "maximum": 50, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "Search query string.", + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "gdrive_share": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "email": { + "description": "Email address of the user to share with.", + "format": "email", + "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", + "type": "string", + }, + "fileId": { + "description": "The file ID to share.", + "type": "string", + }, + "role": { + "description": "Permission role to grant.", + "enum": [ + "reader", + "commenter", + "writer", + ], + "type": "string", + }, + }, + "required": [ + "fileId", + "email", + "role", + ], + "type": "object", + }, + "gdrive_trash": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "fileId": { + "description": "The file ID to trash.", + "type": "string", + }, + }, + "required": [ + "fileId", + ], + "type": "object", + }, + "gdrive_upload": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "localPath": { + "description": "Path to the local file to upload (relative to workspace root or absolute).", + "type": "string", + }, + "name": { + "description": "Name for the file in Drive. Defaults to the local filename.", + "type": "string", + }, + "parentFolderId": { + "description": "Drive folder ID to upload into. Defaults to root.", + "type": "string", + }, + }, + "required": [ + "localPath", + ], + "type": "object", + }, + "gh_add_issue_comment": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "body": { + "description": "Comment body (Markdown).", + "type": "string", + }, + "issueNumber": { + "description": "Issue number.", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "issueNumber", + "body", + ], + "type": "object", + }, + "gh_add_pr_comment": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "body": { + "description": "Comment body (Markdown).", + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "prNumber": { + "description": "Pull request number.", + "type": "number", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "prNumber", + "body", + ], + "type": "object", + }, + "gh_close_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "issueNumber": { + "description": "Issue number to close.", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "issueNumber", + ], + "type": "object", + }, + "gh_create_branch": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "branchName": { + "description": "Name for the new branch.", + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "sha": { + "description": "Commit SHA to branch from.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "branchName", + "sha", + ], + "type": "object", + }, + "gh_create_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "assignees": { + "description": "Usernames to assign.", + "items": { + "type": "string", + }, + "type": "array", + }, + "body": { + "description": "Issue body (Markdown).", + "type": "string", + }, + "labels": { + "description": "Label names.", + "items": { + "type": "string", + }, + "type": "array", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "title": { + "description": "Issue title.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "title", + ], + "type": "object", + }, + "gh_create_pr": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "base": { + "description": "Branch to merge into.", + "type": "string", + }, + "body": { + "description": "PR description (Markdown).", + "type": "string", + }, + "draft": { + "description": "Create as draft PR.", + "type": "boolean", + }, + "head": { + "description": "Branch containing changes.", + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "title": { + "description": "PR title.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "title", + "head", + "base", + ], + "type": "object", + }, + "gh_create_release": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "body": { + "description": "Release notes (Markdown).", + "type": "string", + }, + "draft": { + "description": "Create as draft.", + "type": "boolean", + }, + "name": { + "description": "Release title.", + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "prerelease": { + "description": "Mark as pre-release.", + "type": "boolean", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "tagName": { + "description": "Tag name for the release.", + "type": "string", + }, + "targetCommitish": { + "description": "Branch or commit SHA to tag (defaults to default branch).", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "tagName", + ], + "type": "object", + }, + "gh_get_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "issueNumber": { + "description": "Issue number.", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "issueNumber", + ], + "type": "object", + }, + "gh_get_pr": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "prNumber": { + "description": "Pull request number.", + "type": "number", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "prNumber", + ], + "type": "object", + }, + "gh_get_repo": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_get_run_logs": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "runId": { + "description": "Workflow run ID.", + "type": "number", + }, + }, + "required": [ + "owner", + "repo", + "runId", + ], + "type": "object", + }, + "gh_list_branches": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 30).", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_list_issues": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "labels": { + "description": "Comma-separated label names to filter by.", + "type": "string", + }, + "maxResults": { + "description": "Max results (default 30).", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "state": { + "description": "Filter by state (default open).", + "enum": [ + "open", + "closed", + "all", + ], + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_list_prs": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 30).", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "state": { + "description": "Filter by state (default open).", + "enum": [ + "open", + "closed", + "all", + ], + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_list_releases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 20).", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_list_repos": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 30).", + "type": "number", + }, + "sort": { + "description": "Sort order.", + "enum": [ + "updated", + "created", + "pushed", + "full_name", + ], + "type": "string", + }, + }, + "type": "object", + }, + "gh_list_runs": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "branch": { + "description": "Filter by branch.", + "type": "string", + }, + "maxResults": { + "description": "Max results (default 20).", + "type": "number", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "status": { + "description": "Filter by status (e.g. completed, in_progress, queued).", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + ], + "type": "object", + }, + "gh_merge_pr": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "commitTitle": { + "description": "Custom merge commit title.", + "type": "string", + }, + "mergeMethod": { + "description": "Merge strategy (default merge).", + "enum": [ + "merge", + "squash", + "rebase", + ], + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "prNumber": { + "description": "Pull request number.", + "type": "number", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "prNumber", + ], + "type": "object", + }, + "gh_rerun_workflow": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "runId": { + "description": "Workflow run ID to re-run.", + "type": "number", + }, + }, + "required": [ + "owner", + "repo", + "runId", + ], + "type": "object", + }, + "gh_review_pr": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "body": { + "description": "Review comment body.", + "type": "string", + }, + "event": { + "description": "Review action.", + "enum": [ + "APPROVE", + "REQUEST_CHANGES", + "COMMENT", + ], + "type": "string", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "prNumber": { + "description": "Pull request number.", + "type": "number", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "prNumber", + "event", + ], + "type": "object", + }, + "gh_search_code": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 20).", + "type": "number", + }, + "query": { + "description": "Code search query (GitHub search syntax, e.g. 'useState repo:facebook/react').", + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "gh_search_repos": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 20).", + "type": "number", + }, + "query": { + "description": "Search query (GitHub search syntax).", + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "gh_update_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "assignees": { + "description": "Replace assignees.", + "items": { + "type": "string", + }, + "type": "array", + }, + "body": { + "description": "New body.", + "type": "string", + }, + "issueNumber": { + "description": "Issue number.", + "type": "number", + }, + "labels": { + "description": "Replace labels.", + "items": { + "type": "string", + }, + "type": "array", + }, + "owner": { + "description": "Repository owner (user or organization).", + "type": "string", + }, + "repo": { + "description": "Repository name.", + "type": "string", + }, + "state": { + "description": "New state.", + "enum": [ + "open", + "closed", + ], + "type": "string", + }, + "title": { + "description": "New title.", + "type": "string", + }, + }, + "required": [ + "owner", + "repo", + "issueNumber", + ], + "type": "object", + }, + "gmail_archive": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to archive.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_bulk_action": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "description": "The action to perform on all messages.", + "enum": [ + "archive", + "trash", + "star", + "unstar", + "mark_read", + "mark_unread", + ], + "type": "string", + }, + "messageIds": { + "description": "Message IDs to act on.", + "items": { + "type": "string", + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + }, + }, + "required": [ + "messageIds", + "action", + ], + "type": "object", + }, + "gmail_create_draft": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "bcc": { + "description": "BCC recipients, comma-separated.", + "type": "string", + }, + "body": { + "description": "Email body in HTML format.", + "type": "string", + }, + "cc": { + "description": "CC recipients, comma-separated.", + "type": "string", + }, + "subject": { + "description": "Email subject line.", + "type": "string", + }, + "to": { + "description": "Recipient email address(es), comma-separated.", + "type": "string", + }, + }, + "required": [ + "to", + "subject", + "body", + ], + "type": "object", + }, + "gmail_forward": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "additionalBody": { + "description": "Optional message to include above the forwarded email.", + "type": "string", + }, + "messageId": { + "description": "The message ID to forward.", + "type": "string", + }, + "to": { + "description": "Recipient email address(es), comma-separated.", + "type": "string", + }, + }, + "required": [ + "messageId", + "to", + ], + "type": "object", + }, + "gmail_get_email": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The Gmail message ID to retrieve.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_get_thread": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "threadId": { + "description": "The thread ID to retrieve.", + "type": "string", + }, + }, + "required": [ + "threadId", + ], + "type": "object", + }, + "gmail_list_labels": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "gmail_manage_labels": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "addLabelIds": { + "description": "Label IDs to add.", + "items": { + "type": "string", + }, + "type": "array", + }, + "messageIds": { + "description": "Message IDs to modify.", + "items": { + "type": "string", + }, + "minItems": 1, + "type": "array", + }, + "removeLabelIds": { + "description": "Label IDs to remove.", + "items": { + "type": "string", + }, + "type": "array", + }, + }, + "required": [ + "messageIds", + ], + "type": "object", + }, + "gmail_mark_read": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to mark as read.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_mark_unread": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to mark as unread.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_reply": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "bcc": { + "description": "BCC recipients, comma-separated.", + "type": "string", + }, + "body": { + "description": "Reply body in HTML format.", + "type": "string", + }, + "cc": { + "description": "CC recipients, comma-separated.", + "type": "string", + }, + "messageId": { + "description": "The message ID to reply to.", + "type": "string", + }, + }, + "required": [ + "messageId", + "body", + ], + "type": "object", + }, + "gmail_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "default": 10, + "description": "Maximum number of results to return.", + "maximum": 50, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "Gmail search query string.", + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "gmail_send": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "bcc": { + "description": "BCC recipients, comma-separated.", + "type": "string", + }, + "body": { + "description": "Email body in HTML format.", + "type": "string", + }, + "cc": { + "description": "CC recipients, comma-separated.", + "type": "string", + }, + "subject": { + "description": "Email subject line.", + "type": "string", + }, + "to": { + "description": "Recipient email address(es), comma-separated.", + "type": "string", + }, + }, + "required": [ + "to", + "subject", + "body", + ], + "type": "object", + }, + "gmail_star": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to star.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_trash": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to trash.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "gmail_unstar": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "messageId": { + "description": "The message ID to unstar.", + "type": "string", + }, + }, + "required": [ + "messageId", + ], + "type": "object", + }, + "linear_create_comment": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "body": { + "description": "Comment body (markdown)", + "type": "string", + }, + "issueId": { + "description": "The issue ID to comment on", + "type": "string", + }, + }, + "required": [ + "issueId", + "body", + ], + "type": "object", + }, + "linear_create_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "assigneeId": { + "description": "Assignee user ID", + "type": "string", + }, + "description": { + "description": "Issue description (markdown)", + "type": "string", + }, + "estimate": { + "description": "Estimate points", + "type": "number", + }, + "labelIds": { + "description": "Label IDs to apply", + "items": { + "type": "string", + }, + "type": "array", + }, + "priority": { + "description": "Priority: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low", + "maximum": 4, + "minimum": 0, + "type": "number", + }, + "projectId": { + "description": "Project ID to associate", + "type": "string", + }, + "stateId": { + "description": "Workflow state ID", + "type": "string", + }, + "teamId": { + "description": "Team ID to create the issue in", + "type": "string", + }, + "title": { + "description": "Issue title", + "type": "string", + }, + }, + "required": [ + "teamId", + "title", + ], + "type": "object", + }, + "linear_create_label": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "color": { + "description": "Color hex (e.g. #ff0000)", + "type": "string", + }, + "description": { + "description": "Label description", + "type": "string", + }, + "name": { + "description": "Label name", + "type": "string", + }, + "teamId": { + "description": "Team ID to scope to", + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", + }, + "linear_create_project": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "description": { + "description": "Project description", + "type": "string", + }, + "leadId": { + "description": "Lead user ID", + "type": "string", + }, + "name": { + "description": "Project name", + "type": "string", + }, + "startDate": { + "description": "Start date (ISO string)", + "type": "string", + }, + "targetDate": { + "description": "Target date (ISO string)", + "type": "string", + }, + "teamIds": { + "description": "Team IDs for this project", + "items": { + "type": "string", + }, + "type": "array", + }, + }, + "required": [ + "name", + "teamIds", + ], + "type": "object", + }, + "linear_delete_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "issueId": { + "description": "The issue ID to delete", + "type": "string", + }, + }, + "required": [ + "issueId", + ], + "type": "object", + }, + "linear_get_current_cycle": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "teamId": { + "description": "The team ID", + "type": "string", + }, + }, + "required": [ + "teamId", + ], + "type": "object", + }, + "linear_get_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "issueId": { + "description": "The issue ID (UUID)", + "type": "string", + }, + }, + "required": [ + "issueId", + ], + "type": "object", + }, + "linear_get_project": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "projectId": { + "description": "The project ID", + "type": "string", + }, + }, + "required": [ + "projectId", + ], + "type": "object", + }, + "linear_get_team": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "teamId": { + "description": "The team ID", + "type": "string", + }, + }, + "required": [ + "teamId", + ], + "type": "object", + }, + "linear_list_comments": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "issueId": { + "description": "The issue ID", + "type": "string", + }, + }, + "required": [ + "issueId", + ], + "type": "object", + }, + "linear_list_cycles": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "teamId": { + "description": "The team ID", + "type": "string", + }, + }, + "required": [ + "teamId", + ], + "type": "object", + }, + "linear_list_issues": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "assigneeId": { + "description": "Filter by assignee user ID", + "type": "string", + }, + "maxResults": { + "description": "Max results (default 25)", + "type": "number", + }, + "projectId": { + "description": "Filter by project ID", + "type": "string", + }, + "stateType": { + "description": "Filter by workflow state type", + "enum": [ + "triage", + "backlog", + "unstarted", + "started", + "completed", + "cancelled", + ], + "type": "string", + }, + "teamId": { + "description": "Filter by team ID", + "type": "string", + }, + }, + "type": "object", + }, + "linear_list_labels": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "teamId": { + "description": "Filter by team ID", + "type": "string", + }, + }, + "type": "object", + }, + "linear_list_projects": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 25)", + "type": "number", + }, + }, + "type": "object", + }, + "linear_list_teams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "linear_list_users": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "linear_list_workflow_states": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "teamId": { + "description": "The team ID", + "type": "string", + }, + }, + "required": [ + "teamId", + ], + "type": "object", + }, + "linear_search_issues": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 20)", + "type": "number", + }, + "query": { + "description": "Search query text (at least 1 character)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "linear_update_issue": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "assigneeId": { + "description": "New assignee user ID", + "type": "string", + }, + "description": { + "description": "New description", + "type": "string", + }, + "estimate": { + "description": "New estimate points", + "type": "number", + }, + "issueId": { + "description": "The issue ID to update", + "type": "string", + }, + "labelIds": { + "description": "New label IDs", + "items": { + "type": "string", + }, + "type": "array", + }, + "priority": { + "description": "New priority", + "maximum": 4, + "minimum": 0, + "type": "number", + }, + "projectId": { + "description": "New project ID", + "type": "string", + }, + "stateId": { + "description": "New workflow state ID", + "type": "string", + }, + "title": { + "description": "New title", + "type": "string", + }, + }, + "required": [ + "issueId", + ], + "type": "object", + }, + "linear_update_project": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "description": { + "description": "New description", + "type": "string", + }, + "leadId": { + "description": "New lead user ID", + "type": "string", + }, + "name": { + "description": "New name", + "type": "string", + }, + "projectId": { + "description": "The project ID to update", + "type": "string", + }, + "startDate": { + "description": "New start date", + "type": "string", + }, + "state": { + "description": "New state (planned, started, paused, completed, cancelled)", + "type": "string", + }, + "targetDate": { + "description": "New target date", + "type": "string", + }, + }, + "required": [ + "projectId", + ], + "type": "object", + }, + "mongo_aggregate": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "pipeline": { + "description": "Aggregation pipeline stages.", + "items": { + "additionalProperties": {}, + "description": "A JSON object.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "type": "array", + }, + }, + "required": [ + "collection", + "pipeline", + ], + "type": "object", + }, + "mongo_count": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "query": { + "additionalProperties": {}, + "description": "MongoDB query filter.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + ], + "type": "object", + }, + "mongo_distinct": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "field": { + "description": "Field name to get distinct values for.", + "type": "string", + }, + "query": { + "additionalProperties": {}, + "description": "MongoDB query filter.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + "field", + ], + "type": "object", + }, + "mongo_find": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "limit": { + "description": "Maximum documents to return (max 500).", + "type": "number", + }, + "projection": { + "additionalProperties": {}, + "description": "Projection to include/exclude fields.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "query": { + "additionalProperties": {}, + "description": "MongoDB query filter.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "skip": { + "description": "Number of documents to skip.", + "type": "number", + }, + "sort": { + "additionalProperties": {}, + "description": "Sort specification.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + ], + "type": "object", + }, + "mongo_find_one": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "query": { + "additionalProperties": {}, + "description": "MongoDB query filter.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + ], + "type": "object", + }, + "mongo_insert_many": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "documents": { + "description": "Array of documents to insert.", + "items": { + "additionalProperties": {}, + "description": "A JSON object.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "type": "array", + }, + }, + "required": [ + "collection", + "documents", + ], + "type": "object", + }, + "mongo_insert_one": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "document": { + "additionalProperties": {}, + "description": "Document to insert.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + "document", + ], + "type": "object", + }, + "mongo_list_collections": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + }, + "type": "object", + }, + "mongo_list_databases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "mongo_update_many": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "filter": { + "additionalProperties": {}, + "description": "Query filter to match documents.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "options": { + "additionalProperties": {}, + "description": "Update options.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "update": { + "additionalProperties": {}, + "description": "Update operations (e.g. { $set: { ... } }).", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + "filter", + "update", + ], + "type": "object", + }, + "mongo_update_one": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "collection": { + "description": "Collection name.", + "type": "string", + }, + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "filter": { + "additionalProperties": {}, + "description": "Query filter to match the document.", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "options": { + "additionalProperties": {}, + "description": "Update options (e.g. upsert).", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "update": { + "additionalProperties": {}, + "description": "Update operations (e.g. { $set: { ... } }).", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "collection", + "filter", + "update", + ], + "type": "object", + }, + "mysql_describe_table": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "table": { + "description": "Table name to describe.", + "type": "string", + }, + }, + "required": [ + "table", + ], + "type": "object", + }, + "mysql_execute": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "params": { + "description": "Parameterized query values (?, ?, ...).", + "items": {}, + "type": "array", + }, + "sql": { + "description": "SQL statement to execute.", + "type": "string", + }, + }, + "required": [ + "sql", + ], + "type": "object", + }, + "mysql_list_databases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "mysql_list_tables": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + }, + "type": "object", + }, + "mysql_query": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "params": { + "description": "Parameterized query values (?, ?, ...).", + "items": {}, + "type": "array", + }, + "sql": { + "description": "SQL SELECT query to execute.", + "type": "string", + }, + }, + "required": [ + "sql", + ], + "type": "object", + }, + "notion_append_blocks": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "blockId": { + "description": "Page ID or block ID to append to", + "type": "string", + }, + "children": { + "description": "Blocks to append", + "items": { + "additionalProperties": false, + "properties": { + "content": { + "description": "Text content of the block", + "type": "string", + }, + "type": { + "description": "Block type: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, to_do, toggle, callout, quote, divider, code", + "type": "string", + }, + }, + "required": [ + "type", + "content", + ], + "type": "object", + }, + "type": "array", + }, + }, + "required": [ + "blockId", + "children", + ], + "type": "object", + }, + "notion_archive_page": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "pageId": { + "description": "The page ID to archive", + "type": "string", + }, + }, + "required": [ + "pageId", + ], + "type": "object", + }, + "notion_create_comment": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "discussionId": { + "description": "Discussion thread ID (for replies)", + "type": "string", + }, + "pageId": { + "description": "The page ID to comment on", + "type": "string", + }, + "richText": { + "description": "Comment text", + "type": "string", + }, + }, + "required": [ + "pageId", + "richText", + ], + "type": "object", + }, + "notion_create_database_entry": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "children": { + "description": "Page content blocks", + "items": { + "additionalProperties": false, + "properties": { + "content": { + "description": "Text content", + "type": "string", + }, + "type": { + "description": "Block type", + "type": "string", + }, + }, + "required": [ + "type", + "content", + ], + "type": "object", + }, + "type": "array", + }, + "databaseId": { + "description": "The database ID", + "type": "string", + }, + "properties": { + "additionalProperties": {}, + "description": "Properties for the new entry (Notion property format)", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "databaseId", + "properties", + ], + "type": "object", + }, + "notion_create_page": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "children": { + "description": "Initial content blocks", + "items": { + "additionalProperties": false, + "properties": { + "content": { + "description": "Text content of the block", + "type": "string", + }, + "type": { + "description": "Block type: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, to_do, toggle, callout, quote, divider, code", + "type": "string", + }, + }, + "required": [ + "type", + "content", + ], + "type": "object", + }, + "type": "array", + }, + "parentDatabaseId": { + "description": "Parent database ID (for database entry)", + "type": "string", + }, + "parentPageId": { + "description": "Parent page ID (for sub-page)", + "type": "string", + }, + "title": { + "description": "Page title", + "type": "string", + }, + }, + "required": [ + "title", + ], + "type": "object", + }, + "notion_get_blocks": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "blockId": { + "description": "Page ID or block ID", + "type": "string", + }, + "maxResults": { + "description": "Max blocks to return (default 50)", + "type": "number", + }, + }, + "required": [ + "blockId", + ], + "type": "object", + }, + "notion_get_page": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "pageId": { + "description": "The Notion page ID", + "type": "string", + }, + }, + "required": [ + "pageId", + ], + "type": "object", + }, + "notion_get_user": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "userId": { + "description": "The user ID", + "type": "string", + }, + }, + "required": [ + "userId", + ], + "type": "object", + }, + "notion_list_comments": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "blockId": { + "description": "Page ID or block ID", + "type": "string", + }, + "maxResults": { + "description": "Max comments (default 50)", + "type": "number", + }, + }, + "required": [ + "blockId", + ], + "type": "object", + }, + "notion_list_databases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max results (default 25)", + "type": "number", + }, + }, + "type": "object", + }, + "notion_list_users": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "description": "Max users (default 50)", + "type": "number", + }, + }, + "type": "object", + }, + "notion_query_database": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "databaseId": { + "description": "The database ID to query", + "type": "string", + }, + "filter": { + "additionalProperties": {}, + "description": "Notion filter object", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + "maxResults": { + "description": "Max results (default 25)", + "type": "number", + }, + "sorts": { + "description": "Sort criteria", + "items": { + "additionalProperties": false, + "properties": { + "direction": { + "enum": [ + "ascending", + "descending", + ], + "type": "string", + }, + "property": { + "type": "string", + }, + }, + "required": [ + "property", + "direction", + ], + "type": "object", + }, + "type": "array", + }, + }, + "required": [ + "databaseId", + ], + "type": "object", + }, + "notion_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "filter": { + "description": "Restrict to pages or databases (data_source)", + "enum": [ + "page", + "data_source", + ], + "type": "string", + }, + "maxResults": { + "description": "Max results (default 20)", + "type": "number", + }, + "query": { + "description": "Search query text", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "notion_update_database_entry": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "pageId": { + "description": "The entry (page) ID to update", + "type": "string", + }, + "properties": { + "additionalProperties": {}, + "description": "Properties to update", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "pageId", + "properties", + ], + "type": "object", + }, + "notion_update_page": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "archived": { + "description": "Set to true to archive", + "type": "boolean", + }, + "cover": { + "description": "Cover image URL", + "type": "string", + }, + "icon": { + "description": "Emoji icon for the page", + "type": "string", + }, + "pageId": { + "description": "The page ID to update", + "type": "string", + }, + "properties": { + "additionalProperties": {}, + "description": "Properties to update (Notion property format)", + "propertyNames": { + "type": "string", + }, + "type": "object", + }, + }, + "required": [ + "pageId", + ], + "type": "object", + }, + "pg_describe_table": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "schema": { + "description": "Schema name. Defaults to "public".", + "type": "string", + }, + "table": { + "description": "Table name to describe.", + "type": "string", + }, + }, + "required": [ + "table", + ], + "type": "object", + }, + "pg_execute": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "params": { + "description": "Parameterized query values ($1, $2, ...).", + "items": {}, + "type": "array", + }, + "sql": { + "description": "SQL statement to execute.", + "type": "string", + }, + }, + "required": [ + "sql", + ], + "type": "object", + }, + "pg_list_databases": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": {}, + "type": "object", + }, + "pg_list_schemas": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + }, + "type": "object", + }, + "pg_list_tables": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "schema": { + "description": "Schema name. Defaults to "public".", + "type": "string", + }, + }, + "type": "object", + }, + "pg_query": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "database": { + "description": "Target database. Uses the configured default if omitted.", + "type": "string", + }, + "params": { + "description": "Parameterized query values ($1, $2, ...).", + "items": {}, + "type": "array", + }, + "sql": { + "description": "SQL SELECT query to execute.", + "type": "string", + }, + }, + "required": [ + "sql", + ], + "type": "object", + }, + "pubmed_get_article": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "pmid": { + "description": "PubMed article ID (e.g. '38243602').", + "type": "string", + }, + }, + "required": [ + "pmid", + ], + "type": "object", + }, + "pubmed_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "default": 10, + "description": "Maximum number of articles to return.", + "maximum": 30, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "PubMed search query. Use field tags like [ti] for title, [au] for author, [dp] for date, or MeSH terms.", + "type": "string", + }, + "sort": { + "default": "relevance", + "description": "Sort order: relevance or publication date.", + "enum": [ + "relevance", + "pub_date", + ], + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "slack_add_reaction": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "emoji": { + "description": "Emoji name without colons (e.g. 'thumbsup')", + "minLength": 1, + "type": "string", + }, + "ts": { + "description": "The timestamp (ts) of the message", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "ts", + "emoji", + ], + "type": "object", + }, + "slack_archive_channel": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID to archive", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + ], + "type": "object", + }, + "slack_create_channel": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "isPrivate": { + "description": "Create as private channel (default false)", + "type": "boolean", + }, + "name": { + "description": "Channel name (lowercase, no spaces, max 80 chars)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", + }, + "slack_delete_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "ts": { + "description": "The timestamp (ts) of the message to delete", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "ts", + ], + "type": "object", + }, + "slack_get_channel": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The Slack channel ID (e.g. C01ABCDEF)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + ], + "type": "object", + }, + "slack_get_history": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "latest": { + "description": "Only messages before this Unix timestamp", + "type": "string", + }, + "limit": { + "description": "Max messages to return (default 30)", + "type": "number", + }, + "oldest": { + "description": "Only messages after this Unix timestamp", + "type": "string", + }, + }, + "required": [ + "channelId", + ], + "type": "object", + }, + "slack_get_thread": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "limit": { + "description": "Max replies to return (default 50)", + "type": "number", + }, + "threadTs": { + "description": "The timestamp (ts) of the parent message", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "threadTs", + ], + "type": "object", + }, + "slack_get_user": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "userId": { + "description": "The Slack user ID (e.g. U01ABCDEF)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "userId", + ], + "type": "object", + }, + "slack_invite_to_channel": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "userIds": { + "description": "User IDs to invite", + "items": { + "minLength": 1, + "type": "string", + }, + "minItems": 1, + "type": "array", + }, + }, + "required": [ + "channelId", + "userIds", + ], + "type": "object", + }, + "slack_kick_from_channel": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "userId": { + "description": "The user ID to remove", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "userId", + ], + "type": "object", + }, + "slack_list_channels": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "excludeArchived": { + "description": "Exclude archived channels (default true)", + "type": "boolean", + }, + "limit": { + "description": "Max channels to return (default 100)", + "type": "number", + }, + "types": { + "description": "Channel types to list, e.g. 'public_channel,private_channel'. Defaults to both.", + "type": "string", + }, + }, + "type": "object", + }, + "slack_list_users": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "limit": { + "description": "Max users to return (default 200)", + "type": "number", + }, + }, + "type": "object", + }, + "slack_pin_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "ts": { + "description": "The timestamp (ts) of the message to pin", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "ts", + ], + "type": "object", + }, + "slack_post_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID to post to", + "minLength": 1, + "type": "string", + }, + "text": { + "description": "Message text (supports Slack mrkdwn)", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "text", + ], + "type": "object", + }, + "slack_reply_to_thread": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "text": { + "description": "Reply text", + "minLength": 1, + "type": "string", + }, + "threadTs": { + "description": "The timestamp (ts) of the parent message", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "threadTs", + "text", + ], + "type": "object", + }, + "slack_schedule_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "postAt": { + "description": "Unix timestamp for when to send the message", + "type": "number", + }, + "text": { + "description": "Message text", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "text", + "postAt", + ], + "type": "object", + }, + "slack_search_messages": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "count": { + "description": "Max results to return (default 20)", + "type": "number", + }, + "query": { + "description": "Search query text (at least 1 character)", + "minLength": 1, + "type": "string", + }, + "sortBy": { + "description": "Sort by timestamp or relevance score", + "enum": [ + "timestamp", + "score", + ], + "type": "string", + }, + "sortDir": { + "description": "Sort direction", + "enum": [ + "asc", + "desc", + ], + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, + "slack_set_purpose": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "purpose": { + "description": "The new channel purpose text", + "type": "string", + }, + }, + "required": [ + "channelId", + "purpose", + ], + "type": "object", + }, + "slack_set_topic": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "topic": { + "description": "The new channel topic text", + "type": "string", + }, + }, + "required": [ + "channelId", + "topic", + ], + "type": "object", + }, + "slack_unpin_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "ts": { + "description": "The timestamp (ts) of the message to unpin", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "ts", + ], + "type": "object", + }, + "slack_update_message": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "channelId": { + "description": "The channel ID", + "minLength": 1, + "type": "string", + }, + "text": { + "description": "New message text", + "minLength": 1, + "type": "string", + }, + "ts": { + "description": "The timestamp (ts) of the message to update", + "minLength": 1, + "type": "string", + }, + }, + "required": [ + "channelId", + "ts", + "text", + ], + "type": "object", + }, + "yfinance_get_chart": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "interval": { + "default": "1d", + "description": "Data interval granularity.", + "enum": [ + "1m", + "5m", + "15m", + "30m", + "1h", + "1d", + "1wk", + "1mo", + ], + "type": "string", + }, + "range": { + "default": "1mo", + "description": "Time range for the chart data.", + "enum": [ + "1d", + "5d", + "1mo", + "3mo", + "6mo", + "1y", + "2y", + "5y", + "max", + ], + "type": "string", + }, + "symbol": { + "description": "Ticker symbol (e.g. 'AAPL').", + "type": "string", + }, + }, + "required": [ + "symbol", + ], + "type": "object", + }, + "yfinance_get_quote": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "symbols": { + "description": "Ticker symbols (e.g. ['AAPL', 'MSFT', 'GOOGL']).", + "items": { + "type": "string", + }, + "maxItems": 10, + "minItems": 1, + "type": "array", + }, + }, + "required": [ + "symbols", + ], + "type": "object", + }, + "yfinance_search": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "maxResults": { + "default": 8, + "description": "Maximum number of results.", + "maximum": 20, + "minimum": 1, + "type": "number", + }, + "query": { + "description": "Search query (company name or ticker).", + "type": "string", + }, + }, + "required": [ + "query", + ], + "type": "object", + }, +} +`; diff --git a/src/lib/ai/chat/tools/tool-json-schema.test.ts b/src/lib/ai/chat/tools/tool-json-schema.test.ts new file mode 100644 index 00000000..71e6588c --- /dev/null +++ b/src/lib/ai/chat/tools/tool-json-schema.test.ts @@ -0,0 +1,219 @@ +import { describe, expect, it, mock } from "bun:test"; +import { asSchema, type Tool } from "ai"; + +mock.module("server-only", () => ({})); + +const { getDefaultToolApprovalPolicies } = await import("./policy"); +const { buildTools } = await import("./index"); +const { loadIntegrationTools } = await import("@/lib/integrations/registry"); +const { INTEGRATION_PROVIDERS } = await import("@/server/db/enums"); + +type JsonSchemaNode = Record; + +// Options that switch on every built-in tool group: filesystem, mutation, +// execution, media generation, browser, computer, memory, skills, task and +// delegation. +function createOptions(overrides: Record = {}) { + const toolApprovalPolicies = getDefaultToolApprovalPolicies(); + + return { + agentRole: "primary", + availableSkills: [{ name: "release-notes" }], + defaultDirectory: "/tmp/sentinel-tool-schema", + imageGenerationRuntime: { + defaultProvider: "openai", + providers: { openai: {} }, + }, + memoryRuntime: { available: true }, + permissionMode: "default", + promptContext: {}, + searchProviders: {}, + searchSettings: { + defaultProvider: "exa", + defaultResultCount: 5, + maxResultCount: 10, + }, + skillRoots: [], + systemPrompt: "system", + threadId: "thread-1", + threadMode: "chat", + toolApprovalPolicies, + toolsEnabled: true, + userId: "user-1", + videoGenerationRuntime: { + defaultProvider: "fal", + providers: { fal: {} }, + }, + webFetchSettings: { batchEnabled: true, batchLimit: 10 }, + workspaceId: null, + ...overrides, + } as any; +} + +// The JSON Schema each tool's input schema turns into when the AI SDK sends it +// to a model provider. Serializing drops non-enumerable extras (zod 4 attaches +// a `~standard` property) so the snapshot matches the request payload. +async function toProviderJsonSchemas(tools: Record) { + const entries = await Promise.all( + Object.entries(tools) + .filter((entry): entry is [string, Tool] => entry[1] !== undefined) + .map(async ([name, tool]) => { + const jsonSchema = await asSchema(tool.inputSchema).jsonSchema; + return [ + name, + JSON.parse(JSON.stringify(jsonSchema)) as JsonSchemaNode, + ] as const; + }), + ); + + return Object.fromEntries( + entries.sort(([left], [right]) => left.localeCompare(right)), + ); +} + +function resolveLocalRef(root: JsonSchemaNode, ref: string) { + if (ref === "#") return root; + if (!ref.startsWith("#/")) return undefined; + + return ref + .slice(2) + .split("/") + .reduce( + (node, segment) => + node && typeof node === "object" + ? (node as JsonSchemaNode)[segment] + : undefined, + root, + ); +} + +function collectSchemaProblems( + root: JsonSchemaNode, + node: unknown, + path: string, + problems: string[], +) { + if (typeof node === "boolean") return; + if (!node || typeof node !== "object" || Array.isArray(node)) { + problems.push(`${path}: not a JSON schema`); + return; + } + + const schema = node as JsonSchemaNode; + + if (typeof schema.$ref === "string") { + if (resolveLocalRef(root, schema.$ref) === undefined) { + problems.push(`${path}: unresolved $ref ${schema.$ref}`); + } + } + + const properties = schema.properties as JsonSchemaNode | undefined; + + if (schema.type === "object") { + // A record (open object) must keep its value schema; a closed object with + // no declared properties only accepts {} and silently drops model input. + if (!properties && schema.additionalProperties === false) { + problems.push(`${path}: object accepts no properties`); + } + + if (Array.isArray(schema.required)) { + for (const key of schema.required) { + if (!properties || !(String(key) in properties)) { + problems.push(`${path}: required key ${String(key)} is not defined`); + } + } + } + } + + if (properties) { + for (const [key, value] of Object.entries(properties)) { + collectSchemaProblems(root, value, `${path}.${key}`, problems); + } + } + + if ( + schema.additionalProperties && + typeof schema.additionalProperties === "object" + ) { + collectSchemaProblems( + root, + schema.additionalProperties, + `${path}{*}`, + problems, + ); + } + + if (schema.items) { + const items = Array.isArray(schema.items) ? schema.items : [schema.items]; + items.forEach((item, index) => + collectSchemaProblems(root, item, `${path}[${index}]`, problems), + ); + } + + for (const keyword of ["anyOf", "oneOf", "allOf"] as const) { + const variants = schema[keyword]; + if (Array.isArray(variants)) { + variants.forEach((variant, index) => + collectSchemaProblems( + root, + variant, + `${path}.${keyword}[${index}]`, + problems, + ), + ); + } + } +} + +function expectValidToolInputSchemas(schemas: Record) { + const problems: string[] = []; + + for (const [name, schema] of Object.entries(schemas)) { + if (schema.type !== "object") { + problems.push(`${name}: input schema is not an object schema`); + } + if (!schema.properties || typeof schema.properties !== "object") { + problems.push(`${name}: input schema has no properties map`); + } + collectSchemaProblems(schema, schema, name, problems); + } + + expect(problems).toEqual([]); +} + +describe("tool input JSON schemas", () => { + it("converts every built-in chat tool to a valid object schema", async () => { + const schemas = await toProviderJsonSchemas(buildTools(createOptions())); + + expect(Object.keys(schemas)).toEqual( + expect.arrayContaining(["load_skill", "save_memory", "shell_command"]), + ); + expectValidToolInputSchemas(schemas); + expect(schemas).toMatchSnapshot(); + }); + + it("converts every plan-mode tool to a valid object schema", async () => { + const schemas = await toProviderJsonSchemas( + buildTools(createOptions({ threadMode: "plan" })), + ); + + expect(Object.keys(schemas)).toEqual( + expect.arrayContaining(["ask_question", "create_plan", "update_plan"]), + ); + expectValidToolInputSchemas(schemas); + expect(schemas).toMatchSnapshot(); + }); + + it("converts every integration tool to a valid object schema", async () => { + const tools = await loadIntegrationTools( + [...INTEGRATION_PROVIDERS], + { databases: {}, tokens: {} }, + () => false, + ); + const schemas = await toProviderJsonSchemas(tools); + + expect(Object.keys(schemas).length).toBeGreaterThan(100); + expectValidToolInputSchemas(schemas); + expect(schemas).toMatchSnapshot(); + }); +}); diff --git a/src/lib/integrations/providers/airtable/tools.ts b/src/lib/integrations/providers/airtable/tools.ts index bb328f1e..530a6fad 100644 --- a/src/lib/integrations/providers/airtable/tools.ts +++ b/src/lib/integrations/providers/airtable/tools.ts @@ -21,7 +21,7 @@ const fieldSchema = z.object({ name: z.string(), type: z.string(), description: z.string().optional(), - options: z.record(z.unknown()).optional(), + options: z.record(z.string(), z.unknown()).optional(), }); const viewSchema = z.object({ @@ -42,7 +42,7 @@ const tableSchema = z.object({ const recordSchema = z.object({ id: z.string(), createdTime: z.string(), - fields: z.record(z.unknown()), + fields: z.record(z.string(), z.unknown()), }); const commentSchema = z.object({ @@ -134,7 +134,7 @@ export function buildAirtableTools( "Field type (e.g. singleLineText, number, singleSelect)", ), description: z.string().optional(), - options: z.record(z.unknown()).optional(), + options: z.record(z.string(), z.unknown()).optional(), }), ) .min(1) @@ -166,7 +166,7 @@ export function buildAirtableTools( ), description: z.string().optional().describe("Optional description"), options: z - .record(z.unknown()) + .record(z.string(), z.unknown()) .optional() .describe( 'REQUIRED for singleSelect/multipleSelects: { choices: [{ name: "Value" }] }. For number: { precision: 0 }. For currency: { precision: 2, symbol: "$" }', @@ -279,7 +279,7 @@ export function buildAirtableTools( .array( z.object({ fields: z - .record(z.unknown()) + .record(z.string(), z.unknown()) .describe("Field values for the record"), }), ) @@ -308,7 +308,9 @@ export function buildAirtableTools( .array( z.object({ id: z.string().min(1).describe("The record ID to update"), - fields: z.record(z.unknown()).describe("Field values to update"), + fields: z + .record(z.string(), z.unknown()) + .describe("Field values to update"), }), ) .min(1) diff --git a/src/lib/integrations/providers/mongodb/tools.ts b/src/lib/integrations/providers/mongodb/tools.ts index a5319817..63173e3f 100644 --- a/src/lib/integrations/providers/mongodb/tools.ts +++ b/src/lib/integrations/providers/mongodb/tools.ts @@ -14,7 +14,7 @@ function getService(context: IntegrationContext): MongoDBService { return new MongoDBService(config); } -const jsonObject = z.record(z.unknown()).describe("A JSON object."); +const jsonObject = z.record(z.string(), z.unknown()).describe("A JSON object."); export function buildMongoDBTools( context: IntegrationContext, @@ -78,7 +78,7 @@ export function buildMongoDBTools( .describe("Target database. Uses the configured default if omitted."), }), outputSchema: z.object({ - documents: z.array(z.record(z.unknown())), + documents: z.array(z.record(z.string(), z.unknown())), count: z.number(), }), needsApproval: () => approvalFn("mongo_find"), @@ -112,7 +112,7 @@ export function buildMongoDBTools( .describe("Target database. Uses the configured default if omitted."), }), outputSchema: z.object({ - document: z.record(z.unknown()).nullable(), + document: z.record(z.string(), z.unknown()).nullable(), }), needsApproval: () => approvalFn("mongo_find_one"), execute: async ({ collection, query, database }) => { @@ -235,7 +235,7 @@ export function buildMongoDBTools( .describe("Target database. Uses the configured default if omitted."), }), outputSchema: z.object({ - documents: z.array(z.record(z.unknown())), + documents: z.array(z.record(z.string(), z.unknown())), }), needsApproval: () => approvalFn("mongo_aggregate"), execute: async ({ collection, pipeline, database }) => { diff --git a/src/lib/integrations/providers/mysql/tools.ts b/src/lib/integrations/providers/mysql/tools.ts index b0726ee8..101da38d 100644 --- a/src/lib/integrations/providers/mysql/tools.ts +++ b/src/lib/integrations/providers/mysql/tools.ts @@ -112,7 +112,7 @@ export function buildMySQLTools( .describe("Target database. Uses the configured default if omitted."), }), outputSchema: z.object({ - rows: z.array(z.record(z.unknown())), + rows: z.array(z.record(z.string(), z.unknown())), rowCount: z.number(), fields: z.array(z.object({ name: z.string(), dataType: z.string() })), }), diff --git a/src/lib/integrations/providers/notion/tools.ts b/src/lib/integrations/providers/notion/tools.ts index ab7e9b5e..8545a138 100644 --- a/src/lib/integrations/providers/notion/tools.ts +++ b/src/lib/integrations/providers/notion/tools.ts @@ -22,7 +22,7 @@ const pageSchema = z.object({ parentType: z.string(), parentId: z.string().nullable(), archived: z.boolean(), - properties: z.record(z.string()), + properties: z.record(z.string(), z.string()), createdTime: z.string(), lastEditedTime: z.string(), createdBy: z.string(), @@ -147,7 +147,7 @@ export function buildNotionTools( inputSchema: z.object({ pageId: z.string().describe("The page ID to update"), properties: z - .record(z.unknown()) + .record(z.string(), z.unknown()) .optional() .describe("Properties to update (Notion property format)"), icon: z.string().optional().describe("Emoji icon for the page"), @@ -196,7 +196,7 @@ export function buildNotionTools( inputSchema: z.object({ databaseId: z.string().describe("The database ID to query"), filter: z - .record(z.unknown()) + .record(z.string(), z.unknown()) .optional() .describe("Notion filter object"), sorts: z @@ -226,7 +226,7 @@ export function buildNotionTools( inputSchema: z.object({ databaseId: z.string().describe("The database ID"), properties: z - .record(z.unknown()) + .record(z.string(), z.unknown()) .describe("Properties for the new entry (Notion property format)"), children: z .array( @@ -250,7 +250,9 @@ export function buildNotionTools( description: "Update an existing database entry's properties.", inputSchema: z.object({ pageId: z.string().describe("The entry (page) ID to update"), - properties: z.record(z.unknown()).describe("Properties to update"), + properties: z + .record(z.string(), z.unknown()) + .describe("Properties to update"), }), outputSchema: pageSchema, needsApproval: () => approvalFn("notion_update_database_entry"), diff --git a/src/lib/integrations/providers/postgresql/tools.ts b/src/lib/integrations/providers/postgresql/tools.ts index d89d11da..53886466 100644 --- a/src/lib/integrations/providers/postgresql/tools.ts +++ b/src/lib/integrations/providers/postgresql/tools.ts @@ -144,7 +144,7 @@ export function buildPostgresTools( .describe("Target database. Uses the configured default if omitted."), }), outputSchema: z.object({ - rows: z.array(z.record(z.unknown())), + rows: z.array(z.record(z.string(), z.unknown())), rowCount: z.number(), fields: z.array(z.object({ name: z.string(), dataType: z.string() })), }), diff --git a/src/schemas/appearance.schema.test.ts b/src/schemas/appearance.schema.test.ts new file mode 100644 index 00000000..0d51a008 --- /dev/null +++ b/src/schemas/appearance.schema.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from "bun:test"; + +import { appearanceFormSchema } from "./appearance.schema"; + +const validValues = { + accentColor: null, + codeFontFamily: "monospace", + codeFontSize: 13.5, + codeTheme: "github", + sidebarGlassEnabled: false, + themePreference: "system", + uiFontFamily: "sans-serif", + uiFontSize: 16, +}; + +function getFontSizeMessages(uiFontSize: unknown) { + const result = appearanceFormSchema.safeParse({ + ...validValues, + uiFontSize, + }); + + return result.success + ? [] + : result.error.issues + .filter((issue) => issue.path[0] === "uiFontSize") + .map((issue) => issue.message); +} + +describe("appearanceFormSchema font sizes", () => { + it("accepts sizes on the half-point grid", () => { + expect(appearanceFormSchema.safeParse(validValues).success).toBe(true); + expect(getFontSizeMessages(14.5)).toEqual([]); + }); + + it("reports a missing font size as required", () => { + expect(getFontSizeMessages(undefined)).toEqual(["Font size is required."]); + }); + + it("reports non-numeric font sizes as invalid", () => { + expect(getFontSizeMessages("16")).toEqual(["Enter a valid font size."]); + expect(getFontSizeMessages(Number.NaN)).toEqual([ + "Enter a valid font size.", + ]); + }); + + it("keeps the range and step messages", () => { + expect(getFontSizeMessages(20)).toEqual(["Font size must be at most 18."]); + expect(getFontSizeMessages(15.25)).toEqual([ + "Font size must use 0.5-point increments.", + ]); + }); +}); diff --git a/src/schemas/appearance.schema.ts b/src/schemas/appearance.schema.ts index 00d5a389..40072c28 100644 --- a/src/schemas/appearance.schema.ts +++ b/src/schemas/appearance.schema.ts @@ -18,8 +18,10 @@ const fontFamilySchema = z.string().trim().min(1, "Font family is required."); const fontSizeSchema = (minimum: number, maximum: number) => z .number({ - invalid_type_error: "Enter a valid font size.", - required_error: "Font size is required.", + error: (issue) => + issue.input === undefined + ? "Font size is required." + : "Enter a valid font size.", }) .min(minimum, `Font size must be at least ${minimum}.`) .max(maximum, `Font size must be at most ${maximum}.`) diff --git a/src/schemas/automation.schema.ts b/src/schemas/automation.schema.ts index cf70a97b..1ef9e972 100644 --- a/src/schemas/automation.schema.ts +++ b/src/schemas/automation.schema.ts @@ -101,7 +101,7 @@ const automationFieldsSchema = { scheduleCron: z.string().trim().min(1).nullable().optional(), modelId: z.string().trim().min(1).nullable().optional(), reasoningEffort: z.enum(AUTOMATION_REASONING_EFFORTS).nullable().optional(), -} satisfies Record; +} satisfies Record; function addModelValidationIssues( data: { diff --git a/src/schemas/settings.schema.test.ts b/src/schemas/settings.schema.test.ts index d104165f..78de6aa4 100644 --- a/src/schemas/settings.schema.test.ts +++ b/src/schemas/settings.schema.test.ts @@ -4,6 +4,8 @@ import { accessKeySecretKeyProviderConfigFormSchema, apiKeyProviderConfigFormSchema, apiTokenProviderConfigFormSchema, + ollamaProviderConfigFormSchema, + providerConfigFormSchema, } from "./settings.schema"; describe("provider config schemas", () => { @@ -50,4 +52,46 @@ describe("provider config schemas", () => { secretKey: "kling-secret", }); }); + + it("fills defaults for credentials a provider does not use", () => { + expect( + providerConfigFormSchema.parse({ + apiKey: " sk-test ", + baseURL: "", + isEnabled: true, + }), + ).toStrictEqual({ + accessKey: "", + accessKeyId: "", + apiKey: "sk-test", + apiToken: "", + baseURL: "", + clientEmail: "", + isEnabled: true, + location: "", + privateKey: "", + project: "", + region: "", + secretAccessKey: "", + secretKey: "", + }); + }); + + it("defaults the Ollama base URL", () => { + expect(ollamaProviderConfigFormSchema.parse({ isEnabled: true })).toEqual({ + baseURL: "http://localhost:11434/v1", + isEnabled: true, + }); + }); + + it("rejects malformed base URLs", () => { + const result = apiKeyProviderConfigFormSchema.safeParse({ + apiKey: "test-key", + baseURL: "not a url", + isEnabled: true, + }); + + expect(result.success).toBe(false); + expect(result.error?.issues[0]?.message).toBe("Enter a valid URL."); + }); }); diff --git a/src/schemas/workspace-thread.schema.test.ts b/src/schemas/workspace-thread.schema.test.ts new file mode 100644 index 00000000..1b19c7bd --- /dev/null +++ b/src/schemas/workspace-thread.schema.test.ts @@ -0,0 +1,94 @@ +import { describe, expect, it } from "bun:test"; + +import { + threadCreateSchema, + threadUIMessageSchema, + workspaceCreateSchema, +} from "./workspace-thread.schema"; + +describe("threadCreateSchema", () => { + it("fills engine, mode and summary defaults", () => { + expect(threadCreateSchema.parse({ title: " Draft " })).toEqual({ + engine: "sentinel", + mode: "chat", + summary: "", + title: "Draft", + }); + }); + + it("accepts client-generated thread ids in GUID form", () => { + const threadId = crypto.randomUUID(); + + expect(threadCreateSchema.parse({ threadId, title: "t" }).threadId).toBe( + threadId, + ); + // Not an RFC 9562 version/variant, which zod 3's uuid() also accepted. + expect( + threadCreateSchema.safeParse({ + threadId: "123e4567-e89b-02d3-0456-426614174000", + title: "t", + }).success, + ).toBe(true); + expect( + threadCreateSchema.safeParse({ + threadId: "ckz8n3x0h0000qzrmn831i7rn", + title: "t", + }).success, + ).toBe(false); + }); +}); + +describe("workspaceCreateSchema", () => { + it("treats a blank root path as missing", () => { + expect( + workspaceCreateSchema.parse({ name: "Sentinel", rootPath: " " }), + ).toEqual({ description: "", name: "Sentinel" }); + }); + + it("trims and keeps absolute root paths", () => { + expect( + workspaceCreateSchema.parse({ + description: "Desktop app", + name: "Sentinel", + rootPath: " /Users/dev/sentinel ", + }), + ).toEqual({ + description: "Desktop app", + name: "Sentinel", + rootPath: "/Users/dev/sentinel", + }); + }); + + it("rejects relative root paths", () => { + const result = workspaceCreateSchema.safeParse({ + name: "Sentinel", + rootPath: "projects/sentinel", + }); + + expect(result.success).toBe(false); + expect(result.error?.issues.map((issue) => issue.message)).toEqual([ + "Enter an absolute path.", + ]); + }); +}); + +describe("threadUIMessageSchema", () => { + it("round-trips nested JSON parts and metadata", () => { + const message = { + id: "message-1", + metadata: { model: { providerId: "openai" }, tags: ["a", 1, null] }, + parts: [ + { text: "hello", type: "text" }, + { + input: { filter: { status: { $in: ["open"] } } }, + state: "input-available", + toolCallId: "call-1", + type: "tool-mongo_find", + }, + ], + role: "assistant", + }; + + expect(threadUIMessageSchema.parse(message)).toEqual(message); + }); +}); diff --git a/src/schemas/workspace-thread.schema.ts b/src/schemas/workspace-thread.schema.ts index a343e082..03e66799 100644 --- a/src/schemas/workspace-thread.schema.ts +++ b/src/schemas/workspace-thread.schema.ts @@ -24,7 +24,7 @@ const jsonValueSchema: z.ZodType< z.boolean(), z.null(), z.array(jsonValueSchema), - z.record(jsonValueSchema), + z.record(z.string(), jsonValueSchema), ]), ); @@ -104,7 +104,7 @@ export const threadCreateSchema = z.object({ engine: chatEngineSchema.optional().default("sentinel"), mode: z.enum(THREAD_MODES).optional().default("chat"), summary: optionalText(500).optional().default(""), - threadId: z.string().uuid().optional(), + threadId: z.guid().optional(), title: z.string().trim().min(1, "Thread title is required.").max(200), workspaceId: z.string().min(1).optional(), }); diff --git a/src/server/api/routers/providers.ts b/src/server/api/routers/providers.ts index 55bef2c3..db0bfe3e 100644 --- a/src/server/api/routers/providers.ts +++ b/src/server/api/routers/providers.ts @@ -88,7 +88,7 @@ export const providersRouter = createTRPCRouter({ .input( z.object({ provider: aiProviderEnum, - config: z.record(z.unknown()), + config: z.record(z.string(), z.unknown()), }), ) .mutation(async ({ ctx, input }) => { diff --git a/src/server/api/trpc.test.ts b/src/server/api/trpc.test.ts new file mode 100644 index 00000000..f748c9ce --- /dev/null +++ b/src/server/api/trpc.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it, mock } from "bun:test"; +import { TRPCError } from "@trpc/server"; +import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; +import superjson from "superjson"; +import { z } from "zod"; + +mock.module("@/server/db", () => ({ db: {} })); +mock.module("@/server/db/schema", () => ({ users: { id: "user.id" } })); +mock.module("@/server/local-profile", () => ({ + getLocalSession: async () => null, +})); + +const { createTRPCContext, createTRPCRouter, publicProcedure } = + await import("./trpc"); + +const router = createTRPCRouter({ + echo: publicProcedure + .input( + z + .object({ + count: z.number().int(), + name: z.string().trim().min(1, "Name is required."), + }) + .refine((input) => input.count < 10, "Count must stay below 10."), + ) + .query(({ input }) => input), + fail: publicProcedure.query(() => { + throw new TRPCError({ code: "BAD_REQUEST", message: "Nope." }); + }), +}); + +async function callQuery(path: string, input?: unknown) { + const url = new URL(`http://localhost/api/trpc/${path}`); + if (input !== undefined) { + url.searchParams.set("input", JSON.stringify(superjson.serialize(input))); + } + + const response = await fetchRequestHandler({ + createContext: () => createTRPCContext({ headers: new Headers() }), + endpoint: "/api/trpc", + req: new Request(url), + router, + }); + const body = (await response.json()) as { + error?: Parameters[0]; + result?: { data: Parameters[0] }; + }; + + return { + data: body.result ? superjson.deserialize(body.result.data) : undefined, + error: body.error + ? superjson.deserialize<{ + data: { code: string; zodError: unknown }; + message: string; + }>(body.error) + : undefined, + status: response.status, + }; +} + +describe("tRPC error formatter", () => { + it("passes valid input through", async () => { + const result = await callQuery("echo", { count: 2, name: " Ada " }); + + expect(result.status).toBe(200); + expect(result.data).toEqual({ count: 2, name: "Ada" }); + }); + + it("flattens zod input errors into data.zodError", async () => { + const result = await callQuery("echo", { count: 12, name: " " }); + + expect(result.status).toBe(400); + expect(result.error?.data.code).toBe("BAD_REQUEST"); + expect(result.error?.data.zodError).toEqual({ + fieldErrors: { name: ["Name is required."] }, + formErrors: ["Count must stay below 10."], + }); + }); + + it("reports type errors per field", async () => { + const result = await callQuery("echo", { count: "2", name: "Ada" }); + + expect(result.status).toBe(400); + expect(result.error?.data.zodError).toEqual({ + fieldErrors: { count: [expect.any(String)] }, + formErrors: [], + }); + }); + + it("leaves zodError empty for errors without a zod cause", async () => { + const result = await callQuery("fail"); + + expect(result.status).toBe(400); + expect(result.error?.message).toBe("Nope."); + expect(result.error?.data.zodError).toBeNull(); + }); +}); diff --git a/src/server/api/trpc.ts b/src/server/api/trpc.ts index b3b65a78..411b41b8 100644 --- a/src/server/api/trpc.ts +++ b/src/server/api/trpc.ts @@ -9,7 +9,7 @@ import { TRPCError, initTRPC } from "@trpc/server"; import { eq } from "drizzle-orm"; import superjson from "superjson"; -import { ZodError } from "zod"; +import { ZodError, z } from "zod"; import { createLogger } from "@/lib/logger"; import { db } from "@/server/db"; @@ -33,7 +33,7 @@ const t = initTRPC.context().create({ data: { ...shape.data, zodError: - error.cause instanceof ZodError ? error.cause.flatten() : null, + error.cause instanceof ZodError ? z.flattenError(error.cause) : null, }, }; }, From 1e3b025f81d0276fd2c6532e866f3796b7894570 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 10:05:19 +0000 Subject: [PATCH 009/133] build(deps): move to TypeScript 6.0.3 typescript ~6.0.3, not 7: TS 7 has no compiler API yet, which the Next TS plugin and Next's tsconfig handling still need. tsconfig.json for the TS 6 defaults and deprecations: - drop "baseUrl" (deprecated in 6, an error in 7); "paths" are already relative to the tsconfig, and Next, bun and esbuild all resolve them without it - "types": ["node"], since TS 6 no longer loads every @types package by default; everything else Sentinel uses comes in through imports - include .next/dev/types/**/*.ts, where Next 16 dev writes route types - keep the "next" language-service plugin noUncheckedSideEffectImports is on by default in TS 6 and flagged `import "@/styles/globals.css"`. next-env.d.ts declares *.css but is generated and gitignored, so src/types/css.d.ts declares it the same way Next 16 does (`declare module "*.css" {}`); side-effect imports of code modules stay checked. TS 6 also reported an always-nullish `?? null` in resolveOpenCodeTraitValueForThreadMode; the redundant fallback is gone, behaviour is unchanged. Tripwire: "baseUrl" in tsconfig*.json. Gate G0: install, typecheck ok, 188/188 test files pass, format ok, tripwires clean (5 active). Co-Authored-By: Claude Opus 5.5 --- bun.lock | 4 ++-- package.json | 2 +- scripts/verify/tripwires.mjs | 6 ++++++ src/components/chat/chat-composer-helpers.ts | 7 +++---- src/types/css.d.ts | 5 +++++ tsconfig.json | 5 +++-- 6 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 src/types/css.d.ts diff --git a/bun.lock b/bun.lock index 07762c62..c14e7608 100644 --- a/bun.lock +++ b/bun.lock @@ -114,7 +114,7 @@ "postcss": "^8.5.29", "prettier": "^3.9.9", "tailwindcss": "^4.3.3", - "typescript": "^5.8.2", + "typescript": "~6.0.3", "wait-on": "^9.5.1", }, }, @@ -2220,7 +2220,7 @@ "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], diff --git a/package.json b/package.json index 3e3f0427..7b2cf58b 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "postcss": "^8.5.29", "prettier": "^3.9.9", "tailwindcss": "^4.3.3", - "typescript": "^5.8.2", + "typescript": "~6.0.3", "wait-on": "^9.5.1" }, "build": { diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index 77018be3..684b40a0 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -40,6 +40,12 @@ export const TRIPWIRES = [ pattern: /\bZodTypeAny\b/, include: /\.[cm]?[jt]sx?$/, }, + { + id: "P4-tsconfig-baseUrl", + description: "baseUrl is deprecated in TypeScript 6 (paths are relative)", + pattern: /"baseUrl"/, + include: /(^|\/)tsconfig[^/]*\.json$/, + }, ]; const DEFAULT_EXCLUDE = diff --git a/src/components/chat/chat-composer-helpers.ts b/src/components/chat/chat-composer-helpers.ts index ff515571..587cb2a8 100644 --- a/src/components/chat/chat-composer-helpers.ts +++ b/src/components/chat/chat-composer-helpers.ts @@ -120,10 +120,9 @@ export function resolveOpenCodeTraitValueForThreadMode( return null; } - const currentOption = - (currentValue - ? (options.find((option) => option.value === currentValue) ?? null) - : null) ?? null; + const currentOption = currentValue + ? (options.find((option) => option.value === currentValue) ?? null) + : null; const fallbackOption = options.find((option) => option.isDefault) ?? options[0] ?? null; diff --git a/src/types/css.d.ts b/src/types/css.d.ts new file mode 100644 index 00000000..ea891437 --- /dev/null +++ b/src/types/css.d.ts @@ -0,0 +1,5 @@ +// Plain stylesheet imports such as `import "@/styles/globals.css"` are +// side-effect only. TypeScript 6 checks that side-effect imports resolve +// (noUncheckedSideEffectImports), and next-env.d.ts, which declares these, is +// generated by Next and not committed, so typecheck needs its own declaration. +declare module "*.css" {} diff --git a/tsconfig.json b/tsconfig.json index d2db91b1..80a71546 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,9 +23,9 @@ "jsx": "preserve", "plugins": [{ "name": "next" }], "incremental": true, + "types": ["node"], /* Path Aliases */ - "baseUrl": ".", "paths": { "@/*": ["./src/*"] } @@ -36,7 +36,8 @@ "**/*.tsx", "**/*.cjs", "**/*.js", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" ], "exclude": [ "node_modules", From e005637ae7046cc461598766d3c32fb4ee863b31 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 10:45:22 +0000 Subject: [PATCH 010/133] fix(desktop): ship undici in the standalone server The ai 6.0.301 bump brought @ai-sdk/provider-utils 4.0.57. On Node, its default download fetch (generateVideo URL results, prompt asset and transcription downloads) loads undici via module.createRequire()("undici") to pin connections to validated DNS results. Once webpack bundles and minifies that code into .next/server/chunks, nft cannot see the require, so `output: "standalone"` left undici out: a G1 build had no .next/standalone/node_modules/undici, and resolving it from chunk 119 in the packaged layout failed with MODULE_NOT_FOUND. That would reject every default download in the desktop server (ELECTRON_RUN_AS_NODE makes isNodeRuntime() true). bun skips this path, so the tests never saw it. - scripts/desktop/untraced-server-packages.mjs lists such packages (undici) - next.config.js adds them to outputFileTracingIncludes for every route - the bundle audit fails if the packaged server lacks one - a test checks the trace include and that the top-level copy, which the bundled chunks resolve, satisfies every installed dependent's range (the three provider-utils 4.0.57 copies want ^6.28.0; root is 6.29.0) A narrower ai bump would not avoid this: undici arrived in provider-utils 4.0.45 and the record additionalProperties fix in 4.0.47, and AI SDK 7's provider-utils 5 depends on undici ^7.28.0. Verified with a production build (scripts/next-build.mjs): .next/standalone/node_modules/undici now exists and survives prepare-production + prune-server. From a copy outside the repo, the chunk-relative require resolves server/node_modules/undici and builds an Agent. Behaviour note: since provider-utils 4.0.47 these downloads also reject hostnames that resolve to private, loopback or link-local addresses. Literal localhost and private-IP URLs were already rejected in 4.0.19. Sentinel sets no global dispatcher or proxy, so the dedicated Agent bypasses nothing. Gate G0: install, typecheck ok, 189/189 test files pass, format ok, tripwires clean (5 active). Co-Authored-By: Claude Opus 5.5 --- next.config.js | 7 ++ scripts/desktop/audit-bundle.mjs | 15 ++++ scripts/desktop/untraced-server-packages.mjs | 8 ++ .../desktop/untraced-server-packages.test.ts | 81 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 scripts/desktop/untraced-server-packages.mjs create mode 100644 scripts/desktop/untraced-server-packages.test.ts diff --git a/next.config.js b/next.config.js index 2a47eee2..27d44bcc 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,8 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; +import { UNTRACED_SERVER_PACKAGES } from "./scripts/desktop/untraced-server-packages.mjs"; + /** * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful * for Docker builds and CI where the home directory may not be accessible. @@ -18,6 +20,11 @@ const config = { }, output: "standalone", outputFileTracingRoot: projectRoot, + outputFileTracingIncludes: { + "/**": UNTRACED_SERVER_PACKAGES.map( + (packageName) => `./node_modules/${packageName}/**/*`, + ), + }, serverExternalPackages: ["better-sqlite3", "sqlite-vec"], turbopack: { root: projectRoot, diff --git a/scripts/desktop/audit-bundle.mjs b/scripts/desktop/audit-bundle.mjs index ddf4bb14..2da01a0a 100644 --- a/scripts/desktop/audit-bundle.mjs +++ b/scripts/desktop/audit-bundle.mjs @@ -3,6 +3,7 @@ import { execFileSync } from "node:child_process"; import { access, readdir, stat } from "node:fs/promises"; import path from "node:path"; import { findMissingServerRuntimeFiles } from "./audit-bundle-utils.mjs"; +import { UNTRACED_SERVER_PACKAGES } from "./untraced-server-packages.mjs"; const require = createRequire(import.meta.url); const { listPackage } = require("@electron/asar"); @@ -334,6 +335,20 @@ for (const unpackedAppPath of unpackedAppPaths) { `${unpackedAppPath}: packaged server is missing Copilot runtime files:\n${missingCopilotRuntimeFiles.join("\n")}`, ); } + + const missingUntracedRuntimeFiles = findMissingServerRuntimeFiles({ + requiredFiles: UNTRACED_SERVER_PACKAGES.map((packageName) => + path.join(serverPath, "node_modules", packageName, "package.json"), + ), + serverFiles, + serverPath, + }); + + if (missingUntracedRuntimeFiles.length > 0) { + failures.push( + `${unpackedAppPath}: packaged server is missing untraced runtime packages:\n${missingUntracedRuntimeFiles.join("\n")}`, + ); + } } for (const installerPath of installerPaths) { diff --git a/scripts/desktop/untraced-server-packages.mjs b/scripts/desktop/untraced-server-packages.mjs new file mode 100644 index 00000000..2edb7681 --- /dev/null +++ b/scripts/desktop/untraced-server-packages.mjs @@ -0,0 +1,8 @@ +// Packages the Next server loads through a require that file tracing cannot +// follow, so `output: "standalone"` would leave them out of the packaged +// server. next.config.js adds them to outputFileTracingIncludes and the bundle +// audit checks that they shipped. +// undici: @ai-sdk/provider-utils (>= 4.0.45) loads it on Node with +// module.createRequire()("undici") for the DNS-pinned download +// fetch, so server chunks resolve it from the top-level node_modules. +export const UNTRACED_SERVER_PACKAGES = ["undici"]; diff --git a/scripts/desktop/untraced-server-packages.test.ts b/scripts/desktop/untraced-server-packages.test.ts new file mode 100644 index 00000000..f0fd9a30 --- /dev/null +++ b/scripts/desktop/untraced-server-packages.test.ts @@ -0,0 +1,81 @@ +import { describe, expect, it } from "bun:test"; +import { glob, readFile } from "node:fs/promises"; +import path from "node:path"; + +import { UNTRACED_SERVER_PACKAGES } from "./untraced-server-packages.mjs"; + +// The repo declares bun modules by hand (src/types), not Bun's globals. +declare const Bun: { + semver: { satisfies(version: string, range: string): boolean }; +}; + +const projectRoot = process.cwd(); + +type PackageJson = { + dependencies?: Record; + optionalDependencies?: Record; + version: string; +}; + +async function readPackageJson(packageJsonPath: string) { + return JSON.parse(await readFile(packageJsonPath, "utf8")) as PackageJson; +} + +// Top-level and once-nested installs; bun does not nest deeper here. +const INSTALLED_PACKAGE_GLOBS = [ + "node_modules/*/package.json", + "node_modules/@*/*/package.json", + "node_modules/*/node_modules/*/package.json", + "node_modules/*/node_modules/@*/*/package.json", + "node_modules/@*/*/node_modules/*/package.json", + "node_modules/@*/*/node_modules/@*/*/package.json", +]; + +async function findInstalledDependents(packageName: string) { + const dependents: Array<{ path: string; range: string }> = []; + + for await (const file of glob(INSTALLED_PACKAGE_GLOBS, { + cwd: projectRoot, + })) { + const packageJson = await readPackageJson(path.join(projectRoot, file)); + const range = + packageJson.dependencies?.[packageName] ?? + packageJson.optionalDependencies?.[packageName]; + if (range) dependents.push({ path: file, range }); + } + + return dependents; +} + +describe("untraced server packages", () => { + it("adds every package to the standalone trace", async () => { + process.env.SKIP_ENV_VALIDATION = "1"; + const { default: config } = await import("../../next.config.js"); + + expect(config.output).toBe("standalone"); + expect(config.outputFileTracingIncludes?.["/**"]).toEqual( + UNTRACED_SERVER_PACKAGES.map( + (packageName) => `./node_modules/${packageName}/**/*`, + ), + ); + }); + + // Bundled server chunks resolve these packages from the top-level + // node_modules, not from next to the package that requires them, so the + // top-level copy has to satisfy every installed dependent. + it("ships a top-level copy that satisfies every dependent", async () => { + for (const packageName of UNTRACED_SERVER_PACKAGES) { + const { version } = await readPackageJson( + path.join(projectRoot, "node_modules", packageName, "package.json"), + ); + const dependents = await findInstalledDependents(packageName); + + expect(dependents.length).toBeGreaterThan(0); + expect( + dependents.filter( + (dependent) => !Bun.semver.satisfies(version, dependent.range), + ), + ).toEqual([]); + } + }); +}); From 5abf16bdbec3857e455657bebc38a4de1d1024a4 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 10:45:51 +0000 Subject: [PATCH 011/133] fix(zod): keep zod 3 tool wire shape and optional unknown keys Two zod 4 behaviour changes that the P3 commit let through: - computer_action: zod 4 emits JSON Schema oneOf for discriminated unions (they are always exclusive), where zod 3 sent anyOf. The Google provider forwards oneOf unchanged, but Gemini's function-declaration Schema (an OpenAPI 3.0 subset; @google/genai's Schema type) has anyOf and no oneOf. Gemini requests that activate the computer tools would likely be rejected. The tool input now uses z.union over the same action options. Parsed data is identical for valid input, and the discriminated union stays in automation-types for everything else. The tool schema test now flags any oneOf/allOf, and the snapshot changes only that keyword. Trade-off: a malformed action gets the union's per-branch issues instead of the single discriminated-union issue. - codexWriteConfig: zod 4 rejects an absent key for z.unknown() at runtime ("expected nonoptional"); zod 3 accepted it as undefined. value is now z.unknown().optional(), which restores both the runtime check and zod 3's inferred `value?: unknown`. An audit of z.unknown, z.any, z.undefined, z.void, z.custom and undefined unions found no other production object key. The test mock now keeps input schemas so the router test can check this. The one-argument z.record tripwire comment now says it matches single lines with at most two nested parenthesis levels and that typecheck is the main guard: a multi-line call fails with TS2554, checkJs included. Gate G0: install, typecheck ok, 189/189 test files pass, format ok, tripwires clean (5 active). Co-Authored-By: Claude Opus 5.5 --- scripts/verify/tripwires.mjs | 5 +++- .../tool-json-schema.test.ts.snap | 2 +- src/lib/ai/chat/tools/computer.ts | 4 ++- .../ai/chat/tools/tool-json-schema.test.ts | 8 ++++++ src/server/api/routers/engines.test.ts | 28 +++++++++++++++++-- src/server/api/routers/engines.ts | 3 +- 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index 684b40a0..c2004355 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -30,7 +30,10 @@ export const TRIPWIRES = [ { id: "P3-zod-single-arg-record", description: "zod 4 z.record() needs an explicit key schema", - // One argument: no top-level comma before the closing parenthesis. + // One argument: no top-level comma before the closing parenthesis. Lines + // are matched one at a time with up to two nested parenthesis levels, so + // multi-line or deeper calls slip through; typecheck is the main guard + // (zod 4 types record() with a required value schema, checkJs included). pattern: /(?:\bz|^\s*)\.record\((?:[^(),]|\((?:[^()]|\([^()]*\))*\))*\)/, include: /\.[cm]?[jt]sx?$/, }, diff --git a/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap b/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap index 72a69c8e..1cfb6d95 100644 --- a/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap +++ b/src/lib/ai/chat/tools/__snapshots__/tool-json-schema.test.ts.snap @@ -268,7 +268,7 @@ exports[`tool input JSON schemas converts every built-in chat tool to a valid ob "actions": { "description": "Ordered desktop actions to perform in one conservative batch.", "items": { - "oneOf": [ + "anyOf": [ { "additionalProperties": false, "properties": { diff --git a/src/lib/ai/chat/tools/computer.ts b/src/lib/ai/chat/tools/computer.ts index b24b1c30..9c94c62f 100644 --- a/src/lib/ai/chat/tools/computer.ts +++ b/src/lib/ai/chat/tools/computer.ts @@ -35,8 +35,10 @@ export const computerScreenshotInputSchema = z.object({ .describe("Optional display id from computer_status. Defaults to primary."), }); export const computerActionInputSchema = z.object({ + // A plain union of the same actions: zod 4 turns discriminated unions into + // JSON Schema oneOf, which Gemini function declarations reject (anyOf only). actions: z - .array(computerAutomationActionSchema) + .array(z.union(computerAutomationActionSchema.options)) .min(1) .max(25) .describe("Ordered desktop actions to perform in one conservative batch."), diff --git a/src/lib/ai/chat/tools/tool-json-schema.test.ts b/src/lib/ai/chat/tools/tool-json-schema.test.ts index 71e6588c..fb69603e 100644 --- a/src/lib/ai/chat/tools/tool-json-schema.test.ts +++ b/src/lib/ai/chat/tools/tool-json-schema.test.ts @@ -107,6 +107,14 @@ function collectSchemaProblems( } } + // The Google provider forwards oneOf/allOf unchanged, but Gemini's function + // declaration Schema (an OpenAPI 3.0 subset) only knows anyOf. + for (const keyword of ["oneOf", "allOf"] as const) { + if (schema[keyword] !== undefined) { + problems.push(`${path}: ${keyword} is rejected by Gemini, use anyOf`); + } + } + const properties = schema.properties as JsonSchemaNode | undefined; if (schema.type === "object") { diff --git a/src/server/api/routers/engines.test.ts b/src/server/api/routers/engines.test.ts index 8a58679c..81c224e0 100644 --- a/src/server/api/routers/engines.test.ts +++ b/src/server/api/routers/engines.test.ts @@ -164,20 +164,23 @@ const getOwnedThreadOrThrow = mock(async () => ({ mock.module("@/server/api/trpc", () => ({ createTRPCRouter: (routes: Record) => routes, protectedProcedure: { - input: () => ({ - mutation: (handler: any) => handler, - query: (handler: any) => handler, + input: (inputSchema: any) => ({ + mutation: (handler: any) => Object.assign(handler, { inputSchema }), + query: (handler: any) => Object.assign(handler, { inputSchema }), }), mutation: (handler: any) => handler, query: (handler: any) => handler, }, })); +const writeConfigValue = mock(async () => ({ config: {} })); + mock.module("@/lib/ai/chat/engines/codex-app-server", () => ({ getCodexAppServerManager: () => ({ getStatus, reloadRuntime, startReview, + writeConfigValue, }), resetCodexEngineStatusCache, })); @@ -496,6 +499,25 @@ describe("enginesRouter.codexReview", () => { }); }); +describe("enginesRouter.codexWriteConfig", () => { + it("accepts a config write without a value, as under zod 3", async () => { + const { inputSchema } = enginesRouter.codexWriteConfig; + + expect(inputSchema.safeParse({ key: "model" }).success).toBe(true); + expect(inputSchema.safeParse({ key: "model", value: null }).success).toBe( + true, + ); + expect(inputSchema.safeParse({ value: "gpt-5" }).success).toBe(false); + + await enginesRouter.codexWriteConfig({ + ctx: { db: {}, session: { user: { id: "user-1" } } }, + input: inputSchema.parse({ key: "model" }), + }); + + expect(writeConfigValue).toHaveBeenCalledWith("model", undefined); + }); +}); + describe("enginesRouter.list", () => { it("includes Claude with normalized availability state", async () => { const result = await enginesRouter.list({}); diff --git a/src/server/api/routers/engines.ts b/src/server/api/routers/engines.ts index 2d516137..3d372114 100644 --- a/src/server/api/routers/engines.ts +++ b/src/server/api/routers/engines.ts @@ -747,7 +747,8 @@ export const enginesRouter = createTRPCRouter({ }), codexWriteConfig: protectedProcedure - .input(z.object({ key: z.string(), value: z.unknown() })) + // zod 4 requires the key for z.unknown(); a missing value stays valid. + .input(z.object({ key: z.string(), value: z.unknown().optional() })) .mutation(async ({ input }) => { const codex = getCodexAppServerManager(); return codex.writeConfigValue(input.key, input.value); From 3f623d6e1a730419d5103aaee32b3859de52cd2b Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 11:21:41 +0000 Subject: [PATCH 012/133] build(deps): migrate to AI SDK 7 Moves ai 6.0.301 -> 7.0.130 and every @ai-sdk package to its v7 major: provider 4.0.24, react 4.0.133 (still not imported), mcp 2.0.69, openai 4.0.86, anthropic 4.0.74, google 4.0.90, google-vertex 5.0.104, amazon-bedrock 5.0.108, azure 4.0.94, xai 5.0.17, groq 4.0.57, cohere 4.0.57, mistral 4.0.59, deepseek 3.0.61, moonshotai 3.0.65, black-forest-labs 2.0.57, bytedance 2.0.59, fal 3.0.57, klingai 4.0.58, replicate 3.0.57, plus @openrouter/ai-sdk-provider 3.1.0. Adds @ai-sdk/provider-utils 5.0.56 (the version ai pins) for the type-only ProviderOptions import: ai does not export it, and SharedV3ProviderOptions is tied to provider spec V3. undici moves 6.29 -> 7.30 for provider-utils 5; it is still loaded through createRequire, so the standalone-server include from the zod/TS lane still applies. Codemods (@ai-sdk/codemod 4.0.3 v7, each run through jscodeshift so the result was visible): kept isStepCount, system -> instructions (title, router, tool repair), onStepEnd/onEnd, transcribe and createGoogle. Reverted the false positives: theme `system` keys renamed to `instructions` (appearance page, workspace sidebar), Sentinel's own metadata.usage.reasoningTokens and the Codex protocol usage rewritten to outputTokenDetails, a doubled outputTokenDetails in runtime/reasoning.ts, and `context: experimental_context` in prepareStep. Silent v7 changes handled: - Thread agent: runtimeContext replaces experimental_context in prepareCall/prepareStep, and repairToolCall replaces experimental_repairToolCall. prepareStep now returns the full instructions from every branch: v7 carries returned instructions into later steps, so a validation or task directive would otherwise stick to every later step. Without a reroute the default branch reproduces prepareCall's instructions exactly; after a reroute it describes the rerouted tool set instead of the stale initial prompt. - allowSystemInMessages: true on the agent. Context compaction feeds its summary back as a synthetic role "system" message built server-side, which v7 rejects by default. - createAgentUIStream is replaced by createThreadAgentUIStream (agent/ui-stream.ts): same flow, but the transcript is only validated structurally, as in ai 6.0.116. The agent builds its tools in prepareCall, so agent.tools is empty there. Since ai 6.0.301 the stock helper throws "No tool schema found for tool part edit" when the transcript holds an approval-responded tool part (approving a tool call failed), and v7 also replaces every earlier static tool output with "Tool output omitted because the tool is no longer available." - createUIMessageStream gets an explicit onError; v7 redacts errors to "An error occurred." by default. The agent stream already passed one. - Reasoning tokens come from totalUsage.outputTokenDetails.reasoningTokens (the top-level field is gone). - generateObject -> generateText with Output.object (memory autosave, commit messages). - validateUIMessages drops Sentinel's approval.decision and approval.response (6.x did too); messages/ui.ts copies them back after validation. Dynamic tool titles now survive v7's schema (6.0.301 dropped them). - Ollama uses the OpenAI Chat Completions model (.chat) through createProviderLanguageModel; languageModel() on an OpenAI provider is the Responses API. - The OpenRouter providerOptions key is now "openrouter" (3.x ignores "openai"). No OpenRouter catalog model has a reasoning config yet, so nothing was sent under either key; P8 must use OpenRouter's `reasoning: { effort }` payload when it adds one. - MCP 2: the HTTP transport sets redirect: "follow" (2.x default "error"), and both transports set protocolVersionDiscovery: false (2.x probes server/discover before initialize), keeping the 1.x handshake for user-configured servers. The OAuth provider reports its client info as dynamically registered, so invalid_client still leads to re-registration as in 1.x. - createVertex -> createGoogleVertex. Decisions and holds: - OpenAI Responses function tools keep @ai-sdk/openai 4's explicit strict: false. 3.x omitted strict, which let the Responses API apply its own strict normalisation (optional tool parameters arrived as empty strings, vercel/ai#11869). - OpenAI reasoningSummary default ("detailed" once an effort is set): nothing to change, Sentinel already sends reasoningSummary "detailed" with every effort. - Tool-level needsApproval stays (still honoured, now under test); the move to toolApproval is P14. - xAI 5 is Responses-only and createXai().languageModel() maps to it. The catalog's grok-3, grok-4 and grok-4-fast ids were retired by xAI on 2026-05-15 and redirect to grok-4.3; the catalog refresh is P8. - streamText now runs tools after the model call finishes instead of mid-stream; no test depended on the old timing. - Not marked breaking: release-please has bump-minor-pre-major false, so `!` would cut 1.0.0. Tests: agent/ui-stream.test.ts drives a real ToolLoopAgent with MockLanguageModelV4: an approved tool call runs and earlier tool outputs reach the model, needsApproval still yields an approval request, provider error text is not redacted, the compaction system message is accepted, and usage/reasoning tokens map into thread metadata. The agent test checks the per-step instruction reset and allowSystemInMessages, messages/ui.test.ts the approval fields and titles, the factory test Ollama chat and OpenAI/xAI Responses, the MCP test the redirect and discovery options, and the orchestrator test both onError hooks. Mocks use the v7 names (isStepCount, onStepEnd, onEnd, embeddingModel). The tool JSON-schema snapshot is unchanged. Tripwires (P7): stepCountIs, experimental_context, experimental_repairToolCall, SharedV3ProviderOptions, generateObject, experimental_transcribe, onStepFinish, createGoogleGenerativeAI. Gate G0: frozen install ok, typecheck ok, 191/191 test files pass, format ok, tripwires clean (13 active). Co-Authored-By: Claude Opus 5.5 --- bun.lock | 187 ++++-------- package.json | 45 +-- scripts/verify/tripwires.mjs | 53 ++++ src/lib/ai/chat/agent/index.test.ts | 71 ++++- src/lib/ai/chat/agent/index.ts | 89 +++--- src/lib/ai/chat/agent/ui-stream.test.ts | 279 ++++++++++++++++++ src/lib/ai/chat/agent/ui-stream.ts | 62 ++++ .../runtime/context-compaction-refresh.ts | 4 +- src/lib/ai/chat/runtime/context-compaction.ts | 6 +- src/lib/ai/chat/runtime/reasoning.ts | 4 +- .../ai/chat/runtime/thread-chat/index.test.ts | 29 +- .../chat/runtime/thread-chat/orchestrator.ts | 10 +- src/lib/ai/chat/title/generate.ts | 2 +- src/lib/ai/chat/tools/router/index.ts | 8 +- src/lib/ai/chat/types.ts | 4 +- src/lib/ai/messages/ui.test.ts | 68 +++++ src/lib/ai/messages/ui.ts | 104 ++++++- src/lib/ai/providers/factory.test.ts | 32 +- src/lib/ai/providers/factory.ts | 35 ++- src/lib/ai/providers/models.ts | 10 +- src/lib/ai/providers/resolver.ts | 5 +- src/lib/ai/transcription/service.ts | 2 +- src/lib/git/commit-message.ts | 11 +- src/lib/mcp/oauth.ts | 6 + src/lib/mcp/runtime.test.ts | 8 + src/lib/mcp/tools.ts | 7 + src/lib/memory/profiles.ts | 4 +- src/lib/memory/service.ts | 15 +- 28 files changed, 888 insertions(+), 272 deletions(-) create mode 100644 src/lib/ai/chat/agent/ui-stream.test.ts create mode 100644 src/lib/ai/chat/agent/ui-stream.ts create mode 100644 src/lib/ai/messages/ui.test.ts diff --git a/bun.lock b/bun.lock index c14e7608..d117ba20 100644 --- a/bun.lock +++ b/bun.lock @@ -5,26 +5,27 @@ "": { "name": "sentinel", "dependencies": { - "@ai-sdk/amazon-bedrock": "^4.0.83", - "@ai-sdk/anthropic": "^3.0.58", - "@ai-sdk/azure": "^3.0.49", - "@ai-sdk/black-forest-labs": "^1.0.28", - "@ai-sdk/bytedance": "^1.0.10", - "@ai-sdk/cohere": "^3.0.27", - "@ai-sdk/deepseek": "^2.0.29", - "@ai-sdk/fal": "^2.0.29", - "@ai-sdk/google": "^3.0.43", - "@ai-sdk/google-vertex": "^4.0.80", - "@ai-sdk/groq": "^3.0.31", - "@ai-sdk/klingai": "^3.0.12", - "@ai-sdk/mcp": "^1.0.25", - "@ai-sdk/mistral": "^3.0.27", - "@ai-sdk/moonshotai": "^2.0.12", - "@ai-sdk/openai": "^3.0.41", - "@ai-sdk/provider": "^3.0.8", - "@ai-sdk/react": "^3.0.304", - "@ai-sdk/replicate": "^2.0.28", - "@ai-sdk/xai": "^3.0.74", + "@ai-sdk/amazon-bedrock": "^5.0.108", + "@ai-sdk/anthropic": "^4.0.74", + "@ai-sdk/azure": "^4.0.94", + "@ai-sdk/black-forest-labs": "^2.0.57", + "@ai-sdk/bytedance": "^2.0.59", + "@ai-sdk/cohere": "^4.0.57", + "@ai-sdk/deepseek": "^3.0.61", + "@ai-sdk/fal": "^3.0.57", + "@ai-sdk/google": "^4.0.90", + "@ai-sdk/google-vertex": "^5.0.104", + "@ai-sdk/groq": "^4.0.57", + "@ai-sdk/klingai": "^4.0.58", + "@ai-sdk/mcp": "^2.0.69", + "@ai-sdk/mistral": "^4.0.59", + "@ai-sdk/moonshotai": "^3.0.65", + "@ai-sdk/openai": "^4.0.86", + "@ai-sdk/provider": "^4.0.24", + "@ai-sdk/provider-utils": "^5.0.56", + "@ai-sdk/react": "^4.0.133", + "@ai-sdk/replicate": "^3.0.57", + "@ai-sdk/xai": "^5.0.17", "@anthropic-ai/claude-agent-sdk": "^0.2.84", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", @@ -41,7 +42,7 @@ "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", - "@openrouter/ai-sdk-provider": "^2.3.3", + "@openrouter/ai-sdk-provider": "^3.1.0", "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", "@slack/web-api": "^8.2.0", @@ -58,7 +59,7 @@ "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", - "ai": "^6.0.301", + "ai": "^7.0.130", "better-sqlite3": "12.6.2", "border-beam": "^1.4.1", "cmdk": "^1.1.1", @@ -122,62 +123,56 @@ "packages": { "7zip-bin": ["7zip-bin@5.2.0", "", {}, "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A=="], - "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@4.0.83", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-DoRpvIWGU/r83UeJAM9L93Lca8Kf/yP5fIhfEOltMPGP/PXrGe0BZaz0maLSRn8djJ6+HzWIsgu5ZI6bZqXEXg=="], + "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@5.0.108", "", { "dependencies": { "@ai-sdk/anthropic": "4.0.74", "@ai-sdk/openai": "4.0.86", "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56", "@smithy/eventstream-codec": "^4.3.3", "@smithy/util-utf8": "^4.3.3", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-zYkEENIOD77gFmwO5an2bJXePKdoF+r7zgccScaehSz+ndtNPkGNv74d9o9hkef8S5IcszZ5yaCbj2E5zJTKFw=="], - "@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.58", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-/53SACgmVukO4bkms4dpxpRlYhW8Ct6QZRe6sj1Pi5H00hYhxIrqfiLbZBGxkdRvjsBQeP/4TVGsXgH5rQeb8Q=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@4.0.74", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-q/A7hCZSsCknmC1TtyNkBgNlT12hbKOWrgyb1UdPpIAO9sZcFS0nilZFIsW/ugVKG+hd6bU1r9NL1Ru33FDwZw=="], - "@ai-sdk/azure": ["@ai-sdk/azure@3.0.49", "", { "dependencies": { "@ai-sdk/openai": "3.0.48", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-wskgAL+OmrHG7by/iWIxEBQCEdc1mDudha/UZav46i0auzdFfsDB/k2rXZaC4/3nWSgMZkxr0W3ncyouEGX/eg=="], + "@ai-sdk/azure": ["@ai-sdk/azure@4.0.94", "", { "dependencies": { "@ai-sdk/deepseek": "3.0.61", "@ai-sdk/openai": "4.0.86", "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-/A9HcPvx/oBtrY/AwgDo7jFqqbMp9uqYUNErGWBW7YkuZ+7zRy7RByrqa4RBbyUGvPy8r3kQdlyLerAxdwwJ6w=="], - "@ai-sdk/black-forest-labs": ["@ai-sdk/black-forest-labs@1.0.28", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-gDLQIynlp4TWmv5IqfQ+DFOSQUmWf7IZm84VSNVuVWYY4qZjeNuufDe3EEvPBNaPBdRVz8XeT242j9bulqxBBg=="], + "@ai-sdk/black-forest-labs": ["@ai-sdk/black-forest-labs@2.0.57", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Gm6k2eHXp4LaLqywTHeey32rrzGf1jtNaKxC/Ldmq5keu98t2dVHBnEtvheQNTJ8QV9WPW0/ojnmcPkMBKNE8A=="], - "@ai-sdk/bytedance": ["@ai-sdk/bytedance@1.0.10", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-JZukJoXrqFtExYFJBDV0NhoSvlfVTl78LyPk5/K6LtmhpoloTuHsg7NlhijSyzfnxhtFOAPklJudgqDHjp2xTQ=="], + "@ai-sdk/bytedance": ["@ai-sdk/bytedance@2.0.59", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-GJlJCtVfQeXywgRfyCDklHtLLs3DPWbfjTC3pWOV5LkPDCjGHOCzNgFAvMx//B/Ke36Cou4h3Ux0NbO3j5wHNw=="], - "@ai-sdk/cohere": ["@ai-sdk/cohere@3.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-OqcCq2PiFY1dbK/0Ck45KuvE8jfdxRuuAE9Y5w46dAk6U+9vPOeg1CDcmR+ncqmrYrhRl3nmyDttyDahyjCzAw=="], + "@ai-sdk/cohere": ["@ai-sdk/cohere@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z69YVdHtTg0bKlCOB9VzxEce1XzC/wY3ATsE7oQMeTmXBjvjAvwpCMh/iz06lFo2qZtEgIJPTokitLxVWBDuRg=="], - "@ai-sdk/deepseek": ["@ai-sdk/deepseek@2.0.29", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-cn4+xV0menm/4JKEDElnVGiUilHvi6AD4ZK/sY7DXP/Wb7Yb3Vr86NyYM6mGBE/Shk3mWHoHbzggVnF5x0uMEA=="], + "@ai-sdk/deepseek": ["@ai-sdk/deepseek@3.0.61", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-D9fj/eMQiWjMjmNkNifvhN7ohJ98kXmlTuqtNzPNaHGo0aqZ4jmxEfAT0DQNLxEkNcljtr0+QP9LmEjUwikIKQ=="], - "@ai-sdk/fal": ["@ai-sdk/fal@2.0.29", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-nDq05ik9EHEzbJBjagIhMU1hWMJnGEToZ3yduKmcg0acDU23t6eHpV56Gjv49F73dK1a26aZADS+clVjLpMvDw=="], + "@ai-sdk/fal": ["@ai-sdk/fal@3.0.57", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jKNunLLExJXhSN9i0PW/I5ctLd1/saDsJxhGVm7oqFwzmIztKBNIPcMRKN+QeYbXDUjTV9xEXdt7vh1B3AslVw=="], - "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.210", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@ai-sdk/provider-utils": "4.0.57", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XUC2HGvDLhpfHKT7yXirZELHWIHzPJLtE3CE3FO6fjcQHcKR5nrsHxOp00THk1SivDo3IZB1yS6Un4+kAQ8eJg=="], + "@ai-sdk/gateway": ["@ai-sdk/gateway@4.0.106", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NprSdFzyVnbEp2SDWtIgsCFIUHFCehOD9S6FQkF/dLrCmnke8w4SOK3KcmUUiEbwtVzlUF8prkaELp+ohcQaQw=="], - "@ai-sdk/google": ["@ai-sdk/google@3.0.43", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NGCgP5g8HBxrNdxvF8Dhww+UKfqAkZAmyYBvbu9YLoBkzAmGKDBGhVptN/oXPB5Vm0jggMdoLycZ8JReQM8Zqg=="], + "@ai-sdk/google": ["@ai-sdk/google@4.0.90", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XQNKWT6CwcgARdqTUZn0j89y0gvDMR0k2j2qhOg7ffoL+6MNViQ9t3ALoleAAKo10yMLFE7Ato0Fk+RD14i2kg=="], - "@ai-sdk/google-vertex": ["@ai-sdk/google-vertex@4.0.80", "", { "dependencies": { "@ai-sdk/anthropic": "3.0.58", "@ai-sdk/google": "3.0.43", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "google-auth-library": "^10.5.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CZbiI3AEZQjVYUI2duLFH3ONYkUbsoi0AiTEYNaNKC+ZVnteXwmzJB0W7miaDViV66pWh2VpjNgIJnYXCtNgfw=="], + "@ai-sdk/google-vertex": ["@ai-sdk/google-vertex@5.0.104", "", { "dependencies": { "@ai-sdk/anthropic": "4.0.74", "@ai-sdk/google": "4.0.90", "@ai-sdk/openai-compatible": "3.0.65", "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56", "google-auth-library": "^10.6.2" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Y9RQldM9+/YmQvaYEhmKQ8x5JZ1sqG5YwMHL/d20Ybvb9TQ6k8KmWz6PGvu/Z/M7LgpEqkqXfWY17wxFgY+8pQ=="], - "@ai-sdk/groq": ["@ai-sdk/groq@3.0.31", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XbbugpnFmXGu2TlXiq8KUJskP6/VVbuFcnFIGDzDIB/Chg6XHsNnqrTF80Zxkh0Pd3+NvbM+2Uqrtsndk6bDAg=="], + "@ai-sdk/groq": ["@ai-sdk/groq@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ilsyKha2I3IRwH0VSxlk6GLymHaa7R9wvxq+lz9AfNR713Sy5pVCUHQxbqP+wv7weITV6XcdY3gjdPvYLhk16g=="], - "@ai-sdk/klingai": ["@ai-sdk/klingai@3.0.12", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-D257haD+7Kjcit3dUhAWfMTja7jxtFdndIXHONgQ6vJuZl6o2UXOvhFAdcl4UOtmMro+Pso6reJYTUOcG7JSrg=="], + "@ai-sdk/klingai": ["@ai-sdk/klingai@4.0.58", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-H+ZsO7s7yakPFGcdbyfZLY8eu/QImWL722YkUmwICBnHObKWD7zmGydIsUaYWwf+uglWBPv4AyDmuBkRpI7umA=="], - "@ai-sdk/mcp": ["@ai-sdk/mcp@1.0.25", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "pkce-challenge": "^5.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-vMlXUPGHGDE2vzLcPR8sw7Dhz2OBjtPU5lB+lIuC1hNQo4REuUC08P0e96/hzBKf4oQYJ8Zo6uP8AG2qThyFbg=="], + "@ai-sdk/mcp": ["@ai-sdk/mcp@2.0.69", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56", "cross-spawn": "^7.0.6", "pkce-challenge": "^5.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-DRgUmuESCM8KOcVzlFFVFv9GLu1kCqhdcQ2C1zz2vD0VQ/KKyek37geGPvFsV5tUJfywklh99zIKp4V1V3bhPg=="], - "@ai-sdk/mistral": ["@ai-sdk/mistral@3.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZXe7nZQgliDdjz5ufH5RKpHWxbN72AzmzzKGbF/z+0K9GN5tUCnftrQRvTRFHA5jAzTapcm2BEevmGLVbMkW+A=="], + "@ai-sdk/mistral": ["@ai-sdk/mistral@4.0.59", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-8xybraREo2EllEgkabRoWRP2mf2ZYdI5QyEu9ND5JC8G//7EaywUfPzmPdShiQBMgsztBsb0A6rFE54Bsx9Q8A=="], - "@ai-sdk/moonshotai": ["@ai-sdk/moonshotai@2.0.12", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.37", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-dW5wxbqMCaNrUb52GD7xuPcW4+Xnz+Eq7u3nn9vNdfhpclAqOcgzJ5Arn+HmY3SGcvNft6srOzsNBdVETyF6cg=="], + "@ai-sdk/moonshotai": ["@ai-sdk/moonshotai@3.0.65", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2hu/+1yFvFT+c66YiZaMPYh3QgoHBKmNT7+d7yvnV5e54gTG57E0ph174tNrW83cL+jGsPpDHwlOAByCqki/tQ=="], - "@ai-sdk/openai": ["@ai-sdk/openai@3.0.41", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-IZ42A+FO+vuEQCVNqlnAPYQnnUpUfdJIwn1BEDOBywiEHa23fw7PahxVtlX9zm3/zMvTW4JKPzWyvAgDu+SQ2A=="], + "@ai-sdk/openai": ["@ai-sdk/openai@4.0.86", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-sbUHayMvjAYV6ELydYXFTr5UBX5qyYmRELqZR3tV0dieUhgUYd8dED9bwEgqZJNJU6V8GGLOlaEpL1ltbNXA/g=="], - "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.37", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-+POSFVcgiu47BK64dhsI6OpcDC0/VAE2ZSaXdXGNNhpC/ava++uSRJYks0k2bpfY0wwCTgpAWZsXn/dG2Yppiw=="], + "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@3.0.65", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TBfQk1hf9hOioOwdeDvuXdbmFDp+uLvYf5lfu/gCKVFy6rzjpEqTekEln2ebYonrnq2lIglsuj9S9IovaGhDZA=="], - "@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="], + "@ai-sdk/provider": ["@ai-sdk/provider@4.0.24", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-iztFqJTdxNN0ZzqZAAnVPMhRMaL1bfQFa3GIPAffWQ0+dP2FXIkyMD8kHeEI7EpB/C6TR45cqOkrS7YZZ1sATA=="], - "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@5.0.56", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@standard-schema/spec": "^1.1.0", "@workflow/serde": "4.1.0", "eventsource-parser": "^3.0.8", "undici": "^7.29.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-F7/U1YpVXEfSxRHbxScm0PVdr9lN6GaUWHnt8ws2UjuGeuxWHqCkV25dGpHAkpDHkuIXoC+aak/OqSylKSJmHw=="], - "@ai-sdk/react": ["@ai-sdk/react@3.0.304", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.57", "ai": "6.0.301", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-WDDMEhfzlSJlZ1W0xFn0EXiZbD1EnYwOdAEDg7xAR3rjbVUp372U0phULIARtICt1IvkWK7gLMSyzJyveKvJwA=="], + "@ai-sdk/react": ["@ai-sdk/react@4.0.133", "", { "dependencies": { "@ai-sdk/mcp": "2.0.69", "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56", "ai": "7.0.130", "swr": "^2.4.1", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-Ah/cW6HOTmKFy0zU5VYfuogOZMVNNqu7FbxjcesKNY03tZZPY/8O/ZQKfrCSUd+ZT6DjR3z07ck6TXLpOdwpBA=="], - "@ai-sdk/replicate": ["@ai-sdk/replicate@2.0.28", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TJM49IfVh+YFWIl7aydttcYGYBxFPVz8wi4cNspvLTcNmUO7NhEF56fGIB8P6kqz/5vXXtJ74bOOM00PeuClNw=="], + "@ai-sdk/replicate": ["@ai-sdk/replicate@3.0.57", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Fl41/VFrfXHsr8i+YLT9pTA5AV8jGlfkQAiE+jJytpGKjaCUUdqOYvXl6crNNj3z/jDo2diEpMyS1AUO2NtLCg=="], - "@ai-sdk/xai": ["@ai-sdk/xai@3.0.74", "", { "dependencies": { "@ai-sdk/openai-compatible": "2.0.37", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-HDDLsT+QrzE3c2QZLRV/HKAwMtXDb0PMDdk1PYUXLJ3r9Qv76zGKGyvJLX7Pu6c8TOHD1mwLrOVYrsTpC/eTMw=="], + "@ai-sdk/xai": ["@ai-sdk/xai@5.0.17", "", { "dependencies": { "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MZsKWQfz5mGWHuif5tCRDLuTuUMhdBGf6PzH4h0dDYCMgRPXp0p3hqcCQ5jo+eMpNHc0b4tVOaARxJ4tfA6oFQ=="], "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], "@anthropic-ai/claude-agent-sdk": ["@anthropic-ai/claude-agent-sdk@0.2.84", "", { "optionalDependencies": { "@img/sharp-darwin-arm64": "^0.34.2", "@img/sharp-darwin-x64": "^0.34.2", "@img/sharp-linux-arm": "^0.34.2", "@img/sharp-linux-arm64": "^0.34.2", "@img/sharp-linux-x64": "^0.34.2", "@img/sharp-linuxmusl-arm64": "^0.34.2", "@img/sharp-linuxmusl-x64": "^0.34.2", "@img/sharp-win32-arm64": "^0.34.2", "@img/sharp-win32-x64": "^0.34.2" }, "peerDependencies": { "zod": "^4.0.0" } }, "sha512-rvp3kZJM4IgDBE1zwj30H3N0bI3pYRF28tDJoyAVuWTLiWls7diNVCyFz7GeXZEAYYD87lCBE3vnQplLLluNHg=="], - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], - - "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - - "@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], - "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], @@ -526,9 +521,7 @@ "@opencode-ai/sdk": ["@opencode-ai/sdk@1.14.19", "", { "dependencies": { "cross-spawn": "7.0.6" } }, "sha512-9sTGsi8/HlBBeaWfsUjdJ2yi/SqpRvqSld0IFXc3ldaPb1w1uIPvgCGzhlHYQtqatXxSaX5lTN7zpudMaE21aw=="], - "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@2.3.3", "", { "peerDependencies": { "ai": "^6.0.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-4fVteGkVedc7fGoA9+qJs4tpYwALezMq14m2Sjub3KmyRlksCbK+WJf67NPdGem8+NZrV2tAN42A1NU3+SiV3w=="], - - "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@3.1.0", "", { "peerDependencies": { "ai": "^7.0.0", "zod": "^3.25.76 || ^4.1.8" } }, "sha512-BQy1TA9fKrh47s9ivsO6FY5QimN7GUF0i8Qon3pkxQclEgShso0dClpcWn8OIyPLEZZPFaFKgI8TW4S/O0p0Dw=="], "@paralleldrive/cuid2": ["@paralleldrive/cuid2@3.3.0", "", { "dependencies": { "@noble/hashes": "^2.0.1", "bignumber.js": "^9.3.1", "error-causes": "^3.0.2" }, "bin": { "cuid2": "bin/cuid2.js" } }, "sha512-OqiFvSOF0dBSesELYY2CAMa4YINvlLpvKOz/rv6NeZEqiyttlHgv98Juwv4Ch+GrEV7IZ8jfI2VcEoYUjXXCjw=="], @@ -836,17 +829,13 @@ "@slack/web-api": ["@slack/web-api@8.2.0", "", { "dependencies": { "@slack/logger": "^5.0.0", "@slack/types": "^3.2.0", "@types/node": ">=20", "@types/retry": "0.12.5", "eventemitter3": "^5.0.1", "p-queue": "^6.6.2", "p-retry": "^4.6.2", "retry": "^0.13.1" } }, "sha512-bIW8/8BLD/HLuHLIA2LfA7AhSokzui4swCbMJuwoRJxn/kzHVla6YEKLvN1nCFHK/DfX7g+4Wj3ess/ZSh/tWQ=="], - "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="], - - "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + "@smithy/core": ["@smithy/core@3.35.1", "", { "dependencies": { "@smithy/types": "^4.19.0", "tslib": "^2.6.2" } }, "sha512-i4YPS4B6ts7bjn7UwLnGjiZdprOvHvgGobFZsYK3GIY3E5hIqtj0rReU69BcTpGp+fvtraSNXeG1l+jtJvF55w=="], - "@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], + "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.5.2", "", { "dependencies": { "@smithy/core": "^3.33.2", "tslib": "^2.6.2" } }, "sha512-u4EAkaviMcQYlorFSnxFUgF/Dnbgiu2TzGmqOU4h3CL4MbvrYyNCXpFkcBwvAEU11EvspKX2zzS2uX7q+43VdQ=="], - "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q=="], + "@smithy/types": ["@smithy/types@4.19.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-r7jh49VJxGerfAcTQA6gXcKc+98zOp/tqRwzYjgOE+iSQsP6cEU1hq2QzbuipmP68QtYdY9wKEhiCQZIzHgZ4Q=="], - "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], - - "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], + "@smithy/util-utf8": ["@smithy/util-utf8@4.5.2", "", { "dependencies": { "@smithy/core": "^3.33.2", "tslib": "^2.6.2" } }, "sha512-7wNWV7SugHpcMA7uzEawJNpE0GrasXM7a9E+1+Wm6NxVuDClESac/AKt+G7jMZNUz5vBLWqKlqVV7Sv7AtUr6Q=="], "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], @@ -1018,6 +1007,8 @@ "@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="], + "@workflow/serde": ["@workflow/serde@4.1.0", "", {}, "sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ=="], + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], "@xterm/addon-fit": ["@xterm/addon-fit@0.11.0", "", {}, "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g=="], @@ -1030,7 +1021,7 @@ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "ai": ["ai@6.0.301", "", { "dependencies": { "@ai-sdk/gateway": "3.0.210", "@ai-sdk/provider": "3.0.18", "@ai-sdk/provider-utils": "4.0.57", "@opentelemetry/api": "^1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-pb7vIIBXKw4VGpbLmXvD+u5qbUe+2Mm7hEEkHs6Z2XBiifxAUEB38gl5JbaRi3BWsFqN13GP25/NHhf/DvPjgg=="], + "ai": ["ai@7.0.130", "", { "dependencies": { "@ai-sdk/gateway": "4.0.106", "@ai-sdk/provider": "4.0.24", "@ai-sdk/provider-utils": "5.0.56" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-QkBkCogl46jXUg0SrSsdqQlOI2ZVMCjfnbBQS8t3gE21U/SO17oNMVFyjmcC9z20wOoYUA+2O2vsso0maoS7dw=="], "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], @@ -1320,7 +1311,7 @@ "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], - "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], @@ -1378,7 +1369,7 @@ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "gaxios": ["gaxios@7.1.3", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2", "rimraf": "^5.0.1" } }, "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ=="], + "gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="], "gcp-metadata": ["gcp-metadata@8.1.2", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg=="], @@ -1408,7 +1399,7 @@ "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "google-auth-library": ["google-auth-library@10.6.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "7.1.3", "gcp-metadata": "8.1.2", "google-logging-utils": "1.1.3", "jws": "^4.0.0" } }, "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA=="], + "google-auth-library": ["google-auth-library@10.9.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.1.4", "gcp-metadata": "8.1.2", "google-logging-utils": "1.1.3", "jws": "^4.0.0" } }, "sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw=="], "google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="], @@ -2226,7 +2217,7 @@ "underscore": ["underscore@1.13.8", "", {}, "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ=="], - "undici": ["undici@6.29.0", "", {}, "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg=="], + "undici": ["undici@7.30.0", "", {}, "sha512-dkrQXeHSaoamnItlYbmzG0wFYrM0ZwDxCIg0A7aKjTyyhh9svRzCNFEzV+Vm05/yehjCzjDZ31KXfGEjYSztDQ=="], "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], @@ -2332,40 +2323,6 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.64", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rwLi/Rsuj2pYniQXIrvClHvXDzgM4UQHHnvHTWEF14efnlKclG/1ghpNC+adsRujAbCTr6gRsSbDE2vEqriV7g=="], - - "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - - "@ai-sdk/azure/@ai-sdk/openai": ["@ai-sdk/openai@3.0.48", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ALmj/53EXpcRqMbGpPJPP4UOSWw0q4VGpnDo7YctvsynjkrKDmoneDG/1a7VQnSPYHnJp6tTRMf5ZdxZ5whulg=="], - - "@ai-sdk/black-forest-labs/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@ai-sdk/bytedance/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@ai-sdk/deepseek/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@ai-sdk/fal/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], - - "@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], - - "@ai-sdk/google/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - - "@ai-sdk/google-vertex/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - - "@ai-sdk/klingai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@ai-sdk/mcp/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - - "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="], - - "@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], - - "@ai-sdk/replicate/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - - "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "@commitlint/read/tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="], "@develar/schema-utils/ajv": ["ajv@6.14.0", "", { "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" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], @@ -2468,10 +2425,6 @@ "@types/yauzl/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="], - "ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], - - "ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.57", "", { "dependencies": { "@ai-sdk/provider": "3.0.18", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8", "undici": "^6.28.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-89a7sPvZqXsP3PigcAQLWntu/duIVEcN/RyChAB+j6p3C7NwW767sVttvL8r0+BetTg63uAXQoYHCZZueQKBSw=="], - "ajv-keywords/ajv": ["ajv@6.14.0", "", { "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" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], "app-builder-lib/@electron/get": ["@electron/get@3.1.0", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ=="], @@ -2536,6 +2489,8 @@ "gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "gcp-metadata/gaxios": ["gaxios@7.1.3", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2", "rimraf": "^5.0.1" } }, "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ=="], + "get-intrinsic/hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], @@ -2544,8 +2499,6 @@ "googleapis/google-auth-library": ["google-auth-library@11.1.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.1.4", "gcp-metadata": "^9.0.0", "google-logging-utils": "^2.0.0", "jws": "^4.0.0" } }, "sha512-YIBq5KNoHQrZ9PM4PeodDBqqBGlSTIxh1zibN8u3zNIO9UJg8gvKuCpdKV7fWXhsZ2zRkU6FhGrgKNgLJ2IRgw=="], - "googleapis-common/gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="], - "googleapis-common/google-auth-library": ["google-auth-library@11.1.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.1.4", "gcp-metadata": "^9.0.0", "google-logging-utils": "^2.0.0", "jws": "^4.0.0" } }, "sha512-YIBq5KNoHQrZ9PM4PeodDBqqBGlSTIxh1zibN8u3zNIO9UJg8gvKuCpdKV7fWXhsZ2zRkU6FhGrgKNgLJ2IRgw=="], "googleapis-common/google-logging-utils": ["google-logging-utils@2.0.1", "", {}, "sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A=="], @@ -2672,14 +2625,6 @@ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - "@ai-sdk/gateway/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], - - "@ai-sdk/react/@ai-sdk/provider-utils/@ai-sdk/provider": ["@ai-sdk/provider@3.0.18", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew=="], - - "@ai-sdk/react/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], - - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@develar/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -2768,8 +2713,6 @@ "@types/yauzl/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.1.1", "", {}, "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ=="], - "ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "app-builder-lib/@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], @@ -2818,14 +2761,12 @@ "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "gcp-metadata/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - "googleapis-common/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "googleapis-common/google-auth-library/gcp-metadata": ["gcp-metadata@9.0.4", "", { "dependencies": { "gaxios": "^7.1.3", "google-logging-utils": "^2.0.0", "json-bigint": "^1.0.0" } }, "sha512-p6WvbXOhfwnVtv/MyPq5kBiVhfV/qglMIxwwTVNEI1Ha1HmOgz5uHYHtYO6SfGckFaXe8blA11IJJ3wqXmvmBA=="], - "googleapis/google-auth-library/gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="], - "googleapis/google-auth-library/gcp-metadata": ["gcp-metadata@9.0.4", "", { "dependencies": { "gaxios": "^7.1.3", "google-logging-utils": "^2.0.0", "json-bigint": "^1.0.0" } }, "sha512-p6WvbXOhfwnVtv/MyPq5kBiVhfV/qglMIxwwTVNEI1Ha1HmOgz5uHYHtYO6SfGckFaXe8blA11IJJ3wqXmvmBA=="], "googleapis/google-auth-library/google-logging-utils": ["google-logging-utils@2.0.1", "", {}, "sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A=="], @@ -2924,8 +2865,6 @@ "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - "@electron/asar/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "@electron/rebuild/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -2960,8 +2899,6 @@ "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "googleapis/google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - "rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "sileo/motion/framer-motion/motion-dom": ["motion-dom@12.35.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-FFMLEnIejK/zDABn+vqGVAUN4T0+3fw+cVAY8MMT65yR+j5uMuvWdd4npACWhh94OVWQs79CrBBuwOwGRZAQiA=="], diff --git a/package.json b/package.json index 7b2cf58b..4654ec6a 100644 --- a/package.json +++ b/package.json @@ -43,26 +43,27 @@ "typecheck": "node --max-old-space-size=4096 ./node_modules/typescript/bin/tsc --noEmit" }, "dependencies": { - "@ai-sdk/amazon-bedrock": "^4.0.83", - "@ai-sdk/anthropic": "^3.0.58", - "@ai-sdk/azure": "^3.0.49", - "@ai-sdk/black-forest-labs": "^1.0.28", - "@ai-sdk/bytedance": "^1.0.10", - "@ai-sdk/cohere": "^3.0.27", - "@ai-sdk/deepseek": "^2.0.29", - "@ai-sdk/fal": "^2.0.29", - "@ai-sdk/google": "^3.0.43", - "@ai-sdk/google-vertex": "^4.0.80", - "@ai-sdk/groq": "^3.0.31", - "@ai-sdk/klingai": "^3.0.12", - "@ai-sdk/mcp": "^1.0.25", - "@ai-sdk/mistral": "^3.0.27", - "@ai-sdk/moonshotai": "^2.0.12", - "@ai-sdk/openai": "^3.0.41", - "@ai-sdk/provider": "^3.0.8", - "@ai-sdk/react": "^3.0.304", - "@ai-sdk/replicate": "^2.0.28", - "@ai-sdk/xai": "^3.0.74", + "@ai-sdk/amazon-bedrock": "^5.0.108", + "@ai-sdk/anthropic": "^4.0.74", + "@ai-sdk/azure": "^4.0.94", + "@ai-sdk/black-forest-labs": "^2.0.57", + "@ai-sdk/bytedance": "^2.0.59", + "@ai-sdk/cohere": "^4.0.57", + "@ai-sdk/deepseek": "^3.0.61", + "@ai-sdk/fal": "^3.0.57", + "@ai-sdk/google": "^4.0.90", + "@ai-sdk/google-vertex": "^5.0.104", + "@ai-sdk/groq": "^4.0.57", + "@ai-sdk/klingai": "^4.0.58", + "@ai-sdk/mcp": "^2.0.69", + "@ai-sdk/mistral": "^4.0.59", + "@ai-sdk/moonshotai": "^3.0.65", + "@ai-sdk/openai": "^4.0.86", + "@ai-sdk/provider": "^4.0.24", + "@ai-sdk/provider-utils": "^5.0.56", + "@ai-sdk/react": "^4.0.133", + "@ai-sdk/replicate": "^3.0.57", + "@ai-sdk/xai": "^5.0.17", "@anthropic-ai/claude-agent-sdk": "^0.2.84", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", @@ -79,7 +80,7 @@ "@notionhq/client": "^5.27.0", "@octokit/rest": "^22.0.1", "@opencode-ai/sdk": "^1.3.15", - "@openrouter/ai-sdk-provider": "^2.3.3", + "@openrouter/ai-sdk-provider": "^3.1.0", "@paralleldrive/cuid2": "^3.3.0", "@pierre/diffs": "^1.5.2", "@slack/web-api": "^8.2.0", @@ -96,7 +97,7 @@ "@types/turndown": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", - "ai": "^6.0.301", + "ai": "^7.0.130", "better-sqlite3": "12.6.2", "border-beam": "^1.4.1", "cmdk": "^1.1.1", diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index c2004355..399e9678 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -49,6 +49,59 @@ export const TRIPWIRES = [ pattern: /"baseUrl"/, include: /(^|\/)tsconfig[^/]*\.json$/, }, + { + id: "P7-ai-step-count-is", + description: "AI SDK 7 renamed stepCountIs to isStepCount", + pattern: /\bstepCountIs\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-experimental-context", + description: + "AI SDK 7 removed experimental_context (use runtimeContext or toolsContext)", + pattern: /\bexperimental_context\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-experimental-repair-tool-call", + description: + "AI SDK 7 renamed experimental_repairToolCall to repairToolCall", + pattern: /\bexperimental_repairToolCall\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-shared-v3-provider-options", + description: + "SharedV3ProviderOptions is tied to provider spec V3 (use ProviderOptions)", + pattern: /\bSharedV3ProviderOptions\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-generate-object", + description: + "AI SDK 7 deprecated generateObject (use generateText with Output.object)", + pattern: /\bgenerateObject\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-experimental-transcribe", + description: "AI SDK 7 renamed experimental_transcribe to transcribe", + pattern: /\bexperimental_transcribe\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-on-step-finish", + description: "AI SDK 7 renamed onStepFinish to onStepEnd", + pattern: /\bonStepFinish\b/, + include: /\.[cm]?[jt]sx?$/, + }, + { + id: "P7-ai-create-google-generative-ai", + description: + "@ai-sdk/google 4 renamed createGoogleGenerativeAI to createGoogle", + pattern: /\bcreateGoogleGenerativeAI\b/, + include: /\.[cm]?[jt]sx?$/, + }, ]; const DEFAULT_EXCLUDE = diff --git a/src/lib/ai/chat/agent/index.test.ts b/src/lib/ai/chat/agent/index.test.ts index cdcea9bc..70a45483 100644 --- a/src/lib/ai/chat/agent/index.test.ts +++ b/src/lib/ai/chat/agent/index.test.ts @@ -18,7 +18,7 @@ const hasToolCall = mock((toolName) => ({ kind: "has-tool-call", toolName })); const Output = { object: mock((config) => config), }; -const stepCountIs = mock(() => ({ kind: "stop-when" })); +const isStepCount = mock(() => ({ kind: "stop-when" })); const getEnabledModelsMock = mock(async () => [ { compositeId: "openai:gpt-5-mini", @@ -106,7 +106,7 @@ mock.module("ai", () => ({ generateImage, generateText, hasToolCall, - stepCountIs, + isStepCount, tool, ToolLoopAgent: MockToolLoopAgent, validateUIMessages, @@ -770,7 +770,7 @@ describe("createThreadAgent", () => { }); const nextStep = await aiTestState.agentConfig.prepareStep({ - experimental_context: null, + runtimeContext: undefined, stepNumber: 2, steps: [ { @@ -783,4 +783,69 @@ describe("createThreadAgent", () => { expect(nextStep.activeTools).toContain("edit"); expect(nextStep.activeTools).toContain("apply_patch"); }); + + function chatAgentOptions(sourceMessageId: string) { + return { + defaultDirectory: "/tmp/workspace", + latestUserText: "Implement the fix in the workspace.", + memoryRuntime: defaultMemoryRuntime, + permissionMode: "default", + searchProviders: {}, + searchSettings: { + defaultProvider: "exa", + defaultResultCount: 5, + maxResultCount: 10, + }, + sourceMessageId, + systemPrompt: "System prompt", + threadId: `thread-${sourceMessageId}`, + threadMode: "chat", + userId: "user-1", + toolApprovalPolicies: getDefaultToolApprovalPolicies(), + toolsEnabled: true, + webFetchSettings: { batchEnabled: false, batchLimit: 10 }, + workspaceId: "workspace-1", + }; + } + + it("returns the full instructions on every step so directives do not carry forward", async () => { + const prepared = await prepareWith(chatAgentOptions("instructions-reset")); + const { allowSystemInMessages, prepareStep } = aiTestState.agentConfig; + + // Context compaction feeds its summary as a synthetic system message. + expect(allowSystemInMessages).toBe(true); + expect(prepared.runtimeContext).toHaveProperty("toolRouting"); + + const firstStep = await prepareStep({ + runtimeContext: prepared.runtimeContext, + stepNumber: 0, + steps: [], + }); + expect(firstStep.instructions).toBe(prepared.instructions); + expect(firstStep.runtimeContext).toHaveProperty("toolRouting"); + + const mutationStep = { toolCalls: [{ toolName: "edit" }], toolResults: [] }; + const validationStep = await prepareStep({ + runtimeContext: firstStep.runtimeContext, + stepNumber: 1, + steps: [mutationStep], + }); + expect(validationStep.instructions).toBe( + `${prepared.instructions}\n## Step Directive: Validate Your Changes\n` + + "You just made file changes. Before proceeding to the next task:\n" + + "1. Read the modified files to verify correctness.\n" + + "2. Run relevant checks via diagnostics or run_task (lint, typecheck, test) when available.\n" + + "3. Update the corresponding task status with manage_task.\n" + + "Do not mark a task as completed until the changes are validated.", + ); + + // AI SDK 7 keeps returned instructions for later steps, so the step after + // the directive must hand back the plain instructions explicitly. + const followUpStep = await prepareStep({ + runtimeContext: validationStep.runtimeContext, + stepNumber: 2, + steps: [mutationStep, { toolCalls: [], toolResults: [] }], + }); + expect(followUpStep.instructions).toBe(prepared.instructions); + }); }); diff --git a/src/lib/ai/chat/agent/index.ts b/src/lib/ai/chat/agent/index.ts index da029f2c..5fe3e86a 100644 --- a/src/lib/ai/chat/agent/index.ts +++ b/src/lib/ai/chat/agent/index.ts @@ -1,13 +1,13 @@ import { generateText, hasToolCall, - stepCountIs, + isStepCount, ToolLoopAgent, type StopCondition, type ToolSet, type Experimental_DownloadFunction, } from "ai"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import type { ImageGenerationRuntime } from "@/lib/ai/providers/images"; import type { VideoGenerationRuntime } from "@/lib/ai/providers/videos"; import type { PermissionMode } from "@/lib/security"; @@ -154,25 +154,17 @@ function buildStepProgressAddon( } function mergeToolRoutingContext( - experimentalContext: unknown, + runtimeContext: Record | undefined, toolRouting: unknown, -) { +): Record | undefined { if (!toolRouting) { - return experimentalContext; - } - - if ( - experimentalContext && - typeof experimentalContext === "object" && - !Array.isArray(experimentalContext) - ) { - return { - ...experimentalContext, - toolRouting, - }; + return runtimeContext; } - return { toolRouting }; + return { + ...runtimeContext, + toolRouting, + }; } // --------------------------------------------------------------------------- @@ -196,7 +188,7 @@ export function createThreadAgent({ }: { attachmentDownload?: Experimental_DownloadFunction; languageModel: unknown; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; }) { let cachedInstructions: string | undefined; let cachedActiveToolNames: string[] = []; @@ -219,13 +211,17 @@ export function createThreadAgent({ : {}), model, ...(providerOptions ? { providerOptions } : {}), + // Context compaction feeds its summary back as a synthetic system message + // built server-side (runtime/context-compaction.ts); AI SDK 7 rejects + // system messages in the prompt unless this is set. + allowSystemInMessages: true, callOptionsSchema: threadAgentCallOptionsSchema, stopWhen: [ - stepCountIs(MAX_AGENT_STEPS), + isStepCount(MAX_AGENT_STEPS), hasToolCall("ask_question"), allTasksResolved, ], - experimental_repairToolCall: async ({ toolCall, inputSchema, error }) => { + repairToolCall: async ({ toolCall, inputSchema, error }) => { if (isNoSuchToolError(error)) { return null; } @@ -234,7 +230,7 @@ export function createThreadAgent({ const result = await generateText({ model, ...(providerOptions ? { providerOptions } : {}), - system: [ + instructions: [ "You are a tool call repair agent.", "The user will provide a malformed tool call and the JSON Schema for that tool.", "Return ONLY a valid JSON object that conforms to the schema. Do not wrap in markdown.", @@ -302,14 +298,18 @@ export function createThreadAgent({ return { ...settings, activeTools: initialActiveTools as never[], - experimental_context: { + instructions, + runtimeContext: { + ...settings.runtimeContext, toolRouting: initialRouting.audit, }, - instructions, tools, }; }, - prepareStep: async ({ experimental_context, stepNumber, steps }) => { + // AI SDK 7 carries instructions returned here forward to later steps, so + // every branch returns the full instructions for this step; otherwise a + // step directive would stick to every step after it. + prepareStep: async ({ runtimeContext, stepNumber, steps }) => { const promptContext = cachedPromptContext; let activeToolNames = cachedActiveToolNames; @@ -384,45 +384,30 @@ export function createThreadAgent({ ); const progressAddon = buildStepProgressAddon(steps, stepNumber); + const stepSettings = { + activeTools: activeToolNames as never[], + runtimeContext: mergeToolRoutingContext( + runtimeContext, + cachedRoutingAudit, + ), + }; if (stepNumber >= 3 && !hasCreatedTasks) { return { - activeTools: activeToolNames as never[], - experimental_context: mergeToolRoutingContext( - experimental_context, - cachedRoutingAudit, - ), - system: baseSystem + TASK_ENFORCEMENT_ADDON + progressAddon, + ...stepSettings, + instructions: baseSystem + TASK_ENFORCEMENT_ADDON + progressAddon, }; } if (lastStepHadMutations) { return { - activeTools: activeToolNames as never[], - experimental_context: mergeToolRoutingContext( - experimental_context, - cachedRoutingAudit, - ), - system: baseSystem + VALIDATION_ADDON + progressAddon, - }; - } - - if (progressAddon) { - return { - activeTools: activeToolNames as never[], - experimental_context: mergeToolRoutingContext( - experimental_context, - cachedRoutingAudit, - ), - system: baseSystem + progressAddon, + ...stepSettings, + instructions: baseSystem + VALIDATION_ADDON + progressAddon, }; } return { - activeTools: activeToolNames as never[], - experimental_context: mergeToolRoutingContext( - experimental_context, - cachedRoutingAudit, - ), + ...stepSettings, + instructions: baseSystem + progressAddon, }; }, }); diff --git a/src/lib/ai/chat/agent/ui-stream.test.ts b/src/lib/ai/chat/agent/ui-stream.test.ts new file mode 100644 index 00000000..a2a3a54e --- /dev/null +++ b/src/lib/ai/chat/agent/ui-stream.test.ts @@ -0,0 +1,279 @@ +import { describe, expect, it, spyOn } from "bun:test"; +import type { + LanguageModelV4CallOptions, + LanguageModelV4StreamPart, +} from "@ai-sdk/provider"; +import { + readUIMessageStream, + ToolLoopAgent, + tool, + type UIMessageChunk, +} from "ai"; +import { + convertArrayToReadableStream, + convertReadableStreamToArray, + MockLanguageModelV4, +} from "ai/test"; +import { z } from "zod"; + +import { getErrorMessage } from "@/lib/errors"; +import type { ThreadUIMessage } from "@/lib/ai/messages/types"; + +import { planContextCompaction } from "../runtime/context-compaction"; +import { createReasoningMetadataTracker } from "../runtime/reasoning"; +import { createThreadAgentUIStream } from "./ui-stream"; + +const usage = { + inputTokens: { cacheRead: 4, cacheWrite: 0, noCache: 6, total: 10 }, + outputTokens: { reasoning: 15, text: 5, total: 20 }, +}; + +function textResponse(text: string): LanguageModelV4StreamPart[] { + return [ + { type: "stream-start", warnings: [] }, + { id: "text-1", type: "text-start" }, + { delta: text, id: "text-1", type: "text-delta" }, + { id: "text-1", type: "text-end" }, + { finishReason: { raw: "stop", unified: "stop" }, type: "finish", usage }, + ]; +} + +function createModel(text = "Done.") { + return new MockLanguageModelV4({ + doStream: async () => ({ + stream: convertArrayToReadableStream(textResponse(text)), + }), + }); +} + +// Mirrors the thread agent: no constructor-level tools; they are built per +// call in prepareCall, so `agent.tools` is empty when the UI stream starts. +function createAgent( + model: MockLanguageModelV4, + executeEdit: () => Promise, +) { + return new ToolLoopAgent({ + allowSystemInMessages: true, + callOptionsSchema: z.object({ threadId: z.string() }), + model, + prepareCall: ({ options: _options, ...settings }) => ({ + ...settings, + tools: { + edit: tool({ + execute: executeEdit, + inputSchema: z.object({ path: z.string() }), + needsApproval: true, + }), + read: tool({ + execute: async () => ({ content: "" }), + inputSchema: z.object({ path: z.string() }), + }), + }, + }), + }); +} + +function streamAgent( + agent: ReturnType, + uiMessages: ThreadUIMessage[], + overrides: Partial[0]> = {}, +) { + return createThreadAgentUIStream({ + agent, + onError: (error) => getErrorMessage(error, "Unknown error"), + options: { threadId: "thread-1" }, + originalMessages: uiMessages, + uiMessages, + ...overrides, + }); +} + +function getPromptText(call: LanguageModelV4CallOptions | undefined) { + return JSON.stringify(call?.prompt ?? []); +} + +const userMessage: ThreadUIMessage = { + id: "user-1", + metadata: {}, + parts: [{ text: "Fix a.ts", type: "text" }], + role: "user", +}; + +describe("createThreadAgentUIStream", () => { + it("runs an approved tool call and keeps earlier tool outputs for the model", async () => { + const model = createModel(); + let editCalls = 0; + const agent = createAgent(model, async () => { + editCalls += 1; + return { applied: true }; + }); + const messages: ThreadUIMessage[] = [ + userMessage, + { + id: "assistant-1", + metadata: {}, + parts: [ + { type: "step-start" }, + { + input: { path: "a.ts" }, + output: { content: "export const answer = 42;" }, + state: "output-available", + toolCallId: "call-read", + type: "tool-read", + }, + { type: "step-start" }, + { + approval: { approved: true, id: "approval-1" }, + input: { path: "a.ts" }, + state: "approval-responded", + toolCallId: "call-edit", + type: "tool-edit", + }, + ], + role: "assistant", + }, + ]; + + const chunks = await convertReadableStreamToArray( + await streamAgent(agent, messages), + ); + + expect(editCalls).toBe(1); + expect(chunks).toContainEqual( + expect.objectContaining({ + output: { applied: true }, + toolCallId: "call-edit", + type: "tool-output-available", + }), + ); + const promptText = getPromptText(model.doStreamCalls[0]); + expect(promptText).toContain("export const answer = 42;"); + expect(promptText).not.toContain("Tool output omitted"); + }); + + it("still asks for approval for tools that set needsApproval", async () => { + const model = new MockLanguageModelV4({ + doStream: async () => ({ + stream: convertArrayToReadableStream([ + { type: "stream-start", warnings: [] }, + { + input: JSON.stringify({ path: "a.ts" }), + toolCallId: "call-edit", + toolName: "edit", + type: "tool-call", + }, + { + finishReason: { raw: "tool_calls", unified: "tool-calls" }, + type: "finish", + usage, + }, + ]), + }), + }); + let editCalls = 0; + const agent = createAgent(model, async () => { + editCalls += 1; + return { applied: true }; + }); + + const chunks = await convertReadableStreamToArray( + await streamAgent(agent, [userMessage]), + ); + + expect(chunks).toContainEqual( + expect.objectContaining({ + toolCallId: "call-edit", + type: "tool-approval-request", + }), + ); + expect(editCalls).toBe(0); + expect(model.doStreamCalls).toHaveLength(1); + }); + + it("keeps provider error text instead of the redacted default", async () => { + const model = new MockLanguageModelV4({ + doStream: async () => { + throw new Error("Provider exploded: rate limited"); + }, + }); + const agent = createAgent(model, async () => ({})); + // streamText logs stream errors by default; this one is expected. + const consoleError = spyOn(console, "error").mockImplementation(() => {}); + + const chunks = await convertReadableStreamToArray( + await streamAgent(agent, [userMessage]), + ).finally(() => consoleError.mockRestore()); + + expect(chunks).toContainEqual({ + errorText: "Provider exploded: rate limited", + type: "error", + } satisfies UIMessageChunk); + }); + + it("accepts the context compaction summary system message", async () => { + const model = createModel(); + const agent = createAgent(model, async () => ({})); + const assistantMessage: ThreadUIMessage = { + id: "assistant-1", + metadata: { status: "completed" }, + parts: [{ text: "Earlier answer", type: "text" }], + role: "assistant", + }; + const { transcript } = planContextCompaction({ + checkpoint: { + coveredThroughMessageId: "assistant-1", + summary: "The user is fixing a.ts.", + updatedAt: null, + }, + enabled: false, + transcript: [userMessage, assistantMessage, { ...userMessage, id: "u2" }], + windowPercent: 80, + }); + expect(transcript[0]?.role).toBe("system"); + + const chunks = await convertReadableStreamToArray( + await streamAgent(agent, transcript), + ); + + expect(chunks.some((chunk) => chunk.type === "error")).toBe(false); + expect(model.doStreamCalls[0]?.prompt[0]).toEqual( + expect.objectContaining({ + content: expect.stringContaining("The user is fixing a.ts."), + role: "system", + }), + ); + }); + + it("maps AI SDK 7 usage details into thread message metadata", async () => { + const model = createModel(); + const agent = createAgent(model, async () => ({})); + const tracker = createReasoningMetadataTracker({ + clock: { now: () => 0 }, + providerId: "openai", + requestedModelId: "openai:gpt-5.2", + }); + let stepInputTokens: number | undefined; + + const stream = await streamAgent(agent, [userMessage], { + generateMessageId: () => "assistant-2", + messageMetadata: ({ part }) => tracker.getMessageMetadata(part), + onStepEnd: ({ usage: stepUsage }) => { + stepInputTokens = stepUsage.inputTokens; + }, + }); + let finalMessage: ThreadUIMessage | undefined; + for await (const message of readUIMessageStream({ + stream, + })) { + finalMessage = message; + } + + expect(stepInputTokens).toBe(10); + expect(finalMessage?.metadata?.usage).toEqual({ + inputTokens: 10, + outputTokens: 20, + reasoningTokens: 15, + totalTokens: 30, + }); + }); +}); diff --git a/src/lib/ai/chat/agent/ui-stream.ts b/src/lib/ai/chat/agent/ui-stream.ts new file mode 100644 index 00000000..a30bb72d --- /dev/null +++ b/src/lib/ai/chat/agent/ui-stream.ts @@ -0,0 +1,62 @@ +import { + convertToModelMessages, + toUIMessageStream, + validateUIMessages, + type Agent, + type GenerateTextOnStepEndCallback, + type StreamTextTransform, + type ToolSet, + type UIMessage, + type UIMessageStreamOptions, +} from "ai"; + +/** + * Runs the thread agent and streams its output as UI message chunks. + * + * Same flow as `createAgentUIStream` from `ai`, except that the transcript is + * only validated structurally. The thread agent builds its tools per call in + * `prepareCall`, so `agent.tools` is empty here, and `createAgentUIStream` + * would then reject pending `tool-*` parts (an `approval-responded` part after + * the user answers an approval) and replace every earlier static tool output + * with "Tool output omitted because the tool is no longer available." Without + * tools, tool outputs reach the model as stored, as they did in AI SDK 6.0.116. + */ +export async function createThreadAgentUIStream< + CALL_OPTIONS, + UI_MESSAGE extends UIMessage, +>({ + abortSignal, + agent, + experimental_transform, + onStepEnd, + options, + uiMessages, + ...uiMessageStreamOptions +}: { + abortSignal?: AbortSignal; + agent: Agent; + experimental_transform?: StreamTextTransform; + onStepEnd?: GenerateTextOnStepEndCallback; + options: CALL_OPTIONS; + uiMessages: UI_MESSAGE[]; +} & UIMessageStreamOptions) { + const validatedMessages = await validateUIMessages({ + messages: uiMessages, + }); + const modelMessages = await convertToModelMessages(validatedMessages); + + const result = await agent.stream({ + abortSignal, + experimental_transform, + onStepEnd, + options, + prompt: modelMessages, + }); + + return toUIMessageStream({ + ...uiMessageStreamOptions, + originalMessages: + uiMessageStreamOptions.originalMessages ?? validatedMessages, + stream: result.stream, + }); +} diff --git a/src/lib/ai/chat/runtime/context-compaction-refresh.ts b/src/lib/ai/chat/runtime/context-compaction-refresh.ts index 99e47831..1707b357 100644 --- a/src/lib/ai/chat/runtime/context-compaction-refresh.ts +++ b/src/lib/ai/chat/runtime/context-compaction-refresh.ts @@ -1,4 +1,4 @@ -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import { createLogger } from "@/lib/logger"; import type { ThreadUIMessage } from "@/lib/ai/messages/types"; @@ -34,7 +34,7 @@ export async function refreshThreadContextCompactionCheckpoint(input: { fixedWindowSize?: number | null; languageModel: unknown; onCompactionStart?: () => void | Promise; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; staleWriteProtection?: boolean; threadId: string; transcript: ThreadUIMessage[]; diff --git a/src/lib/ai/chat/runtime/context-compaction.ts b/src/lib/ai/chat/runtime/context-compaction.ts index 5e52ace5..14e30374 100644 --- a/src/lib/ai/chat/runtime/context-compaction.ts +++ b/src/lib/ai/chat/runtime/context-compaction.ts @@ -1,5 +1,5 @@ import { generateText } from "ai"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import { getLatestCompletedAssistantInputTokens, @@ -196,7 +196,7 @@ export async function generateCompactionSummary({ existingSummary: string | null; languageModel: unknown; messages: ThreadUIMessage[]; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; }) { const result = await generateText({ model: languageModel as Parameters[0]["model"], @@ -328,7 +328,7 @@ export async function applyContextCompaction(input: { fixedWindowSize?: number | null; languageModel: unknown; onCompactionStart?: () => void | Promise; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; transcript: ThreadUIMessage[]; useFixedWindow?: boolean; windowPercent: number; diff --git a/src/lib/ai/chat/runtime/reasoning.ts b/src/lib/ai/chat/runtime/reasoning.ts index b75c199f..ea35c70b 100644 --- a/src/lib/ai/chat/runtime/reasoning.ts +++ b/src/lib/ai/chat/runtime/reasoning.ts @@ -18,7 +18,6 @@ type ReasoningStreamPart = { reasoningTokens?: number; }; outputTokens?: number; - reasoningTokens?: number; totalTokens?: number; }; type: string; @@ -194,8 +193,7 @@ export function createReasoningMetadataTracker({ inputTokens: part.totalUsage.inputTokens, outputTokens: part.totalUsage.outputTokens, reasoningTokens: - part.totalUsage.outputTokenDetails?.reasoningTokens ?? - part.totalUsage.reasoningTokens, + part.totalUsage.outputTokenDetails?.reasoningTokens, totalTokens: part.totalUsage.totalTokens, }, }; diff --git a/src/lib/ai/chat/runtime/thread-chat/index.test.ts b/src/lib/ai/chat/runtime/thread-chat/index.test.ts index c6c596cd..8aebde5a 100644 --- a/src/lib/ai/chat/runtime/thread-chat/index.test.ts +++ b/src/lib/ai/chat/runtime/thread-chat/index.test.ts @@ -26,7 +26,7 @@ const createAgentUIStream = mock(async (args) => { }); } if (aiState.latestInputTokens != null) { - await args.onStepFinish?.({ + await args.onStepEnd?.({ usage: { inputTokens: aiState.latestInputTokens }, }); } @@ -44,12 +44,12 @@ const createGateway = mock((_options = {}) => ({ kind: "gateway-language-model", modelId, })), - textEmbeddingModel: mock((modelId: string) => ({ + embeddingModel: mock((modelId: string) => ({ kind: "gateway-embedding-model", modelId, })), })); -const createUIMessageStream = mock(({ execute, onFinish }) => { +const createUIMessageStream = mock(({ execute, onEnd }) => { const writer = { merge: mock(() => {}), write: mock((chunk) => { @@ -59,7 +59,7 @@ const createUIMessageStream = mock(({ execute, onFinish }) => { const done = (async () => { await execute({ writer }); - await onFinish?.({ responseMessage: aiState.assistantResponseMessage }); + await onEnd?.({ responseMessage: aiState.assistantResponseMessage }); })(); return { done, writer }; @@ -89,7 +89,7 @@ const readUIMessageStream = mock(async function* () { yield aiState.assistantResponseMessage; }); const smoothStream = mock(() => undefined); -const stepCountIs = mock(() => ({ kind: "stop-when" })); +const isStepCount = mock(() => ({ kind: "stop-when" })); const tool = mock((config) => config); class MockToolLoopAgent { @@ -426,7 +426,6 @@ const validateUIMessages = mock(async ({ messages }) => messages); mock.module("ai", () => ({ Output, - createAgentUIStream, createGateway, createUIMessageStream, createUIMessageStreamResponse, @@ -435,9 +434,9 @@ mock.module("ai", () => ({ generateText, generateId, hasToolCall, + isStepCount, readUIMessageStream, smoothStream, - stepCountIs, tool, ToolLoopAgent: MockToolLoopAgent, validateUIMessages, @@ -445,6 +444,10 @@ mock.module("ai", () => ({ mock.module("server-only", () => ({})); +mock.module("../../agent/ui-stream", () => ({ + createThreadAgentUIStream: createAgentUIStream, +})); + mock.module("../attachments", () => ({ createAttachmentDownloadHandler, })); @@ -1368,6 +1371,18 @@ describe("runThreadChat bootstrap failure recovery", () => { ); }); + it("keeps UI stream error text instead of the AI SDK's redacted default", async () => { + await runThreadChat(createSubmitRequest(), "user-1"); + await flushAsyncWork(); + + const [streamOptions] = createUIMessageStream.mock.calls.at(-1) ?? []; + const [agentStreamOptions] = createAgentUIStream.mock.calls.at(-1) ?? []; + const error = { error: { message: "Provider request failed." } }; + + expect(streamOptions.onError(error)).toBe("Provider request failed."); + expect(agentStreamOptions.onError(error)).toBe("Provider request failed."); + }); + it("persists an inline assistant error when bootstrap fails after the user turn is committed", async () => { loadThreadSessionSnapshot.mockImplementationOnce(async () => null); diff --git a/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts b/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts index 41d3d494..decae9d2 100644 --- a/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts +++ b/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts @@ -1,5 +1,4 @@ import { - createAgentUIStream, createUIMessageStream, generateId, readUIMessageStream, @@ -21,6 +20,7 @@ import * as persist from "../../persistence"; import { createReasoningMetadataTracker } from "../reasoning"; import { getSystemPrompt } from "../system-prompt"; import { createThreadAgent } from "../../agent"; +import { createThreadAgentUIStream } from "../../agent/ui-stream"; import { buildThreadPromptContext, createMcpPromptNamespace, @@ -605,6 +605,8 @@ async function executeBootstrappedThreadRun(run: BootstrappedThreadRun) { const normalizedModelTranscript = await normalizedModelTranscriptPromise; const stream = createUIMessageStream({ + // AI SDK 7 redacts errors to "An error occurred." unless onError is set. + onError: (error) => getErrorMessage(error, "Unknown error"), originalMessages: normalizedModelTranscript, execute: async ({ writer }) => { try { @@ -771,12 +773,12 @@ async function executeBootstrappedThreadRun(run: BootstrappedThreadRun) { : baseSystemPrompt; const agentMessages = compactionResult.transcript; - const result = await createAgentUIStream({ + const result = await createThreadAgentUIStream({ agent, abortSignal: abortController.signal, experimental_transform: smoothStream(), generateMessageId: () => assistantId, - onStepFinish: async ({ usage }) => { + onStepEnd: async ({ usage }) => { latestInputTokens = usage.inputTokens; }, messageMetadata: ({ part }) => tracker.getMessageMetadata(part), @@ -831,7 +833,7 @@ async function executeBootstrappedThreadRun(run: BootstrappedThreadRun) { throw error; } }, - onFinish: async ({ responseMessage }) => { + onEnd: async ({ responseMessage }) => { await closeMcpTools(); if (!(await streamStillOwnsThread(run.request.threadId, run.runId))) { await clearThreadRepoCheckpointRun(run.runId); diff --git a/src/lib/ai/chat/title/generate.ts b/src/lib/ai/chat/title/generate.ts index 2eb58889..6448c357 100644 --- a/src/lib/ai/chat/title/generate.ts +++ b/src/lib/ai/chat/title/generate.ts @@ -57,7 +57,7 @@ export async function generateThreadTitle({ const result = await generateText({ model: model.languageModel as Parameters[0]["model"], prompt: buildTitlePrompt(firstUserText), - system: TITLE_SYSTEM_PROMPT, + instructions: TITLE_SYSTEM_PROMPT, temperature: 0.2, ...(model.providerOptions ? { providerOptions: model.providerOptions } diff --git a/src/lib/ai/chat/tools/router/index.ts b/src/lib/ai/chat/tools/router/index.ts index 04315075..6ba61547 100644 --- a/src/lib/ai/chat/tools/router/index.ts +++ b/src/lib/ai/chat/tools/router/index.ts @@ -1,5 +1,5 @@ import { Output, generateText, type StepResult, type ToolSet } from "ai"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import { z } from "zod"; import type { AIProvider } from "@/server/db/enums"; @@ -120,7 +120,7 @@ type RouteToolExposureInput = { evidence?: ToolRoutingEvidence; initialActiveTools?: string[]; mainLanguageModel: unknown; - mainProviderOptions?: SharedV3ProviderOptions; + mainProviderOptions?: ProviderOptions; promptContext: ThreadPromptContext; resolvedProviderId?: AIProvider | null; stage: "initial" | "step"; @@ -759,7 +759,7 @@ export async function routeToolExposure( output: Output.object({ schema: toolRoutingDecisionSchema }), ...(providerOptions ? { providerOptions } : {}), prompt: buildToolRouterPrompt(manifest), - system: buildToolRouterSystemPrompt(), + instructions: buildToolRouterSystemPrompt(), }); return validateToolRoutingDecision({ @@ -785,7 +785,7 @@ export async function routeToolExposure( ? { providerOptions: input.mainProviderOptions } : {}), prompt: buildToolRouterPrompt(manifest), - system: buildToolRouterSystemPrompt(), + instructions: buildToolRouterSystemPrompt(), }); return validateToolRoutingDecision({ diff --git a/src/lib/ai/chat/types.ts b/src/lib/ai/chat/types.ts index b8945209..90263842 100644 --- a/src/lib/ai/chat/types.ts +++ b/src/lib/ai/chat/types.ts @@ -1,6 +1,6 @@ import type { AIProvider } from "@/server/db/enums"; import type { ChatEngine } from "@/server/db/enums"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import type { ReasoningEffort } from "../providers/models"; import type { ThreadUIMessage } from "../messages/types"; @@ -57,7 +57,7 @@ type ResolvedThreadModel = { contextWindow?: number; languageModel: unknown; providerId: AIProvider; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; requestedModelId: string; responseModelId: string; }; diff --git a/src/lib/ai/messages/ui.test.ts b/src/lib/ai/messages/ui.test.ts new file mode 100644 index 00000000..d23d2aa8 --- /dev/null +++ b/src/lib/ai/messages/ui.test.ts @@ -0,0 +1,68 @@ +import { describe, expect, it } from "bun:test"; + +import type { ThreadUIMessage } from "./types"; +import { validateThreadUIMessage, validateThreadUIMessages } from "./ui"; + +const assistantMessage = { + id: "assistant-1", + metadata: { status: "completed" }, + parts: [ + { + approval: { + approved: true, + decision: "allow_always", + id: "approval-1", + reason: "Looks safe", + response: "Go ahead", + }, + input: { command: "ls" }, + state: "approval-responded", + title: "Run ls", + toolCallId: "call-1", + toolName: "Bash", + type: "dynamic-tool", + }, + { + approval: { + approved: false, + decision: "deny", + id: "approval-2", + response: "Not now", + }, + input: { path: "a.ts" }, + state: "output-denied", + toolCallId: "call-2", + type: "tool-edit", + }, + { + input: { path: "a.ts" }, + output: { content: "export {};" }, + state: "output-available", + toolCallId: "call-3", + type: "tool-read", + }, + ], + role: "assistant", +} as ThreadUIMessage; + +describe("validateThreadUIMessages", () => { + it("keeps Sentinel approval fields and tool titles through AI SDK validation", async () => { + const [validated] = await validateThreadUIMessages([assistantMessage]); + + expect(validated?.parts).toEqual(assistantMessage.parts); + }); + + it("keeps approval fields when validating a single message", async () => { + const validated = await validateThreadUIMessage(assistantMessage); + + expect(validated.parts[0]).toEqual( + expect.objectContaining({ + approval: expect.objectContaining({ + decision: "allow_always", + response: "Go ahead", + }), + title: "Run ls", + }), + ); + }); +}); diff --git a/src/lib/ai/messages/ui.ts b/src/lib/ai/messages/ui.ts index 22b17df0..53aaede3 100644 --- a/src/lib/ai/messages/ui.ts +++ b/src/lib/ai/messages/ui.ts @@ -53,11 +53,95 @@ function normalizeUnknownThreadUIMessages(messages: unknown) { ); } -export async function validateThreadUIMessage(message: unknown) { - const [validatedMessage] = await validateUIMessages({ - messages: [normalizeUnknownThreadUIMessage(message)], - metadataSchema: threadMessageMetadataSchema, +// Approval fields Sentinel stores next to the AI SDK's id/approved/reason. +const THREAD_APPROVAL_FIELDS = ["decision", "response"] as const; + +function getPartApproval(part: unknown) { + if (!part || typeof part !== "object" || !("approval" in part)) { + return null; + } + + const { approval } = part as { approval?: unknown }; + return approval && typeof approval === "object" + ? (approval as Record) + : null; +} + +function getPartToolCallId(part: unknown) { + return part && typeof part === "object" && "toolCallId" in part + ? (part as { toolCallId?: unknown }).toolCallId + : undefined; +} + +/** + * validateUIMessages parses tool approvals with the AI SDK schema, which + * drops Sentinel's approval.decision and approval.response. Validation keeps + * message and part order, so copy them back from the validated input. + */ +function restoreThreadApprovalFields( + validatedMessages: ThreadUIMessage[], + sourceMessages: unknown, +) { + if (!Array.isArray(sourceMessages)) { + return validatedMessages; + } + + return validatedMessages.map((message, messageIndex) => { + const source: unknown = sourceMessages[messageIndex]; + const sourceParts = + source && typeof source === "object" && "parts" in source + ? (source as { parts?: unknown }).parts + : undefined; + + if (!Array.isArray(sourceParts)) { + return message; + } + + let restored = false; + const parts = message.parts.map((part, partIndex) => { + const sourcePart: unknown = sourceParts[partIndex]; + const approval = getPartApproval(part); + const sourceApproval = getPartApproval(sourcePart); + + if ( + !approval || + !sourceApproval || + getPartToolCallId(sourcePart) !== getPartToolCallId(part) + ) { + return part; + } + + const extraFields = Object.fromEntries( + THREAD_APPROVAL_FIELDS.flatMap((field) => + typeof sourceApproval[field] === "string" + ? [[field, sourceApproval[field]]] + : [], + ), + ); + + if (Object.keys(extraFields).length === 0) { + return part; + } + + restored = true; + return { ...part, approval: { ...approval, ...extraFields } }; + }); + + return restored + ? { ...message, parts: parts as ThreadUIMessage["parts"] } + : message; }); +} + +export async function validateThreadUIMessage(message: unknown) { + const normalizedMessages = [normalizeUnknownThreadUIMessage(message)]; + const [validatedMessage] = restoreThreadApprovalFields( + await validateUIMessages({ + messages: normalizedMessages, + metadataSchema: threadMessageMetadataSchema, + }), + normalizedMessages, + ); if (!validatedMessage) { throw new Error("Message validation returned no messages."); @@ -67,10 +151,14 @@ export async function validateThreadUIMessage(message: unknown) { } export async function validateThreadUIMessages(messages: unknown) { - return validateUIMessages({ - messages: normalizeUnknownThreadUIMessages(messages), - metadataSchema: threadMessageMetadataSchema, - }); + const normalizedMessages = normalizeUnknownThreadUIMessages(messages); + return restoreThreadApprovalFields( + await validateUIMessages({ + messages: normalizedMessages, + metadataSchema: threadMessageMetadataSchema, + }), + normalizedMessages, + ); } export async function mapThreadMessagesToUIMessages( diff --git a/src/lib/ai/providers/factory.test.ts b/src/lib/ai/providers/factory.test.ts index e8ff61d3..f221514d 100644 --- a/src/lib/ai/providers/factory.test.ts +++ b/src/lib/ai/providers/factory.test.ts @@ -2,7 +2,8 @@ import { describe, expect, it, mock } from "bun:test"; mock.module("server-only", () => ({})); -const { createProviderInstance } = await import("./factory"); +const { createProviderInstance, createProviderLanguageModel } = + await import("./factory"); describe("createProviderInstance", () => { it("creates native Black Forest Labs, Fal, and Replicate providers", () => { @@ -77,3 +78,32 @@ describe("createProviderInstance", () => { expect(typeof deepseek.languageModel).toBe("function"); }); }); + +describe("createProviderLanguageModel", () => { + it("uses the Chat Completions API for Ollama", () => { + const model = createProviderLanguageModel( + "ollama", + { baseURL: "http://localhost:11434/v1" }, + "llama3.2", + ) as { modelId: string; provider: string }; + + expect(model.provider).toBe("openai.chat"); + expect(model.modelId).toBe("llama3.2"); + }); + + it("keeps the Responses API for OpenAI and xAI", () => { + const openai = createProviderLanguageModel( + "openai", + { apiKey: "openai-key" }, + "gpt-5.2", + ) as { provider: string }; + const xai = createProviderLanguageModel( + "xai", + { apiKey: "xai-key" }, + "grok-4", + ) as { provider: string }; + + expect(openai.provider).toBe("openai.responses"); + expect(xai.provider).toBe("xai.responses"); + }); +}); diff --git a/src/lib/ai/providers/factory.ts b/src/lib/ai/providers/factory.ts index bbe7616e..0c741731 100644 --- a/src/lib/ai/providers/factory.ts +++ b/src/lib/ai/providers/factory.ts @@ -8,8 +8,8 @@ import { createByteDance } from "@ai-sdk/bytedance"; import { createCohere } from "@ai-sdk/cohere"; import { createDeepSeek } from "@ai-sdk/deepseek"; import { createFal } from "@ai-sdk/fal"; -import { createGoogleGenerativeAI } from "@ai-sdk/google"; -import { createVertex } from "@ai-sdk/google-vertex"; +import { createGoogle } from "@ai-sdk/google"; +import { createGoogleVertex } from "@ai-sdk/google-vertex"; import { createGroq } from "@ai-sdk/groq"; import { createKlingAI } from "@ai-sdk/klingai"; import { createMistral } from "@ai-sdk/mistral"; @@ -59,6 +59,27 @@ type OllamaConfig = { baseURL: string; }; +function createOllamaProvider(config: OllamaConfig) { + return createOpenAI({ + apiKey: "ollama", + baseURL: config.baseURL || "http://localhost:11434/v1", + }); +} + +export function createProviderLanguageModel( + provider: AIProvider, + config: Record, + modelId: string, +) { + // Ollama serves the OpenAI Chat Completions API, while languageModel() on + // an OpenAI provider targets the Responses API. + if (provider === "ollama") { + return createOllamaProvider(config as OllamaConfig).chat(modelId); + } + + return createProviderInstance(provider, config).languageModel(modelId); +} + export function createProviderInstance( provider: AIProvider, config: Record, @@ -80,14 +101,14 @@ export function createProviderInstance( } case "google": { const c = config as ApiKeyConfig; - return createGoogleGenerativeAI({ + return createGoogle({ apiKey: c.apiKey, ...(c.baseURL && { baseURL: c.baseURL }), }); } case "google_vertex": { const c = config as VertexConfig; - return createVertex({ + return createGoogleVertex({ location: c.location, project: c.project, googleAuthOptions: c.googleAuthOptions, @@ -187,11 +208,7 @@ export function createProviderInstance( }); } case "ollama": { - const c = config as OllamaConfig; - return createOpenAI({ - apiKey: "ollama", - baseURL: c.baseURL || "http://localhost:11434/v1", - }); + return createOllamaProvider(config as OllamaConfig); } case "openrouter": { const c = config as ApiKeyConfig; diff --git a/src/lib/ai/providers/models.ts b/src/lib/ai/providers/models.ts index 51a79893..2c6bb7f2 100644 --- a/src/lib/ai/providers/models.ts +++ b/src/lib/ai/providers/models.ts @@ -1,5 +1,5 @@ import type { AIProvider } from "@/server/db/enums"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; export type ModelCapability = "vision" | "reasoning" | "tool_use" | "object_generation"; @@ -34,9 +34,7 @@ export type ReasoningEffort = (typeof REASONING_EFFORTS)[number]; type ReasoningConfig = { defaultEffort: ReasoningEffort; forceReasoning?: boolean; - providerOptionsMap?: Partial< - Record - >; + providerOptionsMap?: Partial>; providerValueMap?: Partial>; reasoningSummary?: "auto" | "concise" | "detailed"; strategy: @@ -1233,7 +1231,7 @@ function getProviderOptionsKey(provider: AIProvider) { case "ollama": return "openai"; case "openrouter": - return "openai"; + return "openrouter"; case "deepseek": return "deepseek"; } @@ -1302,7 +1300,7 @@ export function getReasoningProviderOptions( provider: AIProvider, modelId: string, reasoningEffort?: ReasoningEffort | null, -): SharedV3ProviderOptions | undefined { +): ProviderOptions | undefined { const config = getReasoningConfig(provider, modelId); if (!reasoningEffort || !config) { diff --git a/src/lib/ai/providers/resolver.ts b/src/lib/ai/providers/resolver.ts index ee9c6405..dac63639 100644 --- a/src/lib/ai/providers/resolver.ts +++ b/src/lib/ai/providers/resolver.ts @@ -8,7 +8,7 @@ import { modelPreferences, providerCredentials } from "@/server/db/schema"; import { createCredentialDecryptionError, decrypt } from "./encrypt"; import { getModelsForProvider, isKnownModel } from "./models"; -import { createProviderInstance } from "./factory"; +import { createProviderLanguageModel } from "./factory"; const VALID_PROVIDERS = new Set([ "openai", @@ -181,8 +181,7 @@ export async function getLanguageModel(userId: string, compositeId: string) { async () => { const { provider, model } = parseModelId(compositeId); const config = await getProviderConfig(userId, provider); - const providerInstance = createProviderInstance(provider, config); - return providerInstance.languageModel(model); + return createProviderLanguageModel(provider, config, model); }, ); } diff --git a/src/lib/ai/transcription/service.ts b/src/lib/ai/transcription/service.ts index 506254be..950df2ec 100644 --- a/src/lib/ai/transcription/service.ts +++ b/src/lib/ai/transcription/service.ts @@ -1,7 +1,7 @@ import "server-only"; import { Buffer } from "node:buffer"; -import { experimental_transcribe as transcribe } from "ai"; +import { transcribe } from "ai"; import { createAzure } from "@ai-sdk/azure"; import { createGroq } from "@ai-sdk/groq"; import { createOpenAI } from "@ai-sdk/openai"; diff --git a/src/lib/git/commit-message.ts b/src/lib/git/commit-message.ts index 3097d2f3..4bdee2e1 100644 --- a/src/lib/git/commit-message.ts +++ b/src/lib/git/commit-message.ts @@ -3,7 +3,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import path from "node:path"; -import { generateObject } from "ai"; +import { generateText, Output } from "ai"; import { z } from "zod"; import type { SessionConfig } from "@github/copilot-sdk"; @@ -444,17 +444,16 @@ export async function generateSentinelCommitMessage( throw new Error("No enabled model is available for commit generation."); } - const result = await generateObject({ - model: model.languageModel as Parameters[0]["model"], - output: "object", + const result = await generateText({ + model: model.languageModel as Parameters[0]["model"], + output: Output.object({ schema: COMMIT_MESSAGE_OUTPUT_SCHEMA }), prompt: buildCommitMessagePrompt(input.context), - schema: COMMIT_MESSAGE_OUTPUT_SCHEMA, ...(model.providerOptions ? { providerOptions: model.providerOptions } : {}), }); - return normalizeCommitResult(result.object); + return normalizeCommitResult(result.output); } export async function generateCodexCommitMessage( diff --git a/src/lib/mcp/oauth.ts b/src/lib/mcp/oauth.ts index bb720e46..667b3d78 100644 --- a/src/lib/mcp/oauth.ts +++ b/src/lib/mcp/oauth.ts @@ -105,6 +105,12 @@ export function createMcpOAuthProvider( }; }); }, + // Client information only ever comes from dynamic registration (see + // saveClientInformation). @ai-sdk/mcp 2 needs this to drop and re-register + // a rejected client after invalid_client errors, as 1.x always did. + isClientInformationDynamicallyRegistered() { + return true; + }, redirectToAuthorization(authorizationUrl) { if (!args.onRedirect) { throw new Error( diff --git a/src/lib/mcp/runtime.test.ts b/src/lib/mcp/runtime.test.ts index e6cc6efd..48ed4201 100644 --- a/src/lib/mcp/runtime.test.ts +++ b/src/lib/mcp/runtime.test.ts @@ -185,6 +185,14 @@ describe("mcp runtime", () => { OPENAI_API_KEY: "key", }, }); + const clientConfigs = createMCPClient.mock.calls.map(([config]) => config); + const httpConfig = clientConfigs.find( + (config) => config.transport.type === "http", + ); + expect(httpConfig?.transport.redirect).toBe("follow"); + expect( + clientConfigs.map((config) => config.protocolVersionDiscovery), + ).toEqual([false, false]); const second = await loadMcpTools({ entries: [ diff --git a/src/lib/mcp/tools.ts b/src/lib/mcp/tools.ts index 27bd30bc..4e4ef097 100644 --- a/src/lib/mcp/tools.ts +++ b/src/lib/mcp/tools.ts @@ -253,12 +253,19 @@ async function createCachedServerTools( } : {}), headers: resolveHttpHeaders(entry), + // @ai-sdk/mcp 2 rejects redirects by default; user-configured servers + // were followed through redirects before. + redirect: "follow", type: "http", url: entry.config.url, }, + // Keep the initialize-first handshake that legacy servers expect; + // @ai-sdk/mcp 2 otherwise probes with server/discover first. + protocolVersionDiscovery: false, }); } else { client = await createMCPClient({ + protocolVersionDiscovery: false, transport: new Experimental_StdioMCPTransport({ args: entry.config.args, command: entry.config.command, diff --git a/src/lib/memory/profiles.ts b/src/lib/memory/profiles.ts index 2d1e5a26..1fa50353 100644 --- a/src/lib/memory/profiles.ts +++ b/src/lib/memory/profiles.ts @@ -1,4 +1,4 @@ -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import type { AIProvider } from "@/server/db/enums"; @@ -29,7 +29,7 @@ export type MemoryEmbeddingProfile = { id: MemoryEmbeddingProfileId; model: string; provider: AIProvider; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; }; export const MEMORY_EMBEDDING_PROFILES = [ diff --git a/src/lib/memory/service.ts b/src/lib/memory/service.ts index 61d6416c..f1acd096 100644 --- a/src/lib/memory/service.ts +++ b/src/lib/memory/service.ts @@ -1,5 +1,5 @@ -import { generateObject } from "ai"; -import type { SharedV3ProviderOptions } from "@ai-sdk/provider"; +import { generateText, Output } from "ai"; +import type { ProviderOptions } from "@ai-sdk/provider-utils"; import { z } from "zod"; import { @@ -254,7 +254,7 @@ export async function autosaveConversationMemories({ messages: ThreadUIMessage[]; memoryRuntime: MemoryRuntimeState; model: unknown; - providerOptions?: SharedV3ProviderOptions; + providerOptions?: ProviderOptions; sourceMessageId: string; threadId: string; userId: string; @@ -270,9 +270,9 @@ export async function autosaveConversationMemories({ } try { - const result = await generateObject({ - model: model as Parameters[0]["model"], - output: "object", + const result = await generateText({ + model: model as Parameters[0]["model"], + output: Output.object({ schema: AUTO_SAVE_EXTRACTION_SCHEMA }), prompt: [ "Extract durable long-term memories from this conversation.", "Return only facts that will improve future conversations.", @@ -283,11 +283,10 @@ export async function autosaveConversationMemories({ "", transcript, ].join("\n"), - schema: AUTO_SAVE_EXTRACTION_SCHEMA, ...(providerOptions ? { providerOptions } : {}), }); - const candidates = result.object.memories + const candidates = result.output.memories .slice(0, memoryRuntime.settings.autoSavePerTurnLimit) .filter( (memory) => From 3368e3af5c9f82fba234700e902f6ebad56858a4 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 11:23:24 +0000 Subject: [PATCH 013/133] fix(agent): read manage_task results from tool outputs extractTaskState read step.toolResults[].result, the AI SDK 4 shape. Since AI SDK 5 a tool result carries the tool's return value in .output, so the task map was always empty: the allTasksResolved stop condition never fired and buildStepProgressAddon always returned "". It now reads .output, so the agent stops once every tracked task is completed or blocked, and steps with open tasks get the "Step Progress" directive. Behaviour to watch: the loop now stops right after the step whose manage_task call resolves the last task, as the stop condition intended, so a run can end without a separate closing message after that call. The tool router's evidence builder had the same dead branch ("result" in toolResult ? toolResult.result : toolResult); it now reads .output directly, which is what the old fallback always resolved to. A test drives prepareStep and the stop condition with AI SDK 7 tool result objects and checks that the AI SDK 4 shape no longer counts; it fails on the previous commit. Tripwire P7-ai-v4-tool-result-shape flags `toolResult(s)` followed by `.result` and `result.result`. Gate G0: frozen install ok, typecheck ok, 191/191 test files pass, format ok, tripwires clean (14 active). Co-Authored-By: Claude Opus 5.5 --- scripts/verify/tripwires.mjs | 9 ++++ src/lib/ai/chat/agent/index.test.ts | 68 +++++++++++++++++++++++++++ src/lib/ai/chat/agent/index.ts | 6 +-- src/lib/ai/chat/tools/router/index.ts | 20 +++----- 4 files changed, 86 insertions(+), 17 deletions(-) diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index 399e9678..a56b0295 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -102,6 +102,15 @@ export const TRIPWIRES = [ pattern: /\bcreateGoogleGenerativeAI\b/, include: /\.[cm]?[jt]sx?$/, }, + { + id: "P7-ai-v4-tool-result-shape", + description: + "Tool results carry .output since AI SDK 5 (the AI SDK 4 .result shape)", + // One line at a time: `toolResult(s)` followed by `.result`, or + // `result.result` when iterating over step.toolResults. + pattern: /\btoolResults?\b.*\.result\b|\bresult\??\.result\b/, + include: /\.[cm]?[jt]sx?$/, + }, ]; const DEFAULT_EXCLUDE = diff --git a/src/lib/ai/chat/agent/index.test.ts b/src/lib/ai/chat/agent/index.test.ts index 70a45483..9eb9d117 100644 --- a/src/lib/ai/chat/agent/index.test.ts +++ b/src/lib/ai/chat/agent/index.test.ts @@ -808,6 +808,20 @@ describe("createThreadAgent", () => { }; } + function manageTaskResult(id: string, status: string) { + return { + input: {}, + output: { + action: "update", + planId: "plan-1", + task: { description: null, id, status, title: id }, + }, + toolCallId: `call-${id}-${status}`, + toolName: "manage_task", + type: "tool-result", + }; + } + it("returns the full instructions on every step so directives do not carry forward", async () => { const prepared = await prepareWith(chatAgentOptions("instructions-reset")); const { allowSystemInMessages, prepareStep } = aiTestState.agentConfig; @@ -848,4 +862,58 @@ describe("createThreadAgent", () => { }); expect(followUpStep.instructions).toBe(prepared.instructions); }); + + it("tracks manage_task tool outputs for step progress and the stop condition", async () => { + await prepareWith(chatAgentOptions("task-tracking")); + const { prepareStep, stopWhen } = aiTestState.agentConfig; + const allTasksResolved = stopWhen.find( + (condition) => typeof condition === "function", + ); + + const inProgressSteps = [ + { + toolCalls: [{ toolName: "manage_task" }, { toolName: "manage_task" }], + toolResults: [ + manageTaskResult("task-1", "completed"), + manageTaskResult("task-2", "in_progress"), + ], + }, + ]; + expect(allTasksResolved({ steps: inProgressSteps })).toBe(false); + + const progressStep = await prepareStep({ + runtimeContext: undefined, + stepNumber: 1, + steps: inProgressSteps, + }); + expect(progressStep.instructions).toContain("## Step Progress (step 1)"); + expect(progressStep.instructions).toContain( + "Tasks: 1/2 completed, 1 remaining.", + ); + + const resolvedSteps = [ + ...inProgressSteps, + { + toolCalls: [{ toolName: "manage_task" }], + toolResults: [manageTaskResult("task-2", "blocked")], + }, + ]; + expect(allTasksResolved({ steps: resolvedSteps })).toBe(true); + + // The AI SDK 4 `result` shape is not a tool result in AI SDK 5 and later. + expect( + allTasksResolved({ + steps: [ + { + toolResults: [ + { + result: manageTaskResult("task-3", "completed").output, + toolName: "manage_task", + }, + ], + }, + ], + }), + ).toBe(false); + }); }); diff --git a/src/lib/ai/chat/agent/index.ts b/src/lib/ai/chat/agent/index.ts index 5fe3e86a..28736bc6 100644 --- a/src/lib/ai/chat/agent/index.ts +++ b/src/lib/ai/chat/agent/index.ts @@ -76,12 +76,12 @@ function extractTaskState(steps: Array<{ toolResults?: unknown[] }>) { for (const step of steps) { for (const result of (step.toolResults ?? []) as Array<{ toolName?: string; - result?: { action?: string; task?: TaskSnapshot | null }; + output?: { action?: string; task?: TaskSnapshot | null }; }>) { if (result.toolName !== "manage_task") continue; - const task = result.result?.task; + const task = result.output?.task; if (!task?.id) continue; - if (result.result?.action === "delete") { + if (result.output?.action === "delete") { tasks.delete(task.id); } else { tasks.set(task.id, task.status); diff --git a/src/lib/ai/chat/tools/router/index.ts b/src/lib/ai/chat/tools/router/index.ts index 6ba61547..3875c4fe 100644 --- a/src/lib/ai/chat/tools/router/index.ts +++ b/src/lib/ai/chat/tools/router/index.ts @@ -260,14 +260,6 @@ export function buildToolRoutingEvidence( for (const toolResult of step.toolResults ?? []) { const serialized = JSON.stringify(toolResult); - const resultPayload = - toolResult && - typeof toolResult === "object" && - "result" in toolResult && - toolResult.result && - typeof toolResult.result === "object" - ? toolResult.result - : toolResult; if (projectMarkerPattern.test(serialized)) { projectContextFound = true; @@ -280,13 +272,13 @@ export function buildToolRoutingEvidence( } if ( - resultPayload && - typeof resultPayload === "object" && - "output" in resultPayload && - resultPayload.output && - typeof resultPayload.output === "object" + toolResult && + typeof toolResult === "object" && + "output" in toolResult && + toolResult.output && + typeof toolResult.output === "object" ) { - const output = resultPayload.output as Record; + const output = toolResult.output as Record; if (typeof output.exitCode === "number") { lastExitCode = output.exitCode; if (output.exitCode !== 0) { From 5dd0fc21c08f0908985107a8966f965136244ec4 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 12:00:36 +0000 Subject: [PATCH 014/133] fix(agent): count plan tasks from earlier runs before stopping The previous commit made the allTasksResolved stop condition work, but it only saw manage_task results from the current agent.stream call. Each approval resume or follow-up is a new call, so a continuation run that updated one task stopped as soon as that task was terminal, even with other plan tasks still pending. - The orchestrator passes the plan's task statuses from run start as the new planTasks call option; prepareCall keeps them and this run's manage_task results are applied on top. - Task state only counts once this run has changed a task, so leftover or already finished plan tasks never stop or steer an unrelated run. - The stop fires one step after the last open task resolves. That step lets the model report back (a text answer ends the loop by itself), and a tool call there ends the run. Opening a new task in it keeps the run going. - The Step Progress addon drops the step number, so the instructions only change with the task counts and no longer break prompt-prefix caching on every step. Tests: loop.test.ts drives the real ToolLoopAgent from createThreadAgent with MockLanguageModelV4 (routing, tools and instructions stubbed). It checks that a step directive reaches exactly one model call (AI SDK 7 carry-forward), that the run continues while earlier plan tasks are open, that resolved plan tasks do not stop a run, and the reporting step. Two of these fail on the previous commit. Unit tests cover the stop condition and progress text, and a thread-chat test checks planTasks is passed. Gate G0: frozen install ok, typecheck ok, 192/192 test files pass, format ok, tripwires clean (14 active). Co-Authored-By: Claude Opus 5.5 --- src/lib/ai/chat/agent/index.test.ts | 88 ++++++- src/lib/ai/chat/agent/index.ts | 63 +++-- src/lib/ai/chat/agent/loop.test.ts | 243 ++++++++++++++++++ .../ai/chat/runtime/thread-chat/index.test.ts | 39 +++ .../chat/runtime/thread-chat/orchestrator.ts | 6 + 5 files changed, 414 insertions(+), 25 deletions(-) create mode 100644 src/lib/ai/chat/agent/loop.test.ts diff --git a/src/lib/ai/chat/agent/index.test.ts b/src/lib/ai/chat/agent/index.test.ts index 9eb9d117..440649c4 100644 --- a/src/lib/ai/chat/agent/index.test.ts +++ b/src/lib/ai/chat/agent/index.test.ts @@ -886,7 +886,8 @@ describe("createThreadAgent", () => { stepNumber: 1, steps: inProgressSteps, }); - expect(progressStep.instructions).toContain("## Step Progress (step 1)"); + // No step number, so the instructions stay the same while counts do. + expect(progressStep.instructions).toContain("## Step Progress\n"); expect(progressStep.instructions).toContain( "Tasks: 1/2 completed, 1 remaining.", ); @@ -898,22 +899,89 @@ describe("createThreadAgent", () => { toolResults: [manageTaskResult("task-2", "blocked")], }, ]; - expect(allTasksResolved({ steps: resolvedSteps })).toBe(true); - - // The AI SDK 4 `result` shape is not a tool result in AI SDK 5 and later. + // The step after the last task resolves is left for the model to report. + expect(allTasksResolved({ steps: resolvedSteps })).toBe(false); + expect( + allTasksResolved({ + steps: [...resolvedSteps, { toolCalls: [{ toolName: "read" }] }], + }), + ).toBe(true); + // Opening a new task in that step keeps the run going. expect( allTasksResolved({ steps: [ + ...resolvedSteps, { - toolResults: [ - { - result: manageTaskResult("task-3", "completed").output, - toolName: "manage_task", - }, - ], + toolCalls: [{ toolName: "manage_task" }], + toolResults: [manageTaskResult("task-3", "pending")], }, ], }), ).toBe(false); + + // The AI SDK 4 `result` shape is not a tool result in AI SDK 5 and later. + const legacyStep = { + toolResults: [ + { + result: manageTaskResult("task-3", "completed").output, + toolName: "manage_task", + }, + ], + }; + expect(allTasksResolved({ steps: [legacyStep, legacyStep] })).toBe(false); + }); + + it("counts plan tasks from earlier runs before stopping", async () => { + await prepareWith({ + ...chatAgentOptions("task-tracking-continuation"), + planTasks: [ + { id: "task-1", status: "in_progress" }, + { id: "task-2", status: "pending" }, + { id: "task-3", status: "completed" }, + ], + }); + const { prepareStep, stopWhen } = aiTestState.agentConfig; + const allTasksResolved = stopWhen.find( + (condition) => typeof condition === "function", + ); + + // Tasks this run has not touched neither stop nor steer it. + const firstStep = await prepareStep({ + runtimeContext: undefined, + stepNumber: 0, + steps: [], + }); + expect(firstStep.instructions).not.toContain("## Step Progress"); + const readSteps = [{ toolCalls: [{ toolName: "read" }], toolResults: [] }]; + expect(allTasksResolved({ steps: [...readSteps, ...readSteps] })).toBe( + false, + ); + + const updateSteps = [ + { + toolCalls: [{ toolName: "manage_task" }], + toolResults: [manageTaskResult("task-1", "completed")], + }, + { toolCalls: [{ toolName: "read" }], toolResults: [] }, + ]; + expect(allTasksResolved({ steps: updateSteps })).toBe(false); + const progressStep = await prepareStep({ + runtimeContext: undefined, + stepNumber: 1, + steps: updateSteps.slice(0, 1), + }); + expect(progressStep.instructions).toContain( + "Tasks: 2/3 completed, 1 remaining.", + ); + + const finishedSteps = [ + ...updateSteps, + { + toolCalls: [{ toolName: "manage_task" }], + toolResults: [manageTaskResult("task-2", "completed")], + }, + { toolCalls: [{ toolName: "read" }], toolResults: [] }, + ]; + expect(allTasksResolved({ steps: finishedSteps })).toBe(true); }); }); diff --git a/src/lib/ai/chat/agent/index.ts b/src/lib/ai/chat/agent/index.ts index 28736bc6..eb017397 100644 --- a/src/lib/ai/chat/agent/index.ts +++ b/src/lib/ai/chat/agent/index.ts @@ -31,6 +31,8 @@ import { buildThreadAgentInstructions } from "../context/instructions"; // Call options schema // --------------------------------------------------------------------------- +type TaskSnapshot = { id: string; status: string }; + const threadAgentCallOptionsSchema = z.object({ agentRole: z.enum(["primary", "subagent"]).optional(), defaultDirectory: z.string().optional(), @@ -40,6 +42,9 @@ const threadAgentCallOptionsSchema = z.object({ memoryRuntime: z.custom(), mcpTools: z.custom().optional(), permissionMode: z.custom(), + // Task statuses of the thread plan when the run started, so task tracking + // sees tasks created by earlier runs. + planTasks: z.array(z.custom()).optional(), preferredProjectRoot: z.string().nullable().optional(), promptContext: z.custom(), resolvedModelId: z.string().optional(), @@ -69,10 +74,17 @@ export type ThreadAgentCallOptions = z.infer< // Custom stop condition: all tasks resolved // --------------------------------------------------------------------------- -type TaskSnapshot = { id: string; status: string }; +type TaskSteps = Array<{ toolResults?: unknown[] }>; -function extractTaskState(steps: Array<{ toolResults?: unknown[] }>) { - const tasks = new Map(); +// Applies this run's manage_task results on top of the plan's task statuses +// from when the run started. `touched` stays false until this run changes a +// task, so tasks left over from earlier runs never end or steer a run alone. +function extractTaskState( + steps: TaskSteps, + initialTasks: ReadonlyMap, +) { + const tasks = new Map(initialTasks); + let touched = false; for (const step of steps) { for (const result of (step.toolResults ?? []) as Array<{ toolName?: string; @@ -81,6 +93,7 @@ function extractTaskState(steps: Array<{ toolResults?: unknown[] }>) { if (result.toolName !== "manage_task") continue; const task = result.output?.task; if (!task?.id) continue; + touched = true; if (result.output?.action === "delete") { tasks.delete(task.id); } else { @@ -88,19 +101,33 @@ function extractTaskState(steps: Array<{ toolResults?: unknown[] }>) { } } } - return tasks; + return { tasks, touched }; } const TERMINAL_TASK_STATUSES = new Set(["completed", "blocked"]); -const allTasksResolved: StopCondition = ({ steps }) => { - const tasks = extractTaskState(steps); - if (tasks.size === 0) return false; +function areTasksResolved({ + tasks, + touched, +}: ReturnType) { + if (!touched || tasks.size === 0) return false; for (const status of tasks.values()) { if (!TERMINAL_TASK_STATUSES.has(status)) return false; } return true; -}; +} + +// Stops the step after the one that resolved the last open task: that step +// lets the model report back, but it cannot keep working past it. A step +// that opens new tasks keeps the run going. +function createAllTasksResolvedCondition( + getInitialTasks: () => ReadonlyMap, +): StopCondition { + return ({ steps }) => + steps.length > 1 && + areTasksResolved(extractTaskState(steps.slice(0, -1), getInitialTasks())) && + areTasksResolved(extractTaskState(steps, getInitialTasks())); +} // --------------------------------------------------------------------------- // prepareStep helpers @@ -132,12 +159,14 @@ const VALIDATION_ADDON = [ "Do not mark a task as completed until the changes are validated.", ].join("\n"); +// No step number here: the text only changes with the task counts, so it does +// not break prompt-prefix caching on every step. function buildStepProgressAddon( - steps: Array<{ toolResults?: unknown[] }>, - stepNumber: number, + steps: TaskSteps, + initialTasks: ReadonlyMap, ) { - const tasks = extractTaskState(steps); - if (tasks.size === 0) return ""; + const { tasks, touched } = extractTaskState(steps, initialTasks); + if (!touched || tasks.size === 0) return ""; const completed = [...tasks.values()].filter((s) => s === "completed").length; const blocked = [...tasks.values()].filter((s) => s === "blocked").length; @@ -147,7 +176,7 @@ function buildStepProgressAddon( return [ "", - `## Step Progress (step ${stepNumber})`, + "## Step Progress", `Tasks: ${completed}/${tasks.size} completed${blocked > 0 ? `, ${blocked} blocked` : ""}, ${remaining} remaining.`, "Keep working through remaining tasks. Do not stop until all tasks are completed or blocked.", ].join("\n"); @@ -195,6 +224,7 @@ export function createThreadAgent({ let cachedAllToolNames: string[] = []; let cachedPromptContext: ThreadPromptContext | null = null; let cachedInitialActiveTools: string[] = []; + let cachedPlanTasks: ReadonlyMap = new Map(); let cachedResolvedProviderId: AIProvider | undefined; let cachedRoutingAudit: unknown = null; let cachedRoutingEvidenceSignature: string | null = null; @@ -219,7 +249,7 @@ export function createThreadAgent({ stopWhen: [ isStepCount(MAX_AGENT_STEPS), hasToolCall("ask_question"), - allTasksResolved, + createAllTasksResolvedCondition(() => cachedPlanTasks), ], repairToolCall: async ({ toolCall, inputSchema, error }) => { if (isNoSuchToolError(error)) { @@ -290,6 +320,9 @@ export function createThreadAgent({ cachedAllToolNames = allToolNames; cachedPromptContext = promptContext; cachedInitialActiveTools = initialActiveTools; + cachedPlanTasks = new Map( + (options.planTasks ?? []).map((task) => [task.id, task.status]), + ); cachedResolvedProviderId = options.resolvedProviderId; cachedRoutingAudit = initialRouting.audit; cachedRoutingEvidenceSignature = null; @@ -383,7 +416,7 @@ export function createThreadAgent({ MUTATION_TOOLS.has(c.toolName), ); - const progressAddon = buildStepProgressAddon(steps, stepNumber); + const progressAddon = buildStepProgressAddon(steps, cachedPlanTasks); const stepSettings = { activeTools: activeToolNames as never[], runtimeContext: mergeToolRoutingContext( diff --git a/src/lib/ai/chat/agent/loop.test.ts b/src/lib/ai/chat/agent/loop.test.ts new file mode 100644 index 00000000..af527972 --- /dev/null +++ b/src/lib/ai/chat/agent/loop.test.ts @@ -0,0 +1,243 @@ +import { describe, expect, it, mock } from "bun:test"; +import type { + LanguageModelV4CallOptions, + LanguageModelV4StreamPart, +} from "@ai-sdk/provider"; +import { tool } from "ai"; +import { convertArrayToReadableStream, MockLanguageModelV4 } from "ai/test"; +import { z } from "zod"; + +// Runs the real ToolLoopAgent from createThreadAgent against a mock model. +// Tool assembly, routing and the instruction builder are stubbed so the test +// only exercises the agent loop: prepareStep and the stop conditions. + +const BASE_INSTRUCTIONS = "Base thread instructions."; + +const taskStatuses = new Map(); + +mock.module("server-only", () => ({})); + +mock.module("../tools", () => ({ + buildTools: () => ({ + edit: tool({ + execute: async () => ({ applied: true }), + inputSchema: z.object({ path: z.string() }), + }), + manage_task: tool({ + execute: async ({ status, taskId }) => { + taskStatuses.set(taskId, status); + return { + action: "update" as const, + planId: "plan-1", + task: { description: null, id: taskId, status, title: taskId }, + }; + }, + inputSchema: z.object({ status: z.string(), taskId: z.string() }), + }), + read: tool({ + execute: async () => ({ content: "" }), + inputSchema: z.object({ path: z.string() }), + }), + }), +})); + +mock.module("../tools/router", () => ({ + buildToolRoutingEvidence: () => ({ + executionFailed: false, + inspectionPerformed: false, + integrationNamespaces: [], + localInspectionWasInsufficient: false, + mcpNamespaces: [], + missingCommand: null, + missingToolchain: false, + projectContextFound: false, + suggestedNextAction: null, + targetFilesFound: false, + }), + routeToolExposure: async ({ + availableToolNames, + }: { + availableToolNames: string[]; + }) => ({ activeToolNames: availableToolNames, audit: null }), +})); + +mock.module("../tools/selection", () => ({ + computeLatentToolSummary: () => ({ + categories: [], + integrationNamespaces: [], + mcpNamespaces: [], + }), +})); + +mock.module("../context/instructions", () => ({ + buildThreadAgentInstructions: () => BASE_INSTRUCTIONS, +})); + +const { createThreadAgent } = await import("./index"); + +const usage = { + inputTokens: { cacheRead: 0, cacheWrite: 0, noCache: 10, total: 10 }, + outputTokens: { reasoning: 0, text: 5, total: 5 }, +}; + +type ModelTurn = + { text: string } | { toolName: string; input: Record }; + +function turnStream(turn: ModelTurn, index: number) { + const parts: LanguageModelV4StreamPart[] = [ + { type: "stream-start", warnings: [] }, + ]; + if ("text" in turn) { + parts.push( + { id: "text-1", type: "text-start" }, + { delta: turn.text, id: "text-1", type: "text-delta" }, + { id: "text-1", type: "text-end" }, + { finishReason: { raw: "stop", unified: "stop" }, type: "finish", usage }, + ); + } else { + parts.push( + { + input: JSON.stringify(turn.input), + toolCallId: `call-${index}`, + toolName: turn.toolName, + type: "tool-call", + }, + { + finishReason: { raw: "tool_calls", unified: "tool-calls" }, + type: "finish", + usage, + }, + ); + } + return convertArrayToReadableStream(parts); +} + +// Replays the given turns in order, then answers with text. +function createScriptedModel(turns: ModelTurn[]) { + let calls = 0; + return new MockLanguageModelV4({ + doStream: async () => { + const index = calls++; + return { + stream: turnStream(turns[index] ?? { text: "Done." }, index), + }; + }, + }); +} + +function callOptions(planTasks: Array<{ id: string; status: string }> = []) { + return { + availableSkills: [], + imageGenerationRuntime: { defaultProvider: null, providers: {} }, + memoryRuntime: { available: false }, + permissionMode: "default", + planTasks, + promptContext: {}, + searchProviders: {}, + searchSettings: {}, + skillRoots: [], + systemPrompt: "System prompt", + threadId: "thread-1", + threadMode: "chat", + toolApprovalPolicies: {}, + toolsEnabled: true, + userId: "user-1", + videoGenerationRuntime: { defaultProvider: null, providers: {} }, + webFetchSettings: {}, + } as never; +} + +async function runAgent( + model: MockLanguageModelV4, + planTasks?: Array<{ id: string; status: string }>, +) { + taskStatuses.clear(); + const agent = createThreadAgent({ languageModel: model }); + const result = await agent.stream({ + options: callOptions(planTasks), + prompt: "Fix a.ts", + }); + await result.consumeStream(); + return model.doStreamCalls; +} + +function getSystemText(call: LanguageModelV4CallOptions | undefined) { + const system = call?.prompt.find((message) => message.role === "system"); + return typeof system?.content === "string" ? system.content : ""; +} + +function updateTask(taskId: string, status: string): ModelTurn { + return { input: { status, taskId }, toolName: "manage_task" }; +} + +describe("thread agent loop", () => { + it("sends a step directive to one model call only", async () => { + const calls = await runAgent( + createScriptedModel([ + { input: { path: "a.ts" }, toolName: "edit" }, + { input: { path: "a.ts" }, toolName: "read" }, + ]), + ); + + expect(calls).toHaveLength(3); + expect(getSystemText(calls[0])).toBe(BASE_INSTRUCTIONS); + expect(getSystemText(calls[1])).toContain( + "## Step Directive: Validate Your Changes", + ); + // AI SDK 7 carries prepareStep instructions forward unless reset. + expect(getSystemText(calls[2])).toBe(BASE_INSTRUCTIONS); + }); + + it("keeps going while plan tasks from earlier runs are still open", async () => { + const calls = await runAgent( + createScriptedModel([ + updateTask("task-1", "completed"), + { input: { path: "b.ts" }, toolName: "edit" }, + ]), + [ + { id: "task-1", status: "in_progress" }, + { id: "task-2", status: "pending" }, + { id: "task-3", status: "pending" }, + ], + ); + + expect(taskStatuses.get("task-1")).toBe("completed"); + expect(calls).toHaveLength(3); + expect(getSystemText(calls[1])).toContain( + "Tasks: 1/3 completed, 2 remaining.", + ); + }); + + it("does not stop on plan tasks that were already resolved", async () => { + const calls = await runAgent( + createScriptedModel([ + { input: { path: "a.ts" }, toolName: "read" }, + { input: { path: "b.ts" }, toolName: "read" }, + ]), + [{ id: "task-1", status: "completed" }], + ); + + expect(calls).toHaveLength(3); + expect(getSystemText(calls[1])).toBe(BASE_INSTRUCTIONS); + }); + + it("gives the model one step to report after the last task resolves", async () => { + const reportCalls = await runAgent( + createScriptedModel([updateTask("task-1", "completed")]), + [{ id: "task-1", status: "in_progress" }], + ); + // The closing text answer ends the loop on its own. + expect(reportCalls).toHaveLength(2); + + const busyCalls = await runAgent( + createScriptedModel([ + updateTask("task-1", "completed"), + { input: { path: "a.ts" }, toolName: "read" }, + { input: { path: "b.ts" }, toolName: "read" }, + ]), + [{ id: "task-1", status: "in_progress" }], + ); + // A tool call in that step ends the run instead of continuing. + expect(busyCalls).toHaveLength(2); + }); +}); diff --git a/src/lib/ai/chat/runtime/thread-chat/index.test.ts b/src/lib/ai/chat/runtime/thread-chat/index.test.ts index 8aebde5a..a5e2fc88 100644 --- a/src/lib/ai/chat/runtime/thread-chat/index.test.ts +++ b/src/lib/ai/chat/runtime/thread-chat/index.test.ts @@ -1648,6 +1648,45 @@ describe("runThreadChat startup latency", () => { expect(aiTestState.prepared?.tools).toHaveProperty("github_search"); }); + it("passes the persisted plan task statuses to the agent", async () => { + const task = { + createdAt: new Date(), + description: null, + title: "Task", + updatedAt: new Date(), + }; + getThreadPlanState.mockImplementation(async () => ({ + pendingQuestionSet: null, + plan: { + audience: "technical", + createdAt: new Date(), + document: "# Plan", + goal: "Ship the feature", + id: "plan-1", + summary: "Current implementation plan", + tasks: [ + { ...task, id: "task-1", status: "completed" }, + { ...task, id: "task-2", status: "pending" }, + ], + threadId: "thread-1", + title: "Plan", + updatedAt: new Date(), + }, + })); + + await runThreadChat(createSubmitRequest(), "user-1"); + await waitForMockCall(createAgentUIStream); + + // Task tracking in the agent loop starts from these, so a continuation + // run does not treat the tasks it has not touched as resolved. + expect( + createAgentUIStream.mock.calls.at(-1)?.[0].options.planTasks, + ).toEqual([ + { id: "task-1", status: "completed" }, + { id: "task-2", status: "pending" }, + ]); + }); + it("keeps optional preflight fallback behavior non-fatal", async () => { getMemoryRuntimeState.mockImplementation(async () => ({ available: true, diff --git a/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts b/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts index decae9d2..7cb9ab15 100644 --- a/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts +++ b/src/lib/ai/chat/runtime/thread-chat/orchestrator.ts @@ -796,6 +796,12 @@ async function executeBootstrappedThreadRun(run: BootstrappedThreadRun) { mcpTools: mcpRuntime.tools, memoryRuntime, permissionMode, + planTasks: (planState.plan?.tasks ?? []).map( + ({ id, status }) => ({ + id, + status, + }), + ), promptContext, preferredProjectRoot: projectAwareness.preferredProjectRoot, resolvedModelId: resolvedModel.responseModelId, From 2eb0174ec63c12848f08692eaddf7c8320adba6e Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 12:01:51 +0000 Subject: [PATCH 015/133] fix(providers): turn off xAI response storage and pin OpenAI tool strictness xAI: @ai-sdk/xai 5 only has the Responses API, whose `store` option defaults to true. xAI then stores prompts and responses for later retrieval, and Zero Data Retention teams get an API error. Sentinel's earlier Chat Completions path stored nothing and Sentinel never reads stored responses back. createProviderLanguageModel now wraps xAI models in defaultSettingsMiddleware with providerOptions.xai.store = false, so every caller gets it (the agent, routing, titles, memory, commit messages). With store off the provider also requests reasoning.encrypted_content, so reasoning still round-trips. A per-call xai option still wins. OpenAI/Azure strict tools (decision, no runtime change): AI SDK 7 sends Responses function tools with `strict: false` unless a tool opts in. AI SDK 6 omitted the field. The Responses API then tried strict mode when a schema looked compatible and normalised it, which made optional parameters arrive as "" (vercel/ai#11869, fixed by vercel/ai#15889). That omitted-field behaviour cannot be reproduced from the client, and sending strict: true has no non-strict fallback (an unsupported keyword fails the whole request) and would also switch on strict tools for Anthropic and others. So Sentinel keeps strict: false. A factory test pins the value sent for OpenAI and Azure so a provider bump cannot change it silently. Tests stub fetch and check the request bodies: xAI sends store false and the encrypted reasoning include (fails without the wrapper), and OpenAI and Azure send strict: false. The agent and thread-chat tests that mock 'ai' by name now also export defaultSettingsMiddleware and wrapLanguageModel. Gate G0: frozen install ok, typecheck ok, 192/192 test files pass, format ok, tripwires clean (14 active). Co-Authored-By: Claude Opus 5.5 --- src/lib/ai/chat/agent/index.test.ts | 5 ++ .../ai/chat/runtime/thread-chat/index.test.ts | 5 ++ src/lib/ai/providers/factory.test.ts | 86 ++++++++++++++++++- src/lib/ai/providers/factory.ts | 25 +++++- 4 files changed, 118 insertions(+), 3 deletions(-) diff --git a/src/lib/ai/chat/agent/index.test.ts b/src/lib/ai/chat/agent/index.test.ts index 440649c4..a13a08fe 100644 --- a/src/lib/ai/chat/agent/index.test.ts +++ b/src/lib/ai/chat/agent/index.test.ts @@ -92,6 +92,9 @@ const createGateway = mock(() => ({ imageModel: () => ({}), })); const validateUIMessages = mock(async ({ messages }) => messages); +// The provider factory wraps xAI models in a default-settings middleware. +const defaultSettingsMiddleware = mock((options) => options); +const wrapLanguageModel = mock(({ model }) => model); class MockToolLoopAgent { constructor(config) { @@ -102,6 +105,7 @@ class MockToolLoopAgent { mock.module("ai", () => ({ Output, createGateway, + defaultSettingsMiddleware, experimental_generateVideo, generateImage, generateText, @@ -110,6 +114,7 @@ mock.module("ai", () => ({ tool, ToolLoopAgent: MockToolLoopAgent, validateUIMessages, + wrapLanguageModel, })); mock.module("server-only", () => ({})); diff --git a/src/lib/ai/chat/runtime/thread-chat/index.test.ts b/src/lib/ai/chat/runtime/thread-chat/index.test.ts index a5e2fc88..88d9e4e2 100644 --- a/src/lib/ai/chat/runtime/thread-chat/index.test.ts +++ b/src/lib/ai/chat/runtime/thread-chat/index.test.ts @@ -49,6 +49,9 @@ const createGateway = mock((_options = {}) => ({ modelId, })), })); +// The provider factory wraps xAI models in a default-settings middleware. +const defaultSettingsMiddleware = mock((options) => options); +const wrapLanguageModel = mock(({ model }) => model); const createUIMessageStream = mock(({ execute, onEnd }) => { const writer = { merge: mock(() => {}), @@ -429,6 +432,7 @@ mock.module("ai", () => ({ createGateway, createUIMessageStream, createUIMessageStreamResponse, + defaultSettingsMiddleware, experimental_generateVideo, generateImage, generateText, @@ -440,6 +444,7 @@ mock.module("ai", () => ({ tool, ToolLoopAgent: MockToolLoopAgent, validateUIMessages, + wrapLanguageModel, })); mock.module("server-only", () => ({})); diff --git a/src/lib/ai/providers/factory.test.ts b/src/lib/ai/providers/factory.test.ts index f221514d..9f59ce96 100644 --- a/src/lib/ai/providers/factory.test.ts +++ b/src/lib/ai/providers/factory.test.ts @@ -1,10 +1,47 @@ -import { describe, expect, it, mock } from "bun:test"; +import { afterEach, describe, expect, it, mock } from "bun:test"; +import { generateText, tool, type LanguageModel } from "ai"; +import { z } from "zod"; mock.module("server-only", () => ({})); const { createProviderInstance, createProviderLanguageModel } = await import("./factory"); +const originalFetch = globalThis.fetch; + +afterEach(() => { + globalThis.fetch = originalFetch; +}); + +// Sends one request through the real provider and returns the JSON body it +// posted. The stubbed API answers with an error; only the request matters. +async function captureRequestBody(model: unknown) { + let body: Record | undefined; + globalThis.fetch = (async (_input: unknown, init?: RequestInit) => { + body = JSON.parse(String(init?.body)); + return new Response(JSON.stringify({ error: { message: "stubbed" } }), { + headers: { "content-type": "application/json" }, + status: 400, + }); + }) as unknown as typeof fetch; + + await generateText({ + maxRetries: 0, + model: model as LanguageModel, + prompt: "List the files.", + tools: { + list: tool({ + inputSchema: z.object({ + path: z.string(), + recursive: z.boolean().optional(), + }), + }), + }, + }).catch(() => undefined); + + return body; +} + describe("createProviderInstance", () => { it("creates native Black Forest Labs, Fal, and Replicate providers", () => { const blackForestLabs = createProviderInstance("black_forest_labs", { @@ -107,3 +144,50 @@ describe("createProviderLanguageModel", () => { expect(xai.provider).toBe("xai.responses"); }); }); + +describe("provider request defaults", () => { + it("turns off xAI response storage", async () => { + const body = await captureRequestBody( + createProviderLanguageModel("xai", { apiKey: "xai-key" }, "grok-4"), + ); + + expect(body).toMatchObject({ + include: ["reasoning.encrypted_content"], + model: "grok-4", + store: false, + }); + }); + + // AI SDK 6 left `strict` out, and the Responses API then applied its own + // strict schema normalisation, which filled optional parameters with "". + // AI SDK 7 sends strict: false unless a tool opts in; Sentinel keeps that. + it("sends OpenAI and Azure Responses function tools as non-strict", async () => { + const openaiBody = await captureRequestBody( + createProviderLanguageModel( + "openai", + { apiKey: "openai-key" }, + "gpt-5.2", + ), + ); + const azureBody = await captureRequestBody( + createProviderLanguageModel( + "azure", + { + apiKey: "azure-key", + baseURL: "https://sentinel-test.openai.azure.com/openai", + }, + "gpt-5.2", + ), + ); + + for (const body of [openaiBody, azureBody]) { + expect(body?.tools).toEqual([ + expect.objectContaining({ + name: "list", + strict: false, + type: "function", + }), + ]); + } + }); +}); diff --git a/src/lib/ai/providers/factory.ts b/src/lib/ai/providers/factory.ts index 0c741731..cdaa0c4b 100644 --- a/src/lib/ai/providers/factory.ts +++ b/src/lib/ai/providers/factory.ts @@ -17,7 +17,11 @@ import { createMoonshotAI } from "@ai-sdk/moonshotai"; import { createOpenAI } from "@ai-sdk/openai"; import { createReplicate } from "@ai-sdk/replicate"; import { createXai } from "@ai-sdk/xai"; -import { createGateway } from "ai"; +import { + createGateway, + defaultSettingsMiddleware, + wrapLanguageModel, +} from "ai"; import { createOpenRouter } from "@openrouter/ai-sdk-provider"; import type { AIProvider } from "@/server/db/enums"; @@ -77,7 +81,24 @@ export function createProviderLanguageModel( return createOllamaProvider(config as OllamaConfig).chat(modelId); } - return createProviderInstance(provider, config).languageModel(modelId); + const languageModel = createProviderInstance(provider, config).languageModel( + modelId, + ); + + // @ai-sdk/xai 5 only has the Responses API, which stores prompts and + // responses on xAI's servers for later retrieval unless `store` is false + // (and errors for Zero Data Retention teams). The Chat Completions path + // Sentinel used before stored nothing, and Sentinel never reads them back. + if (provider === "xai") { + return wrapLanguageModel({ + middleware: defaultSettingsMiddleware({ + settings: { providerOptions: { xai: { store: false } } }, + }), + model: languageModel, + }); + } + + return languageModel; } export function createProviderInstance( From 0b9ed152ce7879e0444891d94143df9fc7955a6d Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 12:03:01 +0000 Subject: [PATCH 016/133] fix(video): pass the polling timeout through generateVideo's poll option AI SDK 7 runs the start/status polling for xAI, Kling AI and ByteDance video models itself (experimental_generateVideo's `poll`). The providers now ignore pollTimeoutMs in providerOptions, and ByteDance also returns a "deprecated setting" warning that generate_video copied into the tool output shown to the user and the model. buildVideoProviderOptions becomes buildVideoPollOptions and passes poll: { timeoutMs: 600_000 } for those three providers. That is the SDK default today, so timing does not change, but the setting is live again and the warning is gone. These video models have no doGenerate, so passing poll does not change which flow the SDK picks. Other providers get no poll option, as before. The video test now checks the poll option and that no providerOptions are sent. Gate G0: frozen install ok, typecheck ok, 192/192 test files pass, format ok, tripwires clean (14 active). Co-Authored-By: Claude Opus 5.5 --- src/lib/ai/chat/tools/generate-video.test.ts | 13 +++++++++---- src/lib/ai/chat/tools/generate-video.ts | 17 +++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/lib/ai/chat/tools/generate-video.test.ts b/src/lib/ai/chat/tools/generate-video.test.ts index 0912b712..3671018e 100644 --- a/src/lib/ai/chat/tools/generate-video.test.ts +++ b/src/lib/ai/chat/tools/generate-video.test.ts @@ -319,7 +319,7 @@ describe("executeGenerateVideo", () => { ); }); - it("applies documented provider defaults for xAI, Kling AI, and ByteDance polling", async () => { + it("sets the polling timeout for xAI, Kling AI, and ByteDance through the AI SDK", async () => { await executeGenerateVideo({ input: { count: 1, @@ -353,21 +353,26 @@ describe("executeGenerateVideo", () => { expect(generateVideoMock).toHaveBeenNthCalledWith( 1, expect.objectContaining({ - providerOptions: { xai: { pollTimeoutMs: 600000 } }, + poll: { timeoutMs: 600000 }, }), ); expect(generateVideoMock).toHaveBeenNthCalledWith( 2, expect.objectContaining({ - providerOptions: { klingai: { pollTimeoutMs: 600000 } }, + poll: { timeoutMs: 600000 }, }), ); expect(generateVideoMock).toHaveBeenNthCalledWith( 3, expect.objectContaining({ - providerOptions: { bytedance: { pollTimeoutMs: 600000 } }, + poll: { timeoutMs: 600000 }, }), ); + // AI SDK 7 video providers ignore pollTimeoutMs in providerOptions, and + // ByteDance reports it as a deprecated setting in the tool output. + for (const [args] of generateVideoMock.mock.calls) { + expect(args).not.toHaveProperty("providerOptions"); + } }); it("rejects invalid single-provider model overrides", async () => { diff --git a/src/lib/ai/chat/tools/generate-video.ts b/src/lib/ai/chat/tools/generate-video.ts index 3df5fd68..9e77fabd 100644 --- a/src/lib/ai/chat/tools/generate-video.ts +++ b/src/lib/ai/chat/tools/generate-video.ts @@ -341,16 +341,17 @@ function assertVideoModelSupportsInput({ } } -function buildVideoProviderOptions( +// These providers start a job and poll for it. AI SDK 7 runs that polling +// itself, so the timeout goes in `poll`; the providers ignore (and ByteDance +// warns about) the old `pollTimeoutMs` provider option. +function buildVideoPollOptions( provider: AIProvider, -): Parameters[0]["providerOptions"] { +): Parameters[0]["poll"] { switch (provider) { case "bytedance": - return { bytedance: { pollTimeoutMs: 600_000 } }; case "klingai": - return { klingai: { pollTimeoutMs: 600_000 } }; case "xai": - return { xai: { pollTimeoutMs: 600_000 } }; + return { timeoutMs: 600_000 }; default: return undefined; } @@ -391,7 +392,7 @@ async function executeTarget({ const model = getVideoModel(providerInstance, entry.modelId) as Parameters< typeof generateVideo >[0]["model"]; - const providerOptions = buildVideoProviderOptions(entry.provider); + const poll = buildVideoPollOptions(entry.provider); const result = await generateVideo({ abortSignal, aspectRatio: input.aspectRatio as `${number}:${number}` | undefined, @@ -405,7 +406,7 @@ async function executeTarget({ text: input.prompt.trim(), } : input.prompt.trim(), - ...(providerOptions ? { providerOptions } : {}), + ...(poll ? { poll } : {}), resolution: input.resolution as `${number}x${number}` | undefined, ...(input.seed !== undefined ? { seed: input.seed } : {}), }); @@ -541,6 +542,6 @@ export function toGenerateVideoModelOutput(output: GenerateVideoOutput) { export const __internal = { MAX_VIDEO_GENERATION_TOTAL_VIDEOS, VIDEO_ARTIFACT_PATH_PLACEHOLDER, - buildVideoProviderOptions, + buildVideoPollOptions, resolveTargets, }; From 903705b3ab1dd5f0a1c0a946b3c0a173d61b2740 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 09:43:12 +0000 Subject: [PATCH 017/133] build(deps): upgrade to Next 16.4 and React 19.3 - next 16.4.0, react/react-dom 19.3.0, @types/react(-dom) 19.3.0 - next.config.js: drop the eslint key (removed in Next 16) and set compress: false; this is a loopback desktop app and Next's compression buffers streamed responses (the chat resume SSE route already forced Content-Encoding: none; the planned tRPC SSE subscription needs the same) - next.config.js: agentRules: false; Next 16 `next dev` otherwise writes a managed AGENTS.md into the repo root whenever it detects a coding agent - dev/dev:desktop: drop --turbo, Turbopack is the Next 16 dev default - scripts/next-build.mjs: production builds pass --webpack (decision D6: Turbopack standalone output with serverExternalPackages can emit aliased externals/symlinks that break desktop packaging); SENTINEL_NEXT_BUNDLER=turbopack opts into Turbopack - tripwires: --turbo in package.json, eslint key in next.config Audit: request APIs are already async, the only parallel slot (@settings) has default.tsx, no middleware, images, revalidateTag, runtime config, AMP or process.argv checks; no global smooth scroll-behavior, so no data-scroll-behavior. React 19.3 StrictMode double-invokes effects during hydration in dev; the thread session store refcounts subscribers and aborts the superseded SSE fetch, so only one stream stays open. Hold: next dev/build rewrite tsconfig.json (mandatory jsx: react-jsx, plus .next/dev/types in include); tsconfig is owned by the TS 6 lane, so those edits are left for it. Gate G0: frozen install ok, typecheck ok, 183/183 test files pass, format ok, tripwires clean (3 active). next build --webpack and an isolated next dev (port 3300) verified at the lane tip. Co-Authored-By: Claude Opus 5.5 --- bun.lock | 278 ++++++++++++++++++++++++++++++----- next.config.js | 9 +- package.json | 14 +- scripts/next-build.mjs | 10 +- scripts/verify/tripwires.mjs | 12 ++ 5 files changed, 276 insertions(+), 47 deletions(-) diff --git a/bun.lock b/bun.lock index d117ba20..7244b4c9 100644 --- a/bun.lock +++ b/bun.lock @@ -73,15 +73,15 @@ "mongodb": "^7.7.0", "motion": "^14.0.0", "mysql2": "^3.24.5", - "next": "^15.2.3", + "next": "^16.4.0", "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", "officeparser": "^6.1.1", "pg": "^8.23.1", "ppt": "^0.0.2", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", @@ -104,8 +104,8 @@ "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", "@types/pg": "^8.23.1", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "concurrently": "^10.0.5", "drizzle-kit": "^0.31.11", "electron": "40.8.0", @@ -245,7 +245,7 @@ "@electron/windows-sign": ["@electron/windows-sign@1.2.2", "", { "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", "fs-extra": "^11.1.1", "minimist": "^1.2.8", "postject": "^1.0.0-alpha.6" }, "bin": { "electron-windows-sign": "bin/electron-windows-sign.js" } }, "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ=="], - "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], @@ -369,6 +369,8 @@ "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.5", "", { "dependencies": { "@img/sharp-wasm32": "0.35.5" }, "os": "freebsd" }, "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], @@ -377,11 +379,11 @@ "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], - "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], @@ -393,11 +395,11 @@ "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], - "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], @@ -405,11 +407,13 @@ "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.5", "", { "dependencies": { "@emnapi/runtime": "^1.11.3" } }, "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ=="], + + "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.5", "", { "dependencies": { "@img/sharp-wasm32": "0.35.5" }, "cpu": "none" }, "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA=="], "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A=="], "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], @@ -469,23 +473,23 @@ "@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.100", "", { "os": "win32", "cpu": "x64" }, "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA=="], - "@next/env": ["@next/env@15.5.12", "", {}, "sha512-pUvdJN1on574wQHjaBfNGDt9Mz5utDSZFsIIQkMzPgNS8ZvT4H2mwOrOIClwsQOb6EGx5M76/CZr6G8i6pSpLg=="], + "@next/env": ["@next/env@16.4.0", "", {}, "sha512-pyLlT5oafGlX8X7xjgGNXz5dNIDSxREm+qD6i9VLSZiZFopA/XWl8NM/KPmLx/8EG/++c49iid3gNWSQW1+2dQ=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RnRjBtH8S8eXCpUNkQ+543DUc7ys8y15VxmFU9HRqlo9BG3CcBUiwNtF8SNoi2xvGCVJq1vl2yYq+3oISBS0Zg=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.4.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-yyZ+9MgViAKLLb5l1gPBGjRwnq3teNLb5Zx6JEw8LzNSTjlsnp+baUHFxTgl7PpjCmKf48VQfyipG1eBflb48Q=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-nqa9/7iQlboF1EFtNhWxQA0rQstmYRSBGxSM6g3GxvxHxcoeqVXfGNr9stJOme674m2V7r4E3+jEhhGvSQhJRA=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.4.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-RePEEejEj1Auf5s9qEcG0JbcDP3ceNUS/ofNX8AhxzgIjTVlZIHMatlp16YplcSMpsVo/ZMQHJTjbMYJznjGUg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-dCzAjqhDHwmoB2M4eYfVKqXs99QdQxNQVpftvP1eGVppamXh/OkDAwV737Zr0KPXEqRUMN4uCjh6mjO+XtF3Mw=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.4.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-HhsyCqd+NpmvDDVY/LqkAN24f+QVvXh3ie+PfcwKinWL2Mu826JymQxJXGjAIfmJ4VlHjp4Pe/nZtXtUoEMAqw=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-+fpGWvQiITgf7PUtbWY1H7qUSnBZsPPLyyq03QuAKpVoTy/QUx1JptEDTQMVvQhvizCEuNLEeghrQUyXQOekuw=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.4.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-sN9Pf+Zh+RpZAOmbR7d8KAA8T61CVhawtbEJ2Bk6QrRzx6Z/6haaF4UiwBzytM96GRRRWZh9/WALIEO3npMamA=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.12", "", { "os": "linux", "cpu": "x64" }, "sha512-jSLvgdRRL/hrFAPqEjJf1fFguC719kmcptjNVDJl26BnJIpjL3KH5h6mzR4mAweociLQaqvt4UyzfbFjgAdDcw=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.4.0", "", { "os": "linux", "cpu": "x64" }, "sha512-D5M5xLWQVd1CvR+L7BickM1weRfmM41x3L1NWcnKY/oyJJqr1qwaCgmu3dMAhLBOMdZwSuDCRV6DJRRpiUkbDQ=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.12", "", { "os": "linux", "cpu": "x64" }, "sha512-/uaF0WfmYqQgLfPmN6BvULwxY0dufI2mlN2JbOKqqceZh1G4hjREyi7pg03zjfyS6eqNemHAZPSoP84x17vo6w=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.4.0", "", { "os": "linux", "cpu": "x64" }, "sha512-8d5WLS6a9YalqpOgXdlbvonFu+sIgjA+CO6tGzetrpPVcUL56foa7B7664h41rAlbLi5fJwK4vWji3zf4QDy+w=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-xhsL1OvQSfGmlL5RbOmU+FV120urrgFpYLq+6U8C6KIym32gZT6XF/SDE92jKzzlPWskkbjOKCpqk5m4i8PEfg=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.4.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-sQuOIiW3snb48UwrBcDMvFA/u03qtw2LeuSIxFIQ9AJuW9UG/4Ddsfo+eV73PnZwBhyncMtsKVh7PrzMol2/fA=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.12", "", { "os": "win32", "cpu": "x64" }, "sha512-Z1Dh6lhFkxvBDH1FoW6OU/L6prYwPSlwjLiZkExIAh8fbP6iI/M7iGTQAJPYJ9YFlWobCZ1PHbchFhFYb2ADkw=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.4.0", "", { "os": "win32", "cpu": "x64" }, "sha512-6/33lCuxpdHUy27RegyGM/5uTpF7YZd3UR4D0gpkOA/tWY5YR7msbQjqPgCZmSmxrrTLGCXYA4A8vT2H5DPGTQ=="], "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], @@ -841,7 +845,7 @@ "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + "@swc/helpers": ["@swc/helpers@0.5.23", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw=="], "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], @@ -981,9 +985,9 @@ "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], - "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], + "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], - "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], @@ -1065,6 +1069,8 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.27", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ=="], + "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], "better-sqlite3": ["better-sqlite3@12.6.2", "", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA=="], @@ -1775,7 +1781,7 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@15.5.12", "", { "dependencies": { "@next/env": "15.5.12", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.12", "@next/swc-darwin-x64": "15.5.12", "@next/swc-linux-arm64-gnu": "15.5.12", "@next/swc-linux-arm64-musl": "15.5.12", "@next/swc-linux-x64-gnu": "15.5.12", "@next/swc-linux-x64-musl": "15.5.12", "@next/swc-win32-arm64-msvc": "15.5.12", "@next/swc-win32-x64-msvc": "15.5.12", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-Fi/wQ4Etlrn60rz78bebG1i1SR20QxvV8tVp6iJspjLUSHcZoeUXCt+vmWoEcza85ElZzExK/jJ/F6SvtGktjA=="], + "next": ["next@16.4.0", "", { "dependencies": { "@next/env": "16.4.0", "@swc/helpers": "0.5.23", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.5.23", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.4.0", "@next/swc-darwin-x64": "16.4.0", "@next/swc-linux-arm64-gnu": "16.4.0", "@next/swc-linux-arm64-musl": "16.4.0", "@next/swc-linux-x64-gnu": "16.4.0", "@next/swc-linux-x64-musl": "16.4.0", "@next/swc-win32-arm64-msvc": "16.4.0", "@next/swc-win32-x64-msvc": "16.4.0", "sharp": "^0.35.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-N2C+9q89Z/oLrsepSRS4jRMtwmUZAoZuAHU0e9T6+sAB5DdhADmrnOW+zjYijlrYFmVfmQhGVGy9eMFoB7UgKg=="], "node-abi": ["node-abi@3.87.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ=="], @@ -1953,13 +1959,13 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + "react": ["react@19.3.0", "", {}, "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog=="], "react-aria": ["react-aria@3.47.0", "", { "dependencies": { "@internationalized/string": "^3.2.7", "@react-aria/breadcrumbs": "^3.5.32", "@react-aria/button": "^3.14.5", "@react-aria/calendar": "^3.9.5", "@react-aria/checkbox": "^3.16.5", "@react-aria/color": "^3.1.5", "@react-aria/combobox": "^3.15.0", "@react-aria/datepicker": "^3.16.1", "@react-aria/dialog": "^3.5.34", "@react-aria/disclosure": "^3.1.3", "@react-aria/dnd": "^3.11.6", "@react-aria/focus": "^3.21.5", "@react-aria/gridlist": "^3.14.4", "@react-aria/i18n": "^3.12.16", "@react-aria/interactions": "^3.27.1", "@react-aria/label": "^3.7.25", "@react-aria/landmark": "^3.0.10", "@react-aria/link": "^3.8.9", "@react-aria/listbox": "^3.15.3", "@react-aria/menu": "^3.21.0", "@react-aria/meter": "^3.4.30", "@react-aria/numberfield": "^3.12.5", "@react-aria/overlays": "^3.31.2", "@react-aria/progress": "^3.4.30", "@react-aria/radio": "^3.12.5", "@react-aria/searchfield": "^3.8.12", "@react-aria/select": "^3.17.3", "@react-aria/selection": "^3.27.2", "@react-aria/separator": "^3.4.16", "@react-aria/slider": "^3.8.5", "@react-aria/ssr": "^3.9.10", "@react-aria/switch": "^3.7.11", "@react-aria/table": "^3.17.11", "@react-aria/tabs": "^3.11.1", "@react-aria/tag": "^3.8.1", "@react-aria/textfield": "^3.18.5", "@react-aria/toast": "^3.0.11", "@react-aria/tooltip": "^3.9.2", "@react-aria/tree": "^3.1.7", "@react-aria/utils": "^3.33.1", "@react-aria/visually-hidden": "^3.8.31", "@react-types/shared": "^3.33.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-nvahimIqdByl/PXk/xPkG30LPRzcin+/Uk0uFfwbbKRRFC9aa22a6BRULZLqVHwa9GaNyKe6CDUxO1Dde4v0kA=="], "react-aria-components": ["react-aria-components@1.16.0", "", { "dependencies": { "@internationalized/date": "^3.12.0", "@internationalized/string": "^3.2.7", "@react-aria/autocomplete": "3.0.0-rc.6", "@react-aria/collections": "^3.0.3", "@react-aria/dnd": "^3.11.6", "@react-aria/focus": "^3.21.5", "@react-aria/interactions": "^3.27.1", "@react-aria/live-announcer": "^3.4.4", "@react-aria/overlays": "^3.31.2", "@react-aria/ssr": "^3.9.10", "@react-aria/textfield": "^3.18.5", "@react-aria/toolbar": "3.0.0-beta.24", "@react-aria/utils": "^3.33.1", "@react-aria/virtualizer": "^4.1.13", "@react-stately/autocomplete": "3.0.0-beta.4", "@react-stately/layout": "^4.6.0", "@react-stately/selection": "^3.20.9", "@react-stately/table": "^3.15.4", "@react-stately/utils": "^3.11.0", "@react-stately/virtualizer": "^4.4.6", "@react-types/form": "^3.7.18", "@react-types/grid": "^3.3.8", "@react-types/shared": "^3.33.1", "@react-types/table": "^3.13.6", "@swc/helpers": "^0.5.0", "client-only": "^0.0.1", "react-aria": "^3.47.0", "react-stately": "^3.45.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-MjHbTLpMFzzD2Tv5KbeXoZwPczuUWZcRavVvQQlNHRtXHH38D+sToMEYpNeir7Wh3K/XWtzeX3EujfJW6QNkrw=="], - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + "react-dom": ["react-dom@19.3.0", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.0" } }, "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q=="], "react-hook-form": ["react-hook-form@7.89.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-vKcoCfy8RKZDrhSdqsRFp0uEOdS1AhLjOL6hR7Wmfzg1akNxEhaPf5WORx8SgEQPVXakdDyDkqQp+KNxVnnPHg=="], @@ -2037,7 +2043,7 @@ "saxes": ["saxes@5.0.1", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "scheduler": ["scheduler@0.28.0", "", {}, "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw=="], "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], @@ -2049,7 +2055,7 @@ "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + "sharp": ["sharp@0.35.5", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.5", "@img/sharp-darwin-x64": "0.35.5", "@img/sharp-freebsd-wasm32": "0.35.5", "@img/sharp-libvips-darwin-arm64": "1.3.4", "@img/sharp-libvips-darwin-x64": "1.3.4", "@img/sharp-libvips-linux-arm": "1.3.4", "@img/sharp-libvips-linux-arm64": "1.3.4", "@img/sharp-libvips-linux-ppc64": "1.3.4", "@img/sharp-libvips-linux-riscv64": "1.3.4", "@img/sharp-libvips-linux-s390x": "1.3.4", "@img/sharp-libvips-linux-x64": "1.3.4", "@img/sharp-libvips-linuxmusl-arm64": "1.3.4", "@img/sharp-libvips-linuxmusl-x64": "1.3.4", "@img/sharp-linux-arm": "0.35.5", "@img/sharp-linux-arm64": "0.35.5", "@img/sharp-linux-ppc64": "0.35.5", "@img/sharp-linux-riscv64": "0.35.5", "@img/sharp-linux-s390x": "0.35.5", "@img/sharp-linux-x64": "0.35.5", "@img/sharp-linuxmusl-arm64": "0.35.5", "@img/sharp-linuxmusl-x64": "0.35.5", "@img/sharp-webcontainers-wasm32": "0.35.5", "@img/sharp-win32-arm64": "0.35.5", "@img/sharp-win32-ia32": "0.35.5", "@img/sharp-win32-x64": "0.35.5" } }, "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -2355,6 +2361,14 @@ "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], + "@internationalized/date/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@internationalized/message/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@internationalized/number/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@internationalized/string/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], @@ -2387,6 +2401,166 @@ "@radix-ui/react-slider/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + "@react-aria/autocomplete/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/breadcrumbs/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/button/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/calendar/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/checkbox/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/collections/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/color/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/combobox/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/datepicker/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/dialog/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/disclosure/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/dnd/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/focus/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/form/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/grid/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/gridlist/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/i18n/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/interactions/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/label/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/landmark/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/link/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/listbox/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/live-announcer/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/menu/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/meter/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/numberfield/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/overlays/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/progress/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/radio/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/searchfield/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/select/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/selection/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/separator/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/slider/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/spinbutton/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/ssr/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/switch/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/table/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/tabs/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/tag/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/textfield/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/toast/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/toggle/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/toolbar/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/tooltip/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/tree/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/utils/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/virtualizer/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-aria/visually-hidden/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/autocomplete/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/calendar/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/checkbox/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/collections/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/color/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/combobox/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/data/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/datepicker/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/disclosure/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/dnd/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/flags/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/form/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/grid/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/layout/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/list/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/menu/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/numberfield/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/overlays/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/radio/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/searchfield/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/select/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/selection/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/slider/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/table/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/tabs/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/toast/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/toggle/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/tooltip/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/tree/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/utils/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@react-stately/virtualizer/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + "@shikijs/core/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "@shikijs/primitive/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], @@ -2523,7 +2697,7 @@ "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + "next/postcss": ["postcss@8.5.23", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg=="], "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -2579,6 +2753,8 @@ "prosemirror-tables/prosemirror-view": ["prosemirror-view@1.41.6", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg=="], + "react-aria-components/@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + "react-video-kit/tailwind-merge": ["tailwind-merge@2.6.1", "", {}, "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ=="], "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], @@ -2589,6 +2765,40 @@ "rtf-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "sharp/@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg=="], + + "sharp/@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.4" }, "os": "darwin", "cpu": "x64" }, "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw=="], + + "sharp/@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw=="], + + "sharp/@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ=="], + + "sharp/@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], + + "sharp/@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], + + "sharp/@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], + + "sharp/@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], + + "sharp/@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], + + "sharp/@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], + + "sharp/@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], + + "sharp/@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], + + "sharp/@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], + + "sharp/@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], + + "sharp/@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q=="], + + "sharp/@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.5", "", { "os": "win32", "cpu": "x64" }, "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg=="], + + "sharp/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + "shiki/@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "sileo/motion": ["motion@12.35.0", "", { "dependencies": { "framer-motion": "^12.35.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-BQUhNUIGvUcwXCzwmnT1JpjUqab34lIwxHnXUyWRht1WC1vAyp7/4qgMiUXxN3K6hgUhyoR+HNnLeQMwUZjVjw=="], @@ -2779,10 +2989,6 @@ "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "next/postcss/source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], diff --git a/next.config.js b/next.config.js index 27d44bcc..27fd3e0d 100644 --- a/next.config.js +++ b/next.config.js @@ -15,9 +15,12 @@ const projectRoot = path.dirname(fileURLToPath(import.meta.url)); /** @type {import("next").NextConfig} */ const config = { - eslint: { - ignoreDuringBuilds: true, - }, + // Next 16 `next dev` writes a managed AGENTS.md into the repo when it detects + // a coding agent; keep dev runs from dirtying the working tree. + agentRules: false, + // Loopback desktop app: gzip buys nothing and Next's compression buffers + // streamed responses (SSE chat resumes, tRPC subscriptions). + compress: false, output: "standalone", outputFileTracingRoot: projectRoot, outputFileTracingIncludes: { diff --git a/package.json b/package.json index 4654ec6a..d3a3755a 100644 --- a/package.json +++ b/package.json @@ -29,13 +29,13 @@ "build:desktop:prepare": "bun run ./scripts/desktop/clean.mjs && bun run ./scripts/desktop/normalize-node-module-manifests.mjs && bun run build && bun run ./scripts/desktop/prepare-production.mjs && bun run ./scripts/desktop/prune-server.mjs && bun run ./scripts/desktop/prepare-shell.mjs", "build:desktop:windows": "bun run build:desktop:prepare && node ./scripts/desktop/package.mjs --platform win --target nsis", "audit:desktop-bundle": "node ./scripts/desktop/audit-bundle.mjs", - "dev:desktop": "node ./scripts/rebuild-node-native.mjs && concurrently -k \"next dev --turbo --port 3232\" \"bun run ./scripts/desktop/dev-launch.mjs\"", + "dev:desktop": "node ./scripts/rebuild-node-native.mjs && concurrently -k \"next dev --port 3232\" \"bun run ./scripts/desktop/dev-launch.mjs\"", "format": "prettier --write .", "format:check": "prettier --check .", "db:push": "node -e \"require('esbuild-register'); require('./scripts/db/push.ts')\"", "db:generate": "bun x drizzle-kit generate", "db:studio": "bun x drizzle-kit studio", - "dev": "node ./scripts/rebuild-node-native.mjs && next dev --turbo", + "dev": "node ./scripts/rebuild-node-native.mjs && next dev", "preview": "node ./scripts/rebuild-node-native.mjs && node ./scripts/next-build.mjs && next start", "release:version:check": "node ./scripts/release/validate-release-version.mjs", "start": "node ./scripts/rebuild-node-native.mjs && next start", @@ -111,15 +111,15 @@ "mongodb": "^7.7.0", "motion": "^14.0.0", "mysql2": "^3.24.5", - "next": "^15.2.3", + "next": "^16.4.0", "node-pptx-parser": "^1.0.1", "node-pty": "^1.1.0", "node-xlsx": "^0.24.0", "officeparser": "^6.1.1", "pg": "^8.23.1", "ppt": "^0.0.2", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", "react-hook-form": "^7.89.0", "react-markdown": "^10.1.0", "react-video-kit": "^3.0.0", @@ -142,8 +142,8 @@ "@types/better-sqlite3": "^7.6.13", "@types/node": "^24.12.4", "@types/pg": "^8.23.1", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "concurrently": "^10.0.5", "drizzle-kit": "^0.31.11", "electron": "40.8.0", diff --git a/scripts/next-build.mjs b/scripts/next-build.mjs index ad9ff328..4ab614e1 100644 --- a/scripts/next-build.mjs +++ b/scripts/next-build.mjs @@ -53,7 +53,15 @@ if (process.platform === "win32") { env.HOMEPATH = buildHome.replace(/^[A-Za-z]:/, ""); } -const child = spawn(process.execPath, [nextBin, "build"], { +// Next 16 builds with Turbopack by default. Keep webpack for production until +// Turbopack's standalone output (aliased serverExternalPackages, symlinks) is +// verified against desktop packaging; SENTINEL_NEXT_BUNDLER=turbopack opts in. +const bundlerFlag = + process.env.SENTINEL_NEXT_BUNDLER === "turbopack" + ? "--turbopack" + : "--webpack"; + +const child = spawn(process.execPath, [nextBin, "build", bundlerFlag], { env, stdio: "inherit", }); diff --git a/scripts/verify/tripwires.mjs b/scripts/verify/tripwires.mjs index a56b0295..677f7a4c 100644 --- a/scripts/verify/tripwires.mjs +++ b/scripts/verify/tripwires.mjs @@ -111,6 +111,18 @@ export const TRIPWIRES = [ pattern: /\btoolResults?\b.*\.result\b|\bresult\??\.result\b/, include: /\.[cm]?[jt]sx?$/, }, + { + id: "P5-next-turbo-flag", + description: "Turbopack is the Next 16 dev default; --turbo is redundant", + pattern: /--turbo\b/, + include: /^(package\.json|scripts\/.*\.(c|m)?js|\.github\/.*\.ya?ml)$/, + }, + { + id: "P5-next-eslint-config", + description: "Next 16 removed the eslint key from next.config", + pattern: /(^|[{,\s])"?eslint"?\s*[:,}]/, + include: /^next\.config\.(c|m)?(j|t)s$/, + }, ]; const DEFAULT_EXCLUDE = From dd1bf84d967966850baea45b9356e12e61fc2689 Mon Sep 17 00:00:00 2001 From: Mohamed Achaq Date: Wed, 7 Oct 2026 10:10:45 +0000 Subject: [PATCH 018/133] build(deps): upgrade HeroUI to 3.2.6 - @heroui/react and @heroui/styles 3.2.6; 3.2.1+ no longer bundles react-aria, so its peers are now direct dependencies: react-aria 3.52.1, react-aria-components 1.21.1, @react-aria/ssr 3.10.1, @react-aria/utils 3.34.1, @internationalized/date 3.12.4 (single copy of each in bun.lock) - 3.2.0 makes Switch/Checkbox/Radio `*.Content` the clickable