diff --git a/license b/license index 4d210b95..02cc2553 100644 --- a/license +++ b/license @@ -2,6 +2,12 @@ Agentic is open source licensed under the [GNU AGPL 3.0 license](https://choosea Some of Agentic's public packages are licensed under the more permissive [MIT license](https://choosealicense.com/licenses/mit/). If a directory includes an MIT license file, that overrides the default. If it doesn't, then that code and all code under that subdirectory defaults to Agentic's general [GNU AGPL 3.0 license](https://choosealicense.com/licenses/agpl-3.0/). +All Agentic packages under the `apps/`, `examples/`, `docs/`, and `packages/` folders are AGPL-3.0 licensed. + +All Agentic packages under the `stdlib/` folder are MIT licensed. + +--- + GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 diff --git a/packages/ai-sdk/src/ai-sdk.test.ts b/packages/ai-sdk/src/ai-sdk.test.ts deleted file mode 100644 index a67cfa23..00000000 --- a/packages/ai-sdk/src/ai-sdk.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { describe, expect, test } from 'vitest' - -import { createAISDKTools } from './ai-sdk' - -describe('ai-sdk', () => { - test('createAISDKTools', () => { - expect(createAISDKTools(new EchoAITool())).toHaveProperty('echo') - }) -}) diff --git a/packages/genkit/src/genkit.test.ts b/packages/genkit/src/genkit.test.ts deleted file mode 100644 index aafc779e..00000000 --- a/packages/genkit/src/genkit.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { Genkit } from 'genkit' -import { describe, expect, test } from 'vitest' - -import { createGenkitTools } from './genkit' - -describe('genkit', () => { - test('createGenkitTools', () => { - const genkit = new Genkit() - expect(createGenkitTools(genkit, new EchoAITool())).toHaveLength(1) - }) -}) diff --git a/packages/genkit/src/genkit.ts b/packages/genkit/src/genkit.ts deleted file mode 100644 index e9d3fb9e..00000000 --- a/packages/genkit/src/genkit.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Genkit } from 'genkit' -import { - type AIFunctionLike, - AIFunctionSet, - asZodOrJsonSchema, - isZodSchema -} from '@agentic/core' -import { z } from 'zod' - -/** - * Converts a set of Agentic stdlib AI functions to an array of Genkit- - * compatible tools. - */ -export function createGenkitTools( - genkit: Genkit, - ...aiFunctionLikeTools: AIFunctionLike[] -) { - const fns = new AIFunctionSet(aiFunctionLikeTools) - - return fns.map((fn) => { - const inputSchemaKey = isZodSchema(fn.inputSchema) - ? ('inputSchema' as const) - : ('inputJsonSchema' as const) - - return genkit.defineTool( - { - name: fn.spec.name, - description: fn.spec.description, - [inputSchemaKey]: asZodOrJsonSchema(fn.inputSchema), - outputSchema: z.any() - }, - fn.execute - ) - }) -} diff --git a/packages/langchain/src/langchain.test.ts b/packages/langchain/src/langchain.test.ts deleted file mode 100644 index 1cacd07d..00000000 --- a/packages/langchain/src/langchain.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { describe, expect, test } from 'vitest' - -import { createLangChainTools } from './langchain' - -describe('langchain', () => { - test('createLangChainTools', () => { - expect(createLangChainTools(new EchoAITool())).toHaveLength(1) - }) -}) diff --git a/packages/langchain/src/langchain.ts b/packages/langchain/src/langchain.ts deleted file mode 100644 index 3add090b..00000000 --- a/packages/langchain/src/langchain.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - type AIFunctionLike, - AIFunctionSet, - asZodOrJsonSchema, - stringifyForModel -} from '@agentic/core' -import { DynamicStructuredTool } from '@langchain/core/tools' - -/** - * Converts a set of Agentic stdlib AI functions to an array of LangChain- - * compatible tools. - */ -export function createLangChainTools(...aiFunctionLikeTools: AIFunctionLike[]) { - const fns = new AIFunctionSet(aiFunctionLikeTools) - - return fns.map( - (fn) => - new DynamicStructuredTool({ - name: fn.spec.name, - description: fn.spec.description, - schema: asZodOrJsonSchema(fn.inputSchema), - func: async (input) => { - const result = await Promise.resolve(fn.execute(input)) - // LangChain tools require the output to be a string - return stringifyForModel(result) - } - }) - ) -} diff --git a/packages/llamaindex/src/llamaindex.test.ts b/packages/llamaindex/src/llamaindex.test.ts deleted file mode 100644 index b8b03647..00000000 --- a/packages/llamaindex/src/llamaindex.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { describe, expect, test } from 'vitest' - -import { createLlamaIndexTools } from './llamaindex' - -describe('llamaindex', () => { - test('createLlamaIndexTools', () => { - expect(createLlamaIndexTools(new EchoAITool())).toHaveLength(1) - }) -}) diff --git a/packages/llamaindex/src/llamaindex.ts b/packages/llamaindex/src/llamaindex.ts deleted file mode 100644 index 7c85068f..00000000 --- a/packages/llamaindex/src/llamaindex.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - type AIFunctionLike, - AIFunctionSet, - asZodOrJsonSchema -} from '@agentic/core' -import { FunctionTool } from 'llamaindex' - -/** - * Converts a set of Agentic stdlib AI functions to an array of LlamaIndex- - * compatible tools. - */ -export function createLlamaIndexTools( - ...aiFunctionLikeTools: AIFunctionLike[] -) { - const fns = new AIFunctionSet(aiFunctionLikeTools) - - return fns.map((fn) => - FunctionTool.from(fn.execute, { - name: fn.spec.name, - description: fn.spec.description, - // TODO: Investigate types here - parameters: asZodOrJsonSchema(fn.inputSchema) as any - }) - ) -} diff --git a/packages/mastra/src/mastra.test.ts b/packages/mastra/src/mastra.test.ts deleted file mode 100644 index e7a9c8a8..00000000 --- a/packages/mastra/src/mastra.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { describe, expect, test } from 'vitest' - -import { createMastraTools } from './mastra' - -describe('mastra', () => { - test('createMastraTools', () => { - expect(createMastraTools(new EchoAITool())).toHaveProperty('echo') - }) -}) diff --git a/packages/mastra/src/mastra.ts b/packages/mastra/src/mastra.ts deleted file mode 100644 index 9de752dd..00000000 --- a/packages/mastra/src/mastra.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { type AIFunctionLike, AIFunctionSet, isZodSchema } from '@agentic/core' -import { createTool } from '@mastra/core/tools' - -/** - * Converts a set of Agentic stdlib AI functions to an object compatible with - * the Mastra Agent `tools` format. - */ -export function createMastraTools(...aiFunctionLikeTools: AIFunctionLike[]) { - const fns = new AIFunctionSet(aiFunctionLikeTools) - - return Object.fromEntries( - fns.map((fn) => { - if (!isZodSchema(fn.inputSchema)) { - throw new Error( - `Mastra tools only support Zod schemas: ${fn.spec.name} tool uses a custom JSON Schema, which is currently not supported.` - ) - } - - return [ - fn.spec.name, - createTool({ - id: fn.spec.name, - description: fn.spec.description, - inputSchema: fn.inputSchema, - execute: (ctx) => fn.execute(ctx.context) - }) - ] - }) - ) -} diff --git a/packages/xsai/src/xsai.test.ts b/packages/xsai/src/xsai.test.ts deleted file mode 100644 index 766e13ae..00000000 --- a/packages/xsai/src/xsai.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { EchoAITool } from '@agentic/core' -import { describe, expect, test } from 'vitest' - -import { createXSAITools } from './xsai' - -describe('xsai', () => { - test('createXSAITools', async () => { - const tools = await createXSAITools(new EchoAITool()) - expect(tools).toHaveLength(1) - expect(tools[0]!.function.name).toBe('echo') - }) -}) diff --git a/packages/xsai/src/xsai.ts b/packages/xsai/src/xsai.ts deleted file mode 100644 index ad9c489e..00000000 --- a/packages/xsai/src/xsai.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { type AIFunctionLike, AIFunctionSet, isZodSchema } from '@agentic/core' -import { tool } from '@xsai/tool' - -export type Tool = Awaited> - -/** - * Converts a set of Agentic stdlib AI functions to an object compatible with - * the [xsAI SDK's](https://github.com/moeru-ai/xsai) `tools` parameter. - */ -export function createXSAITools( - ...aiFunctionLikeTools: AIFunctionLike[] -): Promise { - const fns = new AIFunctionSet(aiFunctionLikeTools) - - return Promise.all( - fns.map((fn) => { - if (!isZodSchema(fn.inputSchema)) { - throw new Error( - `xsAI tools only support Standard schemas like Zod: ${fn.spec.name} tool uses a custom JSON Schema, which is currently not supported.` - ) - } - - return tool({ - name: fn.spec.name, - description: fn.spec.description, - parameters: fn.inputSchema, - execute: fn.execute - }) - }) - ) -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index de9119f9..2c621f70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ catalogs: specifier: ^5.0.0 version: 5.0.0 '@fisch0920/config': - specifier: ^1.1.3 + specifier: ^1.1.4 version: 1.1.4 '@fisch0920/drizzle-orm': specifier: ^0.43.7 @@ -283,8 +283,8 @@ catalogs: specifier: ^3.12.0 version: 3.12.0 knip: - specifier: ^5.61.2 - version: 5.61.2 + specifier: ^5.61.3 + version: 5.61.3 ky: specifier: ^1.8.1 version: 1.8.1 @@ -487,7 +487,7 @@ importers: version: 0.2.3(eslint@9.30.0(jiti@2.4.2)) knip: specifier: 'catalog:' - version: 5.61.2(@types/node@24.0.7)(typescript@5.8.3) + version: 5.61.3(@types/node@24.0.7)(typescript@5.8.3) lint-staged: specifier: 'catalog:' version: 16.1.2 @@ -517,7 +517,7 @@ importers: version: 5.8.3 vite-tsconfig-paths: specifier: 'catalog:' - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) + version: 5.1.4(typescript@5.8.3)(vite@7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) vitest: specifier: 'catalog:' version: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) @@ -939,7 +939,7 @@ importers: dependencies: '@agentic/core': specifier: workspace:* - version: link:../../packages/core + version: link:../../stdlib/core ky: specifier: 'catalog:' version: 1.8.1 @@ -950,19 +950,6 @@ importers: specifier: 'catalog:' version: 3.25.67 - packages/ai-sdk: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - '@agentic/platform-tool-client': - specifier: workspace:* - version: link:../tool-client - devDependencies: - ai: - specifier: 'catalog:' - version: 4.3.16(react@19.1.0)(zod@3.25.67) - packages/api-client: dependencies: '@agentic/platform-core': @@ -1042,40 +1029,6 @@ importers: specifier: 'catalog:' version: 7.7.0 - packages/core: - dependencies: - dedent: - specifier: 'catalog:' - version: 1.6.0 - delay: - specifier: 'catalog:' - version: 6.0.0 - jsonrepair: - specifier: 'catalog:' - version: 3.12.0 - ky: - specifier: 'catalog:' - version: 1.8.1 - p-throttle: - specifier: 'catalog:' - version: 6.2.0 - type-fest: - specifier: 'catalog:' - version: 4.41.0 - zod: - specifier: 'catalog:' - version: 3.25.67 - zod-to-json-schema: - specifier: 'catalog:' - version: 3.24.5(zod@3.25.67) - zod-validation-error: - specifier: 'catalog:' - version: 3.5.2(zod@3.25.67) - devDependencies: - openai-fetch: - specifier: 'catalog:' - version: 3.4.2 - packages/emails: dependencies: '@agentic/platform-core': @@ -1147,16 +1100,6 @@ importers: specifier: 'catalog:' version: 3.25.67 - packages/genkit: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - devDependencies: - genkit: - specifier: 'catalog:' - version: 1.14.0 - packages/hono: dependencies: '@agentic/platform-core': @@ -1203,48 +1146,6 @@ importers: specifier: 'catalog:' version: 7.0.3 - packages/langchain: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - devDependencies: - '@langchain/core': - specifier: 'catalog:' - version: 0.3.61 - - packages/llamaindex: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - devDependencies: - llamaindex: - specifier: 'catalog:' - version: 0.11.11(@llama-flow/core@0.4.4(@modelcontextprotocol/sdk@1.13.2)(hono@4.8.3)(next@15.3.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(p-retry@6.2.1)(rxjs@7.8.2)(zod@3.25.67))(@modelcontextprotocol/sdk@1.13.2)(hono@4.8.3)(next@15.3.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(p-retry@6.2.1)(rxjs@7.8.2)(tree-sitter@0.22.4)(web-tree-sitter@0.24.7)(zod-to-json-schema@3.24.6(zod@3.25.67))(zod@3.25.67) - - packages/mastra: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - devDependencies: - '@mastra/core': - specifier: 'catalog:' - version: 0.10.8(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67) - - packages/mcp: - dependencies: - '@agentic/core': - specifier: workspace:* - version: link:../core - '@modelcontextprotocol/sdk': - specifier: 'catalog:' - version: 1.13.2 - zod: - specifier: 'catalog:' - version: 3.25.67 - packages/openapi-utils: dependencies: '@agentic/platform-core': @@ -1347,7 +1248,7 @@ importers: dependencies: '@agentic/core': specifier: workspace:* - version: link:../core + version: link:../../stdlib/core '@agentic/platform-api-client': specifier: workspace:* version: link:../api-client @@ -1413,11 +1314,125 @@ importers: specifier: 'catalog:' version: 4.41.0 - packages/xsai: + stdlib/ai-sdk: dependencies: '@agentic/core': specifier: workspace:* version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client + devDependencies: + ai: + specifier: 'catalog:' + version: 4.3.16(react@19.1.0)(zod@3.25.67) + + stdlib/core: + dependencies: + dedent: + specifier: 'catalog:' + version: 1.6.0 + delay: + specifier: 'catalog:' + version: 6.0.0 + jsonrepair: + specifier: 'catalog:' + version: 3.12.0 + ky: + specifier: 'catalog:' + version: 1.8.1 + p-throttle: + specifier: 'catalog:' + version: 6.2.0 + type-fest: + specifier: 'catalog:' + version: 4.41.0 + zod: + specifier: 'catalog:' + version: 3.25.67 + zod-to-json-schema: + specifier: 'catalog:' + version: 3.24.5(zod@3.25.67) + zod-validation-error: + specifier: 'catalog:' + version: 3.5.2(zod@3.25.67) + devDependencies: + openai-fetch: + specifier: 'catalog:' + version: 3.4.2 + + stdlib/genkit: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client + devDependencies: + genkit: + specifier: 'catalog:' + version: 1.14.0 + + stdlib/langchain: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client + devDependencies: + '@langchain/core': + specifier: 'catalog:' + version: 0.3.61 + + stdlib/llamaindex: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client + devDependencies: + llamaindex: + specifier: 'catalog:' + version: 0.11.11(@llama-flow/core@0.4.4(@modelcontextprotocol/sdk@1.13.2)(hono@4.8.3)(next@15.3.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(p-retry@6.2.1)(rxjs@7.8.2)(zod@3.25.67))(@modelcontextprotocol/sdk@1.13.2)(hono@4.8.3)(next@15.3.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(p-retry@6.2.1)(rxjs@7.8.2)(tree-sitter@0.22.4)(web-tree-sitter@0.24.7)(zod-to-json-schema@3.24.6(zod@3.25.67))(zod@3.25.67) + + stdlib/mastra: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client + devDependencies: + '@mastra/core': + specifier: 'catalog:' + version: 0.10.8(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67) + + stdlib/mcp: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@modelcontextprotocol/sdk': + specifier: 'catalog:' + version: 1.13.2 + zod: + specifier: 'catalog:' + version: 3.25.67 + + stdlib/xsai: + dependencies: + '@agentic/core': + specifier: workspace:* + version: link:../core + '@agentic/platform-tool-client': + specifier: workspace:* + version: link:../../packages/tool-client devDependencies: '@xsai/tool': specifier: 'catalog:' @@ -2434,10 +2449,6 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.0': resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4166,68 +4177,68 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-resolver/binding-darwin-arm64@11.2.0': - resolution: {integrity: sha512-ruKLkS+Dm/YIJaUhzEB7zPI+jh3EXxu0QnNV8I7t9jf0lpD2VnltuyRbhrbJEkksklZj//xCMyFFsILGjiU2Mg==} + '@oxc-resolver/binding-darwin-arm64@11.3.0': + resolution: {integrity: sha512-iEvscsg+grOxFpEzJE9nBhfMRwtfy2gd7tAPASusFhISteqSOzTcNdQwo4L/jWE1wt9SQF1BXs/6QHJbldWRVQ==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.2.0': - resolution: {integrity: sha512-0zhgNUm5bYezdSFOg3FYhtVP83bAq7FTV/3suGQDl/43MixfQG7+bl+hlrP4mz6WlD2SUb2u9BomnJWl1uey9w==} + '@oxc-resolver/binding-darwin-x64@11.3.0': + resolution: {integrity: sha512-dalUsxrsnZ69esao4qiIL0clK5d9qaRJVr+v+Bn4yGMk5o0B8eQP5lVzv6MiW5czQJpIO648CtsIXi0RLC7r7Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.2.0': - resolution: {integrity: sha512-SHOxfCcZV1axeIGfyeD1BkdLvfQgjmPy18tO0OUXGElcdScxD6MqU5rj/AVtiuBT+51GtFfOKlwl1+BdVwhD1A==} + '@oxc-resolver/binding-freebsd-x64@11.3.0': + resolution: {integrity: sha512-g3jirS9hGMeKvSgTWujiRpSXtBcIYj0545sY0XIkG37mCP4oIh94/ykrR60JuN8YjUSfYc+7UV6We5dP8+fzJQ==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.2.0': - resolution: {integrity: sha512-mgEkYrJ+N90sgEDqEZ07zH+4I1D28WjqAhdzfW3aS2x2vynVpoY9jWfHuH8S62vZt3uATJrTKTRa8CjPWEsrdw==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.3.0': + resolution: {integrity: sha512-KO2key+SCiCJTyq8IFzl0WjonqtFPR0HLWTY8GnMENjBhY9o8P8LrNQ1rJVamRMMqFpCkOlKo4VAj2jMf6wqDQ==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.2.0': - resolution: {integrity: sha512-BhEzNLjn4HjP8+Q18D3/jeIDBxW7OgoJYIjw2CaaysnYneoTlij8hPTKxHfyqq4IGM3fFs9TLR/k338M3zkQ7g==} + '@oxc-resolver/binding-linux-arm64-gnu@11.3.0': + resolution: {integrity: sha512-nyAukSnWeA9K7Dot/52G1zvZiJAj3guW2AbiqDGv5awtEitOpBrppGsIbMli3sNU/tXOKnX5HJn43s/3ciYEgA==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-arm64-musl@11.2.0': - resolution: {integrity: sha512-yxbMYUgRmN2V8x8XoxmD/Qq6aG7YIW3ToMDILfmcfeeRRVieEJ3DOWBT0JSE+YgrOy79OyFDH/1lO8VnqLmDQQ==} + '@oxc-resolver/binding-linux-arm64-musl@11.3.0': + resolution: {integrity: sha512-Aj2GAqX6vuUmTNZjvz10d2DMdzmEdrT3Oh1ac/+WE16rsnhD8liieLVM9ss/9jfiybHq/et3TsdBusdfG2BImA==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-riscv64-gnu@11.2.0': - resolution: {integrity: sha512-QG1UfgC2N2qhW1tOnDCgB/26vn1RCshR5sYPhMeaxO1gMQ3kEKbZ3QyBXxrG1IX5qsXYj5hPDJLDYNYUjRcOpg==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.3.0': + resolution: {integrity: sha512-rkdVhNkMzwpGV94o5Q+AdUNPlhEm38r/mAQpbvIQrWO59XQAM6OpVqi7W0Y45wwSbeFAoPdOwWCEZC6USREkZw==} cpu: [riscv64] os: [linux] - '@oxc-resolver/binding-linux-s390x-gnu@11.2.0': - resolution: {integrity: sha512-uqTDsQdi6mrkSV1gvwbuT8jf/WFl6qVDVjNlx7IPSaAByrNiJfPrhTmH8b+Do58Dylz7QIRZgxQ8CHIZSyBUdg==} + '@oxc-resolver/binding-linux-s390x-gnu@11.3.0': + resolution: {integrity: sha512-NAOvR5pgPV1o7C9KwEUSmPQ+bxQOBKRXlQPRfcaCb0pZe/rhKqps/T3UCOKqVTp0dUwdCIcM11Ybs/wp6tzWbQ==} cpu: [s390x] os: [linux] - '@oxc-resolver/binding-linux-x64-gnu@11.2.0': - resolution: {integrity: sha512-GZdHXhJ7p6GaQg9MjRqLebwBf8BLvGIagccI6z5yMj4fV3LU4QuDfwSEERG+R6oQ/Su9672MBqWwncvKcKT68w==} + '@oxc-resolver/binding-linux-x64-gnu@11.3.0': + resolution: {integrity: sha512-rqfo/XwsVj/OW1LPaQiaTyOEPD+pp7CX9rIrnUDfa4DWA4GUpRSlH+9VXX/zYt3lbNaWayWvy0dTwZ59cQTUgQ==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-linux-x64-musl@11.2.0': - resolution: {integrity: sha512-YBAC3GOicYznReG2twE7oFPSeK9Z1f507z1EYWKg6HpGYRYRlJyszViu7PrhMT85r/MumDTs429zm+CNqpFWOA==} + '@oxc-resolver/binding-linux-x64-musl@11.3.0': + resolution: {integrity: sha512-td0T/dunQrv4Yq3OcwYeOorJDt/kmG1/69D0tvPeZ6HhErG/fRPWKOSpKKlg5scMKEbII7qBJO0Msdc5MzWTBw==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-wasm32-wasi@11.2.0': - resolution: {integrity: sha512-+qlIg45CPVPy+Jn3vqU1zkxA/AAv6e/2Ax/ImX8usZa8Tr2JmQn/93bmSOOOnr9fXRV9d0n4JyqYzSWxWPYDEw==} + '@oxc-resolver/binding-wasm32-wasi@11.3.0': + resolution: {integrity: sha512-bpzvfpPmjMJ6D9I2htHU8M087D/rruubcCJOG/3cjLeHtGxsucEP8i8nazigWydLsZqU3cEkPSJwUJENI2/Pyg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.2.0': - resolution: {integrity: sha512-AI4KIpS8Zf6vwfOPk0uQPSC0pQ1m5HU4hCbtrgL21JgJSlnJaeEu3/aoOBB45AXKiExBU9R+CDR7aSnW7uhc5A==} + '@oxc-resolver/binding-win32-arm64-msvc@11.3.0': + resolution: {integrity: sha512-pmwT5jVufkLWEAxEKDWKlB2hHDRNS3TAYGjzyezAMGPx9qvI3rYIikZsUozyCYhp1TlTgxBB70R9Ma2vXQ6vVw==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.2.0': - resolution: {integrity: sha512-r19cQc7HaEJ76HFsMsbiKMTIV2YqFGSof8H5hB7e5Jkb/23Y8Isv1YrSzkDaGhcw02I/COsrPo+eEmjy35eFuA==} + '@oxc-resolver/binding-win32-x64-msvc@11.3.0': + resolution: {integrity: sha512-QvgzwCpoSpDTjFC/7pGPFGZDWRr52pOfTbuWfPwTQH+Jo/iCrQmh1Q8Yg81eED7dnPjdivDlXoM0iMgBz1gDBg==} cpu: [x64] os: [win32] @@ -4807,103 +4818,103 @@ packages: resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@rollup/rollup-android-arm-eabi@4.44.0': - resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.44.0': - resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.44.0': - resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.44.0': - resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.44.0': - resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.44.0': - resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': - resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.44.0': - resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.44.0': - resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.44.0': - resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': - resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': - resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.44.0': - resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.44.0': - resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.44.0': - resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.44.0': - resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.44.0': - resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.44.0': - resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.44.0': - resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.44.0': - resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} cpu: [x64] os: [win32] @@ -5735,8 +5746,8 @@ packages: peerDependencies: react: '>= 16.8.0' - '@vitest/eslint-plugin@1.2.7': - resolution: {integrity: sha512-7WHcGZo6uXsE4SsSnpGDqKyGrd6NfOMM52WKoHSpTRZLbjMuDyHfA5P7m8yrr73tpqYjsiAdSjSerOnx8uEhpA==} + '@vitest/eslint-plugin@1.3.3': + resolution: {integrity: sha512-zOB4T5f80JXfP5DC2yQl7azRYq8PmGqYle3uxh3a0NnbKc+EaSYSpEcrVAh2r5W97pi3BVv7oRb5NdEQy0cCXA==} peerDependencies: eslint: '>= 8.57.0' typescript: '>= 5.0.0' @@ -6158,6 +6169,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -6249,6 +6265,9 @@ packages: caniuse-lite@1.0.30001723: resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==} + caniuse-lite@1.0.30001726: + resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} + cannon-es-debugger@1.0.0: resolution: {integrity: sha512-sE9lDOBAYFKlh+0w+cvWKwUhJef8HYnUSVPWPL0jD15MAuVRQKno4QYZSGxgOoJkMR3mQqxL4bxys2b3RSWH8g==} peerDependencies: @@ -6796,6 +6815,10 @@ packages: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + dotprompt@1.1.1: resolution: {integrity: sha512-xll31JxDiE7FaF030t0Dx4EMSV60Qn/pONDn6Hs5bBBeEANbtqIu6fPfaAOoSNbF1Y9TK+pj9Xnvud7G7GHpaA==} @@ -6915,6 +6938,9 @@ packages: electron-to-chromium@1.5.167: resolution: {integrity: sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==} + electron-to-chromium@1.5.177: + resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==} + email-validator@2.0.4: resolution: {integrity: sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==} engines: {node: '>4.0'} @@ -8359,8 +8385,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - knip@5.61.2: - resolution: {integrity: sha512-ZBv37zDvZj0/Xwk0e93xSjM3+5bjxgqJ0PH2GlB5tnWV0ktXtmatWLm+dLRUCT/vpO3SdGz2nNAfvVhuItUNcQ==} + knip@5.61.3: + resolution: {integrity: sha512-8iSz8i8ufIjuUwUKzEwye7ROAW0RzCze7T770bUiz0PKL+SSwbs4RS32fjMztLwcOzSsNPlXdUAeqmkdzXxJ1Q==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -9279,8 +9305,8 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-resolver@11.2.0: - resolution: {integrity: sha512-3iJYyIdDZMDoj0ZSVBrI1gUvPBMkDC4gxonBG+7uqUyK5EslG0mCwnf6qhxK8oEU7jLHjbRBNyzflPSd3uvH7Q==} + oxc-resolver@11.3.0: + resolution: {integrity: sha512-Hd7oMoyyJrZyjNxXAhawmn+JQxUY0W3yK3kmoVZGJpY09g82ijRKKkqjKIbgly6Hc4WCfeb+2dQIKe7jO8j7/Q==} p-all@5.0.0: resolution: {integrity: sha512-pofqu/1FhCVa+78xNAptCGc9V45exFz2pvBRyIvgXkNM0Rh18Py7j8pQuSjA+zpabI46v9hRjNWmL9EAFcEbpw==} @@ -9450,8 +9476,8 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} peberminta@0.9.0: @@ -9515,8 +9541,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.1.0: - resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pkg-types@2.1.1: + resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==} plur@5.1.0: resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} @@ -10016,8 +10042,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.44.0: - resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10232,8 +10258,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.3.4: - resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} + smol-toml@1.4.0: + resolution: {integrity: sha512-IMxaDA/58wBvkvX77ykQ6e9r6fjs8xbxpz8bMCyVQ/fEFWbA5uJrnaVwDuhLrrANGdd7apRyTPDBvI893Bxu9g==} engines: {node: '>= 18'} socket.io-adapter@2.5.5: @@ -11028,19 +11054,19 @@ packages: vite: optional: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.0.0: + resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -12248,7 +12274,7 @@ snapshots: '@dotenvx/dotenvx@1.45.1': dependencies: commander: 11.1.0 - dotenv: 16.5.0 + dotenv: 16.6.1 eciesjs: 0.4.15 execa: 5.1.1 fdir: 6.4.6(picomatch@4.0.2) @@ -12554,8 +12580,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.29.0': {} - '@eslint/js@9.30.0': {} '@eslint/object-schema@2.1.6': {} @@ -12574,9 +12598,9 @@ snapshots: '@fisch0920/config@1.1.4(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(prettier@3.6.2)(typescript@5.8.3)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: - '@eslint/js': 9.29.0 + '@eslint/js': 9.30.0 '@total-typescript/ts-reset': 0.6.1 - '@vitest/eslint-plugin': 1.2.7(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/eslint-plugin': 1.3.3(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) eslint: 9.30.0(jiti@2.4.2) eslint-config-prettier: 10.1.5(eslint@9.30.0(jiti@2.4.2)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2)) @@ -14786,45 +14810,45 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@oxc-resolver/binding-darwin-arm64@11.2.0': + '@oxc-resolver/binding-darwin-arm64@11.3.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.2.0': + '@oxc-resolver/binding-darwin-x64@11.3.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.2.0': + '@oxc-resolver/binding-freebsd-x64@11.3.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.2.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.3.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.2.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.3.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.2.0': + '@oxc-resolver/binding-linux-arm64-musl@11.3.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.2.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.3.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.2.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.3.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.2.0': + '@oxc-resolver/binding-linux-x64-gnu@11.3.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.2.0': + '@oxc-resolver/binding-linux-x64-musl@11.3.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.2.0': + '@oxc-resolver/binding-wasm32-wasi@11.3.0': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.2.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.3.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.2.0': + '@oxc-resolver/binding-win32-x64-msvc@11.3.0': optional: true '@paralleldrive/cuid2@2.2.2': @@ -15411,64 +15435,64 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/rollup-android-arm-eabi@4.44.0': + '@rollup/rollup-android-arm-eabi@4.44.1': optional: true - '@rollup/rollup-android-arm64@4.44.0': + '@rollup/rollup-android-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-arm64@4.44.0': + '@rollup/rollup-darwin-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-x64@4.44.0': + '@rollup/rollup-darwin-x64@4.44.1': optional: true - '@rollup/rollup-freebsd-arm64@4.44.0': + '@rollup/rollup-freebsd-arm64@4.44.1': optional: true - '@rollup/rollup-freebsd-x64@4.44.0': + '@rollup/rollup-freebsd-x64@4.44.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.44.0': + '@rollup/rollup-linux-arm-musleabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.44.0': + '@rollup/rollup-linux-arm64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.44.0': + '@rollup/rollup-linux-arm64-musl@4.44.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.44.0': + '@rollup/rollup-linux-riscv64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.44.0': + '@rollup/rollup-linux-riscv64-musl@4.44.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.44.0': + '@rollup/rollup-linux-s390x-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.44.0': + '@rollup/rollup-linux-x64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-musl@4.44.0': + '@rollup/rollup-linux-x64-musl@4.44.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.44.0': + '@rollup/rollup-win32-arm64-msvc@4.44.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.44.0': + '@rollup/rollup-win32-ia32-msvc@4.44.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.44.0': + '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true '@rtsao/scc@1.1.0': {} @@ -16541,7 +16565,7 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.1.0 - '@vitest/eslint-plugin@1.2.7(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/eslint-plugin@1.3.3(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.30.0(jiti@2.4.2) @@ -16559,13 +16583,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -17004,6 +17028,13 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) + browserslist@4.25.1: + dependencies: + caniuse-lite: 1.0.30001726 + electron-to-chromium: 1.5.177 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.1) + buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -17056,14 +17087,14 @@ snapshots: chokidar: 4.0.3 confbox: 0.2.2 defu: 6.1.4 - dotenv: 16.5.0 + dotenv: 16.6.1 exsolve: 1.0.7 giget: 2.0.0 jiti: 2.4.2 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 1.0.0 - pkg-types: 2.1.0 + pkg-types: 2.1.1 rc9: 2.1.2 cac@6.7.14: {} @@ -17109,6 +17140,8 @@ snapshots: caniuse-lite@1.0.30001723: {} + caniuse-lite@1.0.30001726: {} + cannon-es-debugger@1.0.0(cannon-es@0.20.0)(three@0.177.0)(typescript@5.8.3): dependencies: cannon-es: 0.20.0 @@ -17128,7 +17161,7 @@ snapshots: check-error: 2.1.1 deep-eql: 5.0.2 loupe: 3.1.4 - pathval: 2.0.0 + pathval: 2.0.1 chalk@4.1.2: dependencies: @@ -17348,7 +17381,7 @@ snapshots: core-js-compat@3.43.0: dependencies: - browserslist: 4.25.0 + browserslist: 4.25.1 core-js@3.43.0: {} @@ -17597,6 +17630,8 @@ snapshots: dotenv@16.5.0: {} + dotenv@16.6.1: {} + dotprompt@1.1.1: dependencies: '@types/handlebars': 4.1.0 @@ -17642,6 +17677,8 @@ snapshots: electron-to-chromium@1.5.167: {} + electron-to-chromium@1.5.177: {} + email-validator@2.0.4: {} emoji-regex@10.4.0: {} @@ -18490,7 +18527,7 @@ snapshots: dependencies: magic-string: 0.30.17 mlly: 1.7.4 - rollup: 4.44.0 + rollup: 4.44.1 flat-cache@4.0.1: dependencies: @@ -19455,7 +19492,7 @@ snapshots: kind-of@6.0.3: {} - knip@5.61.2(@types/node@24.0.7)(typescript@5.8.3): + knip@5.61.3(@types/node@24.0.7)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@types/node': 24.0.7 @@ -19464,10 +19501,10 @@ snapshots: jiti: 2.4.2 js-yaml: 4.1.0 minimist: 1.2.8 - oxc-resolver: 11.2.0 + oxc-resolver: 11.3.0 picocolors: 1.1.1 picomatch: 4.0.2 - smol-toml: 1.3.4 + smol-toml: 1.4.0 strip-json-comments: 5.0.2 typescript: 5.8.3 zod: 3.25.67 @@ -20514,7 +20551,7 @@ snapshots: citty: 0.1.6 consola: 3.4.2 pathe: 2.0.3 - pkg-types: 2.1.0 + pkg-types: 2.1.1 tinyexec: 0.3.2 object-assign@4.1.1: {} @@ -20685,21 +20722,21 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-resolver@11.2.0: + oxc-resolver@11.3.0: optionalDependencies: - '@oxc-resolver/binding-darwin-arm64': 11.2.0 - '@oxc-resolver/binding-darwin-x64': 11.2.0 - '@oxc-resolver/binding-freebsd-x64': 11.2.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.2.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.2.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.2.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.2.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.2.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.2.0 - '@oxc-resolver/binding-linux-x64-musl': 11.2.0 - '@oxc-resolver/binding-wasm32-wasi': 11.2.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.2.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.2.0 + '@oxc-resolver/binding-darwin-arm64': 11.3.0 + '@oxc-resolver/binding-darwin-x64': 11.3.0 + '@oxc-resolver/binding-freebsd-x64': 11.3.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.3.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.3.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.3.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.3.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.3.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.3.0 + '@oxc-resolver/binding-linux-x64-musl': 11.3.0 + '@oxc-resolver/binding-wasm32-wasi': 11.3.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.3.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.3.0 p-all@5.0.0: dependencies: @@ -20875,7 +20912,7 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} peberminta@0.9.0: {} @@ -20949,7 +20986,7 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - pkg-types@2.1.0: + pkg-types@2.1.1: dependencies: confbox: 0.2.2 exsolve: 1.0.7 @@ -21590,30 +21627,30 @@ snapshots: rfdc@1.4.1: {} - rollup@4.44.0: + rollup@4.44.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.44.0 - '@rollup/rollup-android-arm64': 4.44.0 - '@rollup/rollup-darwin-arm64': 4.44.0 - '@rollup/rollup-darwin-x64': 4.44.0 - '@rollup/rollup-freebsd-arm64': 4.44.0 - '@rollup/rollup-freebsd-x64': 4.44.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 - '@rollup/rollup-linux-arm-musleabihf': 4.44.0 - '@rollup/rollup-linux-arm64-gnu': 4.44.0 - '@rollup/rollup-linux-arm64-musl': 4.44.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-gnu': 4.44.0 - '@rollup/rollup-linux-riscv64-musl': 4.44.0 - '@rollup/rollup-linux-s390x-gnu': 4.44.0 - '@rollup/rollup-linux-x64-gnu': 4.44.0 - '@rollup/rollup-linux-x64-musl': 4.44.0 - '@rollup/rollup-win32-arm64-msvc': 4.44.0 - '@rollup/rollup-win32-ia32-msvc': 4.44.0 - '@rollup/rollup-win32-x64-msvc': 4.44.0 + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 router@2.2.0: @@ -21920,7 +21957,7 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.3.4: {} + smol-toml@1.4.0: {} socket.io-adapter@2.5.5: dependencies: @@ -22431,7 +22468,7 @@ snapshots: picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0) resolve-from: 5.0.0 - rollup: 4.44.0 + rollup: 4.44.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 @@ -22699,6 +22736,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.1.3(browserslist@4.25.1): + dependencies: + browserslist: 4.25.1 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js-replace@1.0.1: {} uri-js@4.4.1: @@ -22772,7 +22815,7 @@ snapshots: debug: 4.4.1(supports-color@10.0.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -22787,24 +22830,24 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)): dependencies: debug: 4.4.1(supports-color@10.0.0) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color - typescript - vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0): + vite@7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 postcss: 8.5.6 - rollup: 4.44.0 + rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.0.7 @@ -22819,7 +22862,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -22837,7 +22880,7 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.0.0(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) vite-node: 3.2.4(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.3)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 13e26cbe..fe23c53f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ packages: - packages/* + - stdlib/* - apps/* - examples/* - packages/fixtures/valid/* @@ -18,7 +19,7 @@ catalog: '@dicebear/core': ^9.2.3 '@dotenvx/dotenvx': ^1.45.1 '@edge-runtime/vm': ^5.0.0 - '@fisch0920/config': ^1.1.3 + '@fisch0920/config': ^1.1.4 '@fisch0920/drizzle-orm': ^0.43.7 '@fisch0920/drizzle-zod': ^0.7.9 '@hono/mcp': ^0.1.0 @@ -106,7 +107,7 @@ catalog: is-obj: ^3.0.0 is-relative-url: ^4.0.0 jsonrepair: ^3.12.0 - knip: ^5.61.2 + knip: ^5.61.3 ky: ^1.8.1 langchain: ^0.3.29 lint-staged: ^16.1.2 @@ -174,3 +175,5 @@ ignoredBuiltDependencies: onlyBuiltDependencies: - '@sentry/cli' + - protobufjs + - tree-sitter diff --git a/packages/ai-sdk/package.json b/stdlib/ai-sdk/package.json similarity index 96% rename from packages/ai-sdk/package.json rename to stdlib/ai-sdk/package.json index dac7592a..e78c9e84 100644 --- a/packages/ai-sdk/package.json +++ b/stdlib/ai-sdk/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/ai-sdk" + "directory": "stdlib/ai-sdk" }, "type": "module", "sideEffects": false, diff --git a/stdlib/ai-sdk/src/ai-sdk.test.ts b/stdlib/ai-sdk/src/ai-sdk.test.ts new file mode 100644 index 00000000..230efc89 --- /dev/null +++ b/stdlib/ai-sdk/src/ai-sdk.test.ts @@ -0,0 +1,14 @@ +import { EchoAITool } from '@agentic/core' +import { expect, test } from 'vitest' + +import { createAISDKTools, createAISDKToolsFromIdentifier } from './ai-sdk' + +test('createAISDKTools', () => { + expect(createAISDKTools(new EchoAITool())).toHaveProperty('echo') +}) + +test('createAISDKToolsFromIdentifier', async () => { + await expect( + createAISDKToolsFromIdentifier('@agentic/search') + ).resolves.toHaveProperty('search') +}) diff --git a/packages/ai-sdk/src/ai-sdk.ts b/stdlib/ai-sdk/src/ai-sdk.ts similarity index 62% rename from packages/ai-sdk/src/ai-sdk.ts rename to stdlib/ai-sdk/src/ai-sdk.ts index 0ac17f94..7f061c62 100644 --- a/packages/ai-sdk/src/ai-sdk.ts +++ b/stdlib/ai-sdk/src/ai-sdk.ts @@ -10,16 +10,18 @@ import { } from '@agentic/platform-tool-client' import { jsonSchema, type Tool, tool } from 'ai' +export type AISDKTools = Record< + string, + Tool & { execute: (args: any, options: any) => PromiseLike } +> + /** * Converts a set of Agentic stdlib AI functions to an object compatible with * the Vercel AI SDK's `tools` parameter. */ export function createAISDKTools( ...aiFunctionLikeTools: AIFunctionLike[] -): Record< - string, - Tool & { execute: (args: any, options: any) => PromiseLike } -> { +): AISDKTools { const fns = new AIFunctionSet(aiFunctionLikeTools) return Object.fromEntries( @@ -36,14 +38,28 @@ export function createAISDKTools( ) } +/** + * Creates a Vercel AI SDK's `tools` object from a hosted Agentic project or + * deployment identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const tools = await createAISDKToolsFromIdentifier('@agentic/search') + * ``` + */ export async function createAISDKToolsFromIdentifier( projectOrDeploymentIdentifier: string, opts: AgenticToolClientOptions = {} -) { - const toolClient = await AgenticToolClient.fromIdentifier( +): Promise { + const agenticToolClient = await AgenticToolClient.fromIdentifier( projectOrDeploymentIdentifier, opts ) - return createAISDKTools(toolClient) + return createAISDKTools(agenticToolClient) } diff --git a/packages/ai-sdk/src/index.ts b/stdlib/ai-sdk/src/index.ts similarity index 100% rename from packages/ai-sdk/src/index.ts rename to stdlib/ai-sdk/src/index.ts diff --git a/packages/ai-sdk/tsconfig.json b/stdlib/ai-sdk/tsconfig.json similarity index 100% rename from packages/ai-sdk/tsconfig.json rename to stdlib/ai-sdk/tsconfig.json diff --git a/packages/core/package.json b/stdlib/core/package.json similarity index 97% rename from packages/core/package.json rename to stdlib/core/package.json index c5a3067f..f9ff36ab 100644 --- a/packages/core/package.json +++ b/stdlib/core/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/core" + "directory": "stdlib/core" }, "type": "module", "sideEffects": false, diff --git a/packages/core/src/__snapshots__/parse-structured-output.test.ts.snap b/stdlib/core/src/__snapshots__/parse-structured-output.test.ts.snap similarity index 100% rename from packages/core/src/__snapshots__/parse-structured-output.test.ts.snap rename to stdlib/core/src/__snapshots__/parse-structured-output.test.ts.snap diff --git a/packages/core/src/__snapshots__/utils.test.ts.snap b/stdlib/core/src/__snapshots__/utils.test.ts.snap similarity index 100% rename from packages/core/src/__snapshots__/utils.test.ts.snap rename to stdlib/core/src/__snapshots__/utils.test.ts.snap diff --git a/packages/core/src/_utils.ts b/stdlib/core/src/_utils.ts similarity index 100% rename from packages/core/src/_utils.ts rename to stdlib/core/src/_utils.ts diff --git a/packages/core/src/ai-function-set.test.ts b/stdlib/core/src/ai-function-set.test.ts similarity index 100% rename from packages/core/src/ai-function-set.test.ts rename to stdlib/core/src/ai-function-set.test.ts diff --git a/packages/core/src/ai-function-set.ts b/stdlib/core/src/ai-function-set.ts similarity index 100% rename from packages/core/src/ai-function-set.ts rename to stdlib/core/src/ai-function-set.ts diff --git a/packages/core/src/assert.ts b/stdlib/core/src/assert.ts similarity index 100% rename from packages/core/src/assert.ts rename to stdlib/core/src/assert.ts diff --git a/packages/core/src/create-ai-function.test.ts b/stdlib/core/src/create-ai-function.test.ts similarity index 100% rename from packages/core/src/create-ai-function.test.ts rename to stdlib/core/src/create-ai-function.test.ts diff --git a/packages/core/src/create-ai-function.ts b/stdlib/core/src/create-ai-function.ts similarity index 100% rename from packages/core/src/create-ai-function.ts rename to stdlib/core/src/create-ai-function.ts diff --git a/packages/core/src/echo.ts b/stdlib/core/src/echo.ts similarity index 100% rename from packages/core/src/echo.ts rename to stdlib/core/src/echo.ts diff --git a/packages/core/src/errors.ts b/stdlib/core/src/errors.ts similarity index 100% rename from packages/core/src/errors.ts rename to stdlib/core/src/errors.ts diff --git a/packages/core/src/fns.ts b/stdlib/core/src/fns.ts similarity index 100% rename from packages/core/src/fns.ts rename to stdlib/core/src/fns.ts diff --git a/packages/core/src/index.ts b/stdlib/core/src/index.ts similarity index 100% rename from packages/core/src/index.ts rename to stdlib/core/src/index.ts diff --git a/packages/core/src/message.test.ts b/stdlib/core/src/message.test.ts similarity index 100% rename from packages/core/src/message.test.ts rename to stdlib/core/src/message.test.ts diff --git a/packages/core/src/message.ts b/stdlib/core/src/message.ts similarity index 100% rename from packages/core/src/message.ts rename to stdlib/core/src/message.ts diff --git a/packages/core/src/parse-structured-output.test.ts b/stdlib/core/src/parse-structured-output.test.ts similarity index 100% rename from packages/core/src/parse-structured-output.test.ts rename to stdlib/core/src/parse-structured-output.test.ts diff --git a/packages/core/src/parse-structured-output.ts b/stdlib/core/src/parse-structured-output.ts similarity index 100% rename from packages/core/src/parse-structured-output.ts rename to stdlib/core/src/parse-structured-output.ts diff --git a/packages/core/src/reset.d.ts b/stdlib/core/src/reset.d.ts similarity index 100% rename from packages/core/src/reset.d.ts rename to stdlib/core/src/reset.d.ts diff --git a/packages/core/src/schema.test.ts b/stdlib/core/src/schema.test.ts similarity index 100% rename from packages/core/src/schema.test.ts rename to stdlib/core/src/schema.test.ts diff --git a/packages/core/src/schema.ts b/stdlib/core/src/schema.ts similarity index 100% rename from packages/core/src/schema.ts rename to stdlib/core/src/schema.ts diff --git a/packages/core/src/types.ts b/stdlib/core/src/types.ts similarity index 100% rename from packages/core/src/types.ts rename to stdlib/core/src/types.ts diff --git a/packages/core/src/utils.test.ts b/stdlib/core/src/utils.test.ts similarity index 100% rename from packages/core/src/utils.test.ts rename to stdlib/core/src/utils.test.ts diff --git a/packages/core/src/utils.ts b/stdlib/core/src/utils.ts similarity index 100% rename from packages/core/src/utils.ts rename to stdlib/core/src/utils.ts diff --git a/packages/core/src/zod-to-json-schema.test.ts b/stdlib/core/src/zod-to-json-schema.test.ts similarity index 100% rename from packages/core/src/zod-to-json-schema.test.ts rename to stdlib/core/src/zod-to-json-schema.test.ts diff --git a/packages/core/src/zod-to-json-schema.ts b/stdlib/core/src/zod-to-json-schema.ts similarity index 100% rename from packages/core/src/zod-to-json-schema.ts rename to stdlib/core/src/zod-to-json-schema.ts diff --git a/packages/core/tsconfig.json b/stdlib/core/tsconfig.json similarity index 100% rename from packages/core/tsconfig.json rename to stdlib/core/tsconfig.json diff --git a/packages/genkit/package.json b/stdlib/genkit/package.json similarity index 89% rename from packages/genkit/package.json rename to stdlib/genkit/package.json index c5985f74..e1d361f1 100644 --- a/packages/genkit/package.json +++ b/stdlib/genkit/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/genkit" + "directory": "stdlib/genkit" }, "type": "module", "sideEffects": false, @@ -24,7 +24,8 @@ "test:unit": "vitest run" }, "dependencies": { - "@agentic/core": "workspace:*" + "@agentic/core": "workspace:*", + "@agentic/platform-tool-client": "workspace:*" }, "peerDependencies": { "genkit": "catalog:" diff --git a/stdlib/genkit/src/genkit.test.ts b/stdlib/genkit/src/genkit.test.ts new file mode 100644 index 00000000..e607964e --- /dev/null +++ b/stdlib/genkit/src/genkit.test.ts @@ -0,0 +1,17 @@ +import { EchoAITool } from '@agentic/core' +import { Genkit } from 'genkit' +import { expect, test } from 'vitest' + +import { createGenkitTools, createGenkitToolsFromIdentifier } from './genkit' + +test('createGenkitTools', () => { + const genkit = new Genkit() + expect(createGenkitTools(genkit, new EchoAITool())).toHaveLength(1) +}) + +test('createGenkitToolsFromIdentifier', async () => { + const genkit = new Genkit() + const tools = await createGenkitToolsFromIdentifier(genkit, '@agentic/search') + expect(tools).toHaveLength(1) + expect(tools[0]!.name).toBe('search') +}) diff --git a/stdlib/genkit/src/genkit.ts b/stdlib/genkit/src/genkit.ts new file mode 100644 index 00000000..b82a23ed --- /dev/null +++ b/stdlib/genkit/src/genkit.ts @@ -0,0 +1,68 @@ +import type { Genkit } from 'genkit' +import { + type AIFunctionLike, + AIFunctionSet, + asZodOrJsonSchema, + isZodSchema +} from '@agentic/core' +import { + AgenticToolClient, + type AgenticToolClientOptions +} from '@agentic/platform-tool-client' +import { z } from 'zod' + +export type GenkitTool = ReturnType + +/** + * Converts a set of Agentic stdlib AI functions to an array of Genkit tools. + */ +export function createGenkitTools( + genkit: Genkit, + ...aiFunctionLikeTools: AIFunctionLike[] +): GenkitTool[] { + const fns = new AIFunctionSet(aiFunctionLikeTools) + + return fns.map((fn) => { + const inputSchemaKey = isZodSchema(fn.inputSchema) + ? ('inputSchema' as const) + : ('inputJsonSchema' as const) + + return genkit.defineTool( + { + name: fn.spec.name, + description: fn.spec.description, + [inputSchemaKey]: asZodOrJsonSchema(fn.inputSchema), + outputSchema: z.any() + }, + fn.execute + ) + }) +} + +/** + * Creates an array of Genkit tools from a hosted Agentic project or deployment + * identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const genkit = new Genkit() + * const tools = await createGenkitToolsFromIdentifier(genkit, '@agentic/search') + * ``` + */ +export async function createGenkitToolsFromIdentifier( + genkit: Genkit, + projectOrDeploymentIdentifier: string, + opts: AgenticToolClientOptions = {} +): Promise { + const agenticToolClient = await AgenticToolClient.fromIdentifier( + projectOrDeploymentIdentifier, + opts + ) + + return createGenkitTools(genkit, agenticToolClient) +} diff --git a/packages/genkit/src/index.ts b/stdlib/genkit/src/index.ts similarity index 100% rename from packages/genkit/src/index.ts rename to stdlib/genkit/src/index.ts diff --git a/packages/genkit/tsconfig.json b/stdlib/genkit/tsconfig.json similarity index 100% rename from packages/genkit/tsconfig.json rename to stdlib/genkit/tsconfig.json diff --git a/packages/genkit/vitest.config.ts b/stdlib/genkit/vitest.config.ts similarity index 100% rename from packages/genkit/vitest.config.ts rename to stdlib/genkit/vitest.config.ts diff --git a/packages/langchain/package.json b/stdlib/langchain/package.json similarity index 89% rename from packages/langchain/package.json rename to stdlib/langchain/package.json index d5854d27..d9ac57ac 100644 --- a/packages/langchain/package.json +++ b/stdlib/langchain/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/langchain" + "directory": "stdlib/langchain" }, "type": "module", "sideEffects": false, @@ -24,7 +24,8 @@ "test:unit": "vitest run" }, "dependencies": { - "@agentic/core": "workspace:*" + "@agentic/core": "workspace:*", + "@agentic/platform-tool-client": "workspace:*" }, "peerDependencies": { "@langchain/core": "catalog:" diff --git a/packages/langchain/src/index.ts b/stdlib/langchain/src/index.ts similarity index 100% rename from packages/langchain/src/index.ts rename to stdlib/langchain/src/index.ts diff --git a/stdlib/langchain/src/langchain.test.ts b/stdlib/langchain/src/langchain.test.ts new file mode 100644 index 00000000..aac698cd --- /dev/null +++ b/stdlib/langchain/src/langchain.test.ts @@ -0,0 +1,17 @@ +import { EchoAITool } from '@agentic/core' +import { expect, test } from 'vitest' + +import { + createLangChainTools, + createLangChainToolsFromIdentifier +} from './langchain' + +test('createLangChainTools', () => { + expect(createLangChainTools(new EchoAITool())).toHaveLength(1) +}) + +test('createLangChainToolsFromIdentifier', async () => { + const tools = await createLangChainToolsFromIdentifier('@agentic/search') + expect(tools).toHaveLength(1) + expect(tools[0]!.name).toBe('search') +}) diff --git a/stdlib/langchain/src/langchain.ts b/stdlib/langchain/src/langchain.ts new file mode 100644 index 00000000..c0ba8444 --- /dev/null +++ b/stdlib/langchain/src/langchain.ts @@ -0,0 +1,61 @@ +import { + type AIFunctionLike, + AIFunctionSet, + asZodOrJsonSchema, + stringifyForModel +} from '@agentic/core' +import { + AgenticToolClient, + type AgenticToolClientOptions +} from '@agentic/platform-tool-client' +import { DynamicStructuredTool } from '@langchain/core/tools' + +/** + * Converts a set of Agentic stdlib AI functions to an array of LangChain + * tools (`DynamicStructuredTool[]`). + */ +export function createLangChainTools( + ...aiFunctionLikeTools: AIFunctionLike[] +): DynamicStructuredTool[] { + const fns = new AIFunctionSet(aiFunctionLikeTools) + + return fns.map( + (fn) => + new DynamicStructuredTool({ + name: fn.spec.name, + description: fn.spec.description, + schema: asZodOrJsonSchema(fn.inputSchema), + func: async (input) => { + const result = await Promise.resolve(fn.execute(input)) + // LangChain tools require the output to be a string + return stringifyForModel(result) + } + }) + ) +} + +/** + * Creates a Vercel AI SDK's `tools` object from a hosted Agentic project or + * deployment identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const tools = await createLangChainToolsFromIdentifier('@agentic/search') + * ``` + */ +export async function createLangChainToolsFromIdentifier( + projectOrDeploymentIdentifier: string, + opts: AgenticToolClientOptions = {} +): Promise { + const agenticToolClient = await AgenticToolClient.fromIdentifier( + projectOrDeploymentIdentifier, + opts + ) + + return createLangChainTools(agenticToolClient) +} diff --git a/packages/langchain/tsconfig.json b/stdlib/langchain/tsconfig.json similarity index 100% rename from packages/langchain/tsconfig.json rename to stdlib/langchain/tsconfig.json diff --git a/stdlib/license b/stdlib/license new file mode 100644 index 00000000..0e56ae44 --- /dev/null +++ b/stdlib/license @@ -0,0 +1,25 @@ +All Agentic packages under the `stdlib/` folder are MIT licensed. + +--- + +**MIT License** + +Copyright (c) 2025 Travis Fischer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/llamaindex/package.json b/stdlib/llamaindex/package.json similarity index 89% rename from packages/llamaindex/package.json rename to stdlib/llamaindex/package.json index 51199f30..2245fac7 100644 --- a/packages/llamaindex/package.json +++ b/stdlib/llamaindex/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/llamaindex" + "directory": "stdlib/llamaindex" }, "type": "module", "sideEffects": false, @@ -24,7 +24,8 @@ "test:unit": "vitest run" }, "dependencies": { - "@agentic/core": "workspace:*" + "@agentic/core": "workspace:*", + "@agentic/platform-tool-client": "workspace:*" }, "peerDependencies": { "llamaindex": "catalog:" diff --git a/packages/llamaindex/src/index.ts b/stdlib/llamaindex/src/index.ts similarity index 100% rename from packages/llamaindex/src/index.ts rename to stdlib/llamaindex/src/index.ts diff --git a/stdlib/llamaindex/src/llamaindex.test.ts b/stdlib/llamaindex/src/llamaindex.test.ts new file mode 100644 index 00000000..ac8665f5 --- /dev/null +++ b/stdlib/llamaindex/src/llamaindex.test.ts @@ -0,0 +1,17 @@ +import { EchoAITool } from '@agentic/core' +import { expect, test } from 'vitest' + +import { + createLlamaIndexTools, + createLlamaIndexToolsFromIdentifier +} from './llamaindex' + +test('createLlamaIndexTools', () => { + expect(createLlamaIndexTools(new EchoAITool())).toHaveLength(1) +}) + +test('createLlamaIndexToolsFromIdentifier', async () => { + const tools = await createLlamaIndexToolsFromIdentifier('@agentic/search') + expect(tools).toHaveLength(1) + expect(tools[0]!.metadata.name).toBe('search') +}) diff --git a/stdlib/llamaindex/src/llamaindex.ts b/stdlib/llamaindex/src/llamaindex.ts new file mode 100644 index 00000000..9467c6c3 --- /dev/null +++ b/stdlib/llamaindex/src/llamaindex.ts @@ -0,0 +1,57 @@ +import { + type AIFunctionLike, + AIFunctionSet, + asZodOrJsonSchema +} from '@agentic/core' +import { + AgenticToolClient, + type AgenticToolClientOptions +} from '@agentic/platform-tool-client' +import { FunctionTool, type JSONValue } from 'llamaindex' + +export type LlamaIndexTool = FunctionTool> + +/** + * Converts a set of Agentic stdlib AI functions to an array of LlamaIndex + * tools (`FunctionTool[]`). + */ +export function createLlamaIndexTools( + ...aiFunctionLikeTools: AIFunctionLike[] +): LlamaIndexTool[] { + const fns = new AIFunctionSet(aiFunctionLikeTools) + + return fns.map((fn) => + FunctionTool.from(fn.execute, { + name: fn.spec.name, + description: fn.spec.description, + // TODO: Investigate types here + parameters: asZodOrJsonSchema(fn.inputSchema) as any + }) + ) +} + +/** + * Creates an array of LlamaIndex tools from a hosted Agentic project or + * deployment identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const tools = await createLlamaIndexToolsFromIdentifier('@agentic/search') + * ``` + */ +export async function createLlamaIndexToolsFromIdentifier( + projectOrDeploymentIdentifier: string, + opts: AgenticToolClientOptions = {} +): Promise { + const agenticToolClient = await AgenticToolClient.fromIdentifier( + projectOrDeploymentIdentifier, + opts + ) + + return createLlamaIndexTools(agenticToolClient) +} diff --git a/packages/llamaindex/tsconfig.json b/stdlib/llamaindex/tsconfig.json similarity index 100% rename from packages/llamaindex/tsconfig.json rename to stdlib/llamaindex/tsconfig.json diff --git a/packages/mastra/package.json b/stdlib/mastra/package.json similarity index 89% rename from packages/mastra/package.json rename to stdlib/mastra/package.json index 882de555..85fb1cad 100644 --- a/packages/mastra/package.json +++ b/stdlib/mastra/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/mastra" + "directory": "stdlib/mastra" }, "type": "module", "sideEffects": false, @@ -24,7 +24,8 @@ "test:unit": "vitest run" }, "dependencies": { - "@agentic/core": "workspace:*" + "@agentic/core": "workspace:*", + "@agentic/platform-tool-client": "workspace:*" }, "peerDependencies": { "@mastra/core": "catalog:" diff --git a/packages/mastra/src/index.ts b/stdlib/mastra/src/index.ts similarity index 100% rename from packages/mastra/src/index.ts rename to stdlib/mastra/src/index.ts diff --git a/stdlib/mastra/src/mastra.test.ts b/stdlib/mastra/src/mastra.test.ts new file mode 100644 index 00000000..f666b3cf --- /dev/null +++ b/stdlib/mastra/src/mastra.test.ts @@ -0,0 +1,13 @@ +import { EchoAITool } from '@agentic/core' +import { expect, test } from 'vitest' + +import { createMastraTools, createMastraToolsFromIdentifier } from './mastra' + +test('createMastraTools', () => { + expect(createMastraTools(new EchoAITool())).toHaveProperty('echo') +}) + +test('createMastraToolsFromIdentifier', async () => { + const tools = await createMastraToolsFromIdentifier('@agentic/search') + expect(tools).toHaveProperty('search') +}) diff --git a/stdlib/mastra/src/mastra.ts b/stdlib/mastra/src/mastra.ts new file mode 100644 index 00000000..606c2197 --- /dev/null +++ b/stdlib/mastra/src/mastra.ts @@ -0,0 +1,64 @@ +import { type AIFunctionLike, AIFunctionSet, isZodSchema } from '@agentic/core' +import { + AgenticToolClient, + type AgenticToolClientOptions +} from '@agentic/platform-tool-client' +import { createTool } from '@mastra/core/tools' + +export type MastraTool = ReturnType + +/** + * Converts a set of Agentic stdlib AI functions to an object compatible with + * the Mastra Agent `tools` parameter. + */ +export function createMastraTools( + ...aiFunctionLikeTools: AIFunctionLike[] +): Record { + const fns = new AIFunctionSet(aiFunctionLikeTools) + + return Object.fromEntries( + fns.map((fn) => { + if (!isZodSchema(fn.inputSchema)) { + throw new Error( + `Mastra tools only support Zod schemas: ${fn.spec.name} tool uses a custom JSON Schema, which is currently not supported.` + ) + } + + return [ + fn.spec.name, + createTool({ + id: fn.spec.name, + description: fn.spec.description, + inputSchema: fn.inputSchema, + execute: (ctx) => fn.execute(ctx.context) + }) + ] + }) + ) +} + +/** + * Creates a Mastra Agent `tools` object from a hosted Agentic project or + * deployment identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const tools = await createMastraToolsFromIdentifier('@agentic/search') + * ``` + */ +export async function createMastraToolsFromIdentifier( + projectOrDeploymentIdentifier: string, + opts: AgenticToolClientOptions = {} +): Promise> { + const agenticToolClient = await AgenticToolClient.fromIdentifier( + projectOrDeploymentIdentifier, + opts + ) + + return createMastraTools(agenticToolClient) +} diff --git a/packages/mastra/tsconfig.json b/stdlib/mastra/tsconfig.json similarity index 100% rename from packages/mastra/tsconfig.json rename to stdlib/mastra/tsconfig.json diff --git a/packages/mcp/package.json b/stdlib/mcp/package.json similarity index 97% rename from packages/mcp/package.json rename to stdlib/mcp/package.json index 00095f4f..f060649d 100644 --- a/packages/mcp/package.json +++ b/stdlib/mcp/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/mcp" + "directory": "stdlib/mcp" }, "type": "module", "sideEffects": false, diff --git a/packages/mcp/src/index.ts b/stdlib/mcp/src/index.ts similarity index 100% rename from packages/mcp/src/index.ts rename to stdlib/mcp/src/index.ts diff --git a/packages/mcp/src/mcp-tools.ts b/stdlib/mcp/src/mcp-tools.ts similarity index 100% rename from packages/mcp/src/mcp-tools.ts rename to stdlib/mcp/src/mcp-tools.ts diff --git a/packages/mcp/src/paginate.ts b/stdlib/mcp/src/paginate.ts similarity index 100% rename from packages/mcp/src/paginate.ts rename to stdlib/mcp/src/paginate.ts diff --git a/packages/mcp/src/types.ts b/stdlib/mcp/src/types.ts similarity index 100% rename from packages/mcp/src/types.ts rename to stdlib/mcp/src/types.ts diff --git a/packages/mcp/tsconfig.json b/stdlib/mcp/tsconfig.json similarity index 100% rename from packages/mcp/tsconfig.json rename to stdlib/mcp/tsconfig.json diff --git a/packages/xsai/package.json b/stdlib/xsai/package.json similarity index 89% rename from packages/xsai/package.json rename to stdlib/xsai/package.json index 5db76af2..4f30deae 100644 --- a/packages/xsai/package.json +++ b/stdlib/xsai/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic.git", - "directory": "packages/xsai" + "directory": "stdlib/xsai" }, "type": "module", "sideEffects": false, @@ -24,7 +24,8 @@ "test:unit": "vitest run" }, "dependencies": { - "@agentic/core": "workspace:*" + "@agentic/core": "workspace:*", + "@agentic/platform-tool-client": "workspace:*" }, "peerDependencies": { "@xsai/tool": "catalog:" diff --git a/packages/xsai/src/index.ts b/stdlib/xsai/src/index.ts similarity index 100% rename from packages/xsai/src/index.ts rename to stdlib/xsai/src/index.ts diff --git a/stdlib/xsai/src/xsai.test.ts b/stdlib/xsai/src/xsai.test.ts new file mode 100644 index 00000000..3b147929 --- /dev/null +++ b/stdlib/xsai/src/xsai.test.ts @@ -0,0 +1,16 @@ +import { EchoAITool } from '@agentic/core' +import { expect, test } from 'vitest' + +import { createXSAITools, createXSAIToolsFromIdentifier } from './xsai' + +test('createXSAITools', async () => { + const tools = await createXSAITools(new EchoAITool()) + expect(tools).toHaveLength(1) + expect(tools[0]!.function.name).toBe('echo') +}) + +test('createXSAIToolsFromIdentifier', async () => { + const tools = await createXSAIToolsFromIdentifier('@agentic/search') + expect(tools).toHaveLength(1) + expect(tools[0]!.function.name).toBe('search') +}) diff --git a/stdlib/xsai/src/xsai.ts b/stdlib/xsai/src/xsai.ts new file mode 100644 index 00000000..868b8f06 --- /dev/null +++ b/stdlib/xsai/src/xsai.ts @@ -0,0 +1,61 @@ +import { type AIFunctionLike, AIFunctionSet, isZodSchema } from '@agentic/core' +import { + AgenticToolClient, + type AgenticToolClientOptions +} from '@agentic/platform-tool-client' +import { tool } from '@xsai/tool' + +export type XSAITool = Awaited> + +/** + * Converts a set of Agentic stdlib AI functions to an object compatible with + * the [xsAI SDK's](https://github.com/moeru-ai/xsai) `tools` parameter. + */ +export function createXSAITools( + ...aiFunctionLikeTools: AIFunctionLike[] +): Promise { + const fns = new AIFunctionSet(aiFunctionLikeTools) + + return Promise.all( + fns.map((fn) => { + if (!isZodSchema(fn.inputSchema)) { + throw new Error( + `xsAI tools only support Standard schemas like Zod: ${fn.spec.name} tool uses a custom JSON Schema, which is currently not supported.` + ) + } + + return tool({ + name: fn.spec.name, + description: fn.spec.description, + parameters: fn.inputSchema, + execute: fn.execute + }) + }) + ) +} + +/** + * Creates an array of xsAI tools from a hosted Agentic project or deployment + * identifier. + * + * You'll generally use a project identifier, which will automatically use + * that project's `latest` version, but if you want to target a specific + * version or preview deployment, you can use a fully-qualified deployment + * identifier. + * + * @example + * ```ts + * const tools = await createXSAIToolsFromIdentifier('@agentic/search') + * ``` + */ +export async function createXSAIToolsFromIdentifier( + projectOrDeploymentIdentifier: string, + opts: AgenticToolClientOptions = {} +): Promise { + const agenticToolClient = await AgenticToolClient.fromIdentifier( + projectOrDeploymentIdentifier, + opts + ) + + return createXSAITools(agenticToolClient) +} diff --git a/packages/xsai/tsconfig.json b/stdlib/xsai/tsconfig.json similarity index 100% rename from packages/xsai/tsconfig.json rename to stdlib/xsai/tsconfig.json diff --git a/todo.md b/todo.md index 9b09e62d..507889e2 100644 --- a/todo.md +++ b/todo.md @@ -17,14 +17,13 @@ - hosted docs - social images - add really strict free rate-limits to `@agentic/search` -- **simplify `AgenticToolClient` and only require one package per TS LLM SDK** - - `createAISDKToolsFromIdentifier(projectIdentifier)` - **move legacy packages, examples, and docs over** - replace json project and components with actual designs - implement footer - finesse header (mobile) - create agentic products for legacy tools - add basic legal terms and privacy policy (and update links in stripe) +- add caching to public projects api endpoints ## TODO: Post-MVP @@ -104,3 +103,5 @@ - platform AGPL-3.0 private - platform AGPL-3.0 public; maybe this should be MIT? - stdlib MIT public +- **simplify `AgenticToolClient` and only require one package per TS LLM SDK** + - `createAISDKToolsFromIdentifier(projectIdentifier)`