diff --git a/apps/web-roo-code/src/components/chromes/nav-bar.tsx b/apps/web-roo-code/src/components/chromes/nav-bar.tsx
index fa51f081ce..046e3e0bd8 100644
--- a/apps/web-roo-code/src/components/chromes/nav-bar.tsx
+++ b/apps/web-roo-code/src/components/chromes/nav-bar.tsx
@@ -70,11 +70,6 @@ export function NavBar({ stars, downloads }: NavBarProps) {
{/* Dropdown Menu */}
-
- FAQ
-
diff --git a/apps/web-roo-code/src/lib/constants.ts b/apps/web-roo-code/src/lib/constants.ts
index 18d605107b..bcfc3e34ca 100644
--- a/apps/web-roo-code/src/lib/constants.ts
+++ b/apps/web-roo-code/src/lib/constants.ts
@@ -28,6 +28,7 @@ export const EXTERNAL_LINKS = {
CLOUD_APP_SIGNUP: "https://app.roocode.com/sign-up",
CLOUD_APP_SIGNUP_HOME: "https://app.roocode.com/sign-up?redirect_url=/cloud-agents/setup",
CLOUD_APP_SIGNUP_PRO: "https://app.roocode.com/sign-up?redirect_url=/cloud-agents/setup",
+ SUPPORT: "mailto:support@roocode.com",
}
export const INTERNAL_LINKS = {
diff --git a/packages/build/src/esbuild.ts b/packages/build/src/esbuild.ts
index 7d9705d09c..b6ebfc3f7d 100644
--- a/packages/build/src/esbuild.ts
+++ b/packages/build/src/esbuild.ts
@@ -164,6 +164,127 @@ export function copyWasms(srcDir: string, distDir: string): void {
})
console.log(`[copyWasms] Copied ${wasmFiles.length} tree-sitter language wasms to ${distDir}`)
+
+ // Copy esbuild-wasm files for custom tool transpilation (cross-platform).
+ copyEsbuildWasmFiles(nodeModulesDir, distDir)
+
+ // Copy @roo-code/types package for custom tool compilation.
+ // Note: @roo-code/types is built with zod bundled in, so we don't need to copy zod separately.
+ copyTypesPackage(srcDir, distDir)
+}
+
+/**
+ * Copy esbuild-wasm files to the dist/bin directory.
+ *
+ * This function copies the esbuild-wasm CLI and WASM binary, which provides
+ * a cross-platform esbuild implementation that works on all platforms.
+ *
+ * Files copied:
+ * - bin/esbuild (Node.js CLI script)
+ * - esbuild.wasm (WASM binary)
+ * - wasm_exec_node.js (Go WASM runtime for Node.js)
+ * - wasm_exec.js (Go WASM runtime dependency)
+ */
+function copyEsbuildWasmFiles(nodeModulesDir: string, distDir: string): void {
+ const esbuildWasmDir = path.join(nodeModulesDir, "esbuild-wasm")
+
+ if (!fs.existsSync(esbuildWasmDir)) {
+ throw new Error(`Directory does not exist: ${esbuildWasmDir}`)
+ }
+
+ // Create bin directory in dist.
+ const binDir = path.join(distDir, "bin")
+ fs.mkdirSync(binDir, { recursive: true })
+
+ // Files to copy - the esbuild CLI script expects wasm_exec_node.js and esbuild.wasm
+ // to be one directory level up from the bin directory (i.e., in distDir directly).
+ // wasm_exec_node.js requires wasm_exec.js, so we need to copy that too.
+ const filesToCopy = [
+ { src: path.join(esbuildWasmDir, "bin", "esbuild"), dest: path.join(binDir, "esbuild") },
+ { src: path.join(esbuildWasmDir, "esbuild.wasm"), dest: path.join(distDir, "esbuild.wasm") },
+ { src: path.join(esbuildWasmDir, "wasm_exec_node.js"), dest: path.join(distDir, "wasm_exec_node.js") },
+ { src: path.join(esbuildWasmDir, "wasm_exec.js"), dest: path.join(distDir, "wasm_exec.js") },
+ ]
+
+ for (const { src, dest } of filesToCopy) {
+ fs.copyFileSync(src, dest)
+
+ // Make CLI executable.
+ if (src.endsWith("esbuild")) {
+ try {
+ fs.chmodSync(dest, 0o755)
+ } catch {
+ // Ignore chmod errors on Windows.
+ }
+ }
+ }
+
+ console.log(`[copyWasms] Copied ${filesToCopy.length} esbuild-wasm files to ${distDir}`)
+}
+
+/**
+ * Copy @roo-code/types package files for custom tool compilation.
+ *
+ * This function copies the compiled @roo-code/types package so that custom tools
+ * can import it during runtime compilation. This enables users to write custom
+ * tools that use TypeScript and Zod schemas even after the extension is packaged.
+ *
+ * Files copied:
+ * - dist/index.js (ESM version)
+ * - dist/index.js.map (source map)
+ * - dist/index.d.ts (TypeScript definitions)
+ * - dist/index.cjs (CommonJS version)
+ * - dist/index.d.cts (CommonJS type definitions)
+ */
+function copyTypesPackage(srcDir: string, distDir: string): void {
+ // Find the types package - try multiple locations
+ const possiblePaths = [
+ // Monorepo packages directory (relative to src)
+ path.join(srcDir, "..", "packages", "types"),
+ // Parent's packages directory
+ path.join(srcDir, "..", "..", "packages", "types"),
+ ]
+
+ let typesPackageDir: string | null = null
+ for (const possiblePath of possiblePaths) {
+ if (fs.existsSync(possiblePath)) {
+ typesPackageDir = possiblePath
+ break
+ }
+ }
+
+ if (!typesPackageDir) {
+ throw new Error("Could not find @roo-code/types package directory")
+ }
+
+ const typesDistDir = path.join(typesPackageDir, "dist")
+ if (!fs.existsSync(typesDistDir)) {
+ throw new Error(`@roo-code/types dist directory does not exist: ${typesDistDir}. Run 'pnpm build' first.`)
+ }
+
+ // Create packages/types/dist directory structure in dist
+ const targetDir = path.join(distDir, "packages", "types", "dist")
+ fs.mkdirSync(targetDir, { recursive: true })
+
+ // Files to copy (exclude sourcemap files in production to reduce bundle size)
+ const filesToCopy = ["index.js", "index.d.ts", "index.cjs", "index.d.cts"]
+
+ let copiedCount = 0
+ for (const file of filesToCopy) {
+ const srcFile = path.join(typesDistDir, file)
+ const destFile = path.join(targetDir, file)
+
+ if (fs.existsSync(srcFile)) {
+ fs.copyFileSync(srcFile, destFile)
+ copiedCount++
+ }
+ }
+
+ if (copiedCount === 0) {
+ throw new Error(`No files copied from @roo-code/types dist directory: ${typesDistDir}`)
+ }
+
+ console.log(`[copyWasms] Copied ${copiedCount} @roo-code/types files to ${targetDir}`)
}
export function copyLocales(srcDir: string, distDir: string): void {
diff --git a/packages/core/eslint.config.mjs b/packages/core/eslint.config.mjs
new file mode 100644
index 0000000000..694bf73664
--- /dev/null
+++ b/packages/core/eslint.config.mjs
@@ -0,0 +1,4 @@
+import { config } from "@roo-code/config-eslint/base"
+
+/** @type {import("eslint").Linter.Config} */
+export default [...config]
diff --git a/packages/core/package.json b/packages/core/package.json
new file mode 100644
index 0000000000..5151d88d95
--- /dev/null
+++ b/packages/core/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@roo-code/core",
+ "description": "Platform agnostic core functionality for Roo Code.",
+ "version": "0.0.0",
+ "type": "module",
+ "exports": "./src/index.ts",
+ "scripts": {
+ "lint": "eslint src --ext=ts --max-warnings=0",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run",
+ "clean": "rimraf .turbo"
+ },
+ "dependencies": {
+ "@roo-code/types": "workspace:^",
+ "esbuild": "^0.25.0",
+ "execa": "^9.5.2",
+ "openai": "^5.12.2",
+ "zod": "^3.25.61"
+ },
+ "devDependencies": {
+ "@roo-code/config-eslint": "workspace:^",
+ "@roo-code/config-typescript": "workspace:^",
+ "@types/node": "^24.1.0",
+ "vitest": "^3.2.3"
+ }
+}
diff --git a/packages/core/src/custom-tools/__tests__/__snapshots__/format-native.spec.ts.snap b/packages/core/src/custom-tools/__tests__/__snapshots__/format-native.spec.ts.snap
new file mode 100644
index 0000000000..d4ca0b1683
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/__snapshots__/format-native.spec.ts.snap
@@ -0,0 +1,231 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`Native Protocol snapshots > should generate correct native definition for cached tool 1`] = `
+{
+ "function": {
+ "description": "Cached tool",
+ "name": "cached",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+}
+`;
+
+exports[`Native Protocol snapshots > should generate correct native definition for legacy tool (using args) 1`] = `
+{
+ "function": {
+ "description": "Legacy tool using args",
+ "name": "legacy",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "input": {
+ "description": "The input string",
+ "type": "string",
+ },
+ },
+ "required": [
+ "input",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+}
+`;
+
+exports[`Native Protocol snapshots > should generate correct native definition for mixed export tool 1`] = `
+{
+ "function": {
+ "description": "Valid",
+ "name": "mixed_validTool",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+}
+`;
+
+exports[`Native Protocol snapshots > should generate correct native definition for simple tool 1`] = `
+{
+ "function": {
+ "description": "Simple tool",
+ "name": "simple",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "value": {
+ "description": "The input value",
+ "type": "string",
+ },
+ },
+ "required": [
+ "value",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+}
+`;
+
+exports[`Native Protocol snapshots > should generate correct native definitions for all fixtures combined 1`] = `
+[
+ {
+ "function": {
+ "description": "Simple tool",
+ "name": "simple",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "value": {
+ "description": "The input value",
+ "type": "string",
+ },
+ },
+ "required": [
+ "value",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Cached tool",
+ "name": "cached",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Legacy tool using args",
+ "name": "legacy",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "input": {
+ "description": "The input string",
+ "type": "string",
+ },
+ },
+ "required": [
+ "input",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Tool A",
+ "name": "multi_toolA",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Tool B",
+ "name": "multi_toolB",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Valid",
+ "name": "mixed_validTool",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+]
+`;
+
+exports[`Native Protocol snapshots > should generate correct native definitions for multi export tools 1`] = `
+[
+ {
+ "function": {
+ "description": "Tool A",
+ "name": "multi_toolA",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+ {
+ "function": {
+ "description": "Tool B",
+ "name": "multi_toolB",
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object",
+ },
+ "source": undefined,
+ "strict": true,
+ },
+ "type": "function",
+ },
+]
+`;
diff --git a/packages/core/src/custom-tools/__tests__/__snapshots__/format-xml.spec.ts.snap b/packages/core/src/custom-tools/__tests__/__snapshots__/format-xml.spec.ts.snap
new file mode 100644
index 0000000000..b4503fa925
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/__snapshots__/format-xml.spec.ts.snap
@@ -0,0 +1,129 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`XML Protocol snapshots > should generate correct XML description for all fixtures combined 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## simple
+Description: Simple tool
+Parameters:
+- value: (required) The input value (type: string)
+Usage:
+
+value value here
+
+
+## cached
+Description: Cached tool
+Parameters:
+Usage:
+
+
+
+## legacy
+Description: Legacy tool using args
+Parameters:
+- input: (required) The input string (type: string)
+Usage:
+
+ input value here
+
+
+## multi_toolA
+Description: Tool A
+Parameters:
+Usage:
+
+
+
+## multi_toolB
+Description: Tool B
+Parameters:
+Usage:
+
+
+
+## mixed_validTool
+Description: Valid
+Parameters:
+Usage:
+
+ "
+`;
+
+exports[`XML Protocol snapshots > should generate correct XML description for cached tool 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## cached
+Description: Cached tool
+Parameters:
+Usage:
+
+ "
+`;
+
+exports[`XML Protocol snapshots > should generate correct XML description for legacy tool (using args) 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## legacy
+Description: Legacy tool using args
+Parameters:
+- input: (required) The input string (type: string)
+Usage:
+
+ input value here
+ "
+`;
+
+exports[`XML Protocol snapshots > should generate correct XML description for mixed export tool 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## mixed_validTool
+Description: Valid
+Parameters:
+Usage:
+
+ "
+`;
+
+exports[`XML Protocol snapshots > should generate correct XML description for multi export tools 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## multi_toolA
+Description: Tool A
+Parameters:
+Usage:
+
+
+
+## multi_toolB
+Description: Tool B
+Parameters:
+Usage:
+
+ "
+`;
+
+exports[`XML Protocol snapshots > should generate correct XML description for simple tool 1`] = `
+"# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+## simple
+Description: Simple tool
+Parameters:
+- value: (required) The input value (type: string)
+Usage:
+
+value value here
+ "
+`;
diff --git a/packages/core/src/custom-tools/__tests__/__snapshots__/serialize.spec.ts.snap b/packages/core/src/custom-tools/__tests__/__snapshots__/serialize.spec.ts.snap
new file mode 100644
index 0000000000..6da6a93e9c
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/__snapshots__/serialize.spec.ts.snap
@@ -0,0 +1,146 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`Serialization snapshots > should correctly serialize all fixtures 1`] = `
+[
+ {
+ "description": "Simple tool",
+ "name": "simple",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "value": {
+ "description": "The input value",
+ "type": "string",
+ },
+ },
+ "required": [
+ "value",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ },
+ {
+ "description": "Cached tool",
+ "name": "cached",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object",
+ },
+ "source": undefined,
+ },
+ {
+ "description": "Legacy tool using args",
+ "name": "legacy",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "input": {
+ "description": "The input string",
+ "type": "string",
+ },
+ },
+ "required": [
+ "input",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+ },
+ {
+ "description": "Tool A",
+ "name": "multi_toolA",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object",
+ },
+ "source": undefined,
+ },
+ {
+ "description": "Tool B",
+ "name": "multi_toolB",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object",
+ },
+ "source": undefined,
+ },
+ {
+ "description": "Valid",
+ "name": "mixed_validTool",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object",
+ },
+ "source": undefined,
+ },
+]
+`;
+
+exports[`Serialization snapshots > should correctly serialize cached tool 1`] = `
+{
+ "description": "Cached tool",
+ "name": "cached",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object",
+ },
+ "source": undefined,
+}
+`;
+
+exports[`Serialization snapshots > should correctly serialize legacy tool (using args) 1`] = `
+{
+ "description": "Legacy tool using args",
+ "name": "legacy",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "input": {
+ "description": "The input string",
+ "type": "string",
+ },
+ },
+ "required": [
+ "input",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+}
+`;
+
+exports[`Serialization snapshots > should correctly serialize simple tool 1`] = `
+{
+ "description": "Simple tool",
+ "name": "simple",
+ "parameters": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "value": {
+ "description": "The input value",
+ "type": "string",
+ },
+ },
+ "required": [
+ "value",
+ ],
+ "type": "object",
+ },
+ "source": undefined,
+}
+`;
diff --git a/packages/core/src/custom-tools/__tests__/custom-tool-registry.spec.ts b/packages/core/src/custom-tools/__tests__/custom-tool-registry.spec.ts
new file mode 100644
index 0000000000..967ae2e8df
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/custom-tool-registry.spec.ts
@@ -0,0 +1,381 @@
+// pnpm --filter @roo-code/core test src/custom-tools/__tests__/custom-tool-registry.spec.ts
+
+import path from "path"
+import { fileURLToPath } from "url"
+
+import { type CustomToolDefinition, parametersSchema as z } from "@roo-code/types"
+
+import { CustomToolRegistry } from "../custom-tool-registry.js"
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
+
+const TEST_FIXTURES_DIR = path.join(__dirname, "fixtures")
+const TEST_FIXTURES_OVERRIDE_DIR = path.join(__dirname, "fixtures-override")
+
+describe("CustomToolRegistry", () => {
+ let registry: CustomToolRegistry
+
+ beforeEach(() => {
+ registry = new CustomToolRegistry()
+ })
+
+ describe("validation", () => {
+ it("should accept a valid tool definition", () => {
+ const validTool = {
+ name: "valid_tool",
+ description: "A valid tool",
+ parameters: z.object({ name: z.string() }),
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(validTool)).not.toThrow()
+ expect(registry.has("valid_tool")).toBe(true)
+ })
+
+ it("should reject empty description", () => {
+ const invalidTool = {
+ name: "invalid_tool",
+ description: "",
+ parameters: z.object({}),
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(invalidTool as CustomToolDefinition)).toThrow(/Invalid tool definition/)
+ })
+
+ it("should reject non-Zod parameters", () => {
+ const invalidTool = {
+ name: "bad_params_tool",
+ description: "Tool with bad params",
+ parameters: { foo: "bar" },
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(invalidTool as unknown as CustomToolDefinition)).toThrow(
+ /Invalid tool definition/,
+ )
+ })
+
+ it("should allow missing parameters", () => {
+ const toolWithoutParams = {
+ name: "no_params_tool",
+ description: "Tool without parameters",
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(toolWithoutParams)).not.toThrow()
+ expect(registry.has("no_params_tool")).toBe(true)
+ })
+
+ it("should reject empty name", () => {
+ const invalidTool = {
+ name: "",
+ description: "Tool with empty name",
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(invalidTool as CustomToolDefinition)).toThrow(/Invalid tool definition/)
+ })
+
+ it("should reject missing name", () => {
+ const invalidTool = {
+ description: "Tool without name",
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(invalidTool as unknown as CustomToolDefinition)).toThrow(
+ /Invalid tool definition/,
+ )
+ })
+ })
+
+ describe("register", () => {
+ it("should register a valid tool", () => {
+ const tool: CustomToolDefinition = {
+ name: "test_tool",
+ description: "Test tool",
+ parameters: z.object({ input: z.string() }),
+ execute: async (args: { input: string }) => `Processed: ${args.input}`,
+ }
+
+ registry.register(tool)
+
+ expect(registry.has("test_tool")).toBe(true)
+ expect(registry.size).toBe(1)
+ })
+
+ it("should throw for invalid tool definition", () => {
+ const invalidTool = {
+ name: "bad_tool",
+ description: "",
+ execute: async () => "result",
+ }
+
+ expect(() => registry.register(invalidTool as CustomToolDefinition)).toThrow(/Invalid tool definition/)
+ })
+
+ it("should overwrite existing tool with same id", () => {
+ const tool1: CustomToolDefinition = {
+ name: "tool",
+ description: "First version",
+ execute: async () => "v1",
+ }
+
+ const tool2: CustomToolDefinition = {
+ name: "tool",
+ description: "Second version",
+ execute: async () => "v2",
+ }
+
+ registry.register(tool1)
+ registry.register(tool2)
+
+ expect(registry.size).toBe(1)
+ expect(registry.get("tool")?.description).toBe("Second version")
+ })
+ })
+
+ describe("unregister", () => {
+ it("should remove a registered tool", () => {
+ registry.register({
+ name: "tool",
+ description: "Test",
+ execute: async () => "result",
+ })
+
+ const result = registry.unregister("tool")
+
+ expect(result).toBe(true)
+ expect(registry.has("tool")).toBe(false)
+ })
+
+ it("should return false for non-existent tool", () => {
+ const result = registry.unregister("nonexistent")
+ expect(result).toBe(false)
+ })
+ })
+
+ describe("get", () => {
+ it("should return registered tool", () => {
+ registry.register({
+ name: "my_tool",
+ description: "My tool",
+ execute: async () => "result",
+ })
+
+ const tool = registry.get("my_tool")
+
+ expect(tool).toBeDefined()
+ expect(tool?.name).toBe("my_tool")
+ expect(tool?.description).toBe("My tool")
+ })
+
+ it("should return undefined for non-existent tool", () => {
+ expect(registry.get("nonexistent")).toBeUndefined()
+ })
+ })
+
+ describe("list", () => {
+ it("should return all tool IDs", () => {
+ registry.register({ name: "tool_a", description: "A", execute: async () => "a" })
+ registry.register({ name: "tool_b", description: "B", execute: async () => "b" })
+ registry.register({ name: "tool_c", description: "C", execute: async () => "c" })
+
+ const ids = registry.list()
+
+ expect(ids).toHaveLength(3)
+ expect(ids).toContain("tool_a")
+ expect(ids).toContain("tool_b")
+ expect(ids).toContain("tool_c")
+ })
+
+ it("should return empty array when no tools registered", () => {
+ expect(registry.list()).toEqual([])
+ })
+ })
+
+ describe("getAll", () => {
+ it("should return all tools as array", () => {
+ registry.register({ name: "tool1", description: "Tool 1", execute: async () => "1" })
+ registry.register({ name: "tool2", description: "Tool 2", execute: async () => "2" })
+
+ const all = registry.getAll()
+
+ expect(all).toHaveLength(2)
+ expect(all.find((t) => t.name === "tool1")?.description).toBe("Tool 1")
+ expect(all.find((t) => t.name === "tool2")?.description).toBe("Tool 2")
+ })
+ })
+
+ describe("clear", () => {
+ it("should remove all registered tools", () => {
+ registry.register({ name: "tool1", description: "1", execute: async () => "1" })
+ registry.register({ name: "tool2", description: "2", execute: async () => "2" })
+
+ expect(registry.size).toBe(2)
+
+ registry.clear()
+
+ expect(registry.size).toBe(0)
+ expect(registry.list()).toEqual([])
+ })
+ })
+
+ describe.sequential("loadFromDirectory", () => {
+ it("should load tools from TypeScript files", async () => {
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ expect(result.loaded).toContain("simple")
+ expect(registry.has("simple")).toBe(true)
+ }, 60000)
+
+ it("should handle named exports", async () => {
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ expect(result.loaded).toContain("multi_toolA")
+ expect(result.loaded).toContain("multi_toolB")
+ }, 30000)
+
+ it("should report validation failures", async () => {
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ const invalidFailure = result.failed.find((f) => f.file === "invalid.ts")
+ expect(invalidFailure).toBeDefined()
+ expect(invalidFailure?.error).toContain("Invalid tool definition")
+ }, 30000)
+
+ it("should return empty results for non-existent directory", async () => {
+ const result = await registry.loadFromDirectory("/nonexistent/path")
+
+ expect(result.loaded).toHaveLength(0)
+ expect(result.failed).toHaveLength(0)
+ })
+
+ it("should skip non-tool exports silently", async () => {
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ expect(result.loaded).toContain("mixed_validTool")
+ // The non-tool exports should not appear in loaded or failed.
+ expect(result.loaded).not.toContain("mixed_someString")
+ expect(result.loaded).not.toContain("mixed_someNumber")
+ expect(result.loaded).not.toContain("mixed_someObject")
+ }, 30000)
+
+ it("should support args as alias for parameters", async () => {
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ expect(result.loaded).toContain("legacy")
+
+ const tool = registry.get("legacy")
+ expect(tool?.parameters).toBeDefined()
+ }, 30000)
+ })
+
+ describe.sequential("clearCache", () => {
+ it("should clear the TypeScript compilation cache", async () => {
+ await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+ registry.clearCache()
+
+ // Should be able to load again without issues.
+ registry.clear()
+ const result = await registry.loadFromDirectory(TEST_FIXTURES_DIR)
+
+ expect(result.loaded).toContain("cached")
+ }, 30000)
+ })
+
+ describe.sequential("loadFromDirectories", () => {
+ it("should load tools from multiple directories", async () => {
+ const result = await registry.loadFromDirectories([TEST_FIXTURES_DIR, TEST_FIXTURES_OVERRIDE_DIR])
+
+ // Should load tools from both directories.
+ expect(result.loaded).toContain("simple") // From both directories (override wins).
+ expect(result.loaded).toContain("unique_override") // Only in override directory.
+ expect(result.loaded).toContain("multi_toolA") // Only in fixtures directory.
+ }, 60000)
+
+ it("should allow later directories to override earlier ones", async () => {
+ await registry.loadFromDirectories([TEST_FIXTURES_DIR, TEST_FIXTURES_OVERRIDE_DIR])
+
+ // The simple tool should have the overridden description.
+ const simpleTool = registry.get("simple")
+ expect(simpleTool).toBeDefined()
+ expect(simpleTool?.description).toBe("Simple tool - OVERRIDDEN")
+ }, 60000)
+
+ it("should preserve order: first directory loaded first, second overrides", async () => {
+ // Load in reverse order: override first, then fixtures.
+ await registry.loadFromDirectories([TEST_FIXTURES_OVERRIDE_DIR, TEST_FIXTURES_DIR])
+
+ // Now the original fixtures directory should win.
+ const simpleTool = registry.get("simple")
+ expect(simpleTool).toBeDefined()
+ expect(simpleTool?.description).toBe("Simple tool") // Original wins when loaded second.
+ }, 60000)
+
+ it("should handle non-existent directories in the array", async () => {
+ const result = await registry.loadFromDirectories([
+ "/nonexistent/path",
+ TEST_FIXTURES_DIR,
+ "/another/nonexistent",
+ ])
+
+ // Should still load from the existing directory.
+ expect(result.loaded).toContain("simple")
+ expect(result.failed).toHaveLength(1) // Only the invalid.ts from fixtures.
+ }, 60000)
+
+ it("should handle empty array", async () => {
+ const result = await registry.loadFromDirectories([])
+
+ expect(result.loaded).toHaveLength(0)
+ expect(result.failed).toHaveLength(0)
+ })
+
+ it("should combine results from all directories", async () => {
+ const result = await registry.loadFromDirectories([TEST_FIXTURES_DIR, TEST_FIXTURES_OVERRIDE_DIR])
+
+ // Loaded should include tools from both (with duplicates since simple is loaded twice).
+ // The "simple" tool is loaded from both directories.
+ const simpleCount = result.loaded.filter((name) => name === "simple").length
+ expect(simpleCount).toBe(2) // Listed twice in loaded results.
+ }, 60000)
+ })
+
+ describe.sequential("loadFromDirectoriesIfStale", () => {
+ it("should load tools from multiple directories when stale", async () => {
+ const result = await registry.loadFromDirectoriesIfStale([TEST_FIXTURES_DIR, TEST_FIXTURES_OVERRIDE_DIR])
+
+ expect(result.loaded).toContain("simple")
+ expect(result.loaded).toContain("unique_override")
+ }, 60000)
+
+ it("should not reload if directories are not stale", async () => {
+ // First load.
+ await registry.loadFromDirectoriesIfStale([TEST_FIXTURES_DIR])
+
+ // Clear tools but keep staleness tracking.
+ // (firstLoadSize is captured to document that tools were loaded, then cleared).
+ const _firstLoadSize = registry.size
+ registry.clear()
+
+ // Second load - should return cached tool names without reloading.
+ const result = await registry.loadFromDirectoriesIfStale([TEST_FIXTURES_DIR])
+
+ // Registry was cleared, not stale so no reload.
+ expect(result.loaded).toEqual([])
+ }, 30000)
+
+ it("should handle mixed stale and non-stale directories", async () => {
+ // Load from fixtures first.
+ await registry.loadFromDirectoriesIfStale([TEST_FIXTURES_DIR])
+
+ // Load from both - fixtures is not stale, override is new (stale).
+ const result = await registry.loadFromDirectoriesIfStale([TEST_FIXTURES_DIR, TEST_FIXTURES_OVERRIDE_DIR])
+
+ // Override directory tools should be loaded (it's stale/new).
+ expect(result.loaded).toContain("simple") // From override (stale).
+ expect(result.loaded).toContain("unique_override") // From override (stale).
+ }, 60000)
+ })
+})
diff --git a/packages/core/src/custom-tools/__tests__/esbuild-runner.spec.ts b/packages/core/src/custom-tools/__tests__/esbuild-runner.spec.ts
new file mode 100644
index 0000000000..78581fc7c5
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/esbuild-runner.spec.ts
@@ -0,0 +1,156 @@
+import fs from "fs"
+import os from "os"
+import path from "path"
+
+import { getEsbuildScriptPath, runEsbuild } from "../esbuild-runner.js"
+
+describe("getEsbuildScriptPath", () => {
+ it("should find esbuild-wasm script in node_modules in development", () => {
+ const scriptPath = getEsbuildScriptPath()
+
+ // Should find the script.
+ expect(typeof scriptPath).toBe("string")
+ expect(scriptPath.length).toBeGreaterThan(0)
+
+ // The script should exist.
+ expect(fs.existsSync(scriptPath)).toBe(true)
+
+ // Should be the esbuild script (not a binary).
+ expect(scriptPath).toMatch(/esbuild$/)
+ })
+
+ it("should prefer production path when extensionPath is provided and script exists", () => {
+ // Create a temporary directory with a fake script.
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "esbuild-runner-test-"))
+ const binDir = path.join(tempDir, "dist", "bin")
+ fs.mkdirSync(binDir, { recursive: true })
+
+ const fakeScriptPath = path.join(binDir, "esbuild")
+ fs.writeFileSync(fakeScriptPath, "#!/usr/bin/env node\nconsole.log('fake esbuild')")
+
+ try {
+ const result = getEsbuildScriptPath(tempDir)
+ expect(result).toBe(fakeScriptPath)
+ } finally {
+ fs.rmSync(tempDir, { recursive: true, force: true })
+ }
+ })
+
+ it("should fall back to node_modules when production script does not exist", () => {
+ // Pass a non-existent extension path.
+ const result = getEsbuildScriptPath("/nonexistent/extension/path")
+
+ // Should fall back to development path.
+ expect(typeof result).toBe("string")
+ expect(result.length).toBeGreaterThan(0)
+ expect(fs.existsSync(result)).toBe(true)
+ })
+})
+
+describe("runEsbuild", () => {
+ let tempDir: string
+
+ beforeEach(() => {
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "esbuild-runner-test-"))
+ })
+
+ afterEach(() => {
+ fs.rmSync(tempDir, { recursive: true, force: true })
+ })
+
+ it("should compile a TypeScript file to ESM", async () => {
+ // Create a simple TypeScript file.
+ const inputFile = path.join(tempDir, "input.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ fs.writeFileSync(
+ inputFile,
+ `
+ export const greeting = "Hello, World!"
+ export function add(a: number, b: number): number {
+ return a + b
+ }
+ `,
+ )
+
+ await runEsbuild({
+ entryPoint: inputFile,
+ outfile: outputFile,
+ format: "esm",
+ platform: "node",
+ target: "node18",
+ bundle: true,
+ })
+
+ // Verify output file exists.
+ expect(fs.existsSync(outputFile)).toBe(true)
+
+ // Verify output content is valid JavaScript.
+ const outputContent = fs.readFileSync(outputFile, "utf-8")
+ expect(outputContent).toContain("Hello, World!")
+ expect(outputContent).toContain("add")
+ }, 30000)
+
+ it("should generate inline source maps when specified", async () => {
+ const inputFile = path.join(tempDir, "input.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ fs.writeFileSync(inputFile, `export const value = 42`)
+
+ await runEsbuild({ entryPoint: inputFile, outfile: outputFile, format: "esm", sourcemap: "inline" })
+
+ const outputContent = fs.readFileSync(outputFile, "utf-8")
+ expect(outputContent).toContain("sourceMappingURL=data:")
+ }, 30000)
+
+ it("should throw an error for invalid TypeScript", async () => {
+ const inputFile = path.join(tempDir, "invalid.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ // Write syntactically invalid TypeScript.
+ fs.writeFileSync(inputFile, `export const value = {{{ invalid syntax`)
+
+ await expect(runEsbuild({ entryPoint: inputFile, outfile: outputFile, format: "esm" })).rejects.toThrow()
+ }, 30000)
+
+ it("should throw an error for non-existent file", async () => {
+ const nonExistentFile = path.join(tempDir, "does-not-exist.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ await expect(runEsbuild({ entryPoint: nonExistentFile, outfile: outputFile, format: "esm" })).rejects.toThrow()
+ }, 30000)
+
+ it("should bundle dependencies when bundle option is true", async () => {
+ // Create two files where one imports the other.
+ const libFile = path.join(tempDir, "lib.ts")
+ const mainFile = path.join(tempDir, "main.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ fs.writeFileSync(libFile, `export const PI = 3.14159`)
+ fs.writeFileSync(
+ mainFile,
+ `
+ import { PI } from "./lib.js"
+ export const circumference = (r: number) => 2 * PI * r
+ `,
+ )
+
+ await runEsbuild({ entryPoint: mainFile, outfile: outputFile, format: "esm", bundle: true })
+
+ const outputContent = fs.readFileSync(outputFile, "utf-8")
+ // The PI constant should be bundled inline.
+ expect(outputContent).toContain("3.14159")
+ }, 30000)
+
+ it("should respect platform option", async () => {
+ const inputFile = path.join(tempDir, "input.ts")
+ const outputFile = path.join(tempDir, "output.mjs")
+
+ fs.writeFileSync(inputFile, `export const value = process.env.NODE_ENV`)
+
+ await runEsbuild({ entryPoint: inputFile, outfile: outputFile, format: "esm", platform: "node" })
+
+ // File should be created successfully.
+ expect(fs.existsSync(outputFile)).toBe(true)
+ }, 30000)
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures-override/simple.ts b/packages/core/src/custom-tools/__tests__/fixtures-override/simple.ts
new file mode 100644
index 0000000000..9235f4e333
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures-override/simple.ts
@@ -0,0 +1,11 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+// This tool has the same name as the one in fixtures/ to test override behavior.
+export default defineCustomTool({
+ name: "simple",
+ description: "Simple tool - OVERRIDDEN",
+ parameters: parametersSchema.object({ value: parametersSchema.string().describe("The input value") }),
+ async execute(args: { value: string }) {
+ return "Overridden Result: " + args.value
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures-override/unique.ts b/packages/core/src/custom-tools/__tests__/fixtures-override/unique.ts
new file mode 100644
index 0000000000..867d244649
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures-override/unique.ts
@@ -0,0 +1,11 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+// This tool only exists in fixtures-override/ to test combined loading.
+export default defineCustomTool({
+ name: "unique_override",
+ description: "A unique tool only in override directory",
+ parameters: parametersSchema.object({ input: parametersSchema.string().describe("The input") }),
+ async execute(args: { input: string }) {
+ return "Unique: " + args.input
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/cached.ts b/packages/core/src/custom-tools/__tests__/fixtures/cached.ts
new file mode 100644
index 0000000000..a553d2be6c
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/cached.ts
@@ -0,0 +1,10 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+export default defineCustomTool({
+ name: "cached",
+ description: "Cached tool",
+ parameters: parametersSchema.object({}),
+ async execute() {
+ return "cached"
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/invalid.ts b/packages/core/src/custom-tools/__tests__/fixtures/invalid.ts
new file mode 100644
index 0000000000..35c6c37e44
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/invalid.ts
@@ -0,0 +1,4 @@
+export default {
+ description: "", // Invalid: empty description.
+ execute: async () => "result",
+}
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/legacy.ts b/packages/core/src/custom-tools/__tests__/fixtures/legacy.ts
new file mode 100644
index 0000000000..32b2004e73
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/legacy.ts
@@ -0,0 +1,10 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+export default defineCustomTool({
+ name: "legacy",
+ description: "Legacy tool using args",
+ parameters: parametersSchema.object({ input: parametersSchema.string().describe("The input string") }),
+ async execute(args: { input: string }) {
+ return args.input
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/mixed.ts b/packages/core/src/custom-tools/__tests__/fixtures/mixed.ts
new file mode 100644
index 0000000000..8ab95080d1
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/mixed.ts
@@ -0,0 +1,16 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+// This is a valid tool.
+export const validTool = defineCustomTool({
+ name: "mixed_validTool",
+ description: "Valid",
+ parameters: parametersSchema.object({}),
+ async execute() {
+ return "valid"
+ },
+})
+
+// These should be silently skipped.
+export const someString = "not a tool"
+export const someNumber = 42
+export const someObject = { foo: "bar" }
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/multi.ts b/packages/core/src/custom-tools/__tests__/fixtures/multi.ts
new file mode 100644
index 0000000000..229e20305f
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/multi.ts
@@ -0,0 +1,19 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+export const toolA = defineCustomTool({
+ name: "multi_toolA",
+ description: "Tool A",
+ parameters: parametersSchema.object({}),
+ async execute() {
+ return "A"
+ },
+})
+
+export const toolB = defineCustomTool({
+ name: "multi_toolB",
+ description: "Tool B",
+ parameters: parametersSchema.object({}),
+ async execute() {
+ return "B"
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/fixtures/simple.ts b/packages/core/src/custom-tools/__tests__/fixtures/simple.ts
new file mode 100644
index 0000000000..d2c6ae600b
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/fixtures/simple.ts
@@ -0,0 +1,10 @@
+import { parametersSchema, defineCustomTool } from "@roo-code/types"
+
+export default defineCustomTool({
+ name: "simple",
+ description: "Simple tool",
+ parameters: parametersSchema.object({ value: parametersSchema.string().describe("The input value") }),
+ async execute(args: { value: string }) {
+ return "Result: " + args.value
+ },
+})
diff --git a/packages/core/src/custom-tools/__tests__/format-native.spec.ts b/packages/core/src/custom-tools/__tests__/format-native.spec.ts
new file mode 100644
index 0000000000..33b909623e
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/format-native.spec.ts
@@ -0,0 +1,250 @@
+// pnpm --filter @roo-code/core test src/custom-tools/__tests__/format-native.spec.ts
+
+import { type SerializedCustomToolDefinition, parametersSchema as z, defineCustomTool } from "@roo-code/types"
+
+import { serializeCustomTool, serializeCustomTools } from "../serialize.js"
+import { formatNative } from "../format-native.js"
+
+import simpleTool from "./fixtures/simple.js"
+import cachedTool from "./fixtures/cached.js"
+import legacyTool from "./fixtures/legacy.js"
+import { toolA, toolB } from "./fixtures/multi.js"
+import { validTool as mixedValidTool } from "./fixtures/mixed.js"
+
+const fixtureTools = {
+ simple: simpleTool,
+ cached: cachedTool,
+ legacy: legacyTool,
+ multi_toolA: toolA,
+ multi_toolB: toolB,
+ mixed_validTool: mixedValidTool,
+}
+
+describe("formatNative", () => {
+ it("should convert a tool without args", () => {
+ const tool = defineCustomTool({
+ name: "simple_tool",
+ description: "A simple tool",
+ async execute() {
+ return "done"
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatNative(serialized)
+
+ expect(result).toEqual({
+ type: "function",
+ function: {
+ name: "simple_tool",
+ description: "A simple tool",
+ parameters: undefined,
+ strict: true,
+ },
+ })
+ })
+
+ it("should convert a tool with required args", () => {
+ const tool = defineCustomTool({
+ name: "greeter",
+ description: "Greets a person",
+ parameters: z.object({
+ name: z.string().describe("Person's name"),
+ }),
+ async execute({ name }) {
+ return `Hello, ${name}!`
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatNative(serialized)
+
+ expect(result.type).toBe("function")
+ expect(result.function.name).toBe("greeter")
+ expect(result.function.description).toBe("Greets a person")
+ expect(result.function.parameters?.properties).toEqual({
+ name: {
+ type: "string",
+ description: "Person's name",
+ },
+ })
+ expect(result.function.parameters?.required).toEqual(["name"])
+ expect(result.function.parameters?.additionalProperties).toBe(false)
+ })
+
+ it("should convert a tool with optional args", () => {
+ const tool = defineCustomTool({
+ name: "optional_tool",
+ description: "Tool with optional args",
+ parameters: z.object({
+ format: z.string().optional().describe("Output format"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatNative(serialized)
+
+ expect(result.function.parameters?.required).toEqual([])
+ expect(result.function.parameters?.properties).toEqual({
+ format: {
+ type: "string",
+ description: "Output format",
+ },
+ })
+ })
+
+ it("should convert a tool with mixed required and optional args", () => {
+ const tool = defineCustomTool({
+ name: "mixed_tool",
+ description: "Tool with mixed args",
+ parameters: z.object({
+ input: z.string().describe("Required input"),
+ options: z.object({}).optional().describe("Optional config"),
+ count: z.number().describe("Also required"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatNative(serialized)
+
+ expect(result.function.parameters?.required).toEqual(["input", "count"])
+ expect(result.function.parameters?.properties).toEqual({
+ input: {
+ type: "string",
+ description: "Required input",
+ },
+ options: {
+ additionalProperties: false,
+ properties: {},
+ type: "object",
+ description: "Optional config",
+ },
+ count: {
+ type: "number",
+ description: "Also required",
+ },
+ })
+ })
+
+ it("should map type strings to JSON Schema types", () => {
+ const tool = defineCustomTool({
+ name: "typed_tool",
+ description: "Tool with various types",
+ parameters: z.object({
+ str: z.string().describe("A string"),
+ num: z.number().describe("A number"),
+ bool: z.boolean().describe("A boolean"),
+ obj: z.object({}).describe("An object"),
+ arr: z.array(z.string()).describe("An array"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatNative(serialized)
+ const props = result.function.parameters?.properties as
+ | Record
+ | undefined
+
+ expect(props?.str?.type).toBe("string")
+ expect(props?.num?.type).toBe("number")
+ expect(props?.bool?.type).toBe("boolean")
+ expect(props?.obj?.type).toBe("object")
+ expect(props?.arr?.type).toBe("array")
+ })
+
+ it("should pass through raw parameters as-is", () => {
+ // formatNative is a simple wrapper that passes through parameters unchanged
+ const serialized = {
+ name: "test_tool",
+ description: "Tool with specific type",
+ parameters: {
+ type: "object",
+ properties: {
+ data: { type: "integer", description: "Integer type" },
+ },
+ },
+ } as SerializedCustomToolDefinition
+
+ const result = formatNative(serialized)
+
+ expect(result.type).toBe("function")
+ expect(result.function.name).toBe("test_tool")
+ const props = result.function.parameters?.properties as Record | undefined
+ expect(props?.data?.type).toBe("integer")
+ })
+
+ it("should convert multiple tools", () => {
+ const tools = [
+ defineCustomTool({
+ name: "tool_a",
+ description: "First tool",
+ async execute() {
+ return "a"
+ },
+ }),
+ defineCustomTool({
+ name: "tool_b",
+ description: "Second tool",
+ async execute() {
+ return "b"
+ },
+ }),
+ ]
+
+ const serialized = serializeCustomTools(tools)
+ const result = serialized.map(formatNative)
+
+ expect(result).toHaveLength(2)
+ expect(result[0]?.function.name).toBe("tool_a")
+ expect(result[1]?.function.name).toBe("tool_b")
+ expect(result.every((t) => t.type === "function")).toBe(true)
+ })
+})
+
+describe("Native Protocol snapshots", () => {
+ it("should generate correct native definition for simple tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.simple)
+ const result = formatNative(serialized)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct native definition for cached tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.cached)
+ const result = formatNative(serialized)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct native definition for legacy tool (using args)", () => {
+ const serialized = serializeCustomTool(fixtureTools.legacy)
+ const result = formatNative(serialized)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct native definitions for multi export tools", () => {
+ const serializedA = serializeCustomTool(fixtureTools.multi_toolA)
+ const serializedB = serializeCustomTool(fixtureTools.multi_toolB)
+ const result = [serializedA, serializedB].map(formatNative)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct native definition for mixed export tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.mixed_validTool)
+ const result = formatNative(serialized)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct native definitions for all fixtures combined", () => {
+ const allSerialized = Object.values(fixtureTools).map(serializeCustomTool)
+ const result = allSerialized.map(formatNative)
+ expect(result).toMatchSnapshot()
+ })
+})
diff --git a/packages/core/src/custom-tools/__tests__/format-xml.spec.ts b/packages/core/src/custom-tools/__tests__/format-xml.spec.ts
new file mode 100644
index 0000000000..0be0772347
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/format-xml.spec.ts
@@ -0,0 +1,192 @@
+// pnpm --filter @roo-code/core test src/custom-tools/__tests__/format-xml.spec.ts
+
+import { type SerializedCustomToolDefinition, parametersSchema as z, defineCustomTool } from "@roo-code/types"
+
+import { serializeCustomTool, serializeCustomTools } from "../serialize.js"
+import { formatXml } from "../format-xml.js"
+
+import simpleTool from "./fixtures/simple.js"
+import cachedTool from "./fixtures/cached.js"
+import legacyTool from "./fixtures/legacy.js"
+import { toolA, toolB } from "./fixtures/multi.js"
+import { validTool as mixedValidTool } from "./fixtures/mixed.js"
+
+const fixtureTools = {
+ simple: simpleTool,
+ cached: cachedTool,
+ legacy: legacyTool,
+ multi_toolA: toolA,
+ multi_toolB: toolB,
+ mixed_validTool: mixedValidTool,
+}
+
+describe("formatXml", () => {
+ it("should return empty string for empty tools array", () => {
+ expect(formatXml([])).toBe("")
+ })
+
+ it("should throw for undefined tools", () => {
+ expect(() => formatXml(undefined as unknown as SerializedCustomToolDefinition[])).toThrow()
+ })
+
+ it("should generate description for a single tool without args", () => {
+ const tool = defineCustomTool({
+ name: "my_tool",
+ description: "A simple tool that does something",
+ async execute() {
+ return "done"
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatXml([serialized])
+
+ expect(result).toContain("# Custom Tools")
+ expect(result).toContain("## my_tool")
+ expect(result).toContain("Description: A simple tool that does something")
+ expect(result).toContain("Parameters: None")
+ expect(result).toContain("")
+ expect(result).toContain(" ")
+ })
+
+ it("should generate description for a tool with required args", () => {
+ const tool = defineCustomTool({
+ name: "greeter",
+ description: "Greets a person by name",
+ parameters: z.object({
+ name: z.string().describe("The name of the person to greet"),
+ }),
+ async execute({ name }) {
+ return `Hello, ${name}!`
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatXml([serialized])
+
+ expect(result).toContain("## greeter")
+ expect(result).toContain("Description: Greets a person by name")
+ expect(result).toContain("Parameters:")
+ expect(result).toContain("- name: (required) The name of the person to greet (type: string)")
+ expect(result).toContain("")
+ expect(result).toContain("name value here ")
+ expect(result).toContain(" ")
+ })
+
+ it("should generate description for a tool with optional args", () => {
+ const tool = defineCustomTool({
+ name: "configurable_tool",
+ description: "A tool with optional configuration",
+ parameters: z.object({
+ input: z.string().describe("The input to process"),
+ format: z.string().optional().describe("Output format"),
+ }),
+ async execute({ input, format }) {
+ return format ? `${input} (${format})` : input
+ },
+ })
+
+ const serialized = serializeCustomTool(tool)
+ const result = formatXml([serialized])
+
+ expect(result).toContain("- input: (required) The input to process (type: string)")
+ expect(result).toContain("- format: (optional) Output format (type: string)")
+ expect(result).toContain(" input value here")
+ expect(result).toContain("optional format value ")
+ })
+
+ it("should generate descriptions for multiple tools", () => {
+ const tools = [
+ defineCustomTool({
+ name: "tool_a",
+ description: "First tool",
+ async execute() {
+ return "a"
+ },
+ }),
+ defineCustomTool({
+ name: "tool_b",
+ description: "Second tool",
+ parameters: z.object({
+ value: z.number().describe("A numeric value"),
+ }),
+ async execute() {
+ return "b"
+ },
+ }),
+ ]
+
+ const serialized = serializeCustomTools(tools)
+ const result = formatXml(serialized)
+
+ expect(result).toContain("## tool_a")
+ expect(result).toContain("Description: First tool")
+ expect(result).toContain("## tool_b")
+ expect(result).toContain("Description: Second tool")
+ expect(result).toContain("- value: (required) A numeric value (type: number)")
+ })
+
+ it("should treat args in required array as required", () => {
+ // Using a raw SerializedToolDefinition to test the required behavior.
+ const tools: SerializedCustomToolDefinition[] = [
+ {
+ name: "test_tool",
+ description: "Test tool",
+ parameters: {
+ type: "object",
+ properties: {
+ data: {
+ type: "object",
+ description: "Some data",
+ },
+ },
+ required: ["data"],
+ },
+ },
+ ]
+
+ const result = formatXml(tools)
+
+ expect(result).toContain("- data: (required) Some data (type: object)")
+ expect(result).toContain("data value here ")
+ })
+})
+
+describe("XML Protocol snapshots", () => {
+ it("should generate correct XML description for simple tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.simple)
+ const result = formatXml([serialized])
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct XML description for cached tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.cached)
+ const result = formatXml([serialized])
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct XML description for legacy tool (using args)", () => {
+ const serialized = serializeCustomTool(fixtureTools.legacy)
+ const result = formatXml([serialized])
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct XML description for multi export tools", () => {
+ const serializedA = serializeCustomTool(fixtureTools.multi_toolA)
+ const serializedB = serializeCustomTool(fixtureTools.multi_toolB)
+ const result = formatXml([serializedA, serializedB])
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct XML description for mixed export tool", () => {
+ const serialized = serializeCustomTool(fixtureTools.mixed_validTool)
+ const result = formatXml([serialized])
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should generate correct XML description for all fixtures combined", () => {
+ const allSerialized = Object.values(fixtureTools).map(serializeCustomTool)
+ const result = formatXml(allSerialized)
+ expect(result).toMatchSnapshot()
+ })
+})
diff --git a/packages/core/src/custom-tools/__tests__/serialize.spec.ts b/packages/core/src/custom-tools/__tests__/serialize.spec.ts
new file mode 100644
index 0000000000..05c125f49e
--- /dev/null
+++ b/packages/core/src/custom-tools/__tests__/serialize.spec.ts
@@ -0,0 +1,225 @@
+// pnpm --filter @roo-code/core test src/custom-tools/__tests__/serialize.spec.ts
+
+import { parametersSchema as z, defineCustomTool } from "@roo-code/types"
+
+import { serializeCustomTool, serializeCustomTools } from "../serialize.js"
+
+import simpleTool from "./fixtures/simple.js"
+import cachedTool from "./fixtures/cached.js"
+import legacyTool from "./fixtures/legacy.js"
+import { toolA, toolB } from "./fixtures/multi.js"
+import { validTool as mixedValidTool } from "./fixtures/mixed.js"
+
+const fixtureTools = {
+ simple: simpleTool,
+ cached: cachedTool,
+ legacy: legacyTool,
+ multi_toolA: toolA,
+ multi_toolB: toolB,
+ mixed_validTool: mixedValidTool,
+}
+
+describe("serializeCustomTool", () => {
+ it("should serialize a tool without parameters", () => {
+ const tool = defineCustomTool({
+ name: "simple_tool",
+ description: "A simple tool that does something",
+ async execute() {
+ return "done"
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result).toEqual({
+ name: "simple_tool",
+ description: "A simple tool that does something",
+ })
+ })
+
+ it("should serialize a tool with required string parameter", () => {
+ const tool = defineCustomTool({
+ name: "greeter",
+ description: "Greets a person by name",
+ parameters: z.object({
+ name: z.string().describe("The name of the person to greet"),
+ }),
+ async execute({ name }) {
+ return `Hello, ${name}!`
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result.name).toBe("greeter")
+ expect(result.description).toBe("Greets a person by name")
+ expect(result.parameters?.properties?.name).toEqual({
+ type: "string",
+ description: "The name of the person to greet",
+ })
+ expect(result.parameters?.required).toEqual(["name"])
+ })
+
+ it("should serialize a tool with optional parameter", () => {
+ const tool = defineCustomTool({
+ name: "configurable_tool",
+ description: "A tool with optional configuration",
+ parameters: z.object({
+ input: z.string().describe("The input to process"),
+ format: z.string().optional().describe("Output format"),
+ }),
+ async execute({ input, format }) {
+ return format ? `${input} (${format})` : input
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result.parameters?.properties?.input).toEqual({
+ type: "string",
+ description: "The input to process",
+ })
+
+ expect(result.parameters?.properties?.format).toEqual({
+ type: "string",
+ description: "Output format",
+ })
+
+ // Only required params should be in the required array
+ expect(result.parameters?.required).toEqual(["input"])
+ })
+
+ it("should serialize a tool with various types", () => {
+ const tool = defineCustomTool({
+ name: "typed_tool",
+ description: "Tool with various types",
+ parameters: z.object({
+ str: z.string().describe("A string"),
+ num: z.number().describe("A number"),
+ bool: z.boolean().describe("A boolean"),
+ obj: z.object({}).describe("An object"),
+ arr: z.array(z.string()).describe("An array"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result.parameters?.properties?.str).toEqual({
+ description: "A string",
+ type: "string",
+ })
+ expect(result.parameters?.properties?.num).toEqual({
+ description: "A number",
+ type: "number",
+ })
+ expect(result.parameters?.properties?.bool).toEqual({
+ description: "A boolean",
+ type: "boolean",
+ })
+ expect(result.parameters?.properties?.obj).toEqual({
+ additionalProperties: false,
+ description: "An object",
+ properties: {},
+ type: "object",
+ })
+ expect(result.parameters?.properties?.arr).toEqual({
+ description: "An array",
+ items: { type: "string" },
+ type: "array",
+ })
+ })
+
+ it("should handle nullable parameters as optional", () => {
+ const tool = defineCustomTool({
+ name: "nullable_tool",
+ description: "Tool with nullable param",
+ parameters: z.object({
+ value: z.string().nullable().describe("A nullable value"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result.parameters?.required).toEqual(["value"])
+ })
+
+ it("should handle default values as optional", () => {
+ const tool = defineCustomTool({
+ name: "default_tool",
+ description: "Tool with default param",
+ parameters: z.object({
+ count: z.number().default(10).describe("A count with default"),
+ }),
+ async execute() {
+ return "done"
+ },
+ })
+
+ const result = serializeCustomTool(tool)
+
+ expect(result.parameters?.required).toEqual(["count"])
+ })
+})
+
+describe("serializeCustomTools", () => {
+ it("should return empty array for empty tools array", () => {
+ expect(serializeCustomTools([])).toEqual([])
+ })
+
+ it("should serialize multiple tools", () => {
+ const tools = [
+ defineCustomTool({
+ name: "tool_a",
+ description: "First tool",
+ async execute() {
+ return "a"
+ },
+ }),
+ defineCustomTool({
+ name: "tool_b",
+ description: "Second tool",
+ parameters: z.object({
+ value: z.number().describe("A numeric value"),
+ }),
+ async execute() {
+ return "b"
+ },
+ }),
+ ]
+
+ const result = serializeCustomTools(tools)
+
+ expect(result).toHaveLength(2)
+ expect(result[0]?.name).toBe("tool_a")
+ expect(result[1]?.name).toBe("tool_b")
+ expect(result[1]?.parameters?.properties?.value).toBeDefined()
+ })
+})
+
+describe("Serialization snapshots", () => {
+ it("should correctly serialize simple tool", () => {
+ const result = serializeCustomTool(fixtureTools.simple)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should correctly serialize cached tool", () => {
+ const result = serializeCustomTool(fixtureTools.cached)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should correctly serialize legacy tool (using args)", () => {
+ const result = serializeCustomTool(fixtureTools.legacy)
+ expect(result).toMatchSnapshot()
+ })
+
+ it("should correctly serialize all fixtures", () => {
+ const result = Object.values(fixtureTools).map(serializeCustomTool)
+ expect(result).toMatchSnapshot()
+ })
+})
diff --git a/packages/core/src/custom-tools/custom-tool-registry.ts b/packages/core/src/custom-tools/custom-tool-registry.ts
new file mode 100644
index 0000000000..cfcd356335
--- /dev/null
+++ b/packages/core/src/custom-tools/custom-tool-registry.ts
@@ -0,0 +1,440 @@
+/**
+ * CustomToolRegistry - A reusable class for dynamically loading and managing TypeScript tools.
+ *
+ * Features:
+ * - Dynamic TypeScript/JavaScript tool loading with esbuild transpilation.
+ * - Runtime validation of tool definitions.
+ * - Tool execution with context.
+ * - JSON Schema generation for LLM integration.
+ */
+
+import fs from "fs"
+import path from "path"
+import { createHash } from "crypto"
+import os from "os"
+import { fileURLToPath } from "url"
+
+import type { CustomToolDefinition, SerializedCustomToolDefinition, CustomToolParametersSchema } from "@roo-code/types"
+
+import type { StoredCustomTool, LoadResult } from "./types.js"
+import { serializeCustomTool } from "./serialize.js"
+import { runEsbuild } from "./esbuild-runner.js"
+
+export interface RegistryOptions {
+ /** Directory for caching compiled TypeScript files. */
+ cacheDir?: string
+ /** Additional paths for resolving node modules (useful for tools outside node_modules). */
+ nodePaths?: string[]
+ /** Path to the extension root directory (for finding bundled esbuild binary in production). */
+ extensionPath?: string
+ /** Path to @roo-code/types package (defaults to auto-detection). */
+ typesPackagePath?: string
+}
+
+export class CustomToolRegistry {
+ private tools = new Map()
+ private tsCache = new Map()
+ private cacheDir: string
+ private nodePaths: string[]
+ private extensionPath?: string
+ private typesPackagePath?: string
+ private lastLoaded: Map = new Map()
+
+ constructor(options?: RegistryOptions) {
+ this.cacheDir = options?.cacheDir ?? path.join(os.tmpdir(), "dynamic-tools-cache")
+ // Don't set default nodePaths - esbuild will resolve from entry point location.
+ this.nodePaths = options?.nodePaths ?? [path.join(process.cwd(), "node_modules")]
+ this.extensionPath = options?.extensionPath
+ this.typesPackagePath = options?.typesPackagePath ?? this.findTypesPackage()
+ }
+
+ /**
+ * Find the @roo-code/types package location.
+ * Tries multiple locations to support both development and production environments.
+ * Prefers compiled versions (.js) for production reliability.
+ */
+ private findTypesPackage(): string | undefined {
+ // If extension path is set, try relative to extension first.
+ if (this.extensionPath) {
+ // Production: bundled compiled version
+ const extDistJsPath = path.join(this.extensionPath, "dist", "packages", "types", "dist", "index.js")
+ if (fs.existsSync(extDistJsPath)) {
+ return extDistJsPath
+ }
+
+ // Development: monorepo packages directory - compiled version
+ const extPackagesDistPath = path.join(this.extensionPath, "packages", "types", "dist", "index.js")
+ if (fs.existsSync(extPackagesDistPath)) {
+ return extPackagesDistPath
+ }
+
+ // Development: monorepo packages directory - source fallback
+ const extPackagesSrcPath = path.join(this.extensionPath, "packages", "types", "src", "index.ts")
+ if (fs.existsSync(extPackagesSrcPath)) {
+ return extPackagesSrcPath
+ }
+ }
+
+ // Try to resolve from this module's location
+ try {
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url))
+ // Walk up to find packages/types
+ let currentDir = moduleDir
+ const root = path.parse(currentDir).root
+ for (let i = 0; i < 10 && currentDir !== root; i++) {
+ // Try compiled version first
+ const typesDistPath = path.join(currentDir, "packages", "types", "dist", "index.js")
+ if (fs.existsSync(typesDistPath)) {
+ return typesDistPath
+ }
+
+ // Fallback to source
+ const typesSrcPath = path.join(currentDir, "packages", "types", "src", "index.ts")
+ if (fs.existsSync(typesSrcPath)) {
+ return typesSrcPath
+ }
+
+ currentDir = path.dirname(currentDir)
+ }
+ } catch {
+ // Ignore if we can't get module directory
+ }
+
+ return undefined
+ }
+
+ /**
+ * Load all tools from a directory.
+ * Supports both .ts and .js files.
+ *
+ * @param toolDir - Absolute path to the tools directory
+ * @returns LoadResult with lists of loaded and failed tools
+ */
+ async loadFromDirectory(toolDir: string): Promise {
+ const result: LoadResult = { loaded: [], failed: [] }
+
+ try {
+ if (!fs.existsSync(toolDir)) {
+ return result
+ }
+
+ const files = fs.readdirSync(toolDir).filter((f) => f.endsWith(".ts") || f.endsWith(".js"))
+
+ for (const file of files) {
+ const filePath = path.join(toolDir, file)
+
+ try {
+ console.log(`[CustomToolRegistry] importing tool from ${filePath}`)
+ const mod = await this.import(filePath)
+
+ for (const [exportName, value] of Object.entries(mod)) {
+ const def = this.validate(exportName, value)
+
+ if (!def) {
+ continue
+ }
+
+ this.tools.set(def.name, { ...def, source: filePath })
+ console.log(`[CustomToolRegistry] loaded tool ${def.name} from ${filePath}`)
+ result.loaded.push(def.name)
+ }
+ } catch (error) {
+ const message = error instanceof Error ? error.message : String(error)
+ console.error(`[CustomToolRegistry] import(${filePath}) failed: ${message}`)
+ result.failed.push({ file, error: message })
+ }
+ }
+ } catch (error) {
+ const message = error instanceof Error ? error.message : String(error)
+ console.error(`[CustomToolRegistry] loadFromDirectory(${toolDir}) failed: ${message}`)
+ }
+
+ return result
+ }
+
+ async loadFromDirectoryIfStale(toolDir: string): Promise {
+ if (!fs.existsSync(toolDir)) {
+ return { loaded: [], failed: [] }
+ }
+
+ const lastLoaded = this.lastLoaded.get(toolDir)
+ const stat = fs.statSync(toolDir)
+ const isStale = lastLoaded ? stat.mtimeMs > lastLoaded : true
+
+ if (isStale) {
+ this.lastLoaded.set(toolDir, stat.mtimeMs)
+ return this.loadFromDirectory(toolDir)
+ }
+
+ return { loaded: this.list(), failed: [] }
+ }
+
+ /**
+ * Load all tools from multiple directories.
+ * Directories are processed in order, so later directories can override tools from earlier ones.
+ * Supports both .ts and .js files.
+ *
+ * @param toolDirs - Array of absolute paths to tools directories
+ * @returns LoadResult with lists of loaded and failed tools from all directories
+ */
+ async loadFromDirectories(toolDirs: string[]): Promise {
+ const result: LoadResult = { loaded: [], failed: [] }
+
+ for (const toolDir of toolDirs) {
+ const dirResult = await this.loadFromDirectory(toolDir)
+ result.loaded.push(...dirResult.loaded)
+ result.failed.push(...dirResult.failed)
+ }
+
+ return result
+ }
+
+ /**
+ * Load all tools from multiple directories if any has become stale.
+ * Directories are processed in order, so later directories can override tools from earlier ones.
+ *
+ * @param toolDirs - Array of absolute paths to tools directories
+ * @returns LoadResult with lists of loaded and failed tools
+ */
+ async loadFromDirectoriesIfStale(toolDirs: string[]): Promise {
+ const result: LoadResult = { loaded: [], failed: [] }
+
+ for (const toolDir of toolDirs) {
+ const dirResult = await this.loadFromDirectoryIfStale(toolDir)
+ result.loaded.push(...dirResult.loaded)
+ result.failed.push(...dirResult.failed)
+ }
+
+ return result
+ }
+
+ /**
+ * Register a tool directly (without loading from file).
+ */
+ register(definition: CustomToolDefinition, source?: string): void {
+ const { name: id } = definition
+ const validated = this.validate(id, definition)
+
+ if (!validated) {
+ throw new Error(`Invalid tool definition for '${id}'`)
+ }
+
+ const storedTool: StoredCustomTool = source ? { ...validated, source } : validated
+ this.tools.set(id, storedTool)
+ }
+
+ /**
+ * Unregister a tool by ID.
+ */
+ unregister(id: string): boolean {
+ return this.tools.delete(id)
+ }
+
+ /**
+ * Get a tool by ID.
+ */
+ get(id: string): CustomToolDefinition | undefined {
+ return this.tools.get(id)
+ }
+
+ /**
+ * Check if a tool exists.
+ */
+ has(id: string): boolean {
+ return this.tools.has(id)
+ }
+
+ /**
+ * Get all registered tool IDs.
+ */
+ list(): string[] {
+ return Array.from(this.tools.keys())
+ }
+
+ /**
+ * Get all registered tools.
+ */
+ getAll(): CustomToolDefinition[] {
+ return Array.from(this.tools.values())
+ }
+
+ /**
+ * Get all registered tools in the serialized format.
+ */
+ getAllSerialized(): SerializedCustomToolDefinition[] {
+ return this.getAll().map(serializeCustomTool)
+ }
+
+ /**
+ * Get the number of registered tools.
+ */
+ get size(): number {
+ return this.tools.size
+ }
+
+ /**
+ * Clear all registered tools.
+ */
+ clear(): void {
+ this.tools.clear()
+ }
+
+ /**
+ * Set the extension path for finding bundled esbuild binary.
+ * This should be called with context.extensionPath when the extension activates.
+ * Also re-finds the types package location with the new extension path.
+ */
+ setExtensionPath(extensionPath: string): void {
+ this.extensionPath = extensionPath
+ // Re-find types package with the new extension path
+ this.typesPackagePath = this.findTypesPackage()
+ }
+
+ /**
+ * Get the current extension path.
+ */
+ getExtensionPath(): string | undefined {
+ return this.extensionPath
+ }
+
+ /**
+ * Clear the TypeScript compilation cache (both in-memory and on disk).
+ */
+ clearCache(): void {
+ this.tsCache.clear()
+
+ if (fs.existsSync(this.cacheDir)) {
+ try {
+ const files = fs.readdirSync(this.cacheDir)
+ for (const file of files) {
+ if (file.endsWith(".mjs")) {
+ fs.unlinkSync(path.join(this.cacheDir, file))
+ }
+ }
+ } catch (error) {
+ console.error(
+ `[CustomToolRegistry] clearCache failed to clean disk cache: ${error instanceof Error ? error.message : String(error)}`,
+ )
+ }
+ }
+ }
+
+ /**
+ * Dynamically import a TypeScript or JavaScript file.
+ * TypeScript files are transpiled on-the-fly using esbuild.
+ */
+ private async import(filePath: string): Promise> {
+ const absolutePath = path.resolve(filePath)
+ const ext = path.extname(absolutePath)
+
+ if (ext === ".js" || ext === ".mjs") {
+ return import(`file://${absolutePath}`)
+ }
+
+ const stat = fs.statSync(absolutePath)
+ const cacheKey = `${absolutePath}:${stat.mtimeMs}`
+
+ // Check if we have a cached version in memory.
+ if (this.tsCache.has(cacheKey)) {
+ const cachedPath = this.tsCache.get(cacheKey)!
+ return import(`file://${cachedPath}`)
+ }
+
+ // Ensure cache directory exists.
+ fs.mkdirSync(this.cacheDir, { recursive: true })
+
+ const hash = createHash("sha256").update(cacheKey).digest("hex").slice(0, 16)
+ const tempFile = path.join(this.cacheDir, `${hash}.mjs`)
+
+ // Check if we have a cached version on disk (from a previous run/instance).
+ if (fs.existsSync(tempFile)) {
+ this.tsCache.set(cacheKey, tempFile)
+ return import(`file://${tempFile}`)
+ }
+
+ // Bundle the TypeScript file with dependencies using esbuild CLI.
+ const esbuildOptions: Parameters[0] = {
+ entryPoint: absolutePath,
+ outfile: tempFile,
+ format: "esm",
+ platform: "node",
+ target: "node18",
+ bundle: true,
+ sourcemap: false,
+ packages: "bundle",
+ nodePaths: this.nodePaths,
+ }
+
+ // Add alias for @roo-code/types if we found it.
+ // Note: @roo-code/types is built with zod bundled in, so we don't need a separate zod alias.
+ if (this.typesPackagePath) {
+ esbuildOptions.alias = {
+ "@roo-code/types": this.typesPackagePath,
+ }
+ }
+
+ await runEsbuild(esbuildOptions, this.extensionPath)
+
+ this.tsCache.set(cacheKey, tempFile)
+ return import(`file://${tempFile}`)
+ }
+
+ /**
+ * Check if a value is a Zod schema by looking for the _def property
+ * which is present on all Zod types.
+ */
+ private isParametersSchema(value: unknown): value is CustomToolParametersSchema {
+ return (
+ value !== null &&
+ typeof value === "object" &&
+ "_def" in value &&
+ typeof (value as Record)._def === "object"
+ )
+ }
+
+ /**
+ * Validate a tool definition and return a typed result.
+ * Returns null for non-tool exports, throws for invalid tools.
+ */
+ private validate(exportName: string, value: unknown): CustomToolDefinition | null {
+ // Quick pre-check to filter out non-objects.
+ if (!value || typeof value !== "object") {
+ return null
+ }
+
+ // Check if it looks like a tool (has execute function).
+ if (!("execute" in value) || typeof (value as Record).execute !== "function") {
+ return null
+ }
+
+ const obj = value as Record
+ const errors: string[] = []
+
+ // Validate name.
+ if (typeof obj.name !== "string") {
+ errors.push("name: Expected string")
+ } else if (obj.name.length === 0) {
+ errors.push("name: Tool must have a non-empty name")
+ }
+
+ // Validate description.
+ if (typeof obj.description !== "string") {
+ errors.push("description: Expected string")
+ } else if (obj.description.length === 0) {
+ errors.push("description: Tool must have a non-empty description")
+ }
+
+ // Validate parameters (optional).
+ if (obj.parameters !== undefined && !this.isParametersSchema(obj.parameters)) {
+ errors.push("parameters: parameters must be a Zod schema")
+ }
+
+ if (errors.length > 0) {
+ throw new Error(`Invalid tool definition for '${exportName}': ${errors.join(", ")}`)
+ }
+
+ return value as CustomToolDefinition
+ }
+}
+
+export const customToolRegistry = new CustomToolRegistry()
diff --git a/packages/core/src/custom-tools/esbuild-runner.ts b/packages/core/src/custom-tools/esbuild-runner.ts
new file mode 100644
index 0000000000..4f0760e10e
--- /dev/null
+++ b/packages/core/src/custom-tools/esbuild-runner.ts
@@ -0,0 +1,183 @@
+/**
+ * esbuild-runner - Runs esbuild-wasm CLI to transpile TypeScript files.
+ *
+ * This module provides a way to run esbuild as a CLI process instead of using
+ * the JavaScript API. This uses esbuild-wasm which is cross-platform and works
+ * on all operating systems without needing native binaries.
+ *
+ * In production, the esbuild-wasm CLI script is bundled in dist/bin/.
+ * In development, it falls back to using esbuild-wasm from node_modules.
+ */
+
+import path from "path"
+import fs from "fs"
+import { fileURLToPath } from "url"
+import { execa } from "execa"
+
+// Get the directory where this module is located.
+function getModuleDir(): string | undefined {
+ try {
+ // In ESM context, import.meta.url is available.
+ // In bundled CJS, this will throw or be undefined.
+ if (typeof import.meta !== "undefined" && import.meta.url) {
+ return path.dirname(fileURLToPath(import.meta.url))
+ }
+ } catch {
+ // Ignore errors, fall through to undefined.
+ }
+
+ return undefined
+}
+
+const moduleDir = getModuleDir()
+
+export interface EsbuildOptions {
+ /** Entry point file path (absolute) */
+ entryPoint: string
+ /** Output file path (absolute) */
+ outfile: string
+ /** Output format */
+ format?: "esm" | "cjs" | "iife"
+ /** Target platform */
+ platform?: "node" | "browser" | "neutral"
+ /** Target environment (e.g., "node18") */
+ target?: string
+ /** Bundle dependencies */
+ bundle?: boolean
+ /** Generate source maps */
+ sourcemap?: boolean | "inline" | "external"
+ /** How to handle packages: "bundle" includes them, "external" leaves them */
+ packages?: "bundle" | "external"
+ /** Additional paths for module resolution */
+ nodePaths?: string[]
+ /** Package aliases for module resolution (e.g., { "@roo-code/types": "/path/to/types/dist/index.js" }) */
+ alias?: Record
+}
+
+/**
+ * Find the esbuild-wasm CLI script by walking up the directory tree.
+ * In pnpm monorepos, node_modules/esbuild-wasm is a symlink to the actual package,
+ * so we don't need special pnpm handling.
+ */
+function findEsbuildWasmScript(startDir: string): string | null {
+ const maxDepth = 10
+ let currentDir = path.resolve(startDir)
+ const root = path.parse(currentDir).root
+
+ for (let i = 0; i < maxDepth && currentDir !== root; i++) {
+ // Check node_modules/esbuild-wasm/bin/esbuild at this level.
+ const scriptPath = path.join(currentDir, "node_modules", "esbuild-wasm", "bin", "esbuild")
+
+ if (fs.existsSync(scriptPath)) {
+ return scriptPath
+ }
+
+ // Also check src/node_modules for monorepo where src is a workspace.
+ const srcScriptPath = path.join(currentDir, "src", "node_modules", "esbuild-wasm", "bin", "esbuild")
+
+ if (fs.existsSync(srcScriptPath)) {
+ return srcScriptPath
+ }
+
+ currentDir = path.dirname(currentDir)
+ }
+
+ return null
+}
+
+/**
+ * Get the path to the esbuild CLI script.
+ *
+ * Resolution order:
+ * 1. Production: Look in extension's dist/bin directory for bundled script.
+ * 2. Development: Use esbuild-wasm from node_modules (relative to this module).
+ * 3. Fallback: Try process.cwd() as last resort.
+ *
+ * @param extensionPath - Path to the extension's root directory (production)
+ * @returns Path to the esbuild CLI script
+ */
+export function getEsbuildScriptPath(extensionPath?: string): string {
+ // Production: look in extension's dist/bin directory.
+ if (extensionPath) {
+ const prodPath = path.join(extensionPath, "dist", "bin", "esbuild")
+
+ if (fs.existsSync(prodPath)) {
+ return prodPath
+ }
+ }
+
+ // Development: use esbuild-wasm from node_modules relative to this module.
+ // This works when running the extension in debug mode (if moduleDir is available).
+ if (moduleDir) {
+ const devPath = findEsbuildWasmScript(moduleDir)
+
+ if (devPath) {
+ return devPath
+ }
+ }
+
+ // Fallback: try from cwd (for tests and other contexts).
+ const cwdPath = findEsbuildWasmScript(process.cwd())
+
+ if (cwdPath) {
+ return cwdPath
+ }
+
+ throw new Error("esbuild-wasm CLI not found. Ensure esbuild-wasm is installed.")
+}
+
+/**
+ * Run esbuild CLI to bundle a TypeScript file.
+ *
+ * Uses esbuild-wasm which is cross-platform and runs via Node.js.
+ *
+ * @param options - Build options
+ * @param extensionPath - Path to extension root (for finding bundled script)
+ * @returns Promise that resolves when build completes
+ * @throws Error if the build fails
+ */
+export async function runEsbuild(options: EsbuildOptions, extensionPath?: string): Promise {
+ const scriptPath = getEsbuildScriptPath(extensionPath)
+
+ const args: string[] = [
+ scriptPath,
+ options.entryPoint,
+ `--outfile=${options.outfile}`,
+ `--format=${options.format ?? "esm"}`,
+ `--platform=${options.platform ?? "node"}`,
+ `--target=${options.target ?? "node18"}`,
+ ]
+
+ if (options.bundle !== false) {
+ args.push("--bundle")
+ }
+
+ if (options.sourcemap) {
+ args.push(options.sourcemap === true ? "--sourcemap" : `--sourcemap=${options.sourcemap}`)
+ }
+
+ if (options.packages) {
+ args.push(`--packages=${options.packages}`)
+ }
+
+ if (options.alias) {
+ for (const [from, to] of Object.entries(options.alias)) {
+ args.push(`--alias:${from}=${to}`)
+ }
+ }
+
+ // Build environment with NODE_PATH for module resolution.
+ const env: NodeJS.ProcessEnv = { ...process.env }
+
+ if (options.nodePaths && options.nodePaths.length > 0) {
+ env.NODE_PATH = options.nodePaths.join(path.delimiter)
+ }
+
+ try {
+ await execa(process.execPath, args, { env, stdin: "ignore" })
+ } catch (error) {
+ const execaError = error as { stderr?: string; stdout?: string; exitCode?: number; message: string }
+ const errorMessage = execaError.stderr || execaError.stdout || `esbuild exited with code ${execaError.exitCode}`
+ throw new Error(`esbuild failed: ${errorMessage}`)
+ }
+}
diff --git a/packages/core/src/custom-tools/format-native.ts b/packages/core/src/custom-tools/format-native.ts
new file mode 100644
index 0000000000..c1c0018d62
--- /dev/null
+++ b/packages/core/src/custom-tools/format-native.ts
@@ -0,0 +1,23 @@
+import type { OpenAI } from "openai"
+
+import type { SerializedCustomToolDefinition } from "@roo-code/types"
+
+export function formatNative(tool: SerializedCustomToolDefinition): OpenAI.Chat.ChatCompletionFunctionTool {
+ // Create a shallow copy to avoid mutating the input object
+ let parameters = tool.parameters
+
+ if (parameters) {
+ // Create a new object with the modifications instead of mutating the original
+ parameters = { ...parameters }
+
+ // We don't need the $schema property; none of the other tools specify it.
+ delete parameters["$schema"]
+
+ // https://community.openai.com/t/on-the-function-calling-what-about-if-i-have-no-parameter-to-call/516876
+ if (!parameters.required) {
+ parameters.required = []
+ }
+ }
+
+ return { type: "function", function: { ...tool, strict: true, parameters } }
+}
diff --git a/packages/core/src/custom-tools/format-xml.ts b/packages/core/src/custom-tools/format-xml.ts
new file mode 100644
index 0000000000..01338f236c
--- /dev/null
+++ b/packages/core/src/custom-tools/format-xml.ts
@@ -0,0 +1,89 @@
+import type { SerializedCustomToolDefinition, SerializedCustomToolParameters } from "@roo-code/types"
+
+/**
+ * Extract the type string from a parameter schema.
+ * Handles both direct `type` property and `anyOf` schemas (used for nullable types).
+ */
+function getParameterType(parameter: SerializedCustomToolParameters): string {
+ // Direct type property
+ if (parameter.type) {
+ return String(parameter.type)
+ }
+
+ // Handle anyOf schema (used for nullable types like `string | null`)
+ if (parameter.anyOf && Array.isArray(parameter.anyOf)) {
+ const types = parameter.anyOf
+ .map((schema) => (typeof schema === "object" && schema.type ? String(schema.type) : null))
+ .filter((t): t is string => t !== null && t !== "null")
+
+ if (types.length > 0) {
+ return types.join(" | ")
+ }
+ }
+
+ return "unknown"
+}
+
+function getParameterDescription(name: string, parameter: SerializedCustomToolParameters, required: string[]): string {
+ const requiredText = required.includes(name) ? "(required)" : "(optional)"
+ const typeText = getParameterType(parameter)
+ return `- ${name}: ${requiredText} ${parameter.description ?? ""} (type: ${typeText})`
+}
+
+function getUsage(tool: SerializedCustomToolDefinition): string {
+ const lines: string[] = [`<${tool.name}>`]
+
+ if (tool.parameters) {
+ const required = tool.parameters.required ?? []
+
+ for (const [argName, _argType] of Object.entries(tool.parameters.properties ?? {})) {
+ const placeholder = required.includes(argName) ? `${argName} value here` : `optional ${argName} value`
+ lines.push(`<${argName}>${placeholder}${argName}>`)
+ }
+ }
+
+ lines.push(`${tool.name}>`)
+ return lines.join("\n")
+}
+
+function getDescription(tool: SerializedCustomToolDefinition): string {
+ const parts: string[] = []
+
+ parts.push(`## ${tool.name}`)
+ parts.push(`Description: ${tool.description}`)
+
+ if (tool.parameters?.properties) {
+ const required = tool.parameters?.required ?? []
+ parts.push("Parameters:")
+
+ for (const [name, parameter] of Object.entries(tool.parameters.properties)) {
+ // What should we do with `boolean` values for `parameter`?
+ if (typeof parameter !== "object") {
+ continue
+ }
+
+ parts.push(getParameterDescription(name, parameter, required))
+ }
+ } else {
+ parts.push("Parameters: None")
+ }
+
+ parts.push("Usage:")
+ parts.push(getUsage(tool))
+
+ return parts.join("\n")
+}
+
+export function formatXml(tools: SerializedCustomToolDefinition[]): string {
+ if (tools.length === 0) {
+ return ""
+ }
+
+ const descriptions = tools.map((tool) => getDescription(tool))
+
+ return `# Custom Tools
+
+The following custom tools are available for this mode. Use them in the same way as built-in tools.
+
+${descriptions.join("\n\n")}`
+}
diff --git a/packages/core/src/custom-tools/index.ts b/packages/core/src/custom-tools/index.ts
new file mode 100644
index 0000000000..c8b44ec117
--- /dev/null
+++ b/packages/core/src/custom-tools/index.ts
@@ -0,0 +1,4 @@
+export * from "./custom-tool-registry.js"
+export * from "./serialize.js"
+export * from "./format-xml.js"
+export * from "./format-native.js"
diff --git a/packages/core/src/custom-tools/serialize.ts b/packages/core/src/custom-tools/serialize.ts
new file mode 100644
index 0000000000..c347bf0be1
--- /dev/null
+++ b/packages/core/src/custom-tools/serialize.ts
@@ -0,0 +1,21 @@
+import { type SerializedCustomToolDefinition, parametersSchema } from "@roo-code/types"
+
+import type { StoredCustomTool } from "./types.js"
+
+export function serializeCustomTool({
+ name,
+ description,
+ parameters,
+ source,
+}: StoredCustomTool): SerializedCustomToolDefinition {
+ return {
+ name,
+ description,
+ parameters: parameters ? parametersSchema.toJSONSchema(parameters) : undefined,
+ source,
+ }
+}
+
+export function serializeCustomTools(tools: StoredCustomTool[]): SerializedCustomToolDefinition[] {
+ return tools.map(serializeCustomTool)
+}
diff --git a/packages/core/src/custom-tools/types.ts b/packages/core/src/custom-tools/types.ts
new file mode 100644
index 0000000000..fbe871e789
--- /dev/null
+++ b/packages/core/src/custom-tools/types.ts
@@ -0,0 +1,8 @@
+import { type CustomToolDefinition } from "@roo-code/types"
+
+export type StoredCustomTool = CustomToolDefinition & { source?: string }
+
+export interface LoadResult {
+ loaded: string[]
+ failed: Array<{ file: string; error: string }>
+}
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
new file mode 100644
index 0000000000..fd7c93f68a
--- /dev/null
+++ b/packages/core/src/index.ts
@@ -0,0 +1 @@
+export * from "./custom-tools/index.js"
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
new file mode 100644
index 0000000000..2a73ee92bb
--- /dev/null
+++ b/packages/core/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "@roo-code/config-typescript/base.json",
+ "compilerOptions": {
+ "types": ["vitest/globals"],
+ "outDir": "dist"
+ },
+ "include": ["src", "scripts", "*.config.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts
new file mode 100644
index 0000000000..b6d6dbb880
--- /dev/null
+++ b/packages/core/vitest.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from "vitest/config"
+
+export default defineConfig({
+ test: {
+ globals: true,
+ environment: "node",
+ watch: false,
+ },
+})
diff --git a/packages/evals/Dockerfile.runner b/packages/evals/Dockerfile.runner
index 3d45d89810..19a85c51d0 100644
--- a/packages/evals/Dockerfile.runner
+++ b/packages/evals/Dockerfile.runner
@@ -86,6 +86,7 @@ RUN mkdir -p \
packages/build \
packages/config-eslint \
packages/config-typescript \
+ packages/core \
packages/evals \
packages/ipc \
packages/telemetry \
@@ -101,6 +102,7 @@ COPY ./scripts/bootstrap.mjs ./scripts/
COPY ./packages/build/package.json ./packages/build/
COPY ./packages/config-eslint/package.json ./packages/config-eslint/
COPY ./packages/config-typescript/package.json ./packages/config-typescript/
+COPY ./packages/core/package.json ./packages/core/
COPY ./packages/evals/package.json ./packages/evals/
COPY ./packages/ipc/package.json ./packages/ipc/
COPY ./packages/telemetry/package.json ./packages/telemetry/
diff --git a/packages/types/npm/package.metadata.json b/packages/types/npm/package.metadata.json
index ec12935f6c..24c59e5aa0 100644
--- a/packages/types/npm/package.metadata.json
+++ b/packages/types/npm/package.metadata.json
@@ -1,6 +1,6 @@
{
"name": "@roo-code/types",
- "version": "1.93.0",
+ "version": "1.94.0",
"description": "TypeScript type definitions for Roo Code.",
"publishConfig": {
"access": "public",
diff --git a/packages/types/src/__tests__/custom-tool.spec.ts b/packages/types/src/__tests__/custom-tool.spec.ts
new file mode 100644
index 0000000000..9514b9fcaa
--- /dev/null
+++ b/packages/types/src/__tests__/custom-tool.spec.ts
@@ -0,0 +1,89 @@
+import {
+ type CustomToolDefinition,
+ type CustomToolContext,
+ defineCustomTool,
+ parametersSchema as z,
+} from "../custom-tool.js"
+import type { TaskLike } from "../task.js"
+
+describe("custom-tool utilities", () => {
+ describe("z (Zod re-export)", () => {
+ it("should export z from zod", () => {
+ expect(z).toBeDefined()
+ expect(z.string).toBeInstanceOf(Function)
+ expect(z.object).toBeInstanceOf(Function)
+ expect(z.number).toBeInstanceOf(Function)
+ })
+
+ it("should allow creating schemas", () => {
+ const schema = z.object({
+ name: z.string(),
+ count: z.number().optional(),
+ })
+
+ const result = schema.parse({ name: "test" })
+ expect(result).toEqual({ name: "test" })
+ })
+ })
+
+ describe("defineCustomTool", () => {
+ it("should return the same definition object", () => {
+ const definition = {
+ name: "test-tool",
+ description: "Test tool",
+ parameters: z.object({ input: z.string() }),
+ execute: async (args: { input: string }) => `Result: ${args.input}`,
+ }
+
+ const result = defineCustomTool(definition)
+ expect(result).toBe(definition)
+ })
+
+ it("should work without parameters", () => {
+ const tool = defineCustomTool({
+ name: "no-params-tool",
+ description: "No params tool",
+ execute: async () => "done",
+ })
+
+ expect(tool.description).toBe("No params tool")
+ expect(tool.parameters).toBeUndefined()
+ })
+
+ it("should preserve type inference for execute args", async () => {
+ const tool = defineCustomTool({
+ name: "typed-tool",
+ description: "Typed tool",
+ parameters: z.object({
+ name: z.string(),
+ count: z.number(),
+ }),
+ execute: async (args) => {
+ // TypeScript should infer args as { name: string, count: number }.
+ return `Hello ${args.name}, count is ${args.count}`
+ },
+ })
+
+ const context: CustomToolContext = {
+ mode: "code",
+ task: { taskId: "test-task-id" } as unknown as TaskLike,
+ }
+
+ const result = await tool.execute({ name: "World", count: 42 }, context)
+ expect(result).toBe("Hello World, count is 42")
+ })
+ })
+
+ describe("CustomToolDefinition type", () => {
+ it("should accept valid definitions", () => {
+ const def: CustomToolDefinition = {
+ name: "valid-tool",
+ description: "A valid tool",
+ parameters: z.object({}),
+ execute: async () => "result",
+ }
+
+ expect(def.description).toBe("A valid tool")
+ })
+ })
+})
diff --git a/packages/types/src/custom-tool.ts b/packages/types/src/custom-tool.ts
new file mode 100644
index 0000000000..c9740e78c3
--- /dev/null
+++ b/packages/types/src/custom-tool.ts
@@ -0,0 +1,106 @@
+import type { ZodType, z } from "zod/v4"
+
+import { TaskLike } from "./task.js"
+
+// Re-export from Zod for convenience.
+
+export { z as parametersSchema } from "zod/v4"
+
+export type CustomToolParametersSchema = ZodType
+
+export type SerializedCustomToolParameters = z.core.JSONSchema.JSONSchema
+
+/**
+ * Context provided to tool execute functions.
+ */
+export interface CustomToolContext {
+ mode: string
+ task: TaskLike
+}
+
+/**
+ * Definition structure for a custom tool.
+ *
+ * Note: This interface uses simple types to avoid TypeScript performance issues
+ * with Zod's complex type inference. For type-safe parameter inference, use
+ * the `defineCustomTool` helper function instead of annotating with this interface.
+ */
+export interface CustomToolDefinition {
+ /**
+ * The name of the tool.
+ * This is used to identify the tool in the prompt and in the tool registry.
+ */
+ name: string
+
+ /**
+ * A description of what the tool does.
+ * This is shown to the AI model to help it decide when to use the tool.
+ */
+ description: string
+
+ /**
+ * Optional Zod schema defining the tool's parameters.
+ * Use `z.object({})` to define the shape of arguments.
+ */
+ parameters?: CustomToolParametersSchema
+
+ /**
+ * The function that executes the tool.
+ *
+ * @param args - The validated arguments
+ * @param context - Execution context with session and message info
+ * @returns A string result to return to the AI
+ */
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ execute: (args: any, context: CustomToolContext) => Promise
+}
+
+export interface SerializedCustomToolDefinition {
+ name: string
+ description: string
+ parameters?: SerializedCustomToolParameters
+ source?: string
+}
+
+/**
+ * Type-safe definition structure for a custom tool with inferred parameter types.
+ * Use this with `defineCustomTool` for full type inference.
+ *
+ * @template T - The Zod schema type for parameters
+ */
+export interface TypedCustomToolDefinition extends Omit<
+ CustomToolDefinition,
+ "execute" | "parameters"
+> {
+ parameters?: T
+ execute: (args: z.infer, context: CustomToolContext) => Promise
+}
+
+/**
+ * Helper function to define a custom tool with proper type inference.
+ *
+ * This is optional - you can also just export a plain object that matches
+ * the CustomToolDefinition interface.
+ *
+ * @example
+ * ```ts
+ * import { parametersSchema as z, defineCustomTool } from "@roo-code/types"
+ *
+ * export default defineCustomTool({
+ * name: "add_numbers",
+ * description: "Add two numbers",
+ * parameters: z.object({
+ * a: z.number().describe("First number"),
+ * b: z.number().describe("Second number"),
+ * }),
+ * async execute({ a, b }) {
+ * return `The sum is ${a + b}`
+ * }
+ * })
+ * ```
+ */
+export function defineCustomTool(
+ definition: TypedCustomToolDefinition,
+): TypedCustomToolDefinition {
+ return definition
+}
diff --git a/packages/types/src/experiment.ts b/packages/types/src/experiment.ts
index 114a08f267..d6c2175249 100644
--- a/packages/types/src/experiment.ts
+++ b/packages/types/src/experiment.ts
@@ -16,6 +16,7 @@ export const experimentIds = [
"imageGeneration",
"runSlashCommand",
"multipleNativeToolCalls",
+ "customTools",
] as const
export const experimentIdsSchema = z.enum(experimentIds)
@@ -36,6 +37,7 @@ export const experimentsSchema = z.object({
imageGeneration: z.boolean().optional(),
runSlashCommand: z.boolean().optional(),
multipleNativeToolCalls: z.boolean().optional(),
+ customTools: z.boolean().optional(),
})
export type Experiments = z.infer
diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts
index 6c4ce9bd84..6447d5317e 100644
--- a/packages/types/src/index.ts
+++ b/packages/types/src/index.ts
@@ -3,6 +3,7 @@ export * from "./cloud.js"
export * from "./codebase-index.js"
export * from "./context-management.js"
export * from "./cookie-consent.js"
+export * from "./custom-tool.js"
export * from "./events.js"
export * from "./experiment.js"
export * from "./followup.js"
diff --git a/packages/types/tsup.config.ts b/packages/types/tsup.config.ts
index e1168361ff..7890a6cb72 100644
--- a/packages/types/tsup.config.ts
+++ b/packages/types/tsup.config.ts
@@ -8,4 +8,6 @@ export default defineConfig({
sourcemap: process.env.NODE_ENV !== "production",
clean: true,
outDir: "dist",
+ // Bundle zod into the output so @roo-code/types is self-contained
+ noExternal: ["zod"],
})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8baa67466a..672e2fc0c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,10 +20,10 @@ importers:
devDependencies:
'@changesets/cli':
specifier: ^2.27.10
- version: 2.29.8(@types/node@24.10.1)
+ version: 2.29.8(@types/node@24.10.4)
'@dotenvx/dotenvx':
specifier: ^1.34.0
- version: 1.51.1
+ version: 1.51.2
'@roo-code/config-typescript':
specifier: workspace:^
version: link:packages/config-typescript
@@ -32,16 +32,16 @@ importers:
version: 9.0.0
'@types/node':
specifier: ^24.1.0
- version: 24.10.1
+ version: 24.10.4
'@vscode/vsce':
specifier: 3.3.2
version: 3.3.2
esbuild:
specifier: '>=0.25.0'
- version: 0.27.1
+ version: 0.27.2
eslint:
specifier: ^9.27.0
- version: 9.39.1(jiti@2.6.1)
+ version: 9.39.2(jiti@2.6.1)
glob:
specifier: '>=11.1.0'
version: 13.0.0
@@ -50,7 +50,7 @@ importers:
version: 9.1.7
knip:
specifier: ^5.44.4
- version: 5.71.0(@types/node@24.10.1)(typescript@5.8.3)
+ version: 5.76.3(@types/node@24.10.4)(typescript@5.8.3)
lint-staged:
specifier: ^16.0.0
version: 16.2.7
@@ -74,7 +74,7 @@ importers:
version: 4.21.0
turbo:
specifier: ^2.5.6
- version: 2.6.2
+ version: 2.7.1
typescript:
specifier: ^5.4.5
version: 5.8.3
@@ -95,10 +95,10 @@ importers:
version: 10.0.10
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/vscode':
specifier: ^1.95.0
- version: 1.106.1
+ version: 1.107.0
'@vscode/test-cli':
specifier: ^0.0.11
version: 0.0.11
@@ -128,7 +128,7 @@ importers:
dependencies:
'@hookform/resolvers':
specifier: ^5.1.1
- version: 5.2.2(react-hook-form@7.68.0(react@18.3.1))
+ version: 5.2.2(react-hook-form@7.69.0(react@18.3.1))
'@radix-ui/react-alert-dialog':
specifier: ^1.1.7
version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -176,7 +176,7 @@ importers:
version: link:../../packages/types
'@tanstack/react-query':
specifier: ^5.69.0
- version: 5.90.11(react@18.3.1)
+ version: 5.90.12(react@18.3.1)
archiver:
specifier: ^7.0.1
version: 7.0.1
@@ -197,7 +197,7 @@ importers:
version: 0.518.0(react@18.3.1)
next:
specifier: ~15.2.8
- version: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -212,7 +212,7 @@ importers:
version: 18.3.1(react@18.3.1)
react-hook-form:
specifier: ^7.57.0
- version: 7.68.0(react@18.3.1)
+ version: 7.69.0(react@18.3.1)
react-use:
specifier: ^17.6.0
version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -227,7 +227,7 @@ importers:
version: 3.4.0
tailwindcss-animate:
specifier: ^1.0.7
- version: 1.0.7(tailwindcss@4.1.17)
+ version: 1.0.7(tailwindcss@4.1.18)
vaul:
specifier: ^1.1.2
version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -243,7 +243,7 @@ importers:
version: link:../../packages/config-typescript
'@tailwindcss/postcss':
specifier: ^4
- version: 4.1.17
+ version: 4.1.18
'@types/archiver':
specifier: ^7.0.0
version: 7.0.0
@@ -258,10 +258,10 @@ importers:
version: 18.3.7(@types/react@18.3.27)
tailwindcss:
specifier: ^4
- version: 4.1.17
+ version: 4.1.18
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
apps/web-roo-code:
dependencies:
@@ -279,7 +279,7 @@ importers:
version: link:../../packages/types
'@tanstack/react-query':
specifier: ^5.79.0
- version: 5.90.11(react@18.3.1)
+ version: 5.90.12(react@18.3.1)
'@vercel/og':
specifier: ^0.6.2
version: 0.6.8
@@ -306,13 +306,13 @@ importers:
version: 0.518.0(react@18.3.1)
next:
specifier: ~15.2.8
- version: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
posthog-js:
specifier: ^1.248.1
- version: 1.301.0
+ version: 1.309.1
react:
specifier: ^18.3.1
version: 18.3.1
@@ -342,7 +342,7 @@ importers:
version: 3.4.0
tailwindcss-animate:
specifier: ^1.0.7
- version: 1.0.7(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2))
+ version: 1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))
tldts:
specifier: ^6.1.86
version: 6.1.86
@@ -358,10 +358,10 @@ importers:
version: link:../../packages/config-typescript
'@tailwindcss/typography':
specifier: ^0.5.16
- version: 0.5.19(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2))
+ version: 0.5.19(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/react':
specifier: ^18.3.23
version: 18.3.27
@@ -370,16 +370,16 @@ importers:
version: 18.3.7(@types/react@18.3.27)
autoprefixer:
specifier: ^10.4.21
- version: 10.4.22(postcss@8.5.6)
+ version: 10.4.23(postcss@8.5.6)
next-sitemap:
specifier: ^4.2.3
- version: 4.2.3(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ version: 4.2.3(next@15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
postcss:
specifier: ^8.5.4
version: 8.5.6
tailwindcss:
specifier: ^3.4.17
- version: 3.4.18(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.4.19(tsx@4.21.0)(yaml@2.8.2)
packages/build:
dependencies:
@@ -395,10 +395,10 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages/cloud:
dependencies:
@@ -429,52 +429,83 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: ^24.1.0
- version: 24.10.1
+ version: 24.10.4
'@types/vscode':
specifier: ^1.102.0
- version: 1.106.1
+ version: 1.107.0
globals:
specifier: ^16.3.0
version: 16.5.0
vitest:
specifier: ^3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages/config-eslint:
devDependencies:
'@eslint/js':
specifier: ^9.22.0
- version: 9.39.1
+ version: 9.39.2
'@next/eslint-plugin-next':
specifier: ^15.2.1
- version: 15.5.7
+ version: 15.5.9
eslint:
specifier: ^9.27.0
- version: 9.39.1(jiti@2.6.1)
+ version: 9.39.2(jiti@2.6.1)
eslint-config-prettier:
specifier: ^10.1.1
- version: 10.1.8(eslint@9.39.1(jiti@2.6.1))
+ version: 10.1.8(eslint@9.39.2(jiti@2.6.1))
eslint-plugin-only-warn:
specifier: ^1.1.0
version: 1.1.0
eslint-plugin-react:
specifier: ^7.37.4
- version: 7.37.5(eslint@9.39.1(jiti@2.6.1))
+ version: 7.37.5(eslint@9.39.2(jiti@2.6.1))
eslint-plugin-react-hooks:
specifier: ^5.2.0
- version: 5.2.0(eslint@9.39.1(jiti@2.6.1))
+ version: 5.2.0(eslint@9.39.2(jiti@2.6.1))
eslint-plugin-turbo:
specifier: ^2.4.4
- version: 2.6.2(eslint@9.39.1(jiti@2.6.1))(turbo@2.6.2)
+ version: 2.7.1(eslint@9.39.2(jiti@2.6.1))(turbo@2.7.1)
globals:
specifier: ^16.0.0
version: 16.5.0
typescript-eslint:
specifier: ^8.26.0
- version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
+ version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
packages/config-typescript: {}
+ packages/core:
+ dependencies:
+ '@roo-code/types':
+ specifier: workspace:^
+ version: link:../types
+ esbuild:
+ specifier: '>=0.25.0'
+ version: 0.27.2
+ execa:
+ specifier: ^9.5.2
+ version: 9.6.1
+ openai:
+ specifier: ^5.12.2
+ version: 5.23.2(ws@8.18.3)(zod@3.25.76)
+ zod:
+ specifier: ^3.25.61
+ version: 3.25.76
+ devDependencies:
+ '@roo-code/config-eslint':
+ specifier: workspace:^
+ version: link:../config-eslint
+ '@roo-code/config-typescript':
+ specifier: workspace:^
+ version: link:../config-typescript
+ '@types/node':
+ specifier: ^24.1.0
+ version: 24.10.4
+ vitest:
+ specifier: ^3.2.3
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+
packages/evals:
dependencies:
'@roo-code/ipc':
@@ -488,7 +519,7 @@ importers:
version: 0.13.0
drizzle-orm:
specifier: ^0.44.1
- version: 0.44.7(@opentelemetry/api@1.9.0)(postgres@3.4.7)
+ version: 0.44.7(postgres@3.4.7)
execa:
specifier: ^9.6.0
version: 9.6.1
@@ -525,7 +556,7 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/node-ipc':
specifier: ^9.2.3
version: 9.2.3
@@ -534,13 +565,13 @@ importers:
version: 1.1.6
drizzle-kit:
specifier: ^0.31.1
- version: 0.31.7
+ version: 0.31.8
tsx:
specifier: ^4.19.3
version: 4.21.0
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages/ipc:
dependencies:
@@ -559,13 +590,13 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/node-ipc':
specifier: ^9.2.3
version: 9.2.3
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages/telemetry:
dependencies:
@@ -574,7 +605,7 @@ importers:
version: link:../types
posthog-node:
specifier: ^5.0.0
- version: 5.17.0
+ version: 5.17.4
uuid:
specifier: ^11.1.0
version: 11.1.0
@@ -590,13 +621,13 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/vscode':
specifier: ^1.84.0
- version: 1.106.1
+ version: 1.107.0
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages/types:
dependencies:
@@ -612,7 +643,7 @@ importers:
version: link:../config-typescript
'@types/node':
specifier: ^24.1.0
- version: 24.10.1
+ version: 24.10.4
globals:
specifier: ^16.3.0
version: 16.5.0
@@ -621,7 +652,7 @@ importers:
version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.8.3)(yaml@2.8.2)
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
src:
dependencies:
@@ -636,28 +667,31 @@ importers:
version: 0.7.0
'@aws-sdk/client-bedrock-runtime':
specifier: ^3.922.0
- version: 3.943.0
+ version: 3.956.0
'@aws-sdk/credential-providers':
specifier: ^3.922.0
- version: 3.943.0
+ version: 3.956.0
'@google/genai':
specifier: ^1.29.1
- version: 1.31.0(@modelcontextprotocol/sdk@1.24.2(zod@3.25.76))
+ version: 1.34.0(@modelcontextprotocol/sdk@1.25.1(hono@4.11.1)(zod@3.25.76))
'@lmstudio/sdk':
specifier: ^1.1.1
version: 1.5.0
'@mistralai/mistralai':
specifier: ^1.9.18
- version: 1.10.0
+ version: 1.11.0
'@modelcontextprotocol/sdk':
specifier: ^1.13.3
- version: 1.24.2(zod@3.25.76)
+ version: 1.25.1(hono@4.11.1)(zod@3.25.76)
'@qdrant/js-client-rest':
specifier: ^1.14.0
version: 1.16.2(typescript@5.8.3)
'@roo-code/cloud':
specifier: workspace:^
version: link:../packages/cloud
+ '@roo-code/core':
+ specifier: workspace:^
+ version: link:../packages/core
'@roo-code/ipc':
specifier: workspace:^
version: link:../packages/ipc
@@ -690,7 +724,7 @@ importers:
version: 4.0.1
dedent:
specifier: ^1.6.0
- version: 1.7.0
+ version: 1.7.1
default-shell:
specifier: ^2.2.0
version: 2.2.0
@@ -711,7 +745,7 @@ importers:
version: 3.1.3
fast-xml-parser:
specifier: ^5.0.0
- version: 5.3.2
+ version: 5.3.3
fastest-levenshtein:
specifier: ^1.0.16
version: 1.0.16
@@ -735,10 +769,10 @@ importers:
version: 4.0.3
i18next:
specifier: ^25.0.0
- version: 25.7.1(typescript@5.8.3)
+ version: 25.7.3(typescript@5.8.3)
iconv-lite:
specifier: ^0.7.0
- version: 0.7.0
+ version: 0.7.1
ignore:
specifier: ^7.0.3
version: 7.0.5
@@ -925,7 +959,7 @@ importers:
version: 10.0.10
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/node-cache':
specifier: ^4.1.3
version: 4.2.5
@@ -958,16 +992,16 @@ importers:
version: 5.0.6
'@types/vscode':
specifier: ^1.84.0
- version: 1.106.1
+ version: 1.107.0
'@vscode/test-electron':
specifier: ^2.5.2
version: 2.5.2
'@vscode/vsce':
specifier: 3.3.2
version: 3.3.2
- esbuild:
- specifier: '>=0.25.0'
- version: 0.27.1
+ esbuild-wasm:
+ specifier: ^0.25.0
+ version: 0.25.12
execa:
specifier: ^9.5.2
version: 9.6.1
@@ -1000,7 +1034,7 @@ importers:
version: 5.8.3
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
zod-to-ts:
specifier: ^1.2.0
version: 1.2.0(typescript@5.8.3)(zod@3.25.76)
@@ -1054,10 +1088,10 @@ importers:
version: link:../packages/types
'@tailwindcss/vite':
specifier: ^4.0.0
- version: 4.1.17(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
+ version: 4.1.18(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/react-query':
specifier: ^5.68.0
- version: 5.90.11(react@18.3.1)
+ version: 5.90.12(react@18.3.1)
'@types/qrcode':
specifier: ^1.5.5
version: 1.5.6
@@ -1099,19 +1133,19 @@ importers:
version: 2.3.6
i18next:
specifier: ^25.0.0
- version: 25.7.1(typescript@5.8.3)
+ version: 25.7.3(typescript@5.8.3)
i18next-http-backend:
specifier: ^3.0.2
version: 3.0.2
katex:
specifier: ^0.16.11
- version: 0.16.25
+ version: 0.16.27
knuth-shuffle-seeded:
specifier: ^1.0.6
version: 1.0.6
lodash-es:
specifier: ^4.17.21
- version: 4.17.21
+ version: 4.17.22
lru-cache:
specifier: ^11.1.0
version: 11.2.4
@@ -1123,7 +1157,7 @@ importers:
version: 11.12.2
posthog-js:
specifier: ^1.227.2
- version: 1.301.0
+ version: 1.309.1
pretty-bytes:
specifier: ^7.0.0
version: 7.1.0
@@ -1138,7 +1172,7 @@ importers:
version: 18.3.1(react@18.3.1)
react-i18next:
specifier: ^15.4.1
- version: 15.7.4(i18next@25.7.1(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)
+ version: 15.7.4(i18next@25.7.3(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)
react-icons:
specifier: ^5.5.0
version: 5.5.0(react@18.3.1)
@@ -1156,7 +1190,7 @@ importers:
version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-virtuoso:
specifier: ^4.14.1
- version: 4.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rehype-highlight:
specifier: ^7.0.0
version: 7.0.2
@@ -1186,7 +1220,7 @@ importers:
version: 1.8.3
shiki:
specifier: ^3.2.1
- version: 3.19.0
+ version: 3.20.0
source-map:
specifier: ^0.7.4
version: 0.7.6
@@ -1201,10 +1235,10 @@ importers:
version: 3.4.0
tailwindcss:
specifier: ^4.0.0
- version: 4.1.17
+ version: 4.1.18
tailwindcss-animate:
specifier: ^1.0.7
- version: 1.0.7(tailwindcss@4.1.17)
+ version: 1.0.7(tailwindcss@4.1.18)
unist-util-visit:
specifier: ^5.0.0
version: 5.0.0
@@ -1232,7 +1266,7 @@ importers:
version: 6.9.1
'@testing-library/react':
specifier: ^16.2.0
- version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@testing-library/user-event':
specifier: ^14.6.1
version: 14.6.1(@testing-library/dom@10.4.1)
@@ -1250,7 +1284,7 @@ importers:
version: 4.17.12
'@types/node':
specifier: 20.x
- version: 20.19.25
+ version: 20.19.27
'@types/react':
specifier: ^18.3.23
version: 18.3.27
@@ -1268,7 +1302,7 @@ importers:
version: 1.57.5
'@vitejs/plugin-react':
specifier: ^4.3.4
- version: 4.7.0(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
+ version: 4.7.0(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/ui':
specifier: ^3.2.3
version: 3.2.4(vitest@3.2.4)
@@ -1283,10 +1317,10 @@ importers:
version: 5.8.3
vite:
specifier: 6.3.6
- version: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
vitest:
specifier: ^3.2.3
- version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
packages:
@@ -1341,123 +1375,123 @@ packages:
'@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
- '@aws-sdk/client-bedrock-runtime@3.943.0':
- resolution: {integrity: sha512-mEiv1g5BeZFIQjBrzM5nT//KYLOBwUkXtHzsufkV99TIEKW5qzgOgx9Q9O8IbFQk3c7C6HYkV/kNOUI3KGyH6g==}
+ '@aws-sdk/client-bedrock-runtime@3.956.0':
+ resolution: {integrity: sha512-8cD53FBKn7uvc4QZtYZr87KcuSrEFMwS/O3HC+Y7+disgePlTXxtOo0naCj5O1yVZPuU3FCVLGzxFk5fhbzAJg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-cognito-identity@3.943.0':
- resolution: {integrity: sha512-XkuokRF2IQ+VLBn0AwrwfFOkZ2c1IXACwQdn3CDnpBZpT1s2hgH3MX0DoH9+41w4ar2QCSI09uAJiv9PX4DLoQ==}
+ '@aws-sdk/client-cognito-identity@3.956.0':
+ resolution: {integrity: sha512-aFRUb4BY0iAACVFnLdreULiO5ox1jds5TovncPlUogN5TjVA04i+hmfShj9l5Ho1sFa1WKc35tngiRmpQIJSJg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-sso@3.943.0':
- resolution: {integrity: sha512-kOTO2B8Ks2qX73CyKY8PAajtf5n39aMe2spoiOF5EkgSzGV7hZ/HONRDyADlyxwfsX39Q2F2SpPUaXzon32IGw==}
+ '@aws-sdk/client-sso@3.956.0':
+ resolution: {integrity: sha512-TCxCa9B1IMILvk/7sig0fRQzff+M2zBQVZGWOJL8SAZq/gfElIMAf/nYjQwMhXjyq8PFDRGm4GN8ZhNKPeNleQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/core@3.943.0':
- resolution: {integrity: sha512-8CBy2hI9ABF7RBVQuY1bgf/ue+WPmM/hl0adrXFlhnhkaQP0tFY5zhiy1Y+n7V+5f3/ORoHBmCCQmcHDDYJqJQ==}
+ '@aws-sdk/core@3.956.0':
+ resolution: {integrity: sha512-BMOCXZNz5z4cR3/SaNHUfeoZQUG/y39bLscdLUgg3RL6mDOhuINIqMc0qc6G3kpwDTLVdXikF4nmx2UrRK9y5A==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-cognito-identity@3.943.0':
- resolution: {integrity: sha512-jZJ0uHjNlhfjx2ZX7YVYnh1wfSkLAvQmecGCSl9C6LJRNXy4uWFPbGjPqcA0tWp0WWIsUYhqjasgvCOMZIY8nw==}
+ '@aws-sdk/credential-provider-cognito-identity@3.956.0':
+ resolution: {integrity: sha512-sqH7k7Uvbvc5V0Y8tB8CZoCd5KEuH5g30+wbrGac9s1D+TXXN6g8KnJhyYrHfwa1rJiY7B1mK80ENjG4LlUr0g==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-env@3.943.0':
- resolution: {integrity: sha512-WnS5w9fK9CTuoZRVSIHLOMcI63oODg9qd1vXMYb7QGLGlfwUm4aG3hdu7i9XvYrpkQfE3dzwWLtXF4ZBuL1Tew==}
+ '@aws-sdk/credential-provider-env@3.956.0':
+ resolution: {integrity: sha512-aLJavJMPVTvhmggJ0pcdCKEWJk3sL9QkJkUIEoTzOou7HnxWS66N4sC5e8y27AF2nlnYfIxq3hkEiZlGi/vlfA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-http@3.943.0':
- resolution: {integrity: sha512-SA8bUcYDEACdhnhLpZNnWusBpdmj4Vl67Vxp3Zke7SvoWSYbuxa+tiDiC+c92Z4Yq6xNOuLPW912ZPb9/NsSkA==}
+ '@aws-sdk/credential-provider-http@3.956.0':
+ resolution: {integrity: sha512-VsKzBNhwT6XJdW3HQX6o4KOHj1MAzSwA8/zCsT9mOGecozw1yeCcQPtlWDSlfsfygKVCXz7fiJzU03yl11NKMA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-ini@3.943.0':
- resolution: {integrity: sha512-BcLDb8l4oVW+NkuqXMlO7TnM6lBOWW318ylf4FRED/ply5eaGxkQYqdGvHSqGSN5Rb3vr5Ek0xpzSjeYD7C8Kw==}
+ '@aws-sdk/credential-provider-ini@3.956.0':
+ resolution: {integrity: sha512-TlDy+IGr0JIRBwnPdV31J1kWXEcfsR3OzcNVWQrguQdHeTw2lU5eft16kdizo6OruqcZRF/LvHBDwAWx4u51ww==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-login@3.943.0':
- resolution: {integrity: sha512-9iCOVkiRW+evxiJE94RqosCwRrzptAVPhRhGWv4osfYDhjNAvUMyrnZl3T1bjqCoKNcETRKEZIU3dqYHnUkcwQ==}
+ '@aws-sdk/credential-provider-login@3.956.0':
+ resolution: {integrity: sha512-p2Y62mdIlUpiyi5tvn8cKTja5kq1e3Rm5gm4wpNQ9caTayfkIEXyKrbP07iepTv60Coaylq9Fx6b5En/siAeGA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-node@3.943.0':
- resolution: {integrity: sha512-14eddaH/gjCWoLSAELVrFOQNyswUYwWphIt+PdsJ/FqVfP4ay2HsiZVEIYbQtmrKHaoLJhiZKwBQRjcqJDZG0w==}
+ '@aws-sdk/credential-provider-node@3.956.0':
+ resolution: {integrity: sha512-ITjp7uAQh17ljUsCWkPRmLjyFfupGlJVUfTLHnZJ+c7G0P0PDRquaM+fBSh0y33tauHsBa5fGnCCLRo5hy9sGQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-process@3.943.0':
- resolution: {integrity: sha512-GIY/vUkthL33AdjOJ8r9vOosKf/3X+X7LIiACzGxvZZrtoOiRq0LADppdiKIB48vTL63VvW+eRIOFAxE6UDekw==}
+ '@aws-sdk/credential-provider-process@3.956.0':
+ resolution: {integrity: sha512-wpAex+/LGVWkHPchsn9FWy1ahFualIeSYq3ADFc262ljJjrltOWGh3+cu3OK3gTMkX6VEsl+lFvy1P7Bk7cgXA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-sso@3.943.0':
- resolution: {integrity: sha512-1c5G11syUrru3D9OO6Uk+ul5e2lX1adb+7zQNyluNaLPXP6Dina6Sy6DFGRLu7tM8+M7luYmbS3w63rpYpaL+A==}
+ '@aws-sdk/credential-provider-sso@3.956.0':
+ resolution: {integrity: sha512-IRFSDF32x8TpOEYSGMcGQVJUiYuJaFkek0aCjW0klNIZHBF1YpflVpUarK9DJe4v4ryfVq3c0bqR/JFui8QFmw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-web-identity@3.943.0':
- resolution: {integrity: sha512-VtyGKHxICSb4kKGuaqotxso8JVM8RjCS3UYdIMOxUt9TaFE/CZIfZKtjTr+IJ7M0P7t36wuSUb/jRLyNmGzUUA==}
+ '@aws-sdk/credential-provider-web-identity@3.956.0':
+ resolution: {integrity: sha512-4YkmjwZC+qoUKlVOY9xNx7BTKRdJ1R1/Zjk2QSW5aWtwkk2e07ZUQvUpbW4vGpAxGm1K4EgRcowuSpOsDTh44Q==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-providers@3.943.0':
- resolution: {integrity: sha512-uZurSNsS01ehhrSwEPwcKdqp9lmd/x9q++BYO351bXyjSj1LzA/2lfUIxI2tCz/wAjJWOdnnlUdJj6P9I1uNvw==}
+ '@aws-sdk/credential-providers@3.956.0':
+ resolution: {integrity: sha512-Fc8NWNkPZt61OIS6BRUWS+Po3z3nh3gE4w+4cZ083CdXxx4CCB82Oa0Fe2/E5l7p/z4vhEDXWwuJdiDQQXTplQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/eventstream-handler-node@3.936.0':
- resolution: {integrity: sha512-4zIbhdRmol2KosIHmU31ATvNP0tkJhDlRj9GuawVJoEnMvJA1pd2U3SRdiOImJU3j8pT46VeS4YMmYxfjGHByg==}
+ '@aws-sdk/eventstream-handler-node@3.956.0':
+ resolution: {integrity: sha512-OdnzsiCyMcK9fkMI3II7+q8qu3hY5iK4coV8VjXI5u05UEbg3iosQynlkv0FXztSodPYYwnuZ0lFtIthsUy0Tw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-eventstream@3.936.0':
- resolution: {integrity: sha512-XQSH8gzLkk8CDUDxyt4Rdm9owTpRIPdtg2yw9Y2Wl5iSI55YQSiC3x8nM3c4Y4WqReJprunFPK225ZUDoYCfZA==}
+ '@aws-sdk/middleware-eventstream@3.956.0':
+ resolution: {integrity: sha512-xBhNmBCJxB4ho7ATmhniv3PK3qN5ZEgknUI+7XTM/cnQBzuYG5twAQSkGdInzEjygTSTmKpkdBVh67AxKTotAQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-host-header@3.936.0':
- resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==}
+ '@aws-sdk/middleware-host-header@3.956.0':
+ resolution: {integrity: sha512-JujNJDp/dj1DbsI0ntzhrz2uJ4jpumcKtr743eMpEhdboYjuu/UzY8/7n1h5JbgU9TNXgqE9lgQNa5QPG0Tvsg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-logger@3.936.0':
- resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==}
+ '@aws-sdk/middleware-logger@3.956.0':
+ resolution: {integrity: sha512-Qff39yEOPYgRsm4SrkHOvS0nSoxXILYnC8Akp0uMRi2lOcZVyXL3WCWqIOtI830qVI4GPa796sleKguxx50RHg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-recursion-detection@3.936.0':
- resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==}
+ '@aws-sdk/middleware-recursion-detection@3.956.0':
+ resolution: {integrity: sha512-/f4JxL2kSCYhy63wovqts6SJkpalSLvuFe78ozt3ClrGoHGyr69o7tPRYx5U7azLgvrIGjsWUyTayeAk3YHIVQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-user-agent@3.943.0':
- resolution: {integrity: sha512-956n4kVEwFNXndXfhSAN5wO+KRgqiWEEY+ECwLvxmmO8uQ0NWOa8l6l65nTtyuiWzMX81c9BvlyNR5EgUeeUvA==}
+ '@aws-sdk/middleware-user-agent@3.956.0':
+ resolution: {integrity: sha512-azH8OJ0AIe3NafaTNvJorG/ALaLNTYwVKtyaSeQKOvaL8TNuBVuDnM5iHCiWryIaRgZotomqycwyfNKLw2D3JQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-websocket@3.936.0':
- resolution: {integrity: sha512-bPe3rqeugyj/MmjP0yBSZox2v1Wa8Dv39KN+RxVbQroLO8VUitBo6xyZ0oZebhZ5sASwSg58aDcMlX0uFLQnTA==}
+ '@aws-sdk/middleware-websocket@3.956.0':
+ resolution: {integrity: sha512-yH8D1z5stLDPZPXoDsgzyMIwziMUj6v5riHARJ4cECJBtdREJwDmp56c+iCzkhvtWKqeL/viAlj4Kwe2fAmTxw==}
engines: {node: '>= 14.0.0'}
- '@aws-sdk/nested-clients@3.943.0':
- resolution: {integrity: sha512-anFtB0p2FPuyUnbOULwGmKYqYKSq1M73c9uZ08jR/NCq6Trjq9cuF5TFTeHwjJyPRb4wMf2Qk859oiVfFqnQiw==}
+ '@aws-sdk/nested-clients@3.956.0':
+ resolution: {integrity: sha512-GHDQMkxoWpi3eTrhWGmghw0gsZJ5rM1ERHfBFhlhduCdtV3TyhKVmDgFG84KhU8v18dcVpSp3Pu3KwH7j1tgIg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/region-config-resolver@3.936.0':
- resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==}
+ '@aws-sdk/region-config-resolver@3.956.0':
+ resolution: {integrity: sha512-byU5XYekW7+rZ3e067y038wlrpnPkdI4fMxcHCHrv+TAfzl8CCk5xLyzerQtXZR8cVPVOXuaYWe1zKW0uCnXUA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/token-providers@3.943.0':
- resolution: {integrity: sha512-cRKyIzwfkS+XztXIFPoWORuaxlIswP+a83BJzelX4S1gUZ7FcXB4+lj9Jxjn8SbQhR4TPU3Owbpu+S7pd6IRbQ==}
+ '@aws-sdk/token-providers@3.956.0':
+ resolution: {integrity: sha512-I01Q9yDeG9oXge14u/bubtSdBpok/rTsPp2AQwy5xj/5PatRTHPbUTP6tef3AH/lFCAqkI0nncIcgx6zikDdUQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/types@3.936.0':
- resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==}
+ '@aws-sdk/types@3.956.0':
+ resolution: {integrity: sha512-DMRU/p9wAlAJxEjegnLwduCA8YP2pcT/sIJ+17KSF38c5cC6CbBhykwbZLECTo+zYzoFrOqeLbqE6paH8Gx3ug==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-endpoints@3.936.0':
- resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==}
+ '@aws-sdk/util-endpoints@3.956.0':
+ resolution: {integrity: sha512-xZ5CBoubS4rs9JkFniKNShDtfqxaMUnwaebYMoybZm070q9+omFkQkJYXl7kopTViEgZgQl1sAsAkrawBM8qEQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-format-url@3.936.0':
- resolution: {integrity: sha512-MS5eSEtDUFIAMHrJaMERiHAvDPdfxc/T869ZjDNFAIiZhyc037REw0aoTNeimNXDNy2txRNZJaAUn/kE4RwN+g==}
+ '@aws-sdk/util-format-url@3.956.0':
+ resolution: {integrity: sha512-Piap0XvvmZMtCjeCStuAG/Meq7/U5SR3X+ZDduRYMKlkNtkLcc98e9Sih5AThIJLUdffRS/M+gQRiWvc1sm1ww==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-locate-window@3.893.0':
- resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==}
+ '@aws-sdk/util-locate-window@3.953.0':
+ resolution: {integrity: sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-user-agent-browser@3.936.0':
- resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==}
+ '@aws-sdk/util-user-agent-browser@3.956.0':
+ resolution: {integrity: sha512-s8KwYR3HqiGNni7a1DN2P3RUog64QoBQ6VCSzJkHBWb6++8KSOpqeeDkfmEz+22y1LOne+bRrpDGKa0aqOc3rQ==}
- '@aws-sdk/util-user-agent-node@3.943.0':
- resolution: {integrity: sha512-gn+ILprVRrgAgTIBk2TDsJLRClzIOdStQFeFTcN0qpL8Z4GBCqMFhw7O7X+MM55Stt5s4jAauQ/VvoqmCADnQg==}
+ '@aws-sdk/util-user-agent-node@3.956.0':
+ resolution: {integrity: sha512-H0r6ol3Rr63/3xvrUsLqHps+cA7VkM7uCU5NtuTHnMbv3uYYTKf9M2XFHAdVewmmRgssTzvqemrARc8Ji3SNvg==}
engines: {node: '>=18.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
@@ -1468,8 +1502,8 @@ packages:
'@aws-sdk/util-utf8-browser@3.259.0':
resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==}
- '@aws-sdk/xml-builder@3.930.0':
- resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==}
+ '@aws-sdk/xml-builder@3.956.0':
+ resolution: {integrity: sha512-x/IvXUeQYNUEQojpRIQpFt4X7XGxqzjUlXFRdwaTCtTz3q1droXVJvYOhnX3KiMgzeHGlBJfY4Nmq3oZNEUGFw==}
engines: {node: '>=18.0.0'}
'@aws/lambda-invoke-store@0.2.2':
@@ -1508,16 +1542,16 @@ packages:
resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==}
engines: {node: '>=20.0.0'}
- '@azure/msal-browser@4.26.2':
- resolution: {integrity: sha512-F2U1mEAFsYGC5xzo1KuWc/Sy3CRglU9Ql46cDUx8x/Y3KnAIr1QAq96cIKCk/ZfnVxlvprXWRjNKoEpgLJXLhg==}
+ '@azure/msal-browser@4.27.0':
+ resolution: {integrity: sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==}
engines: {node: '>=0.8.0'}
- '@azure/msal-common@15.13.2':
- resolution: {integrity: sha512-cNwUoCk3FF8VQ7Ln/MdcJVIv3sF73/OT86cRH81ECsydh7F4CNfIo2OAx6Cegtg8Yv75x4506wN4q+Emo6erOA==}
+ '@azure/msal-common@15.13.3':
+ resolution: {integrity: sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==}
engines: {node: '>=0.8.0'}
- '@azure/msal-node@3.8.3':
- resolution: {integrity: sha512-Ul7A4gwmaHzYWj2Z5xBDly/W8JSC1vnKgJ898zPMZr0oSf1ah0tiL15sytjycU/PMhDZAlkWtEL1+MzNMU6uww==}
+ '@azure/msal-node@3.8.4':
+ resolution: {integrity: sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==}
engines: {node: '>=16'}
'@babel/code-frame@7.27.1':
@@ -1714,8 +1748,8 @@ packages:
resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
- '@dotenvx/dotenvx@1.51.1':
- resolution: {integrity: sha512-fqcQxcxC4LOaUlW8IkyWw8x0yirlLUkbxohz9OnWvVWjf73J5yyw7jxWnkOJaUKXZotcGEScDox9MU6rSkcDgg==}
+ '@dotenvx/dotenvx@1.51.2':
+ resolution: {integrity: sha512-+693mNflujDZxudSEqSNGpn92QgFhJlBn9q2mDQ9yGWyHuz3hZ8B5g3EXCwdAz4DMJAI+OFCIbfEFZS+YRdrEA==}
hasBin: true
'@drizzle-team/brocli@0.10.2':
@@ -1753,158 +1787,158 @@ packages:
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
- '@esbuild/aix-ppc64@0.27.1':
- resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==}
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.27.1':
- resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==}
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.27.1':
- resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==}
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.27.1':
- resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==}
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.27.1':
- resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==}
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.1':
- resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==}
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.27.1':
- resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==}
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.1':
- resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==}
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.27.1':
- resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==}
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.27.1':
- resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==}
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.27.1':
- resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==}
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.27.1':
- resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==}
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.27.1':
- resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==}
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.27.1':
- resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==}
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.1':
- resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==}
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.27.1':
- resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==}
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.27.1':
- resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==}
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.27.1':
- resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==}
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.1':
- resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==}
+ '@esbuild/netbsd-x64@0.27.2':
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.27.1':
- resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==}
+ '@esbuild/openbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.1':
- resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==}
+ '@esbuild/openbsd-x64@0.27.2':
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.27.1':
- resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==}
+ '@esbuild/openharmony-arm64@0.27.2':
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.27.1':
- resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==}
+ '@esbuild/sunos-x64@0.27.2':
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.27.1':
- resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==}
+ '@esbuild/win32-arm64@0.27.2':
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.27.1':
- resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==}
+ '@esbuild/win32-ia32@0.27.2':
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.27.1':
- resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==}
+ '@esbuild/win32-x64@0.27.2':
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -1935,8 +1969,8 @@ packages:
resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.39.1':
- resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
@@ -1968,15 +2002,21 @@ packages:
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- '@google/genai@1.31.0':
- resolution: {integrity: sha512-rK0RKXxNkbK35eDl+G651SxtxwHNEOogjyeZJUJe+Ed4yxu3xy5ufCiU0+QLT7xo4M9Spey8OAYfD8LPRlYBKw==}
+ '@google/genai@1.34.0':
+ resolution: {integrity: sha512-vu53UMPvjmb7PGzlYu6Tzxso8Dfhn+a7eQFaS2uNemVtDZKwzSpJ5+ikqBbXplF7RGB1STcVDqCkPvquiwb2sw==}
engines: {node: '>=20.0.0'}
peerDependencies:
- '@modelcontextprotocol/sdk': ^1.20.1
+ '@modelcontextprotocol/sdk': ^1.24.0
peerDependenciesMeta:
'@modelcontextprotocol/sdk':
optional: true
+ '@hono/node-server@1.19.7':
+ resolution: {integrity: sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw==}
+ engines: {node: '>=18.14.1'}
+ peerDependencies:
+ hono: ^4
+
'@hookform/resolvers@5.2.2':
resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
peerDependencies:
@@ -2200,14 +2240,14 @@ packages:
'@microsoft/fast-web-utilities@5.4.1':
resolution: {integrity: sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==}
- '@mistralai/mistralai@1.10.0':
- resolution: {integrity: sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg==}
+ '@mistralai/mistralai@1.11.0':
+ resolution: {integrity: sha512-6/BVj2mcaggYbpMzNSxtqtM2Tv/Jb5845XFd2CMYFO+O5VBkX70iLjtkBBTI4JFhh1l9vTCIMYXBVOjLoBVHGQ==}
'@mixmark-io/domino@2.2.0':
resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==}
- '@modelcontextprotocol/sdk@1.24.2':
- resolution: {integrity: sha512-hS/kzSfchqzvUeJUsdiDHi84/kNhLIZaZ6coGQVwbYIelOBbcAwUohUfaQTLa1MvFOK/jbTnGFzraHSFwB7pjQ==}
+ '@modelcontextprotocol/sdk@1.25.1':
+ resolution: {integrity: sha512-yO28oVFFC7EBoiKdAn+VqRm+plcfv4v0xp6osG/VsCB0NlPZWi87ajbCZZ8f/RvOFLEu7//rSRmuZZ7lMoe3gQ==}
engines: {node: '>=18'}
peerDependencies:
'@cfworker/json-schema': ^4.1.1
@@ -2232,8 +2272,8 @@ packages:
'@next/env@15.2.8':
resolution: {integrity: sha512-TaEsAki14R7BlgywA05t2PFYfwZiNlGUHyIQHVyloXX3y+Dm0HUITe5YwTkjtuOQuDhuuLotNEad4VtnmE11Uw==}
- '@next/eslint-plugin-next@15.5.7':
- resolution: {integrity: sha512-DtRU2N7BkGr8r+pExfuWHwMEPX5SD57FeA6pxdgCHODo+b/UgIgjE+rgWKtJAbEbGhVZ2jtHn4g3wNhWFoNBQQ==}
+ '@next/eslint-plugin-next@15.5.9':
+ resolution: {integrity: sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==}
'@next/swc-darwin-arm64@15.2.5':
resolution: {integrity: sha512-4OimvVlFTbgzPdA0kh8A1ih6FN9pQkL4nPXGqemEYgk+e7eQhsst/p35siNNqA49eQA6bvKZ1ASsDtu9gtXuog==}
@@ -2403,115 +2443,111 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@opentelemetry/api@1.9.0':
- resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
- engines: {node: '>=8.0.0'}
-
- '@oxc-resolver/binding-android-arm-eabi@11.14.2':
- resolution: {integrity: sha512-bTrdE4Z1JcGwPxBOaGbxRbpOHL8/xPVJTTq3/bAZO2euWX0X7uZ+XxsbC+5jUDMhLenqdFokgE1akHEU4xsh6A==}
+ '@oxc-resolver/binding-android-arm-eabi@11.16.0':
+ resolution: {integrity: sha512-/kFX4o8KISHCZzHRs8fBp/wZOPdkhYGquhMP2PQjc8ePAVbtaXXDPAFkjUKhz2jXNPS4jGA1wNW+8grhnJgstw==}
cpu: [arm]
os: [android]
- '@oxc-resolver/binding-android-arm64@11.14.2':
- resolution: {integrity: sha512-bL7/f6YGKUvt/wzpX7ZrHCf1QerotbSG+IIb278AklXuwr6yQdfQHt7KQ8hAWqSYpB2TAbPbAa9HE4wzVyxL9Q==}
+ '@oxc-resolver/binding-android-arm64@11.16.0':
+ resolution: {integrity: sha512-kPySx7j7mPxW4mRDrdbADyzJV2XrxVeMPDmNnFvTt0/LT1IA26Uk9hzWKQb4k4aeJY58bnRY1soYSawW5wAlKQ==}
cpu: [arm64]
os: [android]
- '@oxc-resolver/binding-darwin-arm64@11.14.2':
- resolution: {integrity: sha512-0zhMhqHz/kC6/UzMC4D9mVBz3/M9UTorbaULfHjAW5b8SUC08H01lZ5fR3OzfDbJI0ByLfiQZmbovuR/pJ8Wzg==}
+ '@oxc-resolver/binding-darwin-arm64@11.16.0':
+ resolution: {integrity: sha512-eB00fkys5TX6oI3lY+1hgHl6dwfmrbhHTmInmJmfD6BysHpE+DUqSdQIRS2v5NI6+j+J9EWBmbW3hRtolr+MSg==}
cpu: [arm64]
os: [darwin]
- '@oxc-resolver/binding-darwin-x64@11.14.2':
- resolution: {integrity: sha512-kRJBTCQnrGy1mjO+658yMrlGYWEKi6j4JvKt92PRCoeDX0vW4jvzgoJXzZXNxZL1pCY6jIdwsn9u53v4jwpR6g==}
+ '@oxc-resolver/binding-darwin-x64@11.16.0':
+ resolution: {integrity: sha512-B/yMSxqe4MZfh/VoMax0qixl4XxG/sAQVlYtdVGNteBAYKfX/uw2mglkYsApk6D4qD6fVgJ21RwI50lV7oD0Qg==}
cpu: [x64]
os: [darwin]
- '@oxc-resolver/binding-freebsd-x64@11.14.2':
- resolution: {integrity: sha512-lpKiya7qPq5EAV5E16SJbxfhNYRCBZATGngn9mZxR2fMLDVbHISDIP2Br8eWA8M1FBJFsOGgBzxDo+42ySSNZQ==}
+ '@oxc-resolver/binding-freebsd-x64@11.16.0':
+ resolution: {integrity: sha512-aKj+PNsSdn0owueMt/6TtR8QuLBNL/q2HgMdN8nRCDmoCBPvQlwB2s+AcW+UW1vyiok+9qiI5tVjihbKwQ+Khg==}
cpu: [x64]
os: [freebsd]
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.14.2':
- resolution: {integrity: sha512-zRIf49IGs4cE9rwpVM3NxlHWquZpwQLebtc9dY9S+4+B+PSLIP95BrzdRfkspwzWC5DKZsOWpvGQjxQiLoUwGA==}
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.0':
+ resolution: {integrity: sha512-fxod0D0eMsIlGF98KRAwR3zjLCbpRoknDHjCHx22A9TmyQthGo7t66gwkRCj5g2LBbpaPZ+i6cYd2l9bRrx8+Q==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm-musleabihf@11.14.2':
- resolution: {integrity: sha512-sF1fBrcfwoRkv1pR3Kp6D5MuBeHRPxYuzk9rhaun/50vq5nAMOaomkEm4hBbTSubfU86CoBIEbLUQ+1f7NvUVA==}
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.16.0':
+ resolution: {integrity: sha512-5BoVnD0hpEID/13hnj0fCIojE26wfa9p4puCnm12/D5BhGlXA103n8iRaPZPLHS/prQGtrwMiFONiysD6vmIBA==}
cpu: [arm]
os: [linux]
- '@oxc-resolver/binding-linux-arm64-gnu@11.14.2':
- resolution: {integrity: sha512-O8iTBqz6oxf1k93Rn6WMGGQYo2jV1K81hq4N/Nke3dHE25EIEg2RKQqMz1dFrvVb2RkvD7QaUTEevbx0Lq+4wQ==}
+ '@oxc-resolver/binding-linux-arm64-gnu@11.16.0':
+ resolution: {integrity: sha512-dMoKX6A8iuIdShbc4PB/+q6Tx8grgQxNAJQfIAmpaDTZp5NxfgzKrssPL0TCdu3RQMblF8yfXLYUFnOdPYZeRg==}
cpu: [arm64]
os: [linux]
- '@oxc-resolver/binding-linux-arm64-musl@11.14.2':
- resolution: {integrity: sha512-HOfzpS6eUxvdch9UlXCMx2kNJWMNBjUpVJhseqAKDB1dlrfCHgexeLyBX977GLXkq2BtNXKsY3KCryy1QhRSRw==}
+ '@oxc-resolver/binding-linux-arm64-musl@11.16.0':
+ resolution: {integrity: sha512-oLJsyqVHw53ZZPl3+wPiRNXTvavBFSInRYBB5MaNf+y42+b4XJfH7hVYyc67er0c26cQUCfx2KzqltSx7Jg9jg==}
cpu: [arm64]
os: [linux]
- '@oxc-resolver/binding-linux-ppc64-gnu@11.14.2':
- resolution: {integrity: sha512-0uLG6F2zljUseQAUmlpx/9IdKpiLsSirpmrr8/aGVfiEurIJzC/1lo2HQskkM7e0VVOkXg37AjHUDLE23Fi8SA==}
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.16.0':
+ resolution: {integrity: sha512-qL7GsXwyytVTIh/o8cLftRYvzrpniD8pFf0jDW3VXlVsl1joCrb4GM26udGls7Zxe76nsZpPvQVB5eZ9xmHxIA==}
cpu: [ppc64]
os: [linux]
- '@oxc-resolver/binding-linux-riscv64-gnu@11.14.2':
- resolution: {integrity: sha512-Pdh0BH/E0YIK7Qg95IsAfQyU9rAoDoFh50R19zCTNfjSnwsoDMGHjmUc82udSfPo2YMnuxA+/+aglxmLQVSu2Q==}
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.16.0':
+ resolution: {integrity: sha512-CFJEvagoakxPtIoKtRgPoGUqeXSgd63c3/T9hOXrgelOaMv6aEWFfjvc/4Lk5ppk2wv4KeK4IqOKBe8Faqv1Mw==}
cpu: [riscv64]
os: [linux]
- '@oxc-resolver/binding-linux-riscv64-musl@11.14.2':
- resolution: {integrity: sha512-3DLQhJ2r53rCH5cudYFqD7nh+Z6ABvld3GjbiqHhT43GMIPw3JcHekC2QunLRNjRr1G544fo1HtjTJz9rCBpyg==}
+ '@oxc-resolver/binding-linux-riscv64-musl@11.16.0':
+ resolution: {integrity: sha512-LVuE2tbZ7gjEjY1G8mjf7+pacj0/Rge9EoHxr8DY2gAxxy0qXe5Yh2Qxe3dwwFGObVNioqRH0IPkePmQ/KJK6w==}
cpu: [riscv64]
os: [linux]
- '@oxc-resolver/binding-linux-s390x-gnu@11.14.2':
- resolution: {integrity: sha512-G5BnAOQ5f+RUG1cvlJ4BvV+P7iKLYBv67snqgcfwD5b2N4UwJj32bt4H5JfolocWy4x3qUjEDWTIjHdE+2uZ9w==}
+ '@oxc-resolver/binding-linux-s390x-gnu@11.16.0':
+ resolution: {integrity: sha512-D4Zk48WN7sKsbyq4xD2F09U4S0sIkHXTW9A33BaqjfNXOD/jFXM5nTPahHx2RxBLo5ZEgS3kUW1U8V0oCBcPcg==}
cpu: [s390x]
os: [linux]
- '@oxc-resolver/binding-linux-x64-gnu@11.14.2':
- resolution: {integrity: sha512-VirQAX2PqKrhWtQGsSDEKlPhbgh3ggjT1sWuxLk4iLFwtyA2tLEPXJNAsG0kfAS2+VSA8OyNq16wRpQlMPZ4yA==}
+ '@oxc-resolver/binding-linux-x64-gnu@11.16.0':
+ resolution: {integrity: sha512-WyqsQwz+x1lDe/rwf5pl/FiTiS4eEM7hEHn1OwjP+EThzXXBup9BeZE5QVB421QGm9n4SyJT1gJgI1LCRvqbaA==}
cpu: [x64]
os: [linux]
- '@oxc-resolver/binding-linux-x64-musl@11.14.2':
- resolution: {integrity: sha512-q4ORcwMkpzu4EhZyka/s2TuH2QklEHAr/mIQBXzu5BACeBJZIFkICp8qrq4XVnkEZ+XhSFTvBECqfMTT/4LSkA==}
+ '@oxc-resolver/binding-linux-x64-musl@11.16.0':
+ resolution: {integrity: sha512-5XCuIoviaMsiAAuaQL4HqnYj1BkADcbtdf2s6Ru4YHF3P/bt2p05hd4xVo85cFT1VXlGYL66XVfepsAGymJs0g==}
cpu: [x64]
os: [linux]
- '@oxc-resolver/binding-openharmony-arm64@11.14.2':
- resolution: {integrity: sha512-ZsMIpDCxSFpUM/TwOovX5vZUkV0IukPFnrKTGaeJRuTKXMcJxMiQGCYTwd6y684Y3j55QZqIMkVM9NdCGUX6Kw==}
+ '@oxc-resolver/binding-openharmony-arm64@11.16.0':
+ resolution: {integrity: sha512-gn54HKxOhWTxZG8pNeBMmbRwHT4k/eIf0KxBII2oHUrSTinNTcqu6xn1etqt1Yezi9KzJzkTMS0cl5kTFmCHUQ==}
cpu: [arm64]
os: [openharmony]
- '@oxc-resolver/binding-wasm32-wasi@11.14.2':
- resolution: {integrity: sha512-Lvq5ZZNvSjT3Jq/buPFMtp55eNyGlEWsq30tN+yLOfODSo6T6yAJNs6+wXtqu9PiMj4xpVtgXypHtbQ1f+t7kw==}
+ '@oxc-resolver/binding-wasm32-wasi@11.16.0':
+ resolution: {integrity: sha512-dUsUjffSI7nlt+TH9C4gGqmD/kNyx3Kghh8u+i8eZZAEFWDO+s51Yw3UADDa0BYrZDeaLjz8rgHWCE8lxpL2XQ==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-resolver/binding-win32-arm64-msvc@11.14.2':
- resolution: {integrity: sha512-7w7WHSLSSmkkYHH52QF7TrO0Z8eaIjRUrre5M56hSWRAZupCRzADZxBVMpDnHobZ8MAa2kvvDEfDbERuOK/avQ==}
+ '@oxc-resolver/binding-win32-arm64-msvc@11.16.0':
+ resolution: {integrity: sha512-6EhsnwzA6iT752sU5tv/r+XI5cz6sWUPHJZu3brTW3m96j6yCZ8vnfeKAkFCzuDwZAXOkRLPW8WKrL0GXWfCUQ==}
cpu: [arm64]
os: [win32]
- '@oxc-resolver/binding-win32-ia32-msvc@11.14.2':
- resolution: {integrity: sha512-hIrdlWa6tzqyfuWrxUetURBWHttBS+NMbBrGhCupc54NCXFy2ArB+0JOOaLYiI2ShKL5a3uqB7EWxmjzOuDdPQ==}
+ '@oxc-resolver/binding-win32-ia32-msvc@11.16.0':
+ resolution: {integrity: sha512-YpUXuKrslGs4+In1gZhY25menhzyBbMct4RvWT9je6mYA5VCQ6aGAZf/ky5b+5sNPpR2UBNbCcYk5pP/6MowMw==}
cpu: [ia32]
os: [win32]
- '@oxc-resolver/binding-win32-x64-msvc@11.14.2':
- resolution: {integrity: sha512-dP9aV6AZRRpg5mlg0eMuTROtttpQwj3AiegNJ/NNmMSjs+0+aLNcgkWRPhskK3vjTsthH4/+kKLpnQhSxdJkNg==}
+ '@oxc-resolver/binding-win32-x64-msvc@11.16.0':
+ resolution: {integrity: sha512-x3hU0m0c/+frUSFaw3r5Xmde5q/PdsAfznh+8lZloGK2/qfIze0jyQG0H5M6AgrUIQE1oNn8vdGXanza5+naMw==}
cpu: [x64]
os: [win32]
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- '@posthog/core@1.7.0':
- resolution: {integrity: sha512-d6ZV4grpzeH/6/LP8quMVpSjY1puRkrqfwcPvGRKUAX7tb7YHyp/zMiTDuJmOFbpUxAMBXH5nDwcPiyCY2WGzA==}
+ '@posthog/core@1.8.1':
+ resolution: {integrity: sha512-jfzBtQIk9auRi/biO+G/gumK5KxqsD5wOr7XpYMROE/I3pazjP4zIziinp21iQuIQJMXrDvwt9Af3njgOGwtew==}
'@puppeteer/browsers@2.11.0':
resolution: {integrity: sha512-n6oQX6mYkG8TRPuPXmbPidkUbsSRalhmaaVAQxvH1IkQy63cwsH+kOjB3e4cpCDHg0aSvsiX9bQ4s2VB6mGWUQ==}
@@ -3077,136 +3113,136 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
- '@rollup/rollup-android-arm-eabi@4.53.3':
- resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
+ '@rollup/rollup-android-arm-eabi@4.54.0':
+ resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.53.3':
- resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
+ '@rollup/rollup-android-arm64@4.54.0':
+ resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.53.3':
- resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
+ '@rollup/rollup-darwin-arm64@4.54.0':
+ resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.53.3':
- resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
+ '@rollup/rollup-darwin-x64@4.54.0':
+ resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.53.3':
- resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
+ '@rollup/rollup-freebsd-arm64@4.54.0':
+ resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.53.3':
- resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
+ '@rollup/rollup-freebsd-x64@4.54.0':
+ resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
- resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
+ resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.53.3':
- resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
+ '@rollup/rollup-linux-arm-musleabihf@4.54.0':
+ resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.53.3':
- resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
+ '@rollup/rollup-linux-arm64-gnu@4.54.0':
+ resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.53.3':
- resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
+ '@rollup/rollup-linux-arm64-musl@4.54.0':
+ resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.53.3':
- resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
+ '@rollup/rollup-linux-loong64-gnu@4.54.0':
+ resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.53.3':
- resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
+ '@rollup/rollup-linux-ppc64-gnu@4.54.0':
+ resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.53.3':
- resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
+ '@rollup/rollup-linux-riscv64-gnu@4.54.0':
+ resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.53.3':
- resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
+ '@rollup/rollup-linux-riscv64-musl@4.54.0':
+ resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.53.3':
- resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
+ '@rollup/rollup-linux-s390x-gnu@4.54.0':
+ resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.53.3':
- resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
+ '@rollup/rollup-linux-x64-gnu@4.54.0':
+ resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.53.3':
- resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
+ '@rollup/rollup-linux-x64-musl@4.54.0':
+ resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-openharmony-arm64@4.53.3':
- resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
+ '@rollup/rollup-openharmony-arm64@4.54.0':
+ resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.53.3':
- resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
+ '@rollup/rollup-win32-arm64-msvc@4.54.0':
+ resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.53.3':
- resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
+ '@rollup/rollup-win32-ia32-msvc@4.54.0':
+ resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.53.3':
- resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
+ '@rollup/rollup-win32-x64-gnu@4.54.0':
+ resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.53.3':
- resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
+ '@rollup/rollup-win32-x64-msvc@4.54.0':
+ resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
cpu: [x64]
os: [win32]
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
- '@shikijs/core@3.19.0':
- resolution: {integrity: sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==}
+ '@shikijs/core@3.20.0':
+ resolution: {integrity: sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==}
- '@shikijs/engine-javascript@3.19.0':
- resolution: {integrity: sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==}
+ '@shikijs/engine-javascript@3.20.0':
+ resolution: {integrity: sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==}
- '@shikijs/engine-oniguruma@3.19.0':
- resolution: {integrity: sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==}
+ '@shikijs/engine-oniguruma@3.20.0':
+ resolution: {integrity: sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==}
- '@shikijs/langs@3.19.0':
- resolution: {integrity: sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==}
+ '@shikijs/langs@3.20.0':
+ resolution: {integrity: sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==}
- '@shikijs/themes@3.19.0':
- resolution: {integrity: sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==}
+ '@shikijs/themes@3.20.0':
+ resolution: {integrity: sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==}
- '@shikijs/types@3.19.0':
- resolution: {integrity: sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==}
+ '@shikijs/types@3.20.0':
+ resolution: {integrity: sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -3227,67 +3263,66 @@ packages:
resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
engines: {node: '>=14.0.0'}
- '@smithy/abort-controller@4.2.5':
- resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==}
+ '@smithy/abort-controller@4.2.7':
+ resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==}
engines: {node: '>=18.0.0'}
- '@smithy/config-resolver@4.4.3':
- resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==}
+ '@smithy/config-resolver@4.4.5':
+ resolution: {integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==}
engines: {node: '>=18.0.0'}
- '@smithy/core@3.18.7':
- resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==}
+ '@smithy/core@3.20.0':
+ resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==}
engines: {node: '>=18.0.0'}
- deprecated: Please upgrade your lockfile to use the latest 3.x version of @smithy/core for various fixes, see https://github.com/smithy-lang/smithy-typescript/blob/main/packages/core/CHANGELOG.md
- '@smithy/credential-provider-imds@4.2.5':
- resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==}
+ '@smithy/credential-provider-imds@4.2.7':
+ resolution: {integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==}
engines: {node: '>=18.0.0'}
'@smithy/eventstream-codec@2.2.0':
resolution: {integrity: sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==}
- '@smithy/eventstream-codec@4.2.5':
- resolution: {integrity: sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==}
+ '@smithy/eventstream-codec@4.2.7':
+ resolution: {integrity: sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-browser@4.2.5':
- resolution: {integrity: sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==}
+ '@smithy/eventstream-serde-browser@4.2.7':
+ resolution: {integrity: sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==}
engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-config-resolver@4.3.5':
- resolution: {integrity: sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==}
+ '@smithy/eventstream-serde-config-resolver@4.3.7':
+ resolution: {integrity: sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==}
engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-node@2.2.0':
resolution: {integrity: sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA==}
engines: {node: '>=14.0.0'}
- '@smithy/eventstream-serde-node@4.2.5':
- resolution: {integrity: sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==}
+ '@smithy/eventstream-serde-node@4.2.7':
+ resolution: {integrity: sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==}
engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-universal@2.2.0':
resolution: {integrity: sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA==}
engines: {node: '>=14.0.0'}
- '@smithy/eventstream-serde-universal@4.2.5':
- resolution: {integrity: sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==}
+ '@smithy/eventstream-serde-universal@4.2.7':
+ resolution: {integrity: sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==}
engines: {node: '>=18.0.0'}
'@smithy/fetch-http-handler@2.5.0':
resolution: {integrity: sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==}
- '@smithy/fetch-http-handler@5.3.6':
- resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==}
+ '@smithy/fetch-http-handler@5.3.8':
+ resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==}
engines: {node: '>=18.0.0'}
- '@smithy/hash-node@4.2.5':
- resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==}
+ '@smithy/hash-node@4.2.7':
+ resolution: {integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==}
engines: {node: '>=18.0.0'}
- '@smithy/invalid-dependency@4.2.5':
- resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==}
+ '@smithy/invalid-dependency@4.2.7':
+ resolution: {integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==}
engines: {node: '>=18.0.0'}
'@smithy/is-array-buffer@2.2.0':
@@ -3302,112 +3337,112 @@ packages:
resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-content-length@4.2.5':
- resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==}
+ '@smithy/middleware-content-length@4.2.7':
+ resolution: {integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-endpoint@2.5.1':
resolution: {integrity: sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==}
engines: {node: '>=14.0.0'}
- '@smithy/middleware-endpoint@4.3.14':
- resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==}
+ '@smithy/middleware-endpoint@4.4.1':
+ resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-retry@4.4.14':
- resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==}
+ '@smithy/middleware-retry@4.4.17':
+ resolution: {integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@2.3.0':
resolution: {integrity: sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==}
engines: {node: '>=14.0.0'}
- '@smithy/middleware-serde@4.2.6':
- resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==}
+ '@smithy/middleware-serde@4.2.8':
+ resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-stack@2.2.0':
resolution: {integrity: sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==}
engines: {node: '>=14.0.0'}
- '@smithy/middleware-stack@4.2.5':
- resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==}
+ '@smithy/middleware-stack@4.2.7':
+ resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==}
engines: {node: '>=18.0.0'}
'@smithy/node-config-provider@2.3.0':
resolution: {integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==}
engines: {node: '>=14.0.0'}
- '@smithy/node-config-provider@4.3.5':
- resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==}
+ '@smithy/node-config-provider@4.3.7':
+ resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==}
engines: {node: '>=18.0.0'}
'@smithy/node-http-handler@2.5.0':
resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==}
engines: {node: '>=14.0.0'}
- '@smithy/node-http-handler@4.4.5':
- resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==}
+ '@smithy/node-http-handler@4.4.7':
+ resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==}
engines: {node: '>=18.0.0'}
'@smithy/property-provider@2.2.0':
resolution: {integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==}
engines: {node: '>=14.0.0'}
- '@smithy/property-provider@4.2.5':
- resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==}
+ '@smithy/property-provider@4.2.7':
+ resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==}
engines: {node: '>=18.0.0'}
'@smithy/protocol-http@3.3.0':
resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==}
engines: {node: '>=14.0.0'}
- '@smithy/protocol-http@5.3.5':
- resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==}
+ '@smithy/protocol-http@5.3.7':
+ resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==}
engines: {node: '>=18.0.0'}
'@smithy/querystring-builder@2.2.0':
resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==}
engines: {node: '>=14.0.0'}
- '@smithy/querystring-builder@4.2.5':
- resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==}
+ '@smithy/querystring-builder@4.2.7':
+ resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==}
engines: {node: '>=18.0.0'}
'@smithy/querystring-parser@2.2.0':
resolution: {integrity: sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==}
engines: {node: '>=14.0.0'}
- '@smithy/querystring-parser@4.2.5':
- resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==}
+ '@smithy/querystring-parser@4.2.7':
+ resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==}
engines: {node: '>=18.0.0'}
- '@smithy/service-error-classification@4.2.5':
- resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==}
+ '@smithy/service-error-classification@4.2.7':
+ resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==}
engines: {node: '>=18.0.0'}
'@smithy/shared-ini-file-loader@2.4.0':
resolution: {integrity: sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==}
engines: {node: '>=14.0.0'}
- '@smithy/shared-ini-file-loader@4.4.0':
- resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==}
+ '@smithy/shared-ini-file-loader@4.4.2':
+ resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==}
engines: {node: '>=18.0.0'}
'@smithy/signature-v4@3.1.2':
resolution: {integrity: sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==}
engines: {node: '>=16.0.0'}
- '@smithy/signature-v4@5.3.5':
- resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==}
+ '@smithy/signature-v4@5.3.7':
+ resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==}
engines: {node: '>=18.0.0'}
'@smithy/smithy-client@2.5.1':
resolution: {integrity: sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==}
engines: {node: '>=14.0.0'}
- '@smithy/smithy-client@4.9.10':
- resolution: {integrity: sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==}
+ '@smithy/smithy-client@4.10.2':
+ resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==}
engines: {node: '>=18.0.0'}
'@smithy/types@2.12.0':
@@ -3418,15 +3453,15 @@ packages:
resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==}
engines: {node: '>=16.0.0'}
- '@smithy/types@4.9.0':
- resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==}
+ '@smithy/types@4.11.0':
+ resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==}
engines: {node: '>=18.0.0'}
'@smithy/url-parser@2.2.0':
resolution: {integrity: sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==}
- '@smithy/url-parser@4.2.5':
- resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==}
+ '@smithy/url-parser@4.2.7':
+ resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==}
engines: {node: '>=18.0.0'}
'@smithy/util-base64@2.3.0':
@@ -3461,16 +3496,16 @@ packages:
resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-browser@4.3.13':
- resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==}
+ '@smithy/util-defaults-mode-browser@4.3.16':
+ resolution: {integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-node@4.2.16':
- resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==}
+ '@smithy/util-defaults-mode-node@4.2.19':
+ resolution: {integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-endpoints@3.2.5':
- resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==}
+ '@smithy/util-endpoints@3.2.7':
+ resolution: {integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==}
engines: {node: '>=18.0.0'}
'@smithy/util-hex-encoding@2.2.0':
@@ -3493,20 +3528,20 @@ packages:
resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==}
engines: {node: '>=16.0.0'}
- '@smithy/util-middleware@4.2.5':
- resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==}
+ '@smithy/util-middleware@4.2.7':
+ resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==}
engines: {node: '>=18.0.0'}
- '@smithy/util-retry@4.2.5':
- resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==}
+ '@smithy/util-retry@4.2.7':
+ resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==}
engines: {node: '>=18.0.0'}
'@smithy/util-stream@2.2.0':
resolution: {integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==}
engines: {node: '>=14.0.0'}
- '@smithy/util-stream@4.5.6':
- resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==}
+ '@smithy/util-stream@4.5.8':
+ resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==}
engines: {node: '>=18.0.0'}
'@smithy/util-uri-escape@2.2.0':
@@ -3549,65 +3584,65 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@tailwindcss/node@4.1.17':
- resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
+ '@tailwindcss/node@4.1.18':
+ resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
- '@tailwindcss/oxide-android-arm64@4.1.17':
- resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
+ '@tailwindcss/oxide-android-arm64@4.1.18':
+ resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.1.17':
- resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
+ '@tailwindcss/oxide-darwin-arm64@4.1.18':
+ resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.1.17':
- resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
+ '@tailwindcss/oxide-darwin-x64@4.1.18':
+ resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.1.17':
- resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
+ '@tailwindcss/oxide-freebsd-x64@4.1.18':
+ resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
- resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
+ resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
- resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
+ resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
- resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
+ resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
- resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
+ resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-musl@4.1.17':
- resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
+ '@tailwindcss/oxide-linux-x64-musl@4.1.18':
+ resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-wasm32-wasi@4.1.17':
- resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
+ '@tailwindcss/oxide-wasm32-wasi@4.1.18':
+ resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -3618,40 +3653,40 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
- resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
+ resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
- resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
+ resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.1.17':
- resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
+ '@tailwindcss/oxide@4.1.18':
+ resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
engines: {node: '>= 10'}
- '@tailwindcss/postcss@4.1.17':
- resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==}
+ '@tailwindcss/postcss@4.1.18':
+ resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==}
'@tailwindcss/typography@0.5.19':
resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
- '@tailwindcss/vite@4.1.17':
- resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==}
+ '@tailwindcss/vite@4.1.18':
+ resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==}
peerDependencies:
vite: ^5.2.0 || ^6 || ^7
- '@tanstack/query-core@5.90.11':
- resolution: {integrity: sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==}
+ '@tanstack/query-core@5.90.12':
+ resolution: {integrity: sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==}
- '@tanstack/react-query@5.90.11':
- resolution: {integrity: sha512-3uyzz01D1fkTLXuxF3JfoJoHQMU2fxsfJwE+6N5hHy0dVNoZOvwKP8Z2k7k1KDeD54N20apcJnG75TBAStIrBA==}
+ '@tanstack/react-query@5.90.12':
+ resolution: {integrity: sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==}
peerDependencies:
react: ^18 || ^19
@@ -3663,8 +3698,8 @@ packages:
resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==}
engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
- '@testing-library/react@16.3.0':
- resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==}
+ '@testing-library/react@16.3.1':
+ resolution: {integrity: sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==}
engines: {node: '>=18'}
peerDependencies:
'@testing-library/dom': ^10.0.0
@@ -3905,11 +3940,11 @@ packages:
'@types/node@18.19.130':
resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
- '@types/node@20.19.25':
- resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
+ '@types/node@20.19.27':
+ resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==}
- '@types/node@24.10.1':
- resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
+ '@types/node@24.10.4':
+ resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==}
'@types/prop-types@15.7.15':
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
@@ -3986,8 +4021,8 @@ packages:
'@types/vscode-webview@1.57.5':
resolution: {integrity: sha512-iBAUYNYkz+uk1kdsq05fEcoh8gJmwT3lqqFPN7MGyjQ3HVloViMdo7ZJ8DFIP8WOK74PjOEilosqAyxV2iUFUw==}
- '@types/vscode@1.106.1':
- resolution: {integrity: sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==}
+ '@types/vscode@1.107.0':
+ resolution: {integrity: sha512-XS8YE1jlyTIowP64+HoN30OlC1H9xqSlq1eoLZUgFEC8oUTO6euYZxti1xRiLSfZocs4qytTzR6xCBYtioQTCg==}
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -3998,63 +4033,63 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@typescript-eslint/eslint-plugin@8.48.1':
- resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
+ '@typescript-eslint/eslint-plugin@8.50.0':
+ resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.48.1
+ '@typescript-eslint/parser': ^8.50.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.48.1':
- resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
+ '@typescript-eslint/parser@8.50.0':
+ resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.48.1':
- resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
+ '@typescript-eslint/project-service@8.50.0':
+ resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.48.1':
- resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
+ '@typescript-eslint/scope-manager@8.50.0':
+ resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.48.1':
- resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
+ '@typescript-eslint/tsconfig-utils@8.50.0':
+ resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.48.1':
- resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
+ '@typescript-eslint/type-utils@8.50.0':
+ resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.48.1':
- resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
+ '@typescript-eslint/types@8.50.0':
+ resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.48.1':
- resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
+ '@typescript-eslint/typescript-estree@8.50.0':
+ resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.48.1':
- resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
+ '@typescript-eslint/utils@8.50.0':
+ resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.48.1':
- resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
+ '@typescript-eslint/visitor-keys@8.50.0':
+ resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typespec/ts-http-runtime@0.3.2':
@@ -4365,8 +4400,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- autoprefixer@10.4.22:
- resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==}
+ autoprefixer@10.4.23:
+ resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
@@ -4444,8 +4479,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.9.0:
- resolution: {integrity: sha512-Mh++g+2LPfzZToywfE1BUzvZbfOY52Nil0rn9H1CPC5DJ7fX+Vir7nToBeoiSbB1zTNeGYbELEvJESujgGrzXw==}
+ baseline-browser-mapping@2.9.11:
+ resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
basic-ftp@5.0.5:
@@ -4586,8 +4621,8 @@ packages:
camelize@1.0.1:
resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
- caniuse-lite@1.0.30001759:
- resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
+ caniuse-lite@1.0.30001761:
+ resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -4667,8 +4702,8 @@ packages:
peerDependencies:
devtools-protocol: '*'
- chromium-bidi@11.0.0:
- resolution: {integrity: sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw==}
+ chromium-bidi@12.0.1:
+ resolution: {integrity: sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==}
peerDependencies:
devtools-protocol: '*'
@@ -5175,8 +5210,8 @@ packages:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
- dedent@1.7.0:
- resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==}
+ dedent@1.7.1:
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
@@ -5325,8 +5360,8 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- dompurify@3.3.0:
- resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
+ dompurify@3.3.1:
+ resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
domutils@1.7.0:
resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
@@ -5342,8 +5377,8 @@ packages:
resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
engines: {node: '>=12'}
- drizzle-kit@0.31.7:
- resolution: {integrity: sha512-hOzRGSdyKIU4FcTSFYGKdXEjFsncVwHZ43gY3WU5Bz9j5Iadp6Rh6hxLSQ1IWXpKLBKt/d5y1cpSPcV+FcoQ1A==}
+ drizzle-kit@0.31.8:
+ resolution: {integrity: sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==}
hasBin: true
drizzle-orm@0.44.7:
@@ -5468,8 +5503,8 @@ packages:
eight-colors@1.3.1:
resolution: {integrity: sha512-7nXPYDeKh6DgJDR/mpt2G7N/hCNSGwwoPVmoI3+4TEwOb07VFN1WMPG0DFf6nMEjrkgdj8Og7l7IaEEk3VE6Zg==}
- electron-to-chromium@1.5.264:
- resolution: {integrity: sha512-1tEf0nLgltC3iy9wtlYDlQDc5Rg9lEKVjEmIHJ21rI9OcqkvD45K1oyNIRA4rR1z3LgJ7KeGzEBojVcV6m4qjA==}
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
embla-carousel-auto-scroll@8.6.0:
resolution: {integrity: sha512-WT9fWhNXFpbQ6kP+aS07oF5IHYLZ1Dx4DkwgCY8Hv2ZyYd2KMCPfMV1q/cA3wFGuLO7GMgKiySLX90/pQkcOdQ==}
@@ -5517,8 +5552,8 @@ packages:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'}
- enhanced-resolve@5.18.3:
- resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ enhanced-resolve@5.18.4:
+ resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
engines: {node: '>=10.13.0'}
enquirer@2.4.1:
@@ -5543,8 +5578,8 @@ packages:
error-stack-parser@2.1.4:
resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
- es-abstract@1.24.0:
- resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
+ es-abstract@1.24.1:
+ resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
engines: {node: '>= 0.4'}
es-array-method-boxes-properly@1.0.0:
@@ -5558,8 +5593,8 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-iterator-helpers@1.2.1:
- resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
+ es-iterator-helpers@1.2.2:
+ resolution: {integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==}
engines: {node: '>= 0.4'}
es-module-lexer@1.7.0:
@@ -5586,8 +5621,13 @@ packages:
peerDependencies:
esbuild: '>=0.25.0'
- esbuild@0.27.1:
- resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==}
+ esbuild-wasm@0.25.12:
+ resolution: {integrity: sha512-rZqkjL3Y6FwLpSHzLnaEy8Ps6veCNo1kZa9EOfJvmWtBq5dJH4iVjfmOO6Mlkv9B0tt9WFPFmb/VxlgJOnueNg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.2:
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
engines: {node: '>=18'}
hasBin: true
@@ -5641,8 +5681,8 @@ packages:
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
- eslint-plugin-turbo@2.6.2:
- resolution: {integrity: sha512-FTJOLo8SXLbGgEyFCu0CzrVzEObH2GGJt+cLT6R3oXLK8Bv1i0wOuHYecXjA0RVxZ3t1YUP/9tQNQ3LhTYRd5A==}
+ eslint-plugin-turbo@2.7.1:
+ resolution: {integrity: sha512-ZC7dTOdw6tGuvx1CeC1WQ0pMkgT/Jmj69QW93d63nysiLbbKRLiDKKA9s/TvwJHq8Uvbou2+hnU8if1L0jHsVQ==}
peerDependencies:
eslint: '>6.6.0'
turbo: '>2.0.0'
@@ -5659,8 +5699,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.39.1:
- resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
+ eslint@9.39.2:
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -5759,8 +5799,8 @@ packages:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
- expect-type@1.2.2:
- resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
expect@29.7.0:
@@ -5799,8 +5839,8 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-equals@5.3.3:
- resolution: {integrity: sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==}
+ fast-equals@5.4.0:
+ resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==}
engines: {node: '>=6.0.0'}
fast-fifo@1.3.2:
@@ -5830,8 +5870,8 @@ packages:
resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
hasBin: true
- fast-xml-parser@5.3.2:
- resolution: {integrity: sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA==}
+ fast-xml-parser@5.3.3:
+ resolution: {integrity: sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==}
hasBin: true
fastest-levenshtein@1.0.16:
@@ -6150,9 +6190,6 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
gray-matter@4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
@@ -6235,8 +6272,8 @@ packages:
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
- hast-util-to-parse5@8.0.0:
- resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ hast-util-to-parse5@8.0.1:
+ resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
hast-util-to-text@4.0.2:
resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
@@ -6259,6 +6296,10 @@ packages:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
+ hono@4.11.1:
+ resolution: {integrity: sha512-KsFcH0xxHes0J4zaQgWbYwmz3UPOOskdqZmItstUG93+Wk1ePBLkLGwbP9zlmh1BFUiL8Qp+Xfu9P7feJWpGNg==}
+ engines: {node: '>=16.9.0'}
+
hosted-git-info@4.1.0:
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
engines: {node: '>=10'}
@@ -6327,8 +6368,8 @@ packages:
i18next-http-backend@3.0.2:
resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==}
- i18next@25.7.1:
- resolution: {integrity: sha512-XbTnkh1yCZWSAZGnA9xcQfHcYNgZs2cNxm+c6v1Ma9UAUGCeJPplRe1ILia6xnDvXBjk0uXU+Z8FYWhA19SKFw==}
+ i18next@25.7.3:
+ resolution: {integrity: sha512-2XaT+HpYGuc2uTExq9TVRhLsso+Dxym6PWaKpn36wfBmTI779OQ7iP/XaZHzrnGyzU4SHpFrTYLKfVyBfAhVNA==}
peerDependencies:
typescript: ^5
peerDependenciesMeta:
@@ -6339,8 +6380,8 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
- iconv-lite@0.7.0:
- resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
+ iconv-lite@0.7.1:
+ resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==}
engines: {node: '>=0.10.0'}
identity-obj-proxy@3.0.0:
@@ -6779,6 +6820,9 @@ packages:
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ json-schema-typed@8.0.2:
+ resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -6799,8 +6843,8 @@ packages:
jsonschema@1.5.0:
resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==}
- jsonwebtoken@9.0.2:
- resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
+ jsonwebtoken@9.0.3:
+ resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==}
engines: {node: '>=12', npm: '>=6'}
jsx-ast-utils@3.3.5:
@@ -6810,24 +6854,18 @@ packages:
jszip@3.10.1:
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
- jwa@1.4.2:
- resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==}
-
jwa@2.0.1:
resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}
- jws@3.2.2:
- resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
-
- jws@4.0.0:
- resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
+ jws@4.0.1:
+ resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==}
jwt-decode@4.0.0:
resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
engines: {node: '>=18'}
- katex@0.16.25:
- resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==}
+ katex@0.16.27:
+ resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==}
hasBin: true
keytar@7.9.0:
@@ -6843,8 +6881,8 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- knip@5.71.0:
- resolution: {integrity: sha512-hwgdqEJ+7DNJ5jE8BCPu7b57TY7vUwP6MzWYgCgPpg6iPCee/jKPShDNIlFER2koti4oz5xF88VJbKCb4Wl71g==}
+ knip@5.76.3:
+ resolution: {integrity: sha512-YLCCzOFzkuNgyL9LdrwFBstV9gpmvPCuolRzs9W++of0mtPH1D3ehE3M4okgayksgq7tWkkMAmyjrDrXxX6aAQ==}
engines: {node: '>=18.18.0'}
hasBin: true
peerDependencies:
@@ -6993,6 +7031,9 @@ packages:
lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lodash-es@4.17.22:
+ resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==}
+
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
@@ -7578,10 +7619,6 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
- normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
-
npm-normalize-package-bin@4.0.0:
resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -7609,8 +7646,8 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nwsapi@2.2.22:
- resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==}
+ nwsapi@2.2.23:
+ resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
@@ -7644,9 +7681,9 @@ packages:
resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
engines: {node: '>= 0.4'}
- object.getownpropertydescriptors@2.1.8:
- resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==}
- engines: {node: '>= 0.8'}
+ object.getownpropertydescriptors@2.1.9:
+ resolution: {integrity: sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==}
+ engines: {node: '>= 0.4'}
object.values@1.2.1:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
@@ -7737,8 +7774,8 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
- oxc-resolver@11.14.2:
- resolution: {integrity: sha512-M5fERQKcrCngMZNnk1gRaBbYcqpqXLgMcoqAo7Wpty+KH0I18i03oiy2peUsGJwFaKAEbmo+CtAyhXh08RZ1RA==}
+ oxc-resolver@11.16.0:
+ resolution: {integrity: sha512-I4sHGa1fZUpTQ9ftS0E0cBYbBjNnIKXRSX/trFMIJDIJ4n21dCrLAZhnJS0TSfRIRqZNFyceNZr2kablfgNyTA==}
p-filter@2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
@@ -8009,11 +8046,11 @@ packages:
resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==}
engines: {node: '>=12'}
- posthog-js@1.301.0:
- resolution: {integrity: sha512-HXAXPvE0us6kIPinE/DT3MfuMZNSe0tSRNplXkzGHA03izNFImqh663axROt9+8aaCH1aUCMPDHXrKxvNfVobw==}
+ posthog-js@1.309.1:
+ resolution: {integrity: sha512-JUJcQhYzNNKO0cgnSbowCsVi2RTu75XGZ2EmnTQti4tMGRCTOv/HCnZasdFniBGZ0rLugQkaScYca/84Ta2u5Q==}
- posthog-node@5.17.0:
- resolution: {integrity: sha512-M+ftj0kLJk6wVF1xW5cStSany0LBC6YDVO7RPma2poo+PrpeiTk+ovhqcIqWAySDdTcBHJfBV9aIFYWPl2y6kg==}
+ posthog-node@5.17.4:
+ resolution: {integrity: sha512-hrd+Do/DMt40By12ESIDUfD81V9OASjq9XHjycZrGiD8cX/ZwCIVSJLUb7nQmvSCWcKII+u+nnPVuc4LjTDl9g==}
engines: {node: '>=20'}
preact@10.28.0:
@@ -8078,9 +8115,6 @@ packages:
property-information@5.6.0:
resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
- property-information@6.5.0:
- resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@@ -8118,8 +8152,8 @@ packages:
resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==}
engines: {node: '>=18'}
- puppeteer-core@24.32.0:
- resolution: {integrity: sha512-MqzLLeJjqjtHK9J44+KE3kjtXXhFpPvg+AvXl/oy/jB8MeeNH66/4MNotOTqGZ6MPaxWi51YJ1ASga6OIff6xw==}
+ puppeteer-core@24.34.0:
+ resolution: {integrity: sha512-24evawO+mUGW4mvS2a2ivwLdX3gk8zRLZr9HP+7+VT2vBQnm0oh9jJEZmUE3ePJhRkYlZ93i7OMpdcoi2qNCLg==}
engines: {node: '>=18'}
q@1.5.1:
@@ -8175,8 +8209,8 @@ packages:
peerDependencies:
react: ^18.3.1
- react-hook-form@7.68.0:
- resolution: {integrity: sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==}
+ react-hook-form@7.69.0:
+ resolution: {integrity: sha512-yt6ZGME9f4F6WHwevrvpAjh42HMvocuSnSIHUGycBqXIJdhqGSPQzTpGF+1NLREk/58IdPxEMfPcFCjlMhclGw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
@@ -8287,8 +8321,8 @@ packages:
react: '*'
react-dom: '*'
- react-virtuoso@4.16.1:
- resolution: {integrity: sha512-V9ZDw7TFspJb02gNWqHyVZvaMaCFaoL30F/tOVepCI12kdLjA2oxFfWvNC66AVJdOH5cwiq8317p2Q9OpG+TDw==}
+ react-virtuoso@4.17.0:
+ resolution: {integrity: sha512-od3pi2v13v31uzn5zPXC2u3ouISFCVhjFVFch2VvS2Cx7pWA2F1aJa3XhNTN2F07M3lhfnMnsmGeH+7wZICr7w==}
peerDependencies:
react: '>=16 || >=17 || >= 18 || >= 19'
react-dom: '>=16 || >=17 || >= 18 || >=19'
@@ -8377,8 +8411,8 @@ packages:
regex-utilities@2.3.0:
resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
- regex@6.0.1:
- resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
@@ -8493,8 +8527,8 @@ packages:
robust-predicates@3.0.2:
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
- rollup@4.53.3:
- resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
+ rollup@4.54.0:
+ resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -8601,8 +8635,8 @@ packages:
engines: {node: '>=10'}
hasBin: true
- send@1.2.0:
- resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ send@1.2.1:
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
engines: {node: '>= 18'}
serialize-error@12.0.0:
@@ -8612,8 +8646,8 @@ packages:
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
- serve-static@2.2.0:
- resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+ serve-static@2.2.1:
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
set-blocking@2.0.0:
@@ -8667,8 +8701,8 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
- shiki@3.19.0:
- resolution: {integrity: sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==}
+ shiki@3.20.0:
+ resolution: {integrity: sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -8728,8 +8762,8 @@ packages:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
- smol-toml@1.5.2:
- resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==}
+ smol-toml@1.6.0:
+ resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
engines: {node: '>= 18'}
socket.io-client@4.8.1:
@@ -8956,8 +8990,8 @@ packages:
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
- strnum@2.1.1:
- resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
+ strnum@2.1.2:
+ resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
strong-type@0.1.6:
resolution: {integrity: sha512-eJe5caH6Pi5oMMeQtIoBPpvNu/s4jiyb63u5tkHNnQXomK+puyQ5i+Z5iTLBr/xUz/pIcps0NSfzzFI34+gAXg==}
@@ -9047,13 +9081,13 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
- tailwindcss@3.4.18:
- resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==}
+ tailwindcss@3.4.19:
+ resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==}
engines: {node: '>=14.0.0'}
hasBin: true
- tailwindcss@4.1.17:
- resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
+ tailwindcss@4.1.18:
+ resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
@@ -9247,38 +9281,38 @@ packages:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
- turbo-darwin-64@2.6.2:
- resolution: {integrity: sha512-nF9d/YAyrNkyXn9lp3ZtgXPb7fZsik3cUNe/sBvUO0G5YezUS/kDYYw77IdjizDzairz8pL2ITCTUreG2d5iZQ==}
+ turbo-darwin-64@2.7.1:
+ resolution: {integrity: sha512-EaA7UfYujbY9/Ku0WqPpvfctxm91h9LF7zo8vjielz+omfAPB54Si+ADmUoBczBDC6RoLgbURC3GmUW2alnjJg==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.6.2:
- resolution: {integrity: sha512-mmm0jFaVramST26XE1Lk2qjkjvLJHOe9f3TFjqY+aByjMK/ZmKE5WFPuCWo4L3xhwx+16T37rdPP//76loB3oA==}
+ turbo-darwin-arm64@2.7.1:
+ resolution: {integrity: sha512-/pWGSygtBugd7sKQOeMm+jKY3qN1vyB0RiHBM6bN/6qUOo2VHo8IQwBTIaSgINN4Ue6fzEU+WfePNvonSU9yXw==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.6.2:
- resolution: {integrity: sha512-IUMHjkVRJDUABGpi+iS1Le59aOl5DX88U5UT/mKaE7nNEjG465+a8UtYno56cZnLP+C6BkX4I93LFgYf9syjGQ==}
+ turbo-linux-64@2.7.1:
+ resolution: {integrity: sha512-Y5H11mdhASw/dJuRFyGtTCDFX5/MPT73EKsVEiHbw5MkFc77lx3nMc5L/Q7bKEhef/vYJAsAb61QuHsB6qdP8Q==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.6.2:
- resolution: {integrity: sha512-0qQdZiimMUZj2Gfq87thYu0E02NaNcsB3lcEK/TD70Zzi7AxQoxye664Gis0Uao2j2L9/+05wC2btZ7SoFX3Gw==}
+ turbo-linux-arm64@2.7.1:
+ resolution: {integrity: sha512-L/r77jD7cqIEXoyu2LGBUrTY5GJSi/XcGLsQ2nZ/fefk6x3MpljTvwsXUVG1BUkiBPc4zaKRj6yGyWMo5MbLxQ==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.6.2:
- resolution: {integrity: sha512-BmMfFmt0VaoZL4NbtDq/dzGfjHsPoGU2+vFiZtkiYsttHY3fd/Dmgnu9PuRyJN1pv2M22q88rXO+dqYRHztLMw==}
+ turbo-windows-64@2.7.1:
+ resolution: {integrity: sha512-rkeuviXZ/1F7lCare7TNKvYtT/SH9dZR55FAMrxrFRh88b+ZKwlXEBfq5/1OctEzRUo/VLIm+s5LJMOEy+QshA==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.6.2:
- resolution: {integrity: sha512-0r4s4M/FgLxfjrdLPdqQUur8vZAtaWEi4jhkQ6wCIN2xzA9aee9IKwM53w7CQcjaLvWhT0AU7LTQHjFaHwxiKw==}
+ turbo-windows-arm64@2.7.1:
+ resolution: {integrity: sha512-1rZk9htm3+iP/rWCf/h4/DFQey9sMs2TJPC4T5QQfwqAdMWsphgrxBuFqHdxczlbBCgbWNhVw0CH2bTxe1/GFg==}
cpu: [arm64]
os: [win32]
- turbo@2.6.2:
- resolution: {integrity: sha512-LiQAFS6iWvnY8ViGtoPgduWBeuGH9B32XR4p8H8jxU5PudwyHiiyf1jQW0fCC8gCCTz9itkIbqZLIyUu5AG33w==}
+ turbo@2.7.1:
+ resolution: {integrity: sha512-zAj9jGc7VDvuAo/5Jbos4QTtWz9uUpkMhMKGyTjDJkx//hdL2bM31qQoJSAbU+7JyK5vb0LPzpwf6DUt3zayqg==}
hasBin: true
turndown@7.2.2:
@@ -9318,8 +9352,8 @@ packages:
typed-rest-client@1.8.11:
resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==}
- typescript-eslint@8.48.1:
- resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==}
+ typescript-eslint@8.50.0:
+ resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -9441,8 +9475,8 @@ packages:
unzipper@0.10.14:
resolution: {integrity: sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==}
- update-browserslist-db@1.2.1:
- resolution: {integrity: sha512-R9NcHbbZ45RoWfTdhn1J9SS7zxNvlddv4YRrHTUaFdtjbmfncfedB45EC9IaqJQ97iAR1GZgOfyRQO+ExIF6EQ==}
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -9697,8 +9731,8 @@ packages:
web-vitals@4.2.4:
resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
- webdriver-bidi-protocol@0.3.9:
- resolution: {integrity: sha512-uIYvlRQ0PwtZR1EzHlTMol1G0lAlmOe6wPykF9a77AK3bkpvZHzIVxRE2ThOx5vjy2zISe0zhwf5rzuUfbo1PQ==}
+ webdriver-bidi-protocol@0.3.10:
+ resolution: {integrity: sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -9945,8 +9979,8 @@ packages:
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
- zod@4.1.13:
- resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==}
+ zod@4.2.1:
+ resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -9966,8 +10000,8 @@ snapshots:
dependencies:
'@anthropic-ai/sdk': 0.37.0
'@aws-crypto/sha256-js': 4.0.0
- '@aws-sdk/client-bedrock-runtime': 3.943.0
- '@aws-sdk/credential-providers': 3.943.0
+ '@aws-sdk/client-bedrock-runtime': 3.956.0
+ '@aws-sdk/credential-providers': 3.956.0
'@smithy/eventstream-serde-node': 2.2.0
'@smithy/fetch-http-handler': 2.5.0
'@smithy/protocol-http': 3.3.0
@@ -10010,13 +10044,13 @@ snapshots:
'@aws-crypto/crc32@3.0.0':
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
tslib: 1.14.1
'@aws-crypto/crc32@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
tslib: 2.8.1
'@aws-crypto/sha256-browser@5.2.0':
@@ -10024,21 +10058,21 @@ snapshots:
'@aws-crypto/sha256-js': 5.2.0
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-locate-window': 3.893.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-locate-window': 3.953.0
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
'@aws-crypto/sha256-js@4.0.0':
dependencies:
'@aws-crypto/util': 4.0.0
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
tslib: 1.14.1
'@aws-crypto/sha256-js@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
tslib: 2.8.1
'@aws-crypto/supports-web-crypto@5.2.0':
@@ -10047,483 +10081,483 @@ snapshots:
'@aws-crypto/util@3.0.0':
dependencies:
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
'@aws-crypto/util@4.0.0':
dependencies:
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
'@aws-crypto/util@5.2.0':
dependencies:
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@aws-sdk/client-bedrock-runtime@3.943.0':
+ '@aws-sdk/client-bedrock-runtime@3.956.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/credential-provider-node': 3.943.0
- '@aws-sdk/eventstream-handler-node': 3.936.0
- '@aws-sdk/middleware-eventstream': 3.936.0
- '@aws-sdk/middleware-host-header': 3.936.0
- '@aws-sdk/middleware-logger': 3.936.0
- '@aws-sdk/middleware-recursion-detection': 3.936.0
- '@aws-sdk/middleware-user-agent': 3.943.0
- '@aws-sdk/middleware-websocket': 3.936.0
- '@aws-sdk/region-config-resolver': 3.936.0
- '@aws-sdk/token-providers': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-endpoints': 3.936.0
- '@aws-sdk/util-user-agent-browser': 3.936.0
- '@aws-sdk/util-user-agent-node': 3.943.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.7
- '@smithy/eventstream-serde-browser': 4.2.5
- '@smithy/eventstream-serde-config-resolver': 4.3.5
- '@smithy/eventstream-serde-node': 4.2.5
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/hash-node': 4.2.5
- '@smithy/invalid-dependency': 4.2.5
- '@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.14
- '@smithy/middleware-retry': 4.4.14
- '@smithy/middleware-serde': 4.2.6
- '@smithy/middleware-stack': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/node-http-handler': 4.4.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/credential-provider-node': 3.956.0
+ '@aws-sdk/eventstream-handler-node': 3.956.0
+ '@aws-sdk/middleware-eventstream': 3.956.0
+ '@aws-sdk/middleware-host-header': 3.956.0
+ '@aws-sdk/middleware-logger': 3.956.0
+ '@aws-sdk/middleware-recursion-detection': 3.956.0
+ '@aws-sdk/middleware-user-agent': 3.956.0
+ '@aws-sdk/middleware-websocket': 3.956.0
+ '@aws-sdk/region-config-resolver': 3.956.0
+ '@aws-sdk/token-providers': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-endpoints': 3.956.0
+ '@aws-sdk/util-user-agent-browser': 3.956.0
+ '@aws-sdk/util-user-agent-node': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/core': 3.20.0
+ '@smithy/eventstream-serde-browser': 4.2.7
+ '@smithy/eventstream-serde-config-resolver': 4.3.7
+ '@smithy/eventstream-serde-node': 4.2.7
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/hash-node': 4.2.7
+ '@smithy/invalid-dependency': 4.2.7
+ '@smithy/middleware-content-length': 4.2.7
+ '@smithy/middleware-endpoint': 4.4.1
+ '@smithy/middleware-retry': 4.4.17
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/middleware-stack': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.13
- '@smithy/util-defaults-mode-node': 4.2.16
- '@smithy/util-endpoints': 3.2.5
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-retry': 4.2.5
- '@smithy/util-stream': 4.5.6
+ '@smithy/util-defaults-mode-browser': 4.3.16
+ '@smithy/util-defaults-mode-node': 4.2.19
+ '@smithy/util-endpoints': 3.2.7
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-retry': 4.2.7
+ '@smithy/util-stream': 4.5.8
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-cognito-identity@3.943.0':
+ '@aws-sdk/client-cognito-identity@3.956.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/credential-provider-node': 3.943.0
- '@aws-sdk/middleware-host-header': 3.936.0
- '@aws-sdk/middleware-logger': 3.936.0
- '@aws-sdk/middleware-recursion-detection': 3.936.0
- '@aws-sdk/middleware-user-agent': 3.943.0
- '@aws-sdk/region-config-resolver': 3.936.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-endpoints': 3.936.0
- '@aws-sdk/util-user-agent-browser': 3.936.0
- '@aws-sdk/util-user-agent-node': 3.943.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.7
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/hash-node': 4.2.5
- '@smithy/invalid-dependency': 4.2.5
- '@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.14
- '@smithy/middleware-retry': 4.4.14
- '@smithy/middleware-serde': 4.2.6
- '@smithy/middleware-stack': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/node-http-handler': 4.4.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/credential-provider-node': 3.956.0
+ '@aws-sdk/middleware-host-header': 3.956.0
+ '@aws-sdk/middleware-logger': 3.956.0
+ '@aws-sdk/middleware-recursion-detection': 3.956.0
+ '@aws-sdk/middleware-user-agent': 3.956.0
+ '@aws-sdk/region-config-resolver': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-endpoints': 3.956.0
+ '@aws-sdk/util-user-agent-browser': 3.956.0
+ '@aws-sdk/util-user-agent-node': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/core': 3.20.0
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/hash-node': 4.2.7
+ '@smithy/invalid-dependency': 4.2.7
+ '@smithy/middleware-content-length': 4.2.7
+ '@smithy/middleware-endpoint': 4.4.1
+ '@smithy/middleware-retry': 4.4.17
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/middleware-stack': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.13
- '@smithy/util-defaults-mode-node': 4.2.16
- '@smithy/util-endpoints': 3.2.5
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-retry': 4.2.5
+ '@smithy/util-defaults-mode-browser': 4.3.16
+ '@smithy/util-defaults-mode-node': 4.2.19
+ '@smithy/util-endpoints': 3.2.7
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-retry': 4.2.7
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso@3.943.0':
+ '@aws-sdk/client-sso@3.956.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/middleware-host-header': 3.936.0
- '@aws-sdk/middleware-logger': 3.936.0
- '@aws-sdk/middleware-recursion-detection': 3.936.0
- '@aws-sdk/middleware-user-agent': 3.943.0
- '@aws-sdk/region-config-resolver': 3.936.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-endpoints': 3.936.0
- '@aws-sdk/util-user-agent-browser': 3.936.0
- '@aws-sdk/util-user-agent-node': 3.943.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.7
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/hash-node': 4.2.5
- '@smithy/invalid-dependency': 4.2.5
- '@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.14
- '@smithy/middleware-retry': 4.4.14
- '@smithy/middleware-serde': 4.2.6
- '@smithy/middleware-stack': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/node-http-handler': 4.4.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/middleware-host-header': 3.956.0
+ '@aws-sdk/middleware-logger': 3.956.0
+ '@aws-sdk/middleware-recursion-detection': 3.956.0
+ '@aws-sdk/middleware-user-agent': 3.956.0
+ '@aws-sdk/region-config-resolver': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-endpoints': 3.956.0
+ '@aws-sdk/util-user-agent-browser': 3.956.0
+ '@aws-sdk/util-user-agent-node': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/core': 3.20.0
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/hash-node': 4.2.7
+ '@smithy/invalid-dependency': 4.2.7
+ '@smithy/middleware-content-length': 4.2.7
+ '@smithy/middleware-endpoint': 4.4.1
+ '@smithy/middleware-retry': 4.4.17
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/middleware-stack': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.13
- '@smithy/util-defaults-mode-node': 4.2.16
- '@smithy/util-endpoints': 3.2.5
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-retry': 4.2.5
+ '@smithy/util-defaults-mode-browser': 4.3.16
+ '@smithy/util-defaults-mode-node': 4.2.19
+ '@smithy/util-endpoints': 3.2.7
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-retry': 4.2.7
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/core@3.943.0':
- dependencies:
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/xml-builder': 3.930.0
- '@smithy/core': 3.18.7
- '@smithy/node-config-provider': 4.3.5
- '@smithy/property-provider': 4.2.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/signature-v4': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
+ '@aws-sdk/core@3.956.0':
+ dependencies:
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/xml-builder': 3.956.0
+ '@smithy/core': 3.20.0
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/signature-v4': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
'@smithy/util-base64': 4.3.0
- '@smithy/util-middleware': 4.2.5
+ '@smithy/util-middleware': 4.2.7
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-cognito-identity@3.943.0':
+ '@aws-sdk/credential-provider-cognito-identity@3.956.0':
dependencies:
- '@aws-sdk/client-cognito-identity': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/client-cognito-identity': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-env@3.943.0':
+ '@aws-sdk/credential-provider-env@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-http@3.943.0':
- dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/node-http-handler': 4.4.5
- '@smithy/property-provider': 4.2.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/util-stream': 4.5.6
+ '@aws-sdk/credential-provider-http@3.956.0':
+ dependencies:
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/util-stream': 4.5.8
tslib: 2.8.1
- '@aws-sdk/credential-provider-ini@3.943.0':
- dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/credential-provider-env': 3.943.0
- '@aws-sdk/credential-provider-http': 3.943.0
- '@aws-sdk/credential-provider-login': 3.943.0
- '@aws-sdk/credential-provider-process': 3.943.0
- '@aws-sdk/credential-provider-sso': 3.943.0
- '@aws-sdk/credential-provider-web-identity': 3.943.0
- '@aws-sdk/nested-clients': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/credential-provider-imds': 4.2.5
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/credential-provider-ini@3.956.0':
+ dependencies:
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/credential-provider-env': 3.956.0
+ '@aws-sdk/credential-provider-http': 3.956.0
+ '@aws-sdk/credential-provider-login': 3.956.0
+ '@aws-sdk/credential-provider-process': 3.956.0
+ '@aws-sdk/credential-provider-sso': 3.956.0
+ '@aws-sdk/credential-provider-web-identity': 3.956.0
+ '@aws-sdk/nested-clients': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/credential-provider-imds': 4.2.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-login@3.943.0':
+ '@aws-sdk/credential-provider-login@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/nested-clients': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/nested-clients': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-node@3.943.0':
- dependencies:
- '@aws-sdk/credential-provider-env': 3.943.0
- '@aws-sdk/credential-provider-http': 3.943.0
- '@aws-sdk/credential-provider-ini': 3.943.0
- '@aws-sdk/credential-provider-process': 3.943.0
- '@aws-sdk/credential-provider-sso': 3.943.0
- '@aws-sdk/credential-provider-web-identity': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/credential-provider-imds': 4.2.5
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/credential-provider-node@3.956.0':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.956.0
+ '@aws-sdk/credential-provider-http': 3.956.0
+ '@aws-sdk/credential-provider-ini': 3.956.0
+ '@aws-sdk/credential-provider-process': 3.956.0
+ '@aws-sdk/credential-provider-sso': 3.956.0
+ '@aws-sdk/credential-provider-web-identity': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/credential-provider-imds': 4.2.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-process@3.943.0':
+ '@aws-sdk/credential-provider-process@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-sso@3.943.0':
+ '@aws-sdk/credential-provider-sso@3.956.0':
dependencies:
- '@aws-sdk/client-sso': 3.943.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/token-providers': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/client-sso': 3.956.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/token-providers': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-web-identity@3.943.0':
+ '@aws-sdk/credential-provider-web-identity@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/nested-clients': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/nested-clients': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-providers@3.943.0':
- dependencies:
- '@aws-sdk/client-cognito-identity': 3.943.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/credential-provider-cognito-identity': 3.943.0
- '@aws-sdk/credential-provider-env': 3.943.0
- '@aws-sdk/credential-provider-http': 3.943.0
- '@aws-sdk/credential-provider-ini': 3.943.0
- '@aws-sdk/credential-provider-login': 3.943.0
- '@aws-sdk/credential-provider-node': 3.943.0
- '@aws-sdk/credential-provider-process': 3.943.0
- '@aws-sdk/credential-provider-sso': 3.943.0
- '@aws-sdk/credential-provider-web-identity': 3.943.0
- '@aws-sdk/nested-clients': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.7
- '@smithy/credential-provider-imds': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/property-provider': 4.2.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/credential-providers@3.956.0':
+ dependencies:
+ '@aws-sdk/client-cognito-identity': 3.956.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/credential-provider-cognito-identity': 3.956.0
+ '@aws-sdk/credential-provider-env': 3.956.0
+ '@aws-sdk/credential-provider-http': 3.956.0
+ '@aws-sdk/credential-provider-ini': 3.956.0
+ '@aws-sdk/credential-provider-login': 3.956.0
+ '@aws-sdk/credential-provider-node': 3.956.0
+ '@aws-sdk/credential-provider-process': 3.956.0
+ '@aws-sdk/credential-provider-sso': 3.956.0
+ '@aws-sdk/credential-provider-web-identity': 3.956.0
+ '@aws-sdk/nested-clients': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/core': 3.20.0
+ '@smithy/credential-provider-imds': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/eventstream-handler-node@3.936.0':
+ '@aws-sdk/eventstream-handler-node@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/eventstream-codec': 4.2.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/eventstream-codec': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-eventstream@3.936.0':
+ '@aws-sdk/middleware-eventstream@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-host-header@3.936.0':
+ '@aws-sdk/middleware-host-header@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-logger@3.936.0':
+ '@aws-sdk/middleware-logger@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-recursion-detection@3.936.0':
+ '@aws-sdk/middleware-recursion-detection@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
+ '@aws-sdk/types': 3.956.0
'@aws/lambda-invoke-store': 0.2.2
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-user-agent@3.943.0':
+ '@aws-sdk/middleware-user-agent@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-endpoints': 3.936.0
- '@smithy/core': 3.18.7
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-endpoints': 3.956.0
+ '@smithy/core': 3.20.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/middleware-websocket@3.936.0':
+ '@aws-sdk/middleware-websocket@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-format-url': 3.936.0
- '@smithy/eventstream-codec': 4.2.5
- '@smithy/eventstream-serde-browser': 4.2.5
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/protocol-http': 5.3.5
- '@smithy/signature-v4': 5.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-format-url': 3.956.0
+ '@smithy/eventstream-codec': 4.2.7
+ '@smithy/eventstream-serde-browser': 4.2.7
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/signature-v4': 5.3.7
+ '@smithy/types': 4.11.0
'@smithy/util-hex-encoding': 4.2.0
tslib: 2.8.1
- '@aws-sdk/nested-clients@3.943.0':
+ '@aws-sdk/nested-clients@3.956.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/middleware-host-header': 3.936.0
- '@aws-sdk/middleware-logger': 3.936.0
- '@aws-sdk/middleware-recursion-detection': 3.936.0
- '@aws-sdk/middleware-user-agent': 3.943.0
- '@aws-sdk/region-config-resolver': 3.936.0
- '@aws-sdk/types': 3.936.0
- '@aws-sdk/util-endpoints': 3.936.0
- '@aws-sdk/util-user-agent-browser': 3.936.0
- '@aws-sdk/util-user-agent-node': 3.943.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.7
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/hash-node': 4.2.5
- '@smithy/invalid-dependency': 4.2.5
- '@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.14
- '@smithy/middleware-retry': 4.4.14
- '@smithy/middleware-serde': 4.2.6
- '@smithy/middleware-stack': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/node-http-handler': 4.4.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/middleware-host-header': 3.956.0
+ '@aws-sdk/middleware-logger': 3.956.0
+ '@aws-sdk/middleware-recursion-detection': 3.956.0
+ '@aws-sdk/middleware-user-agent': 3.956.0
+ '@aws-sdk/region-config-resolver': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@aws-sdk/util-endpoints': 3.956.0
+ '@aws-sdk/util-user-agent-browser': 3.956.0
+ '@aws-sdk/util-user-agent-node': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/core': 3.20.0
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/hash-node': 4.2.7
+ '@smithy/invalid-dependency': 4.2.7
+ '@smithy/middleware-content-length': 4.2.7
+ '@smithy/middleware-endpoint': 4.4.1
+ '@smithy/middleware-retry': 4.4.17
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/middleware-stack': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.13
- '@smithy/util-defaults-mode-node': 4.2.16
- '@smithy/util-endpoints': 3.2.5
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-retry': 4.2.5
+ '@smithy/util-defaults-mode-browser': 4.3.16
+ '@smithy/util-defaults-mode-node': 4.2.19
+ '@smithy/util-endpoints': 3.2.7
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-retry': 4.2.7
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/region-config-resolver@3.936.0':
+ '@aws-sdk/region-config-resolver@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/config-resolver': 4.4.3
- '@smithy/node-config-provider': 4.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/token-providers@3.943.0':
+ '@aws-sdk/token-providers@3.956.0':
dependencies:
- '@aws-sdk/core': 3.943.0
- '@aws-sdk/nested-clients': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/core': 3.956.0
+ '@aws-sdk/nested-clients': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/types@3.936.0':
+ '@aws-sdk/types@3.956.0':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/util-endpoints@3.936.0':
+ '@aws-sdk/util-endpoints@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
- '@smithy/util-endpoints': 3.2.5
+ '@aws-sdk/types': 3.956.0
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
+ '@smithy/util-endpoints': 3.2.7
tslib: 2.8.1
- '@aws-sdk/util-format-url@3.936.0':
+ '@aws-sdk/util-format-url@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/querystring-builder': 4.2.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/querystring-builder': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@aws-sdk/util-locate-window@3.893.0':
+ '@aws-sdk/util-locate-window@3.953.0':
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-user-agent-browser@3.936.0':
+ '@aws-sdk/util-user-agent-browser@3.956.0':
dependencies:
- '@aws-sdk/types': 3.936.0
- '@smithy/types': 4.9.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/types': 4.11.0
bowser: 2.13.1
tslib: 2.8.1
- '@aws-sdk/util-user-agent-node@3.943.0':
+ '@aws-sdk/util-user-agent-node@3.956.0':
dependencies:
- '@aws-sdk/middleware-user-agent': 3.943.0
- '@aws-sdk/types': 3.936.0
- '@smithy/node-config-provider': 4.3.5
- '@smithy/types': 4.9.0
+ '@aws-sdk/middleware-user-agent': 3.956.0
+ '@aws-sdk/types': 3.956.0
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@aws-sdk/util-utf8-browser@3.259.0':
dependencies:
tslib: 2.8.1
- '@aws-sdk/xml-builder@3.930.0':
+ '@aws-sdk/xml-builder@3.956.0':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
fast-xml-parser: 5.2.5
tslib: 2.8.1
@@ -10586,8 +10620,8 @@ snapshots:
'@azure/core-tracing': 1.3.1
'@azure/core-util': 1.13.1
'@azure/logger': 1.3.0
- '@azure/msal-browser': 4.26.2
- '@azure/msal-node': 3.8.3
+ '@azure/msal-browser': 4.27.0
+ '@azure/msal-node': 3.8.4
open: 10.2.0
tslib: 2.8.1
transitivePeerDependencies:
@@ -10600,16 +10634,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@azure/msal-browser@4.26.2':
+ '@azure/msal-browser@4.27.0':
dependencies:
- '@azure/msal-common': 15.13.2
+ '@azure/msal-common': 15.13.3
- '@azure/msal-common@15.13.2': {}
+ '@azure/msal-common@15.13.3': {}
- '@azure/msal-node@3.8.3':
+ '@azure/msal-node@3.8.4':
dependencies:
- '@azure/msal-common': 15.13.2
- jsonwebtoken: 9.0.2
+ '@azure/msal-common': 15.13.3
+ jsonwebtoken: 9.0.3
uuid: 8.3.2
'@babel/code-frame@7.27.1':
@@ -10759,7 +10793,7 @@ snapshots:
dependencies:
'@changesets/types': 6.1.0
- '@changesets/cli@2.29.8(@types/node@24.10.1)':
+ '@changesets/cli@2.29.8(@types/node@24.10.4)':
dependencies:
'@changesets/apply-release-plan': 7.0.14
'@changesets/assemble-release-plan': 6.0.9
@@ -10775,7 +10809,7 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@changesets/write': 0.4.0
- '@inquirer/external-editor': 1.0.3(@types/node@24.10.1)
+ '@inquirer/external-editor': 1.0.3(@types/node@24.10.4)
'@manypkg/get-packages': 1.1.3
ansi-colors: 4.1.3
ci-info: 3.9.0
@@ -10913,7 +10947,7 @@ snapshots:
'@csstools/css-tokenizer@3.0.4': {}
- '@dotenvx/dotenvx@1.51.1':
+ '@dotenvx/dotenvx@1.51.2':
dependencies:
commander: 11.1.0
dotenv: 17.2.3
@@ -10957,7 +10991,7 @@ snapshots:
'@esbuild-kit/core-utils@3.3.2':
dependencies:
- esbuild: 0.27.1
+ esbuild: 0.27.2
source-map-support: 0.5.21
'@esbuild-kit/esm-loader@2.6.5':
@@ -10965,87 +10999,87 @@ snapshots:
'@esbuild-kit/core-utils': 3.3.2
get-tsconfig: 4.13.0
- '@esbuild/aix-ppc64@0.27.1':
+ '@esbuild/aix-ppc64@0.27.2':
optional: true
- '@esbuild/android-arm64@0.27.1':
+ '@esbuild/android-arm64@0.27.2':
optional: true
- '@esbuild/android-arm@0.27.1':
+ '@esbuild/android-arm@0.27.2':
optional: true
- '@esbuild/android-x64@0.27.1':
+ '@esbuild/android-x64@0.27.2':
optional: true
- '@esbuild/darwin-arm64@0.27.1':
+ '@esbuild/darwin-arm64@0.27.2':
optional: true
- '@esbuild/darwin-x64@0.27.1':
+ '@esbuild/darwin-x64@0.27.2':
optional: true
- '@esbuild/freebsd-arm64@0.27.1':
+ '@esbuild/freebsd-arm64@0.27.2':
optional: true
- '@esbuild/freebsd-x64@0.27.1':
+ '@esbuild/freebsd-x64@0.27.2':
optional: true
- '@esbuild/linux-arm64@0.27.1':
+ '@esbuild/linux-arm64@0.27.2':
optional: true
- '@esbuild/linux-arm@0.27.1':
+ '@esbuild/linux-arm@0.27.2':
optional: true
- '@esbuild/linux-ia32@0.27.1':
+ '@esbuild/linux-ia32@0.27.2':
optional: true
- '@esbuild/linux-loong64@0.27.1':
+ '@esbuild/linux-loong64@0.27.2':
optional: true
- '@esbuild/linux-mips64el@0.27.1':
+ '@esbuild/linux-mips64el@0.27.2':
optional: true
- '@esbuild/linux-ppc64@0.27.1':
+ '@esbuild/linux-ppc64@0.27.2':
optional: true
- '@esbuild/linux-riscv64@0.27.1':
+ '@esbuild/linux-riscv64@0.27.2':
optional: true
- '@esbuild/linux-s390x@0.27.1':
+ '@esbuild/linux-s390x@0.27.2':
optional: true
- '@esbuild/linux-x64@0.27.1':
+ '@esbuild/linux-x64@0.27.2':
optional: true
- '@esbuild/netbsd-arm64@0.27.1':
+ '@esbuild/netbsd-arm64@0.27.2':
optional: true
- '@esbuild/netbsd-x64@0.27.1':
+ '@esbuild/netbsd-x64@0.27.2':
optional: true
- '@esbuild/openbsd-arm64@0.27.1':
+ '@esbuild/openbsd-arm64@0.27.2':
optional: true
- '@esbuild/openbsd-x64@0.27.1':
+ '@esbuild/openbsd-x64@0.27.2':
optional: true
- '@esbuild/openharmony-arm64@0.27.1':
+ '@esbuild/openharmony-arm64@0.27.2':
optional: true
- '@esbuild/sunos-x64@0.27.1':
+ '@esbuild/sunos-x64@0.27.2':
optional: true
- '@esbuild/win32-arm64@0.27.1':
+ '@esbuild/win32-arm64@0.27.2':
optional: true
- '@esbuild/win32-ia32@0.27.1':
+ '@esbuild/win32-ia32@0.27.2':
optional: true
- '@esbuild/win32-x64@0.27.1':
+ '@esbuild/win32-x64@0.27.2':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))':
dependencies:
- eslint: 9.39.1(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -11080,7 +11114,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.39.1': {}
+ '@eslint/js@9.39.2': {}
'@eslint/object-schema@2.1.7': {}
@@ -11125,21 +11159,25 @@ snapshots:
'@floating-ui/utils@0.2.10': {}
- '@google/genai@1.31.0(@modelcontextprotocol/sdk@1.24.2(zod@3.25.76))':
+ '@google/genai@1.34.0(@modelcontextprotocol/sdk@1.25.1(hono@4.11.1)(zod@3.25.76))':
dependencies:
google-auth-library: 10.5.0
ws: 8.18.3
optionalDependencies:
- '@modelcontextprotocol/sdk': 1.24.2(zod@3.25.76)
+ '@modelcontextprotocol/sdk': 1.25.1(hono@4.11.1)(zod@3.25.76)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- '@hookform/resolvers@5.2.2(react-hook-form@7.68.0(react@18.3.1))':
+ '@hono/node-server@1.19.7(hono@4.11.1)':
+ dependencies:
+ hono: 4.11.1
+
+ '@hookform/resolvers@5.2.2(react-hook-form@7.69.0(react@18.3.1))':
dependencies:
'@standard-schema/utils': 0.3.0
- react-hook-form: 7.68.0(react@18.3.1)
+ react-hook-form: 7.69.0(react@18.3.1)
'@humanfs/core@0.19.1': {}
@@ -11235,12 +11273,12 @@ snapshots:
'@img/sharp-win32-x64@0.33.5':
optional: true
- '@inquirer/external-editor@1.0.3(@types/node@24.10.1)':
+ '@inquirer/external-editor@1.0.3(@types/node@24.10.4)':
dependencies:
chardet: 2.1.1
- iconv-lite: 0.7.0
+ iconv-lite: 0.7.1
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.4
'@ioredis/commands@1.4.0': {}
@@ -11265,7 +11303,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/yargs': 17.0.35
chalk: 4.1.2
@@ -11357,15 +11395,16 @@ snapshots:
dependencies:
exenv-es6: 1.1.1
- '@mistralai/mistralai@1.10.0':
+ '@mistralai/mistralai@1.11.0':
dependencies:
zod: 3.25.76
zod-to-json-schema: 3.25.0(zod@3.25.76)
'@mixmark-io/domino@2.2.0': {}
- '@modelcontextprotocol/sdk@1.24.2(zod@3.25.76)':
+ '@modelcontextprotocol/sdk@1.25.1(hono@4.11.1)(zod@3.25.76)':
dependencies:
+ '@hono/node-server': 1.19.7(hono@4.11.1)
ajv: 8.17.1
ajv-formats: 3.0.1(ajv@8.17.1)
content-type: 1.0.5
@@ -11376,11 +11415,13 @@ snapshots:
express: 5.2.1
express-rate-limit: 7.5.1(express@5.2.1)
jose: 6.1.3
+ json-schema-typed: 8.0.2
pkce-challenge: 5.0.1
raw-body: 3.0.2
zod: 3.25.76
zod-to-json-schema: 3.25.0(zod@3.25.76)
transitivePeerDependencies:
+ - hono
- supports-color
'@mswjs/interceptors@0.39.8':
@@ -11410,7 +11451,7 @@ snapshots:
'@next/env@15.2.8': {}
- '@next/eslint-plugin-next@15.5.7':
+ '@next/eslint-plugin-next@15.5.9':
dependencies:
fast-glob: 3.3.1
@@ -11528,74 +11569,71 @@ snapshots:
'@open-draft/until@2.1.0': {}
- '@opentelemetry/api@1.9.0':
- optional: true
-
- '@oxc-resolver/binding-android-arm-eabi@11.14.2':
+ '@oxc-resolver/binding-android-arm-eabi@11.16.0':
optional: true
- '@oxc-resolver/binding-android-arm64@11.14.2':
+ '@oxc-resolver/binding-android-arm64@11.16.0':
optional: true
- '@oxc-resolver/binding-darwin-arm64@11.14.2':
+ '@oxc-resolver/binding-darwin-arm64@11.16.0':
optional: true
- '@oxc-resolver/binding-darwin-x64@11.14.2':
+ '@oxc-resolver/binding-darwin-x64@11.16.0':
optional: true
- '@oxc-resolver/binding-freebsd-x64@11.14.2':
+ '@oxc-resolver/binding-freebsd-x64@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-arm-gnueabihf@11.14.2':
+ '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-arm-musleabihf@11.14.2':
+ '@oxc-resolver/binding-linux-arm-musleabihf@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-arm64-gnu@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-arm64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-arm64-musl@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-ppc64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-ppc64-gnu@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-riscv64-gnu@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-riscv64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-riscv64-musl@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-s390x-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-s390x-gnu@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-x64-gnu@11.14.2':
+ '@oxc-resolver/binding-linux-x64-gnu@11.16.0':
optional: true
- '@oxc-resolver/binding-linux-x64-musl@11.14.2':
+ '@oxc-resolver/binding-linux-x64-musl@11.16.0':
optional: true
- '@oxc-resolver/binding-openharmony-arm64@11.14.2':
+ '@oxc-resolver/binding-openharmony-arm64@11.16.0':
optional: true
- '@oxc-resolver/binding-wasm32-wasi@11.14.2':
+ '@oxc-resolver/binding-wasm32-wasi@11.16.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.0
optional: true
- '@oxc-resolver/binding-win32-arm64-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-arm64-msvc@11.16.0':
optional: true
- '@oxc-resolver/binding-win32-ia32-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-ia32-msvc@11.16.0':
optional: true
- '@oxc-resolver/binding-win32-x64-msvc@11.14.2':
+ '@oxc-resolver/binding-win32-x64-msvc@11.16.0':
optional: true
'@polka/url@1.0.0-next.29': {}
- '@posthog/core@1.7.0':
+ '@posthog/core@1.8.1':
dependencies:
cross-spawn: 7.0.6
@@ -12175,101 +12213,101 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.27': {}
- '@rollup/rollup-android-arm-eabi@4.53.3':
+ '@rollup/rollup-android-arm-eabi@4.54.0':
optional: true
- '@rollup/rollup-android-arm64@4.53.3':
+ '@rollup/rollup-android-arm64@4.54.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.53.3':
+ '@rollup/rollup-darwin-arm64@4.54.0':
optional: true
- '@rollup/rollup-darwin-x64@4.53.3':
+ '@rollup/rollup-darwin-x64@4.54.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.53.3':
+ '@rollup/rollup-freebsd-arm64@4.54.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.53.3':
+ '@rollup/rollup-freebsd-x64@4.54.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ '@rollup/rollup-linux-arm-musleabihf@4.54.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ '@rollup/rollup-linux-arm64-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.53.3':
+ '@rollup/rollup-linux-arm64-musl@4.54.0':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ '@rollup/rollup-linux-loong64-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ '@rollup/rollup-linux-ppc64-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ '@rollup/rollup-linux-riscv64-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ '@rollup/rollup-linux-riscv64-musl@4.54.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ '@rollup/rollup-linux-s390x-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.53.3':
+ '@rollup/rollup-linux-x64-gnu@4.54.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.53.3':
+ '@rollup/rollup-linux-x64-musl@4.54.0':
optional: true
- '@rollup/rollup-openharmony-arm64@4.53.3':
+ '@rollup/rollup-openharmony-arm64@4.54.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ '@rollup/rollup-win32-arm64-msvc@4.54.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ '@rollup/rollup-win32-ia32-msvc@4.54.0':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.53.3':
+ '@rollup/rollup-win32-x64-gnu@4.54.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.53.3':
+ '@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true
'@sec-ant/readable-stream@0.4.1': {}
- '@shikijs/core@3.19.0':
+ '@shikijs/core@3.20.0':
dependencies:
- '@shikijs/types': 3.19.0
+ '@shikijs/types': 3.20.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@3.19.0':
+ '@shikijs/engine-javascript@3.20.0':
dependencies:
- '@shikijs/types': 3.19.0
+ '@shikijs/types': 3.20.0
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.4
- '@shikijs/engine-oniguruma@3.19.0':
+ '@shikijs/engine-oniguruma@3.20.0':
dependencies:
- '@shikijs/types': 3.19.0
+ '@shikijs/types': 3.20.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.19.0':
+ '@shikijs/langs@3.20.0':
dependencies:
- '@shikijs/types': 3.19.0
+ '@shikijs/types': 3.20.0
- '@shikijs/themes@3.19.0':
+ '@shikijs/themes@3.20.0':
dependencies:
- '@shikijs/types': 3.19.0
+ '@shikijs/types': 3.20.0
- '@shikijs/types@3.19.0':
+ '@shikijs/types@3.20.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -12290,39 +12328,39 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/abort-controller@4.2.5':
+ '@smithy/abort-controller@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/config-resolver@4.4.3':
+ '@smithy/config-resolver@4.4.5':
dependencies:
- '@smithy/node-config-provider': 4.3.5
- '@smithy/types': 4.9.0
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/types': 4.11.0
'@smithy/util-config-provider': 4.2.0
- '@smithy/util-endpoints': 3.2.5
- '@smithy/util-middleware': 4.2.5
+ '@smithy/util-endpoints': 3.2.7
+ '@smithy/util-middleware': 4.2.7
tslib: 2.8.1
- '@smithy/core@3.18.7':
+ '@smithy/core@3.20.0':
dependencies:
- '@smithy/middleware-serde': 4.2.6
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-stream': 4.5.6
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-stream': 4.5.8
'@smithy/util-utf8': 4.2.0
'@smithy/uuid': 1.1.0
tslib: 2.8.1
- '@smithy/credential-provider-imds@4.2.5':
+ '@smithy/credential-provider-imds@4.2.7':
dependencies:
- '@smithy/node-config-provider': 4.3.5
- '@smithy/property-provider': 4.2.5
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
tslib: 2.8.1
'@smithy/eventstream-codec@2.2.0':
@@ -12332,22 +12370,22 @@ snapshots:
'@smithy/util-hex-encoding': 2.2.0
tslib: 2.8.1
- '@smithy/eventstream-codec@4.2.5':
+ '@smithy/eventstream-codec@4.2.7':
dependencies:
'@aws-crypto/crc32': 5.2.0
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
'@smithy/util-hex-encoding': 4.2.0
tslib: 2.8.1
- '@smithy/eventstream-serde-browser@4.2.5':
+ '@smithy/eventstream-serde-browser@4.2.7':
dependencies:
- '@smithy/eventstream-serde-universal': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/eventstream-serde-universal': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/eventstream-serde-config-resolver@4.3.5':
+ '@smithy/eventstream-serde-config-resolver@4.3.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/eventstream-serde-node@2.2.0':
@@ -12356,10 +12394,10 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/eventstream-serde-node@4.2.5':
+ '@smithy/eventstream-serde-node@4.2.7':
dependencies:
- '@smithy/eventstream-serde-universal': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/eventstream-serde-universal': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/eventstream-serde-universal@2.2.0':
@@ -12368,10 +12406,10 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/eventstream-serde-universal@4.2.5':
+ '@smithy/eventstream-serde-universal@4.2.7':
dependencies:
- '@smithy/eventstream-codec': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/eventstream-codec': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/fetch-http-handler@2.5.0':
@@ -12382,24 +12420,24 @@ snapshots:
'@smithy/util-base64': 2.3.0
tslib: 2.8.1
- '@smithy/fetch-http-handler@5.3.6':
+ '@smithy/fetch-http-handler@5.3.8':
dependencies:
- '@smithy/protocol-http': 5.3.5
- '@smithy/querystring-builder': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/querystring-builder': 4.2.7
+ '@smithy/types': 4.11.0
'@smithy/util-base64': 4.3.0
tslib: 2.8.1
- '@smithy/hash-node@4.2.5':
+ '@smithy/hash-node@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
'@smithy/util-buffer-from': 4.2.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/invalid-dependency@4.2.5':
+ '@smithy/invalid-dependency@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/is-array-buffer@2.2.0':
@@ -12414,10 +12452,10 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/middleware-content-length@4.2.5':
+ '@smithy/middleware-content-length@4.2.7':
dependencies:
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/middleware-endpoint@2.5.1':
@@ -12430,26 +12468,26 @@ snapshots:
'@smithy/util-middleware': 2.2.0
tslib: 2.8.1
- '@smithy/middleware-endpoint@4.3.14':
+ '@smithy/middleware-endpoint@4.4.1':
dependencies:
- '@smithy/core': 3.18.7
- '@smithy/middleware-serde': 4.2.6
- '@smithy/node-config-provider': 4.3.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
- '@smithy/url-parser': 4.2.5
- '@smithy/util-middleware': 4.2.5
+ '@smithy/core': 3.20.0
+ '@smithy/middleware-serde': 4.2.8
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
+ '@smithy/url-parser': 4.2.7
+ '@smithy/util-middleware': 4.2.7
tslib: 2.8.1
- '@smithy/middleware-retry@4.4.14':
+ '@smithy/middleware-retry@4.4.17':
dependencies:
- '@smithy/node-config-provider': 4.3.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/service-error-classification': 4.2.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
- '@smithy/util-middleware': 4.2.5
- '@smithy/util-retry': 4.2.5
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/service-error-classification': 4.2.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
+ '@smithy/util-middleware': 4.2.7
+ '@smithy/util-retry': 4.2.7
'@smithy/uuid': 1.1.0
tslib: 2.8.1
@@ -12458,10 +12496,10 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/middleware-serde@4.2.6':
+ '@smithy/middleware-serde@4.2.8':
dependencies:
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/middleware-stack@2.2.0':
@@ -12469,9 +12507,9 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/middleware-stack@4.2.5':
+ '@smithy/middleware-stack@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/node-config-provider@2.3.0':
@@ -12481,11 +12519,11 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/node-config-provider@4.3.5':
+ '@smithy/node-config-provider@4.3.7':
dependencies:
- '@smithy/property-provider': 4.2.5
- '@smithy/shared-ini-file-loader': 4.4.0
- '@smithy/types': 4.9.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/shared-ini-file-loader': 4.4.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/node-http-handler@2.5.0':
@@ -12496,12 +12534,12 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/node-http-handler@4.4.5':
+ '@smithy/node-http-handler@4.4.7':
dependencies:
- '@smithy/abort-controller': 4.2.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/querystring-builder': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/abort-controller': 4.2.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/querystring-builder': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/property-provider@2.2.0':
@@ -12509,9 +12547,9 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/property-provider@4.2.5':
+ '@smithy/property-provider@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/protocol-http@3.3.0':
@@ -12519,9 +12557,9 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/protocol-http@5.3.5':
+ '@smithy/protocol-http@5.3.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/querystring-builder@2.2.0':
@@ -12530,9 +12568,9 @@ snapshots:
'@smithy/util-uri-escape': 2.2.0
tslib: 2.8.1
- '@smithy/querystring-builder@4.2.5':
+ '@smithy/querystring-builder@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
'@smithy/util-uri-escape': 4.2.0
tslib: 2.8.1
@@ -12541,23 +12579,23 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/querystring-parser@4.2.5':
+ '@smithy/querystring-parser@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/service-error-classification@4.2.5':
+ '@smithy/service-error-classification@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
'@smithy/shared-ini-file-loader@2.4.0':
dependencies:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/shared-ini-file-loader@4.4.0':
+ '@smithy/shared-ini-file-loader@4.4.2':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/signature-v4@3.1.2':
@@ -12570,13 +12608,13 @@ snapshots:
'@smithy/util-utf8': 3.0.0
tslib: 2.8.1
- '@smithy/signature-v4@5.3.5':
+ '@smithy/signature-v4@5.3.7':
dependencies:
'@smithy/is-array-buffer': 4.2.0
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
'@smithy/util-hex-encoding': 4.2.0
- '@smithy/util-middleware': 4.2.5
+ '@smithy/util-middleware': 4.2.7
'@smithy/util-uri-escape': 4.2.0
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
@@ -12590,14 +12628,14 @@ snapshots:
'@smithy/util-stream': 2.2.0
tslib: 2.8.1
- '@smithy/smithy-client@4.9.10':
+ '@smithy/smithy-client@4.10.2':
dependencies:
- '@smithy/core': 3.18.7
- '@smithy/middleware-endpoint': 4.3.14
- '@smithy/middleware-stack': 4.2.5
- '@smithy/protocol-http': 5.3.5
- '@smithy/types': 4.9.0
- '@smithy/util-stream': 4.5.6
+ '@smithy/core': 3.20.0
+ '@smithy/middleware-endpoint': 4.4.1
+ '@smithy/middleware-stack': 4.2.7
+ '@smithy/protocol-http': 5.3.7
+ '@smithy/types': 4.11.0
+ '@smithy/util-stream': 4.5.8
tslib: 2.8.1
'@smithy/types@2.12.0':
@@ -12608,7 +12646,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/types@4.9.0':
+ '@smithy/types@4.11.0':
dependencies:
tslib: 2.8.1
@@ -12618,10 +12656,10 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.8.1
- '@smithy/url-parser@4.2.5':
+ '@smithy/url-parser@4.2.7':
dependencies:
- '@smithy/querystring-parser': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/querystring-parser': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/util-base64@2.3.0':
@@ -12663,27 +12701,27 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/util-defaults-mode-browser@4.3.13':
+ '@smithy/util-defaults-mode-browser@4.3.16':
dependencies:
- '@smithy/property-provider': 4.2.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
+ '@smithy/property-provider': 4.2.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/util-defaults-mode-node@4.2.16':
+ '@smithy/util-defaults-mode-node@4.2.19':
dependencies:
- '@smithy/config-resolver': 4.4.3
- '@smithy/credential-provider-imds': 4.2.5
- '@smithy/node-config-provider': 4.3.5
- '@smithy/property-provider': 4.2.5
- '@smithy/smithy-client': 4.9.10
- '@smithy/types': 4.9.0
+ '@smithy/config-resolver': 4.4.5
+ '@smithy/credential-provider-imds': 4.2.7
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/property-provider': 4.2.7
+ '@smithy/smithy-client': 4.10.2
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/util-endpoints@3.2.5':
+ '@smithy/util-endpoints@3.2.7':
dependencies:
- '@smithy/node-config-provider': 4.3.5
- '@smithy/types': 4.9.0
+ '@smithy/node-config-provider': 4.3.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/util-hex-encoding@2.2.0':
@@ -12708,15 +12746,15 @@ snapshots:
'@smithy/types': 3.7.2
tslib: 2.8.1
- '@smithy/util-middleware@4.2.5':
+ '@smithy/util-middleware@4.2.7':
dependencies:
- '@smithy/types': 4.9.0
+ '@smithy/types': 4.11.0
tslib: 2.8.1
- '@smithy/util-retry@4.2.5':
+ '@smithy/util-retry@4.2.7':
dependencies:
- '@smithy/service-error-classification': 4.2.5
- '@smithy/types': 4.9.0
+ '@smithy/service-error-classification': 4.2.7
+ '@smithy/types': 4.11.0
tslib: 2.8.1
'@smithy/util-stream@2.2.0':
@@ -12730,11 +12768,11 @@ snapshots:
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@smithy/util-stream@4.5.6':
+ '@smithy/util-stream@4.5.8':
dependencies:
- '@smithy/fetch-http-handler': 5.3.6
- '@smithy/node-http-handler': 4.4.5
- '@smithy/types': 4.9.0
+ '@smithy/fetch-http-handler': 5.3.8
+ '@smithy/node-http-handler': 4.4.7
+ '@smithy/types': 4.11.0
'@smithy/util-base64': 4.3.0
'@smithy/util-buffer-from': 4.2.0
'@smithy/util-hex-encoding': 4.2.0
@@ -12782,92 +12820,92 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@tailwindcss/node@4.1.17':
+ '@tailwindcss/node@4.1.18':
dependencies:
'@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.18.3
+ enhanced-resolve: 5.18.4
jiti: 2.6.1
lightningcss: 1.30.2
magic-string: 0.30.21
source-map-js: 1.2.1
- tailwindcss: 4.1.17
+ tailwindcss: 4.1.18
- '@tailwindcss/oxide-android-arm64@4.1.17':
+ '@tailwindcss/oxide-android-arm64@4.1.18':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ '@tailwindcss/oxide-darwin-arm64@4.1.18':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.1.17':
+ '@tailwindcss/oxide-darwin-x64@4.1.18':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ '@tailwindcss/oxide-freebsd-x64@4.1.18':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ '@tailwindcss/oxide-linux-x64-musl@4.1.18':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ '@tailwindcss/oxide-wasm32-wasi@4.1.18':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
optional: true
- '@tailwindcss/oxide@4.1.17':
+ '@tailwindcss/oxide@4.1.18':
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.17
- '@tailwindcss/oxide-darwin-arm64': 4.1.17
- '@tailwindcss/oxide-darwin-x64': 4.1.17
- '@tailwindcss/oxide-freebsd-x64': 4.1.17
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.17
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.17
- '@tailwindcss/oxide-linux-x64-musl': 4.1.17
- '@tailwindcss/oxide-wasm32-wasi': 4.1.17
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.17
-
- '@tailwindcss/postcss@4.1.17':
+ '@tailwindcss/oxide-android-arm64': 4.1.18
+ '@tailwindcss/oxide-darwin-arm64': 4.1.18
+ '@tailwindcss/oxide-darwin-x64': 4.1.18
+ '@tailwindcss/oxide-freebsd-x64': 4.1.18
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.18
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.18
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.18
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.18
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
+
+ '@tailwindcss/postcss@4.1.18':
dependencies:
'@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.1.17
- '@tailwindcss/oxide': 4.1.17
+ '@tailwindcss/node': 4.1.18
+ '@tailwindcss/oxide': 4.1.18
postcss: 8.5.6
- tailwindcss: 4.1.17
+ tailwindcss: 4.1.18
- '@tailwindcss/typography@0.5.19(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2))':
+ '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
postcss-selector-parser: 6.0.10
- tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.2)
+ tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2)
- '@tailwindcss/vite@4.1.17(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tailwindcss/vite@4.1.18(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@tailwindcss/node': 4.1.17
- '@tailwindcss/oxide': 4.1.17
- tailwindcss: 4.1.17
- vite: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ '@tailwindcss/node': 4.1.18
+ '@tailwindcss/oxide': 4.1.18
+ tailwindcss: 4.1.18
+ vite: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
- '@tanstack/query-core@5.90.11': {}
+ '@tanstack/query-core@5.90.12': {}
- '@tanstack/react-query@5.90.11(react@18.3.1)':
+ '@tanstack/react-query@5.90.12(react@18.3.1)':
dependencies:
- '@tanstack/query-core': 5.90.11
+ '@tanstack/query-core': 5.90.12
react: 18.3.1
'@testing-library/dom@10.4.1':
@@ -12890,7 +12928,7 @@ snapshots:
picocolors: 1.1.1
redent: 3.0.0
- '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@testing-library/react@16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.28.4
'@testing-library/dom': 10.4.1
@@ -13087,7 +13125,7 @@ snapshots:
'@types/glob@8.1.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/glob@9.0.0':
dependencies:
@@ -13148,12 +13186,12 @@ snapshots:
'@types/node-fetch@2.6.13':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
form-data: 4.0.5
'@types/node-ipc@9.2.3':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/node@12.20.55': {}
@@ -13163,11 +13201,11 @@ snapshots:
dependencies:
undici-types: 5.26.5
- '@types/node@20.19.25':
+ '@types/node@20.19.27':
dependencies:
undici-types: 6.21.0
- '@types/node@24.10.1':
+ '@types/node@24.10.4':
dependencies:
undici-types: 7.16.0
@@ -13183,7 +13221,7 @@ snapshots:
'@types/qrcode@1.5.6':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/react-dom@18.3.7(@types/react@18.3.27)':
dependencies:
@@ -13196,7 +13234,7 @@ snapshots:
'@types/readdir-glob@1.1.5':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.4
'@types/retry@0.12.5': {}
@@ -13212,11 +13250,11 @@ snapshots:
'@types/stream-chain@2.1.0':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/stream-json@1.7.8':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@types/stream-chain': 2.1.0
'@types/string-similarity@4.0.2': {}
@@ -13238,7 +13276,7 @@ snapshots:
'@types/vscode-webview@1.57.5': {}
- '@types/vscode@1.106.1': {}
+ '@types/vscode@1.107.0': {}
'@types/yargs-parser@21.0.3': {}
@@ -13248,19 +13286,18 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
optional: true
- '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)':
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.48.1
- eslint: 9.39.1(jiti@2.6.1)
- graphemer: 1.4.0
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ eslint: 9.39.2(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.8.3)
@@ -13268,56 +13305,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)':
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3(supports-color@8.1.1)
- eslint: 9.39.1(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.48.1(typescript@5.8.3)':
+ '@typescript-eslint/project-service@8.50.0(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.50.0
debug: 4.4.3(supports-color@8.1.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.48.1':
+ '@typescript-eslint/scope-manager@8.50.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
- '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.8.3)':
+ '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.8.3)':
dependencies:
typescript: 5.8.3
- '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)':
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
debug: 4.4.3(supports-color@8.1.1)
- eslint: 9.39.1(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.48.1': {}
+ '@typescript-eslint/types@8.50.0': {}
- '@typescript-eslint/typescript-estree@8.48.1(typescript@5.8.3)':
+ '@typescript-eslint/typescript-estree@8.50.0(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/project-service': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/visitor-keys': 8.48.1
+ '@typescript-eslint/project-service': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3(supports-color@8.1.1)
minimatch: 9.0.5
semver: 7.7.3
@@ -13327,20 +13364,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)':
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.48.1
- '@typescript-eslint/types': 8.48.1
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.8.3)
- eslint: 9.39.1(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.48.1':
+ '@typescript-eslint/visitor-keys@8.50.0':
dependencies:
- '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
'@typespec/ts-http-runtime@0.3.2':
@@ -13359,7 +13396,7 @@ snapshots:
satori: 0.12.2
yoga-wasm-web: 0.3.3
- '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
@@ -13367,7 +13404,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -13379,21 +13416,21 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@3.2.4(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
- '@vitest/mocker@3.2.4(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@3.2.4(vite@6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -13424,7 +13461,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/utils@3.2.4':
dependencies:
@@ -13439,7 +13476,7 @@ snapshots:
'@types/mocha': 10.0.10
c8: 9.1.0
chokidar: 3.6.0
- enhanced-resolve: 5.18.3
+ enhanced-resolve: 5.18.4
glob: 13.0.0
minimatch: 9.0.5
mocha: 11.7.5
@@ -13696,7 +13733,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
is-string: 1.1.1
@@ -13708,7 +13745,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
@@ -13717,14 +13754,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
array.prototype.reduce@1.0.8:
@@ -13732,7 +13769,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-array-method-boxes-properly: 1.0.0
es-errors: 1.3.0
es-object-atoms: 1.1.1
@@ -13742,7 +13779,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-shim-unscopables: 1.1.0
@@ -13751,7 +13788,7 @@ snapshots:
array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
@@ -13776,12 +13813,11 @@ snapshots:
asynckit@0.4.0: {}
- autoprefixer@10.4.22(postcss@8.5.6):
+ autoprefixer@10.4.23(postcss@8.5.6):
dependencies:
browserslist: 4.28.1
- caniuse-lite: 1.0.30001759
+ caniuse-lite: 1.0.30001761
fraction.js: 5.3.4
- normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -13852,7 +13888,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.9.0: {}
+ baseline-browser-mapping@2.9.11: {}
basic-ftp@5.0.5: {}
@@ -13885,7 +13921,7 @@ snapshots:
content-type: 1.0.5
debug: 4.4.3(supports-color@8.1.1)
http-errors: 2.0.1
- iconv-lite: 0.7.0
+ iconv-lite: 0.7.1
on-finished: 2.4.1
qs: 6.14.0
raw-body: 3.0.2
@@ -13909,11 +13945,11 @@ snapshots:
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.0
- caniuse-lite: 1.0.30001759
- electron-to-chromium: 1.5.264
+ baseline-browser-mapping: 2.9.11
+ caniuse-lite: 1.0.30001761
+ electron-to-chromium: 1.5.267
node-releases: 2.0.27
- update-browserslist-db: 1.2.1(browserslist@4.28.1)
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
buffer-crc32@0.2.13: {}
@@ -13941,9 +13977,9 @@ snapshots:
dependencies:
run-applescript: 7.1.0
- bundle-require@5.1.0(esbuild@0.27.1):
+ bundle-require@5.1.0(esbuild@0.27.2):
dependencies:
- esbuild: 0.27.1
+ esbuild: 0.27.2
load-tsconfig: 0.2.5
busboy@1.6.0:
@@ -13995,7 +14031,7 @@ snapshots:
camelize@1.0.1: {}
- caniuse-lite@1.0.30001759: {}
+ caniuse-lite@1.0.30001761: {}
ccount@2.0.1: {}
@@ -14068,7 +14104,7 @@ snapshots:
chevrotain-allstar@0.3.1(chevrotain@11.0.3):
dependencies:
chevrotain: 11.0.3
- lodash-es: 4.17.21
+ lodash-es: 4.17.22
chevrotain@11.0.3:
dependencies:
@@ -14101,7 +14137,7 @@ snapshots:
mitt: 3.0.1
zod: 3.23.8
- chromium-bidi@11.0.0(devtools-protocol@0.0.1534754):
+ chromium-bidi@12.0.1(devtools-protocol@0.0.1534754):
dependencies:
devtools-protocol: 0.0.1534754
mitt: 3.0.1
@@ -14569,7 +14605,7 @@ snapshots:
dagre-d3-es@7.0.13:
dependencies:
d3: 7.9.0
- lodash-es: 4.17.21
+ lodash-es: 4.17.22
data-uri-to-buffer@4.0.1: {}
@@ -14631,7 +14667,7 @@ snapshots:
mimic-response: 3.1.0
optional: true
- dedent@1.7.0: {}
+ dedent@1.7.1: {}
deep-eql@5.0.2: {}
@@ -14749,7 +14785,7 @@ snapshots:
dependencies:
domelementtype: 2.3.0
- dompurify@3.3.0:
+ dompurify@3.3.1:
optionalDependencies:
'@types/trusted-types': 2.0.7
@@ -14768,18 +14804,17 @@ snapshots:
dotenv@17.2.3: {}
- drizzle-kit@0.31.7:
+ drizzle-kit@0.31.8:
dependencies:
'@drizzle-team/brocli': 0.10.2
'@esbuild-kit/esm-loader': 2.6.5
- esbuild: 0.27.1
- esbuild-register: 3.6.0(esbuild@0.27.1)
+ esbuild: 0.27.2
+ esbuild-register: 3.6.0(esbuild@0.27.2)
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(postgres@3.4.7):
+ drizzle-orm@0.44.7(postgres@3.4.7):
optionalDependencies:
- '@opentelemetry/api': 1.9.0
postgres: 3.4.7
duck@0.1.12:
@@ -14815,7 +14850,7 @@ snapshots:
eight-colors@1.3.1: {}
- electron-to-chromium@1.5.264: {}
+ electron-to-chromium@1.5.267: {}
embla-carousel-auto-scroll@8.6.0(embla-carousel@8.6.0):
dependencies:
@@ -14866,7 +14901,7 @@ snapshots:
engine.io-parser@5.2.3: {}
- enhanced-resolve@5.18.3:
+ enhanced-resolve@5.18.4:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
@@ -14888,7 +14923,7 @@ snapshots:
dependencies:
stackframe: 1.3.4
- es-abstract@1.24.0:
+ es-abstract@1.24.1:
dependencies:
array-buffer-byte-length: 1.0.2
arraybuffer.prototype.slice: 1.0.4
@@ -14951,12 +14986,12 @@ snapshots:
es-errors@1.3.0: {}
- es-iterator-helpers@1.2.1:
+ es-iterator-helpers@1.2.2:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-set-tostringtag: 2.1.0
function-bind: 1.1.2
@@ -14993,41 +15028,43 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild-register@3.6.0(esbuild@0.27.1):
+ esbuild-register@3.6.0(esbuild@0.27.2):
dependencies:
debug: 4.4.3(supports-color@8.1.1)
- esbuild: 0.27.1
+ esbuild: 0.27.2
transitivePeerDependencies:
- supports-color
- esbuild@0.27.1:
+ esbuild-wasm@0.25.12: {}
+
+ esbuild@0.27.2:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.1
- '@esbuild/android-arm': 0.27.1
- '@esbuild/android-arm64': 0.27.1
- '@esbuild/android-x64': 0.27.1
- '@esbuild/darwin-arm64': 0.27.1
- '@esbuild/darwin-x64': 0.27.1
- '@esbuild/freebsd-arm64': 0.27.1
- '@esbuild/freebsd-x64': 0.27.1
- '@esbuild/linux-arm': 0.27.1
- '@esbuild/linux-arm64': 0.27.1
- '@esbuild/linux-ia32': 0.27.1
- '@esbuild/linux-loong64': 0.27.1
- '@esbuild/linux-mips64el': 0.27.1
- '@esbuild/linux-ppc64': 0.27.1
- '@esbuild/linux-riscv64': 0.27.1
- '@esbuild/linux-s390x': 0.27.1
- '@esbuild/linux-x64': 0.27.1
- '@esbuild/netbsd-arm64': 0.27.1
- '@esbuild/netbsd-x64': 0.27.1
- '@esbuild/openbsd-arm64': 0.27.1
- '@esbuild/openbsd-x64': 0.27.1
- '@esbuild/openharmony-arm64': 0.27.1
- '@esbuild/sunos-x64': 0.27.1
- '@esbuild/win32-arm64': 0.27.1
- '@esbuild/win32-ia32': 0.27.1
- '@esbuild/win32-x64': 0.27.1
+ '@esbuild/aix-ppc64': 0.27.2
+ '@esbuild/android-arm': 0.27.2
+ '@esbuild/android-arm64': 0.27.2
+ '@esbuild/android-x64': 0.27.2
+ '@esbuild/darwin-arm64': 0.27.2
+ '@esbuild/darwin-x64': 0.27.2
+ '@esbuild/freebsd-arm64': 0.27.2
+ '@esbuild/freebsd-x64': 0.27.2
+ '@esbuild/linux-arm': 0.27.2
+ '@esbuild/linux-arm64': 0.27.2
+ '@esbuild/linux-ia32': 0.27.2
+ '@esbuild/linux-loong64': 0.27.2
+ '@esbuild/linux-mips64el': 0.27.2
+ '@esbuild/linux-ppc64': 0.27.2
+ '@esbuild/linux-riscv64': 0.27.2
+ '@esbuild/linux-s390x': 0.27.2
+ '@esbuild/linux-x64': 0.27.2
+ '@esbuild/netbsd-arm64': 0.27.2
+ '@esbuild/netbsd-x64': 0.27.2
+ '@esbuild/openbsd-arm64': 0.27.2
+ '@esbuild/openbsd-x64': 0.27.2
+ '@esbuild/openharmony-arm64': 0.27.2
+ '@esbuild/sunos-x64': 0.27.2
+ '@esbuild/win32-arm64': 0.27.2
+ '@esbuild/win32-ia32': 0.27.2
+ '@esbuild/win32-x64': 0.27.2
escalade@3.2.0: {}
@@ -15049,25 +15086,25 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)):
+ eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- eslint: 9.39.1(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
eslint-plugin-only-warn@1.1.0: {}
- eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)):
dependencies:
- eslint: 9.39.1(jiti@2.6.1)
+ eslint: 9.39.2(jiti@2.6.1)
- eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)):
+ eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
array.prototype.flatmap: 1.3.3
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
- es-iterator-helpers: 1.2.1
- eslint: 9.39.1(jiti@2.6.1)
+ es-iterator-helpers: 1.2.2
+ eslint: 9.39.2(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -15081,11 +15118,11 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.6.2(eslint@9.39.1(jiti@2.6.1))(turbo@2.6.2):
+ eslint-plugin-turbo@2.7.1(eslint@9.39.2(jiti@2.6.1))(turbo@2.7.1):
dependencies:
dotenv: 16.0.3
- eslint: 9.39.1(jiti@2.6.1)
- turbo: 2.6.2
+ eslint: 9.39.2(jiti@2.6.1)
+ turbo: 2.7.1
eslint-scope@8.4.0:
dependencies:
@@ -15096,15 +15133,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.39.1(jiti@2.6.1):
+ eslint@9.39.2(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.3
- '@eslint/js': 9.39.1
+ '@eslint/js': 9.39.2
'@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
@@ -15256,7 +15293,7 @@ snapshots:
expand-template@2.0.3:
optional: true
- expect-type@1.2.2: {}
+ expect-type@1.3.0: {}
expect@29.7.0:
dependencies:
@@ -15295,8 +15332,8 @@ snapshots:
qs: 6.14.0
range-parser: 1.2.1
router: 2.2.0
- send: 1.2.0
- serve-static: 2.2.0
+ send: 1.2.1
+ serve-static: 2.2.1
statuses: 2.0.2
type-is: 2.0.1
vary: 1.1.2
@@ -15328,7 +15365,7 @@ snapshots:
fast-deep-equal@3.1.3: {}
- fast-equals@5.3.3: {}
+ fast-equals@5.4.0: {}
fast-fifo@1.3.2: {}
@@ -15358,11 +15395,11 @@ snapshots:
fast-xml-parser@5.2.5:
dependencies:
- strnum: 2.1.1
+ strnum: 2.1.2
- fast-xml-parser@5.3.2:
+ fast-xml-parser@5.3.3:
dependencies:
- strnum: 2.1.1
+ strnum: 2.1.2
fastest-levenshtein@1.0.16: {}
@@ -15438,7 +15475,7 @@ snapshots:
dependencies:
magic-string: 0.30.21
mlly: 1.8.0
- rollup: 4.53.3
+ rollup: 4.54.0
flat-cache@4.0.1:
dependencies:
@@ -15685,7 +15722,7 @@ snapshots:
gcp-metadata: 8.1.2
google-logging-utils: 1.1.3
gtoken: 8.0.0
- jws: 4.0.0
+ jws: 4.0.1
transitivePeerDependencies:
- supports-color
@@ -15696,7 +15733,7 @@ snapshots:
gaxios: 6.7.1
gcp-metadata: 6.1.1
gtoken: 7.1.0
- jws: 4.0.0
+ jws: 4.0.1
transitivePeerDependencies:
- encoding
- supports-color
@@ -15709,8 +15746,6 @@ snapshots:
graceful-fs@4.2.11: {}
- graphemer@1.4.0: {}
-
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.2
@@ -15721,7 +15756,7 @@ snapshots:
gtoken@7.1.0:
dependencies:
gaxios: 6.7.1
- jws: 4.0.0
+ jws: 4.0.1
transitivePeerDependencies:
- encoding
- supports-color
@@ -15729,7 +15764,7 @@ snapshots:
gtoken@8.0.0:
dependencies:
gaxios: 7.1.3
- jws: 4.0.0
+ jws: 4.0.1
transitivePeerDependencies:
- supports-color
@@ -15818,7 +15853,7 @@ snapshots:
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.0
hast-util-from-parse5: 8.0.3
- hast-util-to-parse5: 8.0.0
+ hast-util-to-parse5: 8.0.1
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.1
parse5: 7.3.0
@@ -15868,12 +15903,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- hast-util-to-parse5@8.0.0:
+ hast-util-to-parse5@8.0.1:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
@@ -15903,6 +15938,8 @@ snapshots:
highlight.js@11.11.1: {}
+ hono@4.11.1: {}
+
hosted-git-info@4.1.0:
dependencies:
lru-cache: 6.0.0
@@ -15974,7 +16011,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- i18next@25.7.1(typescript@5.8.3):
+ i18next@25.7.3(typescript@5.8.3):
dependencies:
'@babel/runtime': 7.28.4
optionalDependencies:
@@ -15984,7 +16021,7 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- iconv-lite@0.7.0:
+ iconv-lite@0.7.1:
dependencies:
safer-buffer: 2.1.2
@@ -16320,7 +16357,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -16366,7 +16403,7 @@ snapshots:
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.22
+ nwsapi: 2.2.23
parse5: 7.3.0
rrweb-cssom: 0.8.0
saxes: 6.0.0
@@ -16398,6 +16435,8 @@ snapshots:
json-schema-traverse@1.0.0: {}
+ json-schema-typed@8.0.2: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json-stringify-safe@5.0.1: {}
@@ -16412,9 +16451,9 @@ snapshots:
jsonschema@1.5.0: {}
- jsonwebtoken@9.0.2:
+ jsonwebtoken@9.0.3:
dependencies:
- jws: 3.2.2
+ jws: 4.0.1
lodash.includes: 4.3.0
lodash.isboolean: 3.0.3
lodash.isinteger: 4.0.4
@@ -16439,31 +16478,20 @@ snapshots:
readable-stream: 2.3.8
setimmediate: 1.0.5
- jwa@1.4.2:
- dependencies:
- buffer-equal-constant-time: 1.0.1
- ecdsa-sig-formatter: 1.0.11
- safe-buffer: 5.2.1
-
jwa@2.0.1:
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
safe-buffer: 5.2.1
- jws@3.2.2:
- dependencies:
- jwa: 1.4.2
- safe-buffer: 5.2.1
-
- jws@4.0.0:
+ jws@4.0.1:
dependencies:
jwa: 2.0.1
safe-buffer: 5.2.1
jwt-decode@4.0.0: {}
- katex@0.16.25:
+ katex@0.16.27:
dependencies:
commander: 8.3.0
@@ -16485,22 +16513,22 @@ snapshots:
kind-of@6.0.3: {}
- knip@5.71.0(@types/node@24.10.1)(typescript@5.8.3):
+ knip@5.76.3(@types/node@24.10.4)(typescript@5.8.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
- '@types/node': 24.10.1
+ '@types/node': 24.10.4
fast-glob: 3.3.3
formatly: 0.3.0
jiti: 2.6.1
js-yaml: 4.1.1
minimist: 1.2.8
- oxc-resolver: 11.14.2
+ oxc-resolver: 11.16.0
picocolors: 1.1.1
picomatch: 4.0.3
- smol-toml: 1.5.2
+ smol-toml: 1.6.0
strip-json-comments: 5.0.3
typescript: 5.8.3
- zod: 4.1.13
+ zod: 4.2.1
knuth-shuffle-seeded@1.0.6:
dependencies:
@@ -16632,6 +16660,8 @@ snapshots:
lodash-es@4.17.21: {}
+ lodash-es@4.17.22: {}
+
lodash.debounce@4.0.8: {}
lodash.defaults@4.2.0: {}
@@ -17001,10 +17031,10 @@ snapshots:
d3-sankey: 0.12.3
dagre-d3-es: 7.0.13
dayjs: 1.11.19
- dompurify: 3.3.0
- katex: 0.16.25
+ dompurify: 3.3.1
+ katex: 0.16.27
khroma: 2.1.0
- lodash-es: 4.17.21
+ lodash-es: 4.17.22
marked: 16.4.2
roughjs: 4.6.6
stylis: 4.3.6
@@ -17092,7 +17122,7 @@ snapshots:
dependencies:
'@types/katex': 0.16.7
devlop: 1.1.0
- katex: 0.16.25
+ katex: 0.16.27
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
@@ -17365,26 +17395,26 @@ snapshots:
netmask@2.0.2: {}
- next-sitemap@4.2.3(next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ next-sitemap@4.2.3(next@15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
'@corex/deepmerge': 4.0.43
'@next/env': 13.5.11
fast-glob: 3.3.3
minimist: 1.2.8
- next: 15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- next@15.2.8(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@15.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 15.2.8
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001759
+ caniuse-lite: 1.0.30001761
postcss: 8.4.31
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -17398,7 +17428,6 @@ snapshots:
'@next/swc-linux-x64-musl': 15.2.5
'@next/swc-win32-arm64-msvc': 15.2.5
'@next/swc-win32-x64-msvc': 15.2.5
- '@opentelemetry/api': 1.9.0
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
@@ -17452,8 +17481,6 @@ snapshots:
normalize-path@3.0.0: {}
- normalize-range@0.1.2: {}
-
npm-normalize-package-bin@4.0.0: {}
npm-run-all2@8.0.4:
@@ -17488,7 +17515,7 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nwsapi@2.2.22: {}
+ nwsapi@2.2.23: {}
object-assign@4.1.1: {}
@@ -17520,15 +17547,15 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
- object.getownpropertydescriptors@2.1.8:
+ object.getownpropertydescriptors@2.1.9:
dependencies:
array.prototype.reduce: 1.0.8
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
gopd: 1.2.0
safe-array-concat: 1.1.3
@@ -17571,7 +17598,7 @@ snapshots:
oniguruma-to-es@4.3.4:
dependencies:
oniguruma-parser: 0.12.1
- regex: 6.0.1
+ regex: 6.1.0
regex-recursion: 6.0.2
only-allow@1.2.2:
@@ -17649,28 +17676,28 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
- oxc-resolver@11.14.2:
+ oxc-resolver@11.16.0:
optionalDependencies:
- '@oxc-resolver/binding-android-arm-eabi': 11.14.2
- '@oxc-resolver/binding-android-arm64': 11.14.2
- '@oxc-resolver/binding-darwin-arm64': 11.14.2
- '@oxc-resolver/binding-darwin-x64': 11.14.2
- '@oxc-resolver/binding-freebsd-x64': 11.14.2
- '@oxc-resolver/binding-linux-arm-gnueabihf': 11.14.2
- '@oxc-resolver/binding-linux-arm-musleabihf': 11.14.2
- '@oxc-resolver/binding-linux-arm64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-arm64-musl': 11.14.2
- '@oxc-resolver/binding-linux-ppc64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-riscv64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-riscv64-musl': 11.14.2
- '@oxc-resolver/binding-linux-s390x-gnu': 11.14.2
- '@oxc-resolver/binding-linux-x64-gnu': 11.14.2
- '@oxc-resolver/binding-linux-x64-musl': 11.14.2
- '@oxc-resolver/binding-openharmony-arm64': 11.14.2
- '@oxc-resolver/binding-wasm32-wasi': 11.14.2
- '@oxc-resolver/binding-win32-arm64-msvc': 11.14.2
- '@oxc-resolver/binding-win32-ia32-msvc': 11.14.2
- '@oxc-resolver/binding-win32-x64-msvc': 11.14.2
+ '@oxc-resolver/binding-android-arm-eabi': 11.16.0
+ '@oxc-resolver/binding-android-arm64': 11.16.0
+ '@oxc-resolver/binding-darwin-arm64': 11.16.0
+ '@oxc-resolver/binding-darwin-x64': 11.16.0
+ '@oxc-resolver/binding-freebsd-x64': 11.16.0
+ '@oxc-resolver/binding-linux-arm-gnueabihf': 11.16.0
+ '@oxc-resolver/binding-linux-arm-musleabihf': 11.16.0
+ '@oxc-resolver/binding-linux-arm64-gnu': 11.16.0
+ '@oxc-resolver/binding-linux-arm64-musl': 11.16.0
+ '@oxc-resolver/binding-linux-ppc64-gnu': 11.16.0
+ '@oxc-resolver/binding-linux-riscv64-gnu': 11.16.0
+ '@oxc-resolver/binding-linux-riscv64-musl': 11.16.0
+ '@oxc-resolver/binding-linux-s390x-gnu': 11.16.0
+ '@oxc-resolver/binding-linux-x64-gnu': 11.16.0
+ '@oxc-resolver/binding-linux-x64-musl': 11.16.0
+ '@oxc-resolver/binding-openharmony-arm64': 11.16.0
+ '@oxc-resolver/binding-wasm32-wasi': 11.16.0
+ '@oxc-resolver/binding-win32-arm64-msvc': 11.16.0
+ '@oxc-resolver/binding-win32-ia32-msvc': 11.16.0
+ '@oxc-resolver/binding-win32-x64-msvc': 11.16.0
p-filter@2.1.0:
dependencies:
@@ -17929,17 +17956,17 @@ snapshots:
postgres@3.4.7: {}
- posthog-js@1.301.0:
+ posthog-js@1.309.1:
dependencies:
- '@posthog/core': 1.7.0
+ '@posthog/core': 1.8.1
core-js: 3.47.0
fflate: 0.4.8
preact: 10.28.0
web-vitals: 4.2.4
- posthog-node@5.17.0:
+ posthog-node@5.17.4:
dependencies:
- '@posthog/core': 1.7.0
+ '@posthog/core': 1.8.1
preact@10.28.0: {}
@@ -18011,8 +18038,6 @@ snapshots:
dependencies:
xtend: 4.0.2
- property-information@6.5.0: {}
-
property-information@7.1.0: {}
proxy-addr@2.0.7:
@@ -18053,7 +18078,7 @@ snapshots:
'@puppeteer/browsers': 2.11.0
cli-progress: 3.12.0
eight-colors: 1.3.1
- puppeteer-core: 24.32.0
+ puppeteer-core: 24.34.0
transitivePeerDependencies:
- bare-abort-controller
- bare-buffer
@@ -18078,14 +18103,14 @@ snapshots:
- supports-color
- utf-8-validate
- puppeteer-core@24.32.0:
+ puppeteer-core@24.34.0:
dependencies:
'@puppeteer/browsers': 2.11.0
- chromium-bidi: 11.0.0(devtools-protocol@0.0.1534754)
+ chromium-bidi: 12.0.1(devtools-protocol@0.0.1534754)
debug: 4.4.3(supports-color@8.1.1)
devtools-protocol: 0.0.1534754
typed-query-selector: 2.12.0
- webdriver-bidi-protocol: 0.3.9
+ webdriver-bidi-protocol: 0.3.10
ws: 8.18.3
transitivePeerDependencies:
- bare-abort-controller
@@ -18123,7 +18148,7 @@ snapshots:
dependencies:
bytes: 3.1.2
http-errors: 2.0.1
- iconv-lite: 0.7.0
+ iconv-lite: 0.7.1
unpipe: 1.0.0
rc@1.2.8:
@@ -18145,15 +18170,15 @@ snapshots:
react: 18.3.1
scheduler: 0.23.2
- react-hook-form@7.68.0(react@18.3.1):
+ react-hook-form@7.69.0(react@18.3.1):
dependencies:
react: 18.3.1
- react-i18next@15.7.4(i18next@25.7.1(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3):
+ react-i18next@15.7.4(i18next@25.7.3(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3):
dependencies:
'@babel/runtime': 7.28.4
html-parse-stringify: 3.0.1
- i18next: 25.7.1(typescript@5.8.3)
+ i18next: 25.7.3(typescript@5.8.3)
react: 18.3.1
optionalDependencies:
react-dom: 18.3.1(react@18.3.1)
@@ -18220,7 +18245,7 @@ snapshots:
react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- fast-equals: 5.3.3
+ fast-equals: 5.4.0
prop-types: 15.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -18276,7 +18301,7 @@ snapshots:
ts-easing: 0.2.0
tslib: 2.8.1
- react-virtuoso@4.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-virtuoso@4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -18388,7 +18413,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -18401,7 +18426,7 @@ snapshots:
regex-utilities@2.3.0: {}
- regex@6.0.1:
+ regex@6.1.0:
dependencies:
regex-utilities: 2.3.0
@@ -18428,7 +18453,7 @@ snapshots:
'@types/katex': 0.16.7
hast-util-from-html-isomorphic: 2.0.0
hast-util-to-text: 4.0.2
- katex: 0.16.25
+ katex: 0.16.27
unist-util-visit-parents: 6.0.2
vfile: 6.0.3
@@ -18557,32 +18582,32 @@ snapshots:
robust-predicates@3.0.2: {}
- rollup@4.53.3:
+ rollup@4.54.0:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.53.3
- '@rollup/rollup-android-arm64': 4.53.3
- '@rollup/rollup-darwin-arm64': 4.53.3
- '@rollup/rollup-darwin-x64': 4.53.3
- '@rollup/rollup-freebsd-arm64': 4.53.3
- '@rollup/rollup-freebsd-x64': 4.53.3
- '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
- '@rollup/rollup-linux-arm-musleabihf': 4.53.3
- '@rollup/rollup-linux-arm64-gnu': 4.53.3
- '@rollup/rollup-linux-arm64-musl': 4.53.3
- '@rollup/rollup-linux-loong64-gnu': 4.53.3
- '@rollup/rollup-linux-ppc64-gnu': 4.53.3
- '@rollup/rollup-linux-riscv64-gnu': 4.53.3
- '@rollup/rollup-linux-riscv64-musl': 4.53.3
- '@rollup/rollup-linux-s390x-gnu': 4.53.3
- '@rollup/rollup-linux-x64-gnu': 4.53.3
- '@rollup/rollup-linux-x64-musl': 4.53.3
- '@rollup/rollup-openharmony-arm64': 4.53.3
- '@rollup/rollup-win32-arm64-msvc': 4.53.3
- '@rollup/rollup-win32-ia32-msvc': 4.53.3
- '@rollup/rollup-win32-x64-gnu': 4.53.3
- '@rollup/rollup-win32-x64-msvc': 4.53.3
+ '@rollup/rollup-android-arm-eabi': 4.54.0
+ '@rollup/rollup-android-arm64': 4.54.0
+ '@rollup/rollup-darwin-arm64': 4.54.0
+ '@rollup/rollup-darwin-x64': 4.54.0
+ '@rollup/rollup-freebsd-arm64': 4.54.0
+ '@rollup/rollup-freebsd-x64': 4.54.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.54.0
+ '@rollup/rollup-linux-arm64-gnu': 4.54.0
+ '@rollup/rollup-linux-arm64-musl': 4.54.0
+ '@rollup/rollup-linux-loong64-gnu': 4.54.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.54.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.54.0
+ '@rollup/rollup-linux-riscv64-musl': 4.54.0
+ '@rollup/rollup-linux-s390x-gnu': 4.54.0
+ '@rollup/rollup-linux-x64-gnu': 4.54.0
+ '@rollup/rollup-linux-x64-musl': 4.54.0
+ '@rollup/rollup-openharmony-arm64': 4.54.0
+ '@rollup/rollup-win32-arm64-msvc': 4.54.0
+ '@rollup/rollup-win32-ia32-msvc': 4.54.0
+ '@rollup/rollup-win32-x64-gnu': 4.54.0
+ '@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3
roughjs@4.6.6:
@@ -18698,7 +18723,7 @@ snapshots:
semver@7.7.3: {}
- send@1.2.0:
+ send@1.2.1:
dependencies:
debug: 4.4.3(supports-color@8.1.1)
encodeurl: 2.0.0
@@ -18722,12 +18747,12 @@ snapshots:
dependencies:
randombytes: 2.1.0
- serve-static@2.2.0:
+ serve-static@2.2.1:
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
- send: 1.2.0
+ send: 1.2.1
transitivePeerDependencies:
- supports-color
@@ -18807,14 +18832,14 @@ snapshots:
shell-quote@1.8.3: {}
- shiki@3.19.0:
+ shiki@3.20.0:
dependencies:
- '@shikijs/core': 3.19.0
- '@shikijs/engine-javascript': 3.19.0
- '@shikijs/engine-oniguruma': 3.19.0
- '@shikijs/langs': 3.19.0
- '@shikijs/themes': 3.19.0
- '@shikijs/types': 3.19.0
+ '@shikijs/core': 3.20.0
+ '@shikijs/engine-javascript': 3.20.0
+ '@shikijs/engine-oniguruma': 3.20.0
+ '@shikijs/langs': 3.20.0
+ '@shikijs/themes': 3.20.0
+ '@shikijs/types': 3.20.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -18892,7 +18917,7 @@ snapshots:
smart-buffer@4.2.0: {}
- smol-toml@1.5.2: {}
+ smol-toml@1.6.0: {}
socket.io-client@4.8.1:
dependencies:
@@ -19049,7 +19074,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -19063,7 +19088,7 @@ snapshots:
string.prototype.repeat@1.0.0:
dependencies:
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
string.prototype.trim@1.2.10:
dependencies:
@@ -19071,7 +19096,7 @@ snapshots:
call-bound: 1.0.4
define-data-property: 1.1.4
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
@@ -19138,7 +19163,7 @@ snapshots:
dependencies:
js-tokens: 9.0.1
- strnum@2.1.1: {}
+ strnum@2.1.2: {}
strong-type@0.1.6: {}
@@ -19227,15 +19252,15 @@ snapshots:
tailwind-merge@3.4.0: {}
- tailwindcss-animate@1.0.7(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2)):
+ tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
- tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.2)
+ tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2)
- tailwindcss-animate@1.0.7(tailwindcss@4.1.17):
+ tailwindcss-animate@1.0.7(tailwindcss@4.1.18):
dependencies:
- tailwindcss: 4.1.17
+ tailwindcss: 4.1.18
- tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.2):
+ tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -19263,7 +19288,7 @@ snapshots:
- tsx
- yaml
- tailwindcss@4.1.17: {}
+ tailwindcss@4.1.18: {}
tapable@2.3.0: {}
@@ -19412,18 +19437,18 @@ snapshots:
tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.8.3)(yaml@2.8.2):
dependencies:
- bundle-require: 5.1.0(esbuild@0.27.1)
+ bundle-require: 5.1.0(esbuild@0.27.2)
cac: 6.7.14
chokidar: 4.0.3
consola: 3.4.2
debug: 4.4.3(supports-color@8.1.1)
- esbuild: 0.27.1
+ esbuild: 0.27.2
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2)
resolve-from: 5.0.0
- rollup: 4.53.3
+ rollup: 4.54.0
source-map: 0.7.6
sucrase: 3.35.1
tinyexec: 0.3.2
@@ -19440,7 +19465,7 @@ snapshots:
tsx@4.21.0:
dependencies:
- esbuild: 0.27.1
+ esbuild: 0.27.2
get-tsconfig: 4.13.0
optionalDependencies:
fsevents: 2.3.3
@@ -19452,32 +19477,32 @@ snapshots:
tunnel@0.0.6: {}
- turbo-darwin-64@2.6.2:
+ turbo-darwin-64@2.7.1:
optional: true
- turbo-darwin-arm64@2.6.2:
+ turbo-darwin-arm64@2.7.1:
optional: true
- turbo-linux-64@2.6.2:
+ turbo-linux-64@2.7.1:
optional: true
- turbo-linux-arm64@2.6.2:
+ turbo-linux-arm64@2.7.1:
optional: true
- turbo-windows-64@2.6.2:
+ turbo-windows-64@2.7.1:
optional: true
- turbo-windows-arm64@2.6.2:
+ turbo-windows-arm64@2.7.1:
optional: true
- turbo@2.6.2:
+ turbo@2.7.1:
optionalDependencies:
- turbo-darwin-64: 2.6.2
- turbo-darwin-arm64: 2.6.2
- turbo-linux-64: 2.6.2
- turbo-linux-arm64: 2.6.2
- turbo-windows-64: 2.6.2
- turbo-windows-arm64: 2.6.2
+ turbo-darwin-64: 2.7.1
+ turbo-darwin-arm64: 2.7.1
+ turbo-linux-64: 2.7.1
+ turbo-linux-arm64: 2.7.1
+ turbo-windows-64: 2.7.1
+ turbo-windows-arm64: 2.7.1
turndown@7.2.2:
dependencies:
@@ -19536,13 +19561,13 @@ snapshots:
tunnel: 0.0.6
underscore: 1.13.7
- typescript-eslint@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3):
+ typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.8.3)
- '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)
- eslint: 9.39.1(jiti@2.6.1)
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -19689,7 +19714,7 @@ snapshots:
readable-stream: 2.3.8
setimmediate: 1.0.5
- update-browserslist-db@1.2.1(browserslist@4.28.1):
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
browserslist: 4.28.1
escalade: 3.2.0
@@ -19747,9 +19772,9 @@ snapshots:
util.promisify@1.0.1:
dependencies:
define-properties: 1.2.1
- es-abstract: 1.24.0
+ es-abstract: 1.24.1
has-symbols: 1.1.0
- object.getownpropertydescriptors: 2.1.8
+ object.getownpropertydescriptors: 2.1.9
uuid@11.1.0: {}
@@ -19818,13 +19843,13 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
- vite-node@3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vite-node@3.2.4(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
cac: 6.7.14
debug: 4.4.3(supports-color@8.1.1)
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -19839,13 +19864,13 @@ snapshots:
- tsx
- yaml
- vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vite-node@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
cac: 6.7.14
debug: 4.4.3(supports-color@8.1.1)
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -19860,43 +19885,43 @@ snapshots:
- tsx
- yaml
- vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
- esbuild: 0.27.1
+ esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.53.3
+ rollup: 4.54.0
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.30.2
tsx: 4.21.0
yaml: 2.8.2
- vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vite@6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
- esbuild: 0.27.1
+ esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.53.3
+ rollup: 4.54.0
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.4
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.30.2
tsx: 4.21.0
yaml: 2.8.2
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.27)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/mocker': 3.2.4(vite@6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -19904,7 +19929,7 @@ snapshots:
'@vitest/utils': 3.2.4
chai: 5.3.3
debug: 4.4.3(supports-color@8.1.1)
- expect-type: 1.2.2
+ expect-type: 1.3.0
magic-string: 0.30.21
pathe: 2.0.3
picomatch: 4.0.3
@@ -19914,12 +19939,12 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 6.3.6(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
- vite-node: 3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite-node: 3.2.4(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 20.19.25
+ '@types/node': 20.19.27
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 26.1.0
transitivePeerDependencies:
@@ -19936,11 +19961,11 @@ snapshots:
- tsx
- yaml
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/mocker': 3.2.4(vite@6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -19948,7 +19973,7 @@ snapshots:
'@vitest/utils': 3.2.4
chai: 5.3.3
debug: 4.4.3(supports-color@8.1.1)
- expect-type: 1.2.2
+ expect-type: 1.3.0
magic-string: 0.30.21
pathe: 2.0.3
picomatch: 4.0.3
@@ -19958,12 +19983,12 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
- vite-node: 3.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 6.3.6(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
+ vite-node: 3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 24.10.1
+ '@types/node': 24.10.4
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 26.1.0
transitivePeerDependencies:
@@ -20024,7 +20049,7 @@ snapshots:
web-vitals@4.2.4: {}
- webdriver-bidi-protocol@0.3.9: {}
+ webdriver-bidi-protocol@0.3.10: {}
webidl-conversions@3.0.1: {}
@@ -20271,6 +20296,6 @@ snapshots:
zod@3.25.76: {}
- zod@4.1.13: {}
+ zod@4.2.1: {}
zwitch@2.0.4: {}
diff --git a/src/api/providers/__tests__/openrouter.spec.ts b/src/api/providers/__tests__/openrouter.spec.ts
index e90afad85f..45ec7e6d88 100644
--- a/src/api/providers/__tests__/openrouter.spec.ts
+++ b/src/api/providers/__tests__/openrouter.spec.ts
@@ -40,12 +40,14 @@ import { Package } from "../../../shared/package"
vitest.mock("openai")
vitest.mock("delay", () => ({ default: vitest.fn(() => Promise.resolve()) }))
-vitest.mock("os", () => ({
+vitest.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vitest.fn(() => "/tmp"),
homedir: vitest.fn(() => "/home/user"),
}))
-vitest.mock("path", () => ({
+vitest.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vitest.fn((...paths) => paths.join("/")),
sep: "/",
}))
diff --git a/src/api/providers/lite-llm.ts b/src/api/providers/lite-llm.ts
index 83588e3cc2..88a6a74921 100644
--- a/src/api/providers/lite-llm.ts
+++ b/src/api/providers/lite-llm.ts
@@ -133,7 +133,6 @@ export class LiteLLMHandler extends RouterProvider implements SingleCompletionHa
},
...(useNativeTools && { tools: this.convertToolsForOpenAI(metadata.tools) }),
...(useNativeTools && metadata.tool_choice && { tool_choice: metadata.tool_choice }),
- ...(useNativeTools && { parallel_tool_calls: metadata?.parallelToolCalls ?? false }),
}
// GPT-5 models require max_completion_tokens instead of the deprecated max_tokens parameter
diff --git a/src/api/providers/zgsm.ts b/src/api/providers/zgsm.ts
index 9350c1b385..2c5343b500 100644
--- a/src/api/providers/zgsm.ts
+++ b/src/api/providers/zgsm.ts
@@ -178,7 +178,7 @@ export class ZgsmAiHandler extends BaseProvider implements SingleCompletionHandl
let selectedLLM: string | undefined = this.options.zgsmModelId
let selectReason: string | undefined
try {
- this.logger.info(`[RequestID]:`, requestId)
+ this.logger.info(`[RequestID ${modelId}]:`, requestId)
if (metadata?.onRequestHeadersReady && typeof metadata.onRequestHeadersReady === "function") {
metadata.onRequestHeadersReady(_headers)
@@ -193,7 +193,7 @@ export class ZgsmAiHandler extends BaseProvider implements SingleCompletionHandl
}),
)
.withResponse()
- this.logger.info(`[ResponseID]:`, response.headers.get("x-request-id"))
+ this.logger.info(`[ResponseID ${modelId}]:`, response.headers.get("x-request-id"))
if (isAuto) {
selectedLLM = response.headers.get("x-select-llm") || ""
selectReason = response.headers.get("x-select-reason") || ""
diff --git a/src/core/assistant-message/NativeToolCallParser.ts b/src/core/assistant-message/NativeToolCallParser.ts
index d41a7e9ad0..6b45e3a6f5 100644
--- a/src/core/assistant-message/NativeToolCallParser.ts
+++ b/src/core/assistant-message/NativeToolCallParser.ts
@@ -1,14 +1,17 @@
+import { parseJSON } from "partial-json"
+
import { type ToolName, toolNames, type FileEntry } from "@roo-code/types"
import { fixBrowserLaunchAction } from "../../utils/fixbrowserLaunchAction"
+import { customToolRegistry } from "@roo-code/core"
+
import {
type ToolUse,
type McpToolUse,
type ToolParamName,
- toolParamNames,
type NativeToolArgs,
+ toolParamNames,
} from "../../shared/tools"
import { resolveToolAlias } from "../prompts/tools/filter-tools-for-mode"
-import { parseJSON } from "partial-json"
import type {
ApiStreamToolCallStartChunk,
ApiStreamToolCallDeltaChunk,
@@ -574,6 +577,7 @@ export class NativeToolCallParser {
}): ToolUse | McpToolUse | null {
// Check if this is a dynamic MCP tool (mcp--serverName--toolName)
const mcpPrefix = MCP_TOOL_PREFIX + MCP_TOOL_SEPARATOR
+
if (typeof toolCall.name === "string" && toolCall.name.startsWith(mcpPrefix)) {
return this.parseDynamicMcpTool(toolCall)
}
@@ -581,8 +585,8 @@ export class NativeToolCallParser {
// Resolve tool alias to canonical name
const resolvedName = resolveToolAlias(toolCall.name as string) as TName
- // Validate tool name (after alias resolution)
- if (!toolNames.includes(resolvedName as ToolName)) {
+ // Validate tool name (after alias resolution).
+ if (!toolNames.includes(resolvedName as ToolName) && !customToolRegistry.has(resolvedName)) {
console.error(`Invalid tool name: ${toolCall.name} (resolved: ${resolvedName})`)
console.error(`Valid tool names:`, toolNames)
return null
@@ -590,7 +594,7 @@ export class NativeToolCallParser {
try {
// Parse the arguments JSON string
- const args = JSON.parse(toolCall.arguments)
+ const args = toolCall.arguments === "" ? {} : JSON.parse(toolCall.arguments)
// Build legacy params object for backward compatibility with XML protocol and UI.
// Native execution path uses nativeArgs instead, which has proper typing.
@@ -605,7 +609,7 @@ export class NativeToolCallParser {
}
// Validate parameter name
- if (!toolParamNames.includes(key as ToolParamName)) {
+ if (!toolParamNames.includes(key as ToolParamName) && !customToolRegistry.has(resolvedName)) {
console.warn(`Unknown parameter '${key}' for tool '${resolvedName}'`)
console.warn(`Valid param names:`, toolParamNames)
continue
@@ -817,6 +821,12 @@ export class NativeToolCallParser {
break
default:
+ if (customToolRegistry.has(resolvedName)) {
+ nativeArgs = args as NativeArgsFor
+ } else {
+ console.error(`Unhandled tool: ${resolvedName}`)
+ }
+
break
}
diff --git a/src/core/assistant-message/presentAssistantMessage.ts b/src/core/assistant-message/presentAssistantMessage.ts
index 1a0cf79b5f..8a9d847ba4 100644
--- a/src/core/assistant-message/presentAssistantMessage.ts
+++ b/src/core/assistant-message/presentAssistantMessage.ts
@@ -5,6 +5,7 @@ import { Anthropic } from "@anthropic-ai/sdk"
import type { ToolName, ClineAsk, ToolProgressStatus } from "@roo-code/types"
import { ConsecutiveMistakeError } from "@roo-code/types"
import { TelemetryService } from "@roo-code/telemetry"
+import { customToolRegistry } from "@roo-code/core"
import { t } from "../../i18n"
@@ -1102,9 +1103,8 @@ export async function presentAssistantMessage(cline: Task) {
})
break
default: {
- // Handle unknown/invalid tool names
+ // Handle unknown/invalid tool names OR custom tools
// This is critical for native protocol where every tool_use MUST have a tool_result
- // Note: This case should rarely be reached since validateToolUse now checks for unknown tools
// CRITICAL: Don't process partial blocks for unknown tools - just let them stream in.
// If we try to show errors for partial blocks, we'd show the error on every streaming chunk,
@@ -1113,6 +1113,45 @@ export async function presentAssistantMessage(cline: Task) {
break
}
+ const customTool = stateExperiments?.customTools ? customToolRegistry.get(block.name) : undefined
+
+ if (customTool) {
+ try {
+ let customToolArgs
+
+ if (customTool.parameters) {
+ try {
+ customToolArgs = customTool.parameters.parse(block.nativeArgs || block.params || {})
+ } catch (parseParamsError) {
+ const message = `Custom tool "${block.name}" argument validation failed: ${parseParamsError.message}`
+ console.error(message)
+ cline.consecutiveMistakeCount++
+ await cline.say("error", message)
+ pushToolResult(formatResponse.toolError(message, toolProtocol))
+ break
+ }
+ }
+
+ const result = await customTool.execute(customToolArgs, {
+ mode: mode ?? defaultModeSlug,
+ task: cline,
+ })
+
+ console.log(
+ `${customTool.name}.execute(): ${JSON.stringify(customToolArgs)} -> ${JSON.stringify(result)}`,
+ )
+
+ pushToolResult(result)
+ cline.consecutiveMistakeCount = 0
+ } catch (executionError: any) {
+ cline.consecutiveMistakeCount++
+ await handleError(`executing custom tool "${block.name}"`, executionError)
+ }
+
+ break
+ }
+
+ // Not a custom tool - handle as unknown tool error
const errorMessage = `Unknown tool "${block.name}". This tool does not exist. Please use one of the available tools.`
cline.consecutiveMistakeCount++
cline.recordToolError(block.name as ToolName, errorMessage)
diff --git a/src/core/config/__tests__/importExport.spec.ts b/src/core/config/__tests__/importExport.spec.ts
index 19ab8b83cb..06ad993fe1 100644
--- a/src/core/config/__tests__/importExport.spec.ts
+++ b/src/core/config/__tests__/importExport.spec.ts
@@ -92,9 +92,11 @@ vi.mock("fs/promises", () => ({
},
}))
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
default: {
homedir: vi.fn(() => "/mock/home"),
+ tmpdir: vi.fn(() => "/tmp"),
},
homedir: vi.fn(() => "/mock/home"),
tmpdir: vi.fn(() => "/tmp"),
diff --git a/src/core/prompts/__tests__/add-custom-instructions.spec.ts b/src/core/prompts/__tests__/add-custom-instructions.spec.ts
index 6d1986d693..7cdeb5c90e 100644
--- a/src/core/prompts/__tests__/add-custom-instructions.spec.ts
+++ b/src/core/prompts/__tests__/add-custom-instructions.spec.ts
@@ -1,6 +1,7 @@
// npx vitest core/prompts/__tests__/add-custom-instructions.spec.ts
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
default: {
homedir: () => "/home/user",
platform: () => "linux",
diff --git a/src/core/prompts/__tests__/system-prompt.spec.ts b/src/core/prompts/__tests__/system-prompt.spec.ts
index f836132e7d..999f7b992c 100644
--- a/src/core/prompts/__tests__/system-prompt.spec.ts
+++ b/src/core/prompts/__tests__/system-prompt.spec.ts
@@ -1,6 +1,7 @@
// npx vitest core/prompts/__tests__/system-prompt.spec.ts
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
default: {
homedir: () => "/home/user",
platform: () => "linux",
diff --git a/src/core/prompts/sections/__tests__/custom-instructions-global.spec.ts b/src/core/prompts/sections/__tests__/custom-instructions-global.spec.ts
index 7e13096a9d..52098ffc30 100644
--- a/src/core/prompts/sections/__tests__/custom-instructions-global.spec.ts
+++ b/src/core/prompts/sections/__tests__/custom-instructions-global.spec.ts
@@ -12,7 +12,8 @@ const { mockHomedir, mockStat, mockReadFile, mockReaddir, mockGetRooDirectoriesF
}))
// Mock os module
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
default: {
homedir: mockHomedir,
},
diff --git a/src/core/prompts/system.ts b/src/core/prompts/system.ts
index 377dfae5ae..4c71d8e96b 100644
--- a/src/core/prompts/system.ts
+++ b/src/core/prompts/system.ts
@@ -1,9 +1,15 @@
import * as vscode from "vscode"
import * as os from "os"
-import type { ModeConfig, PromptComponent, CustomModePrompts, TodoItem } from "@roo-code/types"
-
-import type { SystemPromptSettings } from "./types"
+import {
+ type ModeConfig,
+ type PromptComponent,
+ type CustomModePrompts,
+ type TodoItem,
+ getEffectiveProtocol,
+ isNativeProtocol,
+} from "@roo-code/types"
+import { customToolRegistry, formatXml } from "@roo-code/core"
import { Mode, modes, defaultModeSlug, getModeBySlug, getGroupName, getModeSelection } from "../../shared/modes"
import { DiffStrategy } from "../../shared/tools"
@@ -15,8 +21,8 @@ import { CodeIndexManager } from "../../services/code-index/manager"
import { PromptVariables, loadSystemPromptFile } from "./sections/custom-system-prompt"
+import type { SystemPromptSettings } from "./types"
import { getToolDescriptionsForMode } from "./tools"
-import { getEffectiveProtocol, isNativeProtocol } from "@roo-code/types"
import {
getRulesSection,
getSystemInfoSection,
@@ -126,7 +132,7 @@ async function generatePrompt(data: {
])
// Build tools catalog section only for XML protocol
- const toolsCatalog = isNativeProtocol(effectiveProtocol)
+ const builtInToolsCatalog = isNativeProtocol(effectiveProtocol)
? ""
: `\n\n${getToolDescriptionsForMode(
mode,
@@ -144,6 +150,18 @@ async function generatePrompt(data: {
modelId,
)}`
+ let customToolsSection = ""
+
+ if (experiments?.customTools && !isNativeProtocol(effectiveProtocol)) {
+ const customTools = customToolRegistry.getAllSerialized()
+
+ if (customTools.length > 0) {
+ customToolsSection = `\n\n${formatXml(customTools)}`
+ }
+ }
+
+ const toolsCatalog = builtInToolsCatalog + customToolsSection
+
const basePrompt = `${roleDefinition}
${markdownFormattingSection()}
diff --git a/src/core/task/build-tools.ts b/src/core/task/build-tools.ts
index 575b31580e..8eea4ace82 100644
--- a/src/core/task/build-tools.ts
+++ b/src/core/task/build-tools.ts
@@ -1,6 +1,13 @@
+import path from "path"
+
import type OpenAI from "openai"
+
import type { ProviderSettings, ModeConfig, ModelInfo } from "@roo-code/types"
+import { customToolRegistry, formatNative } from "@roo-code/core"
+
import type { ClineProvider } from "../webview/ClineProvider"
+import { getRooDirectoriesForCwd } from "../../services/roo-config/index.js"
+
import { getNativeTools, getMcpServerTools } from "../prompts/tools/native-tools"
import { filterNativeToolsForMode, filterMcpToolsForMode } from "../prompts/tools/filter-tools-for-mode"
@@ -40,11 +47,11 @@ export async function buildNativeToolsArray(options: BuildToolsOptions): Promise
const mcpHub = provider.getMcpHub()
- // Get CodeIndexManager for feature checking
+ // Get CodeIndexManager for feature checking.
const { CodeIndexManager } = await import("../../services/code-index/manager")
const codeIndexManager = CodeIndexManager.getInstance(provider.context, cwd)
- // Build settings object for tool filtering
+ // Build settings object for tool filtering.
const filterSettings = {
todoListEnabled: apiConfiguration?.todoListEnabled ?? true,
browserToolEnabled: browserToolEnabled ?? true,
@@ -52,13 +59,13 @@ export async function buildNativeToolsArray(options: BuildToolsOptions): Promise
diffEnabled,
}
- // Determine if partial reads are enabled based on maxReadFileLine setting
+ // Determine if partial reads are enabled based on maxReadFileLine setting.
const partialReadsEnabled = maxReadFileLine !== -1
- // Build native tools with dynamic read_file tool based on partialReadsEnabled
+ // Build native tools with dynamic read_file tool based on partialReadsEnabled.
const nativeTools = getNativeTools(partialReadsEnabled)
- // Filter native tools based on mode restrictions
+ // Filter native tools based on mode restrictions.
const filteredNativeTools = filterNativeToolsForMode(
nativeTools,
mode,
@@ -69,9 +76,22 @@ export async function buildNativeToolsArray(options: BuildToolsOptions): Promise
mcpHub,
)
- // Filter MCP tools based on mode restrictions
+ // Filter MCP tools based on mode restrictions.
const mcpTools = getMcpServerTools(mcpHub)
const filteredMcpTools = filterMcpToolsForMode(mcpTools, mode, customModes, experiments)
- return [...filteredNativeTools, ...filteredMcpTools]
+ // Add custom tools if they are available and the experiment is enabled.
+ let nativeCustomTools: OpenAI.Chat.ChatCompletionFunctionTool[] = []
+
+ if (experiments?.customTools) {
+ const toolDirs = getRooDirectoriesForCwd(cwd).map((dir) => path.join(dir, "tools"))
+ await customToolRegistry.loadFromDirectoriesIfStale(toolDirs)
+ const customTools = customToolRegistry.getAllSerialized()
+
+ if (customTools.length > 0) {
+ nativeCustomTools = customTools.map(formatNative)
+ }
+ }
+
+ return [...filteredNativeTools, ...filteredMcpTools, ...nativeCustomTools]
}
diff --git a/src/core/tools/__tests__/attemptCompletionTool.spec.ts b/src/core/tools/__tests__/attemptCompletionTool.spec.ts
index 64c66b416a..4aafa4c959 100644
--- a/src/core/tools/__tests__/attemptCompletionTool.spec.ts
+++ b/src/core/tools/__tests__/attemptCompletionTool.spec.ts
@@ -60,13 +60,15 @@ vi.mock("vscode", async (importOriginal) => ({
}))
// Mock os module
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vi.fn(() => "/tmp"),
homedir: vi.fn(() => "/home/user"),
}))
// Mock path module
-vi.mock("path", () => ({
+vi.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vi.fn((...args: string[]) => args.join("/")),
sep: "/",
}))
diff --git a/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts b/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts
index e3f7727842..faa3079d98 100644
--- a/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts
+++ b/src/core/tools/__tests__/executeCommandTimeout.integration.spec.ts
@@ -56,11 +56,13 @@ vi.mock("vscode", async (importOriginal) => ({
}))
vitest.mock("fs/promises")
-vitest.mock("os", () => ({
+vitest.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vitest.fn(() => "/tmp"),
homedir: vitest.fn(() => "/home/user"),
}))
-vitest.mock("path", () => ({
+vitest.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vitest.fn((...args: string[]) => args.join("/")),
sep: "/",
}))
diff --git a/src/core/tools/__tests__/executeCommandTool.spec.ts b/src/core/tools/__tests__/executeCommandTool.spec.ts
index f2bcd02b04..651baebc8e 100644
--- a/src/core/tools/__tests__/executeCommandTool.spec.ts
+++ b/src/core/tools/__tests__/executeCommandTool.spec.ts
@@ -13,12 +13,14 @@ vitest.mock("execa", () => ({
execa: vitest.fn(),
}))
-vitest.mock("os", () => ({
+vitest.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vitest.fn(() => "/tmp"),
homedir: vitest.fn(() => "/home/user"),
}))
-vitest.mock("path", () => ({
+vitest.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vitest.fn((...paths) => paths.join("/")),
sep: "/",
isAbsolute: vitest.fn((path: string) => path.startsWith("/")),
diff --git a/src/core/tools/validateToolUse.ts b/src/core/tools/validateToolUse.ts
index d057033741..751d164fd2 100644
--- a/src/core/tools/validateToolUse.ts
+++ b/src/core/tools/validateToolUse.ts
@@ -1,5 +1,6 @@
import type { ToolName, ModeConfig, ExperimentId, GroupOptions, GroupEntry } from "@roo-code/types"
import { toolNames as validToolNames } from "@roo-code/types"
+import { customToolRegistry } from "@roo-code/core"
import { type Mode, FileRestrictionError, getModeBySlug, getGroupName } from "../../shared/modes"
import { EXPERIMENT_IDS } from "../../shared/experiments"
@@ -10,12 +11,16 @@ import { TOOL_GROUPS, ALWAYS_AVAILABLE_TOOLS } from "../../shared/tools"
* Note: This does NOT check if the tool is allowed for a specific mode,
* only that the tool actually exists.
*/
-export function isValidToolName(toolName: string): toolName is ToolName {
+export function isValidToolName(toolName: string, experiments?: Record): toolName is ToolName {
// Check if it's a valid static tool
if ((validToolNames as readonly string[]).includes(toolName)) {
return true
}
+ if (experiments?.customTools && customToolRegistry.has(toolName)) {
+ return true
+ }
+
// Check if it's a dynamic MCP tool (mcp_serverName_toolName format).
if (toolName.startsWith("mcp_")) {
return true
@@ -35,7 +40,7 @@ export function validateToolUse(
): void {
// First, check if the tool name is actually a valid/known tool
// This catches completely invalid tool names like "edit_file" that don't exist
- if (!isValidToolName(toolName)) {
+ if (!isValidToolName(toolName, experiments)) {
throw new Error(
`Unknown tool "${toolName}". This tool does not exist. Please use one of the available tools: ${validToolNames.join(", ")}.`,
)
@@ -87,6 +92,12 @@ export function isToolAllowedForMode(
return true
}
+ // For now, allow all custom tools in any mode.
+ // As a follow-up we should expand the custom tool definition to include mode restrictions.
+ if (experiments?.customTools && customToolRegistry.has(tool)) {
+ return true
+ }
+
// Check if this is a dynamic MCP tool (mcp_serverName_toolName)
// These should be allowed if the mcp group is allowed for the mode
const isDynamicMcpTool = tool.startsWith("mcp_")
diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts
index fd0001ca79..64bdac2e29 100644
--- a/src/core/webview/webviewMessageHandler.ts
+++ b/src/core/webview/webviewMessageHandler.ts
@@ -2,6 +2,7 @@ import { safeWriteJson } from "../../utils/safeWriteJson"
import * as path from "path"
import * as os from "os"
import * as fs from "fs/promises"
+import { getRooDirectoriesForCwd } from "../../services/roo-config/index.js"
import pWaitFor from "p-wait-for"
import * as vscode from "vscode"
import dedent from "dedent"
@@ -17,6 +18,7 @@ import {
RooCodeSettings,
ExperimentId,
} from "@roo-code/types"
+import { customToolRegistry } from "@roo-code/core"
import { CloudService } from "@roo-code/cloud"
import { TelemetryService } from "@roo-code/telemetry"
@@ -1855,6 +1857,25 @@ export const webviewMessageHandler = async (
}
break
}
+ case "refreshCustomTools": {
+ try {
+ const toolDirs = getRooDirectoriesForCwd(getCurrentCwd()).map((dir) => path.join(dir, "tools"))
+ await customToolRegistry.loadFromDirectories(toolDirs)
+
+ await provider.postMessageToWebview({
+ type: "customToolsResult",
+ tools: customToolRegistry.getAllSerialized(),
+ })
+ } catch (error) {
+ await provider.postMessageToWebview({
+ type: "customToolsResult",
+ tools: [],
+ error: error instanceof Error ? error.message : String(error),
+ })
+ }
+
+ break
+ }
case "saveApiConfiguration":
if (message.text && message.apiConfiguration) {
try {
diff --git a/src/esbuild.mjs b/src/esbuild.mjs
index 3264ea4866..4bad112751 100644
--- a/src/esbuild.mjs
+++ b/src/esbuild.mjs
@@ -16,7 +16,7 @@ async function main() {
const production = process.argv.includes("--production")
const watch = process.argv.includes("--watch")
const minify = production
- const sourcemap = true // Always generate source maps for error handling
+ const sourcemap = !production // Always generate source maps for error handling.
/**
* @type {import('esbuild').BuildOptions}
@@ -109,7 +109,7 @@ async function main() {
plugins,
entryPoints: ["extension.ts"],
outfile: "dist/extension.js",
- external: ["vscode"],
+ external: ["vscode", "esbuild"],
}
/**
diff --git a/src/extension.ts b/src/extension.ts
index cb633eef20..3f128ab5b0 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -16,6 +16,7 @@ try {
// import type { CloudUserInfo, AuthState } from "@roo-code/types"
// import { CloudService, BridgeOrchestrator } from "@roo-code/cloud"
import { TelemetryService, PostHogTelemetryClient } from "@roo-code/telemetry"
+import { customToolRegistry } from "@roo-code/core"
import "./utils/path" // Necessary to have access to String.prototype.toPosix.
import { createOutputChannelLogger, createDualLogger } from "./utils/outputChannelLogger"
@@ -74,6 +75,10 @@ export async function activate(context: vscode.ExtensionContext) {
outputChannel = createLogger(Package.outputChannel).channel
context.subscriptions.push(outputChannel)
outputChannel.appendLine(`${Package.name} extension activated - ${JSON.stringify(Package)}`)
+
+ // Set extension path for custom tool registry to find bundled esbuild
+ customToolRegistry.setExtensionPath(context.extensionPath)
+
// Migrate old settings to new
await migrateSettings(context, outputChannel)
if (isJetbrainsPlatform()) {
diff --git a/src/integrations/diagnostics/__tests__/diagnostics.spec.ts b/src/integrations/diagnostics/__tests__/diagnostics.spec.ts
index 24116ad990..c20f4a20fa 100644
--- a/src/integrations/diagnostics/__tests__/diagnostics.spec.ts
+++ b/src/integrations/diagnostics/__tests__/diagnostics.spec.ts
@@ -3,7 +3,8 @@ import * as vscode from "vscode"
import { diagnosticsToProblemsString } from "../index"
// Mock path module
-vitest.mock("path", () => ({
+vitest.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
relative: vitest.fn((cwd, fullPath) => {
let relativePath = ""
// Handle the specific case already present
diff --git a/src/integrations/misc/read-lines.ts b/src/integrations/misc/read-lines.ts
index da16df05a2..85ff60ac70 100644
--- a/src/integrations/misc/read-lines.ts
+++ b/src/integrations/misc/read-lines.ts
@@ -8,9 +8,9 @@
*/
import { createReadStream } from "fs"
import { open } from "fs/promises"
-import * as iconv from "iconv-lite"
+import iconv from "iconv-lite"
import { detectEncoding } from "../../utils/encoding"
-
+// iconv.default.decodeStream
const outOfRangeError = (filepath: string, n: number) => {
return new RangeError(`Line with index ${n} does not exist in '${filepath}'. Note that line indexing is zero-based`)
}
diff --git a/src/package.json b/src/package.json
index 90d878a96d..191ce92068 100644
--- a/src/package.json
+++ b/src/package.json
@@ -832,6 +832,7 @@
"@modelcontextprotocol/sdk": "^1.13.3",
"@qdrant/js-client-rest": "^1.14.0",
"@roo-code/cloud": "workspace:^",
+ "@roo-code/core": "workspace:^",
"@roo-code/ipc": "workspace:^",
"@roo-code/telemetry": "workspace:^",
"@roo-code/types": "workspace:^",
@@ -936,7 +937,7 @@
"@types/vscode": "^1.84.0",
"@vscode/test-electron": "^2.5.2",
"@vscode/vsce": "3.3.2",
- "esbuild": "^0.25.0",
+ "esbuild-wasm": "^0.25.0",
"execa": "^9.5.2",
"glob": "^11.1.0",
"mkdirp": "^3.0.1",
diff --git a/src/services/code-index/processors/__tests__/file-watcher.spec.ts b/src/services/code-index/processors/__tests__/file-watcher.spec.ts
index d6bff65e81..e77bdee08e 100644
--- a/src/services/code-index/processors/__tests__/file-watcher.spec.ts
+++ b/src/services/code-index/processors/__tests__/file-watcher.spec.ts
@@ -31,13 +31,15 @@ vi.mock("../../../glob/ignore-utils", () => ({
}))
// Mock os
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vi.fn(() => "/tmp"),
homedir: vi.fn(() => "/home/user"),
}))
// Mock path
-vi.mock("path", () => ({
+vi.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vi.fn((...paths) => paths.join("/")),
sep: "/",
}))
diff --git a/src/services/code-index/processors/__tests__/scanner.spec.ts b/src/services/code-index/processors/__tests__/scanner.spec.ts
index c8156d633b..e0c04082c1 100644
--- a/src/services/code-index/processors/__tests__/scanner.spec.ts
+++ b/src/services/code-index/processors/__tests__/scanner.spec.ts
@@ -96,7 +96,8 @@ vi.mock("vscode", async (importOriginal) => ({
vi.mock("../../../../core/ignore/RooIgnoreController")
vi.mock("ignore")
// Mock os
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vi.fn(() => "/tmp"),
homedir: vi.fn(() => "/home/user"),
}))
diff --git a/src/services/code-index/processors/scanner.ts b/src/services/code-index/processors/scanner.ts
index 26fde20343..7daa12c52f 100644
--- a/src/services/code-index/processors/scanner.ts
+++ b/src/services/code-index/processors/scanner.ts
@@ -3,7 +3,7 @@ import { Ignore } from "ignore"
import { RooIgnoreController } from "../../../core/ignore/RooIgnoreController"
import { stat } from "fs/promises"
import * as path from "path"
-import * as iconv from "iconv-lite"
+import iconv from "iconv-lite"
import { detectEncoding } from "../../../utils/encoding"
import { generateNormalizedAbsolutePath, generateRelativeFilePath } from "../shared/get-relative-path"
import { getWorkspacePathForContext } from "../../../utils/path"
diff --git a/src/services/marketplace/__tests__/MarketplaceManager.spec.ts b/src/services/marketplace/__tests__/MarketplaceManager.spec.ts
index 87a65de696..47fdae6e37 100644
--- a/src/services/marketplace/__tests__/MarketplaceManager.spec.ts
+++ b/src/services/marketplace/__tests__/MarketplaceManager.spec.ts
@@ -109,13 +109,15 @@ vi.mock("fs/promises", () => ({
}))
// Mock os
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
tmpdir: vi.fn(() => "/tmp"),
homedir: vi.fn(() => "/home/user"),
}))
// Mock path
-vi.mock("path", () => ({
+vi.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
join: vi.fn((...paths) => paths.join("/")),
sep: "/",
}))
diff --git a/src/services/mdm/__tests__/MdmService.spec.ts b/src/services/mdm/__tests__/MdmService.spec.ts
index c2cad24a14..cd14238613 100644
--- a/src/services/mdm/__tests__/MdmService.spec.ts
+++ b/src/services/mdm/__tests__/MdmService.spec.ts
@@ -6,7 +6,8 @@ vi.mock("fs", () => ({
readFileSync: vi.fn(),
}))
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
platform: vi.fn(),
}))
diff --git a/src/services/roo-config/__tests__/index.spec.ts b/src/services/roo-config/__tests__/index.spec.ts
index fe3e40697e..90b911a665 100644
--- a/src/services/roo-config/__tests__/index.spec.ts
+++ b/src/services/roo-config/__tests__/index.spec.ts
@@ -16,7 +16,8 @@ vi.mock("fs/promises", () => ({
}))
// Mock os module
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
homedir: mockHomedir,
}))
diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts
index ebd58a599b..4d3c1757df 100644
--- a/src/shared/ExtensionMessage.ts
+++ b/src/shared/ExtensionMessage.ts
@@ -16,6 +16,7 @@ import type {
ShareVisibility,
QueuedMessage,
IZgsmModelResponseData,
+ SerializedCustomToolDefinition,
} from "@roo-code/types"
import { GitCommit } from "../utils/git"
@@ -151,6 +152,7 @@ export interface ExtensionMessage {
| "browserSessionUpdate"
| "browserSessionNavigate"
| "claudeCodeRateLimits"
+ | "customToolsResult"
text?: string
payload?: any // Add a generic payload for now, can refine later
// Checkpoint warning message
@@ -248,6 +250,7 @@ export interface ExtensionMessage {
browserSessionMessages?: ClineMessage[] // For browser session panel updates
isBrowserSessionActive?: boolean // For browser session panel updates
stepIndex?: number // For browserSessionNavigate: the target step index to display
+ tools?: SerializedCustomToolDefinition[] // For customToolsResult
}
export type ExtensionState = Pick<
diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts
index da2afad74a..04d6046645 100644
--- a/src/shared/WebviewMessage.ts
+++ b/src/shared/WebviewMessage.ts
@@ -205,6 +205,7 @@ export interface WebviewMessage {
| "openDebugUiHistory"
| "downloadErrorDiagnostics"
| "requestClaudeCodeRateLimits"
+ | "refreshCustomTools"
text?: string
editedMessageContent?: string
tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud" | "zgsm-account" | "codeReview"
diff --git a/src/shared/__tests__/experiments.spec.ts b/src/shared/__tests__/experiments.spec.ts
index aa2c9e6a30..3ffb998d32 100644
--- a/src/shared/__tests__/experiments.spec.ts
+++ b/src/shared/__tests__/experiments.spec.ts
@@ -35,6 +35,7 @@ describe("experiments", () => {
alwaysIncludeFileDetails: false,
runSlashCommand: false,
multipleNativeToolCalls: false,
+ customTools: false,
}
expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(false)
})
@@ -50,6 +51,7 @@ describe("experiments", () => {
imageGeneration: false,
runSlashCommand: false,
multipleNativeToolCalls: false,
+ customTools: false,
}
expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(true)
})
@@ -65,6 +67,7 @@ describe("experiments", () => {
imageGeneration: false,
runSlashCommand: false,
multipleNativeToolCalls: false,
+ customTools: false,
}
expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(false)
})
diff --git a/src/shared/experiments.ts b/src/shared/experiments.ts
index e236e62075..4761d5c57e 100644
--- a/src/shared/experiments.ts
+++ b/src/shared/experiments.ts
@@ -12,6 +12,7 @@ export const EXPERIMENT_IDS = {
IMAGE_GENERATION: "imageGeneration",
RUN_SLASH_COMMAND: "runSlashCommand",
MULTIPLE_NATIVE_TOOL_CALLS: "multipleNativeToolCalls",
+ CUSTOM_TOOLS: "customTools",
} as const satisfies Record
// type _AssertExperimentIds = AssertEqual>>
@@ -32,6 +33,7 @@ export const experimentConfigsMap: Record = {
IMAGE_GENERATION: { enabled: false },
RUN_SLASH_COMMAND: { enabled: false },
MULTIPLE_NATIVE_TOOL_CALLS: { enabled: false },
+ CUSTOM_TOOLS: { enabled: false },
}
export const experimentDefault = Object.fromEntries(
diff --git a/src/utils/__tests__/autoImportSettings.spec.ts b/src/utils/__tests__/autoImportSettings.spec.ts
index 715ee674b5..3a8d44a623 100644
--- a/src/utils/__tests__/autoImportSettings.spec.ts
+++ b/src/utils/__tests__/autoImportSettings.spec.ts
@@ -55,17 +55,37 @@ vi.mock("fs/promises", () => ({
readFile: vi.fn(),
}))
-vi.mock("path", () => ({
- join: vi.fn((...args: string[]) => args.join("/")),
- isAbsolute: vi.fn((p: string) => p.startsWith("/")),
- basename: vi.fn((p: string) => p.split("/").pop() || ""),
- sep: "/",
-}))
+vi.mock("path", async (importOriginal) => {
+ const actual = await importOriginal()
+ return {
+ ...actual,
+ default: {
+ ...actual,
+ join: vi.fn((...args: string[]) => args.join("/")),
+ isAbsolute: vi.fn((p: string) => p.startsWith("/")),
+ basename: vi.fn((p: string) => p.split("/").pop() || ""),
+ sep: "/",
+ },
+ join: vi.fn((...args: string[]) => args.join("/")),
+ isAbsolute: vi.fn((p: string) => p.startsWith("/")),
+ basename: vi.fn((p: string) => p.split("/").pop() || ""),
+ sep: "/",
+ }
+})
-vi.mock("os", () => ({
- homedir: vi.fn(() => "/home/user"),
- tmpdir: vi.fn(() => "/tmp"),
-}))
+vi.mock("os", async (importOriginal) => {
+ const actual = await importOriginal()
+ return {
+ ...actual,
+ default: {
+ ...actual,
+ homedir: vi.fn(() => "/home/user"),
+ tmpdir: vi.fn(() => "/tmp"),
+ },
+ homedir: vi.fn(() => "/home/user"),
+ tmpdir: vi.fn(() => "/tmp"),
+ }
+})
vi.mock("../fs", () => ({
fileExistsAtPath: vi.fn(),
diff --git a/src/utils/__tests__/encoding.spec.ts b/src/utils/__tests__/encoding.spec.ts
index 732aac141d..3e8484c483 100644
--- a/src/utils/__tests__/encoding.spec.ts
+++ b/src/utils/__tests__/encoding.spec.ts
@@ -1,6 +1,6 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"
import * as jschardet from "jschardet"
-import * as iconv from "iconv-lite"
+import iconv from "iconv-lite"
import { isBinaryFile } from "isbinaryfile"
import fs from "fs/promises"
import path from "path"
@@ -32,11 +32,21 @@ vi.mock("jschardet", () => ({
detect: vi.fn(),
}))
-vi.mock("iconv-lite", () => ({
- encodingExists: vi.fn(),
- decode: vi.fn(),
- encode: vi.fn(),
-}))
+vi.mock("iconv-lite", async (importOriginal) => {
+ const original = (await importOriginal()) as any
+ return {
+ ...original,
+ default: {
+ ...original.default,
+ encodingExists: vi.fn(),
+ decode: vi.fn(),
+ encode: vi.fn(),
+ },
+ encodingExists: vi.fn(),
+ decode: vi.fn(),
+ encode: vi.fn(),
+ }
+})
vi.mock("isbinaryfile", () => ({
isBinaryFile: vi.fn(),
@@ -50,7 +60,8 @@ vi.mock("fs/promises", () => ({
},
}))
-vi.mock("path", () => ({
+vi.mock("path", async (importOriginal) => ({
+ ...(await importOriginal()),
default: {
extname: vi.fn(),
},
diff --git a/src/utils/__tests__/resolveToolProtocol.spec.ts b/src/utils/__tests__/resolveToolProtocol.spec.ts
index 5fbc534438..929d2fa323 100644
--- a/src/utils/__tests__/resolveToolProtocol.spec.ts
+++ b/src/utils/__tests__/resolveToolProtocol.spec.ts
@@ -152,7 +152,7 @@ describe("resolveToolProtocol", () => {
supportsNativeTools: true,
}
const result = resolveToolProtocol(settings, modelInfo)
- expect(result).toBe(TOOL_PROTOCOL.NATIVE) // Native fallback
+ expect(result).toBe(TOOL_PROTOCOL.XML) // XML fallback
})
})
@@ -206,7 +206,7 @@ describe("resolveToolProtocol", () => {
}
const result = resolveToolProtocol(settings, modelInfo)
- expect(result).toBe(TOOL_PROTOCOL.NATIVE) // Native fallback
+ expect(result).toBe(TOOL_PROTOCOL.XML) // XML fallback
})
it("should skip to XML fallback when model info is unavailable", () => {
@@ -313,7 +313,7 @@ describe("resolveToolProtocol", () => {
supportsNativeTools: true,
}
const result = resolveToolProtocol(settings, modelInfo)
- expect(result).toBe(TOOL_PROTOCOL.NATIVE) // Native fallback
+ expect(result).toBe(TOOL_PROTOCOL.XML) // XML fallback
})
it("should use XML for Claude models with Anthropic provider", () => {
diff --git a/src/utils/__tests__/shell.spec.ts b/src/utils/__tests__/shell.spec.ts
index ea56cc95ed..ea427d8a11 100644
--- a/src/utils/__tests__/shell.spec.ts
+++ b/src/utils/__tests__/shell.spec.ts
@@ -25,7 +25,8 @@ vi.mock("vscode", () => ({
}))
// Mock the os module
-vi.mock("os", () => ({
+vi.mock("os", async (importOriginal) => ({
+ ...(await importOriginal()),
userInfo: vi.fn(() => ({ shell: null })),
}))
diff --git a/src/utils/encoding.ts b/src/utils/encoding.ts
index 7ac1510e32..8922ce1e54 100644
--- a/src/utils/encoding.ts
+++ b/src/utils/encoding.ts
@@ -1,5 +1,5 @@
import * as jschardet from "jschardet"
-import * as iconv from "iconv-lite"
+import iconv from "iconv-lite"
import { isBinaryFile } from "isbinaryfile"
import fs from "fs/promises"
import path from "path"
diff --git a/src/utils/resolveToolProtocol.ts b/src/utils/resolveToolProtocol.ts
index 2f8ddea0c3..757c2fb96e 100644
--- a/src/utils/resolveToolProtocol.ts
+++ b/src/utils/resolveToolProtocol.ts
@@ -54,7 +54,7 @@ export function resolveToolProtocol(
}
// 3. Native Fallback
- return TOOL_PROTOCOL.NATIVE
+ return TOOL_PROTOCOL.XML
}
/**
diff --git a/webview-ui/src/components/settings/CustomToolsSettings.tsx b/webview-ui/src/components/settings/CustomToolsSettings.tsx
new file mode 100644
index 0000000000..03bff7fc8a
--- /dev/null
+++ b/webview-ui/src/components/settings/CustomToolsSettings.tsx
@@ -0,0 +1,183 @@
+import { useState, useEffect, useCallback, useMemo } from "react"
+import { useEvent } from "react-use"
+import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
+import { RefreshCw, Loader2, FileCode } from "lucide-react"
+
+import type { SerializedCustomToolDefinition } from "@roo-code/types"
+
+import { useAppTranslation } from "@/i18n/TranslationContext"
+
+import { vscode } from "@/utils/vscode"
+
+import { Button } from "@/components/ui"
+
+interface ToolParameter {
+ name: string
+ type: string
+ description?: string
+ required: boolean
+}
+
+interface ProcessedTool {
+ name: string
+ description: string
+ parameters: ToolParameter[]
+ source?: string
+}
+
+interface CustomToolsSettingsProps {
+ enabled: boolean
+ onChange: (enabled: boolean) => void
+}
+
+export const CustomToolsSettings = ({ enabled, onChange }: CustomToolsSettingsProps) => {
+ const { t } = useAppTranslation()
+ const [tools, setTools] = useState([])
+ const [isRefreshing, setIsRefreshing] = useState(false)
+ const [refreshError, setRefreshError] = useState(null)
+
+ useEffect(() => {
+ if (enabled) {
+ vscode.postMessage({ type: "refreshCustomTools" })
+ } else {
+ setTools([])
+ }
+ }, [enabled])
+
+ useEvent("message", (event: MessageEvent) => {
+ const message = event.data
+
+ if (message.type === "customToolsResult") {
+ setTools(message.tools || [])
+ setIsRefreshing(false)
+ setRefreshError(message.error ?? null)
+ }
+ })
+
+ const onRefresh = useCallback(() => {
+ setIsRefreshing(true)
+ setRefreshError(null)
+ vscode.postMessage({ type: "refreshCustomTools" })
+ }, [])
+
+ const processedTools = useMemo(
+ () =>
+ tools.map((tool) => {
+ const params = tool.parameters
+ const properties = (params?.properties ?? {}) as Record
+ const required = (params?.required as string[] | undefined) ?? []
+
+ return {
+ name: tool.name,
+ description: tool.description,
+ source: tool.source,
+ parameters: Object.entries(properties).map(([name, def]) => ({
+ name,
+ type: def.type ?? "any",
+ description: def.description,
+ required: required.includes(name),
+ })),
+ }
+ }),
+ [tools],
+ )
+
+ return (
+
+
+
+ onChange(e.target.checked)}>
+ {t("settings:experimental.CUSTOM_TOOLS.name")}
+
+
+
+ {t("settings:experimental.CUSTOM_TOOLS.description")}
+
+
+
+ {enabled && (
+
+
+
+ {t("settings:experimental.CUSTOM_TOOLS.toolsHeader")}
+
+
+
+ {isRefreshing ? (
+
+ ) : (
+
+ )}
+ {isRefreshing
+ ? t("settings:experimental.CUSTOM_TOOLS.refreshing")
+ : t("settings:experimental.CUSTOM_TOOLS.refreshButton")}
+
+
+
+
+ {refreshError && (
+
+ {t("settings:experimental.CUSTOM_TOOLS.refreshError")}: {refreshError}
+
+ )}
+
+ {processedTools.length === 0 ? (
+
+ {t("settings:experimental.CUSTOM_TOOLS.noTools")}
+
+ ) : (
+ processedTools.map((tool) => (
+
+
+
{tool.name}
+ {tool.source && (
+
+
+
+ {tool.source}
+
+
+ )}
+
+
{tool.description}
+ {tool.parameters.length > 0 && (
+
+
+ {t("settings:experimental.CUSTOM_TOOLS.toolParameters")}:
+
+
+ {tool.parameters.map((param) => (
+
+
+ {param.name}
+
+
+ ({param.type})
+
+ {param.required && (
+
+ required
+
+ )}
+ {param.description && (
+
+ — {param.description}
+
+ )}
+
+ ))}
+
+
+ )}
+
+ ))
+ )}
+
+ )}
+
+ )
+}
diff --git a/webview-ui/src/components/settings/ExperimentalSettings.tsx b/webview-ui/src/components/settings/ExperimentalSettings.tsx
index 30cdfb1b16..87654c6263 100644
--- a/webview-ui/src/components/settings/ExperimentalSettings.tsx
+++ b/webview-ui/src/components/settings/ExperimentalSettings.tsx
@@ -13,6 +13,7 @@ import { SectionHeader } from "./SectionHeader"
import { Section } from "./Section"
import { ExperimentalFeature } from "./ExperimentalFeature"
import { ImageGenerationSettings } from "./ImageGenerationSettings"
+import { CustomToolsSettings } from "./CustomToolsSettings"
type ExperimentalSettingsProps = HTMLAttributes & {
experiments: Experiments
@@ -130,6 +131,15 @@ export const ExperimentalSettings = ({
)
}
+ if (config[0] === "CUSTOM_TOOLS") {
+ return (
+ setExperimentEnabled(EXPERIMENT_IDS.CUSTOM_TOOLS, enabled)}
+ />
+ )
+ }
return (
{
runSlashCommand: false,
chatSearch: false,
multipleNativeToolCalls: false,
+ customTools: false,
} as Record,
checkpointTimeout: DEFAULT_CHECKPOINT_TIMEOUT_SECONDS + 5,
}
@@ -255,6 +256,7 @@ describe("mergeExtensionState", () => {
runSlashCommand: false,
chatSearch: false,
multipleNativeToolCalls: false,
+ customTools: false,
})
})
})
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index 8890194534..f540292d24 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -852,6 +852,17 @@
"MULTIPLE_NATIVE_TOOL_CALLS": {
"name": "Parallel tool calls",
"description": "When enabled, the native protocol can execute multiple tools in a single assistant message turn."
+ },
+ "CUSTOM_TOOLS": {
+ "name": "Enable custom tools",
+ "description": "When enabled, CoStrict can load and use custom TypeScript/JavaScript tools from your project's .roo/tools directory or ~/.roo/tools for global tools. Note: these tools will automatically be auto-approved.",
+ "toolsHeader": "Available Custom Tools",
+ "noTools": "No custom tools loaded. Add .ts or .js files to your project's .roo/tools directory or ~/.roo/tools for global tools.",
+ "refreshButton": "Refresh",
+ "refreshing": "Refreshing...",
+ "refreshSuccess": "Tools refreshed successfully",
+ "refreshError": "Failed to refresh tools",
+ "toolParameters": "Parameters"
}
},
"promptCaching": {
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index c90b0a21ae..04d511910e 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -844,6 +844,17 @@
"MULTIPLE_NATIVE_TOOL_CALLS": {
"name": "并行工具调用",
"description": "启用后,原生协议可在单个助手消息轮次中执行多个工具。"
+ },
+ "CUSTOM_TOOLS": {
+ "name": "启用自定义工具",
+ "description": "启用后,CoStrict 可从项目中的 .roo/tools 目录或全局工具目录 ~/.roo/tools 加载并使用自定义 TypeScript/JavaScript 工具。注意:这些工具将自动获批。",
+ "toolsHeader": "可用自定义工具",
+ "noTools": "未加载自定义工具。请向项目的 .roo/tools 目录或全局工具目录 ~/.roo/tools 添加 .ts 或 .js 文件。",
+ "refreshButton": "刷新",
+ "refreshing": "正在刷新...",
+ "refreshSuccess": "工具刷新成功",
+ "refreshError": "工具刷新失败",
+ "toolParameters": "参数"
}
},
"promptCaching": {
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index f8ddc4ec08..cddbfa60e4 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -844,6 +844,17 @@
"MULTIPLE_NATIVE_TOOL_CALLS": {
"name": "並行工具呼叫",
"description": "啟用後,原生協定可在單個助理訊息輪次中執行多個工具。"
+ },
+ "CUSTOM_TOOLS": {
+ "name": "啟用自訂工具",
+ "description": "啟用後,CoStrict 可以從專案中的 .roo/tools 目錄或全域工具目錄 ~/.roo/tools 載入並使用自訂 TypeScript/JavaScript 工具。注意:這些工具將自動獲得核准。",
+ "toolsHeader": "可用自訂工具",
+ "noTools": "未載入自訂工具。請向專案的 .roo/tools 目錄或全域工具目錄 ~/.roo/tools 新增 .ts 或 .js 檔案。",
+ "refreshButton": "重新整理",
+ "refreshing": "正在重新整理...",
+ "refreshSuccess": "工具重新整理成功",
+ "refreshError": "工具重新整理失敗",
+ "toolParameters": "參數"
}
},
"promptCaching": {