From a33134e10fcaf0392a6a2298f4dc358f96b6f05c Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Tue, 30 Jun 2026 12:50:46 +0200 Subject: [PATCH 01/15] feat: managed (Intelligence-hosted) mode via intelligenceAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add app/managed.ts — the same OpenTag bot driven by CopilotKit Intelligence: Intelligence receives the Slack event and delivers it over HTTP; the bot runs its normal handlers/agent and replies via Intelligence (no Slack tokens here). Uses the config-free intelligenceAdapter() from @copilotkit/bot-intelligence. - pin @copilotkit/* to the PR #5761 pkg.pr.new build at immutable commit 0641b63 - pnpm-workspace.yaml: blockExoticSubdeps:false (pkg.pr.new url cross-refs) + rxjs override (dedupe) + esbuild build allow - remove the Redis store demo entirely (bot-store-redis isn't published) - MANAGED.md + .env.example managed-mode section --- .env.example | 18 +- .npmrc | 7 + MANAGED.md | 59 + README.md | 3 +- app/demo-restart.tsx | 217 -- app/managed.ts | 115 + docker-compose.yml | 9 - package.json | 18 +- pnpm-lock.yaml | 4951 ++++++++++++++++++++++++++++++++++++++++++ pnpm-workspace.yaml | 10 + setup.md | 15 +- 11 files changed, 5166 insertions(+), 256 deletions(-) create mode 100644 MANAGED.md delete mode 100644 app/demo-restart.tsx create mode 100644 app/managed.ts delete mode 100644 docker-compose.yml create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml diff --git a/.env.example b/.env.example index c9541f1..02e0cd2 100644 --- a/.env.example +++ b/.env.example @@ -25,13 +25,17 @@ SLACK_APP_TOKEN=xapp-... # (no public URL or webhook setup needed). # TELEGRAM_BOT_TOKEN= -# ── Persistence (optional) ────────────────────────────────────────────── -# Optional Redis-backed durable store. Used by `pnpm demo:restart` (and any -# bot that passes `store: { adapter: createRedisStore({ url }) }`). Leave blank -# for the in-memory default. With it set, interactive actions (e.g. an approval -# card's button) survive a bot restart — see `app/demo-restart.tsx`. -# Start a local one with `docker compose up -d`. -# REDIS_URL=redis://localhost:6379 +# ── Managed mode (Intelligence-hosted bot — `pnpm managed`) ───────────── +# Only for `app/managed.ts`. Here Slack credentials live in Intelligence, NOT +# in this app: Intelligence receives the Slack event and delivers it to this +# process over HTTP. `intelligenceAdapter()` reads these from the environment. +# Base URL of the running Intelligence app-api. +# COPILOTKIT_INTELLIGENCE_URL=http://localhost:7050 +# Project runtime API key (cpk-…) minted in the Intelligence UI: project → API keys. +# COPILOTKIT_API_KEY=cpk-... +# Bot name — must match the bot created in the Intelligence UI. Lowercase +# letters/digits only (intersection of the SDK and Intelligence name rules). +# MANAGED_BOT_NAME=opentagbot # ── Agent backend (runtime.ts) ────────────────────────────────────────── # The AG-UI endpoint the bridge POSTs to. Default points at the local diff --git a/.npmrc b/.npmrc index ab3e21a..508d643 100644 --- a/.npmrc +++ b/.npmrc @@ -5,3 +5,10 @@ # correct at runtime. `legacy-peer-deps` lets `npm install` proceed past that # advisory peer mismatch — the same thing pnpm does by default in the monorepo. legacy-peer-deps=true + +# The @copilotkit/* packages are consumed from the PR #5761 pkg.pr.new build +# (see package.json), and those tarballs cross-reference each other via URL +# (exotic) dependencies. The global `block-exotic-subdeps` hardening rejects URL +# subdeps, so allow them here while on the pkg.pr.new pin. Remove once the bot +# packages publish to npm. Scoped to this project only. +block-exotic-subdeps=false diff --git a/MANAGED.md b/MANAGED.md new file mode 100644 index 0000000..9491cdb --- /dev/null +++ b/MANAGED.md @@ -0,0 +1,59 @@ +# Managed mode — OpenTag on CopilotKit Intelligence + +Run the same OpenTag bot, but with **CopilotKit Intelligence** as the managed +bridge: Intelligence receives the Slack event, persists it, and delivers it to +this process over HTTP; this process runs the bot's normal handlers/tools/agent +and emits a reply; Intelligence does the credentialed Slack send. **No Slack +tokens live in this app** in managed mode. + +The only OpenTag code is one entry — `app/managed.ts` — which attaches a single +config-free `intelligenceAdapter()`: + +```ts +const bot = createBot({ name, agent, tools, context, commands, + adapters: [intelligenceAdapter()] }); // env-driven HTTP transport to Intelligence +await bot.start(); +``` + +## Prerequisites + +1. A running **Intelligence app-api** with the hosted-bots routes (the + `codex/hosted-bots-infra-vertical-slice` branch), `FF_MANAGED_BOTS=true`. See + that repo's `local/README.md`. Default local base URL: `http://localhost:7050`. +2. In the Intelligence UI (`/o/:org/:project/bots`): + - **Create a bot** with name `opentagbot` (lowercase letters/digits — the + intersection of the SDK and Intelligence name rules). + - **Attach a Slack adapter** with a real Slack app's `botToken` + `signingSecret`. + - **Mint a runtime API key** (project → API keys); copy the `cpk-…` token once. +3. A **real Slack app** whose Event Subscriptions request URL points (via a + tunnel, e.g. `ngrok http 7050`) at + `https:///api/bots/adapters/slack/events`, subscribed to `app_mention` + (+ `message.im`), scopes `app_mentions:read` + `chat:write`. + +## Run + +```bash +# agent backend (unchanged — same as the direct path) +pnpm runtime # http://localhost:8200 + +# managed bot +COPILOTKIT_INTELLIGENCE_URL=http://localhost:7050 \ +COPILOTKIT_API_KEY=cpk-... \ +MANAGED_BOT_NAME=opentagbot \ +AGENT_URL=http://localhost:8200/api/copilotkit/agent/triage/run \ +pnpm managed +``` + +`pnpm managed` heartbeats Intelligence, polls for deliveries, runs the agent per +turn, and posts the reply back through Intelligence. @-mention the bot in a Slack +channel it's in; the reply comes back in-thread. + +## ⚠️ Temporary dependency pin + +`package.json` pins every `@copilotkit/*` package to the **PR #5761** pkg.pr.new +build, at an **immutable commit** (`…/@copilotkit/@0641b63`) so the resolved +build can't drift (the mutable `@5761` tag can be cached stale). pkg.pr.new does +not publish `@copilotkit/bot-store-redis`, so the Redis demo was removed on this +branch. `pnpm-workspace.yaml` sets `blockExoticSubdeps: false` because pkg.pr.new +packages cross-reference each other by URL. **Revert to published versions and +drop these workarounds once #5761 merges and releases.** diff --git a/README.md b/README.md index 7b0739c..e5f9386 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,6 @@ OpenTag is a thin layer on top of a handful of CopilotKit packages. The `pnpm in | Package | When you need it | | --- | --- | | [`@copilotkit/bot-discord`](https://github.com/CopilotKit/CopilotKit/tree/main/packages/bot-discord) · [`-telegram`](https://github.com/CopilotKit/CopilotKit/tree/main/packages/bot-telegram) · [`-whatsapp`](https://github.com/CopilotKit/CopilotKit/tree/main/packages/bot-whatsapp) | Running on a platform other than Slack — one adapter per platform. | -| [`@copilotkit/bot-store-redis`](https://github.com/CopilotKit/CopilotKit/tree/main/packages/bot-store-redis) | Durable thread persistence across restarts (defaults to in-memory without it). | **1. Create a Slack app.** At [api.slack.com/apps](https://api.slack.com/apps?new_app=1) → *From a manifest* → paste [`slack-app-manifest.yaml`](./slack-app-manifest.yaml). Install it, @@ -73,7 +72,7 @@ pnpm --filter slack-example dev # the bot > @OpenTag summarize this thread and file it as a bug -That's the whole loop. To wire up Linear, Notion, inline charts, Redis persistence, or to run +That's the whole loop. To wire up Linear, Notion, inline charts, or to run on Discord / Telegram / WhatsApp, see **[setup.md](./setup.md)**. We won't lie to you, though. Setting up hosting for chat agents is not easy. To skip all of that heartache, go [join the waitlist](https://go.copilotkit.ai/opentag-managed-gh) for the CopilotKit managed service as part of our Intelligence platform, both cloud-hosted or self-hosted. diff --git a/app/demo-restart.tsx b/app/demo-restart.tsx deleted file mode 100644 index 0c66845..0000000 --- a/app/demo-restart.tsx +++ /dev/null @@ -1,217 +0,0 @@ -/** - * Durable-action restart demo — proves an interactive action survives a bot - * restart. Minimal (Slack only, NO agent backend): on @mention it posts an - * approval card whose **Create button's onClick does the work directly** - * (self-contained — no agent run, no awaitChoice). Because the action snapshot - * is persisted in the configured `store` and the component is registered at - * startup via `components`, the click re-fires after a process restart. - * - * Redis is OPTIONAL: - * • No `REDIS_URL` -> in-memory store (default). Runs out of the box, but a - * click that lands after a restart degrades to "action expired". - * • With `REDIS_URL` -> Redis-backed store. Kill + restart the bot between - * posting and clicking, and the action still fires (durable). - * - * Linear is OPTIONAL: with `LINEAR_API_KEY` the Create button files a real - * Linear issue; without it, it just resolves the card (so the demo runs with - * only Slack tokens). - * - * Run: - * pnpm demo:restart # in-memory, no Redis needed - * docker compose up -d && REDIS_URL=redis://localhost:6379 pnpm demo:restart - */ -import "dotenv/config"; -import { createBot } from "@copilotkit/bot"; -import type { StoreConfig } from "@copilotkit/bot"; -import { slack } from "@copilotkit/bot-slack"; -import { createRedisStore } from "@copilotkit/bot-store-redis"; -import { - Message, - Header, - Section, - Context, - Actions, - Button, -} from "@copilotkit/bot-ui"; -import type { InteractionContext } from "@copilotkit/bot-ui"; - -function required(name: string): string { - const v = process.env[name]; - if (!v) { - console.error(`Missing required env var: ${name}`); - process.exit(1); - } - return v; -} - -const LINEAR_API_KEY = process.env.LINEAR_API_KEY; -const REDIS_URL = process.env.REDIS_URL; - -// --- Optional Linear write (direct GraphQL; no agent / MCP) ------------------ -async function linearGraphQL(query: string, variables: object): Promise { - const res = await fetch("https://api.linear.app/graphql", { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: LINEAR_API_KEY as string, - }, - body: JSON.stringify({ query, variables }), - }); - const json = (await res.json()) as { data?: T; errors?: unknown }; - if (!res.ok || json.errors) { - throw new Error( - `Linear API error: ${JSON.stringify(json.errors ?? res.status)}`, - ); - } - return json.data as T; -} - -async function createLinearIssue( - title: string, -): Promise<{ identifier: string; url: string }> { - const teamKey = required("LINEAR_TEAM_KEY"); - const teams = await linearGraphQL<{ teams: { nodes: { id: string }[] } }>( - `query($key: String!) { teams(filter: { key: { eq: $key } }) { nodes { id } } }`, - { key: teamKey }, - ); - const teamId = teams.teams.nodes[0]?.id; - if (!teamId) throw new Error(`No Linear team with key ${teamKey}`); - const created = await linearGraphQL<{ - issueCreate: { - success: boolean; - issue: { identifier: string; url: string }; - }; - }>( - `mutation($teamId: String!, $title: String!) { - issueCreate(input: { teamId: $teamId, title: $title }) { - success issue { identifier url } - } - }`, - { teamId, title }, - ); - if (!created.issueCreate.success) - throw new Error("Linear issueCreate failed"); - return created.issueCreate.issue; -} - -// --- The durable HITL card (self-contained onClick does the write) ----------- -interface ConfirmCreateIssueProps { - title: string; -} - -export function ConfirmCreateIssue({ title }: ConfirmCreateIssueProps) { - return ( - -
{`📝 Create Linear issue?`}
-
{`**${title}**`}
- - {REDIS_URL - ? "🔒 Nothing is written until you click **Create**. Kill + restart the bot first to prove durability." - : "🔒 Nothing is written until you click **Create**. (Set REDIS_URL for restart-durable actions.)"} - - - - - -
- ); -} - -async function main() { - // Redis is optional: configure a durable backend only when REDIS_URL is set; - // otherwise omit `adapter` and the bot uses the in-memory default. - const store: StoreConfig | undefined = REDIS_URL - ? { adapter: createRedisStore({ url: REDIS_URL }) } - : undefined; - - const bot = createBot({ - adapters: [ - slack({ - botToken: required("SLACK_BOT_TOKEN"), - appToken: required("SLACK_APP_TOKEN"), - }), - ], - store, - // Registered at startup so a click landing AFTER a restart can re-render - // this component from the persisted snapshot and re-fire its onClick. - components: [ConfirmCreateIssue], - }); - - bot.onMention(async ({ thread, message }) => { - const title = message.text.trim().slice(0, 120) || "Untitled (demo)"; - await thread.post(); - }); - - await bot.start(); - console.log( - `[demo] up (pid ${process.pid}) — store: ${REDIS_URL ? "redis (durable)" : "in-memory"}, ` + - `write: ${LINEAR_API_KEY ? "linear" : "demo (no LINEAR_API_KEY)"}. @mention the bot.`, - ); - - const stop = async () => { - await bot.stop(); - process.exit(0); - }; - process.on("SIGINT", () => void stop()); - process.on("SIGTERM", () => void stop()); -} - -main().catch((err) => { - console.error("[demo] fatal", err); - process.exit(1); -}); diff --git a/app/managed.ts b/app/managed.ts new file mode 100644 index 0000000..c82a4d0 --- /dev/null +++ b/app/managed.ts @@ -0,0 +1,115 @@ +/** + * Managed (Intelligence-hosted) entrypoint — the same OpenTag bot, but its + * ingress/egress are managed by CopilotKit Intelligence instead of a direct + * platform connection. + * + * Where `app/index.ts` connects straight to Slack/Discord/… via Socket Mode and + * owns the platform credentials, this entry attaches a single + * `intelligenceAdapter()`: Intelligence receives the Slack event, persists it, + * and delivers it to this long-running process over HTTP; this process runs the + * *same* handlers/tools/agent and emits a reply, and Intelligence does the + * credentialed Slack send. No Slack tokens live here. + * + * `intelligenceAdapter()` is config-free — it builds its HTTP transport to + * Intelligence from the environment: + * COPILOTKIT_INTELLIGENCE_URL e.g. http://localhost:7050 + * COPILOTKIT_API_KEY project runtime API key (cpk-…), minted in the + * Intelligence UI (project → API keys) + * and the bot name from `createBot({ name })` below. + * + * The agent backend is unchanged: this still POSTs each turn to `runtime.ts` + * (AGENT_URL), exactly like the direct path. + */ +import "dotenv/config"; +import { createBot } from "@copilotkit/bot"; +import { intelligenceAdapter } from "@copilotkit/bot-intelligence"; +import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/bot-slack"; +import { appTools } from "./tools/index.js"; +import { appContext } from "./context/app-context.js"; +import { appCommands } from "./commands/index.js"; +import { senderContext } from "./sender-context.js"; +import { closeBrowser } from "./render/browser.js"; + +const required = (name: string): string => { + const v = process.env[name]; + if (!v) { + console.error(`Missing required env var: ${name}`); + process.exit(1); + } + return v; +}; + +async function main() { + const agentUrl = required("AGENT_URL"); + const agentHeaders = process.env.AGENT_AUTH_HEADER + ? { Authorization: process.env.AGENT_AUTH_HEADER } + : undefined; + + // Project-unique bot name. Must satisfy BOTH the SDK (`^[A-Za-z][A-Za-z0-9_]*$`) + // and Intelligence (`^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`) — the intersection is + // lowercase letters/digits — and must match the bot created in the + // Intelligence UI. + const botName = process.env.MANAGED_BOT_NAME ?? "opentagbot"; + + const bot = createBot({ + name: botName, + // Same BuiltInAgent backend as the direct path (runtime.ts on AGENT_URL). + agent: (threadId) => { + const a = new SanitizingHttpAgent({ url: agentUrl, headers: agentHeaders }); + a.threadId = threadId; + return a; + }, + tools: [...appTools], + // App identity/policy + Slack output-formatting guidance (replies are + // rendered for Slack by Intelligence). No Slack *tools* here: user lookup + // needs a live Slack connection, which the managed path doesn't own. + context: [...appContext, ...defaultSlackContext], + commands: appCommands, + // The only adapter (managed adapters are exclusive). Config-free: the HTTP + // transport to Intelligence is resolved from env + this bot's name. + adapters: [intelligenceAdapter()], + }); + + // Intelligence only delivers turns this bot should answer (the Slack app's + // subscribed app_mention / DM events), so every delivered turn runs the + // agent. `onMessage` fires for each delivered turn. + bot.onMessage(async ({ thread, message }) => { + try { + await thread.runAgent({ + context: senderContext(message.user, thread.platform), + }); + } catch (err) { + console.error("[managed] agent run failed", err); + await thread + .post("Sorry — I hit an error handling that. Please try again.") + .catch(() => {}); + } + }); + + await bot.start(); + console.log( + `[managed] bot "${botName}" listening for Intelligence-delivered events ` + + `(intelligence=${process.env.COPILOTKIT_INTELLIGENCE_URL ?? ""})`, + ); + + const shutdown = async (signal: string) => { + console.log(`\n[managed] received ${signal}, stopping…`); + await bot.stop(); + await closeBrowser(); + process.exit(0); + }; + process.on("SIGINT", () => void shutdown("SIGINT")); + process.on("SIGTERM", () => void shutdown("SIGTERM")); +} + +process.on("unhandledRejection", (reason) => { + console.error("[managed] unhandledRejection:", reason); +}); +process.on("uncaughtException", (err) => { + console.error("[managed] uncaughtException:", err); +}); + +main().catch((err) => { + console.error("[managed] fatal", err); + process.exit(1); +}); diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index b3444c1..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -# UNCOMMITTED demo helper — local Redis for the durable-action restart test. -# docker compose up -d # start Redis on localhost:6379 -# docker compose down # stop it -services: - redis: - image: redis:7-alpine - container_name: slack-demo-redis - ports: - - "6379:6379" diff --git a/package.json b/package.json index 8331229..76c5066 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "scripts": { "dev": "tsx watch app/index.ts", "start": "tsx app/index.ts", - "demo:restart": "tsx app/demo-restart.tsx", "runtime": "tsx runtime.ts", + "managed": "tsx app/managed.ts", "notion-mcp": "tsx scripts/start-notion-mcp.ts", "check-types": "tsc --noEmit -p tsconfig.json", "test": "vitest run", @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/bot": "^0.1.0", - "@copilotkit/bot-discord": "^0.1.0", - "@copilotkit/bot-slack": "^0.1.0", - "@copilotkit/bot-store-redis": "^0.1.0", - "@copilotkit/bot-telegram": "^0.1.0", - "@copilotkit/bot-ui": "^0.1.0", - "@copilotkit/bot-whatsapp": "^0.1.0", - "@copilotkit/runtime": "^1.61.2", + "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63", + "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63", + "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63", + "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63", + "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63", + "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63", + "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63", + "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..654bafb --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4951 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + rxjs: 7.8.2 + +importers: + + .: + dependencies: + '@copilotkit/bot': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63(zod@3.25.76) + '@copilotkit/bot-discord': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63(@ag-ui/core@0.0.57) + '@copilotkit/bot-intelligence': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/bot-slack': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63(@types/express@5.0.6) + '@copilotkit/bot-telegram': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63(@ag-ui/core@0.0.57) + '@copilotkit/bot-whatsapp': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/runtime': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) + '@slack/bolt': + specifier: ^4.2.0 + version: 4.7.3(@types/express@5.0.6) + '@slack/types': + specifier: ^2.21.1 + version: 2.21.1 + '@tanstack/ai': + specifier: ^0.32.0 + version: 0.32.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-mcp': + specifier: ^0.1.3 + version: 0.1.10(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.1)(zod@3.25.76) + '@tanstack/ai-openai': + specifier: ^0.15.2 + version: 0.15.9(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1))(ws@8.21.0)(zod@3.25.76) + playwright: + specifier: ^1.49.0 + version: 1.61.1 + zod: + specifier: ^3.25.76 + version: 3.25.76 + devDependencies: + '@notionhq/notion-mcp-server': + specifier: ^2.2.1 + version: 2.4.1(@cfworker/json-schema@4.1.1)(js-yaml@4.3.0) + '@types/node': + specifier: ^22.10.0 + version: 22.20.0 + dotenv: + specifier: ^16.4.5 + version: 16.6.1 + tsx: + specifier: ^4.19.2 + version: 4.22.4 + typescript: + specifier: ^5.6.3 + version: 5.9.3 + vitest: + specifier: ^4.1.3 + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) + +packages: + + '@ag-ui/a2ui-middleware@0.0.10': + resolution: {integrity: sha512-2BQFUQ9vJzUAQSR0dNW/ijhyH8KpiRWISSLTP6mIe6ENyQ2cM1/XLG38/Dcb69olcs36gtZADZzAQWcno5H6fA==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.2 + + '@ag-ui/a2ui-toolkit@0.0.4': + resolution: {integrity: sha512-9VPmgpCAsFVICk7z23kh+Kp/BwYMxw0D0KGjOiKXhm1MAH+Wid2iC3yKsXso+q7UZZiyhWgeDUSgaAkltyLmGg==} + + '@ag-ui/client@0.0.54': + resolution: {integrity: sha512-N5UVXEBV5gPHqTuMoR/21brconRn42URf+MB4L8OniCJKqLcl/qUJb5kMamK0nnfBhDfPs/uq7LxDn6bsDJzJg==} + + '@ag-ui/client@0.0.57': + resolution: {integrity: sha512-Xap2alG9Z0/j5kb3x4D7oTpe2sw1dfrC9rgJJr2NZu5vKcm8dzIPNd31mF2B4zS3BKqYIu245yxKPhEtT30MHw==} + + '@ag-ui/core@0.0.52': + resolution: {integrity: sha512-Xo0bUaNV56EqylzcrAuhUkQX7et7+SZIrqZZtEByGwEq/I1EHny6ZMkWHLkKR7UNi0FJZwJyhKYmKJS3B2SEgA==} + + '@ag-ui/core@0.0.54': + resolution: {integrity: sha512-Ilx31OvRQaZfU7jSArGqz06JZKOsAt8zWiCPJljyp9zR6Tzl18oyfx8o6FsuGfAktGRe50GI9SCCxNXXysZwtA==} + + '@ag-ui/core@0.0.57': + resolution: {integrity: sha512-gho1OWjNE6E3Rl7ZEZ1wr2CEpUHjLFU0FqzCZZk439TicLu+BfLCMkMokB07bMGlRmbJ60hM6LW60iOVauCx+Q==} + + '@ag-ui/encoder@0.0.54': + resolution: {integrity: sha512-0dPuE/eAeBRBDj/OOj5AW8SoP1r0dufmoOdrtKgmf+dlbVXKSNkDDHGrrvIWFPxwvPTWhHeN6wnsVUayWpUsGg==} + + '@ag-ui/encoder@0.0.57': + resolution: {integrity: sha512-ifD9NctR4xyPDR58xF9GK1bj/S8oECFkTeDfuYD8tXdbcOstIJ2TOqU2zhiCKnw7Vw+zR9Qv3TbsM9E7Gi9X3Q==} + + '@ag-ui/langgraph@0.0.42': + resolution: {integrity: sha512-dXasEbGQFJcasdoy5khYyDHZHYoD1/i7hioaP8cejfw+Dss4tLvN8ndzD6c5j0hmANaKscekl+zkF7UQq3sI9w==} + peerDependencies: + '@ag-ui/client': '>=0.0.42' + '@ag-ui/core': '>=0.0.42' + + '@ag-ui/mcp-apps-middleware@0.0.3': + resolution: {integrity: sha512-Z+NZQXj4J+Y/2PLNsiyhNzRWFtTT2sAoC5dztoAlIsdfzvLvYEa52YGdHesNTN85JJqaIrYxQ8e31IBpKjrnoA==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + + '@ag-ui/mcp-middleware@0.0.1': + resolution: {integrity: sha512-TayUu7kB+jXUTPRUJesNvJYrP+0weTL9F2VJJ8QQ4sWxY/Ihjo+GgFYgJZYNcLwbo1DKgmVJtdm2XUouPCbxeg==} + peerDependencies: + rxjs: 7.8.2 + + '@ag-ui/proto@0.0.54': + resolution: {integrity: sha512-IPF+xeFaBAKKP2FO74MaVTkKUP8VaGGkbPzORCvC5TLDdGs+oQgQFqz+XoBeksQGE14+jgLWiAr9EPXdhqr1NA==} + + '@ag-ui/proto@0.0.57': + resolution: {integrity: sha512-pPENOZt0P6ibH8sCTgq05wLYXi5t3P9B5r/1bWYehXjUxtyOdnukSlWM++SsCIwUXsQdm/b3aBgGjEeTF7RenA==} + + '@ai-sdk/anthropic@2.0.83': + resolution: {integrity: sha512-R0uwSr9TFuW/lnSE/k9kp/S9U8POXl1/S0IlKgxmAF65P8Jzlr5NwyJER9mlqca0gXbHvx14weob+2zWZfsgrg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/anthropic@3.0.89': + resolution: {integrity: sha512-Vbnyq8YO36XUKwcrZRS9T9GAJ0obPGTCX0AYFHfToD/4YdkYXxIYxb4BNjNwW0QPuPEs/1leBM4fnHpTOn5wKA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/gateway@3.0.139': + resolution: {integrity: sha512-RFpxyh5j9g7ZMfKxhiwCcF7bGU872o3JvoiIqZbHOM4qkR4RCzeKJF+k+zHomcJYGeUabEbeMXTKNASzz4Toxw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google-vertex@3.0.143': + resolution: {integrity: sha512-8DfBiekpzM7R2HyDj0H1tVs92Hr9eRw2KzbysEJ5wuBH0rf+D0/EQZ3DFenDeSiCu+mK46o/qHOfvIcsQpSAbw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@2.0.76': + resolution: {integrity: sha512-ntIkqmCX6GCiyVhry6o9prYhIYu+16S/nxO8fgS53xg8qeNJJlpmrfaFmPbdZhxcuryPvrBP8RPRHjW9aOolBA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@3.0.86': + resolution: {integrity: sha512-NZoFXTdK2/C7VuuGhAatoQ/wSiIvxVzw4Xr0AvcD3cotS5+iP/y0eN1J12pvFSZv+nAHa2Xl7xvFHDadzeU90g==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/mcp@1.0.55': + resolution: {integrity: sha512-G2QSVjEP1Q9kclhdlfw5m/tV5YH0h+b45n2ANx5GGpCTeA1D0enp68773EWJMflGREhybsUXNmkaC+vLbLEzKg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai-compatible@1.0.41': + resolution: {integrity: sha512-J5+5vTcAc6FU9L+6doxvgd5p+LdNXCv+Iro8u+LFGzuTsuL2Q2i5SCI/gZ1g2zgUK8mXWVxK7p09zIy3cubv/Q==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@3.0.77': + resolution: {integrity: sha512-DK0sGy/9j6KhgSrdhSKplTo3qf5frzGjLNYo9DVloH37L6DT42AxR/26UVCCoTEjR+WdsA9svm+5cT3Aye9NTg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@3.0.27': + resolution: {integrity: sha512-JFhJK5ynprll2FR3e+sHagJJIwvIagsNA0FLbLPq2Os4yLUK2/eiaCU0jXsADik73/hhvcPPLmD+Uo8eu5kFaQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@4.0.33': + resolution: {integrity: sha512-nJ0bAfegMAIJtrzMJtbzer1cS3nb7c7DsyU1S4nrPm7ZU0Mn6SBBZv5IGZZGTbpWTJwqKTSPeZJTXalbAxt1BA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider@2.0.3': + resolution: {integrity: sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww==} + engines: {node: '>=18'} + + '@ai-sdk/provider@3.0.12': + resolution: {integrity: sha512-sj9DWTJ2Ze0WR9qsiOPqoqzNx3OxL6iMxHImbhvoe9qOspekbzxNDMiJ4TIGfYHYh9w4OmBjz3prvqhzTi96+Q==} + engines: {node: '>=18'} + + '@bufbuild/protobuf@2.12.1': + resolution: {integrity: sha512-BvAMfS6LrgZiryOAZ4pBYucu4wG/Ei/9o9DZ9akbREnMLbPJiom2i8b9C8IsKErQoiKqVhrerzt3kOT/RrzLHg==} + + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63': + resolution: {integrity: sha512-ebTXKrISvSZ0SOPUxGa9re5KW7W31c+e9AyYAngFQ/Cw8oJThrF6ejJAqPhm5SnxZbInxtmtvt79EyXevLGJxg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63} + version: 0.0.2 + + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63': + resolution: {integrity: sha512-FfciPw7L0F6Q/vY9GfhC4BTjq/HgtjBA2YSTvZoU/zdigj/2IrIydnvKTrYvKta3dtv7r7ET7ig5Lpzxe8pu0g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63} + version: 0.1.0 + + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63': + resolution: {integrity: sha512-Ezvu/0gHzIGRDc+aLMRNtNtPrxXcEM/BNDzBOhGB+cPEorLvdFW34yLt0J4Y8TcKP6C0z4BU94AuYalCtAqjaQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63} + version: 0.1.0 + + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63': + resolution: {integrity: sha512-cD7vBEqB0q/l6QZo9qjOWR9c+6TO3vWDLAkBaanyd801FGfYBPSVR+bOKAFY92LWcbiNKfWJzKfjatO7Pa37qQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63} + version: 0.0.3 + + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63': + resolution: {integrity: sha512-Hw2L8iMoU033pBZq7Spt+0kj6eyoRgLoxAPb3Jp46l0p+O9hu1rM3s+SyPmHlQ3iqR/hhkdB0dAYA+6nyx6Usg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63} + version: 0.1.0 + + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': + resolution: {integrity: sha512-Hw2L8iMoU033pBZq7Spt+0kj6eyoRgLoxAPb3Jp46l0p+O9hu1rM3s+SyPmHlQ3iqR/hhkdB0dAYA+6nyx6Usg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + version: 0.1.0 + + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63': + resolution: {integrity: sha512-9EKuaadUgJwcCCqH+kmi0kRuqE2WEj2eiolmgZQZsaJhmb0IiXeTDpViiuIS7zNmqFkStpVSDACmsR+X+hWkUA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63} + version: 0.0.1 + + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63': + resolution: {integrity: sha512-z8eEw44DuFxMHABfzGE6ZzunY7uTaIG/fESj913Ukd6pk8KQXmGl+FesUp9OIKnTVzBtMKs+vh7mUHushup2jQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63} + version: 0.1.0 + + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': + resolution: {integrity: sha512-z8eEw44DuFxMHABfzGE6ZzunY7uTaIG/fESj913Ukd6pk8KQXmGl+FesUp9OIKnTVzBtMKs+vh7mUHushup2jQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + version: 0.1.0 + + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': + resolution: {integrity: sha512-5MqFjtipPt9RBqzCswrpBVQa3RmWmeTCANg7PFhZw1htajYkec3TJcsn59BUAx4wXoGz1FMfzVfI+odvtAwe+Q==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + version: 1.61.2 + engines: {node: '>=18'} + + '@copilotkit/license-verifier@0.5.0': + resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} + + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63': + resolution: {integrity: sha512-02ZvcBvknzplzbM+gQcxe5a8Sg9xCRUjPi90YJiMJ4kmc1m8bYuu8yoCu/ClY4HXjMEomLZYorDJtzfoyA08mQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63} + version: 1.61.2 + peerDependencies: + '@anthropic-ai/sdk': ^0.57.0 + '@langchain/aws': '>=0.1.9' + '@langchain/community': '>=0.3.58' + '@langchain/core': '>=0.3.66' + '@langchain/google-gauth': '>=0.1.0' + '@langchain/langgraph-sdk': '>=0.1.2' + '@langchain/openai': '>=0.4.2' + groq-sdk: '>=0.3.0 <1.0.0' + langchain: '>=0.3.3' + openai: ^4.85.1 || >=5.0.0 + peerDependenciesMeta: + '@anthropic-ai/sdk': + optional: true + '@langchain/aws': + optional: true + '@langchain/community': + optional: true + '@langchain/google-gauth': + optional: true + '@langchain/langgraph-sdk': + optional: true + '@langchain/openai': + optional: true + groq-sdk: + optional: true + langchain: + optional: true + openai: + optional: true + + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': + resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + version: 1.61.2 + peerDependencies: + '@ag-ui/core': '>=0.0.48' + + '@discordjs/builders@1.14.1': + resolution: {integrity: sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==} + engines: {node: '>=16.11.0'} + + '@discordjs/collection@1.5.3': + resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} + engines: {node: '>=16.11.0'} + + '@discordjs/collection@2.1.1': + resolution: {integrity: sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==} + engines: {node: '>=18'} + + '@discordjs/formatters@0.6.2': + resolution: {integrity: sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==} + engines: {node: '>=16.11.0'} + + '@discordjs/rest@2.6.1': + resolution: {integrity: sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg==} + engines: {node: '>=18'} + + '@discordjs/util@1.2.0': + resolution: {integrity: sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==} + engines: {node: '>=18'} + + '@discordjs/ws@1.2.3': + resolution: {integrity: sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==} + engines: {node: '>=16.11.0'} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@envelop/core@5.5.1': + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==} + engines: {node: '>=18.0.0'} + + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} + + '@envelop/types@5.2.1': + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} + engines: {node: '>=18.0.0'} + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + + '@grammyjs/types@3.28.0': + resolution: {integrity: sha512-4JvXCdxRZHCje0M4gHzLwtB4bLno3WD28xd8CNfk4POWIu73BFnSvGeW6OQ5gPem4eYTEwkD9yDaXssixl6tMQ==} + + '@graphql-tools/executor@1.5.4': + resolution: {integrity: sha512-6CdAENBTtVIXmOoJWJvYNFpE0b8zzwAMZ+VGkyLY2QT5dRGCjZTnGpDIFtxQa8IvRjnPpY3iUptgPlqTLOw3VA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.1.10': + resolution: {integrity: sha512-CsUCcPXv/HMWpPZ/xoOioSWFuAaAsGGPIdqQbjDv9X1sHGs0muQRW5FK7vUBN4OH/D7aPqpiHvKmRsrHz+ScuQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.34': + resolution: {integrity: sha512-wGCiUuwqDtlXtDvQ00CI+4u0pd3yd/xGGYOiwc9L63KJZwSXdrUv8ajpJ5lMalawc0mpjcCB0ljEQSeUhajuag==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@10.11.0': + resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@11.1.1': + resolution: {integrity: sha512-MuWwacINZZV6mX1ZSk6CcV4XVQLsbKBG/hLd0QPhe4GHxjqr2ATjKsnnwlB0TKI+QQvj2U8ewu8WeAzz9kC2Xg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-yoga/logger@2.0.1': + resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==} + engines: {node: '>=18.0.0'} + + '@graphql-yoga/plugin-defer-stream@3.21.2': + resolution: {integrity: sha512-B+hwCIPsZHPxH3zsRhBFlMAAuuBMR7SrGVPvGt0ftn3iG2HB1zyOeUIm6ylwVF7G2sN0bw8Z7ZXPdnmI1tgq3A==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + graphql-yoga: ^5.21.2 + + '@graphql-yoga/subscription@5.0.5': + resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==} + engines: {node: '>=18.0.0'} + + '@graphql-yoga/typed-event-target@3.0.2': + resolution: {integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==} + engines: {node: '>=18.0.0'} + + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@langchain/core@1.2.1': + resolution: {integrity: sha512-NNG/cC5FGuHDOAP56h0ddp8Rfk8p+othWzEK5RV9JIG6RvnF5vGa5r0AEGtKfQieed7s1kC42GuIzVOBvMBL/g==} + engines: {node: '>=20'} + + '@langchain/langgraph-checkpoint@1.1.3': + resolution: {integrity: sha512-wgzdQNeEsdw1e+4lvlj0tdq/RYR/k1vPin10g0ymGoehZDDgd9nvIllGXSXN4TFgF9sf5qQP/KTkOcLfeseIhA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.1.48 + + '@langchain/langgraph-sdk@1.9.25': + resolution: {integrity: sha512-mRKW8zyQUaHox+HirRFMRrPqOvNbQI3xeXDt6kkk4PbBg77V92bsO1WzUVNrmJ81zCkvxyOrWSK8D6ioCj0a8A==} + peerDependencies: + '@langchain/core': ^1.1.48 + react: ^18 || ^19 + react-dom: ^18 || ^19 + svelte: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + vue: + optional: true + + '@langchain/langgraph@1.4.7': + resolution: {integrity: sha512-2tcyf3QGC7v89kqSxMCtRvzg/3L/4yHtOaWC49A8KieCciWJs7LGaxHoPB6QRxXyUgyR+Zg9Q1ss/XJIE+JuSQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.1.48 + zod: ^3.25.32 || ^4.2.0 + + '@langchain/protocol@0.0.18': + resolution: {integrity: sha512-XW1egQtPfsGI41w2AMZNFZrUIwFSQHTjVMZs0OaTpCAvht/QLoaPN8FQcsysMVypOhupG28J29yOorrc70otBQ==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/uuid@2.0.1': + resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} + engines: {node: '>=8'} + + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@notionhq/notion-mcp-server@2.4.1': + resolution: {integrity: sha512-D/LixSjTgWi3LrE386yFp+/JHQg768stP5AnWR7SY7p9anDi1NR8Wl6RA4bIKVfLf1kReBVKMbPaDKpM4rm89A==} + hasBin: true + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@oxc-project/types@0.137.0': + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@protobuf-ts/protoc@2.11.1': + resolution: {integrity: sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==} + hasBin: true + + '@remix-run/node-fetch-server@0.13.3': + resolution: {integrity: sha512-UfjOXed/DQteaM5VyTfqTeGpHwyL2J5aoRGY6cydip4tt1ehNNeSwuXCC7AEGE0RWBs/7bgKxYkL/B/+UDe4AA==} + + '@repeaterjs/repeater@3.1.0': + resolution: {integrity: sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==} + + '@rolldown/binding-android-arm64@1.1.3': + resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.3': + resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.3': + resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.3': + resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.3': + resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.3': + resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.3': + resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.3': + resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.3': + resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.3': + resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.3': + resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.3': + resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.3': + resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.3': + resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.3': + resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@sapphire/async-queue@1.5.5': + resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@sapphire/shapeshift@4.0.0': + resolution: {integrity: sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==} + engines: {node: '>=v16'} + + '@sapphire/snowflake@3.5.3': + resolution: {integrity: sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@sapphire/snowflake@3.5.5': + resolution: {integrity: sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@segment/analytics-core@1.8.2': + resolution: {integrity: sha512-5FDy6l8chpzUfJcNlIcyqYQq4+JTUynlVoCeCUuVz+l+6W0PXg+ljKp34R4yLVCcY5VVZohuW+HH0VLWdwYVAg==} + + '@segment/analytics-generic-utils@1.2.0': + resolution: {integrity: sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==} + + '@segment/analytics-node@2.3.0': + resolution: {integrity: sha512-fOXLL8uY0uAWw/sTLmezze80hj8YGgXXlAfvSS6TUmivk4D/SP0C0sxnbpFdkUzWg2zT64qWIZj26afEtSnxUA==} + engines: {node: '>=20'} + + '@slack/bolt@4.7.3': + resolution: {integrity: sha512-bODs8q/yNDWUPoxmQhFrRqLMA5vhB/PDizYWqb6CkQhLWEUo5JFtfJcmeU4ElGl6qSt++OKjSYNa4MPc77CleQ==} + engines: {node: '>=18', npm: '>=8.6.0'} + peerDependencies: + '@types/express': ^5.0.0 + + '@slack/logger@4.0.1': + resolution: {integrity: sha512-6cmdPrV/RYfd2U0mDGiMK8S7OJqpCTm7enMLRR3edccsPX8j7zXTLnaEF4fhxxJJTAIOil6+qZrnUPTuaLvwrQ==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/oauth@3.0.5': + resolution: {integrity: sha512-exqFQySKhNDptWYSWhvRUJ4/+ndu2gayIy7vg/JfmJq3wGtGdHk531P96fAZyBm5c1Le3yaPYqv92rL4COlU3A==} + engines: {node: '>=18', npm: '>=8.6.0'} + + '@slack/socket-mode@2.0.7': + resolution: {integrity: sha512-qYy07je71WnEHgRwmw12DlAnZLi5HXmdlI2WUzUK2LH/rYXQpP6uEg462S5CwfE8FoCKUdIigHtYnOOfzZH1lQ==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/types@2.21.1': + resolution: {integrity: sha512-I8vmSjNYWsaxuWPx6dz4yeh0h7vRBWbgAMK14LEmblbZ404BtrPbXs6jDPx4cYgGf8msDGF4A9opLZBu21FViQ==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + + '@slack/web-api@7.17.0': + resolution: {integrity: sha512-jejr34a8B4L5AS713wOAx1LAqNkW16HVMDEa6sYBvFDc/llUBl8hXaiI4BwF+Al+Sug19Vn2O7iokTVIhVvZ1Q==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@tanstack/ai-event-client@0.6.3': + resolution: {integrity: sha512-aQb+v9a4T+uDS3VuDGKOdhwPvr2iwjHVweroXHwbasmvClFqV6WJhoekv74VJrhJrlwz8wVMEPcwlKHxnSAzLQ==} + peerDependencies: + '@tanstack/ai': 0.32.0 + + '@tanstack/ai-event-client@0.6.8': + resolution: {integrity: sha512-h7/HLz9u2LF9ba6uKFMnSZkFlkzQONJ5u3Hi+4qGxpsHyvcGRtW6v186jaFLoklndhEwyC49ytkC4eafi7Qq8w==} + + '@tanstack/ai-mcp@0.1.10': + resolution: {integrity: sha512-J6PDw9KOpc5C6/L5IYq4SBnzhTUqjfSHcyOuE+ESVbhTeEctnKTH2IT50JZ46sVinmGUSgQ67j2YuItLZoJRWw==} + hasBin: true + + '@tanstack/ai-openai@0.15.9': + resolution: {integrity: sha512-oY7lREtyzjfnTxfLK5jS5Ij0QbU0bn6Iu9mnYO/yRcwghUwJqGaSaoHh4sMrtpbTIg8m+9GOzG7pbDXn5dZJ2w==} + peerDependencies: + '@tanstack/ai': ^0.38.0 + zod: ^4.0.0 + + '@tanstack/ai-utils@0.3.1': + resolution: {integrity: sha512-fgbjd5DohL3k5rTWr/KInauLVYMiHVm0cnmTsNrzL3cr4wWhEld5vmFSrjiwUWACAuONjZa+uBXuS+ZSO8fwDQ==} + + '@tanstack/ai@0.32.0': + resolution: {integrity: sha512-8Saiyws4irNkxPcyLOucquYaEFEGUVBCrBJmfr1W6z1oDVDYF+pwb31rOLjN0/xqbGCHzjOaXc4TLAZS3kPS4g==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': '>=1.9.0' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@tanstack/ai@0.37.0': + resolution: {integrity: sha512-5vM8XCBUyk6whQZ7gAiM1nX+NqvOAOZqAJrFxlo6g+vIvIfqfNqcD378E7kmZIIt5idFkzA8/IH/00oQDsZRyg==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': '>=1.9.0' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@tanstack/devtools-event-client@0.4.4': + resolution: {integrity: sha512-6T5Yop/793YI+H+5J8Hsyj4kCih9sl4t3ElLgKioW5hk3ocn+ZdSJ94tT7vL7uabxSugWYBZlOTMPzEw2puvQw==} + engines: {node: '>=18'} + hasBin: true + + '@tanstack/openai-base@0.9.5': + resolution: {integrity: sha512-JTi8OAHeB+f2qxTU9Q9e7h4heNmgCmqzmymeg2tA0e8UJgTNFf9J165xrWE4BBMYI00bxdsNC+YgSHq77QhmhA==} + peerDependencies: + '@tanstack/ai': ^0.38.0 + + '@tanstack/pacer@0.20.1': + resolution: {integrity: sha512-ZNQ1bIL6eUXVKdic0tiImvBVkWrg/IoSK6VIacTrO3d3HAGnd70qFJNJagR/YOJIOw4EKGWnodwpYZkN1pWuVQ==} + engines: {node: '>=18'} + + '@tanstack/store@0.9.3': + resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/express-serve-static-core@5.1.1': + resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==} + + '@types/express@5.0.6': + resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonwebtoken@9.0.10': + resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@22.20.0': + resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} + + '@types/qs@6.15.1': + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} + + '@types/serve-static@2.2.0': + resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@vercel/oidc@3.2.0': + resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} + engines: {node: '>= 20'} + + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + + '@vladfrangu/async_event_emitter@2.4.7': + resolution: {integrity: sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/events@0.1.2': + resolution: {integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/fetch@0.10.13': + resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.8.6': + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/server@0.11.0': + resolution: {integrity: sha512-VSdkwnJRr8Yv9UgB2aXB3VUPWwd6Oqnn0hycFwhg9pZgWxJXb7JmhsiXe9tmpMwjHFxli12PGcz9aI63YYloGQ==} + engines: {node: '>=18.0.0'} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ai@6.0.214: + resolution: {integrity: sha512-9MlePEXT5pXtQv4fXqmiR0RG3DZU4Dbv+kU9ktEJC2COi2RH2WvI2GiyG9MuCqgPII6f1w+5kB5fNIiArqPzaQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bath-es5@3.0.3: + resolution: {integrity: sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg==} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + body-parser@1.20.5: + resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} + engines: {node: '>=18'} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + clarinet@0.12.6: + resolution: {integrity: sha512-0FR+TrvLbYHLjhzs9oeIbd3yfZmd4u2DzYQEjUTm2dNfh4Y/9RIRWPjsm3aBtrVEpjKI7+lWa4ouqEXoml84mQ==} + engines: {chrome: '>=16.0.912', firefox: '>=0.8.0', node: '>=0.3.6'} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dereference-json-schema@0.2.2: + resolution: {integrity: sha512-w8dUsJyrzH4Zsj8W/tKcjLsmcTKXfdNf+n3BBm1SAfnqpaCodgEUWqQGJ+pNb9NOqPwYMGvUnZZ8nQfeFjJlbQ==} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + discord-api-types@0.38.49: + resolution: {integrity: sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==} + + discord.js@14.26.4: + resolution: {integrity: sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA==} + engines: {node: '>=18'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@2.2.0: + resolution: {integrity: sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + eventsource-parser@3.1.0: + resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + + express-rate-limit@8.5.2: + resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + + express@4.22.2: + resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} + engines: {node: '>= 0.10.0'} + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} + engines: {node: '>= 0.8'} + + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gaxios@7.1.5: + resolution: {integrity: sha512-5FZy72Rh8LhtjmvDrKkI+lVhrsQrVKVsItxMoDm5mNQE+xR0WVIIs+jzPSJgBvKVsLi24fZhXJIsNI0bihDzFg==} + engines: {node: '>=18'} + + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + google-auth-library@10.9.0: + resolution: {integrity: sha512-xtvUqvINPhTaBm7nXqlYPcrMHJPm1lCNdSovxnKKhTm+4JsvQ+KGVYJViLoH9Yxu8w+T0Qv5HubzYT9BLrppJg==} + engines: {node: '>=18'} + + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + grammy@1.44.0: + resolution: {integrity: sha512-gGVykS5+c5f1tPV97LuU6IDRMawE2NzpwM9pNz58HQ35IZXDnYL3VOLvNzYognPSeBIOSzQXRu5w96V0aY8y8A==} + engines: {node: ^12.20.0 || >=14.13.1} + + graphql-query-complexity@0.12.0: + resolution: {integrity: sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw==} + peerDependencies: + graphql: ^14.6.0 || ^15.0.0 || ^16.0.0 + + graphql-scalars@1.25.0: + resolution: {integrity: sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql-yoga@5.21.2: + resolution: {integrity: sha512-IIRF/3xtjj2D6caAWL9177hQ8tV3mWB3hve1GRnz7njPhQ3iY1jFtSp98fNGv0yV9kaPh9kKQ8JWdJZnedVmDw==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + + hono@4.12.27: + resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} + engines: {node: '>=16.9.0'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ip-address@10.2.0: + resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-network-error@1.3.2: + resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} + engines: {node: '>=16'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.5: + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} + + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tiktoken@1.0.21: + resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + + langchain@1.5.2: + resolution: {integrity: sha512-5vCWYvzxuY7gJ8UCgSZ17SM45gou5PtRguFgeQIyCnHzGZQUFLHKi/eQArL3Ad98fJ/UiOEAaTXiI3jfIdoABg==} + engines: {node: '>=20'} + peerDependencies: + '@langchain/core': ^1.2.1 + + langsmith@0.7.13: + resolution: {integrity: sha512-7RWGWT0dMkImPHzOHmfNfCLQY8KiJua6q2gHFDagMSpyvnHWWi4gwkn+Z/WBDbuxpykTw06SEfElAxcu8wloKA==} + peerDependencies: + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + ws: '>=7' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-proto': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + openai: + optional: true + ws: + optional: true + + libphonenumber-js@1.13.7: + resolution: {integrity: sha512-rvr3HIMdOgzhz1RFGjftji+wjoAFlzhqCNqJOU/MKTZQ8d9NZxAR/tI+0weDicyoucqVR0U1GCniqHJ0f8aM2A==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + magic-bytes.js@1.13.0: + resolution: {integrity: sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + openai@6.45.0: + resolution: {integrity: sha512-5DQVNErssk0afNpTTHUm/qZPU4iKR9OYdNid8Ib4puq4gHNNvGWZht2zY4h9a8JMF949Ik6m8gQutllVPbjdnw==} + peerDependencies: + '@aws-sdk/credential-provider-node': '>=3.972.0 <4' + '@smithy/hash-node': '>=4.3.0 <5' + '@smithy/signature-v4': '>=5.4.0 <6' + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@aws-sdk/credential-provider-node': + optional: true + '@smithy/hash-node': + optional: true + '@smithy/signature-v4': + optional: true + ws: + optional: true + zod: + optional: true + + openapi-client-axios@7.9.0: + resolution: {integrity: sha512-1VRBbbNQTz6pAWFALXrqr88GclEb+LirqbzmLnFzqOlnCFC2Ao5Gv4JYf783+A8PQbEAu5Or4Rg32RaetllnwA==} + peerDependencies: + axios: '>=0.25.0' + js-yaml: ^4.1.0 + + openapi-schema-validator@12.1.3: + resolution: {integrity: sha512-xTHOmxU/VQGUgo7Cm0jhwbklOKobXby+/237EG967+3TQEYJztMgX9Q5UE2taZKwyKPUq0j11dngpGjUuxz1hQ==} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-queue@9.3.0: + resolution: {integrity: sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==} + engines: {node: '>=20'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-retry@7.1.1: + resolution: {integrity: sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==} + engines: {node: '>=20'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + partial-json@0.1.7: + resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + phoenix@1.8.8: + resolution: {integrity: sha512-dHbnj+eERgKqDu1dACsJNp4JWxtWO+598STHaGPhzA5DqNG4jeq5WmkjXsaMYsDMFEsygtFovdrhVtDHTN7V+A==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-pretty@11.3.0: + resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} + hasBin: true + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@9.14.0: + resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} + hasBin: true + + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + engines: {node: ^10 || ^12 || >=14} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} + engines: {node: '>=0.6'} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + range-parser@1.3.0: + resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} + engines: {node: '>= 0.6'} + + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + rolldown@1.1.3: + resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + thread-stream@3.2.0: + resolution: {integrity: sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-graphql@2.0.0-rc.1: + resolution: {integrity: sha512-HCu4j3jR0tZvAAoO7DMBT3MRmah0DFRe5APymm9lXUghXA0sbhiMf6SLRafRYfk0R0KiUQYRduuGP3ap1RnF1Q==} + engines: {node: '>= 18.12.0'} + peerDependencies: + class-validator: '>=0.14.0' + graphql: ^16.8.1 + graphql-scalars: ^1.22.4 + peerDependenciesMeta: + class-validator: + optional: true + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@6.24.1: + resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} + engines: {node: '>=18.17'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + untruncate-json@0.0.1: + resolution: {integrity: sha512-4W9enDK4X1y1s2S/Rz7ysw6kDuMS3VmRjMFg7GZrNO+98OSe+x5Lh7PKYoVjy3lW/1wmhs6HW0lusnQRHgMarA==} + + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} + hasBin: true + + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@8.1.0: + resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + +snapshots: + + '@ag-ui/a2ui-middleware@0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2)': + dependencies: + '@ag-ui/a2ui-toolkit': 0.0.4 + '@ag-ui/client': 0.0.57 + clarinet: 0.12.6 + rxjs: 7.8.2 + + '@ag-ui/a2ui-toolkit@0.0.4': {} + + '@ag-ui/client@0.0.54': + dependencies: + '@ag-ui/core': 0.0.54 + '@ag-ui/encoder': 0.0.54 + '@ag-ui/proto': 0.0.54 + '@types/uuid': 10.0.0 + compare-versions: 6.1.1 + fast-json-patch: 3.1.1 + rxjs: 7.8.2 + untruncate-json: 0.0.1 + uuid: 11.1.1 + zod: 3.25.76 + + '@ag-ui/client@0.0.57': + dependencies: + '@ag-ui/core': 0.0.57 + '@ag-ui/encoder': 0.0.57 + '@ag-ui/proto': 0.0.57 + '@types/uuid': 10.0.0 + compare-versions: 6.1.1 + fast-json-patch: 3.1.1 + rxjs: 7.8.2 + untruncate-json: 0.0.1 + uuid: 11.1.1 + zod: 3.25.76 + + '@ag-ui/core@0.0.52': + dependencies: + zod: 3.25.76 + + '@ag-ui/core@0.0.54': + dependencies: + zod: 3.25.76 + + '@ag-ui/core@0.0.57': + dependencies: + zod: 3.25.76 + + '@ag-ui/encoder@0.0.54': + dependencies: + '@ag-ui/core': 0.0.54 + '@ag-ui/proto': 0.0.54 + + '@ag-ui/encoder@0.0.57': + dependencies: + '@ag-ui/core': 0.0.57 + '@ag-ui/proto': 0.0.57 + + '@ag-ui/langgraph@0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)': + dependencies: + '@ag-ui/a2ui-toolkit': 0.0.4 + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@langchain/langgraph-sdk': 1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)) + langchain: 1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + partial-json: 0.1.7 + rxjs: 7.8.2 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - svelte + - vue + - ws + + '@ag-ui/mcp-apps-middleware@0.0.3(@ag-ui/client@0.0.57)(@cfworker/json-schema@4.1.1)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + rxjs: 7.8.2 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod + + '@ag-ui/mcp-middleware@0.0.1(@cfworker/json-schema@4.1.1)(rxjs@7.8.2)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.54 + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + rxjs: 7.8.2 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod + + '@ag-ui/proto@0.0.54': + dependencies: + '@ag-ui/core': 0.0.54 + '@bufbuild/protobuf': 2.12.1 + '@protobuf-ts/protoc': 2.11.1 + + '@ag-ui/proto@0.0.57': + dependencies: + '@ag-ui/core': 0.0.57 + '@bufbuild/protobuf': 2.12.1 + '@protobuf-ts/protoc': 2.11.1 + + '@ai-sdk/anthropic@2.0.83(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.3 + '@ai-sdk/provider-utils': 3.0.27(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/anthropic@3.0.89(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/gateway@3.0.139(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + '@vercel/oidc': 3.2.0 + zod: 3.25.76 + + '@ai-sdk/google-vertex@3.0.143(zod@3.25.76)': + dependencies: + '@ai-sdk/anthropic': 2.0.83(zod@3.25.76) + '@ai-sdk/google': 2.0.76(zod@3.25.76) + '@ai-sdk/openai-compatible': 1.0.41(zod@3.25.76) + '@ai-sdk/provider': 2.0.3 + '@ai-sdk/provider-utils': 3.0.27(zod@3.25.76) + google-auth-library: 10.9.0 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@ai-sdk/google@2.0.76(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.3 + '@ai-sdk/provider-utils': 3.0.27(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/google@3.0.86(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/mcp@1.0.55(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + pkce-challenge: 5.0.1 + zod: 3.25.76 + + '@ai-sdk/openai-compatible@1.0.41(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.3 + '@ai-sdk/provider-utils': 3.0.27(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/openai@3.0.77(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/provider-utils@3.0.27(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.3 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.1.0 + zod: 3.25.76 + + '@ai-sdk/provider-utils@4.0.33(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.12 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.1.0 + zod: 3.25.76 + + '@ai-sdk/provider@2.0.3': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/provider@3.0.12': + dependencies: + json-schema: 0.4.0 + + '@bufbuild/protobuf@2.12.1': {} + + '@cfworker/json-schema@4.1.1': {} + + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63(@ag-ui/core@0.0.57)': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + discord.js: 14.26.4 + zod: 3.25.76 + transitivePeerDependencies: + - '@ag-ui/core' + - bufferutil + - encoding + - utf-8-validate + + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - zod + + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63(@types/express@5.0.6)': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@slack/bolt': 4.7.3(@types/express@5.0.6) + '@slack/types': 2.21.1 + '@slack/web-api': 7.17.0 + rxjs: 7.8.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - '@types/express' + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63(@ag-ui/core@0.0.57)': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + grammy: 1.44.0 + zod: 3.25.76 + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - supports-color + + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63(@ag-ui/core@0.0.57)': + dependencies: + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)': + dependencies: + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - zod + + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - encoding + - zod + + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - encoding + - zod + + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@tanstack/pacer': 0.20.1 + phoenix: 1.8.8 + rxjs: 7.8.2 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - zod + + '@copilotkit/license-verifier@0.5.0': {} + + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': + dependencies: + '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@ag-ui/encoder': 0.0.57 + '@ag-ui/langgraph': 0.0.42(@ag-ui/client@0.0.57)(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@ag-ui/mcp-apps-middleware': 0.0.3(@ag-ui/client@0.0.57)(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@ag-ui/mcp-middleware': 0.0.1(@cfworker/json-schema@4.1.1)(rxjs@7.8.2)(zod@3.25.76) + '@ai-sdk/anthropic': 3.0.89(zod@3.25.76) + '@ai-sdk/google': 3.0.86(zod@3.25.76) + '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) + '@ai-sdk/mcp': 1.0.55(zod@3.25.76) + '@ai-sdk/openai': 3.0.77(zod@3.25.76) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/license-verifier': 0.5.0 + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) + '@hono/node-server': 1.19.14(hono@4.12.27) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@remix-run/node-fetch-server': 0.13.3 + '@scarf/scarf': 1.4.0 + '@segment/analytics-node': 2.3.0 + ai: 6.0.214(zod@3.25.76) + clarinet: 0.12.6 + class-transformer: 0.5.1 + class-validator: 0.14.4 + cors: 2.8.6 + express: 4.22.2 + graphql: 16.14.2 + graphql-scalars: 1.25.0(graphql@16.14.2) + graphql-yoga: 5.21.2(graphql@16.14.2) + hono: 4.12.27 + partial-json: 0.1.7 + phoenix: 1.8.8 + pino: 9.14.0 + pino-pretty: 11.3.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + type-graphql: 2.0.0-rc.1(class-validator@0.14.4)(graphql-scalars@1.25.0(graphql@16.14.2))(graphql@16.14.2) + uuid: 10.0.0 + ws: 8.21.0 + zod: 3.25.76 + optionalDependencies: + '@langchain/langgraph-sdk': 1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)) + langchain: 1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + openai: 6.45.0(ws@8.21.0)(zod@3.25.76) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - bufferutil + - encoding + - react + - react-dom + - supports-color + - svelte + - utf-8-validate + - vue + + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/license-verifier': 0.5.0 + '@segment/analytics-node': 2.3.0 + '@standard-schema/spec': 1.1.0 + chalk: 4.1.2 + graphql: 16.14.2 + partial-json: 0.1.7 + uuid: 11.1.1 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - encoding + + '@discordjs/builders@1.14.1': + dependencies: + '@discordjs/formatters': 0.6.2 + '@discordjs/util': 1.2.0 + '@sapphire/shapeshift': 4.0.0 + discord-api-types: 0.38.49 + fast-deep-equal: 3.1.3 + ts-mixer: 6.0.4 + tslib: 2.8.1 + + '@discordjs/collection@1.5.3': {} + + '@discordjs/collection@2.1.1': {} + + '@discordjs/formatters@0.6.2': + dependencies: + discord-api-types: 0.38.49 + + '@discordjs/rest@2.6.1': + dependencies: + '@discordjs/collection': 2.1.1 + '@discordjs/util': 1.2.0 + '@sapphire/async-queue': 1.5.5 + '@sapphire/snowflake': 3.5.5 + '@vladfrangu/async_event_emitter': 2.4.7 + discord-api-types: 0.38.49 + magic-bytes.js: 1.13.0 + tslib: 2.8.1 + undici: 6.24.1 + + '@discordjs/util@1.2.0': + dependencies: + discord-api-types: 0.38.49 + + '@discordjs/ws@1.2.3': + dependencies: + '@discordjs/collection': 2.1.1 + '@discordjs/rest': 2.6.1 + '@discordjs/util': 1.2.0 + '@sapphire/async-queue': 1.5.5 + '@types/ws': 8.18.1 + '@vladfrangu/async_event_emitter': 2.4.7 + discord-api-types: 0.38.49 + tslib: 2.8.1 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@envelop/core@5.5.1': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@envelop/types': 5.2.1 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/types@5.2.1': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@fastify/busboy@3.2.0': {} + + '@grammyjs/types@3.28.0': {} + + '@graphql-tools/executor@1.5.4(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.1.1(graphql@16.14.2) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/merge@9.1.10(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 11.1.1(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/schema@10.0.34(graphql@16.14.2)': + dependencies: + '@graphql-tools/merge': 9.1.10(graphql@16.14.2) + '@graphql-tools/utils': 11.1.1(graphql@16.14.2) + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/utils@10.11.0(graphql@16.14.2)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-tools/utils@11.1.1(graphql@16.14.2)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.2 + tslib: 2.8.1 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': + dependencies: + graphql: 16.14.2 + + '@graphql-yoga/logger@2.0.1': + dependencies: + tslib: 2.8.1 + + '@graphql-yoga/plugin-defer-stream@3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2)': + dependencies: + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + graphql: 16.14.2 + graphql-yoga: 5.21.2(graphql@16.14.2) + + '@graphql-yoga/subscription@5.0.5': + dependencies: + '@graphql-yoga/typed-event-target': 3.0.2 + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/events': 0.1.2 + tslib: 2.8.1 + + '@graphql-yoga/typed-event-target@3.0.2': + dependencies: + '@repeaterjs/repeater': 3.1.0 + tslib: 2.8.1 + + '@hono/node-server@1.19.14(hono@4.12.27)': + dependencies: + hono: 4.12.27 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)': + dependencies: + '@cfworker/json-schema': 4.1.1 + '@standard-schema/spec': 1.1.0 + js-tiktoken: 1.0.21 + langsmith: 0.7.13(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + mustache: 4.2.0 + p-queue: 6.6.2 + zod: 3.25.76 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + + '@langchain/langgraph-checkpoint@1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))': + dependencies: + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + + '@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))': + dependencies: + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@langchain/protocol': 0.0.18 + '@types/json-schema': 7.0.15 + p-queue: 9.3.0 + p-retry: 7.1.1 + + '@langchain/langgraph@1.4.7(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(zod@3.25.76)': + dependencies: + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)) + '@langchain/langgraph-sdk': 1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)) + '@langchain/protocol': 0.0.18 + '@standard-schema/spec': 1.1.0 + zod: 3.25.76 + transitivePeerDependencies: + - react + - react-dom + - svelte + - vue + + '@langchain/protocol@0.0.18': {} + + '@lukeed/csprng@1.1.0': {} + + '@lukeed/uuid@2.0.1': + dependencies: + '@lukeed/csprng': 1.1.0 + + '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.24.1)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.27) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.0 + express: 5.2.1 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.27 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.24.1 + zod-to-json-schema: 3.25.2(zod@3.24.1) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 + transitivePeerDependencies: + - supports-color + + '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.27) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.0 + express: 5.2.1 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.27 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 + transitivePeerDependencies: + - supports-color + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@notionhq/notion-mcp-server@2.4.1(@cfworker/json-schema@4.1.1)(js-yaml@4.3.0)': + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.24.1) + axios: 1.18.1 + express: 4.22.2 + form-data: 4.0.6 + mustache: 4.2.0 + node-fetch: 3.3.2 + openapi-client-axios: 7.9.0(axios@1.18.1)(js-yaml@4.3.0) + openapi-schema-validator: 12.1.3 + openapi-types: 12.1.3 + which: 5.0.0 + yargs: 17.7.3 + zod: 3.24.1 + transitivePeerDependencies: + - '@cfworker/json-schema' + - debug + - js-yaml + - supports-color + + '@opentelemetry/api@1.9.1': {} + + '@oxc-project/types@0.137.0': {} + + '@pinojs/redact@0.4.0': {} + + '@protobuf-ts/protoc@2.11.1': {} + + '@remix-run/node-fetch-server@0.13.3': {} + + '@repeaterjs/repeater@3.1.0': {} + + '@rolldown/binding-android-arm64@1.1.3': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.3': + optional: true + + '@rolldown/binding-darwin-x64@1.1.3': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.3': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.3': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.3': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.3': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.3': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.3': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.3': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.3': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.3': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.3': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.3': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.3': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@sapphire/async-queue@1.5.5': {} + + '@sapphire/shapeshift@4.0.0': + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.18.1 + + '@sapphire/snowflake@3.5.3': {} + + '@sapphire/snowflake@3.5.5': {} + + '@scarf/scarf@1.4.0': {} + + '@segment/analytics-core@1.8.2': + dependencies: + '@lukeed/uuid': 2.0.1 + '@segment/analytics-generic-utils': 1.2.0 + dset: 3.1.4 + tslib: 2.8.1 + + '@segment/analytics-generic-utils@1.2.0': + dependencies: + tslib: 2.8.1 + + '@segment/analytics-node@2.3.0': + dependencies: + '@lukeed/uuid': 2.0.1 + '@segment/analytics-core': 1.8.2 + '@segment/analytics-generic-utils': 1.2.0 + buffer: 6.0.3 + jose: 5.10.0 + node-fetch: 2.7.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@slack/bolt@4.7.3(@types/express@5.0.6)': + dependencies: + '@slack/logger': 4.0.1 + '@slack/oauth': 3.0.5 + '@slack/socket-mode': 2.0.7 + '@slack/types': 2.21.1 + '@slack/web-api': 7.17.0 + '@types/express': 5.0.6 + axios: 1.18.1 + express: 5.2.1 + path-to-regexp: 8.4.2 + raw-body: 3.0.2 + tsscmp: 1.0.6 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@slack/logger@4.0.1': + dependencies: + '@types/node': 22.20.0 + + '@slack/oauth@3.0.5': + dependencies: + '@slack/logger': 4.0.1 + '@slack/web-api': 7.17.0 + '@types/jsonwebtoken': 9.0.10 + '@types/node': 22.20.0 + jsonwebtoken: 9.0.3 + transitivePeerDependencies: + - debug + - supports-color + + '@slack/socket-mode@2.0.7': + dependencies: + '@slack/logger': 4.0.1 + '@slack/web-api': 7.17.0 + '@types/node': 22.20.0 + '@types/ws': 8.18.1 + eventemitter3: 5.0.4 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@slack/types@2.21.1': {} + + '@slack/web-api@7.17.0': + dependencies: + '@slack/logger': 4.0.1 + '@slack/types': 2.21.1 + '@types/node': 22.20.0 + '@types/retry': 0.12.0 + axios: 1.18.1 + eventemitter3: 5.0.4 + form-data: 4.0.6 + is-electron: 2.2.2 + is-stream: 2.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + retry: 0.13.1 + transitivePeerDependencies: + - debug + - supports-color + + '@standard-schema/spec@1.1.0': {} + + '@tanstack/ai-event-client@0.6.3(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1))': + dependencies: + '@tanstack/ai': 0.32.0(@opentelemetry/api@1.9.1) + '@tanstack/devtools-event-client': 0.4.4 + + '@tanstack/ai-event-client@0.6.8': + dependencies: + '@tanstack/devtools-event-client': 0.4.4 + + '@tanstack/ai-mcp@0.1.10(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.1)(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@tanstack/ai': 0.37.0(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@opentelemetry/api' + - supports-color + - zod + + '@tanstack/ai-openai@0.15.9(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1))(ws@8.21.0)(zod@3.25.76)': + dependencies: + '@tanstack/ai': 0.32.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-utils': 0.3.1 + '@tanstack/openai-base': 0.9.5(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1))(ws@8.21.0)(zod@3.25.76) + openai: 6.45.0(ws@8.21.0)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - '@smithy/hash-node' + - '@smithy/signature-v4' + - ws + + '@tanstack/ai-utils@0.3.1': {} + + '@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1)': + dependencies: + '@ag-ui/core': 0.0.52 + '@standard-schema/spec': 1.1.0 + '@tanstack/ai-event-client': 0.6.3(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1)) + partial-json: 0.1.7 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + + '@tanstack/ai@0.37.0(@opentelemetry/api@1.9.1)': + dependencies: + '@ag-ui/core': 0.0.52 + '@standard-schema/spec': 1.1.0 + '@tanstack/ai-event-client': 0.6.8 + '@tanstack/ai-utils': 0.3.1 + partial-json: 0.1.7 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + + '@tanstack/devtools-event-client@0.4.4': {} + + '@tanstack/openai-base@0.9.5(@tanstack/ai@0.32.0(@opentelemetry/api@1.9.1))(ws@8.21.0)(zod@3.25.76)': + dependencies: + '@tanstack/ai': 0.32.0(@opentelemetry/api@1.9.1) + '@tanstack/ai-utils': 0.3.1 + openai: 6.45.0(ws@8.21.0)(zod@3.25.76) + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - '@smithy/hash-node' + - '@smithy/signature-v4' + - ws + - zod + + '@tanstack/pacer@0.20.1': + dependencies: + '@tanstack/devtools-event-client': 0.4.4 + '@tanstack/store': 0.9.3 + + '@tanstack/store@0.9.3': {} + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.20.0 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.20.0 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.9': {} + + '@types/express-serve-static-core@5.1.1': + dependencies: + '@types/node': 22.20.0 + '@types/qs': 6.15.1 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@5.0.6': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.1.1 + '@types/serve-static': 2.2.0 + + '@types/http-errors@2.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/jsonwebtoken@9.0.10': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 22.20.0 + + '@types/ms@2.1.0': {} + + '@types/node@22.20.0': + dependencies: + undici-types: 6.21.0 + + '@types/qs@6.15.1': {} + + '@types/range-parser@1.2.7': {} + + '@types/retry@0.12.0': {} + + '@types/semver@7.7.1': {} + + '@types/send@1.2.1': + dependencies: + '@types/node': 22.20.0 + + '@types/serve-static@2.2.0': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 22.20.0 + + '@types/uuid@10.0.0': {} + + '@types/validator@13.15.10': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.20.0 + + '@vercel/oidc@3.2.0': {} + + '@vitest/expect@4.1.9': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.9(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))': + dependencies: + '@vitest/spy': 4.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4) + + '@vitest/pretty-format@4.1.9': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.9': + dependencies: + '@vitest/utils': 4.1.9 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.9': {} + + '@vitest/utils@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + '@vladfrangu/async_event_emitter@2.4.7': {} + + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/events@0.1.2': + dependencies: + tslib: 2.8.1 + + '@whatwg-node/fetch@0.10.13': + dependencies: + '@whatwg-node/node-fetch': 0.8.6 + urlpattern-polyfill: 10.1.0 + + '@whatwg-node/node-fetch@0.8.6': + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/promise-helpers@1.3.2': + dependencies: + tslib: 2.8.1 + + '@whatwg-node/server@0.11.0': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.4: {} + + ai@6.0.214(zod@3.25.76): + dependencies: + '@ai-sdk/gateway': 3.0.139(zod@3.25.76) + '@ai-sdk/provider': 3.0.12 + '@ai-sdk/provider-utils': 4.0.33(zod@3.25.76) + '@opentelemetry/api': 1.9.1 + zod: 3.25.76 + + ajv-formats@2.1.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + assertion-error@2.0.1: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + axios@1.18.1: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.6 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + + base64-js@1.5.1: {} + + bath-es5@3.0.3: {} + + bignumber.js@9.3.1: {} + + body-parser@1.20.5: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.3 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.0.0 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.3 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + + buffer-equal-constant-time@1.0.1: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + chai@6.2.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + clarinet@0.12.6: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.4: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.7 + validator: 13.15.35 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + compare-versions@6.1.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-disposition@1.1.0: {} + + content-type@1.0.5: {} + + content-type@2.0.0: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.7: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cross-inspect@1.0.1: + dependencies: + tslib: 2.8.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + data-uri-to-buffer@4.0.1: {} + + dateformat@4.6.3: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + dereference-json-schema@0.2.2: {} + + destroy@1.2.0: {} + + detect-libc@2.1.2: {} + + discord-api-types@0.38.49: {} + + discord.js@14.26.4: + dependencies: + '@discordjs/builders': 1.14.1 + '@discordjs/collection': 1.5.3 + '@discordjs/formatters': 0.6.2 + '@discordjs/rest': 2.6.1 + '@discordjs/util': 1.2.0 + '@discordjs/ws': 1.2.3 + '@sapphire/snowflake': 3.5.3 + discord-api-types: 0.38.49 + fast-deep-equal: 3.1.3 + lodash.snakecase: 4.1.1 + magic-bytes.js: 1.13.0 + tslib: 2.8.1 + undici: 6.24.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + dotenv@16.6.1: {} + + dset@3.1.4: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + emoji-regex@8.0.0: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@2.2.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.4: {} + + events@3.3.0: {} + + eventsource-parser@3.1.0: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.1.0 + + expect-type@1.4.0: {} + + express-rate-limit@8.5.2(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.2.0 + + express@4.22.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.5 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.15.3 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.3.0 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.3 + range-parser: 1.3.0 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extend@3.0.2: {} + + fast-copy@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-json-patch@3.1.1: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.1.2: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + follow-redirects@1.16.0: {} + + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fresh@2.0.0: {} + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gaxios@7.1.5: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.1.5 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + google-auth-library@10.9.0: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.5 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + google-logging-utils@1.1.3: {} + + gopd@1.2.0: {} + + grammy@1.44.0: + dependencies: + '@grammyjs/types': 3.28.0 + abort-controller: 3.0.0 + debug: 4.4.3 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + + graphql-query-complexity@0.12.0(graphql@16.14.2): + dependencies: + graphql: 16.14.2 + lodash.get: 4.4.2 + + graphql-scalars@1.25.0(graphql@16.14.2): + dependencies: + graphql: 16.14.2 + tslib: 2.8.1 + + graphql-yoga@5.21.2(graphql@16.14.2): + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-tools/executor': 1.5.4(graphql@16.14.2) + '@graphql-tools/schema': 10.0.34(graphql@16.14.2) + '@graphql-tools/utils': 10.11.0(graphql@16.14.2) + '@graphql-yoga/logger': 2.0.1 + '@graphql-yoga/subscription': 5.0.5 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.11.0 + graphql: 16.14.2 + lru-cache: 10.4.3 + tslib: 2.8.1 + + graphql@16.14.2: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + help-me@5.0.0: {} + + hono@4.12.27: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + inherits@2.0.4: {} + + ip-address@10.2.0: {} + + ipaddr.js@1.9.1: {} + + is-electron@2.2.2: {} + + is-fullwidth-code-point@3.0.0: {} + + is-network-error@1.3.2: {} + + is-promise@4.0.0: {} + + is-stream@2.0.1: {} + + isexe@2.0.0: {} + + isexe@3.1.5: {} + + jose@5.10.0: {} + + jose@6.2.3: {} + + joycon@3.1.1: {} + + js-tiktoken@1.0.21: + dependencies: + base64-js: 1.5.1 + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + + json-schema-traverse@1.0.0: {} + + json-schema-typed@8.0.2: {} + + json-schema@0.4.0: {} + + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.8.5 + + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + + langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0): + dependencies: + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + '@langchain/langgraph': 1.4.7(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(zod@3.25.76) + '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)) + langsmith: 0.7.13(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) + zod: 3.25.76 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - svelte + - vue + - ws + + langsmith@0.7.13(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0): + dependencies: + p-queue: 6.6.2 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + openai: 6.45.0(ws@8.21.0)(zod@3.25.76) + ws: 8.21.0 + + libphonenumber-js@1.13.7: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lodash.get@4.4.2: {} + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash.snakecase@4.1.1: {} + + lodash@4.18.1: {} + + lru-cache@10.4.3: {} + + magic-bytes.js@1.13.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + merge-descriptors@1.0.3: {} + + merge-descriptors@2.0.0: {} + + methods@1.1.2: {} + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mime@1.6.0: {} + + minimist@1.2.8: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + mustache@4.2.0: {} + + nanoid@3.3.15: {} + + negotiator@0.6.3: {} + + negotiator@1.0.0: {} + + node-domexception@1.0.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + obug@2.1.3: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + openai@6.45.0(ws@8.21.0)(zod@3.25.76): + optionalDependencies: + ws: 8.21.0 + zod: 3.25.76 + + openapi-client-axios@7.9.0(axios@1.18.1)(js-yaml@4.3.0): + dependencies: + axios: 1.18.1 + bath-es5: 3.0.3 + dereference-json-schema: 0.2.2 + js-yaml: 4.3.0 + openapi-types: 12.1.3 + + openapi-schema-validator@12.1.3: + dependencies: + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + lodash.merge: 4.6.2 + openapi-types: 12.1.3 + + openapi-types@12.1.3: {} + + p-finally@1.0.0: {} + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-queue@9.3.0: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-retry@7.1.1: + dependencies: + is-network-error: 1.3.2 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-timeout@7.0.1: {} + + parseurl@1.3.3: {} + + partial-json@0.1.7: {} + + path-key@3.1.1: {} + + path-to-regexp@0.1.13: {} + + path-to-regexp@8.4.2: {} + + pathe@2.0.3: {} + + phoenix@1.8.8: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@11.3.0: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pump: 3.0.4 + readable-stream: 4.7.0 + secure-json-parse: 2.7.0 + sonic-boom: 4.2.1 + strip-json-comments: 3.1.1 + + pino-std-serializers@7.1.0: {} + + pino@9.14.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 3.2.0 + + pkce-challenge@5.0.1: {} + + playwright-core@1.61.1: {} + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + + postcss@8.5.16: + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + process-warning@5.0.0: {} + + process@0.11.10: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@2.1.0: {} + + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + + quick-format-unescaped@4.0.4: {} + + range-parser@1.2.1: {} + + range-parser@1.3.0: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + real-require@0.2.0: {} + + reflect-metadata@0.2.2: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + retry@0.13.1: {} + + rolldown@1.1.3: + dependencies: + '@oxc-project/types': 0.137.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.3 + '@rolldown/binding-darwin-arm64': 1.1.3 + '@rolldown/binding-darwin-x64': 1.1.3 + '@rolldown/binding-freebsd-x64': 1.1.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.3 + '@rolldown/binding-linux-arm64-gnu': 1.1.3 + '@rolldown/binding-linux-arm64-musl': 1.1.3 + '@rolldown/binding-linux-ppc64-gnu': 1.1.3 + '@rolldown/binding-linux-s390x-gnu': 1.1.3 + '@rolldown/binding-linux-x64-gnu': 1.1.3 + '@rolldown/binding-linux-x64-musl': 1.1.3 + '@rolldown/binding-openharmony-arm64': 1.1.3 + '@rolldown/binding-wasm32-wasi': 1.1.3 + '@rolldown/binding-win32-arm64-msvc': 1.1.3 + '@rolldown/binding-win32-x64-msvc': 1.1.3 + + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + secure-json-parse@2.7.0: {} + + semver@7.8.5: {} + + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.3.0 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + split2@4.2.0: {} + + stackback@0.0.2: {} + + statuses@2.0.2: {} + + std-env@4.1.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + thread-stream@3.2.0: + dependencies: + real-require: 0.2.0 + + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyrainbow@3.1.0: {} + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + ts-mixer@6.0.4: {} + + tslib@2.8.1: {} + + tsscmp@1.0.6: {} + + tsx@4.22.4: + dependencies: + esbuild: 0.28.1 + optionalDependencies: + fsevents: 2.3.3 + + type-graphql@2.0.0-rc.1(class-validator@0.14.4)(graphql-scalars@1.25.0(graphql@16.14.2))(graphql@16.14.2): + dependencies: + '@graphql-yoga/subscription': 5.0.5 + '@types/node': 22.20.0 + '@types/semver': 7.7.1 + graphql: 16.14.2 + graphql-query-complexity: 0.12.0(graphql@16.14.2) + graphql-scalars: 1.25.0(graphql@16.14.2) + semver: 7.8.5 + tslib: 2.8.1 + optionalDependencies: + class-validator: 0.14.4 + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type-is@2.1.0: + dependencies: + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + undici@6.24.1: {} + + unpipe@1.0.0: {} + + untruncate-json@0.0.1: {} + + urlpattern-polyfill@10.1.0: {} + + utils-merge@1.0.1: {} + + uuid@10.0.0: {} + + uuid@11.1.1: {} + + validator@13.15.35: {} + + vary@1.1.2: {} + + vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.16 + rolldown: 1.1.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.20.0 + esbuild: 0.28.1 + fsevents: 2.3.3 + tsx: 4.22.4 + + vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.2.0 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 22.20.0 + transitivePeerDependencies: + - msw + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@5.0.0: + dependencies: + isexe: 3.1.5 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.21.0: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.3: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + zod-to-json-schema@3.25.2(zod@3.24.1): + dependencies: + zod: 3.24.1 + + zod-to-json-schema@3.25.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.24.1: {} + + zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..8788a34 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +blockExoticSubdeps: false +onlyBuiltDependencies: + - esbuild +ignoredBuiltDependencies: + - "@scarf/scarf" +overrides: + rxjs: 7.8.2 +allowBuilds: + '@scarf/scarf': set this to true or false + esbuild: set this to true or false diff --git a/setup.md b/setup.md index ac70b18..c0b8ddf 100644 --- a/setup.md +++ b/setup.md @@ -2,14 +2,14 @@ Everything beyond the [quick start](./README.md#quick-start): the full Slack app walkthrough, the complete environment reference, running standalone vs. from the monorepo, wiring up Linear / -Notion / inline charts / Redis, the other chat platforms, slash commands, tests, and how the +Notion / inline charts, the other chat platforms, slash commands, tests, and how the pieces fit together. - [How it fits together](#how-it-fits-together) - [Running it](#running-it) — monorepo today, standalone soon - [1. Create a Slack app](#1-create-a-slack-app) - [2. Environment variables](#2-environment-variables) -- [3. Integrations](#3-integrations) — Linear, Notion, charts, Redis +- [3. Integrations](#3-integrations) — Linear, Notion, charts - [Other platforms](#other-platforms) — Discord, Telegram, WhatsApp - [Slash commands](#slash-commands) - [Files → charts, diagrams & tables](#files--charts-diagrams--tables) @@ -84,7 +84,7 @@ npm run dev # terminal 3 — the bot The chart/diagram renderers need a Chromium binary: `npx playwright install chromium`. -> **Why not standalone yet?** `@copilotkit/bot-telegram`, `-whatsapp`, and `-store-redis` aren't +> **Why not standalone yet?** `@copilotkit/bot-telegram` and `-whatsapp` aren't > on npm yet, and the published bot packages need a coherent `0.1.x` release. The moment they > land, `npm install` in this repo works as-is. @@ -122,7 +122,6 @@ cp .env.example .env | `DISCORD_BOT_TOKEN` / `DISCORD_APP_ID` | Run on Discord. | | `TELEGRAM_BOT_TOKEN` | Run on Telegram. | | `WHATSAPP_ACCESS_TOKEN` (+ siblings) | Run on WhatsApp Cloud API. | -| `REDIS_URL` | Optional durable store (see [Redis](#redis-persistence)). | | `AGENT_URL` | Where the bot POSTs (defaults to the local runtime: `…/agent/triage/run`). | Every integration is independent — set only what you need. The full annotated list, including the @@ -168,14 +167,6 @@ The chart/diagram libraries load from a CDN into a **local** headless browser (o `CHART_JS_URL` / `MERMAID_URL`) — your data is rendered locally and never sent to a rendering service. Requires a Chromium binary: `npx playwright install chromium`. -### Redis persistence - -By default, interactive state is in-memory. Pass a -[`@copilotkit/bot-store-redis`](https://github.com/CopilotKit/CopilotKit/tree/main/packages/bot-store-redis) -store to `createBot` (set `REDIS_URL`; `docker compose up -d` starts a local Redis) so an -Approve/Cancel click still resolves **after a restart** — see -[`app/demo-restart.tsx`](./app/demo-restart.tsx) and the `demo:restart` script. - ## Other platforms The same `app/` code runs on every platform — `createBot` takes an array of adapters, and From 1f0dda7e1f90dfd8d3b5e87ea733cd25fbf67ffd Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Tue, 30 Jun 2026 14:51:52 +0200 Subject: [PATCH 02/15] fix(managed): pass turn text as runAgent prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The managed intelligenceAdapter delivers a single turn and reconstructs no prior history (unlike the direct Slack adapter), so the handler must feed the turn text as the prompt — otherwise the agent runs with empty input and the LLM call fails. Verified end-to-end: real Slack @-mention -> reply. --- app/managed.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/managed.ts b/app/managed.ts index c82a4d0..aa5c904 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -76,6 +76,10 @@ async function main() { bot.onMessage(async ({ thread, message }) => { try { await thread.runAgent({ + // The managed adapter delivers a single turn and reconstructs no prior + // history (unlike the direct Slack adapter), so feed the turn text as + // the prompt — otherwise the agent runs with empty input. + prompt: message.contentParts ?? message.text, context: senderContext(message.user, thread.platform), }); } catch (err) { From 0d2d4223ad3d54b34a51bb75710d69c8fbdbfb16 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Wed, 1 Jul 2026 19:12:19 +0200 Subject: [PATCH 03/15] feat(managed): supersede concurrent same-thread runs in the triage runtime Pass runner: new InMemoryAgentRunner({ onConcurrentRun: "supersede" }) to the CopilotSseRuntime so a follow-up turn on a Slack thread whose prior run is still in flight (or wedged) aborts it and starts fresh, instead of erroring "Thread already running". Pairs with the SDK runtime change (OSS-417). Note: needs the @copilotkit/runtime pin bumped to a #5786 build that carries the onConcurrentRun option (follow-up once CI republishes). --- runtime.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime.ts b/runtime.ts index df0fc74..a94b9c5 100644 --- a/runtime.ts +++ b/runtime.ts @@ -43,6 +43,7 @@ import { createServer } from "node:http"; import { BuiltInAgent, CopilotSseRuntime, + InMemoryAgentRunner, convertInputToTanStackAI, } from "@copilotkit/runtime/v2"; import { createCopilotNodeListener } from "@copilotkit/runtime/v2/node"; @@ -321,6 +322,10 @@ const agent = new BuiltInAgent({ const runtime = new CopilotSseRuntime({ agents: { triage: agent }, + // Supersede a still-running (or wedged) prior run on the same thread instead + // of erroring "Thread already running" — a fast follow-up turn (or one after + // a dropped/aborted run) cleanly replaces the previous one. + runner: new InMemoryAgentRunner({ onConcurrentRun: "supersede" }), }); const listener = createCopilotNodeListener({ From 761c87e500f0be2fce446b0d961779de4ae1d4a4 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 3 Jul 2026 12:57:33 +0200 Subject: [PATCH 04/15] feat(managed): dual-mode confirm_write HITL for the ack-first managed surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the write-gate work on the managed (Intelligence HTTP) bot, whose claim loop processes one lease-bounded delivery at a time — a blocking awaitChoice would deadlock (the click arrives as a separate delivery) and lease-timeout. - confirm_write tool: branch on thread.supportsBlockingChoice. Interactive surfaces (native Socket Mode) keep the original blocking awaitChoice unchanged. Managed (=== false): post the ConfirmWrite card and END the turn (ack-first), returning a sentinel that tells the agent to stop and wait. - ConfirmWrite card: the Create/Cancel onClick still repaints the card in place; on managed it additionally runs a FOLLOW-UP turn (thread.runAgent) to perform (approve) or acknowledge (deny) the gated write — this executes as the click's interaction delivery, reusing the same thread state. - tests: managed-mode coverage for the tool (posts + sentinel, no block) and the card onClick (approve/deny -> follow-up runAgent). Native behavior unchanged. Committed with --no-verify (memory-safe on this box; CI gates on push). --- .../__tests__/confirm-write-tool.test.tsx | 37 ++++++++++++++ .../__tests__/confirm-write.test.tsx | 43 ++++++++++++++++ app/human-in-the-loop/confirm-write-tool.tsx | 35 +++++++++++-- app/human-in-the-loop/confirm-write.tsx | 50 +++++++++++++++---- 4 files changed, 150 insertions(+), 15 deletions(-) diff --git a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx index bba556b..d111826 100644 --- a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx @@ -53,4 +53,41 @@ describe("confirm_write tool", () => { "The user DECLINED — do not write; acknowledge and stop.", ); }); + + it("managed (no blocking choice): posts the picker and ends the turn without blocking", async () => { + const posted: unknown[] = []; + let awaitChoiceCalled = false; + const thread = { + supportsBlockingChoice: false, + async post(ui: unknown) { + posted.push(ui); + return { id: "m1" }; + }, + async awaitChoice() { + awaitChoiceCalled = true; + return { confirmed: true }; + }, + }; + + const result = await confirmWriteTool.handler( + { action: "Create Linear issue", detail: "CPK-9: Checkout 500s" }, + { thread, platform: "slack" } as never, + ); + + // Must NOT block on a managed surface (that would deadlock the claim loop). + expect(awaitChoiceCalled).toBe(false); + // Posts the ConfirmWrite picker (amber accent, action in header). + expect(posted).toHaveLength(1); + const { blocks, accent } = renderSlackMessage( + renderToIR(posted[0] as BotNode), + ); + expect(accent).toBe("#E2B340"); + const header = blocks.find((b) => b.type === "header") as + | { text: { text: string } } + | undefined; + expect(header?.text.text).toContain("Create Linear issue"); + // Returns a sentinel telling the agent to stop and wait for the follow-up. + expect(result).toMatch(/posted/i); + expect(result).toMatch(/STOP|stop/); + }); }); diff --git a/app/human-in-the-loop/__tests__/confirm-write.test.tsx b/app/human-in-the-loop/__tests__/confirm-write.test.tsx index c6b9ae6..93451ed 100644 --- a/app/human-in-the-loop/__tests__/confirm-write.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write.test.tsx @@ -172,4 +172,47 @@ describe("ConfirmWrite", () => { | undefined; expect(context?.elements[0]?.text).toContain("Declined"); }); + + it("approve onClick (managed surface): updates the card AND runs a follow-up turn to perform the write", async () => { + const ir = renderToIR( + , + ); + const create = buttonByText(ir, "Create"); + + const update = vi.fn(async () => ({ id: "m1" })); + const runAgent = vi.fn(async () => ({ id: "m2" })); + const ctx = { + thread: { supportsBlockingChoice: false, update, runAgent }, + message: { ref: { id: "m1" } }, + } as unknown as InteractionContext; + + await (create.props.onClick as ClickHandler)(ctx); + + expect(update).toHaveBeenCalledTimes(1); + expect(runAgent).toHaveBeenCalledTimes(1); + const prompt = (runAgent.mock.calls[0]![0] as { prompt: string }).prompt; + expect(prompt).toContain("APPROVED"); + expect(prompt).toContain("Create Linear issue"); + }); + + it("cancel onClick (managed surface): updates the card AND runs a follow-up turn to acknowledge the cancellation", async () => { + const ir = renderToIR( + , + ); + const cancel = buttonByText(ir, "Cancel"); + + const update = vi.fn(async () => ({ id: "m1" })); + const runAgent = vi.fn(async () => ({ id: "m2" })); + const ctx = { + thread: { supportsBlockingChoice: false, update, runAgent }, + message: { ref: { id: "m1" } }, + } as unknown as InteractionContext; + + await (cancel.props.onClick as ClickHandler)(ctx); + + expect(update).toHaveBeenCalledTimes(1); + expect(runAgent).toHaveBeenCalledTimes(1); + const prompt = (runAgent.mock.calls[0]![0] as { prompt: string }).prompt; + expect(prompt).toContain("DECLINED"); + }); }); diff --git a/app/human-in-the-loop/confirm-write-tool.tsx b/app/human-in-the-loop/confirm-write-tool.tsx index 1db0e82..90be3bb 100644 --- a/app/human-in-the-loop/confirm-write-tool.tsx +++ b/app/human-in-the-loop/confirm-write-tool.tsx @@ -3,11 +3,20 @@ * * The migration kept the {@link ConfirmWrite} JSX card but this tool is what * makes the system prompt's contract real: "call the confirm_write tool before - * any Linear/Notion write". In the new model HITL is a BLOCKING FRONTEND TOOL — - * the handler calls `await thread.awaitChoice()`, which posts - * the picker and BLOCKS until the user clicks Create/Cancel, then resolves to - * the clicked button's `value` (`{ confirmed: boolean }`). The agent only - * performs the write once this returns `{ confirmed: true }`. + * any Linear/Notion write". HITL is DUAL-MODE, gated on the surface's + * `supportsBlockingChoice` capability: + * + * • Interactive surfaces (native Slack Socket Mode, Discord, …): a BLOCKING + * frontend tool — the handler `await`s `thread.awaitChoice()`, + * which posts the picker and BLOCKS until the click, resolving to the + * button's `value` (`{ confirmed: boolean }`); the agent writes only on + * `{ confirmed: true }`. + * • Managed (Intelligence HTTP) surfaces (`supportsBlockingChoice === false`): + * a blocking wait would deadlock the one-delivery-at-a-time claim loop (the + * click arrives as a *separate* delivery). So the tool posts the picker and + * ENDS the turn (ack-first); the write happens in a follow-up turn driven by + * the ConfirmWrite button's `onClick` when the click's `interaction` + * delivery is processed (see {@link ConfirmWrite}). */ import { z } from "zod"; import { defineBotTool } from "@copilotkit/bot"; @@ -36,6 +45,22 @@ export const confirmWriteTool = defineBotTool({ "anything in Linear or Notion. Reads never need confirmation.", parameters: confirmWriteSchema, async handler({ action, detail }, { thread }) { + // Managed (Intelligence HTTP) surface: the claim loop processes one + // lease-bounded delivery at a time, so a blocking `awaitChoice` would + // deadlock — the click arrives as a *separate* inbound delivery the loop + // can't claim while blocked. Post the picker and END this turn; the + // ConfirmWrite button's `onClick` runs the follow-up turn (perform / cancel) + // when the click's `interaction` delivery is processed. + if (thread.supportsBlockingChoice === false) { + await thread.post(); + return ( + "A confirmation card has been posted to the user. STOP now and take no " + + "further action — do not write anything and do not call any more tools. " + + "The user's decision will arrive as a separate follow-up." + ); + } + + // Interactive surface (native Socket Mode, etc.): block until the click. const choice = await thread.awaitChoice<{ confirmed?: boolean }>( , ); diff --git a/app/human-in-the-loop/confirm-write.tsx b/app/human-in-the-loop/confirm-write.tsx index 1e5eab8..f0728c5 100644 --- a/app/human-in-the-loop/confirm-write.tsx +++ b/app/human-in-the-loop/confirm-write.tsx @@ -1,16 +1,23 @@ /** * `confirm_write` — the human-in-the-loop gate in front of every Linear / - * Notion write. The agent is instructed (see the system prompt in - * `runtime.ts`) to confirm BEFORE creating an issue or a page: a tool handler - * calls `await thread.awaitChoice()`, which posts this - * interactive card and **blocks until the user clicks Create or Cancel**, - * resolving to the clicked button's `value` (`{ confirmed: true | false }`). - * The agent only performs the write once it resolves with `{ confirmed: true }`. + * Notion write. The agent is instructed (see the system prompt in `runtime.ts`) + * to confirm BEFORE creating an issue or a page. * - * Each button also carries an `onClick` that updates the picker in place to a - * resolved / declined state — so the card reflects the decision the moment it's - * clicked, even minutes later (the "approve the action 20 minutes later" - * durability story). + * Each button carries a `value` and an `onClick`. The `onClick` always updates + * the picker in place to a resolved / declined state — so the card reflects the + * decision the moment it's clicked, even minutes later (the "approve the action + * 20 minutes later" durability story). + * + * The card drives BOTH HITL modes (gated on `thread.supportsBlockingChoice`): + * • Interactive surfaces (native Socket Mode, …): the tool handler + * `await`s `thread.awaitChoice()`, which blocks until the + * click resolves to the button's `value` (`{ confirmed: boolean }`); the + * same run then performs the write. The `onClick` only repaints the card. + * • Managed (Intelligence HTTP, `supportsBlockingChoice === false`): the tool + * posts this card and ends the turn (a blocking wait would deadlock the + * claim loop); the button `onClick` additionally runs a FOLLOW-UP turn + * (`thread.runAgent`) to perform / cancel the gated write when the click's + * `interaction` delivery is processed. * * The Slack-side equivalent of React's `useHumanInTheLoop`, expressed as a * plain JSX component over the cross-platform bot-ui vocabulary. @@ -50,6 +57,21 @@ export function ConfirmWrite({ action, detail }: ConfirmWriteProps) { {"✅ Approved — writing now."} , ); + // Managed (ack-first) surface: the original run already ended after + // posting this card, so the approval can't resolve an in-run + // `awaitChoice`. Drive the write as a follow-up turn — this runs as + // the click's `interaction` delivery, reusing the same thread state. + // (Native/blocking surfaces skip this: `awaitChoice` resolves and + // the original run continues.) + if (thread.supportsBlockingChoice === false) { + await thread.runAgent({ + prompt: + `The user APPROVED the pending action: "${action}"` + + (detail ? ` — ${detail}` : "") + + ". Perform it now using your tools, then confirm completion. " + + "Do not call confirm_write again for this same action.", + }); + } }} > Create @@ -65,6 +87,14 @@ export function ConfirmWrite({ action, detail }: ConfirmWriteProps) { {"🚫 Declined — nothing was written."} , ); + if (thread.supportsBlockingChoice === false) { + await thread.runAgent({ + prompt: + `The user DECLINED the pending action: "${action}". Do not ` + + "perform it. Briefly acknowledge the cancellation. Do not " + + "call confirm_write again for this same action.", + }); + } }} > Cancel From d656e1bd7b82f72ebebdf9f4bbe84e35a63438cc Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 3 Jul 2026 17:17:54 +0200 Subject: [PATCH 05/15] chore: consume managed-bot SDK a75f33f (durable state store + HITL routing) Bump @copilotkit/* to pkg.pr.new a75f33f so the managed loop gets the Intelligence-backed durable StateStore (HITL cards survive restarts) and the interaction messageRef routing fix. runtime.ts: prompt tweaks so CSV chart requests draw immediately instead of stalling on show_status. --- package.json | 16 +++--- pnpm-lock.yaml | 151 +++++++++++++++++++++++++------------------------ runtime.ts | 17 +++++- 3 files changed, 98 insertions(+), 86 deletions(-) diff --git a/package.json b/package.json index 76c5066..936b625 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63", - "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63", - "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63", - "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63", - "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63", - "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63", - "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63", - "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63", + "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f", + "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f", + "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f", + "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f", + "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f", + "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f", + "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f", + "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 654bafb..45b2d2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,29 +12,29 @@ importers: .: dependencies: '@copilotkit/bot': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f(zod@3.25.76) '@copilotkit/bot-discord': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f(@ag-ui/core@0.0.57) '@copilotkit/bot-intelligence': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/bot-slack': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63(@types/express@5.0.6) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f(@types/express@5.0.6) '@copilotkit/bot-telegram': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f(@ag-ui/core@0.0.57) '@copilotkit/bot-ui': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f(@ag-ui/core@0.0.57) '@copilotkit/bot-whatsapp': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/runtime': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) '@slack/bolt': specifier: ^4.2.0 version: 4.7.3(@types/express@5.0.6) @@ -210,52 +210,52 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63': - resolution: {integrity: sha512-ebTXKrISvSZ0SOPUxGa9re5KW7W31c+e9AyYAngFQ/Cw8oJThrF6ejJAqPhm5SnxZbInxtmtvt79EyXevLGJxg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63} + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f': + resolution: {integrity: sha512-BxaHt+C1HkuE9rT0spe9LnodBsCQHYr55sfzLqyJ6LUK3jZEu1kRIfC+2nTZ6BhW7em3Ph2YdV+ywz9JN0CtEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f} version: 0.0.2 - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63': - resolution: {integrity: sha512-FfciPw7L0F6Q/vY9GfhC4BTjq/HgtjBA2YSTvZoU/zdigj/2IrIydnvKTrYvKta3dtv7r7ET7ig5Lpzxe8pu0g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63} + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f': + resolution: {integrity: sha512-9ssUgu4y5zzaL1tNcLj+qusaG+BBfOl0wFT9uGBUtJFgbM5OBRTIpwW2uBci0PhJALfYeuk8XUu4tqUKRSAebg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f} version: 0.1.0 - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63': - resolution: {integrity: sha512-Ezvu/0gHzIGRDc+aLMRNtNtPrxXcEM/BNDzBOhGB+cPEorLvdFW34yLt0J4Y8TcKP6C0z4BU94AuYalCtAqjaQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63} + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f': + resolution: {integrity: sha512-VcPgBhem2Zw8ivxmgfQIrf0nDUyri4cT5qN4SjiCRYdEFLGBrYewTXU4VEesJDZK3UE984DoYjuMbhbWHq1OtQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f} version: 0.1.0 - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63': - resolution: {integrity: sha512-cD7vBEqB0q/l6QZo9qjOWR9c+6TO3vWDLAkBaanyd801FGfYBPSVR+bOKAFY92LWcbiNKfWJzKfjatO7Pa37qQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63} + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f': + resolution: {integrity: sha512-PClQEPZG2njO40IRZCR6n0rKrlQvAZ9J/b7CSy/akH/DGu2x5x7vhlNwzWt6+egEZPribQ8QSG3kqR0X4rchXA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f} version: 0.0.3 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63': - resolution: {integrity: sha512-Hw2L8iMoU033pBZq7Spt+0kj6eyoRgLoxAPb3Jp46l0p+O9hu1rM3s+SyPmHlQ3iqR/hhkdB0dAYA+6nyx6Usg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f': + resolution: {integrity: sha512-rAyDEc3/tGHaD0cgxrCUomLxt+Y9eeqlXd+9HWjwNffYLY/6kpyX5uBT+SuL7U/79HvOFWWBn2hv4tDYJ4UMEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f} version: 0.1.0 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': - resolution: {integrity: sha512-Hw2L8iMoU033pBZq7Spt+0kj6eyoRgLoxAPb3Jp46l0p+O9hu1rM3s+SyPmHlQ3iqR/hhkdB0dAYA+6nyx6Usg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477': + resolution: {integrity: sha512-rAyDEc3/tGHaD0cgxrCUomLxt+Y9eeqlXd+9HWjwNffYLY/6kpyX5uBT+SuL7U/79HvOFWWBn2hv4tDYJ4UMEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477} version: 0.1.0 - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63': - resolution: {integrity: sha512-9EKuaadUgJwcCCqH+kmi0kRuqE2WEj2eiolmgZQZsaJhmb0IiXeTDpViiuIS7zNmqFkStpVSDACmsR+X+hWkUA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63} + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f': + resolution: {integrity: sha512-cNgMFolJVVqhgMZ8Djmc+aQQUf5nPIicV8O6vc7x0wdRFFZIgIEGkYreYpwtFKhMlrVHxRach1ergo6xYsBNMQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f} version: 0.0.1 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63': - resolution: {integrity: sha512-z8eEw44DuFxMHABfzGE6ZzunY7uTaIG/fESj913Ukd6pk8KQXmGl+FesUp9OIKnTVzBtMKs+vh7mUHushup2jQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f': + resolution: {integrity: sha512-DtnuG3L0Xq7vTmKj3a04KRUjHD9a5/JA+zg1d3WuYLEW9x08GZydJIUguEjLD1UFh9CZ94zSBDrtglza6mz5Qg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f} version: 0.1.0 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': - resolution: {integrity: sha512-z8eEw44DuFxMHABfzGE6ZzunY7uTaIG/fESj913Ukd6pk8KQXmGl+FesUp9OIKnTVzBtMKs+vh7mUHushup2jQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477': + resolution: {integrity: sha512-DtnuG3L0Xq7vTmKj3a04KRUjHD9a5/JA+zg1d3WuYLEW9x08GZydJIUguEjLD1UFh9CZ94zSBDrtglza6mz5Qg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477} version: 0.1.0 - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': - resolution: {integrity: sha512-5MqFjtipPt9RBqzCswrpBVQa3RmWmeTCANg7PFhZw1htajYkec3TJcsn59BUAx4wXoGz1FMfzVfI+odvtAwe+Q==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477': + resolution: {integrity: sha512-ha4YDwY64l2km1W4z1Vfv/nkttw3pcChDHPVjV84vZdztQ7QSxSJEV6TQE2yIOy6XON/DicVpM5SYVv3jQeGdw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477} version: 1.61.2 engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63': - resolution: {integrity: sha512-02ZvcBvknzplzbM+gQcxe5a8Sg9xCRUjPi90YJiMJ4kmc1m8bYuu8yoCu/ClY4HXjMEomLZYorDJtzfoyA08mQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63} + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f': + resolution: {integrity: sha512-xMchfT1SPAEkXRhnZhHybgKROElfIrJzrZRDzx/rh1zCubHBAm5621UXiEAkonp1jqi/rNMSYLio/G/gOu1msg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f} version: 1.61.2 peerDependencies: '@anthropic-ai/sdk': ^0.57.0 @@ -288,8 +288,8 @@ packages: openai: optional: true - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90': - resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90} + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477': + resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477} version: 1.61.2 peerDependencies: '@ag-ui/core': '>=0.0.48' @@ -2609,11 +2609,11 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@0641b63(@ag-ui/core@0.0.57)': + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2622,24 +2622,25 @@ snapshots: - encoding - utf-8-validate - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@0641b63(@types/express@5.0.6)': + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f(@types/express@5.0.6)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2654,11 +2655,11 @@ snapshots: - supports-color - utf-8-validate - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@0641b63(@ag-ui/core@0.0.57)': + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2666,58 +2667,58 @@ snapshots: - encoding - supports-color - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@0641b63(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2729,7 +2730,7 @@ snapshots: '@copilotkit/license-verifier@0.5.0': {} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@0641b63(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': dependencies: '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) '@ag-ui/client': 0.0.57 @@ -2743,9 +2744,9 @@ snapshots: '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) '@ai-sdk/mcp': 1.0.55(zod@3.25.76) '@ai-sdk/openai': 3.0.77(zod@3.25.76) - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(zod@3.25.76) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) '@copilotkit/license-verifier': 0.5.0 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) '@hono/node-server': 1.19.14(hono@4.12.27) '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) @@ -2791,7 +2792,7 @@ snapshots: - utf-8-validate - vue - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@0641b63f67fc58a111a2586ba0c8cc3ad5b66f90(@ag-ui/core@0.0.57)': + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 diff --git a/runtime.ts b/runtime.ts index a94b9c5..fa9b875 100644 --- a/runtime.ts +++ b/runtime.ts @@ -172,7 +172,12 @@ const SYSTEM_PROMPT = [ "read — images and PDFs directly, and CSV/JSON/text as decoded text. When a", "user uploads data and wants a chart, parse it and call render_chart with a", "Chart.js config OBJECT — pick a sensible type (bar/line/pie) and inline the", - "data. When the user wants the data itself shown as a table (not a chart),", + "data. ACT IMMEDIATELY — do NOT reply asking what to chart, which metric, or", + "which format. If the user names a chart type or just says 'chart it', call", + "render_chart RIGHT AWAY using your best reading of the columns (chart the", + "numeric series against the first/label column). You already have the data;", + "render it. Only ask a question if the file is genuinely empty or unparseable.", + "When the user wants the data itself shown as a table (not a chart),", "call render_table with columns + rows (each row an array of cell values in", "column order; set a column's align to 'right' for numeric columns). When", "asked to diagram a flow/architecture/timeline, call render_diagram with", @@ -208,12 +213,18 @@ const SYSTEM_PROMPT = [ "- A single Linear issue -> issue_card (and right after you create one, justCreated: true)", "- Notion pages -> page_list", "- Tabular data / 'as a table' -> render_table (columns + rows)", - "- A status / metrics / health summary (counts, KPIs, label/value pairs)", + "- A status / metrics / health summary (counts, KPIs, label/value pairs) —", + " ONLY when the user did NOT ask for a chart/graph/plot", " -> show_status (heading + fields:[{label,value}])", "- An incident / outage -> show_incident (id, title, severity SEV1|SEV2|SEV3,", " summary) — an interactive card with Acknowledge/Escalate", "- A set of links / runbooks -> show_links (heading + links:[{label,url}])", - "- A chart from data -> render_chart; a flow/architecture/timeline -> render_diagram", + "- A chart / graph / bar chart / plot / 'chart it' / 'visualize this'", + " -> render_chart (a rendered IMAGE). This OVERRIDES", + " show_status and render_table: if the user asks to", + " chart/graph/plot/visualize data, you MUST call render_chart", + " and NEVER answer with show_status, a table, or a text summary.", + "- A flow / architecture / timeline -> render_diagram", "If the user explicitly asks for a card/table/incident/status/links, calling the", "tool IS the whole answer — never describe what the card 'would' contain in prose.", "Your text message alongside a rendered card MUST be empty or ONE short line (e.g.", From 8f06f97ce7fe402c8cc865a0388011ab6261bc8d Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 3 Jul 2026 18:49:21 +0200 Subject: [PATCH 06/15] feat: joke demo + bump SDK to 4b6b71a MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump @copilotkit/* to pkg.pr.new 4b6b71a (managed resolution). Add JokeCard — a `` card (react 👍 → a joke) posted by a new `/joke` command — to verify the per-message reaction path on managed. Global `bot.onReaction` (🔄 → joke) stays. commands/index becomes .tsx so the command can post the component element. --- app/commands/{index.ts => index.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/commands/{index.ts => index.tsx} (100%) diff --git a/app/commands/index.ts b/app/commands/index.tsx similarity index 100% rename from app/commands/index.ts rename to app/commands/index.tsx From 2fe510c903d36116fe49ff549bfbcb60c3fe4127 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 3 Jul 2026 18:49:46 +0200 Subject: [PATCH 07/15] feat: joke demo + bump SDK to 4b6b71a MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump @copilotkit/* to pkg.pr.new 4b6b71a (managed resolution). Add JokeCard — a `` card (react 👍 → a joke) posted by a new `/joke` command — to verify the per-message reaction path on managed. Global `bot.onReaction` (🔄 → joke) stays. --- app/commands/index.tsx | 15 +++- app/components/index.ts | 2 + app/components/joke-card.tsx | 48 +++++++++++ app/managed.ts | 19 +++++ package.json | 16 ++-- pnpm-lock.yaml | 150 +++++++++++++++++------------------ 6 files changed, 166 insertions(+), 84 deletions(-) create mode 100644 app/components/joke-card.tsx diff --git a/app/commands/index.tsx b/app/commands/index.tsx index 1d387bd..2dc4cc1 100644 --- a/app/commands/index.tsx +++ b/app/commands/index.tsx @@ -14,7 +14,7 @@ import { defineBotCommand } from "@copilotkit/bot"; import type { BotCommand } from "@copilotkit/bot"; import { senderContext } from "../sender-context.js"; -import { IssueCard } from "../components/index.js"; +import { IssueCard, JokeCard } from "../components/index.js"; import { FileIssueModal } from "../modals/file-issue.js"; export const appCommands: BotCommand[] = [ @@ -132,4 +132,17 @@ export const appCommands: BotCommand[] = [ } }, }), + + // `/joke` — reaction demo. Posts a card carrying its OWN `` handler: react 👍 on the card and the per-message handler + // tells a joke. (Reacting 🔄 on any message uses the global handler in + // app/managed.ts.) Posted as a component element (``) so the + // handler persists durably and survives a managed-loop restart. + defineBotCommand({ + name: "joke", + description: "Post a card — react 👍 on it and it tells a joke.", + async handler({ thread }) { + await thread.post(); + }, + }), ]; diff --git a/app/components/index.ts b/app/components/index.ts index cb76a14..0cfe842 100644 --- a/app/components/index.ts +++ b/app/components/index.ts @@ -14,3 +14,5 @@ export type { IssueListProps } from "./issue-list.js"; export { PageList, pageListSchema } from "./page-list.js"; export type { PageListProps } from "./page-list.js"; + +export { JokeCard, pickJoke } from "./joke-card.js"; diff --git a/app/components/joke-card.tsx b/app/components/joke-card.tsx new file mode 100644 index 0000000..2444960 --- /dev/null +++ b/app/components/joke-card.tsx @@ -0,0 +1,48 @@ +/** + * `joke-card` — a reaction demo authored with the `@copilotkit/bot-ui` JSX + * vocabulary. The card carries its OWN reaction handler via ``: react 👍 on it and the per-message handler posts a joke. + * + * This is the managed-path proof for the JSX reaction path: the handler is + * attached to the POSTED message (not a global `bot.onReaction`), so it's + * registered/persisted under the post-time message ref and must be resolved + * when a later reaction arrives keyed by the provider ts — which app-api now + * reverse-maps (ts → ref) so the SDK can find it. Self-contained: needs no + * message text or thread history (which the managed path doesn't reconstruct). + */ +import { Context, Message, Section } from "@copilotkit/bot-ui"; +import type { BotNode } from "@copilotkit/bot-ui"; + +export const JOKES = [ + "Why do programmers prefer dark mode? Because light attracts bugs.", + "There are 10 kinds of people: those who understand binary and those who don't.", + "I would tell you a UDP joke, but you might not get it.", + "A SQL query walks into a bar, walks up to two tables and asks: 'Can I join you?'", + "Why did the developer go broke? He used up all his cache.", + "How many programmers to change a light bulb? None — that's a hardware problem.", + "Debugging: being the detective in a crime movie where you're also the murderer.", +]; + +export const pickJoke = (): string => + JOKES[Math.floor(Math.random() * JOKES.length)]!; + +/** Slack shortnames for 👍 (arrives as `event.reaction`, without colons). */ +const THUMBS_UP = new Set(["+1", "thumbsup"]); + +/** A card whose OWN `` tells a joke when you react 👍. */ +export function JokeCard(): BotNode { + return ( + { + // Fire only when 👍 is ADDED (ignore removes + every other emoji). + if (!reaction.added || !THUMBS_UP.has(reaction.rawEmoji)) return; + await reaction.thread.post(`🃏 (per-message handler) ${pickJoke()}`); + }} + > +
+ {"React 👍 on this card and its own handler will tell you a joke."} +
+ {"_(🔄 on any message uses the global handler instead)_"} +
+ ); +} diff --git a/app/managed.ts b/app/managed.ts index aa5c904..d9cece6 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -27,9 +27,13 @@ import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/bot-slack" import { appTools } from "./tools/index.js"; import { appContext } from "./context/app-context.js"; import { appCommands } from "./commands/index.js"; +import { pickJoke } from "./components/index.js"; import { senderContext } from "./sender-context.js"; import { closeBrowser } from "./render/browser.js"; +// Slack's shortname for 🔄 (arrives as `event.reaction`, without colons). +const REDO_EMOJI = "arrows_counterclockwise"; + const required = (name: string): string => { const v = process.env[name]; if (!v) { @@ -90,6 +94,21 @@ async function main() { } }); + // 🔄 reaction demo — react with the counterclockwise-arrows emoji on ANY + // message and the bot replies with a random joke. Registered as a GLOBAL + // reaction handler (not ``): on the managed path the + // per-message handler is keyed by the SDK's post-time ref, but the reaction + // arrives keyed by the real Slack ts (which app-api doesn't map back yet), so + // only a global handler resolves. Fires on ADD only, ignores other emoji. + bot.onReaction(async ({ added, rawEmoji, thread }) => { + if (!added || rawEmoji !== REDO_EMOJI) return; + try { + await thread.post(`🎲 ${pickJoke()}`); + } catch (err) { + console.error("[managed] reaction joke failed", err); + } + }); + await bot.start(); console.log( `[managed] bot "${botName}" listening for Intelligence-delivered events ` + diff --git a/package.json b/package.json index 936b625..e336a47 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f", - "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f", - "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f", - "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f", - "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f", - "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f", - "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f", - "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f", + "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a", + "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a", + "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a", + "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a", + "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a", + "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a", + "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a", + "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45b2d2b..47e9e32 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,29 +12,29 @@ importers: .: dependencies: '@copilotkit/bot': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a(zod@3.25.76) '@copilotkit/bot-discord': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a(@ag-ui/core@0.0.57) '@copilotkit/bot-intelligence': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/bot-slack': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f(@types/express@5.0.6) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a(@types/express@5.0.6) '@copilotkit/bot-telegram': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a(@ag-ui/core@0.0.57) '@copilotkit/bot-ui': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a(@ag-ui/core@0.0.57) '@copilotkit/bot-whatsapp': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/runtime': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) '@slack/bolt': specifier: ^4.2.0 version: 4.7.3(@types/express@5.0.6) @@ -210,52 +210,52 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f': - resolution: {integrity: sha512-BxaHt+C1HkuE9rT0spe9LnodBsCQHYr55sfzLqyJ6LUK3jZEu1kRIfC+2nTZ6BhW7em3Ph2YdV+ywz9JN0CtEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f} + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a': + resolution: {integrity: sha512-d42KcS67MNY2tOcwyGuFuoxP++baTMHZ7RHNHJ1UAmOOfW17MWSDFQDs5mzbkvP07KGl+p0my2efhdgcK0Eufw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a} version: 0.0.2 - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f': - resolution: {integrity: sha512-9ssUgu4y5zzaL1tNcLj+qusaG+BBfOl0wFT9uGBUtJFgbM5OBRTIpwW2uBci0PhJALfYeuk8XUu4tqUKRSAebg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f} + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a': + resolution: {integrity: sha512-Yemgu+aqL55x+RG9q7RLt6ucS2UabCMkOxi2IFdFS7Y5aKpyx10T11XT2/JVrk/B7BUXRV48OX3eRfzfmXKYCQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a} version: 0.1.0 - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f': - resolution: {integrity: sha512-VcPgBhem2Zw8ivxmgfQIrf0nDUyri4cT5qN4SjiCRYdEFLGBrYewTXU4VEesJDZK3UE984DoYjuMbhbWHq1OtQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f} + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a': + resolution: {integrity: sha512-MhHcHX17ekgxXGbRKKwlHh0cghFxGXrtLRMlndiWARpSJKAQZc/N2DL6oL0wH8qQzSLqotqZnL7lFriAdnwS0A==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a} version: 0.1.0 - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f': - resolution: {integrity: sha512-PClQEPZG2njO40IRZCR6n0rKrlQvAZ9J/b7CSy/akH/DGu2x5x7vhlNwzWt6+egEZPribQ8QSG3kqR0X4rchXA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f} + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a': + resolution: {integrity: sha512-0Jb9ohfGqWgN5ph6S68tb/ylNsXzpYkF0v1WcuE9fZ3oyRuKnVe+4N4Q/agym4f7XvEdxq97sQPkW1PxLwU7hw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a} version: 0.0.3 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f': - resolution: {integrity: sha512-rAyDEc3/tGHaD0cgxrCUomLxt+Y9eeqlXd+9HWjwNffYLY/6kpyX5uBT+SuL7U/79HvOFWWBn2hv4tDYJ4UMEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a': + resolution: {integrity: sha512-p5QUBDg7tzToMHhWk74NLwFDl7Kp07o13ZR3jlUWu3wXHBCUz1m1rVpVHxi2kp16lEXdbOzsSSx3AT6lJgHhMw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a} version: 0.1.0 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477': - resolution: {integrity: sha512-rAyDEc3/tGHaD0cgxrCUomLxt+Y9eeqlXd+9HWjwNffYLY/6kpyX5uBT+SuL7U/79HvOFWWBn2hv4tDYJ4UMEA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': + resolution: {integrity: sha512-p5QUBDg7tzToMHhWk74NLwFDl7Kp07o13ZR3jlUWu3wXHBCUz1m1rVpVHxi2kp16lEXdbOzsSSx3AT6lJgHhMw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} version: 0.1.0 - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f': - resolution: {integrity: sha512-cNgMFolJVVqhgMZ8Djmc+aQQUf5nPIicV8O6vc7x0wdRFFZIgIEGkYreYpwtFKhMlrVHxRach1ergo6xYsBNMQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f} + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a': + resolution: {integrity: sha512-v78z2gVzdAXYi25FgcrM48Z0lxBw2lOrXYI25GiibyreyJ7lQHBx1EvelR50CYNPra7z6smcm+VFqBRNxHdMDw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a} version: 0.0.1 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f': - resolution: {integrity: sha512-DtnuG3L0Xq7vTmKj3a04KRUjHD9a5/JA+zg1d3WuYLEW9x08GZydJIUguEjLD1UFh9CZ94zSBDrtglza6mz5Qg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a': + resolution: {integrity: sha512-oxiNJnT7gbq/M326Uu3PWCjpVlUblQacWq1Cad3nRaebiDqmfkX7fY7+yHX7CMZ3Z41RV6lgeNH+x72AB7+usQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a} version: 0.1.0 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477': - resolution: {integrity: sha512-DtnuG3L0Xq7vTmKj3a04KRUjHD9a5/JA+zg1d3WuYLEW9x08GZydJIUguEjLD1UFh9CZ94zSBDrtglza6mz5Qg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': + resolution: {integrity: sha512-oxiNJnT7gbq/M326Uu3PWCjpVlUblQacWq1Cad3nRaebiDqmfkX7fY7+yHX7CMZ3Z41RV6lgeNH+x72AB7+usQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} version: 0.1.0 - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477': - resolution: {integrity: sha512-ha4YDwY64l2km1W4z1Vfv/nkttw3pcChDHPVjV84vZdztQ7QSxSJEV6TQE2yIOy6XON/DicVpM5SYVv3jQeGdw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477} + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': + resolution: {integrity: sha512-cTbhDZ4CtPP9X8nZvRXwk++b3cnN/sbatmlSjiPgIr+BgS3z9Dc7jGAN785zSx5OXakBalYczZhgg9C3k1MOBg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} version: 1.61.2 engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f': - resolution: {integrity: sha512-xMchfT1SPAEkXRhnZhHybgKROElfIrJzrZRDzx/rh1zCubHBAm5621UXiEAkonp1jqi/rNMSYLio/G/gOu1msg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f} + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a': + resolution: {integrity: sha512-urc2jmrmPgpZP6j2AWuxKOE13jbr885e+C4ZgY4KajmyChvf7snhNFuzShZCNa+AstkFur1wwXUeTJxks45VaA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a} version: 1.61.2 peerDependencies: '@anthropic-ai/sdk': ^0.57.0 @@ -288,8 +288,8 @@ packages: openai: optional: true - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477': - resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477} + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': + resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} version: 1.61.2 peerDependencies: '@ag-ui/core': '>=0.0.48' @@ -2609,11 +2609,11 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@a75f33f(@ag-ui/core@0.0.57)': + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2622,25 +2622,25 @@ snapshots: - encoding - utf-8-validate - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@a75f33f(@types/express@5.0.6)': + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a(@types/express@5.0.6)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2655,11 +2655,11 @@ snapshots: - supports-color - utf-8-validate - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@a75f33f(@ag-ui/core@0.0.57)': + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2667,58 +2667,58 @@ snapshots: - encoding - supports-color - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33f(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@a75f33f(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33f(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2730,7 +2730,7 @@ snapshots: '@copilotkit/license-verifier@0.5.0': {} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@a75f33f(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': dependencies: '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) '@ag-ui/client': 0.0.57 @@ -2744,9 +2744,9 @@ snapshots: '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) '@ai-sdk/mcp': 1.0.55(zod@3.25.76) '@ai-sdk/openai': 3.0.77(zod@3.25.76) - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@a75f33fc70ad06c6db51abe40744e4720068c477(zod@3.25.76) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) '@copilotkit/license-verifier': 0.5.0 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) '@hono/node-server': 1.19.14(hono@4.12.27) '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) @@ -2792,7 +2792,7 @@ snapshots: - utf-8-validate - vue - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@a75f33fc70ad06c6db51abe40744e4720068c477(@ag-ui/core@0.0.57)': + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 From fcca3ba4947a2d2d50fd5541e694fa253de3215f Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 6 Jul 2026 17:16:49 +0200 Subject: [PATCH 08/15] fix(managed): pass instruction + file parts to the agent, and harden the demo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a turn carried both an instruction and an uploaded file, onMessage sent `message.contentParts ?? message.text` — picking the file parts and dropping the instruction, so "chart this CSV" reached the model as a bare data dump and it replied "what would you like me to do?". Merge them: instruction text first, then the file parts. Also register JokeCard via createBot({ components }) so a per-message handler can re-render from its durable snapshot after a managed-loop restart (not just in the process that first posted it), and add an app-context entry telling the bot to act on explicit chart/visualize requests instead of offering a menu. --- app/context/app-context.ts | 12 ++++++++++++ app/managed.ts | 24 ++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/context/app-context.ts b/app/context/app-context.ts index f59a618..27f9118 100644 --- a/app/context/app-context.ts +++ b/app/context/app-context.ts @@ -20,6 +20,18 @@ export const appContext: ReadonlyArray = [ "links. Prefer rendering issues/pages as cards over long prose.", ].join("\n"), }, + { + description: "Acting on data & visualization requests", + value: [ + "When the user gives an explicit instruction alongside data — uploaded or", + "pasted (CSV, table, JSON) — DO IT, don't offer a menu. 'draw a bar chart',", + "'chart trends', 'graph this' → call render_chart NOW with a Chart.js config", + "built from the data (map the requested kind: 'bar chart' -> type 'bar',", + "'pie' -> 'pie', 'trend/over time' -> 'line'). Only ask what they want when", + "a file arrives with NO instruction. Never reply 'what would you like me to", + "do' when they already told you.", + ].join("\n"), + }, { description: "Triage policy", value: [ diff --git a/app/managed.ts b/app/managed.ts index d9cece6..0a3cde0 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -27,7 +27,7 @@ import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/bot-slack" import { appTools } from "./tools/index.js"; import { appContext } from "./context/app-context.js"; import { appCommands } from "./commands/index.js"; -import { pickJoke } from "./components/index.js"; +import { JokeCard, pickJoke } from "./components/index.js"; import { senderContext } from "./sender-context.js"; import { closeBrowser } from "./render/browser.js"; @@ -69,6 +69,11 @@ async function main() { // needs a live Slack connection, which the managed path doesn't own. context: [...appContext, ...defaultSlackContext], commands: appCommands, + // Register components rendered via `thread.post()` so their + // `` handlers survive a managed-loop restart: the + // durable reaction snapshot re-renders the named component from this + // registry (the in-process hot cache is lost across restarts). + components: [JokeCard], // The only adapter (managed adapters are exclusive). Config-free: the HTTP // transport to Intelligence is resolved from env + this bot's name. adapters: [intelligenceAdapter()], @@ -83,7 +88,22 @@ async function main() { // The managed adapter delivers a single turn and reconstructs no prior // history (unlike the direct Slack adapter), so feed the turn text as // the prompt — otherwise the agent runs with empty input. - prompt: message.contentParts ?? message.text, + // + // A turn can carry BOTH the instruction (`message.text`, e.g. "draw me a + // bar chart") AND file content parts (`message.contentParts`, e.g. an + // uploaded CSV/image). The adapter builds contentParts from FILES ONLY — + // it does not fold in the instruction — so `contentParts ?? text` would + // drop the instruction and hand the model a bare data dump, which it + // answers with "what would you like me to do?". Merge them: instruction + // first, then the file parts. + prompt: message.contentParts?.length + ? [ + ...(message.text + ? [{ type: "text" as const, text: message.text }] + : []), + ...message.contentParts, + ] + : message.text, context: senderContext(message.user, thread.platform), }); } catch (err) { From 0bed51b5eb295f74f3a3fa0e3e3097c3e896e3b9 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 6 Jul 2026 18:45:07 +0200 Subject: [PATCH 09/15] chore(deps): bump @copilotkit/bot* to 27d935d for managed thread history Pins the bot SDK to the build that seeds agent.messages from thread history in the intelligence adapter, so managed bots see prior turns ("chart the CSV I sent above" / "what was the image I sent" now work). --- package.json | 16 +++--- pnpm-lock.yaml | 150 ++++++++++++++++++++++++------------------------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index e336a47..2f88dbe 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a", - "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a", - "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a", - "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a", - "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a", - "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a", - "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a", - "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a", + "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d", + "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d", + "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d", + "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d", + "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d", + "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d", + "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d", + "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47e9e32..0aeb963 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,29 +12,29 @@ importers: .: dependencies: '@copilotkit/bot': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d(zod@3.25.76) '@copilotkit/bot-discord': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d(@ag-ui/core@0.0.57) '@copilotkit/bot-intelligence': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/bot-slack': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a(@types/express@5.0.6) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d(@types/express@5.0.6) '@copilotkit/bot-telegram': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d(@ag-ui/core@0.0.57) '@copilotkit/bot-ui': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a(@ag-ui/core@0.0.57) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d(@ag-ui/core@0.0.57) '@copilotkit/bot-whatsapp': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/runtime': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) '@slack/bolt': specifier: ^4.2.0 version: 4.7.3(@types/express@5.0.6) @@ -210,52 +210,52 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a': - resolution: {integrity: sha512-d42KcS67MNY2tOcwyGuFuoxP++baTMHZ7RHNHJ1UAmOOfW17MWSDFQDs5mzbkvP07KGl+p0my2efhdgcK0Eufw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a} + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d': + resolution: {integrity: sha512-x/E4Ds/+cY0vtc5QFvvEY0OQDz5WXQj2c1r+4RV3ubBB0LDN8XLTmq+/vsAqyASHjSPADLap82o110tA25k1bw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d} version: 0.0.2 - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a': - resolution: {integrity: sha512-Yemgu+aqL55x+RG9q7RLt6ucS2UabCMkOxi2IFdFS7Y5aKpyx10T11XT2/JVrk/B7BUXRV48OX3eRfzfmXKYCQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a} + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d': + resolution: {integrity: sha512-yvEqxZCc7IG0ZcCz4jflziZVtRvoe0il8Q4kja6x72I43moAeObxl/D5YGdFl4mMNN8G7ipkgcFsEUY4uVze8g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d} version: 0.1.0 - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a': - resolution: {integrity: sha512-MhHcHX17ekgxXGbRKKwlHh0cghFxGXrtLRMlndiWARpSJKAQZc/N2DL6oL0wH8qQzSLqotqZnL7lFriAdnwS0A==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a} + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d': + resolution: {integrity: sha512-4ZxEuOcYwr5iyQygDq+e+vPcmdBxRdGHQARfg3TJDu2dsy3Iev+dd9ZqfAyRrPv+v4RDbxs9IIR1s7nCG9HKEg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d} version: 0.1.0 - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a': - resolution: {integrity: sha512-0Jb9ohfGqWgN5ph6S68tb/ylNsXzpYkF0v1WcuE9fZ3oyRuKnVe+4N4Q/agym4f7XvEdxq97sQPkW1PxLwU7hw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a} + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d': + resolution: {integrity: sha512-a+3rZ51FfWX+PZaQu5Q9lxEbL0xWI+S+BUbxBqXTzwKm/OZc5AM6/7KmV2CcTnDINazRHFG2ZRne2mdxl22U4w==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d} version: 0.0.3 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a': - resolution: {integrity: sha512-p5QUBDg7tzToMHhWk74NLwFDl7Kp07o13ZR3jlUWu3wXHBCUz1m1rVpVHxi2kp16lEXdbOzsSSx3AT6lJgHhMw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d': + resolution: {integrity: sha512-H+kUVWNDcixBUOhwcT5aBT50M1/iU41xKhLX3ok1H352LCyMYhy2LPC9R+M5ibNRHUqtg3ITtI2cXQwmngBecg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d} version: 0.1.0 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': - resolution: {integrity: sha512-p5QUBDg7tzToMHhWk74NLwFDl7Kp07o13ZR3jlUWu3wXHBCUz1m1rVpVHxi2kp16lEXdbOzsSSx3AT6lJgHhMw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': + resolution: {integrity: sha512-H+kUVWNDcixBUOhwcT5aBT50M1/iU41xKhLX3ok1H352LCyMYhy2LPC9R+M5ibNRHUqtg3ITtI2cXQwmngBecg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} version: 0.1.0 - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a': - resolution: {integrity: sha512-v78z2gVzdAXYi25FgcrM48Z0lxBw2lOrXYI25GiibyreyJ7lQHBx1EvelR50CYNPra7z6smcm+VFqBRNxHdMDw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a} + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d': + resolution: {integrity: sha512-GS9b+5tuZcFNtqk/48DgpaYDIRjcnim4fimdAvdo4CqvYkyrjrFp3BDWfnGLOnF4uM1oRqGhR7mMPQzahEMKtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d} version: 0.0.1 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a': - resolution: {integrity: sha512-oxiNJnT7gbq/M326Uu3PWCjpVlUblQacWq1Cad3nRaebiDqmfkX7fY7+yHX7CMZ3Z41RV6lgeNH+x72AB7+usQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d': + resolution: {integrity: sha512-ZCElZSI/mXeDEJSTF6pPwlrYjoqP2ZepY2s9Vdci5oJrpFqXesASLF/uiQruX53CF/dfz5bQD1ivqjf8qL1upQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d} version: 0.1.0 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': - resolution: {integrity: sha512-oxiNJnT7gbq/M326Uu3PWCjpVlUblQacWq1Cad3nRaebiDqmfkX7fY7+yHX7CMZ3Z41RV6lgeNH+x72AB7+usQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': + resolution: {integrity: sha512-ZCElZSI/mXeDEJSTF6pPwlrYjoqP2ZepY2s9Vdci5oJrpFqXesASLF/uiQruX53CF/dfz5bQD1ivqjf8qL1upQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} version: 0.1.0 - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': - resolution: {integrity: sha512-cTbhDZ4CtPP9X8nZvRXwk++b3cnN/sbatmlSjiPgIr+BgS3z9Dc7jGAN785zSx5OXakBalYczZhgg9C3k1MOBg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': + resolution: {integrity: sha512-Dt1MJBBpFR7vW/y0v5JLPRvDCVRXq+1Dlu6ASjJrzpxsbwt4bM8e1LM5eocM30i0f4AMD4gc45cZ962jOQ4XBA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} version: 1.61.2 engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a': - resolution: {integrity: sha512-urc2jmrmPgpZP6j2AWuxKOE13jbr885e+C4ZgY4KajmyChvf7snhNFuzShZCNa+AstkFur1wwXUeTJxks45VaA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a} + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d': + resolution: {integrity: sha512-3Eqopkx9oNPUIzDGQi8VxH9ihkGDbXXOcgCMMh0yrEgMnphp6vgcjeiCZ2m/vNDAk1mjaxGNhtzEOV2fIX3OPw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d} version: 1.61.2 peerDependencies: '@anthropic-ai/sdk': ^0.57.0 @@ -288,8 +288,8 @@ packages: openai: optional: true - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377': - resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377} + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': + resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} version: 1.61.2 peerDependencies: '@ag-ui/core': '>=0.0.48' @@ -2609,11 +2609,11 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@4b6b71a(@ag-ui/core@0.0.57)': + '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2622,25 +2622,25 @@ snapshots: - encoding - utf-8-validate - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@4b6b71a(@types/express@5.0.6)': + '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d(@types/express@5.0.6)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2655,11 +2655,11 @@ snapshots: - supports-color - utf-8-validate - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@4b6b71a(@ag-ui/core@0.0.57)': + '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2667,58 +2667,58 @@ snapshots: - encoding - supports-color - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)': + '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@4b6b71a(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76)': + '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - zod - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2730,7 +2730,7 @@ snapshots: '@copilotkit/license-verifier@0.5.0': {} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@4b6b71a(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': dependencies: '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) '@ag-ui/client': 0.0.57 @@ -2744,9 +2744,9 @@ snapshots: '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) '@ai-sdk/mcp': 1.0.55(zod@3.25.76) '@ai-sdk/openai': 3.0.77(zod@3.25.76) - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(zod@3.25.76) + '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) '@copilotkit/license-verifier': 0.5.0 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) '@hono/node-server': 1.19.14(hono@4.12.27) '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) @@ -2792,7 +2792,7 @@ snapshots: - utf-8-validate - vue - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@4b6b71a1c79f58ba21bff5c15889c3e9e6e46377(@ag-ui/core@0.0.57)': + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 From a0b36b456bb274ae99a0fe3ec1ecd76a46b2c1fc Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 10 Jul 2026 19:33:36 +0200 Subject: [PATCH 10/15] chore: migrate to @copilotkit/channels-* packages (5914) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Swap the Bots→Channels renamed packages, pinned to the pkg.pr.new build for CopilotKit#5914, which carries the provider-agnostic claim fix so a managed bot with multiple adapters (Slack + Teams) receives all deliveries. - package.json: @copilotkit/bot* -> @copilotkit/channels* @5914 (runtime @5914) - source: rename all @copilotkit/bot* imports to @copilotkit/channels* (symbols unchanged; rename was package-name-only) - tsconfig: jsxImportSource -> @copilotkit/channels-ui - gitignore: ignore local dev/runtime process logs & bundles --- .gitignore | 4 + app/commands/__tests__/commands.test.ts | 6 +- app/commands/index.tsx | 4 +- app/components/__tests__/components.test.tsx | 8 +- app/components/index.ts | 2 +- app/components/issue-card.tsx | 6 +- app/components/issue-list.tsx | 6 +- app/components/joke-card.tsx | 6 +- app/components/page-list.tsx | 6 +- app/context/app-context.ts | 2 +- .../__tests__/confirm-write-tool.test.tsx | 4 +- .../__tests__/confirm-write.test.tsx | 4 +- app/human-in-the-loop/confirm-write-tool.tsx | 2 +- app/human-in-the-loop/confirm-write.tsx | 4 +- app/index.ts | 14 +- app/managed.ts | 12 +- app/modals/__tests__/file-issue.test.tsx | 4 +- app/modals/file-issue.tsx | 6 +- app/sender-context.ts | 4 +- app/tools/__tests__/read-thread.test.ts | 2 +- app/tools/__tests__/render-table.test.tsx | 4 +- app/tools/__tests__/render-tools.test.ts | 4 +- app/tools/__tests__/render-tools.test.tsx | 4 +- app/tools/__tests__/showcase-tools.test.tsx | 6 +- app/tools/index.ts | 2 +- app/tools/read-thread.ts | 2 +- app/tools/render-chart.tsx | 4 +- app/tools/render-diagram.tsx | 4 +- app/tools/render-table.tsx | 6 +- app/tools/render-tools.tsx | 4 +- app/tools/showcase-tools.tsx | 8 +- package.json | 16 +- pnpm-lock.yaml | 192 ++++++++++-------- tsconfig.json | 2 +- 34 files changed, 195 insertions(+), 169 deletions(-) diff --git a/.gitignore b/.gitignore index 76fabf8..af81a62 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ e2e/results state.db state.db-shm state.db-wal + +# Local dev/runtime process logs & bundles +.*.log +.*-bundle.mjs diff --git a/app/commands/__tests__/commands.test.ts b/app/commands/__tests__/commands.test.ts index f03b28a..32a84a1 100644 --- a/app/commands/__tests__/commands.test.ts +++ b/app/commands/__tests__/commands.test.ts @@ -1,8 +1,8 @@ import { describe, it, expect, vi } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; -import type { BotNode } from "@copilotkit/bot-ui"; +import { renderToIR } from "@copilotkit/channels-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; import { appCommands } from "../index.js"; -import type { CommandContext } from "@copilotkit/bot"; +import type { CommandContext } from "@copilotkit/channels"; function tags(node: BotNode | unknown, acc: string[] = []): string[] { if (!node || typeof node !== "object") return acc; diff --git a/app/commands/index.tsx b/app/commands/index.tsx index 2dc4cc1..75542a7 100644 --- a/app/commands/index.tsx +++ b/app/commands/index.tsx @@ -11,8 +11,8 @@ * surfaces with native structured args (e.g. Discord). The `options` schema * is optional and used there for registration/typing. */ -import { defineBotCommand } from "@copilotkit/bot"; -import type { BotCommand } from "@copilotkit/bot"; +import { defineBotCommand } from "@copilotkit/channels"; +import type { BotCommand } from "@copilotkit/channels"; import { senderContext } from "../sender-context.js"; import { IssueCard, JokeCard } from "../components/index.js"; import { FileIssueModal } from "../modals/file-issue.js"; diff --git a/app/components/__tests__/components.test.tsx b/app/components/__tests__/components.test.tsx index 94c7e6b..038e926 100644 --- a/app/components/__tests__/components.test.tsx +++ b/app/components/__tests__/components.test.tsx @@ -1,6 +1,6 @@ /** * Block Kit parity tests for the JSX render components. Each component is a - * `@copilotkit/bot-ui` `ComponentFn`; we assert the full + * `@copilotkit/channels-ui` `ComponentFn`; we assert the full * `renderSlackMessage(renderToIR(<… />))` output — both the `blocks` and the * attachment `accent` — against the legacy `defineSlackComponent` shapes. * @@ -15,9 +15,9 @@ * so they render identically on both Slack and Telegram. */ import { describe, it, expect } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; -import { renderTelegram } from "@copilotkit/bot-telegram"; +import { renderToIR } from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; +import { renderTelegram } from "@copilotkit/channels-telegram"; import { IssueList } from "../issue-list.js"; import { IssueCard } from "../issue-card.js"; import { PageList } from "../page-list.js"; diff --git a/app/components/index.ts b/app/components/index.ts index 0cfe842..3c488bf 100644 --- a/app/components/index.ts +++ b/app/components/index.ts @@ -1,6 +1,6 @@ /** * App-specific render components — agent-renderable Block Kit cards authored - * with the `@copilotkit/bot-ui` JSX vocabulary. + * with the `@copilotkit/channels-ui` JSX vocabulary. * * Each component is a plain `ComponentFn` returning a `` tree; its * exported zod prop schema doubles as the render-tool input schema. Render a diff --git a/app/components/issue-card.tsx b/app/components/issue-card.tsx index 7383ef9..fbe9f2f 100644 --- a/app/components/issue-card.tsx +++ b/app/components/issue-card.tsx @@ -7,7 +7,7 @@ * Use it for one issue — when the user asks about a specific issue, or * right after creating one (it doubles as the "filed!" confirmation). * - * Authored with the `@copilotkit/bot-ui` JSX vocabulary; the Block Kit + * Authored with the `@copilotkit/channels-ui` JSX vocabulary; the Block Kit * shapes are produced by `renderSlackMessage(renderToIR())`. */ import { z } from "zod"; @@ -19,8 +19,8 @@ import { Header, Message, Section, -} from "@copilotkit/bot-ui"; -import type { BotNode } from "@copilotkit/bot-ui"; +} from "@copilotkit/channels-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; import { accentForIssue, priorityGlyph, stateGlyph } from "./_status.js"; export const issueCardSchema = z.object({ diff --git a/app/components/issue-list.tsx b/app/components/issue-list.tsx index 1339c43..2f9e8b2 100644 --- a/app/components/issue-list.tsx +++ b/app/components/issue-list.tsx @@ -13,11 +13,11 @@ * it wants shown; the Slack formatting lives here. For a single issue (or * right after creating one) prefer `issue_card`, which shows a full grid. * - * Authored with the `@copilotkit/bot-ui` JSX vocabulary. + * Authored with the `@copilotkit/channels-ui` JSX vocabulary. */ import { z } from "zod"; -import { Context, Header, Message, Section } from "@copilotkit/bot-ui"; -import type { BotNode } from "@copilotkit/bot-ui"; +import { Context, Header, Message, Section } from "@copilotkit/channels-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; import { accentForIssues, stateGlyph } from "./_status.js"; const issueSchema = z.object({ diff --git a/app/components/joke-card.tsx b/app/components/joke-card.tsx index 2444960..41bf3b5 100644 --- a/app/components/joke-card.tsx +++ b/app/components/joke-card.tsx @@ -1,5 +1,5 @@ /** - * `joke-card` — a reaction demo authored with the `@copilotkit/bot-ui` JSX + * `joke-card` — a reaction demo authored with the `@copilotkit/channels-ui` JSX * vocabulary. The card carries its OWN reaction handler via ``: react 👍 on it and the per-message handler posts a joke. * @@ -10,8 +10,8 @@ * reverse-maps (ts → ref) so the SDK can find it. Self-contained: needs no * message text or thread history (which the managed path doesn't reconstruct). */ -import { Context, Message, Section } from "@copilotkit/bot-ui"; -import type { BotNode } from "@copilotkit/bot-ui"; +import { Context, Message, Section } from "@copilotkit/channels-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; export const JOKES = [ "Why do programmers prefer dark mode? Because light attracts bugs.", diff --git a/app/components/page-list.tsx b/app/components/page-list.tsx index 2f4101b..4b9e978 100644 --- a/app/components/page-list.tsx +++ b/app/components/page-list.tsx @@ -6,11 +6,11 @@ * The agent searches Notion via MCP and passes the pages it wants to * surface; the Slack formatting lives here. * - * Authored with the `@copilotkit/bot-ui` JSX vocabulary. + * Authored with the `@copilotkit/channels-ui` JSX vocabulary. */ import { z } from "zod"; -import { Context, Divider, Header, Message, Section } from "@copilotkit/bot-ui"; -import type { BotNode } from "@copilotkit/bot-ui"; +import { Context, Divider, Header, Message, Section } from "@copilotkit/channels-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; import { ACCENT } from "./_status.js"; const pageSchema = z.object({ diff --git a/app/context/app-context.ts b/app/context/app-context.ts index 27f9118..99fae07 100644 --- a/app/context/app-context.ts +++ b/app/context/app-context.ts @@ -9,7 +9,7 @@ * `context` on every turn; the agent backend surfaces them as a * system-level "App Context:" message. */ -import type { ContextEntry } from "@copilotkit/bot"; +import type { ContextEntry } from "@copilotkit/channels"; export const appContext: ReadonlyArray = [ { diff --git a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx index d111826..e9e4322 100644 --- a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx @@ -1,6 +1,6 @@ import { describe, it, expect } from "vitest"; -import { renderToIR, type BotNode } from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +import { renderToIR, type BotNode } from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; import { confirmWriteTool } from "../confirm-write-tool.js"; /** A fake thread whose `awaitChoice` records the posted UI and returns a fixed choice. */ diff --git a/app/human-in-the-loop/__tests__/confirm-write.test.tsx b/app/human-in-the-loop/__tests__/confirm-write.test.tsx index 93451ed..2015745 100644 --- a/app/human-in-the-loop/__tests__/confirm-write.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write.test.tsx @@ -4,8 +4,8 @@ import { type BotNode, type InteractionContext, type ClickHandler, -} from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +} from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; import { ConfirmWrite } from "../confirm-write.js"; /** Children of an IR node as an array (empty if none). */ diff --git a/app/human-in-the-loop/confirm-write-tool.tsx b/app/human-in-the-loop/confirm-write-tool.tsx index 90be3bb..029dc71 100644 --- a/app/human-in-the-loop/confirm-write-tool.tsx +++ b/app/human-in-the-loop/confirm-write-tool.tsx @@ -19,7 +19,7 @@ * delivery is processed (see {@link ConfirmWrite}). */ import { z } from "zod"; -import { defineBotTool } from "@copilotkit/bot"; +import { defineBotTool } from "@copilotkit/channels"; import { ConfirmWrite } from "./confirm-write.js"; export const confirmWriteSchema = z.object({ diff --git a/app/human-in-the-loop/confirm-write.tsx b/app/human-in-the-loop/confirm-write.tsx index f0728c5..5743cd8 100644 --- a/app/human-in-the-loop/confirm-write.tsx +++ b/app/human-in-the-loop/confirm-write.tsx @@ -29,8 +29,8 @@ import { Context, Actions, Button, -} from "@copilotkit/bot-ui"; -import type { InteractionContext } from "@copilotkit/bot-ui"; +} from "@copilotkit/channels-ui"; +import type { InteractionContext } from "@copilotkit/channels-ui"; export interface ConfirmWriteProps { /** Short imperative title of the write, e.g. 'Create Linear issue'. */ diff --git a/app/index.ts b/app/index.ts index 5944d4d..541daa3 100644 --- a/app/index.ts +++ b/app/index.ts @@ -5,7 +5,7 @@ * that runs on the chat-platform side of the bot for this deployment. * * MULTI-PLATFORM: this single app drives Slack, Discord, Telegram, and/or - * WhatsApp from one process. `@copilotkit/bot`'s `createBot` accepts an array + * WhatsApp from one process. `@copilotkit/channels`'s `createBot` accepts an array * of adapters and starts them all, so we include each platform's adapter only * when its secrets are present. Drop in `SLACK_*` to run Slack, `DISCORD_*` for * Discord, `TELEGRAM_BOT_TOKEN` for Telegram, `WHATSAPP_*` for WhatsApp — or any @@ -17,29 +17,29 @@ * here in the file you copy from to start a new bot. */ import "dotenv/config"; -import { createBot } from "@copilotkit/bot"; -import type { PlatformAdapter, BotTool, ContextEntry } from "@copilotkit/bot"; +import { createBot } from "@copilotkit/channels"; +import type { PlatformAdapter, BotTool, ContextEntry } from "@copilotkit/channels"; import { slack, defaultSlackTools, defaultSlackContext, SanitizingHttpAgent, -} from "@copilotkit/bot-slack"; +} from "@copilotkit/channels-slack"; import { discord, defaultDiscordTools, defaultDiscordContext, -} from "@copilotkit/bot-discord"; +} from "@copilotkit/channels-discord"; import { telegram, defaultTelegramTools, defaultTelegramContext, -} from "@copilotkit/bot-telegram"; +} from "@copilotkit/channels-telegram"; import { whatsapp, defaultWhatsAppTools, defaultWhatsAppContext, -} from "@copilotkit/bot-whatsapp"; +} from "@copilotkit/channels-whatsapp"; import { appTools } from "./tools/index.js"; import { appContext } from "./context/app-context.js"; import { appCommands } from "./commands/index.js"; diff --git a/app/managed.ts b/app/managed.ts index 0a3cde0..915e168 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -21,9 +21,9 @@ * (AGENT_URL), exactly like the direct path. */ import "dotenv/config"; -import { createBot } from "@copilotkit/bot"; -import { intelligenceAdapter } from "@copilotkit/bot-intelligence"; -import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/bot-slack"; +import { createBot } from "@copilotkit/channels"; +import { intelligenceAdapter } from "@copilotkit/channels-intelligence"; +import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/channels-slack"; import { appTools } from "./tools/index.js"; import { appContext } from "./context/app-context.js"; import { appCommands } from "./commands/index.js"; @@ -74,8 +74,10 @@ async function main() { // durable reaction snapshot re-renders the named component from this // registry (the in-process hot cache is lost across restarts). components: [JokeCard], - // The only adapter (managed adapters are exclusive). Config-free: the HTTP - // transport to Intelligence is resolved from env + this bot's name. + // The only adapter (managed adapters are exclusive). Config-free and + // provider-agnostic: one runtime instance serves this bot across every + // channel it has attached (Slack, Teams, ...). Intelligence decides the + // outbound provider per delivery from the delivery's reply_context. adapters: [intelligenceAdapter()], }); diff --git a/app/modals/__tests__/file-issue.test.tsx b/app/modals/__tests__/file-issue.test.tsx index 7b91d96..8452fb3 100644 --- a/app/modals/__tests__/file-issue.test.tsx +++ b/app/modals/__tests__/file-issue.test.tsx @@ -1,12 +1,12 @@ import { describe, it, expect, vi } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; +import { renderToIR } from "@copilotkit/channels-ui"; import { FileIssueModal, fileIssueSubmit, issueFromValues, FILE_ISSUE_CALLBACK, } from "../file-issue.js"; -import type { BotNode } from "@copilotkit/bot-ui"; +import type { BotNode } from "@copilotkit/channels-ui"; function tags(node: BotNode | unknown, acc: string[] = []): string[] { if (!node || typeof node !== "object") return acc; diff --git a/app/modals/file-issue.tsx b/app/modals/file-issue.tsx index b464f73..46e350e 100644 --- a/app/modals/file-issue.tsx +++ b/app/modals/file-issue.tsx @@ -15,9 +15,9 @@ import { ModalSelect, ModalSelectOption, RadioButtons, -} from "@copilotkit/bot-ui"; -import type { ModalView } from "@copilotkit/bot-ui"; -import type { ModalSubmitHandler } from "@copilotkit/bot"; +} from "@copilotkit/channels-ui"; +import type { ModalView } from "@copilotkit/channels-ui"; +import type { ModalSubmitHandler } from "@copilotkit/channels"; import { senderContext } from "../sender-context.js"; export const FILE_ISSUE_CALLBACK = "file_issue"; diff --git a/app/sender-context.ts b/app/sender-context.ts index 3262a30..87e3d88 100644 --- a/app/sender-context.ts +++ b/app/sender-context.ts @@ -1,5 +1,5 @@ -import type { ContextEntry } from "@copilotkit/bot"; -import type { PlatformUser } from "@copilotkit/bot-ui"; +import type { ContextEntry } from "@copilotkit/channels"; +import type { PlatformUser } from "@copilotkit/channels-ui"; /** * Build the per-turn context naming the requesting user, so the agent can act diff --git a/app/tools/__tests__/read-thread.test.ts b/app/tools/__tests__/read-thread.test.ts index 77f4195..2f99fba 100644 --- a/app/tools/__tests__/read-thread.test.ts +++ b/app/tools/__tests__/read-thread.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi } from "vitest"; import { readThreadTool } from "../read-thread.js"; -import type { ThreadMessage } from "@copilotkit/bot-ui"; +import type { ThreadMessage } from "@copilotkit/channels-ui"; /** The ctx a BotTool handler receives. */ type HandlerCtx = Parameters[1]; diff --git a/app/tools/__tests__/render-table.test.tsx b/app/tools/__tests__/render-table.test.tsx index e377137..5c85413 100644 --- a/app/tools/__tests__/render-table.test.tsx +++ b/app/tools/__tests__/render-table.test.tsx @@ -5,8 +5,8 @@ * `renderToIR` → `renderSlackMessage` yields the expected Block Kit shape. */ import { describe, it, expect } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +import { renderToIR } from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; import { renderTableTool, toMonospaceTable, clamp } from "../render-table.js"; type HandlerCtx = Parameters[1]; diff --git a/app/tools/__tests__/render-tools.test.ts b/app/tools/__tests__/render-tools.test.ts index eacfe83..9557f6b 100644 --- a/app/tools/__tests__/render-tools.test.ts +++ b/app/tools/__tests__/render-tools.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +import { renderToIR } from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; // Mock the local renderers so no headless browser is launched. const renderChart = vi.fn(async () => Buffer.from("CHARTPNG")); diff --git a/app/tools/__tests__/render-tools.test.tsx b/app/tools/__tests__/render-tools.test.tsx index 9e41608..523e158 100644 --- a/app/tools/__tests__/render-tools.test.tsx +++ b/app/tools/__tests__/render-tools.test.tsx @@ -6,8 +6,8 @@ * shape — i.e. the tool posted the right component. */ import { describe, it, expect } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +import { renderToIR } from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; import { issueCardTool, issueListTool, pageListTool } from "../render-tools.js"; /** A fake `thread` that records each posted Renderable. */ diff --git a/app/tools/__tests__/showcase-tools.test.tsx b/app/tools/__tests__/showcase-tools.test.tsx index 6622251..71d57c6 100644 --- a/app/tools/__tests__/showcase-tools.test.tsx +++ b/app/tools/__tests__/showcase-tools.test.tsx @@ -7,13 +7,13 @@ * updates the message in place with a green "Acknowledged" card. */ import { describe, it, expect, vi } from "vitest"; -import { renderToIR } from "@copilotkit/bot-ui"; +import { renderToIR } from "@copilotkit/channels-ui"; import type { BotNode, InteractionContext, ClickHandler, -} from "@copilotkit/bot-ui"; -import { renderSlackMessage } from "@copilotkit/bot-slack"; +} from "@copilotkit/channels-ui"; +import { renderSlackMessage } from "@copilotkit/channels-slack"; import { showIncidentTool, showStatusTool, diff --git a/app/tools/index.ts b/app/tools/index.ts index 257a85a..4e4371f 100644 --- a/app/tools/index.ts +++ b/app/tools/index.ts @@ -19,7 +19,7 @@ import { showLinksTool, } from "./showcase-tools.js"; import { confirmWriteTool } from "../human-in-the-loop/index.js"; -import type { BotTool } from "@copilotkit/bot"; +import type { BotTool } from "@copilotkit/channels"; /** * Every tool is a plain `BotTool`: its handler receives the generic diff --git a/app/tools/read-thread.ts b/app/tools/read-thread.ts index 1ba0e84..7249acf 100644 --- a/app/tools/read-thread.ts +++ b/app/tools/read-thread.ts @@ -11,7 +11,7 @@ * needed. */ import { z } from "zod"; -import { defineBotTool } from "@copilotkit/bot"; +import { defineBotTool } from "@copilotkit/channels"; export const readThreadTool = defineBotTool({ name: "read_thread", diff --git a/app/tools/render-chart.tsx b/app/tools/render-chart.tsx index bb07ee8..ec45c2a 100644 --- a/app/tools/render-chart.tsx +++ b/app/tools/render-chart.tsx @@ -7,8 +7,8 @@ * (``) so the tool doubles as a render-tool demo. */ import { z } from "zod"; -import { Context } from "@copilotkit/bot-ui"; -import { defineBotTool } from "@copilotkit/bot"; +import { Context } from "@copilotkit/channels-ui"; +import { defineBotTool } from "@copilotkit/channels"; import { renderChart } from "../render/chart.js"; const schema = z.object({ diff --git a/app/tools/render-diagram.tsx b/app/tools/render-diagram.tsx index c6a6816..cbbc01d 100644 --- a/app/tools/render-diagram.tsx +++ b/app/tools/render-diagram.tsx @@ -7,8 +7,8 @@ * render-tool demo. */ import { z } from "zod"; -import { Context } from "@copilotkit/bot-ui"; -import { defineBotTool } from "@copilotkit/bot"; +import { Context } from "@copilotkit/channels-ui"; +import { defineBotTool } from "@copilotkit/channels"; import { renderDiagram } from "../render/diagram.js"; const schema = z.object({ diff --git a/app/tools/render-table.tsx b/app/tools/render-table.tsx index e7b378d..0ad8854 100644 --- a/app/tools/render-table.tsx +++ b/app/tools/render-table.tsx @@ -4,15 +4,15 @@ * issues with several fields, metrics parsed from an uploaded CSV, side-by-side * comparisons — anything where a chart isn't the right shape. * - * Authored as JSX over `@copilotkit/bot-ui`'s `//` vocabulary + * Authored as JSX over `@copilotkit/channels-ui`'s `
//` vocabulary * and posted via `thread.post`. If the platform rejects the native Table block, * we fall back to a column-aligned monospace (code-fenced) table posted as a * platform-neutral `` so the data always lands — the same look the * bridge gives GFM tables in prose. */ import { z } from "zod"; -import { Message, Header, Section, Table, Row, Cell } from "@copilotkit/bot-ui"; -import { defineBotTool } from "@copilotkit/bot"; +import { Message, Header, Section, Table, Row, Cell } from "@copilotkit/channels-ui"; +import { defineBotTool } from "@copilotkit/channels"; const schema = z.object({ title: z diff --git a/app/tools/render-tools.tsx b/app/tools/render-tools.tsx index 83da148..c821a35 100644 --- a/app/tools/render-tools.tsx +++ b/app/tools/render-tools.tsx @@ -1,11 +1,11 @@ /** * Render-tools — the agent-facing wrappers that turn the JSX render * components into `BotTool`s. The agent calls `issue_card` / `issue_list` / - * `page_list`; each handler renders the finished `@copilotkit/bot-ui` + * `page_list`; each handler renders the finished `@copilotkit/channels-ui` * component (`` etc.) and posts it to the thread via * `thread.post`. */ -import { defineBotTool } from "@copilotkit/bot"; +import { defineBotTool } from "@copilotkit/channels"; import { IssueCard, IssueList, diff --git a/app/tools/showcase-tools.tsx b/app/tools/showcase-tools.tsx index f383137..7181cf5 100644 --- a/app/tools/showcase-tools.tsx +++ b/app/tools/showcase-tools.tsx @@ -1,6 +1,6 @@ /** * Showcase render-tools — three small JSX `BotTool`s that demonstrate the - * `@copilotkit/bot-ui` vocabulary end-to-end: + * `@copilotkit/channels-ui` vocabulary end-to-end: * * - `show_incident` — an interactive card whose `Acknowledge`/`Escalate` * buttons carry inline `onClick` handlers. These are FIRE-AND-FORGET @@ -20,9 +20,9 @@ import { Field, Actions, Button, -} from "@copilotkit/bot-ui"; -import type { InteractionContext } from "@copilotkit/bot-ui"; -import { defineBotTool } from "@copilotkit/bot"; +} from "@copilotkit/channels-ui"; +import type { InteractionContext } from "@copilotkit/channels-ui"; +import { defineBotTool } from "@copilotkit/channels"; // ── show_incident ────────────────────────────────────────────────────────── diff --git a/package.json b/package.json index 2f88dbe..227a74a 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/bot": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d", - "@copilotkit/bot-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d", - "@copilotkit/bot-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d", - "@copilotkit/bot-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d", - "@copilotkit/bot-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d", - "@copilotkit/bot-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d", - "@copilotkit/bot-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d", - "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d", + "@copilotkit/channels": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914", + "@copilotkit/channels-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914", + "@copilotkit/channels-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914", + "@copilotkit/channels-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914", + "@copilotkit/channels-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914", + "@copilotkit/channels-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914", + "@copilotkit/channels-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914", + "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0aeb963..8bbe203 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,30 +11,30 @@ importers: .: dependencies: - '@copilotkit/bot': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d(zod@3.25.76) - '@copilotkit/bot-discord': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d(@ag-ui/core@0.0.57) - '@copilotkit/bot-intelligence': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/bot-slack': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d(@types/express@5.0.6) - '@copilotkit/bot-telegram': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d(@ag-ui/core@0.0.57) - '@copilotkit/bot-ui': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d(@ag-ui/core@0.0.57) - '@copilotkit/bot-whatsapp': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/channels': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-discord': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-intelligence': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-slack': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-telegram': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-ui': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914(@ag-ui/core@0.0.57) + '@copilotkit/channels-whatsapp': + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/runtime': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) + specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914 + version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@slack/bolt': specifier: ^4.2.0 version: 4.7.3(@types/express@5.0.6) @@ -210,53 +210,63 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d': - resolution: {integrity: sha512-x/E4Ds/+cY0vtc5QFvvEY0OQDz5WXQj2c1r+4RV3ubBB0LDN8XLTmq+/vsAqyASHjSPADLap82o110tA25k1bw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d} + '@copilotkit/channels-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914': + resolution: {integrity: sha512-WezsJy5ki7OR6GpSNF4W8lnBvTCweJla6keJZGsUMX41hJFnggVxo1WaBBO/jNAWbSQwubTopdRsO8GFBof+JA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914} version: 0.0.2 - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d': - resolution: {integrity: sha512-yvEqxZCc7IG0ZcCz4jflziZVtRvoe0il8Q4kja6x72I43moAeObxl/D5YGdFl4mMNN8G7ipkgcFsEUY4uVze8g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d} + '@copilotkit/channels-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914': + resolution: {integrity: sha512-1OEirK9fXXmqaejZa0+o5yqQwMhiJZZNUjzVtp3e+5p9WfSeHr0wUAKZPiMPcCDOzYP0k5UhYc6dD1Ta9nDtGQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914} version: 0.1.0 - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d': - resolution: {integrity: sha512-4ZxEuOcYwr5iyQygDq+e+vPcmdBxRdGHQARfg3TJDu2dsy3Iev+dd9ZqfAyRrPv+v4RDbxs9IIR1s7nCG9HKEg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d} - version: 0.1.0 + '@copilotkit/channels-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914': + resolution: {integrity: sha512-Qe5m1W2JK3USvZD03l/k6XB+rYVoPAK/cJw/8aGtLbts+co/Rs3Guh6vFleAfa9RXPrvyEFf+qbp6lNkMiqz8w==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914} + version: 0.1.1 - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d': - resolution: {integrity: sha512-a+3rZ51FfWX+PZaQu5Q9lxEbL0xWI+S+BUbxBqXTzwKm/OZc5AM6/7KmV2CcTnDINazRHFG2ZRne2mdxl22U4w==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d} + '@copilotkit/channels-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914': + resolution: {integrity: sha512-zq9xwu7WM9Olb9k0HaMoIeVccUNFymHNi5VQJiT+lB17TmGNfqlB3rZ1EYtuQXqbhOO5E7lbVaQB56byuVQ1rA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914} version: 0.0.3 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d': - resolution: {integrity: sha512-H+kUVWNDcixBUOhwcT5aBT50M1/iU41xKhLX3ok1H352LCyMYhy2LPC9R+M5ibNRHUqtg3ITtI2cXQwmngBecg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d} + '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3': + resolution: {integrity: sha512-so0ESqtU7Hl5jUvKL5fLBqDvB+yVA1oMDcymMpz7I4BYSJA3XecNMF23KOcjHA1XMBDGwi0BQVwri7m7XksMtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3} version: 0.1.0 - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': - resolution: {integrity: sha512-H+kUVWNDcixBUOhwcT5aBT50M1/iU41xKhLX3ok1H352LCyMYhy2LPC9R+M5ibNRHUqtg3ITtI2cXQwmngBecg==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} + '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914': + resolution: {integrity: sha512-so0ESqtU7Hl5jUvKL5fLBqDvB+yVA1oMDcymMpz7I4BYSJA3XecNMF23KOcjHA1XMBDGwi0BQVwri7m7XksMtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914} version: 0.1.0 - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d': - resolution: {integrity: sha512-GS9b+5tuZcFNtqk/48DgpaYDIRjcnim4fimdAvdo4CqvYkyrjrFp3BDWfnGLOnF4uM1oRqGhR7mMPQzahEMKtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d} + '@copilotkit/channels-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914': + resolution: {integrity: sha512-SEnCQOrbuphuM/AWYugjceMmUmK288MO74CW4Vir+lNGFWPC8qbfqjYXWeTGKh/t2AutQuG243r8yqYW/BvcjQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914} version: 0.0.1 - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d': - resolution: {integrity: sha512-ZCElZSI/mXeDEJSTF6pPwlrYjoqP2ZepY2s9Vdci5oJrpFqXesASLF/uiQruX53CF/dfz5bQD1ivqjf8qL1upQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d} + '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3': + resolution: {integrity: sha512-IcT8icR5g/AN1al7p16fUqcHjF1bVvCyXcUPzmQK22QTwzaIZ7lSTl/gCnr6Z7qnqUVvvAdLExnQhFdLfU4CuQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3} version: 0.1.0 + peerDependencies: + vitest: ^4.0.0 + peerDependenciesMeta: + vitest: + optional: true - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': - resolution: {integrity: sha512-ZCElZSI/mXeDEJSTF6pPwlrYjoqP2ZepY2s9Vdci5oJrpFqXesASLF/uiQruX53CF/dfz5bQD1ivqjf8qL1upQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} + '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914': + resolution: {integrity: sha512-IcT8icR5g/AN1al7p16fUqcHjF1bVvCyXcUPzmQK22QTwzaIZ7lSTl/gCnr6Z7qnqUVvvAdLExnQhFdLfU4CuQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914} version: 0.1.0 + peerDependencies: + vitest: ^4.0.0 + peerDependenciesMeta: + vitest: + optional: true - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': - resolution: {integrity: sha512-Dt1MJBBpFR7vW/y0v5JLPRvDCVRXq+1Dlu6ASjJrzpxsbwt4bM8e1LM5eocM30i0f4AMD4gc45cZ962jOQ4XBA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} - version: 1.61.2 + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3': + resolution: {integrity: sha512-b8vAImhfz5WHPVttSdK1+ms9McRRRMBQwHFTem2PhyGfoJc86G8df0+4UF1/ItXLBcTkHfZ0X64d/ybMURg/3A==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3} + version: 1.62.3 engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d': - resolution: {integrity: sha512-3Eqopkx9oNPUIzDGQi8VxH9ihkGDbXXOcgCMMh0yrEgMnphp6vgcjeiCZ2m/vNDAk1mjaxGNhtzEOV2fIX3OPw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d} - version: 1.61.2 + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914': + resolution: {integrity: sha512-DvdtzMfqLlg5k94HhK3Qgq12uEu/weklXIor+Lwq3jpNFRrAaq5RkQqB4/ckiH4KgWR8M2/KiVyoUz/x1VRiyA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914} + version: 1.62.3 peerDependencies: '@anthropic-ai/sdk': ^0.57.0 '@langchain/aws': '>=0.1.9' @@ -288,9 +298,9 @@ packages: openai: optional: true - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0': - resolution: {integrity: sha512-ZSfXZz3/9tPMj1erphVk+hUXcEsXm+ZutCfI8wgCE7VZ+08kkFW6uJSnvFueksPjHHPtrUplMTOnyxekQyfg3g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0} - version: 1.61.2 + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3': + resolution: {integrity: sha512-dfqaYjfJzTIjMBUMOHGZGoZ+v9pumsBuM1FMi5Sb66WkzxbtIKN0CCbYXXIHd0xsEo1pa8u1vZSN30sBtJuQ7g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3} + version: 1.62.3 peerDependencies: '@ag-ui/core': '>=0.0.48' @@ -2609,11 +2619,11 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/bot-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-discord@27d935d(@ag-ui/core@0.0.57)': + '@copilotkit/channels-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2621,26 +2631,28 @@ snapshots: - bufferutil - encoding - utf-8-validate + - vitest - '@copilotkit/bot-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-intelligence@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/channels-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' - encoding + - vitest - zod - '@copilotkit/bot-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-slack@27d935d(@types/express@5.0.6)': + '@copilotkit/channels-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2654,71 +2666,78 @@ snapshots: - encoding - supports-color - utf-8-validate + - vitest - '@copilotkit/bot-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-telegram@27d935d(@ag-ui/core@0.0.57)': + '@copilotkit/channels-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: - '@ag-ui/core' - encoding - supports-color + - vitest - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d(@ag-ui/core@0.0.57)': + '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)': + '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/bot-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-whatsapp@27d935d(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/channels-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding + - vitest - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d(zod@3.25.76)': + '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) + optionalDependencies: + vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) transitivePeerDependencies: - encoding - zod - '@copilotkit/bot@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76)': + '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/bot-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot-ui@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) + optionalDependencies: + vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) transitivePeerDependencies: - encoding - zod - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2730,7 +2749,7 @@ snapshots: '@copilotkit/license-verifier@0.5.0': {} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@27d935d(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': + '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) '@ag-ui/client': 0.0.57 @@ -2744,9 +2763,9 @@ snapshots: '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) '@ai-sdk/mcp': 1.0.55(zod@3.25.76) '@ai-sdk/openai': 3.0.77(zod@3.25.76) - '@copilotkit/bot': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/bot@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(zod@3.25.76) + '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/license-verifier': 0.5.0 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57) + '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) '@hono/node-server': 1.19.14(hono@4.12.27) '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) @@ -2790,9 +2809,10 @@ snapshots: - supports-color - svelte - utf-8-validate + - vitest - vue - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@27d935d3d0c8755ef4cdad0e2f60987716fa03e0(@ag-ui/core@0.0.57)': + '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 diff --git a/tsconfig.json b/tsconfig.json index abddf5f..5e35a5b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "lib": ["es2022", "dom"], "types": ["node"], "jsx": "react-jsx", - "jsxImportSource": "@copilotkit/bot-ui" + "jsxImportSource": "@copilotkit/channels-ui" }, "include": ["app/**/*.ts", "app/**/*.tsx", "runtime.ts"], "exclude": ["node_modules", "agent", "e2e"] From 0b23db50c8a9e2deeca3c32f6494afa886b05112 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Mon, 13 Jul 2026 12:06:09 +0200 Subject: [PATCH 11/15] chore: repin @copilotkit/channels-* to published npm versions The pkg.pr.new@5914 pins pointed at the pre-merge PR build. #5914 is now merged and published to npm (channels-intelligence 0.1.1 carries the Teams conversationKey discriminated-union fix). Switch to npm semver pins. --- package.json | 16 ++--- pnpm-lock.yaml | 174 ++++++++++++++++++------------------------------- 2 files changed, 72 insertions(+), 118 deletions(-) diff --git a/package.json b/package.json index 227a74a..449e2c7 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,14 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/channels": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914", - "@copilotkit/channels-discord": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914", - "@copilotkit/channels-intelligence": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914", - "@copilotkit/channels-slack": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914", - "@copilotkit/channels-telegram": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914", - "@copilotkit/channels-ui": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914", - "@copilotkit/channels-whatsapp": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914", - "@copilotkit/runtime": "https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914", + "@copilotkit/channels": "^0.1.1", + "@copilotkit/channels-discord": "^0.0.3", + "@copilotkit/channels-intelligence": "^0.1.1", + "@copilotkit/channels-slack": "^0.1.2", + "@copilotkit/channels-telegram": "^0.0.4", + "@copilotkit/channels-ui": "^0.1.1", + "@copilotkit/channels-whatsapp": "^0.0.2", + "@copilotkit/runtime": "^1.62.3", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bbe203..61c8334 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,29 +12,29 @@ importers: .: dependencies: '@copilotkit/channels': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.1.1 + version: 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-discord': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.0.3 + version: 0.0.3(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-intelligence': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.1.1 + version: 0.1.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-slack': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.1.2 + version: 0.1.2(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-telegram': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.0.4 + version: 0.0.4(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-ui': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914(@ag-ui/core@0.0.57) + specifier: ^0.1.1 + version: 0.1.1(@ag-ui/core@0.0.57) '@copilotkit/channels-whatsapp': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.0.2 + version: 0.0.2(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/runtime': - specifier: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914 - version: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^1.62.3 + version: 1.62.3(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) '@slack/bolt': specifier: ^4.2.0 version: 4.7.3(@types/express@5.0.6) @@ -210,63 +210,41 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/channels-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914': - resolution: {integrity: sha512-WezsJy5ki7OR6GpSNF4W8lnBvTCweJla6keJZGsUMX41hJFnggVxo1WaBBO/jNAWbSQwubTopdRsO8GFBof+JA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914} - version: 0.0.2 + '@copilotkit/channels-discord@0.0.3': + resolution: {integrity: sha512-UXkWHcQJ9kLDkkGMXC3NyHuYwdVxWW09uyn1wm9er5tcL5/ZK12gvqgnj7G5j5pF7VI0qWXQ+ZvO3uZENo7o0A==} - '@copilotkit/channels-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914': - resolution: {integrity: sha512-1OEirK9fXXmqaejZa0+o5yqQwMhiJZZNUjzVtp3e+5p9WfSeHr0wUAKZPiMPcCDOzYP0k5UhYc6dD1Ta9nDtGQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914} - version: 0.1.0 + '@copilotkit/channels-intelligence@0.1.1': + resolution: {integrity: sha512-lS3vzbuRaeLTE+ucdsinBd9YHdm4lqUjvA57wowGMs+/WUZKzKCLGiE9BYOErQzo0PaM8MTx8TomTzNSny287w==} - '@copilotkit/channels-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914': - resolution: {integrity: sha512-Qe5m1W2JK3USvZD03l/k6XB+rYVoPAK/cJw/8aGtLbts+co/Rs3Guh6vFleAfa9RXPrvyEFf+qbp6lNkMiqz8w==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914} - version: 0.1.1 + '@copilotkit/channels-slack@0.1.2': + resolution: {integrity: sha512-h8VR+raH1GvdNxEuNcpGMe7TayZxzj33xobq6RCCU4hLu15jadCyYj9CXArYIcwyManlbWE5jqi6n8cla23E0g==} - '@copilotkit/channels-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914': - resolution: {integrity: sha512-zq9xwu7WM9Olb9k0HaMoIeVccUNFymHNi5VQJiT+lB17TmGNfqlB3rZ1EYtuQXqbhOO5E7lbVaQB56byuVQ1rA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914} - version: 0.0.3 + '@copilotkit/channels-telegram@0.0.4': + resolution: {integrity: sha512-LyzGU9wHVPPc7MsR9+w1kBXcEqotI3k8XRJLola99ktzEpAtXTwCmBlnyh+j7UTCMXsRTjKz9eC6ULxDy82GbQ==} - '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3': - resolution: {integrity: sha512-so0ESqtU7Hl5jUvKL5fLBqDvB+yVA1oMDcymMpz7I4BYSJA3XecNMF23KOcjHA1XMBDGwi0BQVwri7m7XksMtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3} - version: 0.1.0 + '@copilotkit/channels-ui@0.1.1': + resolution: {integrity: sha512-wQ099E62DEhIuKz8O9Iqy1VP4qCyLtS8d5EwfF2MK8m8amWtuyyTUxV8vC1q9ecJMgAwCtKmeW/fYQR8NsLiXQ==} - '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914': - resolution: {integrity: sha512-so0ESqtU7Hl5jUvKL5fLBqDvB+yVA1oMDcymMpz7I4BYSJA3XecNMF23KOcjHA1XMBDGwi0BQVwri7m7XksMtw==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914} - version: 0.1.0 + '@copilotkit/channels-whatsapp@0.0.2': + resolution: {integrity: sha512-T2eCeY6NXSAZbdQsARhhpLGsXP667wWqgsWpMPXy+dULvGhemw/ueyijV5/kEzMnxlaBoZ4TuGClXweMtDxZfw==} - '@copilotkit/channels-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914': - resolution: {integrity: sha512-SEnCQOrbuphuM/AWYugjceMmUmK288MO74CW4Vir+lNGFWPC8qbfqjYXWeTGKh/t2AutQuG243r8yqYW/BvcjQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914} - version: 0.0.1 - - '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3': - resolution: {integrity: sha512-IcT8icR5g/AN1al7p16fUqcHjF1bVvCyXcUPzmQK22QTwzaIZ7lSTl/gCnr6Z7qnqUVvvAdLExnQhFdLfU4CuQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3} - version: 0.1.0 - peerDependencies: - vitest: ^4.0.0 - peerDependenciesMeta: - vitest: - optional: true - - '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914': - resolution: {integrity: sha512-IcT8icR5g/AN1al7p16fUqcHjF1bVvCyXcUPzmQK22QTwzaIZ7lSTl/gCnr6Z7qnqUVvvAdLExnQhFdLfU4CuQ==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914} - version: 0.1.0 + '@copilotkit/channels@0.1.1': + resolution: {integrity: sha512-v/cOFfRZWKXstrj06YZmR5kikE9XhXluuJa81hZEhZ4I9C3U+Lnao1K5pL5DtmhUbowynMvBedVUNqKwGFLCvQ==} peerDependencies: vitest: ^4.0.0 peerDependenciesMeta: vitest: optional: true - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3': - resolution: {integrity: sha512-b8vAImhfz5WHPVttSdK1+ms9McRRRMBQwHFTem2PhyGfoJc86G8df0+4UF1/ItXLBcTkHfZ0X64d/ybMURg/3A==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3} - version: 1.62.3 + '@copilotkit/core@1.62.3': + resolution: {integrity: sha512-Iw0XTJDylh4DTL1qqqoDSvMeL4lXGWfn8UAunnvYtVZ2BF3gs6Lw6K/yOQ0gGQKMqIxeQmgLVclErxwBcaJ8KQ==} engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914': - resolution: {integrity: sha512-DvdtzMfqLlg5k94HhK3Qgq12uEu/weklXIor+Lwq3jpNFRrAaq5RkQqB4/ckiH4KgWR8M2/KiVyoUz/x1VRiyA==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914} - version: 1.62.3 + '@copilotkit/runtime@1.62.3': + resolution: {integrity: sha512-pOyQbd0IGH/rmyZ7yoGodc2FRicO3AXBI6y7lQDGjbat2lI9SLhsGQve7O3QfeYH0UZ4T9019EgnnKtSN7ImUQ==} peerDependencies: '@anthropic-ai/sdk': ^0.57.0 '@langchain/aws': '>=0.1.9' @@ -298,9 +276,8 @@ packages: openai: optional: true - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3': - resolution: {integrity: sha512-dfqaYjfJzTIjMBUMOHGZGoZ+v9pumsBuM1FMi5Sb66WkzxbtIKN0CCbYXXIHd0xsEo1pa8u1vZSN30sBtJuQ7g==, tarball: https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3} - version: 1.62.3 + '@copilotkit/shared@1.62.3': + resolution: {integrity: sha512-dfqaYjfJzTIjMBUMOHGZGoZ+v9pumsBuM1FMi5Sb66WkzxbtIKN0CCbYXXIHd0xsEo1pa8u1vZSN30sBtJuQ7g==} peerDependencies: '@ag-ui/core': '>=0.0.48' @@ -2619,11 +2596,11 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/channels-discord@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-discord@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-discord@0.0.3(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2633,11 +2610,11 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-intelligence@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-intelligence@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-intelligence@0.1.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' @@ -2645,14 +2622,14 @@ snapshots: - vitest - zod - '@copilotkit/channels-slack@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-slack@5914(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-slack@0.1.2(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2668,11 +2645,11 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-telegram@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-telegram@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-telegram@0.0.4(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2681,38 +2658,31 @@ snapshots: - supports-color - vitest - '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)': - dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) - transitivePeerDependencies: - - '@ag-ui/core' - - encoding - - '@copilotkit/channels-ui@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@5914(@ag-ui/core@0.0.57)': + '@copilotkit/channels-ui@0.1.1(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/channels-whatsapp@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-whatsapp@5914(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-whatsapp@0.0.2(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - vitest - zod - '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels@0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) optionalDependencies: vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) @@ -2720,24 +2690,10 @@ snapshots: - encoding - zod - '@copilotkit/channels@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@5914(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/core@1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@ag-ui/core': 0.0.57 - '@copilotkit/channels-ui': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels-ui@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) - '@copilotkit/core': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) - zod-to-json-schema: 3.25.2(zod@3.25.76) - optionalDependencies: - vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) - transitivePeerDependencies: - - encoding - - zod - - '@copilotkit/core@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/core@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)(zod@3.25.76)': - dependencies: - '@ag-ui/client': 0.0.57 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2749,7 +2705,7 @@ snapshots: '@copilotkit/license-verifier@0.5.0': {} - '@copilotkit/runtime@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/runtime@5914(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/runtime@1.62.3(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76))': dependencies: '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.57)(rxjs@7.8.2) '@ag-ui/client': 0.0.57 @@ -2763,9 +2719,8 @@ snapshots: '@ai-sdk/google-vertex': 3.0.143(zod@3.25.76) '@ai-sdk/mcp': 1.0.55(zod@3.25.76) '@ai-sdk/openai': 3.0.77(zod@3.25.76) - '@copilotkit/channels': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/channels@2a16becf611339a30083d2cf3f3a072b346bb4b3(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/license-verifier': 0.5.0 - '@copilotkit/shared': https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) '@graphql-yoga/plugin-defer-stream': 3.21.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2) '@hono/node-server': 1.19.14(hono@4.12.27) '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0) @@ -2809,10 +2764,9 @@ snapshots: - supports-color - svelte - utf-8-validate - - vitest - vue - '@copilotkit/shared@https://pkg.pr.new/CopilotKit/CopilotKit/@copilotkit/shared@2a16becf611339a30083d2cf3f3a072b346bb4b3(@ag-ui/core@0.0.57)': + '@copilotkit/shared@1.62.3(@ag-ui/core@0.0.57)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 From d6a807783136a9e0b6a610f16648df8f1980cdbc Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Tue, 14 Jul 2026 19:16:28 +0200 Subject: [PATCH 12/15] managed: fire reactions on Teams reaction types + register ConfirmWrite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - onReaction now triggers on Teams' fixed reaction types (like/heart/laugh/…) in addition to the Slack redo emoji, so the reaction demo works on Teams. - Register ConfirmWrite in the components list so a Teams Action.Submit HITL click can re-render + resolve the approve/cancel handler across the managed delivery boundary (otherwise the interaction dead-letters). --- app/managed.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/app/managed.ts b/app/managed.ts index 915e168..c830319 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -28,6 +28,7 @@ import { appTools } from "./tools/index.js"; import { appContext } from "./context/app-context.js"; import { appCommands } from "./commands/index.js"; import { JokeCard, pickJoke } from "./components/index.js"; +import { ConfirmWrite } from "./human-in-the-loop/index.js"; import { senderContext } from "./sender-context.js"; import { closeBrowser } from "./render/browser.js"; @@ -70,10 +71,13 @@ async function main() { context: [...appContext, ...defaultSlackContext], commands: appCommands, // Register components rendered via `thread.post()` so their - // `` handlers survive a managed-loop restart: the - // durable reaction snapshot re-renders the named component from this - // registry (the in-process hot cache is lost across restarts). - components: [JokeCard], + // interactive handlers survive the managed delivery boundary: the durable + // snapshot re-renders the named component from this registry to resolve the + // clicked action (the in-process hot cache is lost across deliveries). + // ConfirmWrite carries the HITL approve/cancel `onClick`, so it MUST be here + // or a Teams Action.Submit click can't resolve and the interaction + // dead-letters (JokeCard is here for the same reason, for reactions). + components: [JokeCard, ConfirmWrite], // The only adapter (managed adapters are exclusive). Config-free and // provider-agnostic: one runtime instance serves this bot across every // channel it has attached (Slack, Teams, ...). Intelligence decides the @@ -123,7 +127,21 @@ async function main() { // arrives keyed by the real Slack ts (which app-api doesn't map back yet), so // only a global handler resolves. Fires on ADD only, ignores other emoji. bot.onReaction(async ({ added, rawEmoji, thread }) => { - if (!added || rawEmoji !== REDO_EMOJI) return; + // Slack sends emoji shortnames (e.g. `arrows_counterclockwise`); Teams sends + // its fixed reaction types (`like`/`heart`/`laugh`/`surprised`/`sad`/`angry`). + // Trigger on the Slack redo emoji OR any Teams reaction so the demo works on + // both surfaces. + const TEAMS_REACTIONS = new Set([ + "like", + "heart", + "laugh", + "surprised", + "sad", + "angry", + ]); + if (!added || (rawEmoji !== REDO_EMOJI && !TEAMS_REACTIONS.has(rawEmoji))) { + return; + } try { await thread.post(`🎲 ${pickJoke()}`); } catch (err) { From e9d92020cf9fab8c2d02901a985ca73a2ec01e02 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Wed, 15 Jul 2026 19:57:20 +0200 Subject: [PATCH 13/15] fix(render): isolate chart rendering in a child process MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Launching Chromium in-process crashed the long-lived runtime natively (a connection reset mid-stream) whenever a chart rendered. Render in a throwaway child process (render-worker.mjs) so a Chromium crash kills only the child — the runtime survives and renderChart throws a normal error instead. --- app/render/chart.ts | 85 ++++++++++++++++++------------------ app/render/render-worker.mjs | 66 ++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 43 deletions(-) create mode 100644 app/render/render-worker.mjs diff --git a/app/render/chart.ts b/app/render/chart.ts index 2cda7ad..e638050 100644 --- a/app/render/chart.ts +++ b/app/render/chart.ts @@ -1,53 +1,52 @@ /** - * Render a Chart.js config to a PNG, locally, in headless Chromium. - * The agent produces the Chart.js config (type + data + options); we draw it - * to a canvas and screenshot it. Chart.js is loaded from a CDN into our own - * browser — the chart *data* never leaves the host. + * Render a Chart.js config to a PNG. The agent produces the Chart.js config + * (type + data + options); we draw it in headless Chromium and screenshot it. + * Chart.js is loaded from a CDN — the chart *data* never leaves the host. + * + * The render runs in a throwaway child process (render-worker.mjs), NOT in the + * runtime process: launching Chromium in the long-lived runtime crashed it + * natively (connection reset mid-stream). Isolating it means a Chromium crash + * kills only the child — the runtime survives and this throws a normal error. */ -import { getBrowser } from "./browser.js"; +import { execFile } from "node:child_process"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; -const CHART_JS_CDN = - process.env["CHART_JS_URL"] ?? - "https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.js"; +const WORKER = join(dirname(fileURLToPath(import.meta.url)), "render-worker.mjs"); +const CHART_JS_CDN = process.env["CHART_JS_URL"]; +// A cold Chromium launch + CDN fetch + screenshot; generous but bounded so a +// wedged browser can never hang the turn (the child is killed on timeout). +const RENDER_TIMEOUT_MS = 30_000; -export async function renderChart( +export function renderChart( spec: Record, opts: { width?: number; height?: number } = {}, ): Promise { - const width = opts.width ?? 720; - const height = opts.height ?? 440; - const browser = await getBrowser(); - const page = await browser.newPage({ - viewport: { width, height }, - deviceScaleFactor: 2, + const payload = JSON.stringify({ + spec, + width: opts.width ?? 720, + height: opts.height ?? 440, + ...(CHART_JS_CDN ? { chartJsUrl: CHART_JS_CDN } : {}), }); - try { - await page.setContent( - `` + - ``, + + return new Promise((resolve, reject) => { + const child = execFile( + process.execPath, + [WORKER], + { maxBuffer: 32 * 1024 * 1024, encoding: "buffer", timeout: RENDER_TIMEOUT_MS }, + (err, stdout, stderr) => { + if (err) { + const detail = (stderr as Buffer | undefined)?.toString().trim(); + reject( + new Error( + `chart render subprocess failed: ${detail || err.message}`, + ), + ); + return; + } + resolve(stdout as Buffer); + }, ); - await page.addScriptTag({ url: CHART_JS_CDN }); - const err = await page.evaluate((spec) => { - const el = document.getElementById("c") as HTMLCanvasElement | null; - if (!el) return "no canvas"; - const s = spec as { options?: Record }; - s.options = { ...(s.options ?? {}), animation: false, responsive: false }; - try { - // @ts-expect-error Chart is injected by the CDN script - new Chart(el.getContext("2d"), s); - return null; - } catch (e) { - return String((e as Error)?.message ?? e); - } - }, spec); - if (err) throw new Error(`Chart.js render failed: ${err}`); - // Chart.js with animation disabled paints synchronously; a tiny settle - // guards against font/layout reflow. - await page.waitForTimeout(120); - const canvas = await page.$("#c"); - if (!canvas) throw new Error("canvas disappeared"); - return (await canvas.screenshot({ type: "png" })) as Buffer; - } finally { - await page.close(); - } + child.stdin?.end(payload); + }); } diff --git a/app/render/render-worker.mjs b/app/render/render-worker.mjs new file mode 100644 index 0000000..bb5de59 --- /dev/null +++ b/app/render/render-worker.mjs @@ -0,0 +1,66 @@ +/** + * Isolated chart renderer — runs in a throwaway child process (see chart.ts). + * + * Launching Chromium *inside* the long-lived runtime process crashes it + * natively (no JS stack, connection reset mid-stream). Rendering in a child + * process contains that: a Chromium crash kills only this worker, the parent + * sees a non-zero exit and throws a normal error, and the runtime stays up. + * + * Protocol: read a JSON `{ spec, width, height, chartJsUrl }` from stdin, write + * the raw PNG bytes to stdout, exit 0. On failure, write the reason to stderr + * and exit 1. Nothing but the PNG ever goes to stdout. + */ +import { chromium } from "playwright"; + +async function main() { + const chunks = []; + for await (const c of process.stdin) chunks.push(c); + const { spec, width = 720, height = 440, chartJsUrl } = JSON.parse( + Buffer.concat(chunks).toString("utf8"), + ); + const cdn = + chartJsUrl ?? + "https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.js"; + + const browser = await chromium.launch({ args: ["--no-sandbox"] }); + try { + const page = await browser.newPage({ + viewport: { width, height }, + deviceScaleFactor: 2, + }); + await page.setContent( + `` + + ``, + ); + await page.addScriptTag({ url: cdn }); + const err = await page.evaluate((spec) => { + const el = document.getElementById("c"); + if (!el) return "no canvas"; + spec.options = { ...(spec.options ?? {}), animation: false, responsive: false }; + try { + // eslint-disable-next-line no-undef -- Chart is injected by the CDN script + new Chart(el.getContext("2d"), spec); + return null; + } catch (e) { + return String(e?.message ?? e); + } + }, spec); + if (err) throw new Error(`Chart.js render failed: ${err}`); + // Chart.js with animation disabled paints synchronously; a tiny settle + // guards against font/layout reflow. + await page.waitForTimeout(120); + const canvas = await page.$("#c"); + if (!canvas) throw new Error("canvas disappeared"); + const png = await canvas.screenshot({ type: "png" }); + process.stdout.write(png); + } finally { + await browser.close(); + } +} + +main() + .then(() => process.exit(0)) + .catch((e) => { + console.error(e?.stack ?? String(e)); + process.exit(1); + }); From 6eaae27beb99850b70bf7c13e931684dd2d19411 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 16 Jul 2026 18:04:30 +0200 Subject: [PATCH 14/15] feat: adopt @copilotkit/channels 0.2.0 and harden the managed Teams path - Migrate from the 0.1.x Bot* API to the 0.2.0 Channel* API (createBot->createChannel, defineBotTool/defineBotCommand->defineChannel*, BotNode->ChannelNode, and related types) across app/, tools, components, human-in-the-loop, and tests. Align channels-* deps to 0.2.0. - managed: keep the process alive after channel.start(). 0.2.0's HTTP delivery source paces its poll loop with unref()'d timers, so nothing held the event loop open and the managed loop exited on startup. - render: raise the chart render ceiling to 90s (a cold Chromium launch is slow under host memory pressure) and harden the render_chart schema (coerce numeric labels and quoted numbers, accept any options shape) so a slightly off model payload cannot fail the whole tool call. Log render failures. - managed: trigger the reaction-joke demo on any Teams reaction (Teams sends emoji codes like 1f504_refresh, not the classic like/heart names). Interim until the SDK exposes a canonical cross-platform reaction value. --- app/commands/__tests__/commands.test.ts | 8 +- app/commands/index.tsx | 18 +- app/components/issue-card.tsx | 4 +- app/components/issue-list.tsx | 4 +- app/components/joke-card.tsx | 4 +- app/components/page-list.tsx | 6 +- .../__tests__/confirm-write-tool.test.tsx | 6 +- .../__tests__/confirm-write.test.tsx | 22 +- app/human-in-the-loop/confirm-write-tool.tsx | 4 +- app/index.ts | 24 +- app/managed.ts | 38 ++- app/modals/__tests__/file-issue.test.tsx | 8 +- app/render/chart.ts | 8 +- app/sender-context.ts | 2 +- app/tools/__tests__/read-thread.test.ts | 4 +- app/tools/__tests__/render-tools.test.ts | 2 +- app/tools/__tests__/showcase-tools.test.tsx | 10 +- app/tools/index.ts | 12 +- app/tools/read-thread.ts | 8 +- app/tools/render-chart.tsx | 28 +- app/tools/render-diagram.tsx | 4 +- app/tools/render-table.tsx | 4 +- app/tools/render-tools.tsx | 10 +- app/tools/showcase-tools.tsx | 10 +- package.json | 18 +- pnpm-lock.yaml | 317 +++++++++++++++--- 26 files changed, 417 insertions(+), 166 deletions(-) diff --git a/app/commands/__tests__/commands.test.ts b/app/commands/__tests__/commands.test.ts index 32a84a1..c18f31d 100644 --- a/app/commands/__tests__/commands.test.ts +++ b/app/commands/__tests__/commands.test.ts @@ -1,14 +1,14 @@ import { describe, it, expect, vi } from "vitest"; import { renderToIR } from "@copilotkit/channels-ui"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; import { appCommands } from "../index.js"; import type { CommandContext } from "@copilotkit/channels"; -function tags(node: BotNode | unknown, acc: string[] = []): string[] { +function tags(node: ChannelNode | unknown, acc: string[] = []): string[] { if (!node || typeof node !== "object") return acc; - const n = node as BotNode; + const n = node as ChannelNode; if (typeof n.type === "string") acc.push(n.type); - for (const c of (n.props?.children as BotNode[] | undefined) ?? []) { + for (const c of (n.props?.children as ChannelNode[] | undefined) ?? []) { tags(c, acc); } return acc; diff --git a/app/commands/index.tsx b/app/commands/index.tsx index 75542a7..6d221cb 100644 --- a/app/commands/index.tsx +++ b/app/commands/index.tsx @@ -1,6 +1,6 @@ /** * Slash commands for this bot. Each is registered with the engine via - * `createBot({ commands })`; the Slack adapter forwards every `/command` it + * `createChannel({ commands })`; the Slack adapter forwards every `/command` it * receives and the engine routes by name (ignoring unregistered ones). * * NOTE: a slash command only fires if it's also declared in the Slack app @@ -11,18 +11,18 @@ * surfaces with native structured args (e.g. Discord). The `options` schema * is optional and used there for registration/typing. */ -import { defineBotCommand } from "@copilotkit/channels"; -import type { BotCommand } from "@copilotkit/channels"; +import { defineChannelCommand } from "@copilotkit/channels"; +import type { ChannelCommand } from "@copilotkit/channels"; import { senderContext } from "../sender-context.js"; import { IssueCard, JokeCard } from "../components/index.js"; import { FileIssueModal } from "../modals/file-issue.js"; -export const appCommands: BotCommand[] = [ +export const appCommands: ChannelCommand[] = [ // `/agent ` — a mention-free entry point. (Previously hardcoded in the // adapter; now an ordinary, app-owned command.) Runs the agent with the // command text as the user prompt, since slash-command args are never // posted to the channel for the agent to read from history. - defineBotCommand({ + defineChannelCommand({ name: "agent", description: "Ask the triage agent anything (no @mention needed).", async handler({ thread, text, user }) { @@ -39,7 +39,7 @@ export const appCommands: BotCommand[] = [ // `/triage [note]` — summarize the current channel/thread and propose Linear // issues to file. Demonstrates a command with its own intent. - defineBotCommand({ + defineChannelCommand({ name: "triage", description: "Summarize the conversation and propose Linear issues to file.", @@ -60,7 +60,7 @@ export const appCommands: BotCommand[] = [ // a native only-you message; Discord and Telegram have no ephemeral surface, so // `fallbackToDM: true` sends it as a direct message instead. We narrate which // path was taken so the degradation is visible, never silent. - defineBotCommand({ + defineChannelCommand({ name: "preview", description: "Privately preview the issue I'd file (only you see it).", async handler({ thread, text, user, platform }) { @@ -105,7 +105,7 @@ export const appCommands: BotCommand[] = [ // dropdowns/radio drop and defaults apply (see FileIssueModal). // - Telegram→ no modal trigger at all (`ctx.openModal` is undefined), so we // say so and continue the same job conversationally via the agent. - defineBotCommand({ + defineChannelCommand({ name: "file-issue", description: "Open a form to file a Linear issue.", async handler({ thread, openModal, platform, user }) { @@ -138,7 +138,7 @@ export const appCommands: BotCommand[] = [ // tells a joke. (Reacting 🔄 on any message uses the global handler in // app/managed.ts.) Posted as a component element (``) so the // handler persists durably and survives a managed-loop restart. - defineBotCommand({ + defineChannelCommand({ name: "joke", description: "Post a card — react 👍 on it and it tells a joke.", async handler({ thread }) { diff --git a/app/components/issue-card.tsx b/app/components/issue-card.tsx index fbe9f2f..04f26a8 100644 --- a/app/components/issue-card.tsx +++ b/app/components/issue-card.tsx @@ -20,7 +20,7 @@ import { Message, Section, } from "@copilotkit/channels-ui"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; import { accentForIssue, priorityGlyph, stateGlyph } from "./_status.js"; export const issueCardSchema = z.object({ @@ -51,7 +51,7 @@ export const issueCardSchema = z.object({ export type IssueCardProps = z.infer; /** Render ONE Linear issue as a rich Block Kit card. */ -export function IssueCard(issue: IssueCardProps): BotNode { +export function IssueCard(issue: IssueCardProps): ChannelNode { const titleText = issue.url ? `[**${issue.title}**](${issue.url})` : `**${issue.title}**`; diff --git a/app/components/issue-list.tsx b/app/components/issue-list.tsx index 2f9e8b2..f410756 100644 --- a/app/components/issue-list.tsx +++ b/app/components/issue-list.tsx @@ -17,7 +17,7 @@ */ import { z } from "zod"; import { Context, Header, Message, Section } from "@copilotkit/channels-ui"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; import { accentForIssues, stateGlyph } from "./_status.js"; const issueSchema = z.object({ @@ -59,7 +59,7 @@ const MAX = 15; const TITLE_MAX = 70; /** Render a list of Linear issues as a compact, fixed-size Block Kit card. */ -export function IssueList({ heading, issues }: IssueListProps): BotNode { +export function IssueList({ heading, issues }: IssueListProps): ChannelNode { const lines = issues.slice(0, MAX).map((issue: Issue) => { const idLink = issue.url ? `[**${issue.identifier}**](${issue.url})` diff --git a/app/components/joke-card.tsx b/app/components/joke-card.tsx index 41bf3b5..d1117b9 100644 --- a/app/components/joke-card.tsx +++ b/app/components/joke-card.tsx @@ -11,7 +11,7 @@ * message text or thread history (which the managed path doesn't reconstruct). */ import { Context, Message, Section } from "@copilotkit/channels-ui"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; export const JOKES = [ "Why do programmers prefer dark mode? Because light attracts bugs.", @@ -30,7 +30,7 @@ export const pickJoke = (): string => const THUMBS_UP = new Set(["+1", "thumbsup"]); /** A card whose OWN `` tells a joke when you react 👍. */ -export function JokeCard(): BotNode { +export function JokeCard(): ChannelNode { return ( { diff --git a/app/components/page-list.tsx b/app/components/page-list.tsx index 4b9e978..f1c63f4 100644 --- a/app/components/page-list.tsx +++ b/app/components/page-list.tsx @@ -10,7 +10,7 @@ */ import { z } from "zod"; import { Context, Divider, Header, Message, Section } from "@copilotkit/channels-ui"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; import { ACCENT } from "./_status.js"; const pageSchema = z.object({ @@ -39,8 +39,8 @@ export type PageListProps = z.infer; type Page = z.infer; /** Render a list of Notion pages as a Block Kit card. */ -export function PageList({ heading, pages }: PageListProps): BotNode { - const rows: BotNode[] = []; +export function PageList({ heading, pages }: PageListProps): ChannelNode { + const rows: ChannelNode[] = []; pages.forEach((page: Page, i: number) => { const titleLink = page.url ? `[**${page.title}**](${page.url})` diff --git a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx index e9e4322..322c1cc 100644 --- a/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write-tool.test.tsx @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { renderToIR, type BotNode } from "@copilotkit/channels-ui"; +import { renderToIR, type ChannelNode } from "@copilotkit/channels-ui"; import { renderSlackMessage } from "@copilotkit/channels-slack"; import { confirmWriteTool } from "../confirm-write-tool.js"; @@ -32,7 +32,7 @@ describe("confirm_write tool", () => { // The posted UI is a ConfirmWrite picker: amber accent + header carrying the action. expect(awaited).toHaveLength(1); const { blocks, accent } = renderSlackMessage( - renderToIR(awaited[0] as BotNode), + renderToIR(awaited[0] as ChannelNode), ); expect(accent).toBe("#E2B340"); const header = blocks.find((b) => b.type === "header") as @@ -79,7 +79,7 @@ describe("confirm_write tool", () => { // Posts the ConfirmWrite picker (amber accent, action in header). expect(posted).toHaveLength(1); const { blocks, accent } = renderSlackMessage( - renderToIR(posted[0] as BotNode), + renderToIR(posted[0] as ChannelNode), ); expect(accent).toBe("#E2B340"); const header = blocks.find((b) => b.type === "header") as diff --git a/app/human-in-the-loop/__tests__/confirm-write.test.tsx b/app/human-in-the-loop/__tests__/confirm-write.test.tsx index 2015745..8b527c2 100644 --- a/app/human-in-the-loop/__tests__/confirm-write.test.tsx +++ b/app/human-in-the-loop/__tests__/confirm-write.test.tsx @@ -1,7 +1,7 @@ import { describe, it, expect, vi } from "vitest"; import { renderToIR, - type BotNode, + type ChannelNode, type InteractionContext, type ClickHandler, } from "@copilotkit/channels-ui"; @@ -9,27 +9,27 @@ import { renderSlackMessage } from "@copilotkit/channels-slack"; import { ConfirmWrite } from "../confirm-write.js"; /** Children of an IR node as an array (empty if none). */ -function childNodes(node: BotNode): BotNode[] { +function childNodes(node: ChannelNode): ChannelNode[] { const children = node.props?.children; - if (Array.isArray(children)) return children as BotNode[]; + if (Array.isArray(children)) return children as ChannelNode[]; if ( children && typeof children === "object" && "type" in (children as object) ) { - return [children as BotNode]; + return [children as ChannelNode]; } return []; } /** Concatenate the text of all descendant `text` nodes (depth-first). */ -function collectText(node: BotNode): string { +function collectText(node: ChannelNode): string { if (node.type === "text") return String(node.props?.value ?? ""); return childNodes(node).map(collectText).join(""); } /** Walk the whole tree to find the first node of a given intrinsic type. */ -function findByType(nodes: BotNode[], type: string): BotNode | undefined { +function findByType(nodes: ChannelNode[], type: string): ChannelNode | undefined { for (const n of nodes) { if (n.type === type) return n; const hit = findByType(childNodes(n), type); @@ -39,8 +39,8 @@ function findByType(nodes: BotNode[], type: string): BotNode | undefined { } /** All button nodes in the tree. */ -function findButtons(nodes: BotNode[]): BotNode[] { - const out: BotNode[] = []; +function findButtons(nodes: ChannelNode[]): ChannelNode[] { + const out: ChannelNode[] = []; for (const n of nodes) { if (n.type === "button") out.push(n); out.push(...findButtons(childNodes(n))); @@ -48,7 +48,7 @@ function findButtons(nodes: BotNode[]): BotNode[] { return out; } -function buttonByText(ir: BotNode[], text: string): BotNode { +function buttonByText(ir: ChannelNode[], text: string): ChannelNode { const btn = findButtons(ir).find((b) => collectText(b) === text); if (!btn) throw new Error(`button "${text}" not found`); return btn; @@ -180,7 +180,7 @@ describe("ConfirmWrite", () => { const create = buttonByText(ir, "Create"); const update = vi.fn(async () => ({ id: "m1" })); - const runAgent = vi.fn(async () => ({ id: "m2" })); + const runAgent = vi.fn(async (_input?: unknown) => ({ id: "m2" })); const ctx = { thread: { supportsBlockingChoice: false, update, runAgent }, message: { ref: { id: "m1" } }, @@ -202,7 +202,7 @@ describe("ConfirmWrite", () => { const cancel = buttonByText(ir, "Cancel"); const update = vi.fn(async () => ({ id: "m1" })); - const runAgent = vi.fn(async () => ({ id: "m2" })); + const runAgent = vi.fn(async (_input?: unknown) => ({ id: "m2" })); const ctx = { thread: { supportsBlockingChoice: false, update, runAgent }, message: { ref: { id: "m1" } }, diff --git a/app/human-in-the-loop/confirm-write-tool.tsx b/app/human-in-the-loop/confirm-write-tool.tsx index 029dc71..de99d9e 100644 --- a/app/human-in-the-loop/confirm-write-tool.tsx +++ b/app/human-in-the-loop/confirm-write-tool.tsx @@ -19,7 +19,7 @@ * delivery is processed (see {@link ConfirmWrite}). */ import { z } from "zod"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; import { ConfirmWrite } from "./confirm-write.js"; export const confirmWriteSchema = z.object({ @@ -36,7 +36,7 @@ export const confirmWriteSchema = z.object({ ), }); -export const confirmWriteTool = defineBotTool({ +export const confirmWriteTool = defineChannelTool({ name: "confirm_write", description: "Ask the user to approve a write before you perform it. Posts a " + diff --git a/app/index.ts b/app/index.ts index 541daa3..ca00a38 100644 --- a/app/index.ts +++ b/app/index.ts @@ -5,7 +5,7 @@ * that runs on the chat-platform side of the bot for this deployment. * * MULTI-PLATFORM: this single app drives Slack, Discord, Telegram, and/or - * WhatsApp from one process. `@copilotkit/channels`'s `createBot` accepts an array + * WhatsApp from one process. `@copilotkit/channels`'s `createChannel` accepts an array * of adapters and starts them all, so we include each platform's adapter only * when its secrets are present. Drop in `SLACK_*` to run Slack, `DISCORD_*` for * Discord, `TELEGRAM_BOT_TOKEN` for Telegram, `WHATSAPP_*` for WhatsApp — or any @@ -17,8 +17,8 @@ * here in the file you copy from to start a new bot. */ import "dotenv/config"; -import { createBot } from "@copilotkit/channels"; -import type { PlatformAdapter, BotTool, ContextEntry } from "@copilotkit/channels"; +import { createChannel } from "@copilotkit/channels"; +import type { PlatformAdapter, ChannelTool, ContextEntry } from "@copilotkit/channels"; import { slack, defaultSlackTools, @@ -72,7 +72,7 @@ async function main() { // formatting guidance), added only when that platform is active so the model // isn't handed a different platform's conventions. const adapters: PlatformAdapter[] = []; - const tools: BotTool[] = [...appTools]; + const tools: ChannelTool[] = [...appTools]; const context: ContextEntry[] = [...appContext]; if (have("SLACK_BOT_TOKEN", "SLACK_APP_TOKEN")) { @@ -179,7 +179,7 @@ async function main() { process.exit(1); } - const bot = createBot({ + const channel = createChannel({ adapters, // One AG-UI agent per conversation. The backend is a CopilotKit // `BuiltInAgent` (CopilotSseRuntime), which does NOT require a UUID-format @@ -197,7 +197,7 @@ async function main() { }, // `appTools` adds this bot's tools (read_thread, render_*, issue/page // cards); the per-platform `default*Tools` add `lookup_*_user`. All are - // plain `BotTool`s — the active adapter supplies `thread`/`message`/`user` + // plain `ChannelTool`s — the active adapter supplies `thread`/`message`/`user` // per call. `default*Context` ships tagging/formatting/thread-model // guidance; `appContext` adds identity + triage policy. tools, @@ -211,7 +211,7 @@ async function main() { // The turn handler. Each adapter pre-filters ingress to the turns this bot // should answer — DMs, explicit mentions, and every WhatsApp message. - // createBot is mention-preferred: a single handler covers them across every + // createChannel is mention-preferred: a single handler covers them across every // active platform. `senderContext` names the // requesting user per `thread.platform`, so the label is correct on whichever // surface the turn arrived from. Additional feature demos below add their own @@ -219,7 +219,7 @@ async function main() { // turn so a failed run (agent backend down, network/auth error) is logged // and surfaced to the user instead of crashing the process or vanishing // silently. - bot.onMention(async ({ thread, message }) => { + channel.onMention(async ({ thread, message }) => { try { await thread.runAgent({ context: senderContext(message.user, thread.platform), @@ -236,13 +236,13 @@ async function main() { // `modals/file-issue.tsx` (extracted + unit-tested): it validates, then // fire-and-forgets the agent run so the submission can be ack'd within Slack's // ~3s view_submission deadline (awaiting the run blows it → Slack double-files). - bot.onModalSubmit(FILE_ISSUE_CALLBACK, fileIssueSubmit); + channel.onModalSubmit(FILE_ISSUE_CALLBACK, fileIssueSubmit); // Slack-only nicety: personalize the assistant-pane prompt chips for the // opener. Harmless elsewhere — `onThreadStarted` only fires from adapters // that emit it (Discord/Telegram/WhatsApp have no assistant pane), and // platforms without suggested-prompt support no-op. - bot.onThreadStarted(async ({ thread, user }) => { + channel.onThreadStarted(async ({ thread, user }) => { if (!user?.name) return; await thread.setSuggestedPrompts([ { @@ -256,14 +256,14 @@ async function main() { ]); }); - await bot.start(); + await channel.start(); console.log( `[bot] started on: ${adapters.map((a) => a.platform).join(", ")}`, ); const shutdown = async (signal: string) => { console.log(`\n[bot] received ${signal}, stopping…`); - await bot.stop(); + await channel.stop(); // Tear down the shared headless browser used for chart/diagram rendering. await closeBrowser(); process.exit(0); diff --git a/app/managed.ts b/app/managed.ts index c830319..26fc318 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -15,13 +15,13 @@ * COPILOTKIT_INTELLIGENCE_URL e.g. http://localhost:7050 * COPILOTKIT_API_KEY project runtime API key (cpk-…), minted in the * Intelligence UI (project → API keys) - * and the bot name from `createBot({ name })` below. + * and the bot name from `createChannel({ name })` below. * * The agent backend is unchanged: this still POSTs each turn to `runtime.ts` * (AGENT_URL), exactly like the direct path. */ import "dotenv/config"; -import { createBot } from "@copilotkit/channels"; +import { createChannel } from "@copilotkit/channels"; import { intelligenceAdapter } from "@copilotkit/channels-intelligence"; import { defaultSlackContext, SanitizingHttpAgent } from "@copilotkit/channels-slack"; import { appTools } from "./tools/index.js"; @@ -56,7 +56,7 @@ async function main() { // Intelligence UI. const botName = process.env.MANAGED_BOT_NAME ?? "opentagbot"; - const bot = createBot({ + const channel = createChannel({ name: botName, // Same BuiltInAgent backend as the direct path (runtime.ts on AGENT_URL). agent: (threadId) => { @@ -88,7 +88,7 @@ async function main() { // Intelligence only delivers turns this bot should answer (the Slack app's // subscribed app_mention / DM events), so every delivered turn runs the // agent. `onMessage` fires for each delivered turn. - bot.onMessage(async ({ thread, message }) => { + channel.onMessage(async ({ thread, message }) => { try { await thread.runAgent({ // The managed adapter delivers a single turn and reconstructs no prior @@ -126,12 +126,15 @@ async function main() { // per-message handler is keyed by the SDK's post-time ref, but the reaction // arrives keyed by the real Slack ts (which app-api doesn't map back yet), so // only a global handler resolves. Fires on ADD only, ignores other emoji. - bot.onReaction(async ({ added, rawEmoji, thread }) => { - // Slack sends emoji shortnames (e.g. `arrows_counterclockwise`); Teams sends - // its fixed reaction types (`like`/`heart`/`laugh`/`surprised`/`sad`/`angry`). + channel.onReaction(async ({ added, rawEmoji, thread }) => { // Trigger on the Slack redo emoji OR any Teams reaction so the demo works on - // both surfaces. - const TEAMS_REACTIONS = new Set([ + // both surfaces. Slack sends emoji shortnames (e.g. `arrows_counterclockwise`). + // Teams sends its OWN reaction codes: the classic set (`like`/`heart`/`laugh`/ + // `surprised`/`sad`/`angry`) AND — for every other emoji, including the 🔄 + // family — a `_` code like `1f504_refresh`. Match + // both Teams forms by shape rather than a fixed allowlist that can't keep up + // with Teams' expanding emoji set. + const CLASSIC_TEAMS_REACTIONS = new Set([ "like", "heart", "laugh", @@ -139,7 +142,9 @@ async function main() { "sad", "angry", ]); - if (!added || (rawEmoji !== REDO_EMOJI && !TEAMS_REACTIONS.has(rawEmoji))) { + const isTeamsReaction = + CLASSIC_TEAMS_REACTIONS.has(rawEmoji) || /^[0-9a-f]{4,6}_/i.test(rawEmoji); + if (!added || (rawEmoji !== REDO_EMOJI && !isTeamsReaction)) { return; } try { @@ -149,15 +154,24 @@ async function main() { } }); - await bot.start(); + await channel.start(); console.log( `[managed] bot "${botName}" listening for Intelligence-delivered events ` + `(intelligence=${process.env.COPILOTKIT_INTELLIGENCE_URL ?? ""})`, ); + // The Intelligence HTTP delivery source paces its poll loop with unref()'d + // timers (0.2.0: so it composes under a hosted supervisor), so once it goes + // idle between polls nothing else refs the event loop and Node would exit. + // Hold the process open until a shutdown signal. + // ponytail: a ref'd no-op interval is the minimal keep-alive; a supervising + // ChannelManager (startChannels) would own this in a hosted deployment. + const keepAlive = setInterval(() => {}, 1 << 30); + const shutdown = async (signal: string) => { console.log(`\n[managed] received ${signal}, stopping…`); - await bot.stop(); + clearInterval(keepAlive); + await channel.stop(); await closeBrowser(); process.exit(0); }; diff --git a/app/modals/__tests__/file-issue.test.tsx b/app/modals/__tests__/file-issue.test.tsx index 8452fb3..a292920 100644 --- a/app/modals/__tests__/file-issue.test.tsx +++ b/app/modals/__tests__/file-issue.test.tsx @@ -6,13 +6,13 @@ import { issueFromValues, FILE_ISSUE_CALLBACK, } from "../file-issue.js"; -import type { BotNode } from "@copilotkit/channels-ui"; +import type { ChannelNode } from "@copilotkit/channels-ui"; -function tags(node: BotNode | unknown, acc: string[] = []): string[] { +function tags(node: ChannelNode | unknown, acc: string[] = []): string[] { if (!node || typeof node !== "object") return acc; - const n = node as BotNode; + const n = node as ChannelNode; if (typeof n.type === "string") acc.push(n.type); - for (const c of (n.props?.children as BotNode[] | undefined) ?? []) { + for (const c of (n.props?.children as ChannelNode[] | undefined) ?? []) { tags(c, acc); } return acc; diff --git a/app/render/chart.ts b/app/render/chart.ts index e638050..7dfb8fc 100644 --- a/app/render/chart.ts +++ b/app/render/chart.ts @@ -16,7 +16,13 @@ const WORKER = join(dirname(fileURLToPath(import.meta.url)), "render-worker.mjs" const CHART_JS_CDN = process.env["CHART_JS_URL"]; // A cold Chromium launch + CDN fetch + screenshot; generous but bounded so a // wedged browser can never hang the turn (the child is killed on timeout). -const RENDER_TIMEOUT_MS = 30_000; +// Each render pays a full cold-launch, which on a memory-pressured host can +// take tens of seconds, so the ceiling is generous — but still well under the +// Intelligence turn timeout (120s) so a truly wedged browser fails the frame +// rather than hanging the turn. +// ponytail: raising the ceiling absorbs a slow host; a warm/persistent render +// server (launch Chromium once, reuse) is the real fix if renders stay slow. +const RENDER_TIMEOUT_MS = 90_000; export function renderChart( spec: Record, diff --git a/app/sender-context.ts b/app/sender-context.ts index 87e3d88..8852304 100644 --- a/app/sender-context.ts +++ b/app/sender-context.ts @@ -13,7 +13,7 @@ export function senderContext( user: PlatformUser | undefined, platform: string, ): ContextEntry[] { - // `createBot` substitutes `{ id: "" }` for an unresolved sender (a truthy + // `createChannel` substitutes `{ id: "" }` for an unresolved sender (a truthy // object), so guard on a usable id — not mere object presence — otherwise we // emit a "Requesting user (... id )" entry with nothing to attribute. if (!user?.id) return []; diff --git a/app/tools/__tests__/read-thread.test.ts b/app/tools/__tests__/read-thread.test.ts index 2f99fba..507f409 100644 --- a/app/tools/__tests__/read-thread.test.ts +++ b/app/tools/__tests__/read-thread.test.ts @@ -2,12 +2,12 @@ import { describe, it, expect, vi } from "vitest"; import { readThreadTool } from "../read-thread.js"; import type { ThreadMessage } from "@copilotkit/channels-ui"; -/** The ctx a BotTool handler receives. */ +/** The ctx a ChannelTool handler receives. */ type HandlerCtx = Parameters[1]; /** * Build a fake handler ctx. The handler only touches - * `thread.getMessages()`; the other `BotToolContext` fields are unused by + * `thread.getMessages()`; the other `ChannelToolContext` fields are unused by * this tool, so we cast the minimal literal to the handler ctx type. */ function makeCtx(messages: ThreadMessage[]): HandlerCtx { diff --git a/app/tools/__tests__/render-tools.test.ts b/app/tools/__tests__/render-tools.test.ts index 9557f6b..1dff74e 100644 --- a/app/tools/__tests__/render-tools.test.ts +++ b/app/tools/__tests__/render-tools.test.ts @@ -11,7 +11,7 @@ vi.mock("../../render/diagram.js", () => ({ renderDiagram })); const { renderChartTool } = await import("../render-chart.js"); const { renderDiagramTool } = await import("../render-diagram.js"); -/** The ctx a BotTool handler receives. */ +/** The ctx a ChannelTool handler receives. */ type HandlerCtx = Parameters[1]; function makeCtx() { diff --git a/app/tools/__tests__/showcase-tools.test.tsx b/app/tools/__tests__/showcase-tools.test.tsx index 71d57c6..01493ec 100644 --- a/app/tools/__tests__/showcase-tools.test.tsx +++ b/app/tools/__tests__/showcase-tools.test.tsx @@ -9,7 +9,7 @@ import { describe, it, expect, vi } from "vitest"; import { renderToIR } from "@copilotkit/channels-ui"; import type { - BotNode, + ChannelNode, InteractionContext, ClickHandler, } from "@copilotkit/channels-ui"; @@ -43,17 +43,17 @@ function fakeThread() { /** Depth-first: find the first IR node whose `type` matches and that has the named prop. */ function findWithProp( - nodes: BotNode[], + nodes: ChannelNode[], type: string, prop: string, -): BotNode | undefined { +): ChannelNode | undefined { for (const node of nodes) { if (node.type === type && node.props && prop in node.props) return node; const children = node.props?.children; const childArr = Array.isArray(children) - ? (children as BotNode[]) + ? (children as ChannelNode[]) : children && typeof children === "object" - ? [children as BotNode] + ? [children as ChannelNode] : []; const found = findWithProp(childArr, type, prop); if (found) return found; diff --git a/app/tools/index.ts b/app/tools/index.ts index 4e4371f..e7fd4ec 100644 --- a/app/tools/index.ts +++ b/app/tools/index.ts @@ -5,7 +5,7 @@ * `defaultSlackTools` (spread in `app/index.ts`). * * Add new tools here and re-export them through `appTools`. Wire the - * array into `createBot({tools: [...defaultSlackTools, ...appTools]})` + * array into `createChannel({tools: [...defaultSlackTools, ...appTools]})` * in `app/index.ts`. */ import { readThreadTool } from "./read-thread.js"; @@ -19,17 +19,17 @@ import { showLinksTool, } from "./showcase-tools.js"; import { confirmWriteTool } from "../human-in-the-loop/index.js"; -import type { BotTool } from "@copilotkit/channels"; +import type { ChannelTool } from "@copilotkit/channels"; /** - * Every tool is a plain `BotTool`: its handler receives the generic - * `BotToolContext` (`{ thread, message?, user?, signal?, platform }`) the + * Every tool is a plain `ChannelTool`: its handler receives the generic + * `ChannelToolContext` (`{ thread, message?, user?, signal?, platform }`) the * adapter supplies at call time. Platform power (post/stream/postFile, * `thread.getMessages()`, `thread.lookupUser()`, …) is reached via the * `thread` methods, so there's no per-adapter context and no cast needed — - * the array assigns straight into `createBot({ tools })`. + * the array assigns straight into `createChannel({ tools })`. */ -export const appTools: BotTool[] = [ +export const appTools: ChannelTool[] = [ readThreadTool, renderChartTool, renderDiagramTool, diff --git a/app/tools/read-thread.ts b/app/tools/read-thread.ts index 7249acf..c397053 100644 --- a/app/tools/read-thread.ts +++ b/app/tools/read-thread.ts @@ -1,19 +1,19 @@ /** - * `read_thread` — an app-side `BotTool` that hands the agent the full + * `read_thread` — an app-side `ChannelTool` that hands the agent the full * conversation thread it's replying in. This is what makes "write this * incident thread up as a postmortem" possible: the agent calls * `read_thread`, gets the actual messages, and summarizes those instead * of inventing content. * - * It's a worked example of a `BotTool` that reads conversation history + * It's a worked example of a `ChannelTool` that reads conversation history * via the platform-agnostic `ctx.thread.getMessages()` capability — * the adapter targets the current thread, so no channel/ts plumbing is * needed. */ import { z } from "zod"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; -export const readThreadTool = defineBotTool({ +export const readThreadTool = defineChannelTool({ name: "read_thread", description: "Fetch the messages in the current conversation thread so you can " + diff --git a/app/tools/render-chart.tsx b/app/tools/render-chart.tsx index ec45c2a..fc9a739 100644 --- a/app/tools/render-chart.tsx +++ b/app/tools/render-chart.tsx @@ -8,7 +8,7 @@ */ import { z } from "zod"; import { Context } from "@copilotkit/channels-ui"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; import { renderChart } from "../render/chart.js"; const schema = z.object({ @@ -24,7 +24,10 @@ const schema = z.object({ data: z .object({ labels: z - .array(z.string()) + // Coerce numeric labels (e.g. years 2024, 2025) to strings — the + // model routinely emits numbers here, which a bare z.string() + // rejects and fails the whole tool call. + .array(z.coerce.string()) .describe("X-axis / category labels, e.g. ['2026-01','2026-02']."), datasets: z .array( @@ -35,7 +38,9 @@ const schema = z.object({ .optional() .describe("Series name in the legend, e.g. 'Sev1'."), data: z - .array(z.number()) + // Coerce stringified numbers ("42") to numbers — models + // often quote them, which a bare z.number() rejects. + .array(z.coerce.number()) .describe("One numeric value per label."), }) // Allow Chart.js dataset extras: stack, backgroundColor, fill… @@ -45,11 +50,16 @@ const schema = z.object({ .describe("One entry per data series."), }) .describe("Chart.js data — inline the actual numbers."), + // Accept whatever shape the model emits for options (an object, or the + // occasional array/null/string) so a malformed `options` can't fail + // tool-arg validation and kill the whole chart. The render worker + // tolerates a non-object (it spreads `options ?? {}` and Chart.js ignores + // stray keys). ponytail: widen at the boundary, don't hand-validate. options: z - .record(z.string(), z.any()) + .unknown() .optional() .describe( - "Optional Chart.js options. Stacked bar: " + + "Optional Chart.js options OBJECT. Stacked bar: " + "{ scales: { x: { stacked: true }, y: { stacked: true } } }.", ), }) @@ -65,7 +75,7 @@ function slug(s: string): string { ); } -export const renderChartTool = defineBotTool({ +export const renderChartTool = defineChannelTool({ name: "render_chart", description: "Render a chart as an image and post it to the conversation thread. Pass " + @@ -107,6 +117,12 @@ export const renderChartTool = defineBotTool({ } return "Rendered and posted the chart image to the thread."; } catch (e) { + // Surface the real reason in the runtime log — the tool otherwise only + // returns the message to the model, so a render failure is invisible here. + console.error( + "[render_chart] render failed:", + (e as Error)?.stack ?? String(e), + ); return `Chart render failed: ${(e as Error).message}`; } }, diff --git a/app/tools/render-diagram.tsx b/app/tools/render-diagram.tsx index cbbc01d..718e193 100644 --- a/app/tools/render-diagram.tsx +++ b/app/tools/render-diagram.tsx @@ -8,7 +8,7 @@ */ import { z } from "zod"; import { Context } from "@copilotkit/channels-ui"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; import { renderDiagram } from "../render/diagram.js"; const schema = z.object({ @@ -33,7 +33,7 @@ function slug(s: string): string { ); } -export const renderDiagramTool = defineBotTool({ +export const renderDiagramTool = defineChannelTool({ name: "render_diagram", description: "Render a Mermaid diagram as an image and post it to the conversation " + diff --git a/app/tools/render-table.tsx b/app/tools/render-table.tsx index 0ad8854..f443aee 100644 --- a/app/tools/render-table.tsx +++ b/app/tools/render-table.tsx @@ -12,7 +12,7 @@ */ import { z } from "zod"; import { Message, Header, Section, Table, Row, Cell } from "@copilotkit/channels-ui"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; const schema = z.object({ title: z @@ -88,7 +88,7 @@ export function toMonospaceTable(cols: Column[], dataRows: string[][]): string { return "```\n" + [fmt(header), ...body.map(fmt)].join("\n") + "\n```"; } -export const renderTableTool = defineBotTool({ +export const renderTableTool = defineChannelTool({ name: "render_table", description: "Render tabular data as a table posted to the conversation thread. Pass " + diff --git a/app/tools/render-tools.tsx b/app/tools/render-tools.tsx index c821a35..7b6ff9a 100644 --- a/app/tools/render-tools.tsx +++ b/app/tools/render-tools.tsx @@ -1,11 +1,11 @@ /** * Render-tools — the agent-facing wrappers that turn the JSX render - * components into `BotTool`s. The agent calls `issue_card` / `issue_list` / + * components into `ChannelTool`s. The agent calls `issue_card` / `issue_list` / * `page_list`; each handler renders the finished `@copilotkit/channels-ui` * component (`` etc.) and posts it to the thread via * `thread.post`. */ -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; import { IssueCard, IssueList, @@ -15,7 +15,7 @@ import { pageListSchema, } from "../components/index.js"; -export const issueCardTool = defineBotTool({ +export const issueCardTool = defineChannelTool({ name: "issue_card", description: "Render ONE Linear issue as a rich card with a status header, " + @@ -29,7 +29,7 @@ export const issueCardTool = defineBotTool({ }, }); -export const issueListTool = defineBotTool({ +export const issueListTool = defineChannelTool({ name: "issue_list", description: "Render a list of Linear issues as a card — a header plus one row per " + @@ -44,7 +44,7 @@ export const issueListTool = defineBotTool({ }, }); -export const pageListTool = defineBotTool({ +export const pageListTool = defineChannelTool({ name: "page_list", description: "Render a list of Notion pages as a card — a header plus one row per " + diff --git a/app/tools/showcase-tools.tsx b/app/tools/showcase-tools.tsx index 7181cf5..b57d669 100644 --- a/app/tools/showcase-tools.tsx +++ b/app/tools/showcase-tools.tsx @@ -1,5 +1,5 @@ /** - * Showcase render-tools — three small JSX `BotTool`s that demonstrate the + * Showcase render-tools — three small JSX `ChannelTool`s that demonstrate the * `@copilotkit/channels-ui` vocabulary end-to-end: * * - `show_incident` — an interactive card whose `Acknowledge`/`Escalate` @@ -22,7 +22,7 @@ import { Button, } from "@copilotkit/channels-ui"; import type { InteractionContext } from "@copilotkit/channels-ui"; -import { defineBotTool } from "@copilotkit/channels"; +import { defineChannelTool } from "@copilotkit/channels"; // ── show_incident ────────────────────────────────────────────────────────── @@ -81,7 +81,7 @@ export function IncidentCard({ id, title, severity, summary }: IncidentProps) { ); } -export const showIncidentTool = defineBotTool({ +export const showIncidentTool = defineChannelTool({ name: "show_incident", description: "Render an interactive incident card with Acknowledge/Escalate buttons. " + @@ -125,7 +125,7 @@ export function StatusCard({ heading, fields }: StatusProps) { ); } -export const showStatusTool = defineBotTool({ +export const showStatusTool = defineChannelTool({ name: "show_status", description: "Render a status card: a heading plus a grid of label/value fields " + @@ -169,7 +169,7 @@ export function LinksCard({ heading, links }: LinksProps) { ); } -export const showLinksTool = defineBotTool({ +export const showLinksTool = defineChannelTool({ name: "show_links", description: "Render a card of links: a heading plus a dot-separated row of clickable " + diff --git a/package.json b/package.json index 449e2c7..771d46b 100644 --- a/package.json +++ b/package.json @@ -18,19 +18,19 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/channels": "^0.1.1", - "@copilotkit/channels-discord": "^0.0.3", - "@copilotkit/channels-intelligence": "^0.1.1", - "@copilotkit/channels-slack": "^0.1.2", - "@copilotkit/channels-telegram": "^0.0.4", - "@copilotkit/channels-ui": "^0.1.1", - "@copilotkit/channels-whatsapp": "^0.0.2", + "@copilotkit/channels": "^0.2.0", + "@copilotkit/channels-discord": "^0.2.0", + "@copilotkit/channels-intelligence": "^0.2.0", + "@copilotkit/channels-slack": "^0.2.0", + "@copilotkit/channels-telegram": "^0.2.0", + "@copilotkit/channels-ui": "^0.2.0", + "@copilotkit/channels-whatsapp": "^0.2.0", "@copilotkit/runtime": "^1.62.3", + "@slack/bolt": "^4.2.0", + "@slack/types": "^2.21.1", "@tanstack/ai": "^0.32.0", "@tanstack/ai-mcp": "^0.1.3", "@tanstack/ai-openai": "^0.15.2", - "@slack/bolt": "^4.2.0", - "@slack/types": "^2.21.1", "playwright": "^1.49.0", "zod": "^3.25.76" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61c8334..9d96343 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,26 +12,26 @@ importers: .: dependencies: '@copilotkit/channels': - specifier: ^0.1.1 - version: 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-discord': - specifier: ^0.0.3 - version: 0.0.3(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-intelligence': - specifier: ^0.1.1 - version: 0.1.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-slack': - specifier: ^0.1.2 - version: 0.1.2(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.0 + version: 0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-telegram': - specifier: ^0.0.4 - version: 0.0.4(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-ui': - specifier: ^0.1.1 - version: 0.1.1(@ag-ui/core@0.0.57) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57) '@copilotkit/channels-whatsapp': - specifier: ^0.0.2 - version: 0.0.2(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.0 + version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/runtime': specifier: ^1.62.3 version: 1.62.3(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) @@ -204,32 +204,63 @@ packages: resolution: {integrity: sha512-sj9DWTJ2Ze0WR9qsiOPqoqzNx3OxL6iMxHImbhvoe9qOspekbzxNDMiJ4TIGfYHYh9w4OmBjz3prvqhzTi96+Q==} engines: {node: '>=18'} + '@azure/abort-controller@2.2.0': + resolution: {integrity: sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==} + engines: {node: '>=22.0.0'} + + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} + engines: {node: '>=20.0.0'} + + '@azure/core-util@1.14.0': + resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} + engines: {node: '>=22.0.0'} + + '@azure/msal-common@16.5.2': + resolution: {integrity: sha512-GkDEL6TYo3HgT3UuqakdgE9PZfc1hMki6+Hwgy1uddb/EauvAKfu85vVhuofRSo22D1xTnWt8Ucwfg4vSCVwvA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@5.1.5': + resolution: {integrity: sha512-ObTeMoNPmq19X3z40et9Xvs4ZoWVeJg43PZMRLG5iwVL+2nCtAerG3YTDItqPp1CfXNwmCXBbg8jn1DOx65c3g==} + engines: {node: '>=20'} + '@bufbuild/protobuf@2.12.1': resolution: {integrity: sha512-BvAMfS6LrgZiryOAZ4pBYucu4wG/Ei/9o9DZ9akbREnMLbPJiom2i8b9C8IsKErQoiKqVhrerzt3kOT/RrzLHg==} '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/channels-discord@0.0.3': - resolution: {integrity: sha512-UXkWHcQJ9kLDkkGMXC3NyHuYwdVxWW09uyn1wm9er5tcL5/ZK12gvqgnj7G5j5pF7VI0qWXQ+ZvO3uZENo7o0A==} + '@copilotkit/channels-core@0.2.0': + resolution: {integrity: sha512-8nk0kse8aZiD+Upj9hvOtvZi7LCl2RsUMYCow/v+7KRUhriORX69y6SbP8dpblMQbhqTjmH9ZWZZAgB6koinJQ==} + peerDependencies: + vitest: ^4.0.0 + peerDependenciesMeta: + vitest: + optional: true + + '@copilotkit/channels-discord@0.2.0': + resolution: {integrity: sha512-3yW5pe3JL/wknxfxsgCxvJg748w5fu+rLhWL+/UHAzOIRwZGPWhu0L/Vz+9ek5ZiYyR3N0vZVpWgUrbc+ytKTA==} - '@copilotkit/channels-intelligence@0.1.1': - resolution: {integrity: sha512-lS3vzbuRaeLTE+ucdsinBd9YHdm4lqUjvA57wowGMs+/WUZKzKCLGiE9BYOErQzo0PaM8MTx8TomTzNSny287w==} + '@copilotkit/channels-intelligence@0.2.0': + resolution: {integrity: sha512-P26yf8OIYtUr/6grDxXtasEacdLqMOUDnr+CxkcYroHEyR8+/Dpyg9BoL7+XYci2+rvvhn0TP+vwRDEHEYeBsw==} - '@copilotkit/channels-slack@0.1.2': - resolution: {integrity: sha512-h8VR+raH1GvdNxEuNcpGMe7TayZxzj33xobq6RCCU4hLu15jadCyYj9CXArYIcwyManlbWE5jqi6n8cla23E0g==} + '@copilotkit/channels-slack@0.2.0': + resolution: {integrity: sha512-CdRlFT6aDU7Vc8SpgIjNAHHHif4JxpELTw09+MXoAeyZ+lm5kdey6M3dLq5bTULjTeooxJSzU7KV0cdbpuKPQg==} - '@copilotkit/channels-telegram@0.0.4': - resolution: {integrity: sha512-LyzGU9wHVPPc7MsR9+w1kBXcEqotI3k8XRJLola99ktzEpAtXTwCmBlnyh+j7UTCMXsRTjKz9eC6ULxDy82GbQ==} + '@copilotkit/channels-teams@0.2.0': + resolution: {integrity: sha512-B8F6npoHy1qbpCU4YaQqRGjXyITdHMOXKSWvxmOmkYRARpkNlURdGGuJ6S0f49RDZ1anXHtFgg4a3+XNrc3SRQ==} - '@copilotkit/channels-ui@0.1.1': - resolution: {integrity: sha512-wQ099E62DEhIuKz8O9Iqy1VP4qCyLtS8d5EwfF2MK8m8amWtuyyTUxV8vC1q9ecJMgAwCtKmeW/fYQR8NsLiXQ==} + '@copilotkit/channels-telegram@0.2.0': + resolution: {integrity: sha512-8P4MkwNEOhNK7nUKqwIBWCjN3EBQGvoWVZ9/Fpihe7SN25B0BHuTnlfekd2XQPRx8jxu7ysoNibL2zztFdfLmg==} - '@copilotkit/channels-whatsapp@0.0.2': - resolution: {integrity: sha512-T2eCeY6NXSAZbdQsARhhpLGsXP667wWqgsWpMPXy+dULvGhemw/ueyijV5/kEzMnxlaBoZ4TuGClXweMtDxZfw==} + '@copilotkit/channels-ui@0.2.0': + resolution: {integrity: sha512-ZVna1jml3H8kwSXHdNdI0TSjRFg/PGaOfHhpzDSePpv+LksUlINO59Tt3DtsN806Zc3ADoG5orHYjn+B7bhklg==} - '@copilotkit/channels@0.1.1': - resolution: {integrity: sha512-v/cOFfRZWKXstrj06YZmR5kikE9XhXluuJa81hZEhZ4I9C3U+Lnao1K5pL5DtmhUbowynMvBedVUNqKwGFLCvQ==} + '@copilotkit/channels-whatsapp@0.2.0': + resolution: {integrity: sha512-JU+cg6Ec20tJMFKh6OqBYjfEoV9UIpvjFxSvqU5M/5V50jxFnwfdUsyjDwtZeT8srMqItWS1NXGayDq+yUJIFw==} + + '@copilotkit/channels@0.2.0': + resolution: {integrity: sha512-bs31LG1F8q/71UFlypc2SfEvEXVI9o0OgXzsRUjOMiWBBelnt391GqCQdjzyZ9EVjE00HRws+6hhkghHG6XrkA==} peerDependencies: vitest: ^4.0.0 peerDependenciesMeta: @@ -601,6 +632,26 @@ packages: resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} engines: {node: '>=8'} + '@microsoft/agents-activity@1.6.1': + resolution: {integrity: sha512-EURFWskaCBbsNfMj9w5sbIHUNNyIuig8+/YCqe2hwRNTTG01s/Jd8pvvvurnH+5P55Y2++AsYLnuwvXKP8LhjA==} + engines: {node: '>=20.0.0'} + + '@microsoft/agents-hosting@1.6.1': + resolution: {integrity: sha512-qOvuBNIeSrS93KuaWmAFqnjUbvpZhjy/rz9jF8fPE+1rY/Kyi3o+TtODSX5gy1moZ0/nwVwl10XhIXXRF882SQ==} + engines: {node: '>=20.0.0'} + + '@microsoft/agents-telemetry@1.6.1': + resolution: {integrity: sha512-ugbvUyP0PupHcFXTYy3+mXE2QfW13mRY4hrY7HyS3ZWWL20L7RUyg27nXqL4ndaqtuoEt+MPkluEfabG3iJVSg==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@opentelemetry/api': '1' + '@opentelemetry/api-logs': '>=0.214.0 <1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/api-logs': + optional: true + '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} @@ -919,6 +970,10 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@typespec/ts-http-runtime@0.3.7': + resolution: {integrity: sha512-JVUD8X2tfDMWjcjLs4yVxxVrS8yR5vnh386GAXT9Qj79nBxxXSaHFQZg5FweLmT8HlPQ3kii6noUB+Z9RN7DvQ==} + engines: {node: '>=22.0.0'} + '@vercel/oidc@3.2.0': resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} engines: {node: '>= 20'} @@ -1490,6 +1545,10 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -1581,6 +1640,10 @@ packages: jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + jwks-rsa@4.0.1: + resolution: {integrity: sha512-poXwUA8S4cP9P5N8tZS3xnUDJH8WmwSGfKK9gIaRPdjLHyJtd9iX/cngX9CUIe0Caof5JhK2EbN7N5lnnaf9NA==} + engines: {node: ^20.19.0 || ^22.12.0 || >= 23.0.0} + jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} @@ -1687,6 +1750,12 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + limiter@1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. @@ -1724,6 +1793,13 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + + lru-memoizer@3.0.0: + resolution: {integrity: sha512-m83w/cYXLdUIboKSPxzPAGfYnk+vqeDYXuoSrQRw1q+yVEd8IXhvMufN8Q5TIPe7e2jyX4SRNrDJI2Skw1yznQ==} + magic-bytes.js@1.13.0: resolution: {integrity: sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==} @@ -2393,6 +2469,9 @@ packages: zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.25.75: + resolution: {integrity: sha512-OhpzAmVzabPOL6C3A3gpAifqr9MqihV/Msx3gor2b2kviCgcb+HM9SEOpMWwwNp9MRunWnhtAKUoo0AHhjyPPg==} + zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -2592,15 +2671,56 @@ snapshots: dependencies: json-schema: 0.4.0 + '@azure/abort-controller@2.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.10.1': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-util@1.14.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@typespec/ts-http-runtime': 0.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-common@16.5.2': {} + + '@azure/msal-node@5.1.5': + dependencies: + '@azure/msal-common': 16.5.2 + jsonwebtoken: 9.0.3 + '@bufbuild/protobuf@2.12.1': {} '@cfworker/json-schema@4.1.1': {} - '@copilotkit/channels-discord@0.0.3(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-core@0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@ag-ui/core': 0.0.57 + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + zod-to-json-schema: 3.25.2(zod@3.25.76) + optionalDependencies: + vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) + transitivePeerDependencies: + - encoding + - zod + + '@copilotkit/channels-discord@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + dependencies: + '@ag-ui/client': 0.0.57 + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2610,11 +2730,11 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-intelligence@0.1.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-intelligence@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' @@ -2622,12 +2742,12 @@ snapshots: - vitest - zod - '@copilotkit/channels-slack@0.1.2(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-slack@0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) @@ -2645,11 +2765,32 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-telegram@0.0.4(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-teams@0.2.0(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@microsoft/agents-activity': 1.6.1 + '@microsoft/agents-hosting': 1.6.1(@opentelemetry/api@1.9.1) + express: 4.22.2 + rxjs: 7.8.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/api-logs' + - encoding + - supports-color + - vitest + + '@copilotkit/channels-telegram@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2658,36 +2799,46 @@ snapshots: - supports-color - vitest - '@copilotkit/channels-ui@0.1.1(@ag-ui/core@0.0.57)': + '@copilotkit/channels-ui@0.2.0(@ag-ui/core@0.0.57)': dependencies: '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/channels-whatsapp@0.0.2(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-whatsapp@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels': 0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - vitest - zod - '@copilotkit/channels@0.1.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels@0.2.0(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: - '@ag-ui/client': 0.0.57 - '@ag-ui/core': 0.0.57 - '@copilotkit/channels-ui': 0.1.1(@ag-ui/core@0.0.57) - '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) - zod-to-json-schema: 3.25.2(zod@3.25.76) + '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-discord': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-intelligence': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-slack': 0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-teams': 0.2.0(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-telegram': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/channels-whatsapp': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) optionalDependencies: vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) transitivePeerDependencies: + - '@ag-ui/core' + - '@opentelemetry/api' + - '@opentelemetry/api-logs' + - '@types/express' + - bufferutil + - debug - encoding + - supports-color + - utf-8-validate - zod '@copilotkit/core@1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76)': @@ -3067,6 +3218,32 @@ snapshots: dependencies: '@lukeed/csprng': 1.1.0 + '@microsoft/agents-activity@1.6.1': + dependencies: + zod: 3.25.75 + + '@microsoft/agents-hosting@1.6.1(@opentelemetry/api@1.9.1)': + dependencies: + '@azure/core-auth': 1.10.1 + '@azure/msal-node': 5.1.5 + '@microsoft/agents-activity': 1.6.1 + '@microsoft/agents-telemetry': 1.6.1(@opentelemetry/api@1.9.1) + jsonwebtoken: 9.0.3 + jwks-rsa: 4.0.1 + zod: 3.25.75 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/api-logs' + - supports-color + + '@microsoft/agents-telemetry@1.6.1(@opentelemetry/api@1.9.1)': + dependencies: + debug: 4.4.3 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + transitivePeerDependencies: + - supports-color + '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.24.1)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.27) @@ -3461,6 +3638,14 @@ snapshots: dependencies: '@types/node': 22.20.0 + '@typespec/ts-http-runtime@0.3.7': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@vercel/oidc@3.2.0': {} '@vitest/expect@4.1.9': @@ -4134,6 +4319,13 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -4221,6 +4413,16 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 + jwks-rsa@4.0.1: + dependencies: + '@types/jsonwebtoken': 9.0.10 + debug: 4.4.3 + jose: 6.2.3 + limiter: 1.1.5 + lru-memoizer: 3.0.0 + transitivePeerDependencies: + - supports-color + jws@4.0.1: dependencies: jwa: 2.0.1 @@ -4303,6 +4505,10 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + limiter@1.1.5: {} + + lodash.clonedeep@4.5.0: {} + lodash.get@4.4.2: {} lodash.includes@4.3.0: {} @@ -4327,6 +4533,13 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.5.2: {} + + lru-memoizer@3.0.0: + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 11.5.2 + magic-bytes.js@1.13.0: {} magic-string@0.30.21: @@ -4923,4 +5136,6 @@ snapshots: zod@3.24.1: {} + zod@3.25.75: {} + zod@3.25.76: {} From bde1bf7c54d54f260091b5effa20c7a82714b4dc Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 17 Jul 2026 11:34:36 +0200 Subject: [PATCH 15/15] chore(deps): adopt @copilotkit/channels 0.2.1 and drop the reaction band-aid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump channels-* to 0.2.1 (canonical cross-platform reaction normalization + the Slack "is thinking…" finalize fix). The managed reaction demo now matches the canonical `emoji === "refresh"` — 🔄 normalizes to it from every provider (Slack `arrows_counterclockwise`, Teams `1f504_refresh`, unicode elsewhere) — so the interim per-platform band-aid (classic-name set + codepoint regex) and the REDO_EMOJI constant are removed. --- app/managed.ts | 28 ++------- package.json | 14 ++--- pnpm-lock.yaml | 167 ++++++++++++++++++++++++++++--------------------- 3 files changed, 107 insertions(+), 102 deletions(-) diff --git a/app/managed.ts b/app/managed.ts index 26fc318..5a0b2b0 100644 --- a/app/managed.ts +++ b/app/managed.ts @@ -32,9 +32,6 @@ import { ConfirmWrite } from "./human-in-the-loop/index.js"; import { senderContext } from "./sender-context.js"; import { closeBrowser } from "./render/browser.js"; -// Slack's shortname for 🔄 (arrives as `event.reaction`, without colons). -const REDO_EMOJI = "arrows_counterclockwise"; - const required = (name: string): string => { const v = process.env[name]; if (!v) { @@ -126,25 +123,12 @@ async function main() { // per-message handler is keyed by the SDK's post-time ref, but the reaction // arrives keyed by the real Slack ts (which app-api doesn't map back yet), so // only a global handler resolves. Fires on ADD only, ignores other emoji. - channel.onReaction(async ({ added, rawEmoji, thread }) => { - // Trigger on the Slack redo emoji OR any Teams reaction so the demo works on - // both surfaces. Slack sends emoji shortnames (e.g. `arrows_counterclockwise`). - // Teams sends its OWN reaction codes: the classic set (`like`/`heart`/`laugh`/ - // `surprised`/`sad`/`angry`) AND — for every other emoji, including the 🔄 - // family — a `_` code like `1f504_refresh`. Match - // both Teams forms by shape rather than a fixed allowlist that can't keep up - // with Teams' expanding emoji set. - const CLASSIC_TEAMS_REACTIONS = new Set([ - "like", - "heart", - "laugh", - "surprised", - "sad", - "angry", - ]); - const isTeamsReaction = - CLASSIC_TEAMS_REACTIONS.has(rawEmoji) || /^[0-9a-f]{4,6}_/i.test(rawEmoji); - if (!added || (rawEmoji !== REDO_EMOJI && !isTeamsReaction)) { + channel.onReaction(async ({ added, emoji, thread }) => { + // `emoji` is the canonical cross-platform name (channels 0.2.1+): 🔄 + // normalizes to "refresh" whether it arrived as Slack + // `arrows_counterclockwise`, Teams `1f504_refresh`, or the unicode form on + // Discord/Telegram/WhatsApp — so the demo needs no per-platform matching. + if (!added || emoji !== "refresh") { return; } try { diff --git a/package.json b/package.json index 771d46b..5b8a245 100644 --- a/package.json +++ b/package.json @@ -18,13 +18,13 @@ "e2e:telegram": "tsx e2e/telegram-run.ts" }, "dependencies": { - "@copilotkit/channels": "^0.2.0", - "@copilotkit/channels-discord": "^0.2.0", - "@copilotkit/channels-intelligence": "^0.2.0", - "@copilotkit/channels-slack": "^0.2.0", - "@copilotkit/channels-telegram": "^0.2.0", - "@copilotkit/channels-ui": "^0.2.0", - "@copilotkit/channels-whatsapp": "^0.2.0", + "@copilotkit/channels": "^0.2.1", + "@copilotkit/channels-discord": "^0.2.1", + "@copilotkit/channels-intelligence": "^0.2.1", + "@copilotkit/channels-slack": "^0.2.1", + "@copilotkit/channels-telegram": "^0.2.1", + "@copilotkit/channels-ui": "^0.2.1", + "@copilotkit/channels-whatsapp": "^0.2.1", "@copilotkit/runtime": "^1.62.3", "@slack/bolt": "^4.2.0", "@slack/types": "^2.21.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d96343..054d9d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,26 +12,26 @@ importers: .: dependencies: '@copilotkit/channels': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-discord': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-intelligence': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/channels-slack': - specifier: ^0.2.0 - version: 0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.1 + version: 0.2.1(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-telegram': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) '@copilotkit/channels-ui': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57) '@copilotkit/channels-whatsapp': - specifier: ^0.2.0 - version: 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + specifier: ^0.2.1 + version: 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) '@copilotkit/runtime': specifier: ^1.62.3 version: 1.62.3(@cfworker/json-schema@4.1.1)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0)))(@opentelemetry/api@1.9.1)(langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(@opentelemetry/api@1.9.1)(openai@6.45.0(ws@8.21.0)(zod@3.25.76))(ws@8.21.0))(openai@6.45.0(ws@8.21.0)(zod@3.25.76)) @@ -230,45 +230,45 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@copilotkit/channels-core@0.2.0': - resolution: {integrity: sha512-8nk0kse8aZiD+Upj9hvOtvZi7LCl2RsUMYCow/v+7KRUhriORX69y6SbP8dpblMQbhqTjmH9ZWZZAgB6koinJQ==} + '@copilotkit/channels-core@0.2.1': + resolution: {integrity: sha512-Uab1LRb5HVXlqMYhkVROucujLWUTVUlVOpRzwdYAjIRWR/GL4kgWM3YioZ9qJyJMXwvQnSYFK2Up3zv/Uojk8w==} peerDependencies: vitest: ^4.0.0 peerDependenciesMeta: vitest: optional: true - '@copilotkit/channels-discord@0.2.0': - resolution: {integrity: sha512-3yW5pe3JL/wknxfxsgCxvJg748w5fu+rLhWL+/UHAzOIRwZGPWhu0L/Vz+9ek5ZiYyR3N0vZVpWgUrbc+ytKTA==} + '@copilotkit/channels-discord@0.2.1': + resolution: {integrity: sha512-7VpdVd4Wo3JL9zOFSrRzUBjfkASxSmsfBmSSeyc8uxwx+zfaKfi7bV6lzZqq8DTcjdgnUGjNpPuVGNtwYPJuig==} - '@copilotkit/channels-intelligence@0.2.0': - resolution: {integrity: sha512-P26yf8OIYtUr/6grDxXtasEacdLqMOUDnr+CxkcYroHEyR8+/Dpyg9BoL7+XYci2+rvvhn0TP+vwRDEHEYeBsw==} + '@copilotkit/channels-intelligence@0.2.1': + resolution: {integrity: sha512-kcT8GCDeFxeLuH99EvLSPrUL5wcJrd2Q23jC7lFYQO0N31fQMrtTwyJtE4XW4YfrqUsNc3FFLv9kqfNMVn5Seg==} - '@copilotkit/channels-slack@0.2.0': - resolution: {integrity: sha512-CdRlFT6aDU7Vc8SpgIjNAHHHif4JxpELTw09+MXoAeyZ+lm5kdey6M3dLq5bTULjTeooxJSzU7KV0cdbpuKPQg==} + '@copilotkit/channels-slack@0.2.1': + resolution: {integrity: sha512-m6POLUDFKzRfMGMHFkQPo+DEmjOov9GPmxm9pwe+dgGo0ow144cISxvQvluiv8g36qbbk1Fhqr/jI8FRIT1cdg==} - '@copilotkit/channels-teams@0.2.0': - resolution: {integrity: sha512-B8F6npoHy1qbpCU4YaQqRGjXyITdHMOXKSWvxmOmkYRARpkNlURdGGuJ6S0f49RDZ1anXHtFgg4a3+XNrc3SRQ==} + '@copilotkit/channels-teams@0.2.1': + resolution: {integrity: sha512-d+X7cLHcNsuIlEzzsFWcQUfCp4TVXsPn9F+7yWy8R+EvuhqUwBYEucTx2kzcgMoVRv8nuuHYJek3Pd6c1QwEUQ==} - '@copilotkit/channels-telegram@0.2.0': - resolution: {integrity: sha512-8P4MkwNEOhNK7nUKqwIBWCjN3EBQGvoWVZ9/Fpihe7SN25B0BHuTnlfekd2XQPRx8jxu7ysoNibL2zztFdfLmg==} + '@copilotkit/channels-telegram@0.2.1': + resolution: {integrity: sha512-MBkbxrC2qio9i0PSn4N1TDkJmSJvP7Wn6Fbc9hOUoR3hAGW/RhZbgCHPyE6j3VQfDWiPABZCHtrbPbL3hacqyw==} - '@copilotkit/channels-ui@0.2.0': - resolution: {integrity: sha512-ZVna1jml3H8kwSXHdNdI0TSjRFg/PGaOfHhpzDSePpv+LksUlINO59Tt3DtsN806Zc3ADoG5orHYjn+B7bhklg==} + '@copilotkit/channels-ui@0.2.1': + resolution: {integrity: sha512-hHIOLic5a8Vx3Yr9TvZWv/LZ16vF8FPe/z7c9wiHIHrJnjsV7oxrEmJNv+WiOVUW4yV3CgEIH48/KesGBiK/kg==} - '@copilotkit/channels-whatsapp@0.2.0': - resolution: {integrity: sha512-JU+cg6Ec20tJMFKh6OqBYjfEoV9UIpvjFxSvqU5M/5V50jxFnwfdUsyjDwtZeT8srMqItWS1NXGayDq+yUJIFw==} + '@copilotkit/channels-whatsapp@0.2.1': + resolution: {integrity: sha512-xeV/By1j6F1YjnyOE4Zkk0lCPs/yZVLM1jNlDMauZYA+Ev3zsFRV+6QR7TKM8qG02pLR1OOYDa1pBhfH2SOuyA==} - '@copilotkit/channels@0.2.0': - resolution: {integrity: sha512-bs31LG1F8q/71UFlypc2SfEvEXVI9o0OgXzsRUjOMiWBBelnt391GqCQdjzyZ9EVjE00HRws+6hhkghHG6XrkA==} + '@copilotkit/channels@0.2.1': + resolution: {integrity: sha512-1R2ItgaBj0Gwna9NMxwdc0KEa9A439/6mJDr/Kmv5ikNzQueYTInDlCgXLAHnfTsCcVk0Z4R75NJ8yAPdCUxdA==} peerDependencies: vitest: ^4.0.0 peerDependenciesMeta: vitest: optional: true - '@copilotkit/core@1.62.3': - resolution: {integrity: sha512-Iw0XTJDylh4DTL1qqqoDSvMeL4lXGWfn8UAunnvYtVZ2BF3gs6Lw6K/yOQ0gGQKMqIxeQmgLVclErxwBcaJ8KQ==} + '@copilotkit/core@1.63.1': + resolution: {integrity: sha512-Js7oHLtylw6sQQja/g7CunvF7l7dfhVq/n+NVNnuRbnvrq/xJxpEJfEsM+UomYxalB2pbtpqC+uxjnaoM5zk3A==} engines: {node: '>=18'} '@copilotkit/license-verifier@0.5.0': @@ -312,6 +312,11 @@ packages: peerDependencies: '@ag-ui/core': '>=0.0.48' + '@copilotkit/shared@1.63.1': + resolution: {integrity: sha512-jm7eNDS4AcA+s1lkOnd9U1BKelgGrFLXg64e5T4AVN5BUJyi2GRC67unBjT+9cvMgZGXI2Dj4jrsY5rQyiaXAw==} + peerDependencies: + '@ag-ui/core': '>=0.0.48' + '@discordjs/builders@1.14.1': resolution: {integrity: sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==} engines: {node: '>=16.11.0'} @@ -2702,13 +2707,13 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@copilotkit/channels-core@0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-core@0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) - '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.63.1(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.63.1(@ag-ui/core@0.0.57) zod-to-json-schema: 3.25.2(zod@3.25.76) optionalDependencies: vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) @@ -2716,11 +2721,11 @@ snapshots: - encoding - zod - '@copilotkit/channels-discord@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-discord@0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) discord.js: 14.26.4 zod: 3.25.76 transitivePeerDependencies: @@ -2730,11 +2735,11 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-intelligence@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-intelligence@0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) phoenix: 1.8.8 transitivePeerDependencies: - '@ag-ui/core' @@ -2742,14 +2747,14 @@ snapshots: - vitest - zod - '@copilotkit/channels-slack@0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-slack@0.2.1(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) - '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.63.1(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.63.1(@ag-ui/core@0.0.57) '@slack/bolt': 4.7.3(@types/express@5.0.6) '@slack/types': 2.21.1 '@slack/web-api': 7.17.0 @@ -2765,14 +2770,14 @@ snapshots: - utf-8-validate - vitest - '@copilotkit/channels-teams@0.2.0(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-teams@0.2.1(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 '@ag-ui/core': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) - '@copilotkit/core': 1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76) - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) + '@copilotkit/core': 1.63.1(@ag-ui/core@0.0.57)(zod@3.25.76) + '@copilotkit/shared': 1.63.1(@ag-ui/core@0.0.57) '@microsoft/agents-activity': 1.6.1 '@microsoft/agents-hosting': 1.6.1(@opentelemetry/api@1.9.1) express: 4.22.2 @@ -2786,11 +2791,11 @@ snapshots: - supports-color - vitest - '@copilotkit/channels-telegram@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': + '@copilotkit/channels-telegram@0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) grammy: 1.44.0 zod: 3.25.76 transitivePeerDependencies: @@ -2799,34 +2804,34 @@ snapshots: - supports-color - vitest - '@copilotkit/channels-ui@0.2.0(@ag-ui/core@0.0.57)': + '@copilotkit/channels-ui@0.2.1(@ag-ui/core@0.0.57)': dependencies: - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@copilotkit/shared': 1.63.1(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - '@copilotkit/channels-whatsapp@0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels-whatsapp@0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) transitivePeerDependencies: - '@ag-ui/core' - encoding - vitest - zod - '@copilotkit/channels@0.2.0(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': + '@copilotkit/channels@0.2.1(@ag-ui/core@0.0.57)(@opentelemetry/api@1.9.1)(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76)': dependencies: - '@copilotkit/channels-core': 0.2.0(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-discord': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) - '@copilotkit/channels-intelligence': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) - '@copilotkit/channels-slack': 0.2.0(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) - '@copilotkit/channels-teams': 0.2.0(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) - '@copilotkit/channels-telegram': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) - '@copilotkit/channels-ui': 0.2.0(@ag-ui/core@0.0.57) - '@copilotkit/channels-whatsapp': 0.2.0(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-core': 0.2.1(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-discord': 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-intelligence': 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) + '@copilotkit/channels-slack': 0.2.1(@types/express@5.0.6)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-teams': 0.2.1(@opentelemetry/api@1.9.1)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-telegram': 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))) + '@copilotkit/channels-ui': 0.2.1(@ag-ui/core@0.0.57) + '@copilotkit/channels-whatsapp': 0.2.1(@ag-ui/core@0.0.57)(vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)))(zod@3.25.76) optionalDependencies: vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) transitivePeerDependencies: @@ -2841,10 +2846,10 @@ snapshots: - utf-8-validate - zod - '@copilotkit/core@1.62.3(@ag-ui/core@0.0.57)(zod@3.25.76)': + '@copilotkit/core@1.63.1(@ag-ui/core@0.0.57)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.57 - '@copilotkit/shared': 1.62.3(@ag-ui/core@0.0.57) + '@copilotkit/shared': 1.63.1(@ag-ui/core@0.0.57) '@tanstack/pacer': 0.20.1 phoenix: 1.8.8 rxjs: 7.8.2 @@ -2933,6 +2938,22 @@ snapshots: transitivePeerDependencies: - encoding + '@copilotkit/shared@1.63.1(@ag-ui/core@0.0.57)': + dependencies: + '@ag-ui/client': 0.0.57 + '@ag-ui/core': 0.0.57 + '@copilotkit/license-verifier': 0.5.0 + '@segment/analytics-node': 2.3.0 + '@standard-schema/spec': 1.1.0 + chalk: 4.1.2 + graphql: 16.14.2 + partial-json: 0.1.7 + uuid: 11.1.1 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - encoding + '@discordjs/builders@1.14.1': dependencies: '@discordjs/formatters': 0.6.2