diff --git a/.env.example b/.env.example index 03f3b3bbcfb..c88dd516700 100644 --- a/.env.example +++ b/.env.example @@ -350,6 +350,13 @@ CONFLUX_ESPACE_PRIVATE_KEY= CONFLUX_ESPACE_RPC_URL= CONFLUX_MEME_CONTRACT_ADDRESS= +# Nillion (nilDB) Configuration +NILLION_NILDB_ORG_DID= # Nillion (nilDB) organization decentralized identifier +NILLION_NILDB_SCHEMA_ID= # Nillion (nilDB) data schema +NILLION_NILDB_URLS= # Nillion (nilDB) Node URL +NILLION_NILDB_NODE_IDS= # Nillion (nilDB) Node IDs +NILLION_NILDB_NODE_JWTS= # Nillion (nilDB) Node JWTs (Bearer tokens) + # ZeroG ZEROG_INDEXER_RPC= ZEROG_EVM_RPC= diff --git a/agent/package.json b/agent/package.json index be35657649f..b15d4e23d2d 100644 --- a/agent/package.json +++ b/agent/package.json @@ -90,6 +90,7 @@ "@elizaos/plugin-arthera": "workspace:*", "@elizaos/plugin-allora": "workspace:*", "@elizaos/plugin-opacity": "workspace:*", + "@elizaos/plugin-nillion": "workspace:*", "@elizaos/plugin-hyperliquid": "workspace:*", "@elizaos/plugin-akash": "workspace:*", "@elizaos/plugin-quai": "workspace:*", diff --git a/agent/src/index.ts b/agent/src/index.ts index 2f7ebd4170d..3603746b6f7 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -56,7 +56,6 @@ import { webhookPlugin, } from "@elizaos/plugin-coinbase"; import { coinmarketcapPlugin } from "@elizaos/plugin-coinmarketcap"; -import { coingeckoPlugin } from "@elizaos/plugin-coingecko"; import { confluxPlugin } from "@elizaos/plugin-conflux"; import { createCosmosPlugin } from "@elizaos/plugin-cosmos"; import { cronosZkEVMPlugin } from "@elizaos/plugin-cronoszkevm"; @@ -69,6 +68,7 @@ import { imageGenerationPlugin } from "@elizaos/plugin-image-generation"; import { lensPlugin } from "@elizaos/plugin-lensNetwork"; import { multiversxPlugin } from "@elizaos/plugin-multiversx"; import { nearPlugin } from "@elizaos/plugin-near"; +import { nillionPlugin } from "@elizaos/plugin-nillion"; import { nftGenerationPlugin } from "@elizaos/plugin-nft-generation"; import { createNodePlugin } from "@elizaos/plugin-node"; import { obsidianPlugin } from "@elizaos/plugin-obsidian"; @@ -871,14 +871,21 @@ export async function createAgent( ? artheraPlugin : null, getSecret(character, "ALLORA_API_KEY") ? alloraPlugin : null, - getSecret(character, "HYPERLIQUID_PRIVATE_KEY") - ? hyperliquidPlugin - : null, - getSecret(character, "HYPERLIQUID_TESTNET") + (getSecret(character, "HYPERLIQUID_PRIVATE_KEY") || + getSecret(character, "HYPERLIQUID_TESTNET")) ? hyperliquidPlugin : null, getSecret(character, "AKASH_MNEMONIC") && getSecret(character, "AKASH_WALLET_ADDRESS") + ? akashPlugin + : null, + getSecret(character, "NILLION_NILDB_URLS") && + getSecret(character, "NILLION_NILDB_NODE_IDS") && + getSecret(character, "NILLION_NILDB_NODE_JWTS") && + getSecret(character, "NILLION_NILDB_ORG_DID") && + getSecret(character, "NILLION_NILDB_SCHEMA_ID") + ? nillionPlugin + : null, ? akashPlugin : null, getSecret(character, "QUAI_PRIVATE_KEY") ? quaiPlugin : null, diff --git a/packages/plugin-lensNetwork/src/index.ts b/packages/plugin-lensNetwork/src/index.ts index 953b1ddaf87..29c09ee3f34 100644 --- a/packages/plugin-lensNetwork/src/index.ts +++ b/packages/plugin-lensNetwork/src/index.ts @@ -2,6 +2,7 @@ import { Plugin } from "@elizaos/core"; import transfer from "./actions/transfer.ts"; + export const lensPlugin: Plugin = { name: "Lens", description: "Lens Plugin for Eliza", diff --git a/packages/plugin-nillion/README.md b/packages/plugin-nillion/README.md new file mode 100644 index 00000000000..ea5494d8a0b --- /dev/null +++ b/packages/plugin-nillion/README.md @@ -0,0 +1,179 @@ +# @elizaos/plugin-nillion + +A plugin for storing and retrieving data from Nillion's nilDB within the ElizaOS +ecosystem. + +## Description +The Nillion plugin enables seamless integration with the decentralized nilDB +database backed by secure multi-party computation (MPC). The plugin provides +functionality to store and retrieve secrets to/from nilDB. When you store your +data in nilDB nodes, your data are secret shared in a way that none of the nodes +can learn anything about your secrets. Then, when all the secret shares are +combined, you can retrieve your original data. + +## Configuration + +To get started with nilDB read [our docs](https://nillion-docs-git-feat-fe-svsvd-nillion.vercel.app/build/secretVault-secretDataAnalytics/overview). + +To get credentials contact [Georgios Pentafragkas](mailto:georgios.pentafragkas@nillion.com). + +The plugin requires the following environment variables to be set: +```bash +NILLION_NILDB_ORG_DID= +NILLION_NILDB_SCHEMA_ID= +NILLION_NILDB_NODE_URLS=,, +NILLION_NILDB_NODE_IDS=,, +NILLION_NILDB_NODE_JWTS=,, +``` + +## Installation + +```bash +pnpm install @elizaos/plugin-nillion +``` + +## Usage + +### Basic Integration + +```typescript +import { nillionPlugin } from "@elizaos/plugin-nillion"; +``` + +### Store Secret Example + +```typescript +// The plugin automatically handles secret uploads when triggered +// through natural language commands like: + +"Upload the following secret to Nillion: MyPassword123" +"Upload my secret 'foo' to nilDB" +"Store this the word PRIVACY on nillion's database" +``` + +### Retrieve Secret Example + +```typescript +// The plugin automatically handles secret retrieval when triggered +// through natural language commands like: + +"Retrieve the secret from Nillion with id 59591970-f6d1-490f-839a-02a1e8ba2a3e" +"Download my secret with id 59591970-f6d1-490f-839a-02a1e8ba2a3e from nilDB" +"Load the secret corresponding to id 59591970-f6d1-490f-839a-02a1e8ba2a3e from nillion's database" +``` + +## API Reference + +### Actions + +#### 1. NILLION_UPLOAD + +Uploads secrets to Nillion's nilDB. + +**Aliases:** +- UPLOAD_SECRET_TO_NILLION +- UPLOAD_SECRET_TO_NILDB +- STORE_SECRET_ON_NILLION +- STORE_SECRET_ON_NILDB +- SAVE_SECRET_TO_NILLION +- SAVE_SECRET_TO_NILDB +- UPLOAD_TO_NILLION +- UPLOAD_TO_NILDB +- STORE_ON_NILLION +- STORE_ON_NILDB +- SHARE_SECRET_ON_NILLION +- SHARE_SECRET_ON_NILDB +- PUBLISH_SECRET_TO_NILLION +- PUBLISH_SECRET_TO_NILDB + +**Input Content:** +```typescript +interface UploadContent { + secret: string; +} +``` + +#### 2. NILLION_RETRIEVE + +Retrieve secrets from Nillion's nilDB. + +**Aliases:** +- RETRIEVE_SECRET_FROM_NILLION +- RETRIEVE_SECRET_FROM_NILDB +- GET_SECRET_FROM_NILLION +- GET_SECRET_FROM_NILDB +- LOAD_SECRET_FROM_NILLION +- LOAD_SECRET_FROM_NILDB +- RETRIEVE_FROM_NILLION +- RETRIEVE_FROM_NILDB +- LOAD_FROM_NILLION +- LOAD_FROM_NILDB + +**Input Content:** +```typescript +interface RetrieveContent { + id: string; +} +``` + +## Common Issues & Troubleshooting + +**Configuration Issues** + - Verify all required environment variables are set properly + (`NILLION_NILDB_URLS`, `NILLION_NILDB_NODE_IDS`, `NILLION_NILDB_NODE_JWTS` + should all have three comma separated values.) + - Ensure RPC endpoints are accessible + - Confirm NILLION_NILDB_ORG and NILLION_NILDB_SCHEMA_ID are set correctly + (one value each.) + +## Security Best Practices + +**Environment Variables** + - Never commit private keys to version control + - Use secure environment variable management + - Rotate private keys periodically + +## Development Guide + +### Setting Up Development Environment + +1. Clone the repository +2. Install dependencies: + + ```bash + pnpm install + ``` + +3. Build the plugin: + + ```bash + pnpm run build + ``` + +4. Run the plugin: + + ```bash + pnpm run dev + ``` + +## Future Enhancements + +- Currently, we only upload a string. This can be extended to allow any custom schema. + +We welcome community feedback and contributions to help prioritize these enhancements. + +## Contributing + +Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. + +## Credits + +This plugin integrates with and builds upon several key technologies: +- [Nillion's nilDB](https://nillion-docs-git-feat-fe-svsvd-nillion.vercel.app/build/secretVault-secretDataAnalytics/overview): Decentralized database + +Special thanks to: +- The Eliza community for their contributions and feedback. + +## License + +This plugin is part of the Eliza project. See the main project repository for license information. diff --git a/packages/plugin-nillion/package.json b/packages/plugin-nillion/package.json new file mode 100644 index 00000000000..36c9244eb1c --- /dev/null +++ b/packages/plugin-nillion/package.json @@ -0,0 +1,34 @@ +{ + "name": "@elizaos/plugin-nillion", + "version": "0.1.0", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "@elizaos/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --format esm --dts --watch", + "test": "vitest" + }, + "dependencies": { + "@elizaos/core": "workspace:*", + "@nillion/nilql": "0.0.0-alpha.4", + "zod": "3.23.8" + }, + "devDependencies": { + "tsup": "8.3.5" + }, + "files": [ + "dist" + ] +} diff --git a/packages/plugin-nillion/src/actions/api.ts b/packages/plugin-nillion/src/actions/api.ts new file mode 100644 index 00000000000..b856da2b574 --- /dev/null +++ b/packages/plugin-nillion/src/actions/api.ts @@ -0,0 +1,123 @@ +import { NilDbNode } from "./environment"; +import { elizaLogger, type UUID } from "@elizaos/core"; + +const Endpoints = { + Create: "/api/v1/data/create", + Read: "/api/v1/data/read", +} as const; + +type ShareData = { + _id: UUID; + data: string; +}; + +type CreatePayload = { + schema: UUID; + data: [ShareData]; +}; + +type CreateResponse = { + created: UUID[]; + errors: { error: string; document: ShareData }[]; +}; + +async function createShare( + node: NilDbNode, + schema: UUID, + data: ShareData +): Promise { + const payload: CreatePayload = { + schema, + data: [data], + }; + + const url = `${node.url}${Endpoints.Create}`; + const response = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${node.jwt}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error("Share upload failed", { cause: response }); + } + + const body = (await response.json()) as CreateResponse; + if (body.errors) { + elizaLogger.warn("nilDB: Share upload failed: %O", body.errors); + throw new Error("Share upload failed", { cause: body.errors }); + } + + elizaLogger.debug("nilDB: Share uploaded to: %s", node.did); + return true; +} + +type ReadPayload = { + schema: UUID; + filter: { _id: UUID }; +}; + +type ShareDocument = { + _id: UUID; + _created: Date; + _updated: Date; + data: string; +}; + +type ReadResponseBody = + | { + data: ShareDocument[]; + } + | { + ts: Date; + errors: unknown[]; + }; + +async function readShare( + node: NilDbNode, + schema: UUID, + _id: UUID +): Promise { + const payload: ReadPayload = { + schema, + filter: { _id }, + }; + + const url = `${node.url}${Endpoints.Read}`; + const response = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${node.jwt}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error("Share upload failed", { cause: response }); + } + + const body = (await response.json()) as ReadResponseBody; + if ("errors" in body) { + elizaLogger.warn("nilDB: Read share failed: %O", body); + throw new Error("Read share failed", { cause: body }); + } + + if (body.data.length !== 1) { + elizaLogger.warn("Unexpected data.length returned with filter"); + throw new Error("Unexpected data.length returned with filter", { + cause: body, + }); + } + + elizaLogger.debug("nilDB: Share uploaded to: %s", node.did); + return body.data[0].data; +} + +export const NilDbApi = { + createShare, + readShare, +}; diff --git a/packages/plugin-nillion/src/actions/common.ts b/packages/plugin-nillion/src/actions/common.ts new file mode 100644 index 00000000000..b0c7e0bd73d --- /dev/null +++ b/packages/plugin-nillion/src/actions/common.ts @@ -0,0 +1,16 @@ +import { elizaLogger, IAgentRuntime, Memory } from "@elizaos/core"; +import { loadConfig } from "./environment"; + +export async function validateNilDbConfig( + runtime: IAgentRuntime, + _message: Memory +): Promise { + try { + loadConfig(runtime); + elizaLogger.debug("nilDB: Valid plugin configuration"); + return true; + } catch (e: unknown) { + elizaLogger.warn("nilDB: Invalid plugin configuration"); + return false; + } +} diff --git a/packages/plugin-nillion/src/actions/environment.ts b/packages/plugin-nillion/src/actions/environment.ts new file mode 100644 index 00000000000..f592b523a4f --- /dev/null +++ b/packages/plugin-nillion/src/actions/environment.ts @@ -0,0 +1,51 @@ +import { IAgentRuntime, UUID } from "@elizaos/core"; + +export type NilDbConfig = { + org: NilDid; + schema: UUID; + nodes: NilDbNode[]; +}; + +export type NilDbNode = { + url: string; + jwt: string; + did: NilDid; +}; + +export type NilDid = `did:nil:${string}`; + +const EnvVarName = { + OrgId: "NILLION_NILDB_ORG_DID", + SchemaId: "NILLION_NILDB_SCHEMA_ID", + NodeUrls: "NILLION_NILDB_NODE_URLS", + NodeIds: "NILLION_NILDB_NODE_IDS", + NodeJwts: "NILLION_NILDB_NODE_JWTS", +} as const; + +export function loadConfig(runtime: IAgentRuntime): NilDbConfig { + try { + const org = runtime.getSetting(EnvVarName.OrgId) as NilDid; + const schema = runtime.getSetting(EnvVarName.SchemaId) as UUID; + const nodeUrls = runtime.getSetting(EnvVarName.NodeUrls).split(","); + const nodeIds = runtime + .getSetting(EnvVarName.NodeIds) + .split(",") as NilDid[]; + const nodeJwts = runtime.getSetting(EnvVarName.NodeJwts).split(","); + + const nodes = nodeIds.map( + (did: NilDid, i: number): NilDbNode => ({ + did, + url: nodeUrls[i], + jwt: nodeJwts[i], + }) + ); + + return { + org, + schema, + nodes, + }; + } catch (error) { + throw new TypeError("Failed to load plugin-nillion config"); + } +} diff --git a/packages/plugin-nillion/src/actions/retrieve.ts b/packages/plugin-nillion/src/actions/retrieve.ts new file mode 100644 index 00000000000..3a942fe7c33 --- /dev/null +++ b/packages/plugin-nillion/src/actions/retrieve.ts @@ -0,0 +1,150 @@ +import { + Action, + ActionExample, + composeContext, + Content, + elizaLogger, + generateObject, + HandlerCallback, + IAgentRuntime, + Memory, + ModelClass, + State, + UUID, +} from "@elizaos/core"; +import { nilql } from "@nillion/nilql"; +import { retrieveTemplate } from "../templates/retrieve"; +import { loadConfig } from "./environment"; +import { validateNilDbConfig } from "./common.ts"; +import { NilDbApi } from "./api.ts"; +import { z } from "zod"; + +export interface RetrieveContent extends Content { + id: string; +} + +function isRetrieveContent( + _runtime: IAgentRuntime, + content: any +): content is RetrieveContent { + console.log("Content to retrieve", content); + return typeof content.id === "string"; +} + +export const readFromNilDb: Action = { + name: "NILLION_RETRIEVE", + similes: [ + "RETRIEVE_SECRET_FROM_NILLION", + "RETRIEVE_SECRET_FROM_NILDB", + "GET_SECRET_FROM_NILLION", + "GET_SECRET_FROM_NILDB", + "LOAD_SECRET_FROM_NILLION", + "LOAD_SECRET_FROM_NILDB", + "RETRIEVE_FROM_NILLION", + "RETRIEVE_FROM_NILDB", + "LOAD_FROM_NILLION", + "LOAD_FROM_NILDB", + ], + description: "Retrieve secrets using MPC and nilDB", + validate: validateNilDbConfig, + handler: async ( + runtime: IAgentRuntime, + message: Memory, + state: State, + _options: any, + callback: HandlerCallback + ) => { + elizaLogger.debug("nilDB: Read secret handler invoked"); + if (!state) { + state = (await runtime.composeState(message)) as State; + } else { + state = await runtime.updateRecentMessageState(state); + } + + // Compose retrieve context + const context = composeContext({ + state, + template: retrieveTemplate, + }); + + const schema = z.object({ + id: z.string().uuid(), + }); + + // Parse user message and attempt to extract secret id + const response = await generateObject({ + runtime, + context, + modelClass: ModelClass.LARGE, + schema, + }); + + const parseResult = schema.safeParse(response); + if (!parseResult.success) { + elizaLogger.info( + "nilDB: Failed to parse secret id from user message." + ); + await callback({ + text: "In order to retrieve your secret I need your secret's identifier that you got during upload", + }); + return; + } + + const settings = loadConfig(runtime); + const cluster = { nodes: settings.nodes }; + const secretKey = await nilql.secretKey(cluster, { store: true }); + const _id = parseResult.data.id as UUID; + + const promises = settings.nodes.map(async (node) => { + return await NilDbApi.readShare(node, settings.schema, _id); + }); + + try { + const shares = await Promise.all(promises); + const secret = await nilql.decrypt(secretKey, shares); + + elizaLogger.debug( + "nilDB: secret retrieved with id: %s and value: %s", + _id, + secret + ); + await callback({ + text: `Secret retrieved: ${secret}`, + }); + } catch (error: unknown) { + elizaLogger.warn("nilDB: Retrieve secret failed: %O", error); + await callback({ + text: "Failed to retrieve secret from nilDB.", + }); + } + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "Retrieve my secret from Nillion with id 4c74cf1f-aefb-4593-92d7-142517e6d464", + action: "NILLION_RETRIEVE", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "Can you help me retrieve my password with ID 4c74cf1f-aefb-4593-92d7-142517e6d464?", + action: "NILLION_RETRIEVE", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "I need to retrieve the password from 4c74cf1f-aefb-4593-92d7-142517e6d464", + action: "NILLION_RETRIEVE", + }, + }, + ], + ] as ActionExample[][], +} as Action; diff --git a/packages/plugin-nillion/src/actions/upload.ts b/packages/plugin-nillion/src/actions/upload.ts new file mode 100644 index 00000000000..4a3a561dcda --- /dev/null +++ b/packages/plugin-nillion/src/actions/upload.ts @@ -0,0 +1,143 @@ +import { + Action, + HandlerCallback, + IAgentRuntime, + Memory, + State, + ModelClass, + ActionExample, + generateObject, + elizaLogger, + type UUID, +} from "@elizaos/core"; +import { nilql } from "@nillion/nilql"; +import { composeContext } from "@elizaos/core"; +import { uploadTemplate } from "../templates/upload"; +import { v4 as uuid4 } from "uuid"; +import { loadConfig } from "./environment"; +import { NilDbApi } from "./api"; +import { validateNilDbConfig } from "./common"; +import { z } from "zod"; + +export const uploadToNilDb: Action = { + name: "NILLION_UPLOAD", + similes: [ + "UPLOAD_SECRET_TO_NILLION", + "UPLOAD_SECRET_TO_NILDB", + "STORE_SECRET_ON_NILLION", + "STORE_SECRET_ON_NILDB", + "SAVE_SECRET_TO_NILLION", + "SAVE_SECRET_TO_NILDB", + "UPLOAD_TO_NILLION", + "UPLOAD_TO_NILDB", + "STORE_ON_NILLION", + "STORE_ON_NILDB", + "SHARE_SECRET_ON_NILLION", + "SHARE_SECRET_ON_NILDB", + "PUBLISH_SECRET_TO_NILLION", + "PUBLISH_SECRET_TO_NILDB", + ], + description: "Securely store secrets using MPC and nilDB", + validate: validateNilDbConfig, + handler: async ( + runtime: IAgentRuntime, + message: Memory, + state: State, + _options: any, + callback: HandlerCallback + ): Promise => { + elizaLogger.info("nilDB: Upload secret handler invoked"); + if (!state) { + state = (await runtime.composeState(message)) as State; + } else { + state = await runtime.updateRecentMessageState(state); + } + + // Compose upload context + const context = composeContext({ + state, + template: uploadTemplate, + }); + + const schema = z.object({ + secret: z.string(), + }); + + // Parse user message and attempt to extract secret + const response = await generateObject({ + runtime, + context, + modelClass: ModelClass.LARGE, + schema, + }); + + const parseResult = schema.safeParse(response); + if (!parseResult.success) { + elizaLogger.info( + "nilDB: Failed to parse secret from user message." + ); + await callback({ + text: "In order to save your secret please clearly identify it in your message.", + }); + return; + } + + const secret = parseResult.data.secret; + const settings = loadConfig(runtime); + const cluster = { nodes: settings.nodes }; + const secretKey = await nilql.secretKey(cluster, { + store: true, + }); + const sharesOfSecret = await nilql.encrypt(secretKey, secret); + const _id = uuid4() as UUID; + + const promises = settings.nodes.map(async (node, i) => { + await NilDbApi.createShare(node, settings.schema, { + _id, + data: sharesOfSecret[i].toString(), + }); + }); + + try { + await Promise.all(promises); // throws if any share upload fails + elizaLogger.info("nilDB: secret uploaded with id: ", _id); + await callback({ + text: `Secret uploaded to nilDB with id ${_id}`, + }); + } catch (error: unknown) { + elizaLogger.warn("nilDB: secret upload failed", error); + await callback({ + text: "Failed to upload secret to nilDB.", + }); + } + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "upload my secret 'PRIVACY' to Nillion", + action: "NILLION_UPLOAD", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "can you help me upload my password 'passw0rd'?", + action: "NILLION_UPLOAD", + }, + }, + ], + [ + { + user: "{{user1}}", + content: { + text: "I need to upload the password `password`", + action: "NILLION_UPLOAD", + }, + }, + ], + ] as ActionExample[][], +} as Action; diff --git a/packages/plugin-nillion/src/index.ts b/packages/plugin-nillion/src/index.ts new file mode 100644 index 00000000000..aa70ce76544 --- /dev/null +++ b/packages/plugin-nillion/src/index.ts @@ -0,0 +1,13 @@ +import { Plugin } from "@elizaos/core"; +import { uploadToNilDb } from "./actions/upload"; +import { readFromNilDb } from "./actions/retrieve"; + +export const nillionPlugin: Plugin = { + name: "Nillion", + description: "A plugin to manage secrets in nilDB using secure MPC", + actions: [uploadToNilDb, readFromNilDb], + evaluators: [], + providers: [], +}; + +export default nillionPlugin; diff --git a/packages/plugin-nillion/src/templates/retrieve.ts b/packages/plugin-nillion/src/templates/retrieve.ts new file mode 100644 index 00000000000..c050c746d91 --- /dev/null +++ b/packages/plugin-nillion/src/templates/retrieve.ts @@ -0,0 +1,15 @@ +export const retrieveTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined. + +Example response: +\`\`\`json +{ + "id": "fc453df9-0f2c-4c4f-99a0-912dc9dbbdb1" +} +\`\`\` + +{{recentMessages}} + +Given the recent messages, extract the secret's id to retrieve it from nillion's nildb: +- id + +Respond with a JSON markdown block containing only the extracted values.`; diff --git a/packages/plugin-nillion/src/templates/upload.ts b/packages/plugin-nillion/src/templates/upload.ts new file mode 100644 index 00000000000..e686cf99835 --- /dev/null +++ b/packages/plugin-nillion/src/templates/upload.ts @@ -0,0 +1,15 @@ +export const uploadTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined. + +Example response: +\`\`\`json +{ + "secret": "secret value goes here" +} +\`\`\` + +{{recentMessages}} + +Given the recent messages, extract the secret to upload to nillion's nildb: +- secret + +Respond with a JSON markdown block containing only the extracted values.`; diff --git a/packages/plugin-nillion/tsconfig.json b/packages/plugin-nillion/tsconfig.json new file mode 100644 index 00000000000..7251ebee37d --- /dev/null +++ b/packages/plugin-nillion/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "types": [ + "node" + ] + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/packages/plugin-nillion/tsup.config.ts b/packages/plugin-nillion/tsup.config.ts new file mode 100644 index 00000000000..6496fb33f15 --- /dev/null +++ b/packages/plugin-nillion/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "@nillion/nilql", + "axios", + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6faa99495bf..00a1c591e4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,7 +23,7 @@ importers: version: 3.9.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@6.0.5) '@vitest/eslint-plugin': specifier: 1.0.1 - version: 1.0.1(@typescript-eslint/utils@8.19.1(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.10.5)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0)) + version: 1.0.1(@typescript-eslint/utils@8.20.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.10.5)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0)) amqplib: specifier: 0.10.5 version: 0.10.5 @@ -274,6 +274,9 @@ importers: '@elizaos/plugin-nft-generation': specifier: workspace:* version: link:../packages/plugin-nft-generation + '@elizaos/plugin-nillion': + specifier: workspace:* + version: link:../packages/plugin-nillion '@elizaos/plugin-node': specifier: workspace:* version: link:../packages/plugin-node @@ -406,7 +409,7 @@ importers: version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': specifier: ^5.63.0 - version: 5.64.0(react@19.0.0) + version: 5.64.1(react@19.0.0) '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -467,10 +470,10 @@ importers: version: 7.5.8 '@typescript-eslint/eslint-plugin': specifier: ^8.19.1 - version: 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + version: 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^8.19.1 - version: 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + version: 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) '@vitejs/plugin-react-swc': specifier: ^3.5.0 version: 3.7.2(@swc/helpers@0.5.15)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) @@ -485,13 +488,13 @@ importers: version: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.28.1 - version: 2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: specifier: ^6.7.1 version: 6.10.2(eslint@9.18.0(jiti@2.4.2)) eslint-plugin-react: specifier: ^7.33.2 - version: 7.37.3(eslint@9.18.0(jiti@2.4.2)) + version: 7.37.4(eslint@9.18.0(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.0.0 version: 5.1.0(eslint@9.18.0(jiti@2.4.2)) @@ -515,7 +518,7 @@ importers: version: 5.6.3 typescript-eslint: specifier: ^8.18.2 - version: 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + version: 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) vite: specifier: ^6.0.5 version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) @@ -536,7 +539,7 @@ importers: version: 3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10) '@docusaurus/plugin-ideal-image': specifier: 3.6.3 - version: 3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10) + version: 3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bare-buffer@3.0.1)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10) '@docusaurus/preset-classic': specifier: 3.6.3 version: 3.6.3(@algolia/client-search@5.19.0)(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/react@19.0.6)(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.7.3)(utf-8-validate@5.0.10) @@ -1803,7 +1806,7 @@ importers: version: link:../core '@goat-sdk/adapter-vercel-ai': specifier: 0.2.0 - version: 0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.33(react@19.0.0)(zod@3.23.8)) + version: 0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.34(react@19.0.0)(zod@3.23.8)) '@goat-sdk/core': specifier: 0.4.0 version: 0.4.0 @@ -2186,6 +2189,22 @@ importers: specifier: 7.1.0 version: 7.1.0 + packages/plugin-nillion: + dependencies: + '@elizaos/core': + specifier: workspace:* + version: link:../core + '@nillion/nilql': + specifier: 0.0.0-alpha.4 + version: 0.0.0-alpha.4 + zod: + specifier: 3.23.8 + version: 3.23.8 + devDependencies: + tsup: + specifier: 8.3.5 + version: 8.3.5(@swc/core@1.10.7(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0) + packages/plugin-node: dependencies: '@aws-sdk/client-s3': @@ -3135,8 +3154,8 @@ packages: zod: optional: true - '@ai-sdk/react@1.0.9': - resolution: {integrity: sha512-7mtkgVCSzp8J4x3qk5Vtlk1FiZTH7vWIZvIrA6ISbFDy+7mwm45rIDIymzCiofzr3c/Wioy41H2Ki3Nth55bgg==} + '@ai-sdk/react@1.0.10': + resolution: {integrity: sha512-A3i0Y93xssldeFdcbHPCiK+v9UGisXZUt5ey4I9x2bGktP4eEAXJz4O26EHz5VbolmOd+81kSxm9BCvithzguQ==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -3174,8 +3193,8 @@ packages: zod: optional: true - '@ai-sdk/ui-utils@1.0.8': - resolution: {integrity: sha512-7ya/t28oMaFauHxSj4WGQCEV/iicZj9qP+O+tCakMIDq7oDCZMUNBLCQomoWs16CcYY4l0wo1S9hA4PAdFcOvA==} + '@ai-sdk/ui-utils@1.0.9': + resolution: {integrity: sha512-ULJ+TTCVk+iW5asdKjG33vEfMmalaE9rJOlddVE5t6729Fjow1a1COXRTwE5y1r1qU2Rt+YiXQcTTA5ovx0SMw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -7020,6 +7039,10 @@ packages: resolution: {integrity: sha512-NausMdekKJH58ssY/WjxkDYctHtLPqHUt1/ffZvqVp4SgcAH7Q5H7st782NJU+PZM85eNtcf5YbbVHbwDJgmOA==} engines: {node: '>=19.9.0'} + '@nillion/nilql@0.0.0-alpha.4': + resolution: {integrity: sha512-eZSKtPZGFFxEAeWp5zDzMk18ZnRCkJ5HxZmoKmphIJ4yZly4bOnlZml+yL6UzakE9a3IaP4VLHWpEn26v9FbXw==} + engines: {node: '>=23'} + '@noble/ciphers@1.0.0': resolution: {integrity: sha512-wH5EHOmLi0rEazphPbecAzmjd12I6/Yv/SiHdkA9LSycsQk7RuuTp7am5/o62qYr0RScE7Pc9icXGBbsr6cesA==} engines: {node: ^14.21.3 || >=16} @@ -8748,23 +8771,23 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@shikijs/core@1.26.1': - resolution: {integrity: sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==} + '@shikijs/core@1.26.2': + resolution: {integrity: sha512-ORyu3MrY7dCC7FDLDsFSkBM9b/AT9/Y8rH+UQ07Rtek48pp0ZhQOMPTKolqszP4bBCas6FqTZQYt18BBamVl/g==} - '@shikijs/engine-javascript@1.26.1': - resolution: {integrity: sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==} + '@shikijs/engine-javascript@1.26.2': + resolution: {integrity: sha512-ngkIu9swLVo9Zt5QBtz5Sk08vmPcwuj01r7pPK/Zjmo2U2WyKMK4WMUMmkdQiUacdcLth0zt8u1onp4zhkFXKQ==} - '@shikijs/engine-oniguruma@1.26.1': - resolution: {integrity: sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==} + '@shikijs/engine-oniguruma@1.26.2': + resolution: {integrity: sha512-mlN7Qrs+w60nKrd7at7XkXSwz6728Pe34taDmHrG6LRHjzCqQ+ysg+/AT6/D2LMk0s2lsr71DjpI73430QP4/w==} - '@shikijs/langs@1.26.1': - resolution: {integrity: sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==} + '@shikijs/langs@1.26.2': + resolution: {integrity: sha512-o5cdPycB2Kw3IgncHxWopWPiTkjAj7dG01fLkkUyj3glb5ftxL/Opecq9F54opMlrgXy7ZIqDERvFLlUzsCOuA==} - '@shikijs/themes@1.26.1': - resolution: {integrity: sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==} + '@shikijs/themes@1.26.2': + resolution: {integrity: sha512-y4Pn6PM5mODz/e3yF6jAUG7WLKJzqL2tJ5qMJCUkMUB1VRgtQVvoa1cHh7NScryGXyrYGJ8nPnRDhdv2rw0xpA==} - '@shikijs/types@1.26.1': - resolution: {integrity: sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==} + '@shikijs/types@1.26.2': + resolution: {integrity: sha512-PO2jucx2FIdlLBPYbIUlMtWSLs5ulcRcuV93cR3T65lkK5SJP4MGBRt9kmWGXiQc0f7+FHj/0BEawditZcI/fQ==} '@shikijs/vscode-textmate@10.0.1': resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} @@ -9551,16 +9574,16 @@ packages: '@tanstack/query-core@5.62.16': resolution: {integrity: sha512-9Sgft7Qavcd+sN0V25xVyo0nfmcZXBuODy3FVG7BMWTg1HMLm8wwG5tNlLlmSic1u7l1v786oavn+STiFaPH2g==} - '@tanstack/query-core@5.64.0': - resolution: {integrity: sha512-/MPJt/AaaMzdWJZTafgMyYhEX/lGjQrNz8+NDQSk8fNoU5PHqh05FhQaBrEQafW2PeBHsRbefEf//qKMiSAbQQ==} + '@tanstack/query-core@5.64.1': + resolution: {integrity: sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==} '@tanstack/react-query@5.62.16': resolution: {integrity: sha512-XJIZNj65d2IdvU8VBESmrPakfIm6FSdHDzrS1dPrAwmq3ZX+9riMh/ZfbNQHAWnhrgmq7KoXpgZSRyXnqMYT9A==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-query@5.64.0': - resolution: {integrity: sha512-tBMzlROROUcTDMpDt1NC3n9ndKnJHPB3RCpa6Bf9f31TFvqhLz879x8jldtKU+6IwMSw1Pn4K1AKA+2SYyA6TA==} + '@tanstack/react-query@5.64.1': + resolution: {integrity: sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==} peerDependencies: react: ^18 || ^19 @@ -10129,8 +10152,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.19.1': - resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} + '@typescript-eslint/eslint-plugin@8.20.0': + resolution: {integrity: sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -10157,8 +10180,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.19.1': - resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} + '@typescript-eslint/parser@8.20.0': + resolution: {integrity: sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10172,8 +10195,8 @@ packages: resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.19.1': - resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} + '@typescript-eslint/scope-manager@8.20.0': + resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@6.21.0': @@ -10196,8 +10219,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.19.1': - resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} + '@typescript-eslint/type-utils@8.20.0': + resolution: {integrity: sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10211,8 +10234,8 @@ packages: resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.19.1': - resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} + '@typescript-eslint/types@8.20.0': + resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -10233,8 +10256,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.19.1': - resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} + '@typescript-eslint/typescript-estree@8.20.0': + resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' @@ -10255,8 +10278,8 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.19.1': - resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} + '@typescript-eslint/utils@8.20.0': + resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10270,8 +10293,8 @@ packages: resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.19.1': - resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} + '@typescript-eslint/visitor-keys@8.20.0': + resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@uidotdev/usehooks@2.4.1': @@ -10819,8 +10842,8 @@ packages: zod: optional: true - ai@4.0.33: - resolution: {integrity: sha512-mOvhPyVchGZvZuPn8Zj4J+93fZOlaBH1BtunvGmQ/8yFc5hGmid3c0XIdw5UNt3++0sXawKE3j7JUL5ZmiQdKg==} + ai@4.0.34: + resolution: {integrity: sha512-GkbepmrAtyTnTTUZKoB7ghqfywWal2n/EKR3cs72eM86E0Wejz7ZaVGY/QF9LjwTJ0qhrFELlFGffnCBKqhQLg==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -11312,6 +11335,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-buffer@3.0.1: + resolution: {integrity: sha512-QuDV/Wv5k1xsevh24zQwEjlQJuRvt3tUC39VFai6PoJiDIwmISEoc76ZTae4yVcacRBw0HBArrHssV1o3TEKhQ==} + engines: {bare: '>=1.13.0'} + bare-events@2.5.4: resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} @@ -11324,8 +11351,11 @@ packages: bare-path@2.1.3: resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - bare-stream@2.6.1: - resolution: {integrity: sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==} + bare-stream@2.6.2: + resolution: {integrity: sha512-gSFtIiA/b0Llho+9zEy9MNgqrKpq70T62V4oGN8BSJgZt7Rk3RORPCK1kLj9hxS+YtrvSOOVGUrhraouXZkv3A==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' base-x@2.0.6: resolution: {integrity: sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g==} @@ -11397,6 +11427,10 @@ packages: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} + bigint-crypto-utils@3.3.0: + resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} + engines: {node: '>=14.0.0'} + bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} @@ -12628,8 +12662,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.30.4: - resolution: {integrity: sha512-OxtlZwQl1WbwMmLiyPSEBuzeTIQnwZhJYYWFzZ2PhEHVFwpeaqNIkUzSiso00D98qk60l8Gwon2RP304d3BJ1A==} + cytoscape@3.31.0: + resolution: {integrity: sha512-zDGn1K/tfZwEnoGOcHc0H4XazqAAXAuDpcYw9mUnUjATjqljyCNGJv8uEvbvxGaGHaVshxMecyl6oc6uKzRfbw==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -13584,8 +13618,8 @@ packages: peerDependencies: eslint: '>=8.40' - eslint-plugin-react@7.37.3: - resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -16504,8 +16538,8 @@ packages: mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - mdast-util-mdx-jsx@3.1.3: - resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} mdast-util-mdx@3.0.0: resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} @@ -17479,8 +17513,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.10.0: - resolution: {integrity: sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==} + oniguruma-to-es@1.0.0: + resolution: {integrity: sha512-kihvp0O4lFwf5tZMkfanwQLIZ9ORe9OeOFgZonH0BQeThgwfJiaZFeOfvvJVnJIM9TiVmx0RDD35hUJDR0++rQ==} only-allow@1.2.1: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} @@ -17699,6 +17733,10 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true + paillier-bigint@3.4.3: + resolution: {integrity: sha512-82otV7H/gBiQeYjsmc/Zo029GoJDnAFyoMWQMsUgfya50W8dYRVgvUR/lHO0yrS7MfMwgE8fCeEIBF0IucLYFw==} + engines: {node: '>=12'} + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -19927,8 +19965,8 @@ packages: engines: {node: '>=4'} hasBin: true - shiki@1.26.1: - resolution: {integrity: sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==} + shiki@1.26.2: + resolution: {integrity: sha512-iP7u2NA9A6JwRRCkIUREEX2cMhlYV5EBmbbSlfSRvPThwca8HBRbVkWuNWW+kw9+i6BSUZqqG6YeUs5dC2SjZw==} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -20426,8 +20464,8 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - stylis@4.3.4: - resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + stylis@4.3.5: + resolution: {integrity: sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==} subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} @@ -21207,8 +21245,8 @@ packages: typescript-collections@1.3.3: resolution: {integrity: sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==} - typescript-eslint@8.19.1: - resolution: {integrity: sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==} + typescript-eslint@8.20.0: + resolution: {integrity: sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -22770,20 +22808,20 @@ snapshots: react: 19.0.0 zod: 3.23.8 - '@ai-sdk/react@1.0.9(react@19.0.0)(zod@3.23.8)': + '@ai-sdk/react@1.0.10(react@19.0.0)(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.8(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.9(zod@3.23.8) swr: 2.3.0(react@19.0.0) throttleit: 2.1.0 optionalDependencies: react: 19.0.0 zod: 3.23.8 - '@ai-sdk/react@1.0.9(react@19.0.0)(zod@3.24.1)': + '@ai-sdk/react@1.0.10(react@19.0.0)(zod@3.24.1)': dependencies: '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) - '@ai-sdk/ui-utils': 1.0.8(zod@3.24.1) + '@ai-sdk/ui-utils': 1.0.9(zod@3.24.1) swr: 2.3.0(react@19.0.0) throttleit: 2.1.0 optionalDependencies: @@ -22817,7 +22855,7 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/ui-utils@1.0.8(zod@3.23.8)': + '@ai-sdk/ui-utils@1.0.9(zod@3.23.8)': dependencies: '@ai-sdk/provider': 1.0.4 '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) @@ -22825,7 +22863,7 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/ui-utils@1.0.8(zod@3.24.1)': + '@ai-sdk/ui-utils@1.0.9(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.4 '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) @@ -25948,14 +25986,15 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/lqip-loader@3.6.3(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15)))': + '@docusaurus/lqip-loader@3.6.3(bare-buffer@3.0.1)(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15)))': dependencies: '@docusaurus/logger': 3.6.3 file-loader: 6.2.0(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15))) lodash: 4.17.21 - sharp: 0.32.6 + sharp: 0.32.6(bare-buffer@3.0.1) tslib: 2.8.1 transitivePeerDependencies: + - bare-buffer - webpack '@docusaurus/mdx-loader@3.6.3(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': @@ -26252,11 +26291,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-ideal-image@3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-ideal-image@3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bare-buffer@3.0.1)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: '@docusaurus/core': 3.6.3(@mdx-js/react@3.0.1(@types/react@19.0.6)(react@18.3.1))(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@docusaurus/lqip-loader': 3.6.3(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15))) - '@docusaurus/responsive-loader': 1.7.0(sharp@0.32.6) + '@docusaurus/lqip-loader': 3.6.3(bare-buffer@3.0.1)(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15))) + '@docusaurus/responsive-loader': 1.7.0(sharp@0.32.6(bare-buffer@3.0.1)) '@docusaurus/theme-translations': 3.6.3 '@docusaurus/types': 3.6.3(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.6.3(@swc/core@1.10.7(@swc/helpers@0.5.15))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) @@ -26264,7 +26303,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-waypoint: 10.3.0(react@18.3.1) - sharp: 0.32.6 + sharp: 0.32.6(bare-buffer@3.0.1) tslib: 2.8.1 webpack: 5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15)) transitivePeerDependencies: @@ -26275,6 +26314,7 @@ snapshots: - '@swc/core' - '@swc/css' - acorn + - bare-buffer - bufferutil - csso - debug @@ -26369,11 +26409,11 @@ snapshots: '@types/react': 19.0.6 react: 18.3.1 - '@docusaurus/responsive-loader@1.7.0(sharp@0.32.6)': + '@docusaurus/responsive-loader@1.7.0(sharp@0.32.6(bare-buffer@3.0.1))': dependencies: loader-utils: 2.0.4 optionalDependencies: - sharp: 0.32.6 + sharp: 0.32.6(bare-buffer@3.0.1) '@docusaurus/theme-classic@3.6.3(@swc/core@1.10.7(@swc/helpers@0.5.15))(@types/react@19.0.6)(acorn@8.14.0)(bufferutil@4.0.9)(eslint@9.18.0(jiti@2.4.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: @@ -27662,14 +27702,14 @@ snapshots: '@gerrit0/mini-shiki@1.26.1': dependencies: - '@shikijs/engine-oniguruma': 1.26.1 - '@shikijs/types': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.2 + '@shikijs/types': 1.26.2 '@shikijs/vscode-textmate': 10.0.1 - '@goat-sdk/adapter-vercel-ai@0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.33(react@19.0.0)(zod@3.23.8))': + '@goat-sdk/adapter-vercel-ai@0.2.0(@goat-sdk/core@0.4.0)(ai@4.0.34(react@19.0.0)(zod@3.23.8))': dependencies: '@goat-sdk/core': 0.4.0 - ai: 4.0.33(react@19.0.0)(zod@3.23.8) + ai: 4.0.34(react@19.0.0)(zod@3.23.8) zod: 3.23.8 '@goat-sdk/core@0.3.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)': @@ -29661,6 +29701,11 @@ snapshots: - utf-8-validate - zod + '@nillion/nilql@0.0.0-alpha.4': + dependencies: + libsodium-wrappers-sumo: 0.7.15 + paillier-bigint: 3.4.3 + '@noble/ciphers@1.0.0': {} '@noble/curves@1.2.0': @@ -31938,35 +31983,35 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@shikijs/core@1.26.1': + '@shikijs/core@1.26.2': dependencies: - '@shikijs/engine-javascript': 1.26.1 - '@shikijs/engine-oniguruma': 1.26.1 - '@shikijs/types': 1.26.1 + '@shikijs/engine-javascript': 1.26.2 + '@shikijs/engine-oniguruma': 1.26.2 + '@shikijs/types': 1.26.2 '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.26.1': + '@shikijs/engine-javascript@1.26.2': dependencies: - '@shikijs/types': 1.26.1 + '@shikijs/types': 1.26.2 '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 0.10.0 + oniguruma-to-es: 1.0.0 - '@shikijs/engine-oniguruma@1.26.1': + '@shikijs/engine-oniguruma@1.26.2': dependencies: - '@shikijs/types': 1.26.1 + '@shikijs/types': 1.26.2 '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/langs@1.26.1': + '@shikijs/langs@1.26.2': dependencies: - '@shikijs/types': 1.26.1 + '@shikijs/types': 1.26.2 - '@shikijs/themes@1.26.1': + '@shikijs/themes@1.26.2': dependencies: - '@shikijs/types': 1.26.1 + '@shikijs/types': 1.26.2 - '@shikijs/types@1.26.1': + '@shikijs/types@1.26.2': dependencies: '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 @@ -33375,16 +33420,16 @@ snapshots: '@tanstack/query-core@5.62.16': {} - '@tanstack/query-core@5.64.0': {} + '@tanstack/query-core@5.64.1': {} '@tanstack/react-query@5.62.16(react@19.0.0)': dependencies: '@tanstack/query-core': 5.62.16 react: 19.0.0 - '@tanstack/react-query@5.64.0(react@19.0.0)': + '@tanstack/react-query@5.64.1(react@19.0.0)': dependencies: - '@tanstack/query-core': 5.64.0 + '@tanstack/query-core': 5.64.1 react: 19.0.0 '@tavily/core@0.0.2': @@ -34155,14 +34200,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/type-utils': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/type-utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.20.0 eslint: 9.18.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 @@ -34224,12 +34269,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': + '@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.4.0(supports-color@5.5.0) eslint: 9.18.0(jiti@2.4.2) typescript: 5.6.3 @@ -34246,10 +34291,10 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - '@typescript-eslint/scope-manager@8.19.1': + '@typescript-eslint/scope-manager@8.20.0': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: @@ -34299,10 +34344,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) debug: 4.4.0(supports-color@5.5.0) eslint: 9.18.0(jiti@2.4.2) ts-api-utils: 2.0.0(typescript@5.6.3) @@ -34314,7 +34359,7 @@ snapshots: '@typescript-eslint/types@8.16.0': {} - '@typescript-eslint/types@8.19.1': {} + '@typescript-eslint/types@8.20.0': {} '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3)': dependencies: @@ -34346,10 +34391,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.19.1(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.20.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.4.0(supports-color@5.5.0) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -34412,24 +34457,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.19.1(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': + '@typescript-eslint/utils@8.20.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.6.3) eslint: 9.16.0(jiti@2.4.2) typescript: 5.6.3 transitivePeerDependencies: - supports-color optional: true - '@typescript-eslint/utils@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': + '@typescript-eslint/utils@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.6.3) eslint: 9.18.0(jiti@2.4.2) typescript: 5.6.3 transitivePeerDependencies: @@ -34445,9 +34490,9 @@ snapshots: '@typescript-eslint/types': 8.16.0 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.19.1': + '@typescript-eslint/visitor-keys@8.20.0': dependencies: - '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/types': 8.20.0 eslint-visitor-keys: 4.2.0 '@uidotdev/usehooks@2.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': @@ -34545,11 +34590,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.19.1(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.10.5)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0))': + '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.20.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.1.5(@types/node@22.10.5)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0))': dependencies: eslint: 9.16.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/utils': 8.19.1(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) typescript: 5.6.3 vitest: 2.1.5(@types/node@22.10.5)(jsdom@25.0.1(bufferutil@4.0.9)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.5))(terser@5.37.0) @@ -35635,28 +35680,26 @@ snapshots: - solid-js - vue - ai@4.0.33(react@19.0.0)(zod@3.23.8): + ai@4.0.34(react@19.0.0)(zod@3.23.8): dependencies: '@ai-sdk/provider': 1.0.4 '@ai-sdk/provider-utils': 2.0.7(zod@3.23.8) - '@ai-sdk/react': 1.0.9(react@19.0.0)(zod@3.23.8) - '@ai-sdk/ui-utils': 1.0.8(zod@3.23.8) + '@ai-sdk/react': 1.0.10(react@19.0.0)(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.9(zod@3.23.8) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 - zod-to-json-schema: 3.24.1(zod@3.23.8) optionalDependencies: react: 19.0.0 zod: 3.23.8 - ai@4.0.33(react@19.0.0)(zod@3.24.1): + ai@4.0.34(react@19.0.0)(zod@3.24.1): dependencies: '@ai-sdk/provider': 1.0.4 '@ai-sdk/provider-utils': 2.0.7(zod@3.24.1) - '@ai-sdk/react': 1.0.9(react@19.0.0)(zod@3.24.1) - '@ai-sdk/ui-utils': 1.0.8(zod@3.24.1) + '@ai-sdk/react': 1.0.10(react@19.0.0)(zod@3.24.1) + '@ai-sdk/ui-utils': 1.0.9(zod@3.24.1) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 - zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: react: 19.0.0 zod: 3.24.1 @@ -36338,14 +36381,19 @@ snapshots: balanced-match@1.0.2: {} + bare-buffer@3.0.1: + optional: true + bare-events@2.5.4: optional: true - bare-fs@2.3.5: + bare-fs@2.3.5(bare-buffer@3.0.1): dependencies: bare-events: 2.5.4 bare-path: 2.1.3 - bare-stream: 2.6.1 + bare-stream: 2.6.2(bare-buffer@3.0.1)(bare-events@2.5.4) + transitivePeerDependencies: + - bare-buffer optional: true bare-os@2.4.4: @@ -36356,8 +36404,10 @@ snapshots: bare-os: 2.4.4 optional: true - bare-stream@2.6.1: + bare-stream@2.6.2(bare-buffer@3.0.1)(bare-events@2.5.4): dependencies: + bare-buffer: 3.0.1 + bare-events: 2.5.4 streamx: 2.21.1 optional: true @@ -36418,6 +36468,8 @@ snapshots: dependencies: bindings: 1.5.0 + bigint-crypto-utils@3.3.0: {} + bignumber.js@9.1.2: {} bignumber@1.1.0: {} @@ -38011,17 +38063,17 @@ snapshots: cyrb53@1.0.0: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.4): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.0): dependencies: cose-base: 1.0.3 - cytoscape: 3.30.4 + cytoscape: 3.31.0 - cytoscape-fcose@2.2.0(cytoscape@3.30.4): + cytoscape-fcose@2.2.0(cytoscape@3.31.0): dependencies: cose-base: 2.2.0 - cytoscape: 3.30.4 + cytoscape: 3.31.0 - cytoscape@3.30.4: {} + cytoscape@3.31.0: {} d3-array@2.12.1: dependencies: @@ -39126,7 +39178,7 @@ snapshots: is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -39140,11 +39192,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) eslint: 9.18.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@2.4.2)) @@ -39180,7 +39232,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -39191,7 +39243,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.18.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -39203,7 +39255,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -39251,7 +39303,7 @@ snapshots: dependencies: eslint: 9.18.0(jiti@2.4.2) - eslint-plugin-react@7.37.3(eslint@9.18.0(jiti@2.4.2)): + eslint-plugin-react@7.37.4(eslint@9.18.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -39799,7 +39851,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -40888,7 +40940,7 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 @@ -40922,7 +40974,7 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 @@ -43494,7 +43546,7 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.3: + mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -43515,7 +43567,7 @@ snapshots: dependencies: mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: @@ -43655,9 +43707,9 @@ snapshots: '@iconify/utils': 2.2.1 '@mermaid-js/parser': 0.3.0 '@types/d3': 7.4.3 - cytoscape: 3.30.4 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.4) - cytoscape-fcose: 2.2.0(cytoscape@3.30.4) + cytoscape: 3.31.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.0) + cytoscape-fcose: 2.2.0(cytoscape@3.31.0) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 @@ -43668,7 +43720,7 @@ snapshots: lodash-es: 4.17.21 marked: 13.0.3 roughjs: 4.6.6 - stylis: 4.3.4 + stylis: 4.3.5 ts-dedent: 2.2.0 uuid: 9.0.1 transitivePeerDependencies: @@ -44898,7 +44950,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.10.0: + oniguruma-to-es@1.0.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -45252,6 +45304,10 @@ snapshots: - bluebird - supports-color + paillier-bigint@3.4.3: + dependencies: + bigint-crypto-utils: 3.3.0 + pako@0.2.9: {} pako@1.0.11: {} @@ -47778,7 +47834,7 @@ snapshots: shallowequal@1.1.0: {} - sharp@0.32.6: + sharp@0.32.6(bare-buffer@3.0.1): dependencies: color: 4.2.3 detect-libc: 2.0.3 @@ -47786,8 +47842,10 @@ snapshots: prebuild-install: 7.1.2 semver: 7.6.3 simple-get: 4.0.1 - tar-fs: 3.0.7 + tar-fs: 3.0.7(bare-buffer@3.0.1) tunnel-agent: 0.6.0 + transitivePeerDependencies: + - bare-buffer sharp@0.33.5: dependencies: @@ -47833,14 +47891,14 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki@1.26.1: + shiki@1.26.2: dependencies: - '@shikijs/core': 1.26.1 - '@shikijs/engine-javascript': 1.26.1 - '@shikijs/engine-oniguruma': 1.26.1 - '@shikijs/langs': 1.26.1 - '@shikijs/themes': 1.26.1 - '@shikijs/types': 1.26.1 + '@shikijs/core': 1.26.2 + '@shikijs/engine-javascript': 1.26.2 + '@shikijs/engine-oniguruma': 1.26.2 + '@shikijs/langs': 1.26.2 + '@shikijs/themes': 1.26.2 + '@shikijs/types': 1.26.2 '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 @@ -48047,7 +48105,7 @@ snapshots: '@sqds/multisig': 2.1.3(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@tensor-oss/tensorswap-sdk': 4.5.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10) '@tiplink/api': 0.3.1(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(sodium-native@3.4.1)(utf-8-validate@5.0.10) - ai: 4.0.33(react@19.0.0)(zod@3.24.1) + ai: 4.0.34(react@19.0.0)(zod@3.24.1) bn.js: 5.2.1 bs58: 6.0.0 chai: 5.1.2 @@ -48511,7 +48569,7 @@ snapshots: stylis@4.2.0: {} - stylis@4.3.4: {} + stylis@4.3.5: {} subarg@1.0.0: dependencies: @@ -48658,13 +48716,15 @@ snapshots: pump: 3.0.2 tar-stream: 2.2.0 - tar-fs@3.0.7: + tar-fs@3.0.7(bare-buffer@3.0.1): dependencies: pump: 3.0.2 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.5 + bare-fs: 2.3.5(bare-buffer@3.0.1) bare-path: 2.1.3 + transitivePeerDependencies: + - bare-buffer tar-stream@2.2.0: dependencies: @@ -49448,7 +49508,7 @@ snapshots: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.26.1 + shiki: 1.26.2 typescript: 5.6.3 yaml: 2.7.0 @@ -49457,7 +49517,7 @@ snapshots: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.26.1 + shiki: 1.26.2 typescript: 5.7.3 yaml: 2.7.0 @@ -49474,11 +49534,11 @@ snapshots: typescript-collections@1.3.3: {} - typescript-eslint@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3): + typescript-eslint@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) - '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) - '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) eslint: 9.18.0(jiti@2.4.2) typescript: 5.6.3 transitivePeerDependencies: