diff --git a/.github/workflows/usdk-test.yml b/.github/workflows/usdk-test.yml index 34ad65d80..80d4e0e72 100644 --- a/.github/workflows/usdk-test.yml +++ b/.github/workflows/usdk-test.yml @@ -10,6 +10,9 @@ on: jobs: test-usdk: runs-on: ubuntu-22.04 + env: + FAL_API_KEY: ${{ secrets.FAL_API_KEY }} + strategy: matrix: node-version: [22] @@ -28,3 +31,5 @@ jobs: run: cd packages/usdk && pnpm install --no-optional --no-frozen-lockfile - name: Run USDK command run: cd packages/usdk && ./usdk.js --version + - name: Run Jest tests + run: cd packages/usdk && pnpm test \ No newline at end of file diff --git a/apps/chat/next.config.js b/apps/chat/next.config.js index 3a025a6b8..d3f859973 100644 --- a/apps/chat/next.config.js +++ b/apps/chat/next.config.js @@ -2,6 +2,7 @@ const path = require('path'); const webpack = require('webpack'); +const { builtinModules } = require('module'); module.exports = { // experimental: { @@ -14,6 +15,7 @@ module.exports = { 'react-agents-client', 'ecctrl', 'ucom', + '@elizaos/core', ], async redirects() { return [ @@ -88,28 +90,42 @@ module.exports = { use: [options.defaultLoaders.babel], }); */ + config.plugins.push( + new webpack.NormalModuleReplacementPlugin(/^node:(.*)$/, (resource) => { + resource.request = resource.request.replace(/^node:/, ''); + }) + ); + // fix react resolution in sdk subpackage const usdkPath = path.resolve(__dirname, '../../packages/usdk'); const upstreetAgentPath = path.resolve(__dirname, '../../packages/usdk/packages/upstreet-agent'); const reactAgentsPath = path.resolve(__dirname, '../../packages/usdk/packages/upstreet-agent/packages/react-agents'); const reactAgentsClientPath = path.resolve(__dirname, '../../packages/usdk/packages/upstreet-agent/packages/react-agents-client'); const reactAgentsBrowserPath = path.resolve(__dirname, '../../packages/usdk/packages/upstreet-agent/packages/react-agents-browser'); - const replacePlugin = (scopePath, moduleRegexp) => { + const replacePlugin = (scopePath, moduleRegexp, importPath) => { return new webpack.NormalModuleReplacementPlugin(moduleRegexp, (resource) => { - if (resource.context.includes(scopePath)) { + if ( + (typeof scopePath == 'string' && resource.context.includes(scopePath)) || + (scopePath instanceof RegExp && scopePath.test(resource.context)) + ) { + if (builtinModules.includes(resource.request)) { + resource.request = path.join(importPath, 'node_modules', resource.request); + } const p = require.resolve(resource.request, { - paths: [scopePath], + paths: [importPath], }); resource.request = p; } }); }; + const modulesRegex = /^react|^fs$|^child_process$/; config.plugins.push( - replacePlugin(reactAgentsPath, /^react/), - replacePlugin(reactAgentsClientPath, /^react/), - replacePlugin(reactAgentsBrowserPath, /^react/), - replacePlugin(upstreetAgentPath, /^react/), - replacePlugin(usdkPath, /^react/), + replacePlugin(reactAgentsPath, modulesRegex, upstreetAgentPath), + replacePlugin(reactAgentsClientPath, modulesRegex, upstreetAgentPath), + replacePlugin(reactAgentsBrowserPath, modulesRegex, upstreetAgentPath), + replacePlugin(upstreetAgentPath, modulesRegex, upstreetAgentPath), + replacePlugin(usdkPath, modulesRegex, upstreetAgentPath), + replacePlugin(/\/path-scurry\/|\/0g-ts-sdk\//, modulesRegex, upstreetAgentPath), ); // config.experiments = { @@ -123,6 +139,11 @@ module.exports = { type: 'asset/resource', }); + config.module.rules.push({ + test: /\.cdc$/, + type: 'asset/source' + }); + return config; }, async headers() { diff --git a/package.json b/package.json index 1cfc5d844..a0ccef747 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,11 @@ "private": true, "type": "module", "scripts": { + "test": "npm run usdk test", "clean": "find . -type d -name node_modules -exec rm -rf {} +", "chat": "npm run -w @upstreet/chat --", - "docs": "npm run -w @upstreet/docs --" + "docs": "npm run -w @upstreet/docs --", + "usdk": "npm run -w usdk --" }, "workspaces": [ "apps/*", diff --git a/packages/usdk/jest.config.js b/packages/usdk/jest.config.js new file mode 100644 index 000000000..919373eee --- /dev/null +++ b/packages/usdk/jest.config.js @@ -0,0 +1,10 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} **/ +export default { + preset: "ts-jest/presets/default-esm", + testEnvironment: "node", + transformIgnorePatterns: [], + testMatch: [ + '**/test/?(*.)+(spec|test).[jt]s?(x)', + ], + extensionsToTreatAsEsm: [".ts", ".tsx"], +}; \ No newline at end of file diff --git a/packages/usdk/package.json b/packages/usdk/package.json index 4fde58ea3..1a0eaec61 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -18,7 +18,8 @@ "type": "module", "main": "module.mjs", "scripts": { - "preinstall": "[[ $npm_config_global == 'true' ]] || exit 0; cd packages/upstreet-agent && pnpm install --ignore-workspace --no-frozen-lockfile" + "preinstall": "[[ $npm_config_global == 'true' ]] || exit 0; cd packages/upstreet-agent && pnpm install --ignore-workspace --no-frozen-lockfile", + "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testTimeout 600000" }, "keywords": [ "ai", @@ -60,6 +61,7 @@ "@supabase/supabase-js": "^2.47.1", "@tsndr/cloudflare-worker-jwt": "2.5.3", "@types/estree": "^1.0.5", + "@types/react": "19.0.0", "@wasm-audio-decoders/common": "file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common", "alea": "^1.0.1", "ansi-escape-sequences": "^6.2.2", @@ -103,6 +105,7 @@ "png-chunks-extract": "^1.0.0", "pnpm": "^9.12.3", "pretty-bytes": "^6.1.1", + "react": "file:./packages/upstreet-agent/packages/react", "react-agents": "file:./packages/upstreet-agent/packages/react-agents", "queue-manager": "file:./packages/upstreet-agent/packages/queue-manager", "react-agents-electron": "file:./packages/upstreet-agent/packages/react-agents-electron", @@ -130,7 +133,6 @@ "web-worker": "1.2.0", "webp-wasm": "^1.0.6", "winston": "^3.16.0", - "wrangler": "^3.95.0", "ws": "^8.17.0", "yjs": "^13.6.18", "zjs": "file:./packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs", @@ -150,7 +152,9 @@ "whatwg-url": "14.0.0" }, "devDependencies": { + "@types/jest": "^29.5.14", "@types/node": "^18.0.0", - "jest": "^29.0.0" + "jest": "^29.0.0", + "ts-jest": "^29.2.5" } } diff --git a/packages/usdk/packages/upstreet-agent/durable-object.tsx b/packages/usdk/packages/upstreet-agent/durable-object.tsx index 0b35c7590..9814bd1f3 100644 --- a/packages/usdk/packages/upstreet-agent/durable-object.tsx +++ b/packages/usdk/packages/upstreet-agent/durable-object.tsx @@ -1,3 +1,5 @@ +import './init.ts'; +import './main.jsx'; import React from 'react'; import dotenv from 'dotenv'; import { createRoot, Root } from 'react-agents/root.ts'; @@ -6,8 +8,6 @@ import App from './agent.tsx'; import agentJsonSource from './agent.json'; import envTxt from './.env.txt'; -Error.stackTraceLimit = 300; - const alarmTimeout = 10 * 1000; const parseAgentJson = (agentJsonSource) => { diff --git a/packages/usdk/packages/upstreet-agent/init.ts b/packages/usdk/packages/upstreet-agent/init.ts new file mode 100644 index 000000000..67a5c251c --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/init.ts @@ -0,0 +1,7 @@ +Error.stackTraceLimit = 300; +globalThis.__filename = 'node.js'; +globalThis.__dirname = '/'; +(globalThis.process as any).version = '20.0.0'; +if (typeof import.meta.url === 'undefined') { + import.meta.url = `file://localhost/${globalThis.__filename}`; +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/main.jsx b/packages/usdk/packages/upstreet-agent/main.jsx index 6439f104d..890cb30d9 100644 --- a/packages/usdk/packages/upstreet-agent/main.jsx +++ b/packages/usdk/packages/upstreet-agent/main.jsx @@ -1,9 +1,8 @@ +import './init.ts'; export { DurableObject } from './durable-object.tsx'; import { headers } from 'react-agents/constants.mjs'; import agentJsonSource from './agent.json'; -Error.stackTraceLimit = 300; - const parseAgentJson = (agentJsonSource) => { try { if (typeof agentJsonSource === 'string') { diff --git a/packages/usdk/packages/upstreet-agent/package.json b/packages/usdk/packages/upstreet-agent/package.json index 86fbef5d1..b393aa5d3 100644 --- a/packages/usdk/packages/upstreet-agent/package.json +++ b/packages/usdk/packages/upstreet-agent/package.json @@ -4,21 +4,27 @@ "dependencies": { "@aws-sdk/util-format-url": "^3.577.0", "@electric-sql/pglite": "^0.2.15", + "@elizaos/core": "file:./packages/elizaos-core-proxy", "@iarna/toml": "^2.2.5", "@supabase/postgrest-js": "^1.17.7", "@supabase/supabase-js": "^2.47.1", "@tsndr/cloudflare-worker-jwt": "2.5.3", "@types/jest": "^29.5.13", + "@types/react": "19.0.0", "browser-util-inspect": "^0.2.0", + "child_process": "file:./packages/fs-proxy", "codecs": "file:./packages/codecs", "debouncer": "file:./packages/debouncer", "dedent": "^1.5.3", "dotenv": "^16.4.5", "ethers": "^6.12.0", "format-util": "^1.0.5", + "fs": "file:./packages/fs-proxy", "javascript-time-ago": "^2.5.11", "jest": "^29.0.0", "jimp": "^1.6.0", + "json-schema-to-zod-object": "^2.6.7", + "memfs": "^4.15.1", "memoize-one": "^6.0.0", "minimatch": "^9.0.4", "openai": "^4.56.0", @@ -31,6 +37,7 @@ "react-agents-node": "file:./packages/react-agents-node", "react-reconciler": "file:./packages/react-reconciler", "stripe": "^16.10.0", + "tls": "file:./packages/tls-proxy", "together-ai": "^0.6.0-alpha.4", "ts-jest": "^29.2.5", "twitter-api-sdk": "^1.2.1", diff --git a/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/child-process.mjs b/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/child-process.mjs new file mode 100644 index 000000000..976431c10 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/child-process.mjs @@ -0,0 +1,7 @@ +export const spawn = () => { + throw new Error('not implemented'); +}; +const childProcess = { + spawn, +}; +export default childProcess; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/package.json b/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/package.json new file mode 100644 index 000000000..2ad75f68a --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/child-process-proxy/package.json @@ -0,0 +1,4 @@ +{ + "name": "child_process", + "main": "child-process.mjs" +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/context.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/context.ts new file mode 100644 index 000000000..a682e6794 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/context.ts @@ -0,0 +1,104 @@ +import handlebars from "handlebars"; +import { type State } from "./types.ts"; +import { names, uniqueNamesGenerator } from "unique-names-generator"; + +/** + * Composes a context string by replacing placeholders in a template with corresponding values from the state. + * + * This function takes a template string with placeholders in the format `{{placeholder}}` and a state object. + * It replaces each placeholder with the value from the state object that matches the placeholder's name. + * If a matching key is not found in the state object for a given placeholder, the placeholder is replaced with an empty string. + * + * By default, this function uses a simple string replacement approach. However, when `templatingEngine` is set to `'handlebars'`, it uses Handlebars templating engine instead, compiling the template into a reusable function and evaluating it with the provided state object. + * + * @param {Object} params - The parameters for composing the context. + * @param {State} params.state - The state object containing values to replace the placeholders in the template. + * @param {string} params.template - The template string containing placeholders to be replaced with state values. + * @param {"handlebars" | undefined} [params.templatingEngine] - The templating engine to use for compiling and evaluating the template (optional, default: `undefined`). + * @returns {string} The composed context string with placeholders replaced by corresponding state values. + * + * @example + * // Given a state object and a template + * const state = { userName: "Alice", userAge: 30 }; + * const template = "Hello, {{userName}}! You are {{userAge}} years old"; + * + * // Composing the context with simple string replacement will result in: + * // "Hello, Alice! You are 30 years old." + * const contextSimple = composeContext({ state, template }); + */ +export const composeContext = ({ + state, + template, + templatingEngine, +}: { + state: State; + template: string; + templatingEngine?: "handlebars"; +}) => { + if (templatingEngine === "handlebars") { + const templateFunction = handlebars.compile(template); + return templateFunction(state); + } + + // @ts-expect-error match isn't working as expected + const out = template.replace(/{{\w+}}/g, (match) => { + const key = match.replace(/{{|}}/g, ""); + return state[key] ?? ""; + }); + return out; +}; + +/** + * Adds a header to a body of text. + * + * This function takes a header string and a body string and returns a new string with the header prepended to the body. + * If the body string is empty, the header is returned as is. + * + * @param {string} header - The header to add to the body. + * @param {string} body - The body to which to add the header. + * @returns {string} The body with the header prepended. + * + * @example + * // Given a header and a body + * const header = "Header"; + * const body = "Body"; + * + * // Adding the header to the body will result in: + * // "Header\nBody" + * const text = addHeader(header, body); + */ +export const addHeader = (header: string, body: string) => { + return body.length > 0 ? `${header ? header + "\n" : header}${body}\n` : ""; +}; + +/** + * Generates a string with random user names populated in a template. + * + * This function generates a specified number of random user names and populates placeholders + * in the provided template with these names. Placeholders in the template should follow the format `{{userX}}` + * where `X` is the position of the user (e.g., `{{user1}}`, `{{user2}}`). + * + * @param {string} params.template - The template string containing placeholders for random user names. + * @param {number} params.length - The number of random user names to generate. + * @returns {string} The template string with placeholders replaced by random user names. + * + * @example + * // Given a template and a length + * const template = "Hello, {{user1}}! Meet {{user2}} and {{user3}}."; + * const length = 3; + * + * // Composing the random user string will result in: + * // "Hello, John! Meet Alice and Bob." + * const result = composeRandomUser({ template, length }); + */ +export const composeRandomUser = (template: string, length: number) => { + const exampleNames = Array.from({ length }, () => + uniqueNamesGenerator({ dictionaries: [names] }) + ); + let result = template; + for (let i = 0; i < exampleNames.length; i++) { + result = result.replaceAll(`{{user${i + 1}}}`, exampleNames[i]); + } + + return result; +}; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/embedding.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/embedding.ts new file mode 100644 index 000000000..1c35bc1a8 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/embedding.ts @@ -0,0 +1,404 @@ +import path from "node:path"; +import { models } from "./models.ts"; +import { IAgentRuntime, ModelProviderName } from "./types.ts"; +import settings from "./settings.ts"; +import elizaLogger from "./logger.ts"; + +interface EmbeddingOptions { + model: string; + endpoint: string; + apiKey?: string; + length?: number; + isOllama?: boolean; + dimensions?: number; + provider?: string; +} + +export const EmbeddingProvider = { + OpenAI: "OpenAI", + Ollama: "Ollama", + GaiaNet: "GaiaNet", + BGE: "BGE", +} as const; + +export type EmbeddingProviderType = + (typeof EmbeddingProvider)[keyof typeof EmbeddingProvider]; + +export type EmbeddingConfig = { + readonly dimensions: number; + readonly model: string; + readonly provider: EmbeddingProviderType; +}; + +export const getEmbeddingConfig = (): EmbeddingConfig => ({ + dimensions: + settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true" + ? 1536 // OpenAI + : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true" + ? 1024 // Ollama mxbai-embed-large + : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true" + ? 768 // GaiaNet + : 384, // BGE + model: + settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true" + ? "text-embedding-3-small" + : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true" + ? settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large" + : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true" + ? settings.GAIANET_EMBEDDING_MODEL || "nomic-embed" + : "BGE-small-en-v1.5", + provider: + settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true" + ? "OpenAI" + : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true" + ? "Ollama" + : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === "true" + ? "GaiaNet" + : "BGE", +}); + +async function getRemoteEmbedding( + input: string, + options: EmbeddingOptions +): Promise { + // Ensure endpoint ends with /v1 for OpenAI + const baseEndpoint = options.endpoint.endsWith("/v1") + ? options.endpoint + : `${options.endpoint}${options.isOllama ? "/v1" : ""}`; + + // Construct full URL + const fullUrl = `${baseEndpoint}/embeddings`; + + const requestOptions = { + method: "POST", + headers: { + "Content-Type": "application/json", + ...(options.apiKey + ? { + Authorization: `Bearer ${options.apiKey}`, + } + : {}), + }, + body: JSON.stringify({ + input, + model: options.model, + dimensions: + options.dimensions || + options.length || + getEmbeddingConfig().dimensions, // Prefer dimensions, fallback to length + }), + }; + + try { + const response = await fetch(fullUrl, requestOptions); + + if (!response.ok) { + elizaLogger.error("API Response:", await response.text()); // Debug log + throw new Error( + `Embedding API Error: ${response.status} ${response.statusText}` + ); + } + + interface EmbeddingResponse { + data: Array<{ embedding: number[] }>; + } + + const data: EmbeddingResponse = await response.json(); + return data?.data?.[0].embedding; + } catch (e) { + elizaLogger.error("Full error details:", e); + throw e; + } +} + +export function getEmbeddingType(runtime: IAgentRuntime): "local" | "remote" { + const isNode = + typeof process !== "undefined" && + process.versions != null && + process.versions.node != null; + + // Use local embedding if: + // - Running in Node.js + // - Not using OpenAI provider + // - Not forcing OpenAI embeddings + const isLocal = + isNode && + runtime.character.modelProvider !== ModelProviderName.OPENAI && + runtime.character.modelProvider !== ModelProviderName.GAIANET && + !settings.USE_OPENAI_EMBEDDING; + + return isLocal ? "local" : "remote"; +} + +export function getEmbeddingZeroVector(): number[] { + let embeddingDimension = 384; // Default BGE dimension + + if (settings.USE_OPENAI_EMBEDDING?.toLowerCase() === "true") { + embeddingDimension = 1536; // OpenAI dimension + } else if (settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === "true") { + embeddingDimension = 1024; // Ollama mxbai-embed-large dimension + } + + return Array(embeddingDimension).fill(0); +} + +/** + * Gets embeddings from a remote API endpoint. Falls back to local BGE/384 + * + * @param {string} input - The text to generate embeddings for + * @param {EmbeddingOptions} options - Configuration options including: + * - model: The model name to use + * - endpoint: Base API endpoint URL + * - apiKey: Optional API key for authentication + * - isOllama: Whether this is an Ollama endpoint + * - dimensions: Desired embedding dimensions + * @param {IAgentRuntime} runtime - The agent runtime context + * @returns {Promise} Array of embedding values + * @throws {Error} If the API request fails + */ + +export async function embed(runtime: IAgentRuntime, input: string) { + elizaLogger.debug("Embedding request:", { + modelProvider: runtime.character.modelProvider, + useOpenAI: process.env.USE_OPENAI_EMBEDDING, + input: input?.slice(0, 50) + "...", + inputType: typeof input, + inputLength: input?.length, + isString: typeof input === "string", + isEmpty: !input, + }); + + // Validate input + if (!input || typeof input !== "string" || input.trim().length === 0) { + elizaLogger.warn("Invalid embedding input:", { + input, + type: typeof input, + length: input?.length, + }); + return []; // Return empty embedding array + } + + // Check cache first + const cachedEmbedding = await retrieveCachedEmbedding(runtime, input); + if (cachedEmbedding) return cachedEmbedding; + + const config = getEmbeddingConfig(); + const isNode = typeof process !== "undefined" && process.versions?.node; + + // Determine which embedding path to use + if (config.provider === EmbeddingProvider.OpenAI) { + return await getRemoteEmbedding(input, { + model: config.model, + endpoint: settings.OPENAI_API_URL || "https://api.openai.com/v1", + apiKey: settings.OPENAI_API_KEY, + dimensions: config.dimensions, + }); + } + + if (config.provider === EmbeddingProvider.Ollama) { + return await getRemoteEmbedding(input, { + model: config.model, + endpoint: + runtime.character.modelEndpointOverride || + models[ModelProviderName.OLLAMA].endpoint, + isOllama: true, + dimensions: config.dimensions, + }); + } + + if (config.provider == EmbeddingProvider.GaiaNet) { + return await getRemoteEmbedding(input, { + model: config.model, + endpoint: + runtime.character.modelEndpointOverride || + models[ModelProviderName.GAIANET].endpoint || + settings.SMALL_GAIANET_SERVER_URL || + settings.MEDIUM_GAIANET_SERVER_URL || + settings.LARGE_GAIANET_SERVER_URL, + apiKey: settings.GAIANET_API_KEY || runtime.token, + dimensions: config.dimensions, + }); + } + + // BGE - try local first if in Node + // if (isNode) { + // try { + // return await getLocalEmbedding(input); + // } catch (error) { + // elizaLogger.warn( + // "Local embedding failed, falling back to remote", + // error + // ); + // } + // } + + // Fallback to remote override + return await getRemoteEmbedding(input, { + model: config.model, + endpoint: + runtime.character.modelEndpointOverride || + models[runtime.character.modelProvider].endpoint, + apiKey: runtime.token, + dimensions: config.dimensions, + }); + + // async function getLocalEmbedding(input: string): Promise { + // elizaLogger.debug("DEBUG - Inside getLocalEmbedding function"); + + // // Check if we're in Node.js environment + // const isNode = + // typeof process !== "undefined" && + // process.versions != null && + // process.versions.node != null; + + // if (!isNode) { + // elizaLogger.warn( + // "Local embedding not supported in browser, falling back to remote embedding" + // ); + // throw new Error("Local embedding not supported in browser"); + // } + + // try { + // const moduleImports = await Promise.all([ + // import("fs"), + // import("url"), + // (async () => { + // try { + // return await import("fastembed"); + // } catch { + // elizaLogger.error("Failed to load fastembed."); + // throw new Error( + // "fastembed import failed, falling back to remote embedding" + // ); + // } + // })(), + // ]); + + // const [fs, { fileURLToPath }, fastEmbed] = moduleImports; + // const { FlagEmbedding, EmbeddingModel } = fastEmbed; + + // function getRootPath() { + // const __filename = fileURLToPath(import.meta.url); + // const __dirname = path.dirname(__filename); + + // const rootPath = path.resolve(__dirname, ".."); + // if (rootPath.includes("/eliza/")) { + // return rootPath.split("/eliza/")[0] + "/eliza/"; + // } + + // return path.resolve(__dirname, ".."); + // } + + // const cacheDir = getRootPath() + "/cache/"; + + // if (!fs.existsSync(cacheDir)) { + // fs.mkdirSync(cacheDir, { recursive: true }); + // } + + // elizaLogger.debug("Initializing BGE embedding model..."); + + // const embeddingModel = await FlagEmbedding.init({ + // cacheDir: cacheDir, + // model: EmbeddingModel.BGESmallENV15, + // // BGE-small-en-v1.5 specific settings + // maxLength: 512, // BGE's context window + // }); + + // elizaLogger.debug("Generating embedding for input:", { + // inputLength: input.length, + // inputPreview: input.slice(0, 100) + "...", + // }); + + // // Let fastembed handle tokenization internally + // const embedding = await embeddingModel.queryEmbed(input); + + // // Debug the raw embedding + // elizaLogger.debug("Raw embedding from BGE:", { + // type: typeof embedding, + // isArray: Array.isArray(embedding), + // dimensions: Array.isArray(embedding) + // ? embedding.length + // : "not an array", + // sample: Array.isArray(embedding) + // ? embedding.slice(0, 5) + // : embedding, + // }); + + // // Process the embedding into the correct format + // let finalEmbedding: number[]; + + // if ( + // ArrayBuffer.isView(embedding) && + // embedding.constructor === Float32Array + // ) { + // // Direct Float32Array result + // finalEmbedding = Array.from(embedding); + // } else if ( + // Array.isArray(embedding) && + // ArrayBuffer.isView(embedding[0]) && + // embedding[0].constructor === Float32Array + // ) { + // // Nested Float32Array result + // finalEmbedding = Array.from(embedding[0]); + // } else if (Array.isArray(embedding)) { + // // Direct array result + // finalEmbedding = embedding; + // } else { + // throw new Error( + // `Unexpected embedding format: ${typeof embedding}` + // ); + // } + + // elizaLogger.debug("Processed embedding:", { + // length: finalEmbedding.length, + // sample: finalEmbedding.slice(0, 5), + // allNumbers: finalEmbedding.every((n) => typeof n === "number"), + // }); + + // // Ensure all values are proper numbers + // finalEmbedding = finalEmbedding.map((n) => Number(n)); + + // // Validate the final embedding + // if ( + // !Array.isArray(finalEmbedding) || + // finalEmbedding[0] === undefined + // ) { + // throw new Error( + // "Invalid embedding format: must be an array starting with a number" + // ); + // } + + // // Validate embedding dimensions (should be 384 for BGE-small) + // if (finalEmbedding.length !== 384) { + // elizaLogger.warn( + // `Unexpected embedding dimension: ${finalEmbedding.length} (expected 384)` + // ); + // } + + // return finalEmbedding; + // } catch { + // // Browser implementation - fallback to remote embedding + // elizaLogger.warn( + // "Local embedding not supported in browser, falling back to remote embedding" + // ); + // throw new Error("Local embedding not supported in browser"); + // } + // } + + async function retrieveCachedEmbedding( + runtime: IAgentRuntime, + input: string + ) { + if (!input) { + elizaLogger.log("No input to retrieve cached embedding for"); + return null; + } + + const similaritySearchResult = + await runtime.messageManager.getCachedEmbeddings(input); + if (similaritySearchResult.length > 0) { + return similaritySearchResult[0].embedding; + } + return null; + } +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/generation.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/generation.ts new file mode 100644 index 000000000..64873a42c --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/generation.ts @@ -0,0 +1,1763 @@ +import { createAnthropic } from "@ai-sdk/anthropic"; +import { createGoogleGenerativeAI } from "@ai-sdk/google"; +import { createGroq } from "@ai-sdk/groq"; +import { createOpenAI } from "@ai-sdk/openai"; +import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"; +import { + generateObject as aiGenerateObject, + generateText as aiGenerateText, + GenerateObjectResult, +} from "ai"; +import { Buffer } from "buffer"; +// import { createOllama } from "ollama-ai-provider"; +import OpenAI from "openai"; +import { encodingForModel, TiktokenModel } from "js-tiktoken"; +import Together from "together-ai"; +import { ZodSchema } from "zod"; +import { elizaLogger } from "./index.ts"; +import { getModel, models } from "./models.ts"; +import { + parseBooleanFromText, + parseJsonArrayFromText, + parseJSONObjectFromText, + parseShouldRespondFromText, + parseActionResponseFromText, +} from "./parsing.ts"; +import settings from "./settings.ts"; +import { + Content, + IAgentRuntime, + IImageDescriptionService, + ITextGenerationService, + ModelClass, + ModelProviderName, + ServiceType, + SearchResponse, + ActionResponse, +} from "./types.ts"; +import { fal } from "@fal-ai/client"; + +/** + * Send a message to the model for a text generateText - receive a string back and parse how you'd like + * @param opts - The options for the generateText request. + * @param opts.context The context of the message to be completed. + * @param opts.stop A list of strings to stop the generateText at. + * @param opts.model The model to use for generateText. + * @param opts.frequency_penalty The frequency penalty to apply to the generateText. + * @param opts.presence_penalty The presence penalty to apply to the generateText. + * @param opts.temperature The temperature to apply to the generateText. + * @param opts.max_context_length The maximum length of the context to apply to the generateText. + * @returns The completed message. + */ + +export async function generateText({ + runtime, + context, + modelClass, + stop, + customSystemPrompt, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; + stop?: string[]; + customSystemPrompt?: string; +}): Promise { + if (!context) { + console.error("generateText context is empty"); + return ""; + } + + elizaLogger.log("Generating text..."); + + elizaLogger.info("Generating text with options:", { + modelProvider: runtime.modelProvider, + model: modelClass, + }); + + const provider = runtime.modelProvider; + const endpoint = + runtime.character.modelEndpointOverride || models[provider].endpoint; + let model = models[provider].model[modelClass]; + + // allow character.json settings => secrets to override models + // FIXME: add MODEL_MEDIUM support + switch (provider) { + // if runtime.getSetting("LLAMACLOUD_MODEL_LARGE") is true and modelProvider is LLAMACLOUD, then use the large model + case ModelProviderName.LLAMACLOUD: + { + switch (modelClass) { + case ModelClass.LARGE: + { + model = + runtime.getSetting("LLAMACLOUD_MODEL_LARGE") || + model; + } + break; + case ModelClass.SMALL: + { + model = + runtime.getSetting("LLAMACLOUD_MODEL_SMALL") || + model; + } + break; + } + } + break; + case ModelProviderName.TOGETHER: + { + switch (modelClass) { + case ModelClass.LARGE: + { + model = + runtime.getSetting("TOGETHER_MODEL_LARGE") || + model; + } + break; + case ModelClass.SMALL: + { + model = + runtime.getSetting("TOGETHER_MODEL_SMALL") || + model; + } + break; + } + } + break; + case ModelProviderName.OPENROUTER: + { + switch (modelClass) { + case ModelClass.LARGE: + { + model = + runtime.getSetting("LARGE_OPENROUTER_MODEL") || + model; + } + break; + case ModelClass.SMALL: + { + model = + runtime.getSetting("SMALL_OPENROUTER_MODEL") || + model; + } + break; + } + } + break; + } + + elizaLogger.info("Selected model:", model); + + const modelConfiguration = runtime.character?.settings?.modelConfig; + const temperature = + modelConfiguration?.temperature || + models[provider].settings.temperature; + const frequency_penalty = + modelConfiguration?.frequency_penalty || + models[provider].settings.frequency_penalty; + const presence_penalty = + modelConfiguration?.presence_penalty || + models[provider].settings.presence_penalty; + const max_context_length = + modelConfiguration?.maxInputTokens || + models[provider].settings.maxInputTokens; + const max_response_length = + modelConfiguration?.max_response_length || + models[provider].settings.maxOutputTokens; + + const apiKey = runtime.token; + + try { + elizaLogger.debug( + `Trimming context to max length of ${max_context_length} tokens.` + ); + context = await trimTokens(context, max_context_length, "gpt-4o"); + + let response: string; + + const _stop = stop || models[provider].settings.stop; + elizaLogger.debug( + `Using provider: ${provider}, model: ${model}, temperature: ${temperature}, max response length: ${max_response_length}` + ); + + switch (provider) { + // OPENAI & LLAMACLOUD shared same structure. + case ModelProviderName.OPENAI: + case ModelProviderName.ETERNALAI: + case ModelProviderName.ALI_BAILIAN: + case ModelProviderName.VOLENGINE: + case ModelProviderName.LLAMACLOUD: + case ModelProviderName.NANOGPT: + case ModelProviderName.HYPERBOLIC: + case ModelProviderName.TOGETHER: + case ModelProviderName.AKASH_CHAT_API: { + elizaLogger.debug("Initializing OpenAI model."); + const openai = createOpenAI({ + apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: openaiResponse } = await aiGenerateText({ + model: openai.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = openaiResponse; + elizaLogger.debug("Received response from OpenAI model."); + break; + } + + case ModelProviderName.GOOGLE: { + const google = createGoogleGenerativeAI({ + fetch: runtime.fetch, + }); + + const { text: googleResponse } = await aiGenerateText({ + model: google(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = googleResponse; + elizaLogger.debug("Received response from Google model."); + break; + } + + case ModelProviderName.ANTHROPIC: { + elizaLogger.debug("Initializing Anthropic model."); + + const anthropic = createAnthropic({ + apiKey, + fetch: runtime.fetch, + }); + + const { text: anthropicResponse } = await aiGenerateText({ + model: anthropic.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = anthropicResponse; + elizaLogger.debug("Received response from Anthropic model."); + break; + } + + case ModelProviderName.CLAUDE_VERTEX: { + elizaLogger.debug("Initializing Claude Vertex model."); + + const anthropic = createAnthropic({ + apiKey, + fetch: runtime.fetch, + }); + + const { text: anthropicResponse } = await aiGenerateText({ + model: anthropic.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = anthropicResponse; + elizaLogger.debug( + "Received response from Claude Vertex model." + ); + break; + } + + case ModelProviderName.GROK: { + elizaLogger.debug("Initializing Grok model."); + const grok = createOpenAI({ + apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: grokResponse } = await aiGenerateText({ + model: grok.languageModel(model, { + parallelToolCalls: false, + }), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = grokResponse; + elizaLogger.debug("Received response from Grok model."); + break; + } + + case ModelProviderName.GROQ: { + const groq = createGroq({ apiKey, fetch: runtime.fetch }); + + const { text: groqResponse } = await aiGenerateText({ + model: groq.languageModel(model), + prompt: context, + temperature: temperature, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = groqResponse; + break; + } + + case ModelProviderName.LLAMALOCAL: { + elizaLogger.debug( + "Using local Llama model for text completion." + ); + const textGenerationService = + runtime.getService( + ServiceType.TEXT_GENERATION + ); + + if (!textGenerationService) { + throw new Error("Text generation service not found"); + } + + response = await textGenerationService.queueTextCompletion( + context, + temperature, + _stop, + frequency_penalty, + presence_penalty, + max_response_length + ); + elizaLogger.debug("Received response from local Llama model."); + break; + } + + case ModelProviderName.REDPILL: { + elizaLogger.debug("Initializing RedPill model."); + const serverUrl = models[provider].endpoint; + const openai = createOpenAI({ + apiKey, + baseURL: serverUrl, + fetch: runtime.fetch, + }); + + const { text: redpillResponse } = await aiGenerateText({ + model: openai.languageModel(model), + prompt: context, + temperature: temperature, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = redpillResponse; + elizaLogger.debug("Received response from redpill model."); + break; + } + + case ModelProviderName.OPENROUTER: { + elizaLogger.debug("Initializing OpenRouter model."); + const serverUrl = models[provider].endpoint; + const openrouter = createOpenAI({ + apiKey, + baseURL: serverUrl, + fetch: runtime.fetch, + }); + + const { text: openrouterResponse } = await aiGenerateText({ + model: openrouter.languageModel(model), + prompt: context, + temperature: temperature, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = openrouterResponse; + elizaLogger.debug("Received response from OpenRouter model."); + break; + } + + /* case ModelProviderName.OLLAMA: + { + elizaLogger.debug("Initializing Ollama model."); + + const ollamaProvider = createOllama({ + baseURL: models[provider].endpoint + "/api", + fetch: runtime.fetch, + }); + const ollama = ollamaProvider(model); + + elizaLogger.debug("****** MODEL\n", model); + + const { text: ollamaResponse } = await aiGenerateText({ + model: ollama, + prompt: context, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = ollamaResponse; + } + elizaLogger.debug("Received response from Ollama model."); + break; */ + + case ModelProviderName.HEURIST: { + elizaLogger.debug("Initializing Heurist model."); + const heurist = createOpenAI({ + apiKey: apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: heuristResponse } = await aiGenerateText({ + model: heurist.languageModel(model), + prompt: context, + system: + customSystemPrompt ?? + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = heuristResponse; + elizaLogger.debug("Received response from Heurist model."); + break; + } + case ModelProviderName.GAIANET: { + elizaLogger.debug("Initializing GAIANET model."); + + var baseURL = models[provider].endpoint; + if (!baseURL) { + switch (modelClass) { + case ModelClass.SMALL: + baseURL = + settings.SMALL_GAIANET_SERVER_URL || + "https://llama3b.gaia.domains/v1"; + break; + case ModelClass.MEDIUM: + baseURL = + settings.MEDIUM_GAIANET_SERVER_URL || + "https://llama8b.gaia.domains/v1"; + break; + case ModelClass.LARGE: + baseURL = + settings.LARGE_GAIANET_SERVER_URL || + "https://qwen72b.gaia.domains/v1"; + break; + } + } + + elizaLogger.debug("Using GAIANET model with baseURL:", baseURL); + + const openai = createOpenAI({ + apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: openaiResponse } = await aiGenerateText({ + model: openai.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = openaiResponse; + elizaLogger.debug("Received response from GAIANET model."); + break; + } + + case ModelProviderName.GALADRIEL: { + elizaLogger.debug("Initializing Galadriel model."); + const galadriel = createOpenAI({ + apiKey: apiKey, + baseURL: endpoint, + fetch: runtime.fetch, + }); + + const { text: galadrielResponse } = await aiGenerateText({ + model: galadriel.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + }); + + response = galadrielResponse; + elizaLogger.debug("Received response from Galadriel model."); + break; + } + + case ModelProviderName.VENICE: { + elizaLogger.debug("Initializing Venice model."); + const venice = createOpenAI({ + apiKey: apiKey, + baseURL: endpoint, + }); + + const { text: veniceResponse } = await aiGenerateText({ + model: venice.languageModel(model), + prompt: context, + system: + runtime.character.system ?? + settings.SYSTEM_PROMPT ?? + undefined, + temperature: temperature, + maxTokens: max_response_length, + }); + + response = veniceResponse; + elizaLogger.debug("Received response from Venice model."); + break; + } + + default: { + const errorMessage = `Unsupported provider: ${provider}`; + elizaLogger.error(errorMessage); + throw new Error(errorMessage); + } + } + + return response; + } catch (error) { + elizaLogger.error("Error in generateText:", error); + throw error; + } +} + +/** + * Truncate the context to the maximum length allowed by the model. + * @param context The text to truncate + * @param maxTokens Maximum number of tokens to keep + * @param model The tokenizer model to use + * @returns The truncated text + */ +export function trimTokens( + context: string, + maxTokens: number, + model: TiktokenModel +): string { + if (!context) return ""; + if (maxTokens <= 0) throw new Error("maxTokens must be positive"); + + // Get the tokenizer for the model + const encoding = encodingForModel(model); + + try { + // Encode the text into tokens + const tokens = encoding.encode(context); + + // If already within limits, return unchanged + if (tokens.length <= maxTokens) { + return context; + } + + // Keep the most recent tokens by slicing from the end + const truncatedTokens = tokens.slice(-maxTokens); + + // Decode back to text - js-tiktoken decode() returns a string directly + return encoding.decode(truncatedTokens); + } catch (error) { + console.error("Error in trimTokens:", error); + // Return truncated string if tokenization fails + return context.slice(-maxTokens * 4); // Rough estimate of 4 chars per token + } +} + +/** + * Sends a message to the model to determine if it should respond to the given context. + * @param opts - The options for the generateText request + * @param opts.context The context to evaluate for response + * @param opts.stop A list of strings to stop the generateText at + * @param opts.model The model to use for generateText + * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0) + * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0) + * @param opts.temperature The temperature to control randomness (0.0 to 2.0) + * @param opts.serverUrl The URL of the API server + * @param opts.max_context_length Maximum allowed context length in tokens + * @param opts.max_response_length Maximum allowed response length in tokens + * @returns Promise resolving to "RESPOND", "IGNORE", "STOP" or null + */ +export async function generateShouldRespond({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise<"RESPOND" | "IGNORE" | "STOP" | null> { + let retryDelay = 1000; + while (true) { + try { + elizaLogger.debug( + "Attempting to generate text with context:", + context + ); + const response = await generateText({ + runtime, + context, + modelClass, + }); + + elizaLogger.debug("Received response from generateText:", response); + const parsedResponse = parseShouldRespondFromText(response.trim()); + if (parsedResponse) { + elizaLogger.debug("Parsed response:", parsedResponse); + return parsedResponse; + } else { + elizaLogger.debug("generateShouldRespond no response"); + } + } catch (error) { + elizaLogger.error("Error in generateShouldRespond:", error); + if ( + error instanceof TypeError && + error.message.includes("queueTextCompletion") + ) { + elizaLogger.error( + "TypeError: Cannot read properties of null (reading 'queueTextCompletion')" + ); + } + } + + elizaLogger.log(`Retrying in ${retryDelay}ms...`); + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} + +/** + * Splits content into chunks of specified size with optional overlapping bleed sections + * @param content - The text content to split into chunks + * @param chunkSize - The maximum size of each chunk in tokens + * @param bleed - Number of characters to overlap between chunks (default: 100) + * @returns Promise resolving to array of text chunks with bleed sections + */ +export async function splitChunks( + content: string, + chunkSize: number = 512, + bleed: number = 20 +): Promise { + const textSplitter = new RecursiveCharacterTextSplitter({ + chunkSize: Number(chunkSize), + chunkOverlap: Number(bleed), + }); + + return textSplitter.splitText(content); +} + +/** + * Sends a message to the model and parses the response as a boolean value + * @param opts - The options for the generateText request + * @param opts.context The context to evaluate for the boolean response + * @param opts.stop A list of strings to stop the generateText at + * @param opts.model The model to use for generateText + * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0) + * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0) + * @param opts.temperature The temperature to control randomness (0.0 to 2.0) + * @param opts.serverUrl The URL of the API server + * @param opts.token The API token for authentication + * @param opts.max_context_length Maximum allowed context length in tokens + * @param opts.max_response_length Maximum allowed response length in tokens + * @returns Promise resolving to a boolean value parsed from the model's response + */ +export async function generateTrueOrFalse({ + runtime, + context = "", + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + let retryDelay = 1000; + + const stop = Array.from( + new Set([ + ...(models[runtime.modelProvider].settings.stop || []), + ["\n"], + ]) + ) as string[]; + + while (true) { + try { + const response = await generateText({ + stop, + runtime, + context, + modelClass, + }); + + const parsedResponse = parseBooleanFromText(response.trim()); + if (parsedResponse !== null) { + return parsedResponse; + } + } catch (error) { + elizaLogger.error("Error in generateTrueOrFalse:", error); + } + + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} + +/** + * Send a message to the model and parse the response as a string array + * @param opts - The options for the generateText request + * @param opts.context The context/prompt to send to the model + * @param opts.stop Array of strings that will stop the model's generation if encountered + * @param opts.model The language model to use + * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0) + * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0) + * @param opts.temperature The temperature to control randomness (0.0 to 2.0) + * @param opts.serverUrl The URL of the API server + * @param opts.token The API token for authentication + * @param opts.max_context_length Maximum allowed context length in tokens + * @param opts.max_response_length Maximum allowed response length in tokens + * @returns Promise resolving to an array of strings parsed from the model's response + */ +export async function generateTextArray({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + if (!context) { + elizaLogger.error("generateTextArray context is empty"); + return []; + } + let retryDelay = 1000; + + while (true) { + try { + const response = await generateText({ + runtime, + context, + modelClass, + }); + + const parsedResponse = parseJsonArrayFromText(response); + if (parsedResponse) { + return parsedResponse; + } + } catch (error) { + elizaLogger.error("Error in generateTextArray:", error); + } + + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} + +export async function generateObjectDeprecated({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + if (!context) { + elizaLogger.error("generateObjectDeprecated context is empty"); + return null; + } + let retryDelay = 1000; + + while (true) { + try { + // this is slightly different than generateObjectArray, in that we parse object, not object array + const response = await generateText({ + runtime, + context, + modelClass, + }); + const parsedResponse = parseJSONObjectFromText(response); + if (parsedResponse) { + return parsedResponse; + } + } catch (error) { + elizaLogger.error("Error in generateObject:", error); + } + + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} + +export async function generateObjectArray({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + if (!context) { + elizaLogger.error("generateObjectArray context is empty"); + return []; + } + let retryDelay = 1000; + + while (true) { + try { + const response = await generateText({ + runtime, + context, + modelClass, + }); + + const parsedResponse = parseJsonArrayFromText(response); + if (parsedResponse) { + return parsedResponse; + } + } catch (error) { + elizaLogger.error("Error in generateTextArray:", error); + } + + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} + +/** + * Send a message to the model for generateText. + * @param opts - The options for the generateText request. + * @param opts.context The context of the message to be completed. + * @param opts.stop A list of strings to stop the generateText at. + * @param opts.model The model to use for generateText. + * @param opts.frequency_penalty The frequency penalty to apply to the generateText. + * @param opts.presence_penalty The presence penalty to apply to the generateText. + * @param opts.temperature The temperature to apply to the generateText. + * @param opts.max_context_length The maximum length of the context to apply to the generateText. + * @returns The completed message. + */ +export async function generateMessageResponse({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + const max_context_length = + models[runtime.modelProvider].settings.maxInputTokens; + context = trimTokens(context, max_context_length, "gpt-4o"); + let retryLength = 1000; // exponential backoff + while (true) { + try { + elizaLogger.log("Generating message response.."); + + const response = await generateText({ + runtime, + context, + modelClass, + }); + + // try parsing the response as JSON, if null then try again + const parsedContent = parseJSONObjectFromText(response) as Content; + if (!parsedContent) { + elizaLogger.debug("parsedContent is null, retrying"); + continue; + } + + return parsedContent; + } catch (error) { + elizaLogger.error("ERROR:", error); + // wait for 2 seconds + retryLength *= 2; + await new Promise((resolve) => setTimeout(resolve, retryLength)); + elizaLogger.debug("Retrying..."); + } + } +} + +export const generateImage = async ( + data: { + prompt: string; + width: number; + height: number; + count?: number; + negativePrompt?: string; + numIterations?: number; + guidanceScale?: number; + seed?: number; + modelId?: string; + jobId?: string; + stylePreset?: string; + hideWatermark?: boolean; + }, + runtime: IAgentRuntime +): Promise<{ + success: boolean; + data?: string[]; + error?: any; +}> => { + const model = getModel(runtime.imageModelProvider, ModelClass.IMAGE); + const modelSettings = models[runtime.imageModelProvider].imageSettings; + + elizaLogger.info("Generating image with options:", { + imageModelProvider: model, + }); + + const apiKey = + runtime.imageModelProvider === runtime.modelProvider + ? runtime.token + : (() => { + // First try to match the specific provider + switch (runtime.imageModelProvider) { + case ModelProviderName.HEURIST: + return runtime.getSetting("HEURIST_API_KEY"); + case ModelProviderName.TOGETHER: + return runtime.getSetting("TOGETHER_API_KEY"); + case ModelProviderName.FAL: + return runtime.getSetting("FAL_API_KEY"); + case ModelProviderName.OPENAI: + return runtime.getSetting("OPENAI_API_KEY"); + case ModelProviderName.VENICE: + return runtime.getSetting("VENICE_API_KEY"); + case ModelProviderName.LIVEPEER: + return runtime.getSetting("LIVEPEER_GATEWAY_URL"); + default: + // If no specific match, try the fallback chain + return (runtime.getSetting("HEURIST_API_KEY") ?? + runtime.getSetting("TOGETHER_API_KEY") ?? + runtime.getSetting("FAL_API_KEY") ?? + runtime.getSetting("OPENAI_API_KEY") ?? + runtime.getSetting("VENICE_API_KEY"))?? + runtime.getSetting("LIVEPEER_GATEWAY_URL"); + } + })(); + try { + if (runtime.imageModelProvider === ModelProviderName.HEURIST) { + const response = await fetch( + "http://sequencer.heurist.xyz/submit_job", + { + method: "POST", + headers: { + Authorization: `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + job_id: data.jobId || crypto.randomUUID(), + model_input: { + SD: { + prompt: data.prompt, + neg_prompt: data.negativePrompt, + num_iterations: data.numIterations || 20, + width: data.width || 512, + height: data.height || 512, + guidance_scale: data.guidanceScale || 3, + seed: data.seed || -1, + }, + }, + model_id: data.modelId || "FLUX.1-dev", + deadline: 60, + priority: 1, + }), + } + ); + + if (!response.ok) { + throw new Error( + `Heurist image generation failed: ${response.statusText}` + ); + } + + const imageURL = await response.json(); + return { success: true, data: [imageURL] }; + } else if ( + runtime.imageModelProvider === ModelProviderName.TOGETHER || + // for backwards compat + runtime.imageModelProvider === ModelProviderName.LLAMACLOUD + ) { + const together = new Together({ apiKey: apiKey as string }); + const response = await together.images.create({ + model: "black-forest-labs/FLUX.1-schnell", + prompt: data.prompt, + width: data.width, + height: data.height, + steps: modelSettings?.steps ?? 4, + n: data.count, + }); + + // Add type assertion to handle the response properly + const togetherResponse = + response as unknown as TogetherAIImageResponse; + + if ( + !togetherResponse.data || + !Array.isArray(togetherResponse.data) + ) { + throw new Error("Invalid response format from Together AI"); + } + + // Rest of the code remains the same... + const base64s = await Promise.all( + togetherResponse.data.map(async (image) => { + if (!image.url) { + elizaLogger.error("Missing URL in image data:", image); + throw new Error("Missing URL in Together AI response"); + } + + // Fetch the image from the URL + const imageResponse = await fetch(image.url); + if (!imageResponse.ok) { + throw new Error( + `Failed to fetch image: ${imageResponse.statusText}` + ); + } + + // Convert to blob and then to base64 + const blob = await imageResponse.blob(); + const arrayBuffer = await blob.arrayBuffer(); + const base64 = Buffer.from(arrayBuffer).toString("base64"); + + // Return with proper MIME type + return `data:image/jpeg;base64,${base64}`; + }) + ); + + if (base64s.length === 0) { + throw new Error("No images generated by Together AI"); + } + + elizaLogger.debug(`Generated ${base64s.length} images`); + return { success: true, data: base64s }; + } else if (runtime.imageModelProvider === ModelProviderName.FAL) { + fal.config({ + credentials: apiKey as string, + }); + + // Prepare the input parameters according to their schema + const input = { + prompt: data.prompt, + image_size: "square" as const, + num_inference_steps: modelSettings?.steps ?? 50, + guidance_scale: data.guidanceScale || 3.5, + num_images: data.count, + enable_safety_checker: + runtime.getSetting("FAL_AI_ENABLE_SAFETY_CHECKER") === + "true", + safety_tolerance: Number( + runtime.getSetting("FAL_AI_SAFETY_TOLERANCE") || "2" + ), + output_format: "png" as const, + seed: data.seed ?? 6252023, + ...(runtime.getSetting("FAL_AI_LORA_PATH") + ? { + loras: [ + { + path: runtime.getSetting("FAL_AI_LORA_PATH"), + scale: 1, + }, + ], + } + : {}), + }; + + // Subscribe to the model + const result = await fal.subscribe(model, { + input, + logs: true, + onQueueUpdate: (update) => { + if (update.status === "IN_PROGRESS") { + elizaLogger.info(update.logs.map((log) => log.message)); + } + }, + }); + + // Convert the returned image URLs to base64 to match existing functionality + const base64Promises = result.data.images.map(async (image) => { + const response = await fetch(image.url); + const blob = await response.blob(); + const buffer = await blob.arrayBuffer(); + const base64 = Buffer.from(buffer).toString("base64"); + return `data:${image.content_type};base64,${base64}`; + }); + + const base64s = await Promise.all(base64Promises); + return { success: true, data: base64s }; + } else if (runtime.imageModelProvider === ModelProviderName.VENICE) { + const response = await fetch( + "https://api.venice.ai/api/v1/image/generate", + { + method: "POST", + headers: { + Authorization: `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: data.modelId || "fluently-xl", + prompt: data.prompt, + negative_prompt: data.negativePrompt, + width: data.width, + height: data.height, + steps: data.numIterations, + seed: data.seed, + style_preset: data.stylePreset, + hide_watermark: data.hideWatermark, + }), + } + ); + + const result = await response.json(); + + if (!result.images || !Array.isArray(result.images)) { + throw new Error("Invalid response format from Venice AI"); + } + + const base64s = result.images.map((base64String) => { + if (!base64String) { + throw new Error( + "Empty base64 string in Venice AI response" + ); + } + return `data:image/png;base64,${base64String}`; + }); + + return { success: true, data: base64s }; + + } else if (runtime.imageModelProvider === ModelProviderName.LIVEPEER) { + if (!apiKey) { + throw new Error("Livepeer Gateway is not defined"); + } + try { + const baseUrl = new URL(apiKey); + if (!baseUrl.protocol.startsWith('http')) { + throw new Error("Invalid Livepeer Gateway URL protocol"); + } + const response = await fetch(`${baseUrl.toString()}text-to-image`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + model_id: data.modelId || "ByteDance/SDXL-Lightning", + prompt: data.prompt, + width: data.width || 1024, + height: data.height || 1024 + }) + }); + const result = await response.json(); + if (!result.images?.length) { + throw new Error("No images generated"); + } + const base64Images = await Promise.all( + result.images.map(async (image) => { + console.log("imageUrl console log", image.url); + let imageUrl; + if (image.url.includes("http")) { + imageUrl = image.url; + } else { + imageUrl = `${apiKey}${image.url}`; + } + const imageResponse = await fetch(imageUrl); + if (!imageResponse.ok) { + throw new Error( + `Failed to fetch image: ${imageResponse.statusText}` + ); + } + const blob = await imageResponse.blob(); + const arrayBuffer = await blob.arrayBuffer(); + const base64 = Buffer.from(arrayBuffer).toString("base64"); + return `data:image/jpeg;base64,${base64}`; + }) + ); + return { + success: true, + data: base64Images + }; + } catch (error) { + console.error(error); + return { success: false, error: error }; + } + + } else { + let targetSize = `${data.width}x${data.height}`; + if ( + targetSize !== "1024x1024" && + targetSize !== "1792x1024" && + targetSize !== "1024x1792" + ) { + targetSize = "1024x1024"; + } + const openaiApiKey = runtime.getSetting("OPENAI_API_KEY") as string; + if (!openaiApiKey) { + throw new Error("OPENAI_API_KEY is not set"); + } + const openai = new OpenAI({ + apiKey: openaiApiKey as string, + }); + const response = await openai.images.generate({ + model, + prompt: data.prompt, + size: targetSize as "1024x1024" | "1792x1024" | "1024x1792", + n: data.count, + response_format: "b64_json", + }); + const base64s = response.data.map( + (image) => `data:image/png;base64,${image.b64_json}` + ); + return { success: true, data: base64s }; + } + } catch (error) { + console.error(error); + return { success: false, error: error }; + } +}; + +export const generateCaption = async ( + data: { imageUrl: string }, + runtime: IAgentRuntime +): Promise<{ + title: string; + description: string; +}> => { + const { imageUrl } = data; + const imageDescriptionService = + runtime.getService( + ServiceType.IMAGE_DESCRIPTION + ); + + if (!imageDescriptionService) { + throw new Error("Image description service not found"); + } + + const resp = await imageDescriptionService.describeImage(imageUrl); + return { + title: resp.title.trim(), + description: resp.description.trim(), + }; +}; + +export const generateWebSearch = async ( + query: string, + runtime: IAgentRuntime +): Promise => { + const apiUrl = "https://api.tavily.com/search"; + const apiKey = runtime.getSetting("TAVILY_API_KEY"); + + try { + const response = await fetch(apiUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + api_key: apiKey, + query, + include_answer: true, + max_results: 3, // 5 (default) + topic: "general", // "general"(default) "news" + search_depth: "basic", // "basic"(default) "advanced" + include_images: false, // false (default) true + }), + }); + + if (!response.ok) { + throw new elizaLogger.error( + `HTTP error! status: ${response.status}` + ); + } + + const data: SearchResponse = await response.json(); + return data; + } catch (error) { + elizaLogger.error("Error:", error); + } +}; +/** + * Configuration options for generating objects with a model. + */ +export interface GenerationOptions { + runtime: IAgentRuntime; + context: string; + modelClass: ModelClass; + schema?: ZodSchema; + schemaName?: string; + schemaDescription?: string; + stop?: string[]; + mode?: "auto" | "json" | "tool"; + experimental_providerMetadata?: Record; +} + +/** + * Base settings for model generation. + */ +interface ModelSettings { + prompt: string; + temperature: number; + maxTokens: number; + frequencyPenalty: number; + presencePenalty: number; + stop?: string[]; +} + +/** + * Generates structured objects from a prompt using specified AI models and configuration options. + * + * @param {GenerationOptions} options - Configuration options for generating objects. + * @returns {Promise} - A promise that resolves to an array of generated objects. + * @throws {Error} - Throws an error if the provider is unsupported or if generation fails. + */ +export const generateObject = async ({ + runtime, + context, + modelClass, + schema, + schemaName, + schemaDescription, + stop, + mode = "json", +}: GenerationOptions): Promise> => { + if (!context) { + const errorMessage = "generateObject context is empty"; + console.error(errorMessage); + throw new Error(errorMessage); + } + + const provider = runtime.modelProvider; + const model = models[provider].model[modelClass] as TiktokenModel; + if (!model) { + throw new Error(`Unsupported model class: ${modelClass}`); + } + const temperature = models[provider].settings.temperature; + const frequency_penalty = models[provider].settings.frequency_penalty; + const presence_penalty = models[provider].settings.presence_penalty; + const max_context_length = models[provider].settings.maxInputTokens; + const max_response_length = models[provider].settings.maxOutputTokens; + const apiKey = runtime.token; + + try { + context = trimTokens(context, max_context_length, model); + + const modelOptions: ModelSettings = { + prompt: context, + temperature, + maxTokens: max_response_length, + frequencyPenalty: frequency_penalty, + presencePenalty: presence_penalty, + stop: stop || models[provider].settings.stop, + }; + + const response = await handleProvider({ + provider, + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, + runtime, + context, + modelClass, + }); + + return response; + } catch (error) { + console.error("Error in generateObject:", error); + throw error; + } +}; + +/** + * Interface for provider-specific generation options. + */ +interface ProviderOptions { + runtime: IAgentRuntime; + provider: ModelProviderName; + model: any; + apiKey: string; + schema?: ZodSchema; + schemaName?: string; + schemaDescription?: string; + mode?: "auto" | "json" | "tool"; + experimental_providerMetadata?: Record; + modelOptions: ModelSettings; + modelClass: string; + context: string; +} + +/** + * Handles AI generation based on the specified provider. + * + * @param {ProviderOptions} options - Configuration options specific to the provider. + * @returns {Promise} - A promise that resolves to an array of generated objects. + */ +export async function handleProvider( + options: ProviderOptions +): Promise> { + const { provider, runtime, context, modelClass } = options; + switch (provider) { + case ModelProviderName.OPENAI: + case ModelProviderName.ETERNALAI: + case ModelProviderName.ALI_BAILIAN: + case ModelProviderName.VOLENGINE: + case ModelProviderName.LLAMACLOUD: + case ModelProviderName.TOGETHER: + case ModelProviderName.NANOGPT: + case ModelProviderName.AKASH_CHAT_API: + return await handleOpenAI(options); + case ModelProviderName.ANTHROPIC: + case ModelProviderName.CLAUDE_VERTEX: + return await handleAnthropic(options); + case ModelProviderName.GROK: + return await handleGrok(options); + case ModelProviderName.GROQ: + return await handleGroq(options); + case ModelProviderName.LLAMALOCAL: + return await generateObjectDeprecated({ + runtime, + context, + modelClass, + }); + case ModelProviderName.GOOGLE: + return await handleGoogle(options); + case ModelProviderName.REDPILL: + return await handleRedPill(options); + case ModelProviderName.OPENROUTER: + return await handleOpenRouter(options); + case ModelProviderName.OLLAMA: + return await handleOllama(options); + default: { + const errorMessage = `Unsupported provider: ${provider}`; + elizaLogger.error(errorMessage); + throw new Error(errorMessage); + } + } +} +/** + * Handles object generation for OpenAI. + * + * @param {ProviderOptions} options - Options specific to OpenAI. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleOpenAI({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const baseURL = models.openai.endpoint || undefined; + const openai = createOpenAI({ apiKey, baseURL }); + return await aiGenerateObject({ + model: openai.languageModel(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Anthropic models. + * + * @param {ProviderOptions} options - Options specific to Anthropic. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleAnthropic({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const anthropic = createAnthropic({ apiKey }); + return await aiGenerateObject({ + model: anthropic.languageModel(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Grok models. + * + * @param {ProviderOptions} options - Options specific to Grok. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleGrok({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const grok = createOpenAI({ apiKey, baseURL: models.grok.endpoint }); + return await aiGenerateObject({ + model: grok.languageModel(model, { parallelToolCalls: false }), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Groq models. + * + * @param {ProviderOptions} options - Options specific to Groq. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleGroq({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const groq = createGroq({ apiKey }); + return await aiGenerateObject({ + model: groq.languageModel(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Google models. + * + * @param {ProviderOptions} options - Options specific to Google. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleGoogle({ + model, + apiKey: _apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const google = createGoogleGenerativeAI(); + return await aiGenerateObject({ + model: google(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Redpill models. + * + * @param {ProviderOptions} options - Options specific to Redpill. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleRedPill({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const redPill = createOpenAI({ apiKey, baseURL: models.redpill.endpoint }); + return await aiGenerateObject({ + model: redPill.languageModel(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for OpenRouter models. + * + * @param {ProviderOptions} options - Options specific to OpenRouter. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleOpenRouter({ + model, + apiKey, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, +}: ProviderOptions): Promise> { + const openRouter = createOpenAI({ + apiKey, + baseURL: models.openrouter.endpoint, + }); + return await aiGenerateObject({ + model: openRouter.languageModel(model), + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +/** + * Handles object generation for Ollama models. + * + * @param {ProviderOptions} options - Options specific to Ollama. + * @returns {Promise>} - A promise that resolves to generated objects. + */ +async function handleOllama({ + model, + schema, + schemaName, + schemaDescription, + mode, + modelOptions, + provider, +}: ProviderOptions): Promise> { + const ollamaProvider = createOllama({ + baseURL: models[provider].endpoint + "/api", + }); + const ollama = ollamaProvider(model); + return await aiGenerateObject({ + model: ollama, + schema, + schemaName, + schemaDescription, + mode, + ...modelOptions, + }); +} + +// Add type definition for Together AI response +interface TogetherAIImageResponse { + data: Array<{ + url: string; + content_type?: string; + image_type?: string; + }>; +} + +export async function generateTweetActions({ + runtime, + context, + modelClass, +}: { + runtime: IAgentRuntime; + context: string; + modelClass: string; +}): Promise { + let retryDelay = 1000; + while (true) { + try { + const response = await generateText({ + runtime, + context, + modelClass, + }); + console.debug( + "Received response from generateText for tweet actions:", + response + ); + const { actions } = parseActionResponseFromText(response.trim()); + if (actions) { + console.debug("Parsed tweet actions:", actions); + return actions; + } else { + elizaLogger.debug("generateTweetActions no valid response"); + } + } catch (error) { + elizaLogger.error("Error in generateTweetActions:", error); + if ( + error instanceof TypeError && + error.message.includes("queueTextCompletion") + ) { + elizaLogger.error( + "TypeError: Cannot read properties of null (reading 'queueTextCompletion')" + ); + } + } + elizaLogger.log(`Retrying in ${retryDelay}ms...`); + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + retryDelay *= 2; + } +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/goals.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/goals.ts new file mode 100644 index 000000000..17cfd5a24 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/goals.ts @@ -0,0 +1,63 @@ +import { + IAgentRuntime, + type Goal, + type Objective, + type UUID, +} from "./types.ts"; + +export const getGoals = async ({ + runtime, + roomId, + userId, + onlyInProgress = true, + count = 5, +}: { + runtime: IAgentRuntime; + roomId: UUID; + userId?: UUID; + onlyInProgress?: boolean; + count?: number; +}) => { + return runtime.databaseAdapter.getGoals({ + agentId: runtime.agentId, + roomId, + userId, + onlyInProgress, + count, + }); +}; + +export const formatGoalsAsString = ({ goals }: { goals: Goal[] }) => { + const goalStrings = goals.map((goal: Goal) => { + const header = `Goal: ${goal.name}\nid: ${goal.id}`; + const objectives = + "Objectives:\n" + + goal.objectives + .map((objective: Objective) => { + return `- ${objective.completed ? "[x]" : "[ ]"} ${objective.description} ${objective.completed ? " (DONE)" : " (IN PROGRESS)"}`; + }) + .join("\n"); + return `${header}\n${objectives}`; + }); + return goalStrings.join("\n"); +}; + +export const updateGoal = async ({ + runtime, + goal, +}: { + runtime: IAgentRuntime; + goal: Goal; +}) => { + return runtime.databaseAdapter.updateGoal(goal); +}; + +export const createGoal = async ({ + runtime, + goal, +}: { + runtime: IAgentRuntime; + goal: Goal; +}) => { + return runtime.databaseAdapter.createGoal(goal); +}; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/index.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/index.ts new file mode 100644 index 000000000..e2a7ee3a3 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/index.ts @@ -0,0 +1,24 @@ +export * from "./types.ts"; +export * from "./context.ts"; +export * from "./generation.ts"; +export * from "./memory.ts"; +export * from "./parsing.ts"; +export * from "./embedding.ts"; +export * from "./uuid.ts"; +export { default as knowledge } from "./knowledge.ts"; +export * from "./models.ts"; +export * from "./messages.ts"; +export * from "./goals.ts"; + +export const elizaLogger = console; +export const settings = { + SOL_ADDRESS: 'So11111111111111111111111111111111111111112', + SLIPPAGE: '1', +}; + +export const Action = {}; +export const HandlerCallback = {}; +export const IAgentRuntime = {}; +export const Memory = {}; +export const Plugin = {}; +export const State = {}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/knowledge.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/knowledge.ts new file mode 100644 index 000000000..96a78514c --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/knowledge.ts @@ -0,0 +1,154 @@ +import { AgentRuntime } from "./runtime.ts"; +import { embed, getEmbeddingZeroVector } from "./embedding.ts"; +import { KnowledgeItem, UUID, type Memory } from "./types.ts"; +import { stringToUuid } from "./uuid.ts"; +import { splitChunks } from "./generation.ts"; +import elizaLogger from "./logger.ts"; + +async function get( + runtime: AgentRuntime, + message: Memory +): Promise { + // Add validation for message + if (!message?.content?.text) { + elizaLogger.warn("Invalid message for knowledge query:", { + message, + content: message?.content, + text: message?.content?.text, + }); + return []; + } + + const processed = preprocess(message.content.text); + elizaLogger.debug("Knowledge query:", { + original: message.content.text, + processed, + length: processed?.length, + }); + + // Validate processed text + if (!processed || processed.trim().length === 0) { + elizaLogger.warn("Empty processed text for knowledge query"); + return []; + } + + const embedding = await embed(runtime, processed); + const fragments = await runtime.knowledgeManager.searchMemoriesByEmbedding( + embedding, + { + roomId: message.agentId, + count: 5, + match_threshold: 0.1, + } + ); + + const uniqueSources = [ + ...new Set( + fragments.map((memory) => { + elizaLogger.log( + `Matched fragment: ${memory.content.text} with similarity: ${memory.similarity}` + ); + return memory.content.source; + }) + ), + ]; + + const knowledgeDocuments = await Promise.all( + uniqueSources.map((source) => + runtime.documentsManager.getMemoryById(source as UUID) + ) + ); + + return knowledgeDocuments + .filter((memory) => memory !== null) + .map((memory) => ({ id: memory.id, content: memory.content })); +} + +async function set( + runtime: AgentRuntime, + item: KnowledgeItem, + chunkSize: number = 512, + bleed: number = 20 +) { + await runtime.documentsManager.createMemory({ + id: item.id, + agentId: runtime.agentId, + roomId: runtime.agentId, + userId: runtime.agentId, + createdAt: Date.now(), + content: item.content, + embedding: getEmbeddingZeroVector(), + }); + + const preprocessed = preprocess(item.content.text); + const fragments = await splitChunks(preprocessed, chunkSize, bleed); + + for (const fragment of fragments) { + const embedding = await embed(runtime, fragment); + await runtime.knowledgeManager.createMemory({ + // We namespace the knowledge base uuid to avoid id + // collision with the document above. + id: stringToUuid(item.id + fragment), + roomId: runtime.agentId, + agentId: runtime.agentId, + userId: runtime.agentId, + createdAt: Date.now(), + content: { + source: item.id, + text: fragment, + }, + embedding, + }); + } +} + +export function preprocess(content: string): string { + elizaLogger.debug("Preprocessing text:", { + input: content, + length: content?.length, + }); + + if (!content || typeof content !== "string") { + elizaLogger.warn("Invalid input for preprocessing"); + return ""; + } + + return ( + content + // Remove code blocks and their content + .replace(/```[\s\S]*?```/g, "") + // Remove inline code + .replace(/`.*?`/g, "") + // Convert headers to plain text with emphasis + .replace(/#{1,6}\s*(.*)/g, "$1") + // Remove image links but keep alt text + .replace(/!\[(.*?)\]\(.*?\)/g, "$1") + // Remove links but keep text + .replace(/\[(.*?)\]\(.*?\)/g, "$1") + // Simplify URLs: remove protocol and simplify to domain+path + .replace(/(https?:\/\/)?(www\.)?([^\s]+\.[^\s]+)/g, "$3") + // Remove Discord mentions specifically + .replace(/<@[!&]?\d+>/g, "") + // Remove HTML tags + .replace(/<[^>]*>/g, "") + // Remove horizontal rules + .replace(/^\s*[-*_]{3,}\s*$/gm, "") + // Remove comments + .replace(/\/\*[\s\S]*?\*\//g, "") + .replace(/\/\/.*/g, "") + // Normalize whitespace + .replace(/\s+/g, " ") + // Remove multiple newlines + .replace(/\n{3,}/g, "\n\n") + // Remove special characters except those common in URLs + .replace(/[^a-zA-Z0-9\s\-_./:?=&]/g, "") + .trim() + .toLowerCase() + ); +} + +export default { + get, + set, + preprocess, +}; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/logger.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/logger.ts new file mode 100644 index 000000000..70b4a4899 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/logger.ts @@ -0,0 +1,271 @@ +class ElizaLogger { + constructor() { + // Check if we're in Node.js environment + this.isNode = + typeof process !== "undefined" && + process.versions != null && + process.versions.node != null; + + // Set verbose based on environment + this.verbose = this.isNode ? process.env.VERBOSE === "true" : false; + + // Add initialization logging + console.log(`[ElizaLogger] Initializing with: + isNode: ${this.isNode} + verbose: ${this.verbose} + VERBOSE env: ${process.env.VERBOSE} + NODE_ENV: ${process.env.NODE_ENV} + `); + } + + private isNode: boolean; + verbose = false; + closeByNewLine = true; + useIcons = true; + logsTitle = "LOGS"; + warningsTitle = "WARNINGS"; + errorsTitle = "ERRORS"; + informationsTitle = "INFORMATIONS"; + successesTitle = "SUCCESS"; + debugsTitle = "DEBUG"; + assertsTitle = "ASSERT"; + + #getColor(foregroundColor = "", backgroundColor = "") { + if (!this.isNode) { + // Browser console styling + const colors: { [key: string]: string } = { + black: "#000000", + red: "#ff0000", + green: "#00ff00", + yellow: "#ffff00", + blue: "#0000ff", + magenta: "#ff00ff", + cyan: "#00ffff", + white: "#ffffff", + }; + + const fg = colors[foregroundColor.toLowerCase()] || colors.white; + const bg = colors[backgroundColor.toLowerCase()] || "transparent"; + return `color: ${fg}; background: ${bg};`; + } + + // Node.js console colors + let fgc = "\x1b[37m"; + switch (foregroundColor.trim().toLowerCase()) { + case "black": + fgc = "\x1b[30m"; + break; + case "red": + fgc = "\x1b[31m"; + break; + case "green": + fgc = "\x1b[32m"; + break; + case "yellow": + fgc = "\x1b[33m"; + break; + case "blue": + fgc = "\x1b[34m"; + break; + case "magenta": + fgc = "\x1b[35m"; + break; + case "cyan": + fgc = "\x1b[36m"; + break; + case "white": + fgc = "\x1b[37m"; + break; + } + + let bgc = ""; + switch (backgroundColor.trim().toLowerCase()) { + case "black": + bgc = "\x1b[40m"; + break; + case "red": + bgc = "\x1b[44m"; + break; + case "green": + bgc = "\x1b[44m"; + break; + case "yellow": + bgc = "\x1b[43m"; + break; + case "blue": + bgc = "\x1b[44m"; + break; + case "magenta": + bgc = "\x1b[45m"; + break; + case "cyan": + bgc = "\x1b[46m"; + break; + case "white": + bgc = "\x1b[47m"; + break; + } + + return `${fgc}${bgc}`; + } + + #getColorReset() { + return this.isNode ? "\x1b[0m" : ""; + } + + clear() { + console.clear(); + } + + print(foregroundColor = "white", backgroundColor = "black", ...strings) { + // Convert objects to strings + const processedStrings = strings.map((item) => { + if (typeof item === "object") { + return JSON.stringify(item, (key, value) => + typeof value === "bigint" ? value.toString() : value + ); + } + return item; + }); + + if (this.isNode) { + const c = this.#getColor(foregroundColor, backgroundColor); + console.log(c, processedStrings.join(""), this.#getColorReset()); + } else { + const style = this.#getColor(foregroundColor, backgroundColor); + console.log(`%c${processedStrings.join("")}`, style); + } + + if (this.closeByNewLine) console.log(""); + } + + #logWithStyle( + strings: any[], + options: { + fg: string; + bg: string; + icon: string; + groupTitle: string; + } + ) { + const { fg, bg, icon, groupTitle } = options; + + if (strings.length > 1) { + if (this.isNode) { + const c = this.#getColor(fg, bg); + console.group(c, (this.useIcons ? icon : "") + groupTitle); + } else { + const style = this.#getColor(fg, bg); + console.group( + `%c${this.useIcons ? icon : ""}${groupTitle}`, + style + ); + } + + const nl = this.closeByNewLine; + this.closeByNewLine = false; + strings.forEach((item) => { + this.print(fg, bg, item); + }); + this.closeByNewLine = nl; + console.groupEnd(); + if (nl) console.log(); + } else { + this.print( + fg, + bg, + strings.map((item) => { + return `${this.useIcons ? `${icon} ` : ""}${item}`; + }) + ); + } + } + + log(...strings) { + this.#logWithStyle(strings, { + fg: "white", + bg: "", + icon: "\u25ce", + groupTitle: ` ${this.logsTitle}`, + }); + } + + warn(...strings) { + this.#logWithStyle(strings, { + fg: "yellow", + bg: "", + icon: "\u26a0", + groupTitle: ` ${this.warningsTitle}`, + }); + } + + error(...strings) { + this.#logWithStyle(strings, { + fg: "red", + bg: "", + icon: "\u26D4", + groupTitle: ` ${this.errorsTitle}`, + }); + } + + info(...strings) { + this.#logWithStyle(strings, { + fg: "blue", + bg: "", + icon: "\u2139", + groupTitle: ` ${this.informationsTitle}`, + }); + } + + debug(...strings) { + if (!this.verbose) { + // for diagnosing verbose logging issues + // console.log( + // "[ElizaLogger] Debug message suppressed (verbose=false):", + // ...strings + // ); + return; + } + this.#logWithStyle(strings, { + fg: "magenta", + bg: "", + icon: "\u1367", + groupTitle: ` ${this.debugsTitle}`, + }); + } + + success(...strings) { + this.#logWithStyle(strings, { + fg: "green", + bg: "", + icon: "\u2713", + groupTitle: ` ${this.successesTitle}`, + }); + } + + assert(...strings) { + this.#logWithStyle(strings, { + fg: "cyan", + bg: "", + icon: "\u0021", + groupTitle: ` ${this.assertsTitle}`, + }); + } + + progress(message: string) { + if (this.isNode) { + // Clear the current line and move cursor to beginning + process.stdout.clearLine(0); + process.stdout.cursorTo(0); + process.stdout.write(message); + } else { + console.log(message); + } + } +} + +export const elizaLogger = new ElizaLogger(); +elizaLogger.closeByNewLine = true; +elizaLogger.useIcons = true; + +export default elizaLogger; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/memory.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/memory.ts new file mode 100644 index 000000000..00baad449 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/memory.ts @@ -0,0 +1,243 @@ +// import { embed, getEmbeddingZeroVector } from "./embedding.ts"; +import elizaLogger from "./logger.ts"; +import { + IAgentRuntime, + IMemoryManager, + type Memory, + type UUID, +} from "./types.ts"; + +const defaultMatchThreshold = 0.1; +const defaultMatchCount = 10; + +/** + * Manage memories in the database. + */ +export class MemoryManager implements IMemoryManager { + /** + * The AgentRuntime instance associated with this manager. + */ + runtime: IAgentRuntime; + + /** + * The name of the database table this manager operates on. + */ + tableName: string; + + /** + * Constructs a new MemoryManager instance. + * @param opts Options for the manager. + * @param opts.tableName The name of the table this manager will operate on. + * @param opts.runtime The AgentRuntime instance associated with this manager. + */ + constructor(opts: { tableName: string; runtime: IAgentRuntime }) { + this.runtime = opts.runtime; + this.tableName = opts.tableName; + } + + /** + * Adds an embedding vector to a memory object. If the memory already has an embedding, it is returned as is. + * @param memory The memory object to add an embedding to. + * @returns A Promise resolving to the memory object, potentially updated with an embedding vector. + */ + /** + * Adds an embedding vector to a memory object if one doesn't already exist. + * The embedding is generated from the memory's text content using the runtime's + * embedding model. If the memory has no text content, an error is thrown. + * + * @param memory The memory object to add an embedding to + * @returns The memory object with an embedding vector added + * @throws Error if the memory content is empty + */ + async addEmbeddingToMemory(memory: Memory): Promise { + // Return early if embedding already exists + if (memory.embedding) { + return memory; + } + + const memoryText = memory.content.text; + + // Validate memory has text content + if (!memoryText) { + throw new Error( + "Cannot generate embedding: Memory content is empty" + ); + } + + try { + // Generate embedding from text content + memory.embedding = await embed(this.runtime, memoryText); + } catch (error) { + elizaLogger.error("Failed to generate embedding:", error); + // Fallback to zero vector if embedding fails + memory.embedding = getEmbeddingZeroVector().slice(); + } + + return memory; + } + + /** + * Retrieves a list of memories by user IDs, with optional deduplication. + * @param opts Options including user IDs, count, and uniqueness. + * @param opts.roomId The room ID to retrieve memories for. + * @param opts.count The number of memories to retrieve. + * @param opts.unique Whether to retrieve unique memories only. + * @returns A Promise resolving to an array of Memory objects. + */ + async getMemories({ + roomId, + count = 10, + unique = true, + start, + end, + }: { + roomId: UUID; + count?: number; + unique?: boolean; + start?: number; + end?: number; + }): Promise { + return await this.runtime.databaseAdapter.getMemories({ + roomId, + count, + unique, + tableName: this.tableName, + agentId: this.runtime.agentId, + start, + end, + }); + } + + async getCachedEmbeddings(content: string): Promise< + { + embedding: number[]; + levenshtein_score: number; + }[] + > { + return await this.runtime.databaseAdapter.getCachedEmbeddings({ + query_table_name: this.tableName, + query_threshold: 2, + query_input: content, + query_field_name: "content", + query_field_sub_name: "text", + query_match_count: 10, + }); + } + + /** + * Searches for memories similar to a given embedding vector. + * @param embedding The embedding vector to search with. + * @param opts Options including match threshold, count, user IDs, and uniqueness. + * @param opts.match_threshold The similarity threshold for matching memories. + * @param opts.count The maximum number of memories to retrieve. + * @param opts.roomId The room ID to retrieve memories for. + * @param opts.unique Whether to retrieve unique memories only. + * @returns A Promise resolving to an array of Memory objects that match the embedding. + */ + async searchMemoriesByEmbedding( + embedding: number[], + opts: { + match_threshold?: number; + count?: number; + roomId: UUID; + unique?: boolean; + } + ): Promise { + const { + match_threshold = defaultMatchThreshold, + count = defaultMatchCount, + roomId, + unique, + } = opts; + + const result = await this.runtime.databaseAdapter.searchMemories({ + tableName: this.tableName, + roomId, + agentId: this.runtime.agentId, + embedding: embedding, + match_threshold: match_threshold, + match_count: count, + unique: !!unique, + }); + + return result; + } + + /** + * Creates a new memory in the database, with an option to check for similarity before insertion. + * @param memory The memory object to create. + * @param unique Whether to check for similarity before insertion. + * @returns A Promise that resolves when the operation completes. + */ + async createMemory(memory: Memory, unique = false): Promise { + // TODO: check memory.agentId == this.runtime.agentId + + const existingMessage = + await this.runtime.databaseAdapter.getMemoryById(memory.id); + + if (existingMessage) { + elizaLogger.debug("Memory already exists, skipping"); + return; + } + + elizaLogger.log("Creating Memory", memory.id, memory.content.text); + + await this.runtime.databaseAdapter.createMemory( + memory, + this.tableName, + unique + ); + } + + async getMemoriesByRoomIds(params: { roomIds: UUID[] }): Promise { + return await this.runtime.databaseAdapter.getMemoriesByRoomIds({ + tableName: this.tableName, + agentId: this.runtime.agentId, + roomIds: params.roomIds, + }); + } + + async getMemoryById(id: UUID): Promise { + const result = await this.runtime.databaseAdapter.getMemoryById(id); + if (result && result.agentId !== this.runtime.agentId) return null; + return result; + } + + /** + * Removes a memory from the database by its ID. + * @param memoryId The ID of the memory to remove. + * @returns A Promise that resolves when the operation completes. + */ + async removeMemory(memoryId: UUID): Promise { + await this.runtime.databaseAdapter.removeMemory( + memoryId, + this.tableName + ); + } + + /** + * Removes all memories associated with a set of user IDs. + * @param roomId The room ID to remove memories for. + * @returns A Promise that resolves when the operation completes. + */ + async removeAllMemories(roomId: UUID): Promise { + await this.runtime.databaseAdapter.removeAllMemories( + roomId, + this.tableName + ); + } + + /** + * Counts the number of memories associated with a set of user IDs, with an option for uniqueness. + * @param roomId The room ID to count memories for. + * @param unique Whether to count unique memories only. + * @returns A Promise resolving to the count of memories. + */ + async countMemories(roomId: UUID, unique = true): Promise { + return await this.runtime.databaseAdapter.countMemories( + roomId, + unique, + this.tableName + ); + } +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/messages.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/messages.ts new file mode 100644 index 000000000..b098198c4 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/messages.ts @@ -0,0 +1,113 @@ +import { + IAgentRuntime, + type Actor, + type Content, + type Memory, + type UUID, +} from "./types.ts"; + +/** + * Get details for a list of actors. + */ +export async function getActorDetails({ + runtime, + roomId, +}: { + runtime: IAgentRuntime; + roomId: UUID; +}) { + const participantIds = + await runtime.databaseAdapter.getParticipantsForRoom(roomId); + const actors = await Promise.all( + participantIds.map(async (userId) => { + const account = + await runtime.databaseAdapter.getAccountById(userId); + if (account) { + return { + id: account.id, + name: account.name, + username: account.username, + details: account.details, + }; + } + return null; + }) + ); + + return actors.filter((actor): actor is Actor => actor !== null); +} + +/** + * Format actors into a string + * @param actors - list of actors + * @returns string + */ +export function formatActors({ actors }: { actors: Actor[] }) { + const actorStrings = actors.map((actor: Actor) => { + const header = `${actor.name}${actor.details?.tagline ? ": " + actor.details?.tagline : ""}${actor.details?.summary ? "\n" + actor.details?.summary : ""}`; + return header; + }); + const finalActorStrings = actorStrings.join("\n"); + return finalActorStrings; +} + +/** + * Format messages into a string + * @param messages - list of messages + * @param actors - list of actors + * @returns string + */ +export const formatMessages = ({ + messages, + actors, +}: { + messages: Memory[]; + actors: Actor[]; +}) => { + const messageStrings = messages + .reverse() + .filter((message: Memory) => message.userId) + .map((message: Memory) => { + const messageContent = (message.content as Content).text; + const messageAction = (message.content as Content).action; + const formattedName = + actors.find((actor: Actor) => actor.id === message.userId) + ?.name || "Unknown User"; + + const attachments = (message.content as Content).attachments; + + const attachmentString = + attachments && attachments.length > 0 + ? ` (Attachments: ${attachments.map((media) => `[${media.id} - ${media.title} (${media.url})]`).join(", ")})` + : ""; + + const timestamp = formatTimestamp(message.createdAt); + + const shortId = message.userId.slice(-5); + + return `(${timestamp}) [${shortId}] ${formattedName}: ${messageContent}${attachmentString}${messageAction && messageAction !== "null" ? ` (${messageAction})` : ""}`; + }) + .join("\n"); + return messageStrings; +}; + +export const formatTimestamp = (messageDate: number) => { + const now = new Date(); + const diff = now.getTime() - messageDate; + + const absDiff = Math.abs(diff); + const seconds = Math.floor(absDiff / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (absDiff < 60000) { + return "just now"; + } else if (minutes < 60) { + return `${minutes} minute${minutes !== 1 ? "s" : ""} ago`; + } else if (hours < 24) { + return `${hours} hour${hours !== 1 ? "s" : ""} ago`; + } else { + return `${days} day${days !== 1 ? "s" : ""} ago`; + } +}; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/models.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/models.ts new file mode 100644 index 000000000..760953342 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/models.ts @@ -0,0 +1,514 @@ +import settings from "./settings.ts"; +import { Models, ModelProviderName, ModelClass } from "./types.ts"; + +export const models: Models = { + [ModelProviderName.OPENAI]: { + endpoint: settings.OPENAI_API_URL || "https://api.openai.com/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: settings.SMALL_OPENAI_MODEL || "gpt-4o-mini", + [ModelClass.MEDIUM]: settings.MEDIUM_OPENAI_MODEL || "gpt-4o", + [ModelClass.LARGE]: settings.LARGE_OPENAI_MODEL || "gpt-4o", + [ModelClass.EMBEDDING]: settings.EMBEDDING_OPENAI_MODEL || "text-embedding-3-small", + [ModelClass.IMAGE]: settings.IMAGE_OPENAI_MODEL || "dall-e-3", + }, + }, + [ModelProviderName.ETERNALAI]: { + endpoint: settings.ETERNALAI_URL, + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: + settings.ETERNALAI_MODEL || + "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16", + [ModelClass.MEDIUM]: + settings.ETERNALAI_MODEL || + "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16", + [ModelClass.LARGE]: + settings.ETERNALAI_MODEL || + "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16", + [ModelClass.EMBEDDING]: "", + [ModelClass.IMAGE]: "", + }, + }, + [ModelProviderName.ANTHROPIC]: { + settings: { + stop: [], + maxInputTokens: 200000, + maxOutputTokens: 4096, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + endpoint: "https://api.anthropic.com/v1", + model: { + [ModelClass.SMALL]: settings.SMALL_ANTHROPIC_MODEL || "claude-3-haiku-20240307", + [ModelClass.MEDIUM]: settings.MEDIUM_ANTHROPIC_MODEL || "claude-3-5-sonnet-20241022", + [ModelClass.LARGE]: settings.LARGE_ANTHROPIC_MODEL || "claude-3-5-sonnet-20241022", + }, + }, + [ModelProviderName.CLAUDE_VERTEX]: { + settings: { + stop: [], + maxInputTokens: 200000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + endpoint: "https://api.anthropic.com/v1", // TODO: check + model: { + [ModelClass.SMALL]: "claude-3-5-sonnet-20241022", + [ModelClass.MEDIUM]: "claude-3-5-sonnet-20241022", + [ModelClass.LARGE]: "claude-3-opus-20240229", + }, + }, + [ModelProviderName.GROK]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + endpoint: "https://api.x.ai/v1", + model: { + [ModelClass.SMALL]: settings.SMALL_GROK_MODEL || "grok-2-1212", + [ModelClass.MEDIUM]: settings.MEDIUM_GROK_MODEL || "grok-2-1212", + [ModelClass.LARGE]: settings.LARGE_GROK_MODEL || "grok-2-1212", + [ModelClass.EMBEDDING]: settings.EMBEDDING_GROK_MODEL || "grok-2-1212", // not sure about this one + }, + }, + [ModelProviderName.GROQ]: { + endpoint: "https://api.groq.com/openai/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8000, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + model: { + [ModelClass.SMALL]: + settings.SMALL_GROQ_MODEL || "llama-3.1-8b-instant", + [ModelClass.MEDIUM]: + settings.MEDIUM_GROQ_MODEL || "llama-3.3-70b-versatile", + [ModelClass.LARGE]: + settings.LARGE_GROQ_MODEL || "llama-3.2-90b-vision-preview", + [ModelClass.EMBEDDING]: + settings.EMBEDDING_GROQ_MODEL || "llama-3.1-8b-instant", + }, + }, + [ModelProviderName.LLAMACLOUD]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + imageSettings: { + steps: 4, + }, + endpoint: "https://api.llamacloud.com/v1", + model: { + [ModelClass.SMALL]: "meta-llama/Llama-3.2-3B-Instruct-Turbo", + [ModelClass.MEDIUM]: "meta-llama-3.1-8b-instruct", + [ModelClass.LARGE]: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", + [ModelClass.EMBEDDING]: + "togethercomputer/m2-bert-80M-32k-retrieval", + [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell", + }, + }, + [ModelProviderName.TOGETHER]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + imageSettings: { + steps: 4, + }, + endpoint: "https://api.together.ai/v1", + model: { + [ModelClass.SMALL]: "meta-llama/Llama-3.2-3B-Instruct-Turbo", + [ModelClass.MEDIUM]: "meta-llama-3.1-8b-instruct", + [ModelClass.LARGE]: "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo", + [ModelClass.EMBEDDING]: + "togethercomputer/m2-bert-80M-32k-retrieval", + [ModelClass.IMAGE]: "black-forest-labs/FLUX.1-schnell", + }, + }, + [ModelProviderName.LLAMALOCAL]: { + settings: { + stop: ["<|eot_id|>", "<|eom_id|>"], + maxInputTokens: 32768, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + model: { + [ModelClass.SMALL]: + "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", + [ModelClass.MEDIUM]: + "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", // TODO: ?download=true + [ModelClass.LARGE]: + "NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true", + // "RichardErkhov/NousResearch_-_Meta-Llama-3.1-70B-gguf", // TODO: + [ModelClass.EMBEDDING]: + "togethercomputer/m2-bert-80M-32k-retrieval", + }, + }, + [ModelProviderName.GOOGLE]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + model: { + [ModelClass.SMALL]: + settings.SMALL_GOOGLE_MODEL || + settings.GOOGLE_MODEL || + "gemini-1.5-flash-latest", + [ModelClass.MEDIUM]: + settings.MEDIUM_GOOGLE_MODEL || + settings.GOOGLE_MODEL || + "gemini-1.5-flash-latest", + [ModelClass.LARGE]: + settings.LARGE_GOOGLE_MODEL || + settings.GOOGLE_MODEL || + "gemini-1.5-pro-latest", + [ModelClass.EMBEDDING]: + settings.EMBEDDING_GOOGLE_MODEL || + settings.GOOGLE_MODEL || + "text-embedding-004", + }, + }, + [ModelProviderName.REDPILL]: { + endpoint: "https://api.red-pill.ai/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.6, + }, + // Available models: https://docs.red-pill.ai/get-started/supported-models + // To test other models, change the models below + model: { + [ModelClass.SMALL]: + settings.SMALL_REDPILL_MODEL || + settings.REDPILL_MODEL || + "gpt-4o-mini", + [ModelClass.MEDIUM]: + settings.MEDIUM_REDPILL_MODEL || + settings.REDPILL_MODEL || + "gpt-4o", + [ModelClass.LARGE]: + settings.LARGE_REDPILL_MODEL || + settings.REDPILL_MODEL || + "gpt-4o", + [ModelClass.EMBEDDING]: "text-embedding-3-small", + }, + }, + [ModelProviderName.OPENROUTER]: { + endpoint: "https://openrouter.ai/api/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + // Available models: https://openrouter.ai/models + // To test other models, change the models below + model: { + [ModelClass.SMALL]: + settings.SMALL_OPENROUTER_MODEL || + settings.OPENROUTER_MODEL || + "nousresearch/hermes-3-llama-3.1-405b", + [ModelClass.MEDIUM]: + settings.MEDIUM_OPENROUTER_MODEL || + settings.OPENROUTER_MODEL || + "nousresearch/hermes-3-llama-3.1-405b", + [ModelClass.LARGE]: + settings.LARGE_OPENROUTER_MODEL || + settings.OPENROUTER_MODEL || + "nousresearch/hermes-3-llama-3.1-405b", + [ModelClass.EMBEDDING]: "text-embedding-3-small", + }, + }, + [ModelProviderName.OLLAMA]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.7, + }, + endpoint: settings.OLLAMA_SERVER_URL || "http://localhost:11434", + model: { + [ModelClass.SMALL]: + settings.SMALL_OLLAMA_MODEL || + settings.OLLAMA_MODEL || + "llama3.2", + [ModelClass.MEDIUM]: + settings.MEDIUM_OLLAMA_MODEL || + settings.OLLAMA_MODEL || + "hermes3", + [ModelClass.LARGE]: + settings.LARGE_OLLAMA_MODEL || + settings.OLLAMA_MODEL || + "hermes3:70b", + [ModelClass.EMBEDDING]: + settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large", + }, + }, + [ModelProviderName.HEURIST]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + imageSettings: { + steps: 20, + }, + endpoint: "https://llm-gateway.heurist.xyz", + model: { + [ModelClass.SMALL]: + settings.SMALL_HEURIST_MODEL || + "meta-llama/llama-3-70b-instruct", + [ModelClass.MEDIUM]: + settings.MEDIUM_HEURIST_MODEL || + "meta-llama/llama-3-70b-instruct", + [ModelClass.LARGE]: + settings.LARGE_HEURIST_MODEL || + "meta-llama/llama-3.1-405b-instruct", + [ModelClass.EMBEDDING]: "", //Add later, + [ModelClass.IMAGE]: settings.HEURIST_IMAGE_MODEL || "PepeXL", + }, + }, + [ModelProviderName.GALADRIEL]: { + endpoint: "https://api.galadriel.com/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.5, + presence_penalty: 0.5, + temperature: 0.8, + }, + model: { + [ModelClass.SMALL]: "llama3.1:70b", + [ModelClass.MEDIUM]: "llama3.1:70b", + [ModelClass.LARGE]: "llama3.1:405b", + [ModelClass.EMBEDDING]: "gte-large-en-v1.5", + [ModelClass.IMAGE]: "stabilityai/stable-diffusion-xl-base-1.0", + }, + }, + [ModelProviderName.FAL]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + imageSettings: { + steps: 28, + }, + endpoint: "https://api.fal.ai/v1", + model: { + [ModelClass.SMALL]: "", // FAL doesn't provide text models + [ModelClass.MEDIUM]: "", + [ModelClass.LARGE]: "", + [ModelClass.EMBEDDING]: "", + [ModelClass.IMAGE]: "fal-ai/flux-lora", + }, + }, + [ModelProviderName.GAIANET]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + endpoint: settings.GAIANET_SERVER_URL, + model: { + [ModelClass.SMALL]: + settings.GAIANET_MODEL || + settings.SMALL_GAIANET_MODEL || + "llama3b", + [ModelClass.MEDIUM]: + settings.GAIANET_MODEL || + settings.MEDIUM_GAIANET_MODEL || + "llama", + [ModelClass.LARGE]: + settings.GAIANET_MODEL || + settings.LARGE_GAIANET_MODEL || + "qwen72b", + [ModelClass.EMBEDDING]: + settings.GAIANET_EMBEDDING_MODEL || "nomic-embed", + }, + }, + [ModelProviderName.ALI_BAILIAN]: { + endpoint: "https://dashscope.aliyuncs.com/compatible-mode/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: "qwen-turbo", + [ModelClass.MEDIUM]: "qwen-plus", + [ModelClass.LARGE]: "qwen-max", + [ModelClass.IMAGE]: "wanx-v1", + }, + }, + [ModelProviderName.VOLENGINE]: { + endpoint: "https://open.volcengineapi.com/api/v3/", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.4, + presence_penalty: 0.4, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: "doubao-lite-128k", + [ModelClass.MEDIUM]: "doubao-pro-128k", + [ModelClass.LARGE]: "doubao-pro-128k", + [ModelClass.EMBEDDING]: "doubao-embedding", + }, + }, + [ModelProviderName.NANOGPT]: { + endpoint: "https://nano-gpt.com/api/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + frequency_penalty: 0.0, + presence_penalty: 0.0, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: settings.SMALL_NANOGPT_MODEL || "gpt-4o-mini", + [ModelClass.MEDIUM]: settings.MEDIUM_NANOGPT_MODEL || "gpt-4o", + [ModelClass.LARGE]: settings.LARGE_NANOGPT_MODEL || "gpt-4o", + } + }, + [ModelProviderName.HYPERBOLIC]: { + endpoint: "https://api.hyperbolic.xyz/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: + settings.SMALL_HYPERBOLIC_MODEL || + settings.HYPERBOLIC_MODEL || + "meta-llama/Llama-3.2-3B-Instruct", + [ModelClass.MEDIUM]: + settings.MEDIUM_HYPERBOLIC_MODEL || + settings.HYPERBOLIC_MODEL || + "meta-llama/Meta-Llama-3.1-70B-Instruct", + [ModelClass.LARGE]: + settings.LARGE_HYPERBOLIC_MODEL || + settings.HYPERBOLIC_MODEL || + "meta-llama/Meta-Llama-3.1-405-Instruct", + [ModelClass.IMAGE]: settings.IMAGE_HYPERBOLIC_MODEL || "FLUX.1-dev", + }, + }, + [ModelProviderName.VENICE]: { + endpoint: "https://api.venice.ai/api/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: settings.SMALL_VENICE_MODEL || "llama-3.3-70b", + [ModelClass.MEDIUM]: settings.MEDIUM_VENICE_MODEL || "llama-3.3-70b", + [ModelClass.LARGE]: settings.LARGE_VENICE_MODEL || "llama-3.1-405b", + [ModelClass.IMAGE]: settings.IMAGE_VENICE_MODEL || "fluently-xl", + }, + }, + [ModelProviderName.AKASH_CHAT_API]: { + endpoint: "https://chatapi.akash.network/api/v1", + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + temperature: 0.6, + }, + model: { + [ModelClass.SMALL]: + settings.SMALL_AKASH_CHAT_API_MODEL || + "Meta-Llama-3-2-3B-Instruct", + [ModelClass.MEDIUM]: + settings.MEDIUM_AKASH_CHAT_API_MODEL || + "Meta-Llama-3-3-70B-Instruct", + [ModelClass.LARGE]: + settings.LARGE_AKASH_CHAT_API_MODEL || + "Meta-Llama-3-1-405B-Instruct-FP8", + }, + }, + [ModelProviderName.LIVEPEER]: { + settings: { + stop: [], + maxInputTokens: 128000, + maxOutputTokens: 8192, + repetition_penalty: 0.4, + temperature: 0.7, + }, + // livepeer endpoint is handled from the sdk + model: { + [ModelClass.SMALL]: "", + [ModelClass.MEDIUM]: "", + [ModelClass.LARGE]: "", + [ModelClass.EMBEDDING]: "", + [ModelClass.IMAGE]: settings.LIVEPEER_IMAGE_MODEL || "ByteDance/SDXL-Lightning", + }, + }, +}; + +export function getModel(provider: ModelProviderName, type: ModelClass) { + return models[provider].model[type]; +} + +export function getEndpoint(provider: ModelProviderName) { + return models[provider].endpoint; +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/package.json b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/package.json new file mode 100644 index 000000000..3be9585ee --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/package.json @@ -0,0 +1,31 @@ +{ + "name": "@elizaos/core", + "main": "index.ts", + "dependencies": { + "@ai-sdk/anthropic": "0.0.56", + "@ai-sdk/google": "0.0.55", + "@ai-sdk/google-vertex": "0.0.43", + "@ai-sdk/groq": "0.0.3", + "@ai-sdk/openai": "1.0.5", + "@anthropic-ai/sdk": "0.30.1", + "@fal-ai/client": "1.2.0", + "@solana/web3.js": "1.95.8", + "@types/uuid": "10.0.0", + "ai": "3.4.33", + "anthropic-vertex-ai": "1.0.2", + "fastestsmallesttextencoderdecoder": "1.0.22", + "gaxios": "6.7.1", + "glob": "11.0.0", + "handlebars": "^4.7.8", + "js-sha1": "0.7.0", + "js-tiktoken": "1.0.15", + "langchain": "0.3.6", + "ollama-ai-provider": "0.16.1", + "openai": "4.73.0", + "tinyld": "1.3.4", + "together-ai": "0.7.0", + "unique-names-generator": "4.7.1", + "uuid": "11.0.3", + "zod": "3.23.8" + } +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/parsing.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/parsing.ts new file mode 100644 index 000000000..107ce8ea0 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/parsing.ts @@ -0,0 +1,207 @@ +import { ActionResponse } from "./types.ts"; +const jsonBlockPattern = /```json\n([\s\S]*?)\n```/; + +export const messageCompletionFooter = `\nResponse format should be formatted in a JSON block like this: +\`\`\`json +{ "user": "{{agentName}}", "text": "string", "action": "string" } +\`\`\``; + +export const shouldRespondFooter = `The available options are [RESPOND], [IGNORE], or [STOP]. Choose the most appropriate option. +If {{agentName}} is talking too much, you can choose [IGNORE] + +Your response must include one of the options.`; + +export const parseShouldRespondFromText = ( + text: string +): "RESPOND" | "IGNORE" | "STOP" | null => { + const match = text + .split("\n")[0] + .trim() + .replace("[", "") + .toUpperCase() + .replace("]", "") + .match(/^(RESPOND|IGNORE|STOP)$/i); + return match + ? (match[0].toUpperCase() as "RESPOND" | "IGNORE" | "STOP") + : text.includes("RESPOND") + ? "RESPOND" + : text.includes("IGNORE") + ? "IGNORE" + : text.includes("STOP") + ? "STOP" + : null; +}; + +export const booleanFooter = `Respond with only a YES or a NO.`; + +/** + * Parses a string to determine its boolean equivalent. + * + * Recognized affirmative values: "YES", "Y", "TRUE", "T", "1", "ON", "ENABLE". + * Recognized negative values: "NO", "N", "FALSE", "F", "0", "OFF", "DISABLE". + * + * @param {string} text - The input text to parse. + * @returns {boolean|null} - Returns `true` for affirmative inputs, `false` for negative inputs, and `null` for unrecognized inputs or null/undefined. + */ +export const parseBooleanFromText = (text: string) => { + if (!text) return null; // Handle null or undefined input + + const affirmative = ["YES", "Y", "TRUE", "T", "1", "ON", "ENABLE"]; + const negative = ["NO", "N", "FALSE", "F", "0", "OFF", "DISABLE"]; + + const normalizedText = text.trim().toUpperCase(); + + if (affirmative.includes(normalizedText)) { + return true; + } else if (negative.includes(normalizedText)) { + return false; + } + + return null; // Return null for unrecognized inputs +}; + +export const stringArrayFooter = `Respond with a JSON array containing the values in a JSON block formatted for markdown with this structure: +\`\`\`json +[ + 'value', + 'value' +] +\`\`\` + +Your response must include the JSON block.`; + +/** + * Parses a JSON array from a given text. The function looks for a JSON block wrapped in triple backticks + * with `json` language identifier, and if not found, it searches for an array pattern within the text. + * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result + * is an array, it returns the array; otherwise, it returns null. + * + * @param text - The input text from which to extract and parse the JSON array. + * @returns An array parsed from the JSON string if successful; otherwise, null. + */ +export function parseJsonArrayFromText(text: string) { + let jsonData = null; + + // First try to parse with the original JSON format + const jsonBlockMatch = text.match(jsonBlockPattern); + + if (jsonBlockMatch) { + try { + // Replace single quotes with double quotes before parsing + const normalizedJson = jsonBlockMatch[1].replace(/'/g, '"'); + jsonData = JSON.parse(normalizedJson); + } catch (e) { + console.error("Error parsing JSON:", e); + } + } + + // If that fails, try to find an array pattern + if (!jsonData) { + const arrayPattern = /\[\s*['"][^'"]*['"]\s*\]/; + const arrayMatch = text.match(arrayPattern); + + if (arrayMatch) { + try { + // Replace single quotes with double quotes before parsing + const normalizedJson = arrayMatch[0].replace(/'/g, '"'); + jsonData = JSON.parse(normalizedJson); + } catch (e) { + console.error("Error parsing JSON:", e); + } + } + } + + if (Array.isArray(jsonData)) { + return jsonData; + } + + return null; +} + +/** + * Parses a JSON object from a given text. The function looks for a JSON block wrapped in triple backticks + * with `json` language identifier, and if not found, it searches for an object pattern within the text. + * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result + * is an object (but not an array), it returns the object; otherwise, it tries to parse an array if the result + * is an array, or returns null if parsing is unsuccessful or the result is neither an object nor an array. + * + * @param text - The input text from which to extract and parse the JSON object. + * @returns An object parsed from the JSON string if successful; otherwise, null or the result of parsing an array. + */ +export function parseJSONObjectFromText( + text: string +): Record | null { + let jsonData = null; + + const jsonBlockMatch = text.match(jsonBlockPattern); + + if (jsonBlockMatch) { + try { + jsonData = JSON.parse(jsonBlockMatch[1]); + } catch (e) { + console.error("Error parsing JSON:", e); + return null; + } + } else { + const objectPattern = /{[\s\S]*?}/; + const objectMatch = text.match(objectPattern); + + if (objectMatch) { + try { + jsonData = JSON.parse(objectMatch[0]); + } catch (e) { + console.error("Error parsing JSON:", e); + return null; + } + } + } + + if ( + typeof jsonData === "object" && + jsonData !== null && + !Array.isArray(jsonData) + ) { + return jsonData; + } else if (typeof jsonData === "object" && Array.isArray(jsonData)) { + return parseJsonArrayFromText(text); + } else { + return null; + } +} + +export const postActionResponseFooter = `Choose any combination of [LIKE], [RETWEET], [QUOTE], and [REPLY] that are appropriate. Each action must be on its own line. Your response must only include the chosen actions.`; + +export const parseActionResponseFromText = ( + text: string +): { actions: ActionResponse } => { + const actions: ActionResponse = { + like: false, + retweet: false, + quote: false, + reply: false, + }; + + // Regex patterns + const likePattern = /\[LIKE\]/i; + const retweetPattern = /\[RETWEET\]/i; + const quotePattern = /\[QUOTE\]/i; + const replyPattern = /\[REPLY\]/i; + + // Check with regex + actions.like = likePattern.test(text); + actions.retweet = retweetPattern.test(text); + actions.quote = quotePattern.test(text); + actions.reply = replyPattern.test(text); + + // Also do line by line parsing as backup + const lines = text.split("\n"); + for (const line of lines) { + const trimmed = line.trim(); + if (trimmed === "[LIKE]") actions.like = true; + if (trimmed === "[RETWEET]") actions.retweet = true; + if (trimmed === "[QUOTE]") actions.quote = true; + if (trimmed === "[REPLY]") actions.reply = true; + } + + return { actions }; +}; diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/settings.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/settings.ts new file mode 100644 index 000000000..f6e42a1ad --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/settings.ts @@ -0,0 +1,168 @@ +import { config } from "dotenv"; +import fs from "fs"; +import path from "path"; +import elizaLogger from "./logger.ts"; + +elizaLogger.info("Loading embedding settings:", { + USE_OPENAI_EMBEDDING: process.env.USE_OPENAI_EMBEDDING, + USE_OLLAMA_EMBEDDING: process.env.USE_OLLAMA_EMBEDDING, + OLLAMA_EMBEDDING_MODEL: + process.env.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large", +}); + +// Add this logging block +elizaLogger.info("Loading character settings:", { + CHARACTER_PATH: process.env.CHARACTER_PATH, + ARGV: process.argv, + CHARACTER_ARG: process.argv.find((arg) => arg.startsWith("--character=")), + CWD: process.cwd(), +}); + +interface Settings { + [key: string]: string | undefined; +} + +interface NamespacedSettings { + [namespace: string]: Settings; +} + +let environmentSettings: Settings = {}; + +/** + * Determines if code is running in a browser environment + * @returns {boolean} True if in browser environment + */ +const isBrowser = (): boolean => { + return ( + typeof window !== "undefined" && typeof window.document !== "undefined" + ); +}; + +/** + * Recursively searches for a .env file starting from the current directory + * and moving up through parent directories (Node.js only) + * @param {string} [startDir=process.cwd()] - Starting directory for the search + * @returns {string|null} Path to the nearest .env file or null if not found + */ +export function findNearestEnvFile(startDir = process.cwd()) { + if (isBrowser()) return null; + + let currentDir = startDir; + + // Continue searching until we reach the root directory + while (currentDir !== path.parse(currentDir).root) { + const envPath = path.join(currentDir, ".env"); + + if (fs.existsSync(envPath)) { + return envPath; + } + + // Move up to parent directory + currentDir = path.dirname(currentDir); + } + + // Check root directory as well + const rootEnvPath = path.join(path.parse(currentDir).root, ".env"); + return fs.existsSync(rootEnvPath) ? rootEnvPath : null; +} + +/** + * Configures environment settings for browser usage + * @param {Settings} settings - Object containing environment variables + */ +export function configureSettings(settings: Settings) { + environmentSettings = { ...settings }; +} + +/** + * Loads environment variables from the nearest .env file in Node.js + * or returns configured settings in browser + * @returns {Settings} Environment variables object + * @throws {Error} If no .env file is found in Node.js environment + */ +export function loadEnvConfig(): Settings { + // For browser environments, return the configured settings + if (isBrowser()) { + return environmentSettings; + } + + // Node.js environment: load from .env file + const envPath = findNearestEnvFile(); + + // attempt to Load the .env file into process.env + const result = config(envPath ? { path: envPath } : {}); + + if (!result.error) { + console.log(`Loaded .env file from: ${envPath}`); + } + + // Parse namespaced settings + const namespacedSettings = parseNamespacedSettings(process.env as Settings); + + // Attach to process.env for backward compatibility + Object.entries(namespacedSettings).forEach(([namespace, settings]) => { + process.env[`__namespaced_${namespace}`] = JSON.stringify(settings); + }); + + return process.env as Settings; +} + +/** + * Gets a specific environment variable + * @param {string} key - The environment variable key + * @param {string} [defaultValue] - Optional default value if key doesn't exist + * @returns {string|undefined} The environment variable value or default value + */ +export function getEnvVariable( + key: string, + defaultValue?: string +): string | undefined { + if (isBrowser()) { + return environmentSettings[key] || defaultValue; + } + return process.env[key] || defaultValue; +} + +/** + * Checks if a specific environment variable exists + * @param {string} key - The environment variable key + * @returns {boolean} True if the environment variable exists + */ +export function hasEnvVariable(key: string): boolean { + if (isBrowser()) { + return key in environmentSettings; + } + return key in process.env; +} + +// Initialize settings based on environment +export const settings = isBrowser() ? environmentSettings : loadEnvConfig(); + +elizaLogger.info("Parsed settings:", { + USE_OPENAI_EMBEDDING: settings.USE_OPENAI_EMBEDDING, + USE_OPENAI_EMBEDDING_TYPE: typeof settings.USE_OPENAI_EMBEDDING, + USE_OLLAMA_EMBEDDING: settings.USE_OLLAMA_EMBEDDING, + USE_OLLAMA_EMBEDDING_TYPE: typeof settings.USE_OLLAMA_EMBEDDING, + OLLAMA_EMBEDDING_MODEL: + settings.OLLAMA_EMBEDDING_MODEL || "mxbai-embed-large", +}); + +export default settings; + +// Add this function to parse namespaced settings +function parseNamespacedSettings(env: Settings): NamespacedSettings { + const namespaced: NamespacedSettings = {}; + + for (const [key, value] of Object.entries(env)) { + if (!value) continue; + + const [namespace, ...rest] = key.split('.'); + if (!namespace || rest.length === 0) continue; + + const settingKey = rest.join('.'); + namespaced[namespace] = namespaced[namespace] || {}; + namespaced[namespace][settingKey] = value; + } + + return namespaced; +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/types.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/types.ts new file mode 100644 index 000000000..dfc19c2eb --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/types.ts @@ -0,0 +1,1280 @@ +import { Readable } from "stream"; + +/** + * Represents a UUID string in the format "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + */ +export type UUID = `${string}-${string}-${string}-${string}-${string}`; + +/** + * Represents the content of a message or communication + */ +export interface Content { + /** The main text content */ + text: string; + + /** Optional action associated with the message */ + action?: string; + + /** Optional source/origin of the content */ + source?: string; + + /** URL of the original message/post (e.g. tweet URL, Discord message link) */ + url?: string; + + /** UUID of parent message if this is a reply/thread */ + inReplyTo?: UUID; + + /** Array of media attachments */ + attachments?: Media[]; + + /** Additional dynamic properties */ + [key: string]: unknown; +} + +/** + * Example content with associated user for demonstration purposes + */ +export interface ActionExample { + /** User associated with the example */ + user: string; + + /** Content of the example */ + content: Content; +} + +/** + * Example conversation content with user ID + */ +export interface ConversationExample { + /** UUID of user in conversation */ + userId: UUID; + + /** Content of the conversation */ + content: Content; +} + +/** + * Represents an actor/participant in a conversation + */ +export interface Actor { + /** Display name */ + name: string; + + /** Username/handle */ + username: string; + + /** Additional profile details */ + details: { + /** Short profile tagline */ + tagline: string; + + /** Longer profile summary */ + summary: string; + + /** Favorite quote */ + quote: string; + }; + + /** Unique identifier */ + id: UUID; +} + +/** + * Represents a single objective within a goal + */ +export interface Objective { + /** Optional unique identifier */ + id?: string; + + /** Description of what needs to be achieved */ + description: string; + + /** Whether objective is completed */ + completed: boolean; +} + +/** + * Status enum for goals + */ +export enum GoalStatus { + DONE = "DONE", + FAILED = "FAILED", + IN_PROGRESS = "IN_PROGRESS", +} + +/** + * Represents a high-level goal composed of objectives + */ +export interface Goal { + /** Optional unique identifier */ + id?: UUID; + + /** Room ID where goal exists */ + roomId: UUID; + + /** User ID of goal owner */ + userId: UUID; + + /** Name/title of the goal */ + name: string; + + /** Current status */ + status: GoalStatus; + + /** Component objectives */ + objectives: Objective[]; +} + +/** + * Model size/type classification + */ +export enum ModelClass { + SMALL = "small", + MEDIUM = "medium", + LARGE = "large", + EMBEDDING = "embedding", + IMAGE = "image", +} + +/** + * Configuration for an AI model + */ +export type Model = { + /** Optional API endpoint */ + endpoint?: string; + + /** Model settings */ + settings: { + /** Maximum input tokens */ + maxInputTokens: number; + + /** Maximum output tokens */ + maxOutputTokens: number; + + /** Optional frequency penalty */ + frequency_penalty?: number; + + /** Optional presence penalty */ + presence_penalty?: number; + + /** Optional repetition penalty */ + repetition_penalty?: number; + + /** Stop sequences */ + stop: string[]; + + /** Temperature setting */ + temperature: number; + }; + + /** Optional image generation settings */ + imageSettings?: { + steps?: number; + }; + + /** Model names by size class */ + model: { + [ModelClass.SMALL]: string; + [ModelClass.MEDIUM]: string; + [ModelClass.LARGE]: string; + [ModelClass.EMBEDDING]?: string; + [ModelClass.IMAGE]?: string; + }; +}; + +/** + * Model configurations by provider + */ +export type Models = { + [ModelProviderName.OPENAI]: Model; + [ModelProviderName.ETERNALAI]: Model; + [ModelProviderName.ANTHROPIC]: Model; + [ModelProviderName.GROK]: Model; + [ModelProviderName.GROQ]: Model; + [ModelProviderName.LLAMACLOUD]: Model; + [ModelProviderName.TOGETHER]: Model; + [ModelProviderName.LLAMALOCAL]: Model; + [ModelProviderName.GOOGLE]: Model; + [ModelProviderName.CLAUDE_VERTEX]: Model; + [ModelProviderName.REDPILL]: Model; + [ModelProviderName.OPENROUTER]: Model; + [ModelProviderName.OLLAMA]: Model; + [ModelProviderName.HEURIST]: Model; + [ModelProviderName.GALADRIEL]: Model; + [ModelProviderName.FAL]: Model; + [ModelProviderName.GAIANET]: Model; + [ModelProviderName.ALI_BAILIAN]: Model; + [ModelProviderName.VOLENGINE]: Model; + [ModelProviderName.NANOGPT]: Model; + [ModelProviderName.HYPERBOLIC]: Model; + [ModelProviderName.VENICE]: Model; + [ModelProviderName.AKASH_CHAT_API]: Model; + [ModelProviderName.LIVEPEER]: Model; +}; + +/** + * Available model providers + */ +export enum ModelProviderName { + OPENAI = "openai", + ETERNALAI = "eternalai", + ANTHROPIC = "anthropic", + GROK = "grok", + GROQ = "groq", + LLAMACLOUD = "llama_cloud", + TOGETHER = "together", + LLAMALOCAL = "llama_local", + GOOGLE = "google", + CLAUDE_VERTEX = "claude_vertex", + REDPILL = "redpill", + OPENROUTER = "openrouter", + OLLAMA = "ollama", + HEURIST = "heurist", + GALADRIEL = "galadriel", + FAL = "falai", + GAIANET = "gaianet", + ALI_BAILIAN = "ali_bailian", + VOLENGINE = "volengine", + NANOGPT = "nanogpt", + HYPERBOLIC = "hyperbolic", + VENICE = "venice", + AKASH_CHAT_API = "akash_chat_api", + LIVEPEER = "livepeer", +} + +/** + * Represents the current state/context of a conversation + */ +export interface State { + /** ID of user who sent current message */ + userId?: UUID; + + /** ID of agent in conversation */ + agentId?: UUID; + + /** Agent's biography */ + bio: string; + + /** Agent's background lore */ + lore: string; + + /** Message handling directions */ + messageDirections: string; + + /** Post handling directions */ + postDirections: string; + + /** Current room/conversation ID */ + roomId: UUID; + + /** Optional agent name */ + agentName?: string; + + /** Optional message sender name */ + senderName?: string; + + /** String representation of conversation actors */ + actors: string; + + /** Optional array of actor objects */ + actorsData?: Actor[]; + + /** Optional string representation of goals */ + goals?: string; + + /** Optional array of goal objects */ + goalsData?: Goal[]; + + /** Recent message history as string */ + recentMessages: string; + + /** Recent message objects */ + recentMessagesData: Memory[]; + + /** Optional valid action names */ + actionNames?: string; + + /** Optional action descriptions */ + actions?: string; + + /** Optional action objects */ + actionsData?: Action[]; + + /** Optional action examples */ + actionExamples?: string; + + /** Optional provider descriptions */ + providers?: string; + + /** Optional response content */ + responseData?: Content; + + /** Optional recent interaction objects */ + recentInteractionsData?: Memory[]; + + /** Optional recent interactions string */ + recentInteractions?: string; + + /** Optional formatted conversation */ + formattedConversation?: string; + + /** Optional formatted knowledge */ + knowledge?: string; + /** Optional knowledge data */ + knowledgeData?: KnowledgeItem[]; + + /** Additional dynamic properties */ + [key: string]: unknown; +} + +/** + * Represents a stored memory/message + */ +export interface Memory { + /** Optional unique identifier */ + id?: UUID; + + /** Associated user ID */ + userId: UUID; + + /** Associated agent ID */ + agentId: UUID; + + /** Optional creation timestamp */ + createdAt?: number; + + /** Memory content */ + content: Content; + + /** Optional embedding vector */ + embedding?: number[]; + + /** Associated room ID */ + roomId: UUID; + + /** Whether memory is unique */ + unique?: boolean; + + /** Embedding similarity score */ + similarity?: number; +} + +/** + * Example message for demonstration + */ +export interface MessageExample { + /** Associated user */ + user: string; + + /** Message content */ + content: Content; +} + +/** + * Handler function type for processing messages + */ +export type Handler = ( + runtime: IAgentRuntime, + message: Memory, + state?: State, + options?: { [key: string]: unknown }, + callback?: HandlerCallback +) => Promise; + +/** + * Callback function type for handlers + */ +export type HandlerCallback = ( + response: Content, + files?: any +) => Promise; + +/** + * Validator function type for actions/evaluators + */ +export type Validator = ( + runtime: IAgentRuntime, + message: Memory, + state?: State +) => Promise; + +/** + * Represents an action the agent can perform + */ +export interface Action { + /** Similar action descriptions */ + similes: string[]; + + /** Detailed description */ + description: string; + + /** Example usages */ + examples: ActionExample[][]; + + /** Handler function */ + handler: Handler; + + /** Action name */ + name: string; + + /** Validation function */ + validate: Validator; + + /** Whether to suppress the initial message when this action is used */ + suppressInitialMessage?: boolean; +} + +/** + * Example for evaluating agent behavior + */ +export interface EvaluationExample { + /** Evaluation context */ + context: string; + + /** Example messages */ + messages: Array; + + /** Expected outcome */ + outcome: string; +} + +/** + * Evaluator for assessing agent responses + */ +export interface Evaluator { + /** Whether to always run */ + alwaysRun?: boolean; + + /** Detailed description */ + description: string; + + /** Similar evaluator descriptions */ + similes: string[]; + + /** Example evaluations */ + examples: EvaluationExample[]; + + /** Handler function */ + handler: Handler; + + /** Evaluator name */ + name: string; + + /** Validation function */ + validate: Validator; +} + +/** + * Provider for external data/services + */ +export interface Provider { + /** Data retrieval function */ + get: ( + runtime: IAgentRuntime, + message: Memory, + state?: State + ) => Promise; +} + +/** + * Represents a relationship between users + */ +export interface Relationship { + /** Unique identifier */ + id: UUID; + + /** First user ID */ + userA: UUID; + + /** Second user ID */ + userB: UUID; + + /** Primary user ID */ + userId: UUID; + + /** Associated room ID */ + roomId: UUID; + + /** Relationship status */ + status: string; + + /** Optional creation timestamp */ + createdAt?: string; +} + +/** + * Represents a user account + */ +export interface Account { + /** Unique identifier */ + id: UUID; + + /** Display name */ + name: string; + + /** Username */ + username: string; + + /** Optional additional details */ + details?: { [key: string]: any }; + + /** Optional email */ + email?: string; + + /** Optional avatar URL */ + avatarUrl?: string; +} + +/** + * Room participant with account details + */ +export interface Participant { + /** Unique identifier */ + id: UUID; + + /** Associated account */ + account: Account; +} + +/** + * Represents a conversation room + */ +export interface Room { + /** Unique identifier */ + id: UUID; + + /** Room participants */ + participants: Participant[]; +} + +/** + * Represents a media attachment + */ +export type Media = { + /** Unique identifier */ + id: string; + + /** Media URL */ + url: string; + + /** Media title */ + title: string; + + /** Media source */ + source: string; + + /** Media description */ + description: string; + + /** Text content */ + text: string; + + /** Content type */ + contentType?: string; +}; + +/** + * Client interface for platform connections + */ +export type Client = { + /** Start client connection */ + start: (runtime: IAgentRuntime) => Promise; + + /** Stop client connection */ + stop: (runtime: IAgentRuntime) => Promise; +}; + +/** + * Plugin for extending agent functionality + */ +export type Plugin = { + /** Plugin name */ + name: string; + + /** Plugin description */ + description: string; + + /** Optional actions */ + actions?: Action[]; + + /** Optional providers */ + providers?: Provider[]; + + /** Optional evaluators */ + evaluators?: Evaluator[]; + + /** Optional services */ + services?: Service[]; + + /** Optional clients */ + clients?: Client[]; +}; + +/** + * Available client platforms + */ +export enum Clients { + DISCORD = "discord", + DIRECT = "direct", + TWITTER = "twitter", + TELEGRAM = "telegram", + FARCASTER = "farcaster", + LENS = "lens", + AUTO = "auto", + SLACK = "slack", +} + +export interface IAgentConfig { + [key: string]: string; +} + +export interface ModelConfiguration { + temperature?: number; + max_response_length?: number; + frequency_penalty?: number; + presence_penalty?: number; + maxInputTokens?: number; +} + +/** + * Configuration for an agent character + */ +export type Character = { + /** Optional unique identifier */ + id?: UUID; + + /** Character name */ + name: string; + + /** Optional username */ + username?: string; + + /** Optional system prompt */ + system?: string; + + /** Model provider to use */ + modelProvider: ModelProviderName; + + /** Image model provider to use, if different from modelProvider */ + imageModelProvider?: ModelProviderName; + + /** Optional model endpoint override */ + modelEndpointOverride?: string; + + /** Optional prompt templates */ + templates?: { + goalsTemplate?: string; + factsTemplate?: string; + messageHandlerTemplate?: string; + shouldRespondTemplate?: string; + continueMessageHandlerTemplate?: string; + evaluationTemplate?: string; + twitterSearchTemplate?: string; + twitterActionTemplate?: string; + twitterPostTemplate?: string; + twitterMessageHandlerTemplate?: string; + twitterShouldRespondTemplate?: string; + farcasterPostTemplate?: string; + lensPostTemplate?: string; + farcasterMessageHandlerTemplate?: string; + lensMessageHandlerTemplate?: string; + farcasterShouldRespondTemplate?: string; + lensShouldRespondTemplate?: string; + telegramMessageHandlerTemplate?: string; + telegramShouldRespondTemplate?: string; + discordVoiceHandlerTemplate?: string; + discordShouldRespondTemplate?: string; + discordMessageHandlerTemplate?: string; + slackMessageHandlerTemplate?: string; + slackShouldRespondTemplate?: string; + }; + + /** Character biography */ + bio: string | string[]; + + /** Character background lore */ + lore: string[]; + + /** Example messages */ + messageExamples: MessageExample[][]; + + /** Example posts */ + postExamples: string[]; + + /** Known topics */ + topics: string[]; + + /** Character traits */ + adjectives: string[]; + + /** Optional knowledge base */ + knowledge?: string[]; + + /** Supported client platforms */ + clients: Clients[]; + + /** Available plugins */ + plugins: Plugin[]; + + /** Optional configuration */ + settings?: { + secrets?: { [key: string]: string }; + intiface?: boolean; + imageSettings?: { + steps?: number; + width?: number; + height?: number; + negativePrompt?: string; + numIterations?: number; + guidanceScale?: number; + seed?: number; + modelId?: string; + jobId?: string; + count?: number; + stylePreset?: string; + hideWatermark?: boolean; + }; + voice?: { + model?: string; // For VITS + url?: string; // Legacy VITS support + elevenlabs?: { + // New structured ElevenLabs config + voiceId: string; + model?: string; + stability?: string; + similarityBoost?: string; + style?: string; + useSpeakerBoost?: string; + }; + }; + model?: string; + modelConfig?: ModelConfiguration; + embeddingModel?: string; + chains?: { + evm?: any[]; + solana?: any[]; + [key: string]: any[]; + }; + }; + + /** Optional client-specific config */ + clientConfig?: { + discord?: { + shouldIgnoreBotMessages?: boolean; + shouldIgnoreDirectMessages?: boolean; + shouldRespondOnlyToMentions?: boolean; + messageSimilarityThreshold?: number; + isPartOfTeam?: boolean; + teamAgentIds?: string[]; + teamLeaderId?: string; + teamMemberInterestKeywords?: string[]; + }; + telegram?: { + shouldIgnoreBotMessages?: boolean; + shouldIgnoreDirectMessages?: boolean; + shouldRespondOnlyToMentions?: boolean; + shouldOnlyJoinInAllowedGroups?: boolean; + allowedGroupIds?: string[]; + messageSimilarityThreshold?: number; + isPartOfTeam?: boolean; + teamAgentIds?: string[]; + teamLeaderId?: string; + teamMemberInterestKeywords?: string[]; + }; + slack?: { + shouldIgnoreBotMessages?: boolean; + shouldIgnoreDirectMessages?: boolean; + }; + gitbook?: { + keywords?: { + projectTerms?: string[]; + generalQueries?: string[]; + }; + documentTriggers?: string[]; + }; + }; + + /** Writing style guides */ + style: { + all: string[]; + chat: string[]; + post: string[]; + }; + + /** Optional Twitter profile */ + twitterProfile?: { + id: string; + username: string; + screenName: string; + bio: string; + nicknames?: string[]; + }; + /** Optional NFT prompt */ + nft?: { + prompt: string; + }; +}; + +/** + * Interface for database operations + */ +export interface IDatabaseAdapter { + /** Database instance */ + db: any; + + /** Optional initialization */ + init(): Promise; + + /** Close database connection */ + close(): Promise; + + /** Get account by ID */ + getAccountById(userId: UUID): Promise; + + /** Create new account */ + createAccount(account: Account): Promise; + + /** Get memories matching criteria */ + getMemories(params: { + roomId: UUID; + count?: number; + unique?: boolean; + tableName: string; + agentId: UUID; + start?: number; + end?: number; + }): Promise; + + getMemoryById(id: UUID): Promise; + + getMemoriesByRoomIds(params: { + tableName: string; + agentId: UUID; + roomIds: UUID[]; + }): Promise; + + getCachedEmbeddings(params: { + query_table_name: string; + query_threshold: number; + query_input: string; + query_field_name: string; + query_field_sub_name: string; + query_match_count: number; + }): Promise<{ embedding: number[]; levenshtein_score: number }[]>; + + log(params: { + body: { [key: string]: unknown }; + userId: UUID; + roomId: UUID; + type: string; + }): Promise; + + getActorDetails(params: { roomId: UUID }): Promise; + + searchMemories(params: { + tableName: string; + agentId: UUID; + roomId: UUID; + embedding: number[]; + match_threshold: number; + match_count: number; + unique: boolean; + }): Promise; + + updateGoalStatus(params: { + goalId: UUID; + status: GoalStatus; + }): Promise; + + searchMemoriesByEmbedding( + embedding: number[], + params: { + match_threshold?: number; + count?: number; + roomId?: UUID; + agentId?: UUID; + unique?: boolean; + tableName: string; + } + ): Promise; + + createMemory( + memory: Memory, + tableName: string, + unique?: boolean + ): Promise; + + removeMemory(memoryId: UUID, tableName: string): Promise; + + removeAllMemories(roomId: UUID, tableName: string): Promise; + + countMemories( + roomId: UUID, + unique?: boolean, + tableName?: string + ): Promise; + + getGoals(params: { + agentId: UUID; + roomId: UUID; + userId?: UUID | null; + onlyInProgress?: boolean; + count?: number; + }): Promise; + + updateGoal(goal: Goal): Promise; + + createGoal(goal: Goal): Promise; + + removeGoal(goalId: UUID): Promise; + + removeAllGoals(roomId: UUID): Promise; + + getRoom(roomId: UUID): Promise; + + createRoom(roomId?: UUID): Promise; + + removeRoom(roomId: UUID): Promise; + + getRoomsForParticipant(userId: UUID): Promise; + + getRoomsForParticipants(userIds: UUID[]): Promise; + + addParticipant(userId: UUID, roomId: UUID): Promise; + + removeParticipant(userId: UUID, roomId: UUID): Promise; + + getParticipantsForAccount(userId: UUID): Promise; + + getParticipantsForRoom(roomId: UUID): Promise; + + getParticipantUserState( + roomId: UUID, + userId: UUID + ): Promise<"FOLLOWED" | "MUTED" | null>; + + setParticipantUserState( + roomId: UUID, + userId: UUID, + state: "FOLLOWED" | "MUTED" | null + ): Promise; + + createRelationship(params: { userA: UUID; userB: UUID }): Promise; + + getRelationship(params: { + userA: UUID; + userB: UUID; + }): Promise; + + getRelationships(params: { userId: UUID }): Promise; +} + +export interface IDatabaseCacheAdapter { + getCache(params: { + agentId: UUID; + key: string; + }): Promise; + + setCache(params: { + agentId: UUID; + key: string; + value: string; + }): Promise; + + deleteCache(params: { agentId: UUID; key: string }): Promise; +} + +export interface IMemoryManager { + runtime: IAgentRuntime; + tableName: string; + constructor: Function; + + addEmbeddingToMemory(memory: Memory): Promise; + + getMemories(opts: { + roomId: UUID; + count?: number; + unique?: boolean; + start?: number; + end?: number; + }): Promise; + + getCachedEmbeddings( + content: string + ): Promise<{ embedding: number[]; levenshtein_score: number }[]>; + + getMemoryById(id: UUID): Promise; + getMemoriesByRoomIds(params: { roomIds: UUID[] }): Promise; + searchMemoriesByEmbedding( + embedding: number[], + opts: { + match_threshold?: number; + count?: number; + roomId: UUID; + unique?: boolean; + } + ): Promise; + + createMemory(memory: Memory, unique?: boolean): Promise; + + removeMemory(memoryId: UUID): Promise; + + removeAllMemories(roomId: UUID): Promise; + + countMemories(roomId: UUID, unique?: boolean): Promise; +} + +export type CacheOptions = { + expires?: number; +}; + +export enum CacheStore { + REDIS = "redis", + DATABASE = "database", + FILESYSTEM = "filesystem", +} + +export interface ICacheManager { + get(key: string): Promise; + set(key: string, value: T, options?: CacheOptions): Promise; + delete(key: string): Promise; +} + +export abstract class Service { + private static instance: Service | null = null; + + static get serviceType(): ServiceType { + throw new Error("Service must implement static serviceType getter"); + } + + public static getInstance(): T { + if (!Service.instance) { + Service.instance = new (this as any)(); + } + return Service.instance as T; + } + + get serviceType(): ServiceType { + return (this.constructor as typeof Service).serviceType; + } + + // Add abstract initialize method that must be implemented by derived classes + abstract initialize(runtime: IAgentRuntime): Promise; +} + +export interface IAgentRuntime { + // Properties + agentId: UUID; + serverUrl: string; + databaseAdapter: IDatabaseAdapter; + token: string | null; + modelProvider: ModelProviderName; + imageModelProvider: ModelProviderName; + character: Character; + providers: Provider[]; + actions: Action[]; + evaluators: Evaluator[]; + plugins: Plugin[]; + + fetch?: typeof fetch | null; + + messageManager: IMemoryManager; + descriptionManager: IMemoryManager; + documentsManager: IMemoryManager; + knowledgeManager: IMemoryManager; + loreManager: IMemoryManager; + + cacheManager: ICacheManager; + + services: Map; + // any could be EventEmitter + // but I think the real solution is forthcoming as a base client interface + clients: Record; + + initialize(): Promise; + + registerMemoryManager(manager: IMemoryManager): void; + + getMemoryManager(name: string): IMemoryManager | null; + + getService(service: ServiceType): T | null; + + registerService(service: Service): void; + + getSetting(key: string): string | null; + + // Methods + getConversationLength(): number; + + processActions( + message: Memory, + responses: Memory[], + state?: State, + callback?: HandlerCallback + ): Promise; + + evaluate( + message: Memory, + state?: State, + didRespond?: boolean, + callback?: HandlerCallback + ): Promise; + + ensureParticipantExists(userId: UUID, roomId: UUID): Promise; + + ensureUserExists( + userId: UUID, + userName: string | null, + name: string | null, + source: string | null + ): Promise; + + registerAction(action: Action): void; + + ensureConnection( + userId: UUID, + roomId: UUID, + userName?: string, + userScreenName?: string, + source?: string + ): Promise; + + ensureParticipantInRoom(userId: UUID, roomId: UUID): Promise; + + ensureRoomExists(roomId: UUID): Promise; + + composeState( + message: Memory, + additionalKeys?: { [key: string]: unknown } + ): Promise; + + updateRecentMessageState(state: State): Promise; +} + +export interface IImageDescriptionService extends Service { + describeImage( + imageUrl: string + ): Promise<{ title: string; description: string }>; +} + +export interface ITranscriptionService extends Service { + transcribeAttachment(audioBuffer: ArrayBuffer): Promise; + transcribeAttachmentLocally( + audioBuffer: ArrayBuffer + ): Promise; + transcribe(audioBuffer: ArrayBuffer): Promise; + transcribeLocally(audioBuffer: ArrayBuffer): Promise; +} + +export interface IVideoService extends Service { + isVideoUrl(url: string): boolean; + fetchVideoInfo(url: string): Promise; + downloadVideo(videoInfo: Media): Promise; + processVideo(url: string, runtime: IAgentRuntime): Promise; +} + +export interface ITextGenerationService extends Service { + initializeModel(): Promise; + queueMessageCompletion( + context: string, + temperature: number, + stop: string[], + frequency_penalty: number, + presence_penalty: number, + max_tokens: number + ): Promise; + queueTextCompletion( + context: string, + temperature: number, + stop: string[], + frequency_penalty: number, + presence_penalty: number, + max_tokens: number + ): Promise; + getEmbeddingResponse(input: string): Promise; +} + +export interface IBrowserService extends Service { + closeBrowser(): Promise; + getPageContent( + url: string, + runtime: IAgentRuntime + ): Promise<{ title: string; description: string; bodyContent: string }>; +} + +export interface ISpeechService extends Service { + getInstance(): ISpeechService; + generate(runtime: IAgentRuntime, text: string): Promise; +} + +export interface IPdfService extends Service { + getInstance(): IPdfService; + convertPdfToText(pdfBuffer: Buffer): Promise; +} + +export interface IAwsS3Service extends Service { + uploadFile( + imagePath: string, + subDirectory: string, + useSignedUrl: boolean, + expiresIn: number + ): Promise<{ + success: boolean; + url?: string; + error?: string; + }>; + generateSignedUrl(fileName: string, expiresIn: number): Promise; +} + +export type SearchResult = { + title: string; + url: string; + content: string; + score: number; + raw_content: string | null; +}; + +export type SearchResponse = { + query: string; + follow_up_questions: string[] | null; + answer: string | null; + images: string[]; + results: SearchResult[]; + response_time: number; +}; + +export enum ServiceType { + IMAGE_DESCRIPTION = "image_description", + TRANSCRIPTION = "transcription", + VIDEO = "video", + TEXT_GENERATION = "text_generation", + BROWSER = "browser", + SPEECH_GENERATION = "speech_generation", + PDF = "pdf", + INTIFACE = "intiface", + AWS_S3 = "aws_s3", + BUTTPLUG = "buttplug", + SLACK = "slack", +} + +export enum LoggingLevel { + DEBUG = "debug", + VERBOSE = "verbose", + NONE = "none", +} + +export type KnowledgeItem = { + id: UUID; + content: Content; +}; + +export interface ActionResponse { + like: boolean; + retweet: boolean; + quote?: boolean; + reply?: boolean; +} + +export interface ISlackService extends Service { + client: any; +} diff --git a/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/uuid.ts b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/uuid.ts new file mode 100644 index 000000000..2227eca21 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy/uuid.ts @@ -0,0 +1,51 @@ +import { sha1 } from "js-sha1"; +import { UUID } from "./types.ts"; + +export function stringToUuid(target: string | number): UUID { + if (typeof target === "number") { + target = (target as number).toString(); + } + + if (typeof target !== "string") { + throw TypeError("Value must be string"); + } + + const _uint8ToHex = (ubyte: number): string => { + const first = ubyte >> 4; + const second = ubyte - (first << 4); + const HEX_DIGITS = "0123456789abcdef".split(""); + return HEX_DIGITS[first] + HEX_DIGITS[second]; + }; + + const _uint8ArrayToHex = (buf: Uint8Array): string => { + let out = ""; + for (let i = 0; i < buf.length; i++) { + out += _uint8ToHex(buf[i]); + } + return out; + }; + + const escapedStr = encodeURIComponent(target); + const buffer = new Uint8Array(escapedStr.length); + for (let i = 0; i < escapedStr.length; i++) { + buffer[i] = escapedStr[i].charCodeAt(0); + } + + const hash = sha1(buffer); + const hashBuffer = new Uint8Array(hash.length / 2); + for (let i = 0; i < hash.length; i += 2) { + hashBuffer[i / 2] = parseInt(hash.slice(i, i + 2), 16); + } + + return (_uint8ArrayToHex(hashBuffer.slice(0, 4)) + + "-" + + _uint8ArrayToHex(hashBuffer.slice(4, 6)) + + "-" + + _uint8ToHex(hashBuffer[6] & 0x0f) + + _uint8ToHex(hashBuffer[7]) + + "-" + + _uint8ToHex((hashBuffer[8] & 0x3f) | 0x80) + + _uint8ToHex(hashBuffer[9]) + + "-" + + _uint8ArrayToHex(hashBuffer.slice(10, 16))) as UUID; +} diff --git a/packages/usdk/packages/upstreet-agent/packages/fs-proxy/fs.mjs b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/fs.mjs new file mode 100644 index 000000000..f5385398f --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/fs.mjs @@ -0,0 +1,2 @@ +export { default } from 'memfs'; +export * from 'memfs'; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/fs-proxy/package.json b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/package.json new file mode 100644 index 000000000..90f416861 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/package.json @@ -0,0 +1,4 @@ +{ + "name": "fs", + "main": "fs.mjs" +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/package.json b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/package.json new file mode 100644 index 000000000..ebbccfae3 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/package.json @@ -0,0 +1,4 @@ +{ + "name": "fs-promises", + "main": "promises.mjs" +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/promises.mjs b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/promises.mjs new file mode 100644 index 000000000..2cbbe5dad --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/fs-proxy/promises/promises.mjs @@ -0,0 +1,32 @@ +import memfs from 'memfs'; +export default memfs.promises; +export const access = memfs.promises.access; +export const appendFile = memfs.promises.appendFile; +export const chmod = memfs.promises.chmod; +export const chown = memfs.promises.chown; +export const copyFile = memfs.promises.copyFile; +export const cp = memfs.promises.cp; +export const lchmod = memfs.promises.lchmod; +export const lchown = memfs.promises.lchown; +export const lutimes = memfs.promises.lutimes; +export const link = memfs.promises.link; +export const lstat = memfs.promises.lstat; +export const mkdir = memfs.promises.mkdir; +export const mkdtemp = memfs.promises.mkdtemp; +export const open = memfs.promises.open; +export const opendir = memfs.promises.opendir; +export const readdir = memfs.promises.readdir; +export const readFile = memfs.promises.readFile; +export const readlink = memfs.promises.readlink; +export const realpath = memfs.promises.realpath; +export const rename = memfs.promises.rename; +export const rmdir = memfs.promises.rmdir; +export const rm = memfs.promises.rm; +export const stat = memfs.promises.stat; +export const statfs = memfs.promises.statfs; +export const symlink = memfs.promises.symlink; +export const truncate = memfs.promises.truncate; +export const unlink = memfs.promises.unlink; +export const utimes = memfs.promises.utimes; +export const watch = memfs.promises.watch; +export const writeFile = memfs.promises.writeFile; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/types/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/types/package.json index 4053b65d1..5b9cc9e35 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/types/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/types/package.json @@ -1,4 +1,4 @@ { - "name": "react-agents-client-types", + "name": "react-agents-browser", "main": "index.d.ts" } diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-electron/electron-main.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-electron/electron-main.mjs index 4675d19ae..2c6b82782 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-electron/electron-main.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-electron/electron-main.mjs @@ -149,7 +149,6 @@ const runAgent = async (directory, opts) => { const makeViteServer = (directory) => { return createViteServer({ root: directory, - server: { middlewareMode: 'ssr' }, cacheDir: path.join(homeDir, '.usdk', 'vite'), esbuild: { jsx: 'transform', @@ -162,6 +161,14 @@ const makeViteServer = (directory) => { ssr: { external: ['react', 'react-reconciler'], }, + resolve: { + mainFields: ['main', 'module', 'browser'], + // these proxies are necessary for vite to polyfill node builtins + fs: import.meta.resolve('fs').replace('file://', ''), + child_process: import.meta.resolve('child_process').replace('file://', ''), + tls: import.meta.resolve('tls').replace('file://', ''), + }, + assetsInclude: [/\.cdc$/], }); }; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-node/install-agent.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-node/install-agent.mjs index 0b4c7aefa..380b9baf2 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-node/install-agent.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-node/install-agent.mjs @@ -80,19 +80,22 @@ export const installAgent = async (directory) => { const srcWranglerToml = path.join(upstreetAgentDir, 'wrangler.toml'); const dstWranglerToml = path.join(directory, `wrangler.toml`); + const srcInitTs = path.join(upstreetAgentDir, 'init.ts'); + const dstInitTs = path.join(directory, `init.ts`); + const agentPath = directory; // remove old dependencies in node_modules const removeDependencies = async () => { await Promise.all(dependencies.map(async (name) => { - const d = path.dirname(name); - if (d !== '.') { // has / + // const d = path.dirname(name); + // if (d !== '.') { // has / // remove the directory - await rimraf(path.join(dstNodeModules, d)); - } else { - const dst = path.join(dstNodeModules, name); - await rimraf(dst); - } + await rimraf(path.join(dstNodeModules, name)); + // } else { + // const dst = path.join(dstNodeModules, name); + // await rimraf(dst); + // } })); }; await removeDependencies(); @@ -130,6 +133,8 @@ export const installAgent = async (directory) => { }); return toml.stringify(t); }), + // init.ts + copyWithStringTransform(srcInitTs, dstInitTs), // main.jsx copyWithStringTransform(srcMainJsx, dstMainJsx), // durable-object.tsx @@ -144,6 +149,7 @@ export const installAgent = async (directory) => { rimraf(dstMainJsx), rimraf(dstDurableObjectTsx), rimraf(dstRootMainTsx), + rimraf(dstInitTs), removeDependencies(), ]); }; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-node/worker.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-node/worker.mjs index efe7bb13f..c465b3512 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-node/worker.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-node/worker.mjs @@ -69,6 +69,10 @@ const runAgent = async (directory, opts) => { const init = initString && JSON.parse(initString); const debug = parseInt(opts.debug, 10); + globalThis.dynamicImport = async (specifier) => { + return await loadModule(directory, specifier); + }; + // we load it lioke this to perform a compilation const createRootMain = await loadModule(directory, 'root-main.tsx'); const root = createRootMain({ @@ -95,7 +99,6 @@ const runAgent = async (directory, opts) => { const makeViteServer = async (directory) => { return await createViteServer({ root: directory, - server: { middlewareMode: 'ssr' }, cacheDir: path.join(homeDir, '.usdk', 'vite'), esbuild: { jsx: 'transform', @@ -108,6 +111,14 @@ const makeViteServer = async (directory) => { ssr: { external: ['react', 'react-reconciler'], }, + resolve: { + mainFields: ['main', 'module', 'browser'], + // these proxies are necessary for vite to polyfill node builtins + fs: import.meta.resolve('fs').replace('file://', ''), + child_process: import.meta.resolve('child_process').replace('file://', ''), + tls: import.meta.resolve('tls').replace('file://', ''), + }, + assetsInclude: [/\.cdc$/], }); }; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/package.json index 72f4738ae..2fa0fd70f 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/package.json @@ -2,7 +2,7 @@ "name": "react-agents-wrangler", "main": "wrangler-runtime.mjs", "dependencies": { - "wrangler": "^3.60.2" + "wrangler": "^3.99.0" }, "devDependencies": { "jest": "^29.7.0" diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/wrangler-runtime.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/wrangler-runtime.mjs index 6a8e10f2e..790eae400 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/wrangler-runtime.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler/wrangler-runtime.mjs @@ -126,6 +126,10 @@ export class ReactAgentsWranglerRuntime { { stdio: 'pipe', cwd: dstDir, + env: { + ...process.env, + NODE_OPTIONS: '--stack-trace-limit=300', + }, }, ); cp.on('exit', (code) => { diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/abortable-perception-event.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/abortable-perception-event.ts index a7f928817..8cb601ff1 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/abortable-perception-event.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/abortable-perception-event.ts @@ -2,13 +2,11 @@ import type { GenerativeAgentObject, PerceptionEventData, PerceptionMessage, + AgentObject, } from '../types'; import { AbortableMessageEvent, } from './abortable-message-event'; -import { - AgentObject, -} from './agent-object'; export class AbortablePerceptionEvent extends AbortableMessageEvent { constructor({ diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/active-agent-object.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/active-agent-object.ts index e6eb86753..94a3cf3d5 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/active-agent-object.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/active-agent-object.ts @@ -32,7 +32,6 @@ import { import { ConversationManager, } from './conversation-manager'; -import { PingManager } from './ping-manager'; import { AgentRegistry } from './render-registry'; // @@ -49,7 +48,6 @@ export class ActiveAgentObject extends AgentObject { twitterManager: TwitterManager; twitterSpacesManager: TwitterSpacesManager; telnyxManager: TelnyxManager; - pingManager: PingManager; generativeAgentsMap = new WeakMap(); // @@ -91,10 +89,6 @@ export class ActiveAgentObject extends AgentObject { codecs: appContextValue.useCodecs(), }); this.telnyxManager = new TelnyxManager(); - this.pingManager = new PingManager({ - userId: this.id, - supabase: this.useSupabase(), - }); } // static hooks @@ -223,12 +217,12 @@ export class ActiveAgentObject extends AgentObject { this.chatsManager.live(); this.discordManager.live(); this.telnyxManager.live(); - this.pingManager.live(); + // this.pingManager.live(); } destroy() { this.chatsManager.destroy(); this.discordManager.destroy(); this.telnyxManager.destroy(); - this.pingManager.destroy(); + // this.pingManager.destroy(); } } \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/agent-renderer.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/agent-renderer.tsx index 85ce3e5cf..a09d788dc 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/agent-renderer.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/agent-renderer.tsx @@ -14,7 +14,7 @@ import type { ChatsSpecification, } from '../types'; import { RenderLoader } from './render-loader'; -import { SupabaseStorage } from '../storage/supabase-storage.mjs'; +// import { SupabaseStorage } from '../storage/supabase-storage.mjs'; import { makePromise } from '../util/util.mjs'; import { ConversationManager } from './conversation-manager'; import { AppContextValue } from './app-context-value'; @@ -169,6 +169,13 @@ export class AgentRenderer { const useInit = () => { return this.env.init ?? {}; }; + const useRuntime = () => { + return { + getSetting: (key: string) => { + return ''; // XXX finish this + }, + }; + }; const useDebug = () => { return this.env.debug ?? 0; }; @@ -187,6 +194,7 @@ export class AgentRenderer { chatsSpecification: useChatsSpecification(), codecs: useCodecs(), init: useInit(), + runtime: useRuntime(), debug: useDebug(), registry: useRegistry(), }); @@ -351,20 +359,31 @@ export class AgentRenderer { node, appContextValue, }; - try { + // try { await this.#renderProps(props); if (!this.renderPromiseResolved) { this.renderPromiseResolved = true; this.renderPromise.resolve(null); } - } catch (error) { - console.warn('Error during render', error.stack); - throw error; - } + // } catch (error) { + // console.warn('Error during render', error.stack); + // throw error; + // } + + const { + agents, + } = this.registry; + return { + agents, + }; } - unmount() { - this.reconciler.updateContainer(null, this.root, null, () => {}); + async unmount() { + await new Promise((accept, reject) => { + this.reconciler.updateContainer(null, this.root, null, () => { + accept(null); + }); + }); } // note: needs to be async to wait for React to resolves diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/app-context-value.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/app-context-value.ts index 242d4da7b..4d9ff873b 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/app-context-value.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/app-context-value.ts @@ -38,6 +38,7 @@ export class AppContextValue { chatsSpecification: ChatsSpecification; codecs: any; init: any; + runtime: any; debug: number; registry: RenderRegistry; @@ -53,6 +54,7 @@ export class AppContextValue { chatsSpecification, codecs, init, + runtime, debug, registry, }: { @@ -67,6 +69,7 @@ export class AppContextValue { chatsSpecification: ChatsSpecification; codecs: any; init: any; + runtime: any; debug: number; registry: RenderRegistry; }) { @@ -81,6 +84,7 @@ export class AppContextValue { this.chatsSpecification = chatsSpecification; this.codecs = codecs; this.init = init; + this.runtime = runtime; this.debug = debug; this.registry = registry; } @@ -117,6 +121,9 @@ export class AppContextValue { useInit() { return this.init; } + useRuntime() { + return this.runtime; + } useDebug() { return this.debug; } diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/conversation-object.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/conversation-object.ts index 6cbab9d2d..51e717e6b 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/conversation-object.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/conversation-object.ts @@ -13,7 +13,7 @@ import { SceneObject } from '../classes/scene-object'; import { Player } from 'react-agents-client/util/player.mjs'; import { ExtendableMessageEvent } from '../util/extendable-message-event'; import { MessageCache as MessageCacheConstructor, CACHED_MESSAGES_LIMIT } from './message-cache'; -import { loadMessagesFromDatabase } from '../util/loadMessagesFromDatabase'; +import { loadMessagesFromDatabase } from '../util/loadMessagesFromDatabase.mjs'; // @@ -127,7 +127,7 @@ export class ConversationObject extends EventTarget { const allAgents: object[] = [ ...Array.from(this.agentsMap.values()).map(player => player.playerSpec), ]; - this.agent && allAgents.push(this.agent.agentJson); + this.agent && allAgents.push(this.agent.config); return allAgents; } getEmbeddingString() { diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts index 52e5d37eb..7abd50f2e 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/discord-manager.ts @@ -12,7 +12,7 @@ import { ConversationObject, } from './conversation-object'; import { Player } from 'react-agents-client/util/player.mjs'; -import { DiscordBotClient } from '../lib/discord/discord-client'; +import { DiscordBotClient } from '../lib/discord/discord-client.mjs'; import { formatConversationMessage } from '../util/message-utils'; import { bindConversationToAgent, diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/generative-agent-object.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/generative-agent-object.ts index a3841cc45..d3078ca5d 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/generative-agent-object.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/generative-agent-object.ts @@ -55,9 +55,9 @@ export class GenerativeAgentObject { // - get location() { - return new URL(`${chatEndpointUrl}/rooms/${this.conversation.room}`); - } + // get location() { + // return new URL(`${chatEndpointUrl}/rooms/${this.conversation.room}`); + // } // @@ -180,8 +180,8 @@ export class GenerativeAgentObject { }; const step = await generateAgentActionStep({ generativeAgent: this, - hint: 'Comment on the following:' + '\n' + - text, + hint: 'Comment on the following:' + '\n' + text, + mode: 'basic', actOpts, debugOpts, }); diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/ping-manager.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/ping-manager.ts index 539222f4a..79a679159 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/ping-manager.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/ping-manager.ts @@ -23,8 +23,6 @@ export class PingManager { this.interval = null; this.queueManager = new QueueManager(); - - this.live(); } live() { this.interval = setInterval(async () => { diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/render-registry.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/render-registry.ts index cb7727a70..9ed842180 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/render-registry.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/render-registry.ts @@ -60,7 +60,6 @@ export class AgentRegistry { perceptionsMap: Map = new Map(); uniformsMap: Map = new Map(); deferMap: Map = new Map(); - tasksMap: Map = new Map(); namesMap: Map = new Map(); personalitiesMap: Map = new Map(); @@ -81,9 +80,6 @@ export class AgentRegistry { get uniforms() { return Array.from(this.uniformsMap.values()).filter(Boolean); } - get tasks() { - return Array.from(this.tasksMap.values()).filter(Boolean); - } get names() { return Array.from(this.namesMap.values()).filter(Boolean); } @@ -236,9 +232,6 @@ export class RenderRegistry extends EventTarget { // if (childInstance.type === 'perception') { // agentRegistry.perceptions.push(childInstance.props.value); // } - // if (childInstance.type === 'task') { - // agentRegistry.tasks.push(childInstance.props.value); - // } // if (childInstance.type === 'name') { // agentRegistry.names.push(childInstance.props.value); // } diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-manager.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-manager.ts index 11662a203..41332bed5 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-manager.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-manager.ts @@ -8,6 +8,7 @@ import { ActionMessageEventData, // PlayableAudioStream, TwitterArgs, + AgentSpec, } from '../types'; import { ConversationObject, @@ -230,7 +231,7 @@ class TwitterBot { } }; const newMessage = formatConversationMessage(rawMessage, { - agent: this.agent, + agent: this.agent as AgentSpec, }); const steps = await conversation.addLocalMessage(newMessage); diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-spaces-manager.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-spaces-manager.ts index 22f67808f..16ad0a080 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-spaces-manager.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/classes/twitter-spaces-manager.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import uuidByString from 'uuid-by-string'; import type { ActiveAgentObject, diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/clients/index.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/clients/index.tsx new file mode 100644 index 000000000..6bf2b7b94 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/clients/index.tsx @@ -0,0 +1,66 @@ +import React, { useState, useEffect } from 'react'; +import { useRuntime } from 'react-agents'; +// import { z } from 'zod'; +import util from 'util'; +import type { + IAgentRuntime, + State, + Options, + Memory, + IActionHandlerAttachment, + IActionHandlerCallbackArgs, + HandlerFn, + ValidateFn, + IAction, + IEvaluator, + IProvider, + IPlugin, + Database, + IAdapter, + IRuntime, + Client as ElizaClient, +} from '../types/eliza'; + +// + +type ClientProps = { + client: ElizaClient; + parameters: any; +}; +export const Client: React.FC = (props: ClientProps) => { + const { + client, + parameters, + } = props; + const runtime = useRuntime(); + + useEffect(() => { + const abortController = new AbortController(); + const { signal } = abortController; + + let live = true; + signal.addEventListener('abort', () => { + live = false; + }); + + (async () => { + const instance = await client.start(runtime); + if (live) { + signal.addEventListener('abort', async () => { + await instance.stop(runtime); + }); + } else { + await instance.stop(runtime); + } + })(); + + return () => { + abortController.abort(); + }; + }, []); + + return ( + <> + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/agent.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/agent.tsx index 16338db17..a3154c4ec 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/agent.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/agent.tsx @@ -15,9 +15,6 @@ import { import { DefaultAgentComponents, } from '../util/default-components'; -import { - ConfigAgentComponents, -} from '../util/config-components'; import { AgentRegistry, } from '../../classes/render-registry'; @@ -117,7 +114,6 @@ export const Agent = forwardRef(({ - {children} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/clients.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/clients.tsx new file mode 100644 index 000000000..48ccbcb01 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/clients.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Client } from 'react-agents'; +import type { + AgentObject, +} from '../../types'; + +type ClientsProps = { + config?: AgentObject; +}; + +export const Clients = (props: ClientsProps) => { + const clientsConfig = props.config?.clients ?? []; + return ( + <> + {clientsConfig.map((client: any) => { + const { + name, + parameters, + } = client; + return ( + + ); + })} + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/conversation.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/conversation.tsx index 1601cd7c3..3d3b61f7b 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/conversation.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/conversation.tsx @@ -39,7 +39,7 @@ export const ConversationProvider = (props: ConversationProps) => { }); }; // use this to defer rendering until the conversation is actually used -export const DeferConversation = (props: DeferProps) => { +export const DeferConversation: React.FC = (props: DeferProps) => { const appContextValue = useContext(AppContext); const conversationManager = appContextValue.useConversationManager(); const agentRegistry = useContext(AgentRegistryContext).agentRegistry; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/features.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/features.tsx new file mode 100644 index 000000000..09a148e96 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/features.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import type { + AgentObject, +} from '../../types'; +import { + features, +} from '../features/index'; + +type FeaturesProps = { + config?: AgentObject; +}; + +export const Features: React.FC = (props: FeaturesProps) => { + const featuresConfig = props.config?.features ?? {}; + return ( + <> + {Object.keys(featuresConfig).map((key) => { + const value = featuresConfig[key]; + const Feature = features[key]; + if (!Feature) { + throw new Error(`Feature not found: ${key}`); + } + return ( + + ); + })} + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/ping.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/ping.tsx new file mode 100644 index 000000000..b089c1fc0 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/ping.tsx @@ -0,0 +1,24 @@ +import React, { useState, useEffect } from 'react'; +import { useAgent, useSupabase } from '../../hooks'; +import { + PingManager, +} from '../../classes/ping-manager'; + +export const Ping = () => { + const agent = useAgent(); + const supabase = useSupabase(); + + const [pingManager, setPingManager] = useState(() => new PingManager({ + userId: agent.id, + supabase, + })); + + useEffect(() => { + pingManager.live(); + return () => { + pingManager.destroy(); + }; + }, []); + + return null; +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/plugins.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/plugins.tsx new file mode 100644 index 000000000..93df78c1c --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/plugins.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Plugin } from 'react-agents'; +import type { + AgentObject, +} from '../../types'; + +type PluginsProps = { + config?: AgentObject; +}; + +export const Plugins = (props: PluginsProps) => { + const pluginsConfig = props.config?.plugins ?? []; + return ( + <> + {pluginsConfig.map((plugin: any) => { + const { + name, + parameters, + } = plugin; + return ( + + ); + })} + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/prompt.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/prompt.tsx index 0ec5b2db2..7a0d21b68 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/prompt.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/core/prompt.tsx @@ -6,7 +6,7 @@ import { ConversationContext, } from '../../context'; -export const Prompt = /*memo(*/(props: PromptProps) => { +export const Prompt: React.FC = /*memo(*/(props: PromptProps) => { // const agent = useContext(AgentContext); const conversation = useContext(ConversationContext).conversation; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/auto-task.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/auto-task.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/auto-task.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/auto-task.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/browser.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/browser.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/browser.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/browser.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/discord.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/discord.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/discord.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/index.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/index.tsx new file mode 100644 index 000000000..eddfb89a9 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/index.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { TTS } from './tts'; +import { RateLimit } from './rate-limit'; +import { Discord } from './discord'; +import { Twitter } from './twitter'; +import { Telnyx } from './telnyx'; + +export const features = { + tts: ({voiceEndpoint}) => { + return ( + + ); + }, + rateLimit: ({maxUserMessages, maxUserMessagesTime, message}) => { + return ( + + ); + }, + discord: ({token, channels}) => { + if (token) { + channels = channels && channels.map((c: string) => c.trim()).filter(Boolean); + return ( + + ); + } else { + return null; + } + }, + twitterBot: ({token}) => { + if (token) { + return ( + + ); + } else { + return null; + } + }, + telnyx: ({apiKey, phoneNumber, message, voice}) => { + if (apiKey) { + return ( + + ); + } else { + return null; + } + }, +} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/live-mode.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/live-mode.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/live-mode.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/live-mode.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/media-generator.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/media-generator.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/media-generator.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/media-generator.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/rag-memory.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/rag-memory.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/rag-memory.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/rag-memory.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/rate-limit.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/rate-limit.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/rate-limit.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/rate-limit.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/status-updates.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/status-updates.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/status-updates.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/status-updates.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/store.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/store.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/store.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/store.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/telnyx.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/telnyx.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/telnyx.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/telnyx.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/tts.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/tts.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/tts.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/tts.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/twitter-spaces.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/twitter-spaces.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/twitter-spaces.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/twitter-spaces.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/twitter.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/twitter.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/twitter.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/twitter.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/video-perception.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/video-perception.tsx similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/video-perception.tsx rename to packages/usdk/packages/upstreet-agent/packages/react-agents/components/features/video-perception.tsx diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/core/tsconfig.json b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/core/tsconfig.json new file mode 100644 index 000000000..5c133cc04 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../../../../../tsconfig.json" +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/index.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/index.tsx new file mode 100644 index 000000000..0c7108f2e --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/plugins/index.tsx @@ -0,0 +1,216 @@ +import React, { useEffect, useState } from 'react'; +import { Action, useEnv, useRuntime } from 'react-agents'; +import { jsonSchemaToZod } from 'json-schema-to-zod-object'; +import { z, ZodTypeAny } from 'zod'; +import type { + IActionHandlerCallbackArgs, + IPlugin, + IAdapter, + IRuntime, +} from '../types/eliza'; + +function generateZodSchemaFromExample(obj: any): z.ZodTypeAny { + if (typeof obj === "string") return z.string(); + if (typeof obj === "number") return z.number(); + if (typeof obj === "boolean") return z.boolean(); + if (Array.isArray(obj)) { + return z.array(generateZodSchemaFromExample(obj[0] || z.any())); + } + if (typeof obj === "object" && obj !== null) { + const shape: Record = {}; + for (const key in obj) { + shape[key] = generateZodSchemaFromExample(obj[key]); + } + return z.object(shape); + } + return z.any(); +} +function formatParameters({ + pluginParameters, + pluginEnv, + parameters, + env, +}: { + pluginParameters: object; // JSON schema + pluginEnv: object; // key-value object mapping the environment variable name to the parameter name (must appear in pluginParameters) + parameters: object; // key-value object contaning parameters, must match JSON schema with zod + env: object; // key-value object of the current env, for mapping env, via pluginEnv, to the parameters. second preference to parameters +}) { + // Generate zod schema from plugin parameters JSON schema + const zodSchema = jsonSchemaToZod(pluginParameters); + + // Create merged parameters object, with env values as fallback + const mergedParameters = {...parameters}; + if (pluginEnv) { + for (const [envKey, paramName] of Object.entries(pluginEnv)) { + if (env[envKey] && !mergedParameters.hasOwnProperty(paramName)) { + mergedParameters[paramName] = env[envKey]; + } + } + } + + // Validate parameters against schema + try { + const parsed = zodSchema.parse(mergedParameters); + // console.log('got parsed', { + // mergedParameters, + // parsed, + // }); + } catch (err) { + throw new Error(`Invalid plugin parameters: ${err.message}`); + } + + return mergedParameters; +} + +// + +type PluginProps = { + plugin?: IPlugin; + name?: string; + parameters: any; +}; +export const Plugin: React.FC = (props: PluginProps) => { + const { + // plugin, + name, + parameters, + } = props; + // if (!plugin && !name) { + // throw new Error('Plugin or name must be provided'); + // } + + // const [localPluginPromise, setLocalPluginPromise] = useState(false); + const [localPlugin, setLocalPlugin] = useState(null); + const [localPluginPackageJson, setLocalPluginPackageJson] = useState(null); + useEffect(() => { + if (name) { + let live = true; + (async () => { + // const { + // promise: pluginPromise, + // resolve: pluginResolve, + // reject: pluginReject, + // } = Promise.withResolvers(); + // setLocalPluginPromise(true); + + const [ + pluginDefault, + pluginPackageJson, + ] = await Promise.all([ + (async () => { + let plugin = await globalThis.dynamicImport(name); + // console.log('got plugin', plugin); + if (typeof plugin === 'function') { + plugin = await plugin({ + runtime, + }); + } + return plugin; + })(), + (async () => { + const packageJson = await globalThis.dynamicImport(`${name}/package.json`); + return packageJson; + })(), + ]); + // pluginResolve(pluginDefault); + if (!live) return; + // console.log('load plugin', name); + + // console.log('plugin setState', { + // pluginDefault, + // pluginPackageJson, + // }); + + setLocalPlugin(pluginDefault); + setLocalPluginPackageJson(pluginPackageJson); + })(); + return () => { + // console.log('cancel', name); + live = false; + }; + } + }, [ + // plugin, + name, + ]); + const env = useEnv(); + const runtime = useRuntime(); + + // console.log('render local plugin', localPlugin); + + return localPlugin && localPluginPackageJson && ( + <> + {(localPlugin.actions ?? []).map((action: any) => { + const examples = action.examples.map(exampleMessages => { + const agentMessages = exampleMessages.filter(message => { + return /agentName/.test(message.user); + }); + if (agentMessages.length > 0) { + const agentMessage = agentMessages[0]; + const { + action, + ...args + } = agentMessage.content; + return args; + } else { + return null; + } + }).filter(Boolean); + // console.log('got examples', examples); + if (examples.length > 0) { + const schema = generateZodSchemaFromExample(examples[0]); + // console.log('got schema', schema); + return ( + { + const { args } = e.data.message; + // console.log('got handler', args); + + await new Promise((resolve, reject) => { + const parameters2 = formatParameters({ + pluginParameters: localPluginPackageJson.pluginParameters, + pluginEnv: localPluginPackageJson.pluginEnv, + parameters, + env, + }); + const message = { + content: args, + }; + const state = {}; + const options = {}; + const callback = (result: IActionHandlerCallbackArgs) => { + console.log('got callback result', result); + const { + text, + error, + attachments, + } = result; + resolve(null); + }; + const opts = { + runtime, + parameters: parameters2, + message, + state, + options, + callback, + }; + console.log('call action handler', action.handler); + action.handler(opts); + }); + }} + key={action.name} + /> + ); + } else { + return null; + } + }).filter(Boolean)} + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/types/eliza.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/types/eliza.ts new file mode 100644 index 000000000..0704922cf --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/types/eliza.ts @@ -0,0 +1,80 @@ +export type IAgentRuntime = {}; +export type State = {}; +export type Options = {}; +export type Memory = { + user: string; + content: any; +}; + +export type IActionHandlerAttachment = { + id: string; + url: string; + // title: "Generated 3D", + // source: "ThreeDGeneration", + // description: ThreeDPrompt, + // text: ThreeDPrompt, +}; +export type IActionHandlerCallbackArgs = { + text: string; + error?: boolean; + attachments?: IActionHandlerAttachment[], +}; +export type HandlerFn = ( + runtime: IAgentRuntime, + message: Memory, + state: State, + options: Options, + callback: (result: IActionHandlerCallbackArgs) => void, +) => void; +export type ValidateFn = ( + runtime: IAgentRuntime, + message: Memory, +) => Promise; +export type IAction = { + name: string; + // similies?: string[]; + description: string; + examples: Memory[][]; + validate: ValidateFn, + handler: HandlerFn; +}; + +export type IEvaluator = { + name: string; + // similes?: string[], + alwaysRun?: boolean, + validate: ValidateFn, + description: string, + handler: HandlerFn, + examples: { + context: string; + message: Memory[]; + }[], +}; + +export type IProvider = { + get: ( + runtime: IAgentRuntime, + message: Memory, + state?: State + ) => Promise; +}; + +export type IPlugin = { + actions: IAction[]; + evaluators: IEvaluator[]; + providers: IProvider[]; +}; + +export type Database = {}; + +export type IAdapter = (database: Database) => void; + +export type IRuntime = { + getSetting: (key: string) => string; +}; + +export type Client = { + start: (runtime: IRuntime) => any; + stop: (runtime: IRuntime) => void; +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/config-components.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/config-components.tsx deleted file mode 100644 index c3fd108d7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/config-components.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, { useRef, useState, useEffect, useMemo, useContext } from 'react'; -import type { - AgentObject, -} from '../../types'; -import { - featureRenderers, -} from '../../util/agent-features-renderer'; - -// defaults - -type ConfigAgentComponentProps = { - config?: AgentObject; -}; - -/** - * Renders the default agent components. - * @returns The JSX elements representing the default agent components. - */ -export const ConfigAgentComponents = (props: ConfigAgentComponentProps) => { - const features = props.config?.features ?? {}; - return ( - <> - {Object.keys(features).map((key) => { - const value = features[key]; - const FeatureRenderer = featureRenderers[key]; - return ( - - ); - })} - - ); -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/default-components.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/default-components.tsx index 364df23f2..fcdc67e68 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/default-components.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/components/util/default-components.tsx @@ -18,6 +18,7 @@ import { } from '../../hooks'; import { Prompt } from '../core/prompt'; import { ChatLoop } from '../../loops/chat-loop'; +import { Ping } from '../core/ping'; // import { ActionLoop } from '../../loops/action-loop'; import { ChatActions } from '../core/chat'; import { @@ -46,6 +47,7 @@ export const DefaultAgentComponents = (props: DefaultAgentComponentProps) => { + ); }; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/hooks.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/hooks.ts index ab477a21b..2e0516ed5 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/hooks.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/hooks.ts @@ -71,6 +71,10 @@ export const useInit: () => any = () => { const appContextValue = useContext(AppContext); return appContextValue.useInit(); }; +export const useRuntime = () => { + const appContextValue = useContext(AppContext); + return appContextValue.useRuntime(); +}; // get the passed-down agent debug flag export const useDebug: () => number = () => { const appContextValue = useContext(AppContext); diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/index.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/index.tsx index eb2d915e7..d1774943f 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/index.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/index.tsx @@ -1,29 +1,27 @@ export * from './components/core/action'; export * from './components/core/agent'; -export * from './components/plugins/browser'; export * from './components/core/chat'; export * from './components/core/conversation'; -export * from './components/util/default-components'; -export * from './components/plugins/discord'; -export * from './components/plugins/live-mode'; -export * from './components/plugins/media-generator'; -export * from './components/plugins/rag-memory'; -export * from './components/util/message-utils'; export * from './components/core/name'; export * from './components/core/perception'; export * from './components/core/personality'; export * from './components/core/prompt'; -export * from './components/plugins/rate-limit'; -export * from './components/plugins/status-updates'; -export * from './components/plugins/store'; -export * from './components/plugins/telnyx'; -export * from './components/plugins/tts'; -export * from './components/plugins/twitter-spaces'; -export * from './components/plugins/twitter'; export * from './components/core/uniform'; -export * from './components/plugins/video-perception'; +export * from './components/core/features'; +export * from './components/core/clients'; +export * from './components/core/plugins'; + +export * from './components/features/index'; + +export * from './components/clients/index'; +export * from './components/plugins/index'; + +export * from './components/util/default-components'; +export * from './components/util/message-utils'; + export * from './loops/chat-loop'; export * from './loops/action-loop'; -export * from './components/plugins/auto-task'; export * from './hooks'; + +export * from './root'; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-buffer-manager.js b/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-buffer-manager.mjs similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-buffer-manager.js rename to packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-buffer-manager.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-queue-manager.js b/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-queue-manager.mjs similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-queue-manager.js rename to packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/audio-queue-manager.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/discord-client.js b/packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/discord-client.mjs similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/discord-client.js rename to packages/usdk/packages/upstreet-agent/packages/react-agents/lib/discord/discord-client.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/loops/action-loop.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/loops/action-loop.tsx index 5969474b4..99418cd26 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/loops/action-loop.tsx +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/loops/action-loop.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import { useAgent, useConversation } from '../hooks'; -import { LoopProps } from './types'; +import { LoopProps } from '../types'; import { ReACTEvaluator } from '../evaluators/react-evaluator'; // import { PerceptionEvent } from '../classes/perception-event'; import { ConversationObject } from '../classes/conversation-object'; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/root.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/root.ts index df43bf94c..949560244 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/root.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/root.ts @@ -2,8 +2,8 @@ import { ReactNode } from 'react'; import { headers } from './constants.mjs'; import { SupabaseStorage } from './storage/supabase-storage.mjs'; import { PGliteStorage } from './storage/pglite-storage.mjs'; -import { AgentRenderer } from './classes/agent-renderer.tsx'; -import { ChatsSpecification } from './classes/chats-specification.ts'; +import { AgentRenderer } from './classes/agent-renderer'; +import { ChatsSpecification } from './classes/chats-specification'; import { multiplayerEndpointUrl } from './util/endpoints.mjs'; type RootOpts = { @@ -24,9 +24,9 @@ export class Root extends EventTarget { constructor(opts: RootOpts = {}) { super(); - if (!(opts.storageAdapter || opts.env?.AGENT_TOKEN)) { - throw new Error('either storageAdapter or auth.jwt are required'); - } + // if (!(opts.storageAdapter || opts.env?.AGENT_TOKEN)) { + // throw new Error('either storageAdapter or env.AGENT_TOKEN are required'); + // } this.opts = opts; // XXX pass in models adapters @@ -425,7 +425,7 @@ export class Root extends EventTarget { } } render(node: ReactNode) { - this.agentRenderer.render(node); + return this.agentRenderer.render(node); } unmount() { return this.agentRenderer.unmount(); diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/runtime.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/runtime.ts index 1203dc6f2..7732e0d72 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/runtime.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/runtime.ts @@ -33,7 +33,7 @@ import { } from './util/extendable-message-event'; import { saveMessageToDatabase, -} from './util/saveMessageToDatabase.js'; +} from './util/saveMessageToDatabase.mjs'; import { uniquifyActions, formatBasicSchema, diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/types/react-agents.d.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/types.ts similarity index 98% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/types/react-agents.d.ts rename to packages/usdk/packages/upstreet-agent/packages/react-agents/types.ts index a1851d0a1..950b48b9c 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/types/react-agents.d.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/types.ts @@ -1,4 +1,4 @@ -import type { ReactNode, FC, Ref } from 'react'; +import type { ReactNode, Ref } from 'react'; import type { ZodTypeAny } from 'zod'; // intrinsics @@ -37,6 +37,8 @@ export type AgentObjectData = { smallModel?: string; largeModel?: string; features?: string[]; + clients?: string[]; + plugins?: string[]; address?: string; stripeConnectAccountId?: string; }; @@ -51,7 +53,7 @@ export type GenerativeAgentObject = { agent: ActiveAgentObject; conversation: ConversationObject; - get location(): URL; + // get location(): URL; embed: (text: string) => Promise>; complete: ( @@ -202,6 +204,7 @@ export type LoopProps = { hint?: string; evaluator?: Evaluator; actOpts?: ActOpts; + children?: ReactNode; } // actions @@ -437,7 +440,7 @@ export type PingManager = { destroy: () => void; }; export type ActiveAgentObject = AgentObject & { - agentJson: AgentObject; + config: AgentObjectData; appContextValue: AppContextValue; registry: AgentRegistry; @@ -447,7 +450,6 @@ export type ActiveAgentObject = AgentObject & { twitterManager: TwitterManager; twitterSpacesManager: TwitterSpacesManager; telnyxManager: TelnyxManager; - pingManager: PingManager; generativeAgentsMap: WeakMap; // @@ -677,16 +679,16 @@ export type ServerProps = { // contexts -type Compartment = { - evaluate: (s: string) => any; -}; +// type Compartment = { +// evaluate: (s: string) => any; +// }; -type Kv = { +export type Kv = { get: (key: string, defaultValue?: T | (() => T)) => Promise; set: (key: string, value: T | ((oldValue: T | undefined) => T)) => Promise; use: (key: string, defaultValue?: T | (() => T)) => [T, (value: T | ((oldValue: T | undefined) => T)) => void]; } -type Tts = { +export type Tts = { getVoiceStream: (text: string, opts?: any) => ReadableAudioStream; getVoiceConversionStream: (blob: Blob, opts?: any) => ReadableAudioStream; }; @@ -765,6 +767,7 @@ export type AppContextValue = { useChatsSpecification: () => ChatsSpecification; useCodecs: () => any; useInit: () => any; + useRuntime: () => any; useDebug: () => number; useRegistry: () => RenderRegistry; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/types/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents/types/package.json deleted file mode 100644 index 47d75555b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/types/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "react-agents-types", - "main": "react-agents.d.ts" -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-default.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-default.tsx new file mode 100644 index 000000000..3e03b2af5 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-default.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { Agent, Features, Clients, Plugins } from 'react-agents'; +import config from './agent.json'; + +export default function MyAgent() { + return ( + + + + + {/* ... */} + + ); +}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-features-renderer.tsx b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-features-renderer.tsx deleted file mode 100644 index e78e27993..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/agent-features-renderer.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import React from 'react'; -// import { z } from 'zod'; -// import dedent from 'dedent'; -import { TTS } from '../components/plugins/tts'; -import { RateLimit } from '../components/plugins/rate-limit'; -import { Discord } from '../components/plugins/discord'; -import { Twitter } from '../components/plugins/twitter'; -import { Telnyx } from '../components/plugins/telnyx'; -// import { currencies, intervals } from '../constants.mjs'; - -// export const paymentPropsType = z.object({ -// name: z.string(), -// description: z.string().optional(), -// amount: z.number().int(), -// currency: z.enum(currencies), -// }); -// export const paymentItemType = z.object({ -// type: z.literal('payment'), -// props: paymentPropsType, -// }); -// export const subscriptionPropsType = z.object({ -// name: z.string(), -// description: z.string().optional(), -// amount: z.number().int(), -// currency: z.enum(currencies), -// interval: z.enum(intervals), -// intervalCount: z.number(), -// }); -// export const subscriptionItemType = z.object({ -// type: z.literal('subscription'), -// props: subscriptionPropsType, -// }); -// export const storeItemType = z.union([ -// paymentItemType, -// subscriptionItemType, -// ]); - -// - -/* export const featureSpecs = [ - { - name: 'tts', - description: dedent`\ - Text to speech. - Available voice endpoints: - ` + '\n' - + defaultVoices.map(v => `* ${JSON.stringify(v.name)}: ${v.voiceEndpoint}`).join('\n'), - schema: z.union([ - z.object({ - voiceEndpoint: z.enum(defaultVoices.map(v => v.voiceEndpoint)), - }), - z.null(), - ]), - examples: [{voiceEndpoint: defaultVoices[0].voiceEndpoint},], - imports: () => [ - 'TTS', - ], - components: ({ - voiceEndpoint, - }) => [ - dedent` - - `, - ], - }, - { - name: 'rateLimit', - description: dedent`\ - Agent is publicly available. - The rate limit is \`maxUserMessages\` messages per \`maxUserMessagesTime\` milliseconds. - When the rate limit is exceeded, the agent will respond with the static \`message\`. - If either \`maxUserMessages\` or \`maxUserMessagesTime\` is not provided or zero, the rate limit is disabled. - ` + '\n' - + defaultVoices.map(v => `* ${JSON.stringify(v.name)}: ${v.voiceEndpoint}`).join('\n'), - schema: z.union([ - z.object({ - maxUserMessages: z.number().optional(), - maxUserMessagesTime: z.number().optional(), - message: z.string().optional(), - }), - z.null(), - ]), - examples: [{ maxUserMessages: 5, maxUserMessagesTime: 60000, message: "Whoa there! Take a moment.", }], - imports: () => [ - 'RateLimit', - ], - components: ({ - maxUserMessages, - maxUserMessagesTime, - message, - }) => [ - dedent` - - `, - ], - }, - { - name: 'discord', - description: dedent`\ - Add Discord integration to the agent. Add this feature only when the user explicitly requests it and provides a bot token. - - The user should follow these instructions to set up their bot (you can instruct them to do this): - - Create a bot application at https://discord.com/developers/applications and note the CLIENT_ID (also called "application id") - - Enable Privileged Gateway Intents at https://discord.com/developers/applications/CLIENT_ID/bot - - Add the bot to your server at https://discord.com/oauth2/authorize/?permissions=-2080908480&scope=bot&client_id=CLIENT_ID - - Get the bot token at https://discord.com/developers/applications/CLIENT_ID/bot - The token is required and must be provided. - - \`channels\` is a list of channel names (text or voice) that the agent should join. - `, - schema: z.union([ - z.object({ - token: z.string(), - channels: z.array(z.string()), - }), - z.null(), - ]), - examples: [{ token: 'YOUR_DISCORD_BOT_TOKEN', channels: ['general', 'voice'], }], - imports: (discord) => { - if (discord.token) { - return ['Discord']; - } else { - return []; - } - }, - components: (discord) => { - const channels = formatDiscordBotChannels(discord.channels); - if (discord.token && channels.length > 0) { - return [ - dedent` - - `, - ]; - } else { - return []; - } - }, - }, - { - name: 'twitterBot', - description: dedent`\ - Add a Twitter bot to the agent. - - The API token is required. - `, - schema: z.union([ - z.object({ - token: z.string(), - }), - z.null(), - ]), - examples: [{ token: 'YOUR_TWITTER_BOT_TOKEN', }], - imports: (twitterBot) => { - if (twitterBot.token) { - return ['TwitterBot']; - } else { - return []; - } - }, - components: (twitterBot) => { - if (twitterBot.token) { - return [ - dedent` - - `, - ]; - } else { - return []; - } - }, - }, - { - name: 'telnyx', - description: dedent`\ - Add Telnyx phone call/SMS support to the agent. Add this feature only when the user explicitly requests it and provides an api key. - - Phone number is optional, but if provided must be in +E.164 format (e.g. +14151234567). - `, - schema: z.union([ - z.object({ - apiKey: z.string(), - phoneNumber: z.string().optional(), - message: z.boolean(), - voice: z.boolean(), - }), - z.null(), - ]), - examples: [{ apiKey: 'YOUR_TELNYX_API_KEY', phoneNumber: '+14151234567', message: true, voice: true, }], - imports: (telnyx) => { - if (telnyx.apiKey) { - return ['Telnyx']; - } else { - return []; - } - }, - components: (telnyx) => { - if (telnyx.apiKey) { - return [ - dedent` - - `, - ]; - } else { - return []; - } - }, - }, - { - name: 'storeItems', - description: dedent`\ - List of items that can be purchased from the agent, with associated prices. - \`amount\` in cents (e.g. 100 = $1). - `, - schema: z.union([ - z.array(storeItemType), - z.null(), - ]), - examples: [{type: 'payment', props: { name: 'Art', description: 'An art piece', amount: 499, currency: 'usd',},},], - imports: (storeItems) => { - const isValidStoreItem = (storeItem) => - !!storeItem.props.name && !!storeItem.props.amount && !!storeItem.props.currency; - - const result = []; - if (storeItems.some((storeItem) => storeItem.type === 'payment' && isValidStoreItem(storeItem))) { - result.push('Payment'); - } - if (storeItems.some((storeItem) => storeItem.type === 'subscription' && isValidStoreItem(storeItem))) { - result.push('Subscription'); - } - return result; - }, - components: (storeItems) => { - return storeItems.map((storeItem) => { - if (storeItem.type === 'payment') { - if (!!storeItem.props.name && !!storeItem.props.amount && !!storeItem.props.currency) { - return dedent` - - `; - } else { - return ''; - } - } else if (storeItem.type === 'subscription') { - if (!!storeItem.props.name && !!storeItem.props.amount && !!storeItem.props.currency) { - return dedent` - - `; - } else { - return ''; - } - } else { - throw new Error(`unexpected store item type: ${storeItem.type}`); - } - }); - }, - }, -]; */ -export const featureRenderers = { - tts: ({voiceEndpoint}) => { - return ( - - ); - }, - rateLimit: ({maxUserMessages, maxUserMessagesTime, message}) => { - return ( - - ); - }, - discord: ({token, channels}) => { - if (token) { - channels = channels && channels.map((c: string) => c.trim()).filter(Boolean); - return ( - - ); - } else { - return null; - } - }, - twitterBot: ({token}) => { - if (token) { - return ( - - ); - } else { - return null; - } - }, - telnyx: ({apiKey, phoneNumber, message, voice}) => { - if (apiKey) { - return ( - - ); - } else { - return null; - } - }, -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/ethereum-utils.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/ethereum-utils.mjs index 217536fbe..70e1b891c 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/ethereum-utils.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/ethereum-utils.mjs @@ -14,10 +14,12 @@ export const getWalletFromMnemonic = (mnemonic, accountIndex = 0) => { return wallet; }; export const getConnectedWalletsFromMnemonic = (mnemonic, accountIndex = 0) => { - const wallet = getWalletFromMnemonic(mnemonic, accountIndex); + const wallet = mnemonic ? + getWalletFromMnemonic(mnemonic, accountIndex) + : null; const result = {}; for (const [name, provider] of Object.entries(providers)) { - result[name] = wallet.connect(provider); + result[name] = wallet?.connect(provider); } return result; }; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/format-schema.ts b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/format-schema.ts index d1b4b2a3d..15a335cdf 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/format-schema.ts +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/format-schema.ts @@ -62,7 +62,6 @@ const formatAction = (action: ActionPropsAux) => { const { type, description, - state, examples, } = action; @@ -84,7 +83,6 @@ const formatAction = (action: ActionPropsAux) => { ) : '' ) + (description ? (description + '\n') : '') + - (state ? (state + '\n') : '') + (examplesJsonString ? ( dedent` diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/loadMessagesFromDatabase.js b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/loadMessagesFromDatabase.mjs similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/util/loadMessagesFromDatabase.js rename to packages/usdk/packages/upstreet-agent/packages/react-agents/util/loadMessagesFromDatabase.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/saveMessageToDatabase.js b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/saveMessageToDatabase.mjs similarity index 100% rename from packages/usdk/packages/upstreet-agent/packages/react-agents/util/saveMessageToDatabase.js rename to packages/usdk/packages/upstreet-agent/packages/react-agents/util/saveMessageToDatabase.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/tls-proxy/package.json b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/package.json new file mode 100644 index 000000000..1a927e09c --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/package.json @@ -0,0 +1,4 @@ +{ + "name": "tls", + "main": "tls.mjs" +} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/tls-proxy/promises.mjs b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/promises.mjs new file mode 100644 index 000000000..ad5042ff9 --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/promises.mjs @@ -0,0 +1,2 @@ +import memfs from 'memfs'; +export const promises = memfs.promises; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/tls-proxy/tls.mjs b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/tls.mjs new file mode 100644 index 000000000..7c645e42f --- /dev/null +++ b/packages/usdk/packages/upstreet-agent/packages/tls-proxy/tls.mjs @@ -0,0 +1 @@ +export default {}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/wrangler.toml b/packages/usdk/packages/upstreet-agent/wrangler.toml index ccefabaff..64246257e 100644 --- a/packages/usdk/packages/upstreet-agent/wrangler.toml +++ b/packages/usdk/packages/upstreet-agent/wrangler.toml @@ -1,9 +1,13 @@ name = "" main = "main.jsx" -compatibility_date = "2023-11-21" -node_compat = true +compatibility_date = "2024-09-23" +compatibility_flags = [ "nodejs_compat" ] workers_dev = true +rules = [ + { type = "Text", globs = ["**/*.cdc", "**/*.cdc?raw"], fallthrough = true } +] + [[durable_objects.bindings]] name = "AGENT" class_name = "DurableObject" @@ -13,5 +17,4 @@ tag = "v1" new_classes = ["DurableObject"] [vars] -AGENT_JSON = "" WORKER_ENV = "production" \ No newline at end of file diff --git a/packages/usdk/test/basic.test.tsx b/packages/usdk/test/basic.test.tsx new file mode 100644 index 000000000..a2264e7af --- /dev/null +++ b/packages/usdk/test/basic.test.tsx @@ -0,0 +1,121 @@ +import path from 'path'; +import fs from 'fs'; +import child_process from 'child_process'; + +import { mkdirp } from 'mkdirp'; +import { rimraf } from 'rimraf'; + +import React from 'react'; +import { createRoot, Agent } from 'react-agents'; +import * as codecs from 'codecs/ws-codec-runtime-fs.mjs'; + +const registryHash = `f3689d8c6118c97390779a3322ebca8c61a34a2d`; +const npmBin = 'pnpm'; + +const npmInstallDirectory = async (cwd: string) => { + const cp = child_process.spawn(npmBin, ['install'], { + stdio: 'inherit', + cwd, + }); + await new Promise((resolve, reject) => { + cp.on('close', (code) => { + if (code === 0) { + resolve(null); + } else { + reject(new Error(`npm install failed with code ${code}`)); + } + }); + cp.on('error', (err) => { + console.warn('npm install error', err.stack); + reject(err); + }); + }); +}; + +test('createRoot', async () => { + // create the agents directory + const agentsDir = path.join('/tmp', '.agents'); + await mkdirp(agentsDir); + + const indexJson = await (async () => { + const res = await fetch(`https://rawcdn.githack.com/elizaos-plugins/registry/${registryHash}/index.json`); + const j = res.json(); + return j; + })(); + + const skip = 0; + const limit = Infinity; + for (const [name, ref] of Object.entries(indexJson).slice(skip, skip + limit)) { + // create the agent directory + const agentBaseName = name + .replace(/[^a-z0-9]+/gi, '-') + .replace(/-{2,}/g, '-') + .replace(/^-|-$/g, ''); + // console.log('base name', {name, agentBaseName}); + const agentDir = path.join(agentsDir, agentBaseName); + await mkdirp(agentDir); + // change to the agent directory + process.chdir(agentDir); + + // create the package.json + const packageJson = { + name, + dependencies: { + [name]: ref, + }, + }; + // write the package.json + await fs.promises.writeFile( + path.join(agentDir, 'package.json'), + JSON.stringify(packageJson, null, 2) + ); + + // perform npm install + await npmInstallDirectory(agentDir); + + const agentJson = { + id: "b94ed43d-4305-4b38-a3b6-4d5b3b6a8fc3", + ownerId: "4cf9f0df-6ec4-4c44-8251-c1cbb61f7a6b", + address: "0x5f7b45a76a71b68d114d7868be9b5ad8870ba678", + stripeConnectAccountId: "", + name: "AI Agent 77139", + description: "Created by the AI Agent SDK", + bio: "A cool AI", + model: "openai:gpt-4o-2024-08-06", + smallModel: "openai:gpt-4o-mini", + largeModel: "openai:o1-preview", + startUrl: "https://user-agent-b94ed43d-4305-4b38-a3b6-4d5b3b6a8fc3.isekaichat.workers.dev", + previewUrl: "", + homespaceUrl: "", + avatarUrl: "", + voiceEndpoint: "elevenlabs:scillia:kNBPK9DILaezWWUSHpF9", + voicePack: "ShiShi voice pack", + capabilities: [], + version: "0.0.108", + plugins: [ + { + name, + parameters: {}, + }, + ], + }; + const state = { + agentJson, + env: {}, + enivronment: 'development', + codecs, + }; + + // render the agent + const root = createRoot(state); + // const { agents } = await root.render(); + const { agents } = await root.render(); + console.log('agents', agents); + + // unmount the agent + await root.unmount(); + } + + // remove the agents directory + await rimraf(agentsDir); +}); \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eae781386..86f422f20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,10 +85,10 @@ importers: version: 1.5.0 '@supabase/ssr': specifier: 0.1.0 - version: 0.1.0(@supabase/supabase-js@2.39.3) + version: 0.1.0(@supabase/supabase-js@2.39.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@supabase/supabase-js': specifier: 2.39.3 - version: 2.39.3 + version: 2.39.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@tsndr/cloudflare-worker-jwt': specifier: ^2.5.3 version: 2.5.3 @@ -151,7 +151,7 @@ importers: version: 10.18.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) geist: specifier: 1.2.1 - version: 1.2.1(next@14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)) + version: 1.2.1(next@14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)) js-ago: specifier: ^2.1.1 version: 2.1.1 @@ -166,10 +166,10 @@ importers: version: 2.30.1 next: specifier: 14.2.14 - version: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + version: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) next-auth: specifier: 5.0.0-beta.4 - version: 5.0.0-beta.4(next@14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react@18.2.0) + version: 5.0.0-beta.4(next@14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react@18.2.0) next-themes: specifier: 0.3.0 version: 0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -323,7 +323,7 @@ importers: version: 2.1.1 discord.js: specifier: ^14.16.3 - version: 14.16.3 + version: 14.16.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) esbuild: specifier: 0.24.0 version: 0.24.0 @@ -335,25 +335,25 @@ importers: version: 11.13.5(@emotion/is-prop-valid@1.3.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) fumadocs-core: specifier: ^14.5.3 - version: 14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) fumadocs-docgen: specifier: ^1.3.2 version: 1.3.2(typescript@5.7.2) fumadocs-mdx: specifier: 11.0.0 - version: 11.0.0(acorn@8.14.0)(fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)) + version: 11.0.0(acorn@8.14.0)(fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)) fumadocs-twoslash: specifier: ^2.0.1 - version: 2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(fumadocs-ui@14.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(shiki@1.24.2)(typescript@5.7.2) + version: 2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(fumadocs-ui@14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(shiki@1.24.2)(typescript@5.7.2) fumadocs-ui: specifier: 14.0.2 - version: 14.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + version: 14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) gray-matter: specifier: ^4.0.3 version: 4.0.3 next: specifier: 14.2.14 - version: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + version: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) postinstall: specifier: 0.7.5 version: 0.7.5 @@ -560,10 +560,10 @@ importers: version: 29.7.0(@babel/core@7.26.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + version: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) jest-environment-jsdom: specifier: ^29.7.0 - version: 29.7.0 + version: 29.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) postcss: specifier: ^8.4.31 version: 8.4.49 @@ -587,13 +587,13 @@ importers: version: 6.1.1(rollup@3.29.5)(typescript@5.7.2) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) sass: specifier: ^1.76.0 version: 1.82.0 storybook: specifier: ^7.4.5 - version: 7.6.20 + version: 7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10) tslib: specifier: ^2.6.2 version: 2.8.1 @@ -632,13 +632,16 @@ importers: version: 1.5.0 '@supabase/supabase-js': specifier: ^2.47.1 - version: 2.47.5 + version: 2.47.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@tsndr/cloudflare-worker-jwt': specifier: 2.5.3 version: 2.5.3 '@types/estree': specifier: ^1.0.5 version: 1.0.6 + '@types/react': + specifier: 19.0.0 + version: 19.0.0 '@wasm-audio-decoders/common': specifier: file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common @@ -662,7 +665,7 @@ importers: version: 5.3.0 character-card-utils: specifier: file:./packages/upstreet-agent/packages/character-card-utils - version: link:packages/upstreet-agent/packages/character-card-utils + version: file:packages/usdk/packages/upstreet-agent/packages/character-card-utils cli-table3: specifier: ^0.6.4 version: 0.6.5 @@ -698,7 +701,7 @@ importers: version: 0.20.2 ethers: specifier: ^6.12.0 - version: 6.13.4 + version: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) eventsource: specifier: ^2.0.2 version: 2.0.2 @@ -792,6 +795,9 @@ importers: queue-manager: specifier: file:./packages/upstreet-agent/packages/queue-manager version: link:packages/upstreet-agent/packages/queue-manager + react: + specifier: file:./packages/upstreet-agent/packages/react + version: link:packages/upstreet-agent/packages/react react-agents: specifier: file:./packages/upstreet-agent/packages/react-agents version: link:packages/upstreet-agent/packages/react-agents @@ -830,7 +836,7 @@ importers: version: link:packages/update-notifier upstreet-agent: specifier: file:./packages/upstreet-agent - version: file:packages/usdk/packages/upstreet-agent(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@18.19.68)(babel-jest@29.7.0(@babel/core@7.26.0))(babel-plugin-macros@3.1.0)(esbuild@0.20.2)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)) + version: file:packages/usdk/packages/upstreet-agent(@babel/core@7.26.0)(@google-cloud/vertexai@1.9.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(@types/node@18.19.68)(axios@1.7.9)(babel-jest@29.7.0(@babel/core@7.26.0))(babel-plugin-macros@3.1.0)(bufferutil@4.0.9)(esbuild@0.20.2)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5))(utf-8-validate@5.0.10) vercel: specifier: ^34.2.6 version: 34.4.0(@swc/core@1.10.1(@swc/helpers@0.5.13)) @@ -846,12 +852,9 @@ importers: winston: specifier: ^3.16.0 version: 3.17.0 - wrangler: - specifier: ^3.95.0 - version: 3.95.0 ws: specifier: ^8.17.0 - version: 8.18.0 + version: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) xdg-basedir: specifier: ^5.1.0 version: 5.1.0 @@ -875,9 +878,15 @@ importers: specifier: ^0.5.5 version: 0.5.5 devDependencies: + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 '@types/node': specifier: ^18.0.0 version: 18.19.68 + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@4.9.5) packages/usdk/packages/update-notifier: dependencies: @@ -939,6 +948,9 @@ importers: '@electric-sql/pglite': specifier: ^0.2.15 version: 0.2.15 + '@elizaos/core': + specifier: file:./packages/elizaos-core-proxy + version: file:packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy(@google-cloud/vertexai@1.9.2)(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(axios@1.7.9)(bufferutil@4.0.9)(react@file:packages/usdk/packages/upstreet-agent/packages/react)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(utf-8-validate@5.0.10) '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 @@ -947,16 +959,22 @@ importers: version: 1.17.7 '@supabase/supabase-js': specifier: ^2.47.1 - version: 2.47.5 + version: 2.47.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@tsndr/cloudflare-worker-jwt': specifier: 2.5.3 version: 2.5.3 '@types/jest': specifier: ^29.5.13 version: 29.5.14 + '@types/react': + specifier: 19.0.0 + version: 19.0.0 browser-util-inspect: specifier: ^0.2.0 version: 0.2.0 + child_process: + specifier: file:./packages/fs-proxy + version: link:packages/fs-proxy codecs: specifier: file:./packages/codecs version: link:packages/codecs @@ -971,10 +989,13 @@ importers: version: 16.4.7 ethers: specifier: ^6.12.0 - version: 6.13.4 + version: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) format-util: specifier: ^1.0.5 version: 1.0.5 + fs: + specifier: file:./packages/fs-proxy + version: link:packages/fs-proxy javascript-time-ago: specifier: ^2.5.11 version: 2.5.11 @@ -984,6 +1005,12 @@ importers: jimp: specifier: ^1.6.0 version: 1.6.0 + json-schema-to-zod-object: + specifier: ^2.6.7 + version: 2.6.7 + memfs: + specifier: ^4.15.1 + version: 4.15.1 memoize-one: specifier: ^6.0.0 version: 6.0.0 @@ -1020,6 +1047,9 @@ importers: stripe: specifier: ^16.10.0 version: 16.12.0 + tls: + specifier: file:./packages/tls-proxy + version: link:packages/tls-proxy together-ai: specifier: ^0.6.0-alpha.4 version: 0.6.0 @@ -1061,6 +1091,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) + packages/usdk/packages/upstreet-agent/packages/child-process-proxy: {} + packages/usdk/packages/upstreet-agent/packages/codecs: dependencies: lamejs: @@ -1081,6 +1113,86 @@ importers: packages/usdk/packages/upstreet-agent/packages/debouncer: {} + packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy: + dependencies: + '@ai-sdk/anthropic': + specifier: 0.0.56 + version: 0.0.56(zod@3.23.8) + '@ai-sdk/google': + specifier: 0.0.55 + version: 0.0.55(zod@3.23.8) + '@ai-sdk/google-vertex': + specifier: 0.0.43 + version: 0.0.43(@google-cloud/vertexai@1.9.2)(zod@3.23.8) + '@ai-sdk/groq': + specifier: 0.0.3 + version: 0.0.3(zod@3.23.8) + '@ai-sdk/openai': + specifier: 1.0.5 + version: 1.0.5(zod@3.23.8) + '@anthropic-ai/sdk': + specifier: 0.30.1 + version: 0.30.1 + '@fal-ai/client': + specifier: 1.2.0 + version: 1.2.0 + '@solana/web3.js': + specifier: 1.95.8 + version: 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@types/uuid': + specifier: 10.0.0 + version: 10.0.0 + ai: + specifier: 3.4.33 + version: 3.4.33(openai@4.73.0(zod@3.23.8))(react@19.0.0-rc-df5f2736-20240712)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.23.8) + anthropic-vertex-ai: + specifier: 1.0.2 + version: 1.0.2(zod@3.23.8) + fastestsmallesttextencoderdecoder: + specifier: 1.0.22 + version: 1.0.22 + gaxios: + specifier: 6.7.1 + version: 6.7.1 + glob: + specifier: 11.0.0 + version: 11.0.0 + handlebars: + specifier: ^4.7.8 + version: 4.7.8 + js-sha1: + specifier: 0.7.0 + version: 0.7.0 + js-tiktoken: + specifier: 1.0.15 + version: 1.0.15 + langchain: + specifier: 0.3.6 + version: 0.3.6(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8)))(axios@1.7.9)(handlebars@4.7.8)(openai@4.73.0(zod@3.23.8)) + ollama-ai-provider: + specifier: 0.16.1 + version: 0.16.1(zod@3.23.8) + openai: + specifier: 4.73.0 + version: 4.73.0(zod@3.23.8) + tinyld: + specifier: 1.3.4 + version: 1.3.4 + together-ai: + specifier: 0.7.0 + version: 0.7.0 + unique-names-generator: + specifier: 4.7.1 + version: 4.7.1 + uuid: + specifier: 11.0.3 + version: 11.0.3 + zod: + specifier: 3.23.8 + version: 3.23.8 + + packages/usdk/packages/upstreet-agent/packages/fs-proxy: {} + packages/usdk/packages/upstreet-agent/packages/path-util: {} packages/usdk/packages/upstreet-agent/packages/playwright-core-lite: {} @@ -1132,8 +1244,8 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-wrangler: dependencies: wrangler: - specifier: ^3.60.2 - version: 3.95.0 + specifier: ^3.99.0 + version: 3.99.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) devDependencies: jest: specifier: ^29.7.0 @@ -1148,6 +1260,8 @@ importers: specifier: 0.25.0-rc-df5f2736-20240712 version: 0.25.0-rc-df5f2736-20240712 + packages/usdk/packages/upstreet-agent/packages/tls-proxy: {} + packages: '@adobe/css-tools@4.4.1': @@ -1156,6 +1270,31 @@ packages: '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@ai-sdk/anthropic@0.0.56': + resolution: {integrity: sha512-FC/XbeFANFp8rHH+zEZF34cvRu9T42rQxw9QnUzJ1LXTi1cWjxYOx2Zo4vfg0iofxxqgOe4fT94IdT2ERQ89bA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + + '@ai-sdk/google-vertex@0.0.43': + resolution: {integrity: sha512-lmZukH74m6MUl4fbyfz3T4qs5ukDUJ6YB5Dedtu+aK+Mdp05k9qTHAXxWiB8i/VdZqWlS+DEo/+b7pOPX0V7wA==} + engines: {node: '>=18'} + peerDependencies: + '@google-cloud/vertexai': ^1.6.0 + zod: ^3.0.0 + + '@ai-sdk/google@0.0.55': + resolution: {integrity: sha512-dvEMS8Ex2H0OeuFBiT4Q1Kfrxi1ckjooy/PazNLjRQ3w9o9VQq4O24eMQGCuW1Z47qgMdXjhDzsH6qD0HOX6Cw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + + '@ai-sdk/groq@0.0.3': + resolution: {integrity: sha512-Iyj2p7/M0TVhoPrQfSiwfvjTpZFfc17a6qY/2s22+VgpT0yyfai9dVyLbfUAdnNlpGGrjDpxPHqK1L03r4KlyA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@ai-sdk/openai@0.0.9': resolution: {integrity: sha512-SSZGtX4KFDXWYmQ9JuhVumo1XOx1JAdHybYy08iwVXuCud9xdjZjjxgZkNPytQK9gRxFsYDOw1h0V/WXO7XgfQ==} engines: {node: '>=18'} @@ -1165,6 +1304,12 @@ packages: zod: optional: true + '@ai-sdk/openai@1.0.5': + resolution: {integrity: sha512-JDCPBJQx9o3LgboBPaA55v+9EZ7Vm/ozy0+J5DIr2jJF8WETjeCnigdxixyzEy/Od4wX871jOTSuGffwNIi0kA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@ai-sdk/provider-utils@0.0.5': resolution: {integrity: sha512-VVy9eQS+vS2j6cqTEQ9htMHz2nW/HFAkDXLvNFPoi1pZkviknJZEzb+DZUna6Od+jBf/TVA0HZwYnyGDaeI9cQ==} engines: {node: '>=18'} @@ -1183,10 +1328,98 @@ packages: zod: optional: true + '@ai-sdk/provider-utils@1.0.20': + resolution: {integrity: sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@ai-sdk/provider-utils@1.0.22': + resolution: {integrity: sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@ai-sdk/provider-utils@2.0.2': + resolution: {integrity: sha512-IAvhKhdlXqiSmvx/D4uNlFYCl8dWT+M9K+IuEcSgnE2Aj27GWu8sDIpAf4r4Voc+wOUkOECVKQhFo8g9pozdjA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@ai-sdk/provider@0.0.24': + resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==} + engines: {node: '>=18'} + + '@ai-sdk/provider@0.0.26': + resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==} + engines: {node: '>=18'} + '@ai-sdk/provider@0.0.3': resolution: {integrity: sha512-0B8P6VZpJ6F9yS9BpmJBYSqIaIfeRtL5tD5SP+qgR8y0pPwalIbRMUFiLz9YUT6g70MJsCLpm/2/fX3cfAYCJw==} engines: {node: '>=18'} + '@ai-sdk/provider@1.0.1': + resolution: {integrity: sha512-mV+3iNDkzUsZ0pR2jG0sVzU6xtQY5DtSCBy3JFycLp6PwjyLw/iodfL3MwdmMCRJWgs3dadcHejRnMvF9nGTBg==} + engines: {node: '>=18'} + + '@ai-sdk/react@0.0.70': + resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==} + version: 0.0.70 + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + + '@ai-sdk/solid@0.0.54': + resolution: {integrity: sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==} + engines: {node: '>=18'} + peerDependencies: + solid-js: ^1.7.7 + peerDependenciesMeta: + solid-js: + optional: true + + '@ai-sdk/svelte@0.0.57': + resolution: {integrity: sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==} + engines: {node: '>=18'} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + '@ai-sdk/ui-utils@0.0.50': + resolution: {integrity: sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@ai-sdk/vue@0.0.59': + resolution: {integrity: sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.4 + peerDependenciesMeta: + vue: + optional: true + '@algolia/cache-browser-local-storage@4.24.0': resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} @@ -1240,6 +1473,9 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@anthropic-ai/sdk@0.30.1': + resolution: {integrity: sha512-nuKvp7wOIz6BFei8WrTdhmSsx5mwnArYyJgh4+vYu3V4J0Ltb8Xm3odPm51n1aSI0XxNCrDl7O88cxCtUdAkaw==} + '@auth/core@0.18.4': resolution: {integrity: sha512-GsNhsP1xE/3FoNS3dVkPjqRljLNJ4iyL2OLv3klQGNvw3bMpROFcK4lqhx7+pPHiamnVaYt2vg1xbB+lsNaevg==} peerDependencies: @@ -1914,44 +2150,43 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@cfworker/json-schema@4.0.3': + resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} + '@cloudflare/kv-asset-handler@0.3.4': resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} - '@cloudflare/workerd-darwin-64@1.20241205.0': - resolution: {integrity: sha512-TArEZkSZkHJyEwnlWWkSpCI99cF6lJ14OVeEoI9Um/+cD9CKZLM9vCmsLeKglKheJ0KcdCnkA+DbeD15t3VaWg==} + '@cloudflare/workerd-darwin-64@1.20241218.0': + resolution: {integrity: sha512-8rveQoxtUvlmORKqTWgjv2ycM8uqWox0u9evn3zd2iWKdou5sncFwH517ZRLI3rq9P31ZLmCQBZ0gloFsTeY6w==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20241205.0': - resolution: {integrity: sha512-u5eqKa9QRdA8MugfgCoD+ADDjY6EpKbv3hSYJETmmUh17l7WXjWBzv4pUvOKIX67C0UzMUy4jZYwC53MymhX3w==} + '@cloudflare/workerd-darwin-arm64@1.20241218.0': + resolution: {integrity: sha512-be59Ad9nmM9lCkhHqmTs/uZ3JVZt8NJ9Z0PY+B0xnc5z6WwmV2lj0RVLtq7xJhQsQJA189zt5rXqDP6J+2mu7Q==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20241205.0': - resolution: {integrity: sha512-OYA7S5zpumMamWEW+IhhBU6YojIEocyE5X/YFPiTOCrDE3dsfr9t6oqNE7hxGm1VAAu+Irtl+a/5LwmBOU681w==} + '@cloudflare/workerd-linux-64@1.20241218.0': + resolution: {integrity: sha512-MzpSBcfZXRxrYWxQ4pVDYDrUbkQuM62ssl4ZtHH8J35OAeGsWFAYji6MkS2SpVwVcvacPwJXIF4JSzp4xKImKw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20241205.0': - resolution: {integrity: sha512-qAzecONjFJGIAVJZKExQ5dlbic0f3d4A+GdKa+H6SoUJtPaWiE3K6WuePo4JOT7W3/Zfh25McmX+MmpMUUcM5Q==} + '@cloudflare/workerd-linux-arm64@1.20241218.0': + resolution: {integrity: sha512-RIuJjPxpNqvwIs52vQsXeRMttvhIjgg9NLjjFa3jK8Ijnj8c3ZDru9Wqi48lJP07yDFIRr4uDMMqh/y29YQi2A==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20241205.0': - resolution: {integrity: sha512-BEab+HiUgCdl6GXAT7EI2yaRtDPiRJlB94XLvRvXi1ZcmQqsrq6awGo6apctFo4WUL29V7c09LxmN4HQ3X2Tvg==} + '@cloudflare/workerd-windows-64@1.20241218.0': + resolution: {integrity: sha512-tO1VjlvK3F6Yb2d1jgEy/QBYl//9Pyv3K0j+lq8Eu7qdfm0IgKwSRgDWLept84/qmNsQfausZ4JdNGxTf9xsxQ==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-shared@0.11.0': - resolution: {integrity: sha512-A+lQ8xp7992qSeMmuQ0ssL6CPmm+ZmAv6Ddikan0n1jjpMAic+97l7xtVIsswSn9iLMFPYQ9uNN/8Fl0AgARIQ==} - engines: {node: '>=16.7.0'} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2033,6 +2268,9 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@elizaos/core@file:packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy': + resolution: {directory: packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy, type: directory} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} @@ -2819,6 +3057,10 @@ packages: resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fal-ai/client@1.2.0': + resolution: {integrity: sha512-MNCnE5icY+OM5ahgYJItmydZ7AxhtzhgA5tQI13jVntzhLT0z+tetHIlAL1VA0XFZgldDzqxeTf9Pr5TW3VErg==} + engines: {node: '>=18.0.0'} + '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} @@ -2844,6 +3086,10 @@ packages: '@formatjs/intl-localematcher@0.5.9': resolution: {integrity: sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA==} + '@google-cloud/vertexai@1.9.2': + resolution: {integrity: sha512-pJSUG3r5QIvCFNfkz7/y7kEqvEJaVAk0jZbZoKbcPCRUnXaUeAq7p8I0oklqetGyxbUcZ2FOGpt+Y+4uIltVPg==} + engines: {node: '>=18.0.0'} + '@hono/node-server@1.13.7': resolution: {integrity: sha512-kTfUMsoloVKtRA2fLiGSd9qBddmru9KadNyhJCwgKBxTiNkaAJEwkVN9KV/rS4HtmmNRtUh6P+YpmjRMl0d9vQ==} engines: {node: '>=18.14.1'} @@ -3358,9 +3604,43 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.1.1': + resolution: {integrity: sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.5.0': + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + '@langchain/core@0.3.26': + resolution: {integrity: sha512-6RUQHEp8wv+JwtYIIEBYBzbLlcAQZFc7EDOgAM0ukExjh9HiXoJzoWpgMRRCrr/koIbtwXPJUqBprZK1I1CXHQ==} + engines: {node: '>=18'} + + '@langchain/openai@0.3.16': + resolution: {integrity: sha512-Om9HRlTeI0Ou6D4pfxbWHop4WGfkCdV/7v1W/+Jr7NSf0BNoA9jk5GqGms8ZtOYSGgPvizDu3i0TrM3B4cN4NA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.26 <0.4.0' + + '@langchain/textsplitters@0.1.0': + resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true @@ -3398,6 +3678,10 @@ packages: peerDependencies: three: '>= 0.159.0' + '@msgpack/msgpack@3.0.0-beta2': + resolution: {integrity: sha512-y+l1PNV0XDyY8sM3YtuMLK5vE3/hkfId+Do8pLo/OPxfxuFAUwcGz3oiiUuV46/aBpwTzZ+mRWVMtlSKbradhw==} + engines: {node: '>= 14'} + '@mui/core-downloads-tracker@5.16.11': resolution: {integrity: sha512-2eVDGg9OvIXNRmfDUQyKYH+jNcjdv1JkCH5F2YDgUye5fMX5nxGiYHAUe1BXaXyDMaLSwXC7LRksEKMiIQsFdw==} @@ -3714,10 +3998,18 @@ packages: '@noble/curves@1.2.0': resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + '@noble/curves@1.7.0': + resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.3.2': resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} + '@noble/hashes@1.6.0': + resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.6.1': resolution: {integrity: sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==} engines: {node: ^14.21.3 || >=16} @@ -3775,6 +4067,10 @@ packages: '@nut-tree-fork/shared@4.2.2': resolution: {integrity: sha512-SOIDs4H+rIh+IdXzS1KocMzjsMNqihMVB3mOaEo0lAycempKh/44XXktXUkjeJOwlYyL4Ugxed+SOrob5tTM5g==} + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + '@orama/orama@2.1.1': resolution: {integrity: sha512-euTV/2kya290SNkl5m8e/H1na8iDygk74nNtl4E0YZNyYIrEMwE1JwamoroMKGZw2Uz+in/8gH3m1+2YfP0j1w==} engines: {node: '>= 16.0.0'} @@ -5102,6 +5398,13 @@ packages: resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} engines: {node: '>=16.0.0'} + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/web3.js@1.95.8': + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@stitches/react@1.2.8': resolution: {integrity: sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==} peerDependencies: @@ -5781,6 +6084,9 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@16.18.11': resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} @@ -5857,6 +6163,9 @@ packages: '@types/react@18.3.16': resolution: {integrity: sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==} + '@types/react@19.0.0': + resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -5866,6 +6175,9 @@ packages: '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/scheduler@0.23.0': resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} @@ -5899,12 +6211,21 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} '@types/webxr@0.5.20': resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} @@ -6245,6 +6566,10 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -6346,6 +6671,28 @@ packages: zod: optional: true + ai@3.4.33: + resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==} + version: 3.4.33 + engines: {node: '>=18'} + peerDependencies: + openai: ^4.42.0 + react: ^18 || ^19 || ^19.0.0-rc + sswr: ^2.1.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + zod: ^3.0.0 + peerDependenciesMeta: + openai: + optional: true + react: + optional: true + sswr: + optional: true + svelte: + optional: true + zod: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -6433,6 +6780,12 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + anthropic-vertex-ai@1.0.2: + resolution: {integrity: sha512-4YuK04KMmBGkx6fi2UjnHkE4mhaIov7tnT5La9+DMn/gw/NSOLZoWNUx+13VY3mkcaseKBMEn1DBzdXXJFIP7A==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + any-base@1.1.0: resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} @@ -6655,6 +7008,9 @@ packages: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -6730,6 +7086,9 @@ packages: bare-events@2.5.0: resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} @@ -6751,6 +7110,13 @@ packages: big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bin-links@5.0.0: resolution: {integrity: sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -6777,6 +7143,9 @@ packages: bmp-ts@1.0.9: resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6788,6 +7157,9 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -6824,6 +7196,9 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -6840,6 +7215,9 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-equal@0.0.1: resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} engines: {node: '>=0.4.0'} @@ -6856,6 +7234,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -6970,6 +7352,9 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + character-card-utils@file:packages/usdk/packages/upstreet-agent/packages/character-card-utils: + resolution: {directory: packages/usdk/packages/upstreet-agent/packages/character-card-utils, type: directory} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -7203,6 +7588,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -7632,6 +8021,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -7713,6 +8106,10 @@ packages: delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -7901,6 +8298,9 @@ packages: react-dom: '>=18.0' three: '>=0.153' + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + edge-runtime@2.5.9: resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==} engines: {node: '>=16'} @@ -8055,6 +8455,12 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -8551,6 +8957,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-intercept@2.0.0: resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} @@ -8632,6 +9041,10 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -8654,9 +9067,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fast-uri@3.0.3: resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -8916,6 +9335,9 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs@file:packages/usdk/packages/upstreet-agent/packages/fs-proxy: + resolution: {directory: packages/usdk/packages/upstreet-agent/packages/fs-proxy, type: directory} + fsevents@2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -8993,6 +9415,14 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + + gcp-metadata@6.1.0: + resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} + engines: {node: '>=14'} + geist@1.2.1: resolution: {integrity: sha512-xCl7zWfnWqc+TbCG5qqyeT5tnVlOO4pSJsT3Ei59DN1SR4N2VlauF8Fv0D1pPFXGUJgu6RMoeZX+wsR4T9bMhg==} peerDependencies: @@ -9116,6 +9546,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} deprecated: Glob versions prior to v9 are no longer supported @@ -9171,6 +9606,10 @@ packages: glsl-noise@0.0.0: resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==} + google-auth-library@9.15.0: + resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -9192,6 +9631,10 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -9369,6 +9812,10 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -9850,6 +10297,11 @@ packages: isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} @@ -9896,6 +10348,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -9904,6 +10360,11 @@ packages: javascript-time-ago@2.5.11: resolution: {integrity: sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg==} + jayson@4.1.3: + resolution: {integrity: sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==} + engines: {node: '>=8'} + hasBin: true + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10076,10 +10537,16 @@ packages: js-sha1@0.6.0: resolution: {integrity: sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==} + js-sha1@0.7.0: + resolution: {integrity: sha512-oQZ1Mo7440BfLSv9TX87VNEyU52pXPVG19F9PL3gTgNt0tVxlZ8F4O6yze3CLuLx28TxotxvlyepCNaaV0ZjMw==} + js-string-escape@1.0.1: resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} engines: {node: '>= 0.8'} + js-tiktoken@1.0.15: + resolution: {integrity: sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -10127,6 +10594,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -10136,6 +10606,9 @@ packages: json-schema-to-ts@1.6.4: resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} + json-schema-to-zod-object@2.6.7: + resolution: {integrity: sha512-fSjVR1MXsRQJMeNa9lrPyZEf3Rmie9KuDlZeDbvk5IZN/7dHhHLF+8Wt1ejnWsJA6NXAghvRcYKtfW76bnSSuw==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -10171,6 +10644,14 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -10188,6 +10669,12 @@ packages: just-zip-it@2.3.1: resolution: {integrity: sha512-h8Y3DAVTZRP3Weq7btWYfkYHQGhxiuKzfOO7Ec+x8XaDcBvbOsC2jIdezC6tEzbt+A4fTJTREnj3gF5DyMkFfw==} + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + katex@0.16.15: resolution: {integrity: sha512-yE9YJIEAk2aZ+FL/G8r+UGw0CTUzEA8ZFy6E+8tc3spHUKq3qBnzCkI1CQwGoI9atJhVyFPEypQsTY7mJ1Pi9w==} hasBin: true @@ -10217,6 +10704,60 @@ packages: lamejs@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs: resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs, type: directory} + langchain@0.3.6: + resolution: {integrity: sha512-erZOIKXzwCOrQHqY9AyjkQmaX62zUap1Sigw1KrwMUOnVoLKkVNRmAyxFlNZDZ9jLs/58MaQcaT9ReJtbj3x6w==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/anthropic': '*' + '@langchain/aws': '*' + '@langchain/cohere': '*' + '@langchain/core': '>=0.2.21 <0.4.0' + '@langchain/google-genai': '*' + '@langchain/google-vertexai': '*' + '@langchain/groq': '*' + '@langchain/mistralai': '*' + '@langchain/ollama': '*' + axios: '*' + cheerio: '*' + handlebars: ^4.7.8 + peggy: ^3.0.2 + typeorm: '*' + peerDependenciesMeta: + '@langchain/anthropic': + optional: true + '@langchain/aws': + optional: true + '@langchain/cohere': + optional: true + '@langchain/google-genai': + optional: true + '@langchain/google-vertexai': + optional: true + '@langchain/groq': + optional: true + '@langchain/mistralai': + optional: true + '@langchain/ollama': + optional: true + axios: + optional: true + cheerio: + optional: true + handlebars: + optional: true + peggy: + optional: true + typeorm: + optional: true + + langsmith@0.2.14: + resolution: {integrity: sha512-ClAuAgSf3m9miMYotLEaZKQyKdaWlfjhebCuYco8bc6g72dU2VwTg31Bv4YINBq7EH2i1cMwbOiJxbOXPqjGig==} + peerDependencies: + openai: '*' + peerDependenciesMeta: + openai: + optional: true + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -10389,6 +10930,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -10587,6 +11132,10 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + memfs@4.15.1: + resolution: {integrity: sha512-ufCzgFwiVnR6R9cCYuvwznJdhdYXEvFl0hpnM4cCtVaVkHuqBR+6fo2sqt1SSMdp+uiHw9GyPZr3OMM5tqjSmQ==} + engines: {node: '>= 4.0.0'} + memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} @@ -10893,11 +11442,15 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@3.20241205.0: - resolution: {integrity: sha512-Z0cTtIf6ZrcAJ3SrOI9EUM3s4dkGhNeU6Ubl8sroYhsPVD+rtz3m5+p6McHFWCkcMff1o60X5XEKVTmkz0gbpA==} + miniflare@3.20241218.0: + resolution: {integrity: sha512-spYFDArH0wd+wJSTrzBrWrXJrbyJhRMJa35mat947y1jYhVV8I5V8vnD3LwjfpLr0SaEilojz1OIW7ekmnRe+w==} engines: {node: '>=16.13'} hasBin: true + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -11282,7 +11835,16 @@ packages: ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} - omggif@1.0.10: + ollama-ai-provider@0.16.1: + resolution: {integrity: sha512-0vSQVz5Y/LguyzfO4bi1JrrVGF/k2JvO8/uFR0wYmqDFp8KPp4+AhdENSynGBr1oRhMWOM4F1l6cv7UNDgRMjw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} on-finished@2.4.1: @@ -11329,6 +11891,15 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openai@4.73.0: + resolution: {integrity: sha512-NZstV77w3CEol9KQTRBRQ15+Sw6nxVTicAULSjYO4wn9E5gw72Mtp3fAVaBFXyyVPws4241YmFG6ya4L8v03tA==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + openai@4.76.1: resolution: {integrity: sha512-ci63/WFEMd6QjjEVeH0pV7hnFS6CCqhgJydSti4Aak/8uo2SpgzKjteUDaY+OkwziVj11mi6j+0mRUIiGKUzWw==} hasBin: true @@ -11338,6 +11909,18 @@ packages: zod: optional: true + openai@4.77.0: + resolution: {integrity: sha512-WWacavtns/7pCUkOWvQIjyOfcdr9X+9n9Vvb0zFeKVDAqwCMDHB+iSr24SVaBAhplvSG6JrRXFpcNM9gWhOGIw==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -11406,6 +11989,10 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} @@ -11482,6 +12069,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + partial-json@0.1.7: + resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -11526,6 +12116,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -12390,6 +12984,10 @@ packages: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} + react@19.0.0-rc-df5f2736-20240712: + resolution: {integrity: sha512-EskZQiyMOtoyC5P22HjB2vfLywcdko3TxknC6c+NBmlqjWxi4P70iR5/79PD6xj5f49jljuV9+/CH0N0brSxJg==} + engines: {node: '>=0.10.0'} + react@file:packages/usdk/packages/upstreet-agent/packages/react: resolution: {directory: packages/usdk/packages/upstreet-agent/packages/react, type: directory} engines: {node: '>=0.10.0'} @@ -12634,6 +13232,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -12661,6 +13263,9 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} + robot3@0.4.1: + resolution: {integrity: sha512-hzjy826lrxzx8eRgv80idkf8ua1JAepRc9Efdtj03N3KNJuznQCPlyCJ7gnUmDFwZCLQjxy567mQVKmdv2BsXQ==} + robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} @@ -12697,6 +13302,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rpc-websockets@9.0.4: + resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -13020,6 +13628,11 @@ packages: peerDependencies: svelte: ^4.0.0 + sswr@2.1.0: + resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==} + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} @@ -13279,6 +13892,10 @@ packages: engines: {npm: '>=8'} hasBin: true + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supertap@3.0.1: resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13336,6 +13953,12 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 + swr@2.3.0: + resolution: {integrity: sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA==} + version: 2.3.0 + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + swrev@4.0.0: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} @@ -13455,6 +14078,9 @@ packages: text-decoder@1.2.2: resolution: {integrity: sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -13468,6 +14094,12 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + three-mesh-bvh@0.7.8: resolution: {integrity: sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==} deprecated: Deprecated due to three.js version incompatibility. Please use v0.8.0, instead. @@ -13482,9 +14114,16 @@ packages: three@0.167.1: resolution: {integrity: sha512-gYTLJA/UQip6J/tJvl91YYqlZF47+D/kxiWrbTon35ZHlXEN0VOo+Qke2walF1/x92v55H6enomymg4Dak52kw==} + throttleit@2.1.0: + resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} + engines: {node: '>=18'} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + time-span@4.0.0: resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} engines: {node: '>=10'} @@ -13509,6 +14148,14 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinyld@1.3.4: + resolution: {integrity: sha512-u26CNoaInA4XpDU+8s/6Cq8xHc2T5M4fXB3ICfXPokUQoLzmPgSZU02TAkFwFMJCWTjk53gtkS8pETTreZwCqw==} + engines: {node: '>= 12.10.0', npm: '>= 6.12.0', yarn: '>= 1.20.0'} + hasBin: true + + tls@file:packages/usdk/packages/upstreet-agent/packages/tls-proxy: + resolution: {directory: packages/usdk/packages/upstreet-agent/packages/tls-proxy, type: directory} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -13526,6 +14173,9 @@ packages: together-ai@0.6.0: resolution: {integrity: sha512-l5rT9lzpHXA0e6zEdBwlVKY9wb5XQaX5hpandKPvHI5n6Bap4UTynF8Q2RSsRSAz3auyeEGzFKLE5XI301hOtA==} + together-ai@0.7.0: + resolution: {integrity: sha512-/be/HOecBSwRTDHB14vCvHbp1WiNsFxyS4pJlyBoMup1X3n7xD1b/Gm5Z5amlKzD2zll9Y5wscDk7Ut5OsT1nA==} + toidentifier@1.0.0: resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} engines: {node: '>=0.6'} @@ -13549,6 +14199,12 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -13983,6 +14639,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + utif2@4.1.0: resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} @@ -14006,11 +14666,23 @@ packages: uuid-by-string@4.0.0: resolution: {integrity: sha512-88ZSfcSkN04juiLqSsuyteqlSrXNFdsEPzSv3urnElDXNsZUXQN0smeTnh99x2DE15SCUQNgqKBfro54CuzHNQ==} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@11.0.3: + resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} + hasBin: true + uuid@3.3.2: resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -14269,17 +14941,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20241205.0: - resolution: {integrity: sha512-vso/2n0c5SdBDWiD+Sx5gM7unA6SiZXRVUHDqH1euoP/9mFVHZF8icoYsNLB87b/TX8zNgpae+I5N/xFpd9v0g==} + workerd@1.20241218.0: + resolution: {integrity: sha512-7Z3D4vOVChMz9mWDffE299oQxUWm/pbkeAWx1btVamPcAK/2IuoNBhwflWo3jyuKuxvYuFAdIucgYxc8ICqXiA==} engines: {node: '>=16'} hasBin: true - wrangler@3.95.0: - resolution: {integrity: sha512-3w5852i3FNyDz421K2Qk4v5L8jjwegO5O8E1+VAQmjnm82HFNxpIRUBq0bmM7CTLvOPI/Jjcmj/eAWjQBL7QYg==} + wrangler@3.99.0: + resolution: {integrity: sha512-k0x4rT3G/QCbxcoZY7CHRVlAIS8WMmKdga6lf4d2c3gXFqssh44vwlTDuARA9QANBxKJTcA7JPTJRfUDhd9QBA==} engines: {node: '>=16.17.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20241205.0 + '@cloudflare/workers-types': ^4.20241218.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -14321,6 +14993,18 @@ packages: utf-8-validate: optional: true + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -14483,6 +15167,9 @@ packages: typescript: ^4.9.4 || ^5.0.2 zod: ^3 + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -14537,6 +15224,31 @@ snapshots: '@adraffy/ens-normalize@1.10.1': {} + '@ai-sdk/anthropic@0.0.56(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + zod: 3.23.8 + + '@ai-sdk/google-vertex@0.0.43(@google-cloud/vertexai@1.9.2)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@google-cloud/vertexai': 1.9.2 + zod: 3.23.8 + + '@ai-sdk/google@0.0.55(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + zod: 3.23.8 + + '@ai-sdk/groq@0.0.3(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + zod: 3.23.8 + '@ai-sdk/openai@0.0.9(zod@3.24.1)': dependencies: '@ai-sdk/provider': 0.0.3 @@ -14544,6 +15256,12 @@ snapshots: optionalDependencies: zod: 3.24.1 + '@ai-sdk/openai@1.0.5(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + zod: 3.23.8 + '@ai-sdk/provider-utils@0.0.5(zod@3.24.1)': dependencies: '@ai-sdk/provider': 0.0.3 @@ -14562,10 +15280,108 @@ snapshots: optionalDependencies: zod: 3.24.1 + '@ai-sdk/provider-utils@1.0.20(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.24 + eventsource-parser: 1.1.2 + nanoid: 3.3.6 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.23.8 + + '@ai-sdk/provider-utils@1.0.22(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + eventsource-parser: 1.1.2 + nanoid: 3.3.8 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.23.8 + + '@ai-sdk/provider-utils@2.0.2(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 1.0.1 + eventsource-parser: 3.0.0 + nanoid: 3.3.8 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.23.8 + + '@ai-sdk/provider@0.0.24': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/provider@0.0.26': + dependencies: + json-schema: 0.4.0 + '@ai-sdk/provider@0.0.3': dependencies: json-schema: 0.4.0 + '@ai-sdk/provider@1.0.1': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/react@0.0.70(react@19.0.0-rc-df5f2736-20240712)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + swr: 2.3.0(react@19.0.0-rc-df5f2736-20240712) + throttleit: 2.1.0 + optionalDependencies: + react: 19.0.0-rc-df5f2736-20240712 + zod: 3.23.8 + + '@ai-sdk/react@0.0.70(react@file:packages/usdk/packages/upstreet-agent/packages/react)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + swr: 2.3.0(react@file:packages/usdk/packages/upstreet-agent/packages/react) + throttleit: 2.1.0 + optionalDependencies: + react: file:packages/usdk/packages/upstreet-agent/packages/react + zod: 3.23.8 + + '@ai-sdk/solid@0.0.54(solid-js@1.9.3)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + optionalDependencies: + solid-js: 1.9.3 + transitivePeerDependencies: + - zod + + '@ai-sdk/svelte@0.0.57(svelte@4.2.19)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + sswr: 2.1.0(svelte@4.2.19) + optionalDependencies: + svelte: 4.2.19 + transitivePeerDependencies: + - zod + + '@ai-sdk/ui-utils@0.0.50(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + json-schema: 0.4.0 + secure-json-parse: 2.7.0 + zod-to-json-schema: 3.24.1(zod@3.23.8) + optionalDependencies: + zod: 3.23.8 + + '@ai-sdk/vue@0.0.59(vue@3.5.13(typescript@5.7.2))(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + swrv: 1.0.4(vue@3.5.13(typescript@5.7.2)) + optionalDependencies: + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - zod + '@algolia/cache-browser-local-storage@4.24.0': dependencies: '@algolia/cache-common': 4.24.0 @@ -14664,6 +15480,18 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@anthropic-ai/sdk@0.30.1': + dependencies: + '@types/node': 18.19.68 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + '@auth/core@0.18.4': dependencies: '@panva/hkdf': 1.2.1 @@ -15512,30 +16340,27 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@cfworker/json-schema@4.0.3': {} + '@cloudflare/kv-asset-handler@0.3.4': dependencies: mime: 3.0.0 - '@cloudflare/workerd-darwin-64@1.20241205.0': + '@cloudflare/workerd-darwin-64@1.20241218.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20241205.0': + '@cloudflare/workerd-darwin-arm64@1.20241218.0': optional: true - '@cloudflare/workerd-linux-64@1.20241205.0': + '@cloudflare/workerd-linux-64@1.20241218.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20241205.0': + '@cloudflare/workerd-linux-arm64@1.20241218.0': optional: true - '@cloudflare/workerd-windows-64@1.20241205.0': + '@cloudflare/workerd-windows-64@1.20241218.0': optional: true - '@cloudflare/workers-shared@0.11.0': - dependencies: - mime: 3.0.0 - zod: 3.24.1 - '@colors/colors@1.5.0': optional: true @@ -15587,7 +16412,7 @@ snapshots: '@discordjs/util@1.1.1': {} - '@discordjs/ws@1.1.1': + '@discordjs/ws@1.1.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@discordjs/collection': 2.1.1 '@discordjs/rest': 2.4.0 @@ -15597,7 +16422,7 @@ snapshots: '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.83 tslib: 2.8.1 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -15632,6 +16457,58 @@ snapshots: transitivePeerDependencies: - supports-color + '@elizaos/core@file:packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy(@google-cloud/vertexai@1.9.2)(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(axios@1.7.9)(bufferutil@4.0.9)(react@file:packages/usdk/packages/upstreet-agent/packages/react)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(utf-8-validate@5.0.10)': + dependencies: + '@ai-sdk/anthropic': 0.0.56(zod@3.23.8) + '@ai-sdk/google': 0.0.55(zod@3.23.8) + '@ai-sdk/google-vertex': 0.0.43(@google-cloud/vertexai@1.9.2)(zod@3.23.8) + '@ai-sdk/groq': 0.0.3(zod@3.23.8) + '@ai-sdk/openai': 1.0.5(zod@3.23.8) + '@anthropic-ai/sdk': 0.30.1 + '@fal-ai/client': 1.2.0 + '@solana/web3.js': 1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@types/uuid': 10.0.0 + ai: 3.4.33(openai@4.73.0(zod@3.23.8))(react@file:packages/usdk/packages/upstreet-agent/packages/react)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(zod@3.23.8) + anthropic-vertex-ai: 1.0.2(zod@3.23.8) + fastestsmallesttextencoderdecoder: 1.0.22 + gaxios: 6.7.1 + glob: 11.0.0 + handlebars: 4.7.8 + js-sha1: 0.7.0 + js-tiktoken: 1.0.15 + langchain: 0.3.6(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(axios@1.7.9)(handlebars@4.7.8)(openai@4.73.0(zod@3.23.8)) + ollama-ai-provider: 0.16.1(zod@3.23.8) + openai: 4.73.0(zod@3.23.8) + tinyld: 1.3.4 + together-ai: 0.7.0 + unique-names-generator: 4.7.1 + uuid: 11.0.3 + zod: 3.23.8 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cohere' + - '@langchain/core' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - axios + - bufferutil + - cheerio + - encoding + - peggy + - react + - solid-js + - sswr + - supports-color + - svelte + - typeorm + - utf-8-validate + - vue + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 @@ -16121,6 +16998,12 @@ snapshots: '@eslint/js@9.16.0': {} + '@fal-ai/client@1.2.0': + dependencies: + '@msgpack/msgpack': 3.0.0-beta2 + eventsource-parser: 1.1.2 + robot3: 0.4.1 + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} '@fastify/busboy@2.1.1': {} @@ -16146,6 +17029,13 @@ snapshots: dependencies: tslib: 2.8.1 + '@google-cloud/vertexai@1.9.2': + dependencies: + google-auth-library: 9.15.0 + transitivePeerDependencies: + - encoding + - supports-color + '@hono/node-server@1.13.7(hono@4.6.13)': dependencies: hono: 4.6.13 @@ -16265,7 +17155,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -16278,14 +17168,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 20.11.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)) + jest-config: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16306,21 +17196,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 20.11.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16348,14 +17238,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 20.11.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -16380,7 +17270,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -16398,7 +17288,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.8 + '@types/node': 18.19.68 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -16420,7 +17310,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -16489,7 +17379,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -16498,7 +17388,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.8 + '@types/node': 20.11.5 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -16600,7 +17490,7 @@ snapshots: dependencies: '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16620,7 +17510,7 @@ snapshots: '@jimp/plugin-circle@1.6.0': dependencies: '@jimp/types': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16634,7 +17524,7 @@ snapshots: '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 tinycolor2: 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': dependencies: @@ -16651,7 +17541,7 @@ snapshots: '@jimp/plugin-resize': 1.6.0 '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': dependencies: @@ -16667,7 +17557,7 @@ snapshots: '@jimp/plugin-crop': 1.6.0 '@jimp/plugin-resize': 1.6.0 '@jimp/types': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16679,7 +17569,7 @@ snapshots: '@jimp/core': 1.6.0 '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16690,7 +17580,7 @@ snapshots: dependencies: '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16710,7 +17600,7 @@ snapshots: dependencies: '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': dependencies: @@ -16721,7 +17611,7 @@ snapshots: '@jimp/plugin-flip@1.6.0': dependencies: '@jimp/types': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16754,7 +17644,7 @@ snapshots: '@jimp/plugin-mask@1.6.0': dependencies: '@jimp/types': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16781,12 +17671,12 @@ snapshots: parse-bmfont-binary: 1.0.6 parse-bmfont-xml: 1.1.6 simple-xml-to-json: 1.2.3 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-quantize@1.6.0': dependencies: image-q: 4.0.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16797,7 +17687,7 @@ snapshots: dependencies: '@jimp/core': 1.6.0 '@jimp/types': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: @@ -16814,7 +17704,7 @@ snapshots: '@jimp/plugin-resize': 1.6.0 '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': dependencies: @@ -16843,7 +17733,7 @@ snapshots: '@jimp/plugin-hash': 1.6.0 '@jimp/types': 1.6.0 '@jimp/utils': 1.6.0 - zod: 3.24.1 + zod: 3.23.8 '@jimp/plugins@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -16896,7 +17786,7 @@ snapshots: '@jimp/types@1.6.0': dependencies: - zod: 3.24.1 + zod: 3.23.8 '@jimp/utils@0.22.12': dependencies: @@ -16934,8 +17824,88 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.1.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@juggle/resize-observer@3.4.0': {} + '@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8))': + dependencies: + '@cfworker/json-schema': 4.0.3 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.15 + langsmith: 0.2.14(openai@4.73.0(zod@3.23.8)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + transitivePeerDependencies: + - openai + + '@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1))': + dependencies: + '@cfworker/json-schema': 4.0.3 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.15 + langsmith: 0.2.14(openai@4.76.1(zod@3.24.1)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + transitivePeerDependencies: + - openai + + '@langchain/openai@0.3.16(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8)))': + dependencies: + '@langchain/core': 0.3.26(openai@4.73.0(zod@3.23.8)) + js-tiktoken: 1.0.15 + openai: 4.77.0(zod@3.23.8) + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + transitivePeerDependencies: + - encoding + + '@langchain/openai@0.3.16(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))': + dependencies: + '@langchain/core': 0.3.26(openai@4.76.1(zod@3.24.1)) + js-tiktoken: 1.0.15 + openai: 4.77.0(zod@3.23.8) + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + transitivePeerDependencies: + - encoding + + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8)))': + dependencies: + '@langchain/core': 0.3.26(openai@4.73.0(zod@3.23.8)) + js-tiktoken: 1.0.15 + + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))': + dependencies: + '@langchain/core': 0.3.26(openai@4.76.1(zod@3.24.1)) + js-tiktoken: 1.0.15 + '@mapbox/node-pre-gyp@1.0.11': dependencies: detect-libc: 2.0.3 @@ -16997,7 +17967,7 @@ snapshots: '@mdx-js/react@2.3.0(react@18.2.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.16 + '@types/react': 18.2.48 react: 18.2.0 '@mediapipe/tasks-vision@0.10.17': {} @@ -17019,6 +17989,8 @@ snapshots: promise-worker-transferable: 1.0.4 three: 0.167.1 + '@msgpack/msgpack@3.0.0-beta2': {} + '@mui/core-downloads-tracker@5.16.11': {} '@mui/material@5.16.11(@emotion/react@11.14.0(@types/react@18.2.48)(react@18.2.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.2.48)(react@18.2.0))(@types/react@18.2.48)(react@18.2.0))(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -17284,8 +18256,14 @@ snapshots: dependencies: '@noble/hashes': 1.3.2 + '@noble/curves@1.7.0': + dependencies: + '@noble/hashes': 1.6.0 + '@noble/hashes@1.3.2': {} + '@noble/hashes@1.6.0': {} + '@noble/hashes@1.6.1': {} '@nodelib/fs.scandir@2.1.5': @@ -17363,6 +18341,8 @@ snapshots: - debug - encoding + '@opentelemetry/api@1.9.0': {} + '@orama/orama@2.1.1': {} '@orama/orama@3.0.4': {} @@ -19156,6 +20136,32 @@ snapshots: dependencies: tslib: 2.8.1 + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.95.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + '@stitches/react@1.2.8(react@18.2.0)': dependencies: react: 18.2.0 @@ -19392,7 +20398,7 @@ snapshots: telejson: 7.2.0 tiny-invariant: 1.3.3 - '@storybook/cli@7.6.20': + '@storybook/cli@7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@babel/core': 7.26.0 '@babel/preset-env': 7.26.0(@babel/core@7.26.0) @@ -19401,7 +20407,7 @@ snapshots: '@storybook/codemod': 7.6.20 '@storybook/core-common': 7.6.20 '@storybook/core-events': 7.6.20 - '@storybook/core-server': 7.6.20 + '@storybook/core-server': 7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@storybook/csf-tools': 7.6.20 '@storybook/node-logger': 7.6.20 '@storybook/telemetry': 7.6.20 @@ -19427,7 +20433,7 @@ snapshots: ora: 5.4.1 prettier: 2.8.8 prompts: 2.4.2 - puppeteer-core: 2.1.1 + puppeteer-core: 2.1.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) read-pkg-up: 7.0.1 semver: 7.6.3 strip-json-comments: 3.1.1 @@ -19519,7 +20525,7 @@ snapshots: dependencies: ts-dedent: 2.2.0 - '@storybook/core-server@7.6.20': + '@storybook/core-server@7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 @@ -19560,7 +20566,7 @@ snapshots: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.2 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -19860,29 +20866,29 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/realtime-js@2.11.2': + '@supabase/realtime-js@2.11.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 '@types/ws': 8.5.13 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/realtime-js@2.11.3': + '@supabase/realtime-js@2.11.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 '@types/ws': 8.5.13 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/ssr@0.1.0(@supabase/supabase-js@2.39.3)': + '@supabase/ssr@0.1.0(@supabase/supabase-js@2.39.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@supabase/supabase-js': 2.39.3 + '@supabase/supabase-js': 2.39.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) cookie: 0.5.0 ramda: 0.29.1 @@ -19890,25 +20896,25 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/supabase-js@2.39.3': + '@supabase/supabase-js@2.39.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@supabase/functions-js': 2.4.3 '@supabase/gotrue-js': 2.66.1 '@supabase/node-fetch': 2.6.15 '@supabase/postgrest-js': 1.17.7 - '@supabase/realtime-js': 2.11.3 + '@supabase/realtime-js': 2.11.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@supabase/storage-js': 2.7.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/supabase-js@2.47.5': + '@supabase/supabase-js@2.47.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@supabase/auth-js': 2.66.1 '@supabase/functions-js': 2.4.3 '@supabase/node-fetch': 2.6.15 '@supabase/postgrest-js': 1.16.3 - '@supabase/realtime-js': 2.11.2 + '@supabase/realtime-js': 2.11.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@supabase/storage-js': 2.7.1 transitivePeerDependencies: - bufferutil @@ -20067,7 +21073,6 @@ snapshots: '@swc/helpers@0.5.13': dependencies: tslib: 2.8.1 - optional: true '@swc/helpers@0.5.5': dependencies: @@ -20192,7 +21197,7 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/cacheable-request@6.0.3': dependencies: @@ -20203,13 +21208,13 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/d3-color@3.1.3': {} @@ -20280,7 +21285,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -20296,7 +21301,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/hast@2.3.10': dependencies: @@ -20329,7 +21334,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.7.8 + '@types/node': 20.11.5 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -20363,13 +21368,15 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 18.19.68 + '@types/node': 20.11.5 form-data: 4.0.1 '@types/node-forge@1.3.11': dependencies: '@types/node': 18.19.68 + '@types/node@12.20.55': {} + '@types/node@16.18.11': {} '@types/node@16.9.1': {} @@ -20420,7 +21427,7 @@ snapshots: '@types/react-reconciler@0.26.7': dependencies: - '@types/react': 18.3.16 + '@types/react': 18.2.48 '@types/react-reconciler@0.28.9(@types/react@18.2.48)': dependencies: @@ -20455,6 +21462,10 @@ snapshots: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/react@19.0.0': + dependencies: + csstype: 3.1.3 + '@types/resolve@1.20.2': {} '@types/resolve@1.20.6': {} @@ -20463,6 +21474,8 @@ snapshots: dependencies: '@types/node': 18.19.68 + '@types/retry@0.12.0': {} + '@types/scheduler@0.23.0': {} '@types/semver@7.5.8': {} @@ -20470,12 +21483,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/send': 0.17.4 '@types/stack-utils@2.0.3': {} @@ -20498,13 +21511,21 @@ snapshots: '@types/unist@3.0.3': {} + '@types/uuid@10.0.0': {} + + '@types/uuid@8.3.4': {} + '@types/uuid@9.0.8': {} '@types/webxr@0.5.20': {} + '@types/ws@7.4.7': + dependencies: + '@types/node': 18.19.68 + '@types/ws@8.5.13': dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 '@types/yargs-parser@21.0.3': {} @@ -21057,6 +22078,11 @@ snapshots: '@types/emscripten': 1.39.13 tslib: 1.14.1 + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + abab@2.0.6: {} abbrev@1.1.1: {} @@ -21145,6 +22171,56 @@ snapshots: vue: 3.5.13(typescript@5.7.2) zod: 3.24.1 + ai@3.4.33(openai@4.73.0(zod@3.23.8))(react@19.0.0-rc-df5f2736-20240712)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/react': 0.0.70(react@19.0.0-rc-df5f2736-20240712)(zod@3.23.8) + '@ai-sdk/solid': 0.0.54(solid-js@1.9.3)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@4.2.19)(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.7.2))(zod@3.23.8) + '@opentelemetry/api': 1.9.0 + eventsource-parser: 1.1.2 + json-schema: 0.4.0 + jsondiffpatch: 0.6.0 + secure-json-parse: 2.7.0 + zod-to-json-schema: 3.24.1(zod@3.23.8) + optionalDependencies: + openai: 4.73.0(zod@3.23.8) + react: 19.0.0-rc-df5f2736-20240712 + sswr: 2.1.0(svelte@4.2.19) + svelte: 4.2.19 + zod: 3.23.8 + transitivePeerDependencies: + - solid-js + - vue + + ai@3.4.33(openai@4.73.0(zod@3.23.8))(react@file:packages/usdk/packages/upstreet-agent/packages/react)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + '@ai-sdk/react': 0.0.70(react@file:packages/usdk/packages/upstreet-agent/packages/react)(zod@3.23.8) + '@ai-sdk/solid': 0.0.54(solid-js@1.9.3)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@4.2.19)(zod@3.23.8) + '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) + '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.7.2))(zod@3.23.8) + '@opentelemetry/api': 1.9.0 + eventsource-parser: 1.1.2 + json-schema: 0.4.0 + jsondiffpatch: 0.6.0 + secure-json-parse: 2.7.0 + zod-to-json-schema: 3.24.1(zod@3.23.8) + optionalDependencies: + openai: 4.73.0(zod@3.23.8) + react: file:packages/usdk/packages/upstreet-agent/packages/react + sswr: 2.1.0(svelte@4.2.19) + svelte: 4.2.19 + zod: 3.23.8 + transitivePeerDependencies: + - solid-js + - vue + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -21234,6 +22310,16 @@ snapshots: ansi-styles@6.2.1: {} + anthropic-vertex-ai@1.0.2(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 0.0.24 + '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) + google-auth-library: 9.15.0 + zod: 3.23.8 + transitivePeerDependencies: + - encoding + - supports-color + any-base@1.1.0: {} any-promise@1.3.0: {} @@ -21505,6 +22591,15 @@ snapshots: axe-core@4.10.2: {} + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + optional: true + axobject-query@4.1.0: {} b4a@1.6.7: {} @@ -21614,6 +22709,10 @@ snapshots: bare-events@2.5.0: optional: true + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + base64-js@0.0.8: {} base64-js@1.5.1: {} @@ -21630,6 +22729,12 @@ snapshots: big.js@5.2.2: {} + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.1.2: {} + bin-links@5.0.0: dependencies: cmd-shim: 7.0.0 @@ -21658,6 +22763,8 @@ snapshots: bmp-ts@1.0.9: {} + bn.js@5.2.1: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -21680,6 +22787,12 @@ snapshots: boolean@3.2.0: optional: true + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -21727,6 +22840,10 @@ snapshots: dependencies: fast-json-stable-stringify: 2.1.0 + bs58@4.0.1: + dependencies: + base-x: 3.0.10 + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -21744,6 +22861,8 @@ snapshots: buffer-crc32@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} + buffer-equal@0.0.1: {} buffer-fill@1.0.0: @@ -21761,6 +22880,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + builtin-modules@3.3.0: {} bundle-name@4.1.0: @@ -21871,6 +22995,10 @@ snapshots: char-regex@1.0.2: {} + character-card-utils@file:packages/usdk/packages/upstreet-agent/packages/character-card-utils: + dependencies: + zod: 3.23.8 + character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -22104,6 +23232,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} + commander@12.1.0: {} commander@2.20.3: {} @@ -22278,13 +23408,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + create-jest@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -22561,12 +23691,14 @@ snapshots: debug@4.1.1: dependencies: - ms: 2.1.1 + ms: 2.1.3 debug@4.4.0: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + decimal.js@10.4.3: {} decode-named-character-reference@1.0.2: @@ -22661,6 +23793,8 @@ snapshots: dependencies: robust-predicates: 3.0.2 + delay@5.0.0: {} + delayed-stream@1.0.0: {} delegates@1.0.0: {} @@ -22726,14 +23860,14 @@ snapshots: discord-api-types@0.37.97: {} - discord.js@14.16.3: + discord.js@14.16.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@discordjs/builders': 1.9.0 '@discordjs/collection': 1.5.3 '@discordjs/formatters': 0.5.0 '@discordjs/rest': 2.4.0 '@discordjs/util': 1.1.1 - '@discordjs/ws': 1.1.1 + '@discordjs/ws': 1.1.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@sapphire/snowflake': 3.5.3 discord-api-types: 0.37.100 fast-deep-equal: 3.1.3 @@ -22853,6 +23987,10 @@ snapshots: - '@types/react-dom' - immer + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + edge-runtime@2.5.9: dependencies: '@edge-runtime/format': 2.2.1 @@ -23064,6 +24202,12 @@ snapshots: es6-error@4.1.1: optional: true + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -23772,7 +24916,7 @@ snapshots: etag@1.8.1: {} - ethers@6.13.4: + ethers@6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 '@noble/curves': 1.2.0 @@ -23780,7 +24924,7 @@ snapshots: '@types/node': 22.7.5 aes-js: 4.0.0-beta.5 tslib: 2.7.0 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -23789,6 +24933,8 @@ snapshots: eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} + events-intercept@2.0.0: {} events@3.3.0: {} @@ -23945,6 +25091,8 @@ snapshots: transitivePeerDependencies: - supports-color + eyes@0.1.8: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -23965,8 +25113,12 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-stable-stringify@1.0.0: {} + fast-uri@3.0.3: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -24237,13 +25389,15 @@ snapshots: fs.realpath@1.0.0: {} + fs@file:packages/usdk/packages/upstreet-agent/packages/fs-proxy: {} + fsevents@2.1.3: optional: true fsevents@2.3.3: optional: true - fumadocs-core@14.0.2(@types/react@18.2.37)(sass@1.82.0): + fumadocs-core@14.0.2(@opentelemetry/api@1.9.0)(@types/react@18.2.37)(sass@1.82.0): dependencies: '@formatjs/intl-localematcher': 0.5.9 '@orama/orama': 3.0.4 @@ -24261,7 +25415,7 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: algoliasearch: 4.24.0 - next: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + next: 15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -24274,7 +25428,7 @@ snapshots: - sass - supports-color - fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@formatjs/intl-localematcher': 0.5.9 '@orama/orama': 2.1.1 @@ -24292,7 +25446,7 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: algoliasearch: 4.24.0 - next: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + next: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -24312,7 +25466,7 @@ snapshots: - supports-color - typescript - fumadocs-mdx@11.0.0(acorn@8.14.0)(fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)): + fumadocs-mdx@11.0.0(acorn@8.14.0)(fumadocs-core@14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.0) chokidar: 4.0.1 @@ -24320,20 +25474,20 @@ snapshots: esbuild: 0.24.0 estree-util-value-to-estree: 3.2.1 fast-glob: 3.3.2 - fumadocs-core: 14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + fumadocs-core: 14.6.0(@types/react@18.2.37)(algoliasearch@4.24.0)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) gray-matter: 4.0.3 micromatch: 4.0.8 - next: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + next: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) zod: 3.24.1 transitivePeerDependencies: - acorn - supports-color - fumadocs-twoslash@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(fumadocs-ui@14.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(shiki@1.24.2)(typescript@5.7.2): + fumadocs-twoslash@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(fumadocs-ui@14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(shiki@1.24.2)(typescript@5.7.2): dependencies: '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@shikijs/twoslash': 1.24.2(typescript@5.7.2) - fumadocs-ui: 14.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + fumadocs-ui: 14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 @@ -24361,7 +25515,7 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-ui@14.0.2(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + fumadocs-ui@14.0.2(@opentelemetry/api@1.9.0)(@types/react-dom@18.2.18)(@types/react@18.2.37)(next@14.2.14(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): dependencies: '@radix-ui/react-accordion': 1.2.1(@types/react-dom@18.2.18)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -24375,8 +25529,8 @@ snapshots: '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.16(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2))) class-variance-authority: 0.7.0 cmdk: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - fumadocs-core: 14.0.2(@types/react@18.2.37)(sass@1.82.0) - next: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + fumadocs-core: 14.0.2(@opentelemetry/api@1.9.0)(@types/react@18.2.37)(sass@1.82.0) + next: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) next-themes: 0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24421,9 +25575,28 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 - geist@1.2.1(next@14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)): + gaxios@6.7.1: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + is-stream: 2.0.1 + node-fetch: 2.7.0 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@6.1.0: + dependencies: + gaxios: 6.7.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + geist@1.2.1(next@14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0)): dependencies: - next: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + next: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) generic-names@4.0.0: dependencies: @@ -24545,6 +25718,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.1.7: dependencies: fs.realpath: 1.0.0 @@ -24625,6 +25807,18 @@ snapshots: glsl-noise@0.0.0: {} + google-auth-library@9.15.0: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1 + gcp-metadata: 6.1.0 + gtoken: 7.1.0 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + gopd@1.2.0: {} got@11.8.6: @@ -24654,6 +25848,14 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 + gtoken@7.1.0: + dependencies: + gaxios: 6.7.1 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -24895,6 +26097,8 @@ snapshots: dependencies: ms: 2.1.3 + hyperdyperid@1.2.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -25286,6 +26490,10 @@ snapshots: transitivePeerDependencies: - encoding + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic.js@0.2.5: {} istanbul-lib-coverage@3.2.2: {} @@ -25365,6 +26573,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.0.2: + dependencies: + '@isaacs/cliui': 8.0.2 + jake@10.9.2: dependencies: async: 3.2.6 @@ -25376,6 +26588,24 @@ snapshots: dependencies: relative-time-format: 1.1.6 + jayson@4.1.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -25388,7 +26618,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -25427,16 +26657,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + jest-cli@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + create-jest: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -25496,7 +26726,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)): + jest-config@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -25521,13 +26751,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.7.8 + '@types/node': 20.11.5 ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -25552,13 +26782,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.7.8 - ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) + '@types/node': 20.11.5 + ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -25583,7 +26813,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.7.8 + '@types/node': 20.11.5 ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2) transitivePeerDependencies: - babel-plugin-macros @@ -25639,7 +26869,7 @@ snapshots: jest-util: 29.7.0 pretty-format: 29.7.0 - jest-environment-jsdom@29.7.0: + jest-environment-jsdom@29.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -25648,7 +26878,7 @@ snapshots: '@types/node': 22.7.8 jest-mock: 29.7.0 jest-util: 29.7.0 - jsdom: 20.0.3 + jsdom: 20.0.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -25659,7 +26889,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -25669,7 +26899,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.7.8 + '@types/node': 18.19.68 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -25708,12 +26938,12 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.7.8 + '@types/node': 20.11.5 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -25748,7 +26978,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -25776,7 +27006,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -25822,7 +27052,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -25841,7 +27071,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.8 + '@types/node': 18.19.68 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -25856,7 +27086,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.7.8 + '@types/node': 18.19.68 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -25873,12 +27103,12 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + jest@29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-cli: 29.7.0(@types/node@20.11.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -25951,8 +27181,14 @@ snapshots: js-sha1@0.6.0: {} + js-sha1@0.7.0: {} + js-string-escape@1.0.1: {} + js-tiktoken@1.0.15: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-types@1.0.0: {} @@ -25993,7 +27229,7 @@ snapshots: transitivePeerDependencies: - supports-color - jsdom@20.0.3: + jsdom@20.0.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: abab: 2.0.6 acorn: 8.14.0 @@ -26019,7 +27255,7 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -26032,6 +27268,10 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -26041,6 +27281,8 @@ snapshots: '@types/json-schema': 7.0.15 ts-toolbelt: 6.15.5 + json-schema-to-zod-object@2.6.7: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -26049,8 +27291,7 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: - optional: true + json-stringify-safe@5.0.1: {} json5@1.0.2: dependencies: @@ -26074,6 +27315,10 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonparse@1.3.1: {} + + jsonpointer@5.0.1: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -26094,6 +27339,17 @@ snapshots: just-zip-it@2.3.1: {} + jwa@2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + katex@0.16.15: dependencies: commander: 8.3.0 @@ -26116,6 +27372,72 @@ snapshots: dependencies: use-strict: 1.0.1 + langchain@0.3.6(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8)))(axios@1.7.9)(handlebars@4.7.8)(openai@4.73.0(zod@3.23.8)): + dependencies: + '@langchain/core': 0.3.26(openai@4.73.0(zod@3.23.8)) + '@langchain/openai': 0.3.16(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8))) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.26(openai@4.73.0(zod@3.23.8))) + js-tiktoken: 1.0.15 + js-yaml: 4.1.0 + jsonpointer: 5.0.1 + langsmith: 0.2.14(openai@4.73.0(zod@3.23.8)) + openapi-types: 12.1.3 + p-retry: 4.6.2 + uuid: 10.0.0 + yaml: 2.6.1 + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + optionalDependencies: + axios: 1.7.9 + handlebars: 4.7.8 + transitivePeerDependencies: + - encoding + - openai + + langchain@0.3.6(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(axios@1.7.9)(handlebars@4.7.8)(openai@4.73.0(zod@3.23.8)): + dependencies: + '@langchain/core': 0.3.26(openai@4.76.1(zod@3.24.1)) + '@langchain/openai': 0.3.16(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1))) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1))) + js-tiktoken: 1.0.15 + js-yaml: 4.1.0 + jsonpointer: 5.0.1 + langsmith: 0.2.14(openai@4.73.0(zod@3.23.8)) + openapi-types: 12.1.3 + p-retry: 4.6.2 + uuid: 10.0.0 + yaml: 2.6.1 + zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) + optionalDependencies: + axios: 1.7.9 + handlebars: 4.7.8 + transitivePeerDependencies: + - encoding + - openai + + langsmith@0.2.14(openai@4.73.0(zod@3.23.8)): + dependencies: + '@types/uuid': 10.0.0 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.6.3 + uuid: 10.0.0 + optionalDependencies: + openai: 4.73.0(zod@3.23.8) + + langsmith@0.2.14(openai@4.76.1(zod@3.24.1)): + dependencies: + '@types/uuid': 10.0.0 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.6.3 + uuid: 10.0.0 + optionalDependencies: + openai: 4.76.1(zod@3.24.1) + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -26318,6 +27640,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.0.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -26690,6 +28014,13 @@ snapshots: dependencies: fs-monkey: 1.0.6 + memfs@4.15.1: + dependencies: + '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + tree-dump: 1.0.2(tslib@2.8.1) + tslib: 2.8.1 + memoize-one@6.0.0: {} memoize@10.0.0: @@ -27237,7 +28568,7 @@ snapshots: min-indent@1.0.1: {} - miniflare@3.20241205.0: + miniflare@3.20241218.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -27247,15 +28578,19 @@ snapshots: glob-to-regexp: 0.4.1 stoppable: 1.1.0 undici: 5.28.4 - workerd: 1.20241205.0 - ws: 8.18.0 + workerd: 1.20241218.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) youch: 3.3.4 - zod: 3.24.1 + zod: 3.23.8 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -27372,10 +28707,10 @@ snapshots: neo-async@2.6.2: {} - next-auth@5.0.0-beta.4(next@14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react@18.2.0): + next-auth@5.0.0-beta.4(next@14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0))(react@18.2.0): dependencies: '@auth/core': 0.18.4 - next: 14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) + next: 14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0) react: 18.2.0 next-themes@0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): @@ -27383,7 +28718,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - next@14.2.14(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0): + next@14.2.14(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0): dependencies: '@next/env': 14.2.14 '@swc/helpers': 0.5.5 @@ -27404,12 +28739,13 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.14 '@next/swc-win32-ia32-msvc': 14.2.14 '@next/swc-win32-x64-msvc': 14.2.14 + '@opentelemetry/api': 1.9.0 sass: 1.82.0 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0): + next@15.0.0(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.82.0): dependencies: '@next/env': 15.0.0 '@swc/counter': 0.1.3 @@ -27429,6 +28765,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.0 '@next/swc-win32-arm64-msvc': 15.0.0 '@next/swc-win32-x64-msvc': 15.0.0 + '@opentelemetry/api': 1.9.0 sass: 1.82.0 sharp: 0.33.5 transitivePeerDependencies: @@ -27604,6 +28941,14 @@ snapshots: ohash@1.1.4: {} + ollama-ai-provider@0.16.1(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) + partial-json: 0.1.7 + optionalDependencies: + zod: 3.23.8 + omggif@1.0.10: {} on-finished@2.4.1: @@ -27662,6 +29007,20 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openai@4.73.0(zod@3.23.8): + dependencies: + '@types/node': 18.19.68 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + zod: 3.23.8 + transitivePeerDependencies: + - encoding + openai@4.76.1(zod@3.24.1): dependencies: '@types/node': 18.19.68 @@ -27676,6 +29035,22 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.77.0(zod@3.23.8): + dependencies: + '@types/node': 18.19.68 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + zod: 3.23.8 + transitivePeerDependencies: + - encoding + + openapi-types@12.1.3: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -27756,6 +29131,11 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + p-timeout@3.2.0: dependencies: p-finally: 1.0.0 @@ -27846,6 +29226,8 @@ snapshots: parseurl@1.3.3: {} + partial-json@0.1.7: {} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 @@ -27879,6 +29261,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} path-to-regexp@1.9.0: @@ -28043,13 +29430,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) + ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2) postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: @@ -28395,7 +29782,7 @@ snapshots: dependencies: escape-goat: 4.0.0 - puppeteer-core@2.1.1: + puppeteer-core@2.1.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/mime-types': 2.1.4 debug: 4.4.0 @@ -28406,7 +29793,7 @@ snapshots: progress: 2.0.3 proxy-from-env: 1.1.0 rimraf: 2.7.1 - ws: 6.2.3 + ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -28747,6 +30134,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.0.0-rc-df5f2736-20240712: {} + react@file:packages/usdk/packages/upstreet-agent/packages/react: {} read-cache@1.0.0: @@ -29111,6 +30500,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry@0.13.1: {} + reusify@1.0.4: {} rimraf@2.6.3: @@ -29139,6 +30530,8 @@ snapshots: sprintf-js: 1.1.3 optional: true + robot3@0.4.1: {} + robust-predicates@3.0.2: {} rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.7.2): @@ -29159,7 +30552,7 @@ snapshots: dependencies: rollup-plugin-inject: 3.0.2 - rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -29168,7 +30561,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.4.49 - postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)) postcss-modules: 4.3.1(postcss@8.4.49) promise.series: 0.2.0 resolve: 1.22.8 @@ -29211,6 +30604,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 + rpc-websockets@9.0.4: + dependencies: + '@swc/helpers': 0.5.13 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.13 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + run-applescript@7.0.0: {} run-parallel@1.2.0: @@ -29594,6 +31000,11 @@ snapshots: svelte: 4.2.19 swrev: 4.0.0 + sswr@2.1.0(svelte@4.2.19): + dependencies: + svelte: 4.2.19 + swrev: 4.0.0 + stable-hash@0.0.4: {} stable@0.1.8: {} @@ -29636,9 +31047,9 @@ snapshots: store2@2.14.3: {} - storybook@7.6.20: + storybook@7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - '@storybook/cli': 7.6.20 + '@storybook/cli': 7.6.20(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -29862,6 +31273,8 @@ snapshots: transitivePeerDependencies: - supports-color + superstruct@2.0.2: {} + supertap@3.0.1: dependencies: indent-string: 5.0.0 @@ -29942,6 +31355,18 @@ snapshots: react: 18.2.0 use-sync-external-store: 1.4.0(react@18.2.0) + swr@2.3.0(react@19.0.0-rc-df5f2736-20240712): + dependencies: + dequal: 2.0.3 + react: 19.0.0-rc-df5f2736-20240712 + use-sync-external-store: 1.4.0(react@19.0.0-rc-df5f2736-20240712) + + swr@2.3.0(react@file:packages/usdk/packages/upstreet-agent/packages/react): + dependencies: + dequal: 2.0.3 + react: file:packages/usdk/packages/upstreet-agent/packages/react + use-sync-external-store: 1.4.0(react@file:packages/usdk/packages/upstreet-agent/packages/react) + swrev@4.0.0: {} swrv@1.0.4(vue@3.5.13(typescript@5.7.2)): @@ -30134,6 +31559,8 @@ snapshots: dependencies: b4a: 1.6.7 + text-encoding-utf-8@1.0.2: {} + text-hex@1.0.0: {} text-table@0.2.0: {} @@ -30146,6 +31573,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thingies@1.21.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + three-mesh-bvh@0.7.8(three@0.167.1): dependencies: three: 0.167.1 @@ -30162,11 +31593,15 @@ snapshots: three@0.167.1: {} + throttleit@2.1.0: {} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 + through@2.3.8: {} + time-span@4.0.0: dependencies: convert-hrtime: 3.0.0 @@ -30186,6 +31621,10 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinyld@1.3.4: {} + + tls@file:packages/usdk/packages/upstreet-agent/packages/tls-proxy: {} + tmpl@1.0.5: {} to-absolute-glob@3.0.0: @@ -30211,6 +31650,18 @@ snapshots: transitivePeerDependencies: - encoding + together-ai@0.7.0: + dependencies: + '@types/node': 18.19.68 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + toidentifier@1.0.0: {} toidentifier@1.0.1: {} @@ -30233,6 +31684,10 @@ snapshots: dependencies: punycode: 2.3.1 + tree-dump@1.0.2(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -30263,6 +31718,26 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@4.9.5): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 4.9.5 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + esbuild: 0.20.2 + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@5.7.2): dependencies: bs-logger: 0.2.6 @@ -30699,25 +32174,31 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - upstreet-agent@file:packages/usdk/packages/upstreet-agent(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@18.19.68)(babel-jest@29.7.0(@babel/core@7.26.0))(babel-plugin-macros@3.1.0)(esbuild@0.20.2)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)): + upstreet-agent@file:packages/usdk/packages/upstreet-agent(@babel/core@7.26.0)(@google-cloud/vertexai@1.9.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(@types/node@18.19.68)(axios@1.7.9)(babel-jest@29.7.0(@babel/core@7.26.0))(babel-plugin-macros@3.1.0)(bufferutil@4.0.9)(esbuild@0.20.2)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5))(utf-8-validate@5.0.10): dependencies: '@aws-sdk/util-format-url': 3.709.0 '@electric-sql/pglite': 0.2.15 + '@elizaos/core': file:packages/usdk/packages/upstreet-agent/packages/elizaos-core-proxy(@google-cloud/vertexai@1.9.2)(@langchain/core@0.3.26(openai@4.76.1(zod@3.24.1)))(axios@1.7.9)(bufferutil@4.0.9)(react@file:packages/usdk/packages/upstreet-agent/packages/react)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(utf-8-validate@5.0.10) '@iarna/toml': 2.2.5 '@supabase/postgrest-js': 1.17.7 - '@supabase/supabase-js': 2.47.5 + '@supabase/supabase-js': 2.47.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@tsndr/cloudflare-worker-jwt': 2.5.3 '@types/jest': 29.5.14 + '@types/react': 19.0.0 browser-util-inspect: 0.2.0 + child_process: fs@file:packages/usdk/packages/upstreet-agent/packages/fs-proxy codecs: file:packages/usdk/packages/upstreet-agent/packages/codecs debouncer: file:packages/usdk/packages/upstreet-agent/packages/debouncer dedent: 1.5.3(babel-plugin-macros@3.1.0) dotenv: 16.4.7 - ethers: 6.13.4 + ethers: 6.13.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) format-util: 1.0.5 + fs: file:packages/usdk/packages/upstreet-agent/packages/fs-proxy javascript-time-ago: 2.5.11 jest: 29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)) jimp: 1.6.0 + json-schema-to-zod-object: 2.6.7 + memfs: 4.15.1 memoize-one: 6.0.0 minimatch: 9.0.5 openai: 4.76.1(zod@3.24.1) @@ -30730,6 +32211,7 @@ snapshots: react-agents-node: file:packages/usdk/packages/upstreet-agent/packages/react-agents-node react-reconciler: file:packages/usdk/packages/upstreet-agent/packages/react-reconciler stripe: 16.12.0 + tls: file:packages/usdk/packages/upstreet-agent/packages/tls-proxy together-ai: 0.6.0 ts-jest: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@5.7.2) twitter-api-sdk: 1.2.1 @@ -30742,18 +32224,36 @@ snapshots: zod-to-ts: 1.2.0(typescript@5.7.2)(zod@3.24.1) transitivePeerDependencies: - '@babel/core' + - '@google-cloud/vertexai' - '@jest/transform' - '@jest/types' + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cohere' + - '@langchain/core' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' - '@types/node' + - axios - babel-jest - babel-plugin-macros - bufferutil + - cheerio - encoding - esbuild - node-notifier + - peggy + - solid-js + - sswr - supports-color + - svelte - ts-node + - typeorm - utf-8-validate + - vue uri-js@4.4.1: dependencies: @@ -30854,11 +32354,24 @@ snapshots: dependencies: react: 18.2.0 + use-sync-external-store@1.4.0(react@19.0.0-rc-df5f2736-20240712): + dependencies: + react: 19.0.0-rc-df5f2736-20240712 + + use-sync-external-store@1.4.0(react@file:packages/usdk/packages/upstreet-agent/packages/react): + dependencies: + react: file:packages/usdk/packages/upstreet-agent/packages/react + usehooks-ts@2.16.0(react@18.2.0): dependencies: lodash.debounce: 4.0.8 react: 18.2.0 + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + utif2@4.1.0: dependencies: pako: 1.0.11 @@ -30884,8 +32397,14 @@ snapshots: js-md5: 0.7.3 js-sha1: 0.6.0 + uuid@10.0.0: {} + + uuid@11.0.3: {} + uuid@3.3.2: {} + uuid@8.3.2: {} + uuid@9.0.1: {} uvu@0.5.6: @@ -31204,18 +32723,17 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20241205.0: + workerd@1.20241218.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20241205.0 - '@cloudflare/workerd-darwin-arm64': 1.20241205.0 - '@cloudflare/workerd-linux-64': 1.20241205.0 - '@cloudflare/workerd-linux-arm64': 1.20241205.0 - '@cloudflare/workerd-windows-64': 1.20241205.0 + '@cloudflare/workerd-darwin-64': 1.20241218.0 + '@cloudflare/workerd-darwin-arm64': 1.20241218.0 + '@cloudflare/workerd-linux-64': 1.20241218.0 + '@cloudflare/workerd-linux-arm64': 1.20241218.0 + '@cloudflare/workerd-windows-64': 1.20241218.0 - wrangler@3.95.0: + wrangler@3.99.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/workers-shared': 0.11.0 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) blake3-wasm: 2.1.5 @@ -31223,14 +32741,14 @@ snapshots: date-fns: 4.1.0 esbuild: 0.17.19 itty-time: 1.0.6 - miniflare: 3.20241205.0 + miniflare: 3.20241218.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 selfsigned: 2.4.1 source-map: 0.6.1 unenv: unenv-nightly@2.0.0-20241204-140205-a5d5190 - workerd: 1.20241205.0 + workerd: 1.20241218.0 xxhash-wasm: 1.1.0 optionalDependencies: fsevents: 2.3.3 @@ -31275,13 +32793,27 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@6.2.3: + ws@6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: async-limiter: 1.0.1 + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.17.1: {} + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.18.0: {} + ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 xdg-app-paths@5.1.0: dependencies: @@ -31431,6 +32963,10 @@ snapshots: dependencies: zod: 3.24.1 + zod-to-json-schema@3.24.1(zod@3.23.8): + dependencies: + zod: 3.23.8 + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: zod: 3.24.1 @@ -31445,6 +32981,8 @@ snapshots: typescript: 5.7.2 zod: 3.24.1 + zod@3.23.8: {} + zod@3.24.1: {} zustand@3.7.2(react@18.2.0):