From c195f75cbd40c7ea769d20dcb19afb27d8b10a0e Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Tue, 16 Jun 2026 10:06:17 -0700 Subject: [PATCH 1/7] chore(deps): bump @zapier/zapier-sdk 0.69.3 -> 0.70.4 Verified the durable runDurable userJwt 403 reproduces identically on the latest SDK before sending the Zapier-engineer brief. 0.70.0-0.70.4 are schema/field-parity/streaming changes only; no auth changes. Co-Authored-By: Claude Opus 4.8 (1M context) --- package-lock.json | 24 +++++++++++++++++++++++- packages/agents/package.json | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 161cc7ae..af245178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9193,6 +9193,7 @@ "version": "0.69.3", "resolved": "https://registry.npmjs.org/@zapier/zapier-sdk/-/zapier-sdk-0.69.3.tgz", "integrity": "sha512-Vc818xC/UVibMk31f3NQsAHo/j2HjLKQX2smz0ZJyCWHh7p/MFJFeUuWqKAlq1kmNSaJqObMttZLWk07PVVcPg==", + "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { "@zapier/policy-context": "0.7.0", @@ -23304,7 +23305,7 @@ "@mastra/rag": "2.2.1-alpha.0", "@mastra/voice-openai": "0.12.2-alpha.0", "@supabase/supabase-js": "^2.105.4", - "@zapier/zapier-sdk": "^0.69.3", + "@zapier/zapier-sdk": "^0.70.4", "ai": "^6.0.177", "async-mutex": "^0.5.0", "chat": "^4.28.1", @@ -23338,6 +23339,27 @@ "@mastra/deployer-vercel": "1.1.37-alpha.0" } }, + "packages/agents/node_modules/@zapier/zapier-sdk": { + "version": "0.70.4", + "resolved": "https://registry.npmjs.org/@zapier/zapier-sdk/-/zapier-sdk-0.70.4.tgz", + "integrity": "sha512-XQGTeanJbBrCJm2AVi1NZvrmyk9coGAeHqQFPzu2ZeiGua0yDoaVrQVllUE4Gu229YSlK23ZV8B29dyH+eRA+Q==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@zapier/policy-context": "0.7.0", + "@zapier/policy-schema": "0.11.0", + "@zapier/zapier-sdk-core": "0.12.0", + "zod": "4.3.6" + } + }, + "packages/agents/node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "packages/web": { "name": "@foreman/web", "version": "0.1.0", diff --git a/packages/agents/package.json b/packages/agents/package.json index f399453b..6b5af874 100644 --- a/packages/agents/package.json +++ b/packages/agents/package.json @@ -59,7 +59,7 @@ "@mastra/rag": "2.2.1-alpha.0", "@mastra/voice-openai": "0.12.2-alpha.0", "@supabase/supabase-js": "^2.105.4", - "@zapier/zapier-sdk": "^0.69.3", + "@zapier/zapier-sdk": "^0.70.4", "ai": "^6.0.177", "async-mutex": "^0.5.0", "chat": "^4.28.1", From d9d1300f1ff275cef1e13a4846d3853e81061e28 Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Tue, 16 Jun 2026 10:13:28 -0700 Subject: [PATCH 2/7] docs(zapier): durable-execution engineer brief + full 18-endpoint auth sweep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brief asks Zapier two questions: (1) what token satisfies durable's userJwt scheme (client-creds AND real PKCE userJwt both 403; PKCE scope downgraded internal->external), and (2) the undocumented source_files entry-point contract. Adds scripts/durable-endpoints-probe.ts: sweeps all 18 durable/workflow endpoints under both credential types. Result on SDK 0.70.4: 18/18 return 403 'security schemes (userJwt)' for each auth type — fully empirical, no inference. (SDK validates args client-side first, so the probe uses valid-format UUIDs to actually reach the server's auth layer.) Co-Authored-By: Claude Opus 4.8 (1M context) --- .beads/export-state.json | 2 +- .beads/issues.jsonl | 2 + .../zapier-durable-questions-for-engineers.md | 388 ++++++++++++++++++ .../agents/scripts/durable-endpoints-probe.ts | 242 +++++++++++ 4 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 docs/zapier-durable-questions-for-engineers.md create mode 100644 packages/agents/scripts/durable-endpoints-probe.ts diff --git a/.beads/export-state.json b/.beads/export-state.json index 7dbda4aa..3905e1ce 100644 --- a/.beads/export-state.json +++ b/.beads/export-state.json @@ -1 +1 @@ -{"last_dolt_commit":"j7pvv441gafvmu7lp6u1q7d41g0p4jan","timestamp":"2026-06-11T14:02:59.0820721-07:00","issues":245,"memories":0} \ No newline at end of file +{"last_dolt_commit":"o8vu7a0cluhbge8dvgcci6eteo0vknre","timestamp":"2026-06-16T10:04:37.662891-07:00","issues":256,"memories":0} \ No newline at end of file diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 398a93e6..e76f425f 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -92,6 +92,7 @@ {"_type":"issue","id":"foreman-b4m","title":"Monorepo extraction: standalone Mastra/Hono agent server + Next.js frontend","status":"closed","priority":1,"issue_type":"epic","owner":"admin@otakusolutions.io","created_at":"2026-04-18T02:44:42Z","created_by":"HamChowderr","updated_at":"2026-04-18T03:20:51Z","closed_at":"2026-04-18T03:20:51Z","close_reason":"Epic complete: monorepo extracted. packages/agents/ (Hono) + packages/web/ (Next.js). Web builds clean.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-m2m","title":"Monorepo extraction: standalone Mastra/Hono agent server + Next.js frontend","description":"Split the embedded Mastra agent out of Next.js into a standalone Hono server (packages/agents/) that exposes REST + A2A + MCP. Next.js frontend (packages/web/) becomes a thin UI layer. Follows Otaku Solutions canonical architecture.","status":"closed","priority":1,"issue_type":"epic","owner":"admin@otakusolutions.io","created_at":"2026-04-18T02:44:30Z","created_by":"HamChowderr","updated_at":"2026-04-18T03:50:20Z","closed_at":"2026-04-18T03:50:20Z","close_reason":"Epic complete: monorepo extracted, web builds, agent server configured with multi-target deploy.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-0zs","title":"Deploy to Vercel","description":"Env vars set, LibSQL hosted (Turso or self-hosted), domain configured. AC: Production URL responds. Can sign up, connect Zapier, run an action end-to-end.","status":"closed","priority":1,"issue_type":"task","assignee":"HamChowderr","owner":"admin@otakusolutions.io","created_at":"2026-04-17T18:28:13Z","created_by":"HamChowderr","updated_at":"2026-04-19T01:41:35Z","closed_at":"2026-04-19T01:41:35Z","close_reason":"Deployed both services. Web frontend on Vercel (foreman-three.vercel.app), agent server on Coolify/Hostinger VPS (foreman-agents.otakusolutions.io:4111). Coolify app UUID: oqshe32xh3v8zva7tt6r4aff. Dockerfile.agents uses multi-stage build with node:22-slim. 14 env vars configured. Using test Clerk keys (prod requires custom domain).","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"foreman-0yra","title":"Re-verify Zapier durable 403 on latest SDK 0.70.4 before sending engineer brief","description":"Bump @zapier/zapier-sdk 0.69.3 -\u003e 0.70.4 and re-run scripts/durable-pkce-probe.ts to confirm the runDurable userJwt 403 still reproduces on the latest SDK. Closes the 'are you on latest?' gap in docs/zapier-durable-questions-for-engineers.md. Changelog review (0.70.0-0.70.4) showed no durable-auth changes; this is the empirical confirmation.","status":"closed","priority":2,"issue_type":"task","assignee":"HamChowderr","owner":"admin@otakusolutions.io","created_at":"2026-06-16T16:58:24Z","created_by":"HamChowderr","updated_at":"2026-06-16T17:02:57Z","started_at":"2026-06-16T16:58:47Z","closed_at":"2026-06-16T17:02:57Z","close_reason":"Durable 403 reproduced on latest SDK 0.70.4; brief tightened. Version gap + endpoint-coverage honesty both addressed.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-sg23","title":"Vercel preview build fails (module_not_found) on alpha branch — align install with CI","description":"PR #17 Vercel preview deploy errors at buildStep with errorCode module_not_found ('cd packages/web \u0026\u0026 npm run build' exit 1), while all 5 GHA gating jobs (incl. web next build via npm ci) are GREEN on the same commit, and a clean local build passes. Install succeeds; .source self-regenerates via withMDX so it is not the cause. Build-log API is 403 (CLI token lacks build-log scope), so the exact module is dashboard-only. Divergence: Vercel installCommand 'npm install' (+ possible stale cached node_modules on a fresh branch) vs GHA 'npm ci'. Non-gating (main production deploys are Ready), does not block merge. Fix: set vercel.json installCommand to 'npm ci' to force a clean lockfile-exact install matching the proven-green CI path.","notes":"FIXED properly: root cause was a duplicated react in the alpha-regenerated lockfile — root node_modules/react 19.2.7 (ecosystem ^19.2.0) + nested packages/web/node_modules/react 19.2.4 (web's exact pin). next (hoisted to root) could not resolve react on Vercel's npm. Fix: root overrides react/react-dom=19.2.7 → clean reinstall dedupes to a SINGLE root react 19.2.7 (no nested copy), verified locally (lockfile single entry + web next build exit 0). Reverted the two wrong guesses (npm ci 3e8a5ec, rm -rf a5bb049); installCommand back to npm install.","status":"in_progress","priority":2,"issue_type":"bug","assignee":"HamChowderr","owner":"admin@otakusolutions.io","created_at":"2026-06-12T17:14:15Z","created_by":"HamChowderr","updated_at":"2026-06-12T17:59:22Z","started_at":"2026-06-12T17:14:36Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-hlh0","title":"[web] Surface run fired_by/error_message + fix failed-status badge","description":"The agent API (GET /workflows/:id/runs) now returns fired_by/error_message/trigger_id (foreman-2afc), but the web doesn't render them, and there's a pre-existing display bug: the engine writes status 'failed' but workflows-client WorkflowRun.status + the StatusBadge map only know 'error', so failed runs render as 'running'. Fix: (1) WorkflowRun.status -\u003e 'running'|'success'|'failed' + add fired_by/error_message/trigger_id; (2) [id]/page.tsx StatusBadge map key error-\u003efailed + show how each run fired; (3) run detail page show fired_by + error_message. First visible slice of the broader 'surface new backend in UI' work (foreman-tbjb/7am4/ezsm).","status":"closed","priority":2,"issue_type":"task","owner":"admin@otakusolutions.io","created_at":"2026-06-12T16:30:49Z","created_by":"HamChowderr","updated_at":"2026-06-12T16:34:48Z","closed_at":"2026-06-12T16:34:48Z","close_reason":"Done (ada01c9): WorkflowRun type gains status=failed + fired_by/error_message/trigger_id; run list shows how each run fired + inline error on failure; run detail shows 'started by' + an error box. Fixed the pre-existing bug where failed runs rendered as 'running' (engine writes 'failed', web only knew 'error'). next build green.","dependencies":[{"issue_id":"foreman-hlh0","depends_on_id":"foreman-2afc","type":"discovered-from","created_at":"2026-06-12T09:30:48Z","created_by":"HamChowderr","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-tbjb","title":"[signals] notify() is inert — driving processes don't connect the providers","description":"The poll + channel SignalProviders are hosted on the foreman agent for notify(), but the processes that DRIVE them don't reliably CONNECT them, so notify() is a no-op (provider.agent undefined -\u003e notifyOwner returns early). (1) cron-driver-server drives zapierPollProvider.runDuePolls() but never calls getMastra()/builds the foreman agent, so poll notify() never fires. (2) channel: slack/bot.ts builds the agent lazily inside generateReply, AFTER matchAndFireChannelTriggers, so the channel provider isn't connected for trigger-only messages until the process first runs generateReply. (3) even when fired, notify targets synthetic threads (poll:\u003cid\u003e, channel:\u003cch\u003e:\u003croom\u003e) and no web UI consumes the notification store, so it's not user-visible. Workflow FIRING is unaffected/correct (doesn't need the agent). FIX: have the driving processes construct the agent at startup (cron-driver-server: getMastra() so the provider connects; webhook-server: build foreman at startup) + a web consumer of the notification store / thread to surface it. Until then notify() is scaffolding, not delivered.","notes":"CONNECT FIX DONE (commit 177c281): cron-driver-server + webhook-server now call getMastra() at startup -\u003e foreman agent built in-process -\u003e providers connected (+ notification storage available). Live-verified: cron logs 'poll provider connected: true'. So notify() now FIRES (writes to the notification store) on poll/channel trigger hits. REMAINING (the user-visible half): a web consumer of the notification store / agent thread to surface the notification in chat — bundles with the deferred background-tasks /background-tasks/stream consumer. Also: notify targets synthetic threads (poll:\u003cid\u003e, channel:\u003cch\u003e:\u003croom\u003e) — revisit thread targeting when wiring the UI.","status":"open","priority":2,"issue_type":"bug","owner":"admin@otakusolutions.io","created_at":"2026-06-12T05:22:51Z","created_by":"HamChowderr","updated_at":"2026-06-12T05:34:51Z","dependency_count":0,"dependent_count":0,"comment_count":0} @@ -214,6 +215,7 @@ {"_type":"issue","id":"foreman-c9y","title":"Set up LibSQL + Drizzle ORM","description":"Single LibSQL database for app + Mastra data. Migrations runnable via script. AC: npm run db:migrate creates BetterAuth tables. Connection string in .env.","status":"closed","priority":2,"issue_type":"task","owner":"admin@otakusolutions.io","created_at":"2026-04-17T18:25:48Z","created_by":"HamChowderr","updated_at":"2026-04-17T18:28:37Z","closed_at":"2026-04-17T18:28:37Z","close_reason":"Completed in Phase 1 and Phase 2 (T1-T31 done)","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-s46","title":"Install and configure BetterAuth","description":"Email/password auth. Session stored in LibSQL. AC: /sign-up and /sign-in pages work. Authenticated session persists across reloads.","status":"closed","priority":2,"issue_type":"task","owner":"admin@otakusolutions.io","created_at":"2026-04-17T18:25:46Z","created_by":"HamChowderr","updated_at":"2026-04-17T18:28:37Z","closed_at":"2026-04-17T18:28:37Z","close_reason":"Completed in Phase 1 and Phase 2 (T1-T31 done)","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-5ld","title":"Initialize Next.js 15 project","description":"Scaffold Next.js 15 with App Router, TypeScript, Tailwind. AC: npm run dev serves a blank page at /. Project committed to git under C:\\Users\\HamCh\\code\\foreman.","status":"closed","priority":2,"issue_type":"task","owner":"admin@otakusolutions.io","created_at":"2026-04-17T18:25:38Z","created_by":"HamChowderr","updated_at":"2026-04-17T18:28:37Z","closed_at":"2026-04-17T18:28:37Z","close_reason":"Completed in Phase 1 and Phase 2 (T1-T31 done)","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"foreman-hflh","title":"Add .gitattributes to normalize line endings (kill CRLF phantom diffs)","description":"Repo has no .gitattributes; on Windows (autocrlf=true) the working tree is CRLF while git stores LF, producing ~170 phantom modified files each session and blocking clean fast-forwards. Add .gitattributes '* text=auto eol=lf' (+ binary markers).","status":"open","priority":3,"issue_type":"chore","owner":"admin@otakusolutions.io","created_at":"2026-06-12T19:11:26Z","created_by":"HamChowderr","updated_at":"2026-06-12T19:11:26Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-c8fo","title":"[zapier] Poll-trigger connection resolution: normalizeAppKey + numeric-id/alias vs SDK uuid mismatch","description":"Live e2e (foreman-ueep) surfaced this. A poll trigger config storing a raw Zapier app_key (e.g. 'GitHubCLIAPI') fails the real read: runAction does normalizeAppKey('GitHubCLIAPI')='github', then auto-discover findFirstConnection({app:'github'}) does NOT match the connection whose app_key is 'GitHubCLIAPI' -\u003e no connection -\u003e 'access_token missing'. Separately, resolveConnection expects a numeric connection_id or a registered connection_alias, but sdk.findFirstConnection returns a UUID id (e.g. 0206dbe8-...), so passing that id as config.connection throws 'Unknown connection alias'. Net: for a poll trigger to read for real, the app key must be the normalized form AND the user's connection must be discoverable/aliased under it. CONFIRMED WORKING in isolation: sdk.runAction({app:'GitHubCLIAPI', connection:'\u003cuuid\u003e'}) returns {data:[100 repos]} and the poll driver's extractRecords parses it. So this is connection-resolution plumbing, not poll-driver logic (logic proven by tests/live/poll-driver.test.ts). Decide: normalize app keys at attach time, store the resolved connection id, and/or make auto-discover tolerant of raw app_key suffixes.","notes":"RESOLVED / MISDIAGNOSED earlier. There is NO poll-driver or connection-model bug. Proven: the full real poll fire works end-to-end (real Postgres + real Zapier GitHub read) when the poll config uses the CATALOG app key 'github' — baseline sets cursor from the real read, a new record fires one workflow_run (status=success, fired_by=poll, trigger_id set), and dedup prevents a second. Earlier failures were entirely my test input: I used the raw Zapier app_key 'GitHubCLIAPI', and normalizeAppKey('GitHubCLIAPI')='git-hub' (dashed), which Zapier doesn't match. normalize/resolveConnection/findFirstConnection are all fine. RESIDUAL (latent, low priority, NOT poll-specific): normalizeAppKey turns the raw Zapier key 'GitHubCLIAPI' into 'git-hub' rather than 'github', so feeding a raw Zapier app_key into any runAction breaks. Only matters if a caller uses raw Zapier keys instead of catalog keys; the agent/catalog uses normalized keys. Reduce to P3 / hardening.","status":"closed","priority":3,"issue_type":"bug","owner":"admin@otakusolutions.io","created_at":"2026-06-12T06:29:32Z","created_by":"HamChowderr","updated_at":"2026-06-12T16:18:06Z","closed_at":"2026-06-12T16:18:06Z","close_reason":"FIXED (37e324d): added catalog-backed resolveAppSlug (app_key OR slug -\u003e canonical slug; pass-through unchanged when not in catalog), wired into runAction + workflow-step save, replacing the buggy normalizeAppKey at both call sites. Live-verified: the raw 'GitHubCLIAPI' key (previously broke with 'No current_implementation_id') now fires a real workflow_run (status=success) against real Zapier + real Postgres. 5 unit tests; full suite 308 green.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-m9f6","title":"[channels] Thread real platform message ids into ChannelMessage.dedupeKey","description":"ChannelTriggerSignalProvider dedup falls back to a content hash (channel|room|from|text) when ChannelMessage.dedupeKey is absent, which coalesces a user sending the exact same text back-to-back. Pass each adapter's stable message id as dedupeKey from the ~10 channel-bot call sites (slack/discord/telegram/teams/whatsapp/gchat/github/linear onDirectMessage + onNewMention) where the Chat SDK message exposes one. Removes the false-positive edge; true per-delivery idempotency.","status":"closed","priority":3,"issue_type":"task","assignee":"HamChowderr","owner":"admin@otakusolutions.io","created_at":"2026-06-12T03:31:07Z","created_by":"HamChowderr","updated_at":"2026-06-12T16:46:33Z","started_at":"2026-06-12T16:39:12Z","closed_at":"2026-06-12T16:46:33Z","close_reason":"Threaded normalized Chat SDK message.id into ChannelMessage.dedupeKey across all 8 channel bots (16 call-sites). Provider now dedupes on the real platform message id; content-hash is fallback only. Type-clean, 308 mocked tests green, committed c942a92.","dependencies":[{"issue_id":"foreman-m9f6","depends_on_id":"foreman-tv5p","type":"discovered-from","created_at":"2026-06-11T20:31:07Z","created_by":"HamChowderr","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"foreman-l8ev","title":"Document Zapier SDK auth model in README (client-creds vs userJwt per surface)","description":"Discovered during SDK exploration: the Zapier SDK surfaces need DIFFERENT auth. Trigger inboxes + discovery + runAction accept app-level client-credentials (ZAPIER_CLIENT_ID/SECRET). Durable-workflow endpoints (runDurable/publishWorkflowVersion) require a per-user userJwt (PKCE OAuth token), NOT client-creds. The new zapier-sdk-cli (0.54) login yields client-creds only; ~/.zapierrc deployKey is a legacy 32-char non-JWT (invalid as SDK creds). Document in README: which surfaces need which auth, how Foreman obtains each (env client-creds vs lib/zapier/sdk.ts PKCE per-user token), and the open question for Zapier (server-side path to per-user durable). Come back to this later. See docs/durable-workflow-spike.md + docs/trigger-inbox-spike.md.","status":"open","priority":3,"issue_type":"task","owner":"admin@otakusolutions.io","created_at":"2026-06-11T18:39:52Z","created_by":"HamChowderr","updated_at":"2026-06-11T18:39:52Z","dependency_count":0,"dependent_count":0,"comment_count":0} diff --git a/docs/zapier-durable-questions-for-engineers.md b/docs/zapier-durable-questions-for-engineers.md new file mode 100644 index 00000000..ae816585 --- /dev/null +++ b/docs/zapier-durable-questions-for-engineers.md @@ -0,0 +1,388 @@ +# Durable Execution — Questions for Zapier Engineers + +**From:** Foreman team (admin@otakusolutions.io) +**Re:** `@zapier/zapier-sdk/experimental` durable-workflow API (`runDurable` / `publishWorkflowVersion`) +**Date of findings:** 2026-06-11 (SDK `0.69.3`); re-confirmed 2026-06-16 on the latest SDK `0.70.4` +**Status:** Blocked — durable is unreachable with every credential a public SDK client can mint. + +--- + +## TL;DR — what we need from you + +We want to use the experimental durable-workflow API. We're blocked on **two** things: + +1. **Auth.** `runDurable` returns **HTTP 403 `"None of the security schemes (userJwt) successfully authenticated this request."`** for *both* app-level client-credentials **and** a genuine per-user PKCE user JWT. The PKCE flow *requests* scope `internal credentials offline_access` but is only *granted* `external credentials offline_access`. It looks like durable requires an **`internal`-scoped** token that the public PKCE client is not permitted to obtain. + - **What grants a token that satisfies durable's `userJwt` scheme?** +2. **Source-file contract.** Even with valid auth, the `source_files` entry-point/runtime contract that `runDurable` expects is undocumented (not in the SDK `.d.ts`, the README, or docs.zapier.com; the SDK's own `defineDurable` is a "Phase-2 / not callable yet" stub). + - **What is the entry-point contract `source_files` code must conform to?** + +A complete, self-contained reproduction script is included at the end — it needs no app, no DB, no Foreman env. + +--- + +## 1. Environment snapshot + +| Package | Version | +|---|---| +| `@zapier/zapier-sdk` | `0.70.4` (latest; originally found on `0.69.3`, reproduced identically on `0.70.4`) | +| `@zapier/zapier-sdk-cli` | `0.54.3` | +| `@zapier/zapier-durable` | referenced from npm at `0.5.4` (not installed as a repo dep) | +| `zod` | `4.4.3` | +| Node | 22 | + +We reviewed the full `0.70.0`–`0.70.4` changelog: every durable-touching change is response-schema / field-parity / streaming work — **no auth, scope, or security-scheme changes** — consistent with the 403 being a server-side OAuth wall rather than an SDK artifact. We then re-ran the reproduction (below) on `0.70.4` and got the identical 403. + +OAuth client used (the SDK's **public** PKCE client — the same one `zapier-sdk login` uses): +`grwWZD5hUWGvb4V8ODBuOtXer3h0DBEZ2HR8aay6`, redirecting to one of the localhost ports Zapier allow-lists for it: `49505, 50575, 52804, 55981, 61010, 63851`. + +--- + +## 2. Which SDK surfaces work with which auth (verified empirically) + +| SDK surface | App client-credentials (`ZAPIER_CLIENT_ID/SECRET`) | Public-PKCE user JWT (our `connect.ts` flow) | +|---|---|---| +| `runAction`, discovery, `apps.*`, tables | ✅ | ✅ | +| Trigger inboxes (`/experimental` — `ensureTriggerInbox`/`lease`/`ack`) | ✅ | ✅ | +| **Durable / workflow — all 18 endpoints** (each individually called) | ❌ **403** | ❌ **403** | +| Legacy `~/.zapierrc` `deployKey` (32-char, not a JWT) | ❌ `"Failed to authenticate Bearer token"` | — | + +**Durable is the only surface we cannot reach.** Everything else authenticates cleanly with the very same tokens. + +> **Scope of testing — we swept the entire durable/workflow surface, not just `runDurable`.** A sweep script (`scripts/durable-endpoints-probe.ts`) calls **all 18** durable/workflow endpoints with valid-format args (so each clears the SDK's client-side Zod validation and actually reaches the server's auth layer) under **both** credential types. **Result: 18/18 return the identical `userJwt` 403 under client-credentials, and 18/18 return it again under a real PKCE userJwt.** Nothing here is inferred. The 18 endpoints: +> +> `runDurable`, `listDurableRuns`, `getDurableRun`, `cancelDurableRun`, `createWorkflow`, `listWorkflows`, `getWorkflow`, `updateWorkflow`, `deleteWorkflow`, `enableWorkflow`, `disableWorkflow`, `publishWorkflowVersion`, `getWorkflowVersion`, `listWorkflowVersions`, `triggerWorkflow`, `getWorkflowRun`, `listWorkflowRuns`, `getTriggerRun`. + +--- + +## 3. The exact error + +``` +runDurable threw: None of the security schemes (userJwt) successfully authenticated this request. +HTTP 403 +``` + +Returned identically for: +- App-level **client-credentials**, and +- A **real per-user PKCE user JWT** that we minted with our production `connect.ts` flow and validated against `getProfile` (resolved to `admin@otakusolutions.io`). + +--- + +## 4. Auth analysis — the scope downgrade ("the tell") + +Our PKCE authorize request asks for: + +``` +scope = "internal credentials offline_access" +``` + +The token Zapier returns is granted: + +``` +scope = "external credentials offline_access" +``` + +So the `internal` portion is silently dropped. Durable's `userJwt` security scheme appears to require **`internal`** scope, and the **public** PKCE client (`grwWZD…`) is not permitted to obtain it. That makes durable gated not on *"get a user JWT"* but on a **privileged scope/audience no publicly-available Zapier SDK client can mint** — a hard wall on Zapier's side, not an integration gap on ours. + +### Auth questions + +1. What grants a token that satisfies durable's `userJwt` scheme — an `internal`-scoped OAuth client, a privileged/allow-listed client, a token exchange (client-creds → user token), or a dedicated service identity? +2. Is the `internal` → `external` scope **downgrade** on the public PKCE client the intended gate? +3. For a **server / headless context** (no interactive user present at run time), what is the sanctioned way to obtain a durable-capable token? +4. Is durable simply **not yet open** to public SDK clients at all? If so, is there an allow-list / early-access path? + +--- + +## 5. Source-file contract — the second unknown + +`runDurable`'s type (from the `0.70.4` `.d.ts`): + +```ts +runDurable(args: { + source_files: Record; // filename -> code + input?: unknown; + dependencies?: ...; + zapier_durable_version?: ...; + connections?: ...; + app_versions?: ...; + notifications?: ...; // added in 0.70.4 — webhook subscribers for run lifecycle events + private?: boolean; +}): Promise<{ id: string; status: "initialized"; created_at: string }> +``` + +We understand `source_files` is code written against **`@zapier/zapier-durable`** (`defineDurable`, `ctx.step`, `ctx.createCallback`). But the **entry-point + runtime contract** is undocumented: + +- Not in the SDK `.d.ts`. +- The README example is literally `source_files: {}`. +- docs.zapier.com has **zero** durable references. +- The SDK's own `defineDurable` is an explicit **"Phase-2 / not callable yet"** stub. + +### Source-file questions + +5. What entry-point contract must `source_files` conform to? (Default export? A specific filename, e.g. `index.ts`? A named export?) +6. What does `zapier_durable_version` pin, and which value should we target with `@zapier/zapier-durable@0.5.4`? +7. How are `dependencies` / `app_versions` / `connections` resolved at execution time? +8. Are there private or forthcoming durable programming-model docs you can share? + +This is the best-effort hello-world we'd run *once auth is unblocked* (the runtime error from this would itself teach us the real contract): + +```ts +import { defineDurable } from "@zapier/zapier-durable"; +import { z } from "zod"; + +export default defineDurable({ + name: "hello-world", + inputSchema: z.object({ name: z.string().optional() }), + run: async (ctx, input) => { + const greeting = await ctx.step("greet", async () => `Hello, ${input?.name ?? "world"}!`); + return { greeting }; + }, +}); +``` + +--- + +## 6. Self-contained reproduction script + +Runs standalone — **no web app, no Supabase, no Foreman env**. It mints a *real* per-user PKCE user JWT (identical to our production flow), validates it via `getProfile`, then calls `runDurable`. From `packages/agents`: + +```bash +npx tsx scripts/durable-pkce-probe.ts +``` + +```ts +/** + * Durable Auth Proof via standalone PKCE + * Replicates Foreman's connect.ts PKCE OAuth flow in ONE self-contained script: + * 1. Spin up a local callback server on a Zapier-accepted login port. + * 2. Print the authorize URL; you click + authorize in the browser. + * 3. Capture the code, exchange it (PKCE) for a real per-user userJwt. + * 4. createZapierSdk({credentials: token}) and call experimental runDurable. + * 5. Poll getDurableRun to terminal; dump the full run journal/error. + */ +import { createHash, randomBytes } from "node:crypto"; +import { createServer } from "node:http"; +import { createZapierSdk } from "@zapier/zapier-sdk/experimental"; + +const ZAPIER_AUTHORIZE_URL = "https://zapier.com/oauth/authorize/"; +const ZAPIER_TOKEN_URL = "https://zapier.com/oauth/token/"; +// The SDK's public PKCE client — Zapier only accepts it with redirect URIs on these ports. +const ZAPIER_PKCE_CLIENT_ID = "grwWZD5hUWGvb4V8ODBuOtXer3h0DBEZ2HR8aay6"; +const LOGIN_PORTS = [49505, 50575, 52804, 55981, 61010, 63851]; +const ZAPIER_SCOPE = "internal credentials offline_access"; + +const b64url = (b: Buffer) => b.toString("base64url"); +const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); + +async function findPort(): Promise { + for (const port of LOGIN_PORTS) { + const ok = await new Promise((resolve) => { + const s = createServer(); + s.listen(port, () => s.close(() => resolve(true))); + s.on("error", () => resolve(false)); + }); + if (ok) return port; + } + throw new Error(`No login port free: ${LOGIN_PORTS.join(", ")}`); +} + +/** Listen on `port`; resolve with the ?code once Zapier redirects to /oauth. */ +function waitForCode(port: number, expectedState: string): Promise { + return new Promise((resolve, reject) => { + const server = createServer((req, res) => { + const url = new URL(req.url ?? "/", `http://localhost:${port}`); + if (url.pathname !== "/oauth") { + res.writeHead(404); + res.end(); + return; + } + const code = url.searchParams.get("code"); + const state = url.searchParams.get("state"); + const err = url.searchParams.get("error"); + res.writeHead(200, { "Content-Type": "text/html" }); + res.end( + "

Foreman durable probe

Authorization received — close this tab and return to the terminal.

", + ); + server.close(); + if (err) return reject(new Error(`OAuth error: ${err}`)); + if (!code) return reject(new Error("No code in callback")); + if (state !== expectedState) return reject(new Error("State mismatch (CSRF guard)")); + resolve(code); + }); + server.listen(port); + setTimeout( + () => { + server.close(); + reject(new Error("Timed out waiting for browser authorization (5 min)")); + }, + 5 * 60 * 1000, + ); + }); +} + +async function mintUserJwt(): Promise { + const verifier = b64url(randomBytes(32)); + const challenge = b64url(createHash("sha256").update(verifier).digest()); + const state = randomBytes(16).toString("hex"); + const port = await findPort(); + const redirectUri = `http://localhost:${port}/oauth`; + + const params = new URLSearchParams({ + response_type: "code", + client_id: ZAPIER_PKCE_CLIENT_ID, + redirect_uri: redirectUri, + state, + scope: ZAPIER_SCOPE, + code_challenge: challenge, + code_challenge_method: "S256", + }); + const authorizeUrl = `${ZAPIER_AUTHORIZE_URL}?${params.toString()}`; + + console.log("\nACTION REQUIRED — open this URL and authorize:\n"); + console.log(authorizeUrl); + console.log(`\n(listening for the callback on ${redirectUri})\n`); + + const code = await waitForCode(port, state); + console.log("Code received, exchanging for token…"); + + const res = await fetch(ZAPIER_TOKEN_URL, { + method: "POST", + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ + grant_type: "authorization_code", + code, + client_id: ZAPIER_PKCE_CLIENT_ID, + redirect_uri: redirectUri, + code_verifier: verifier, + }), + }); + if (!res.ok) throw new Error(`Token exchange failed (${res.status}): ${await res.text()}`); + const data = (await res.json()) as { access_token: string; scope?: string; expires_in?: number }; + console.log( + `userJwt minted: len=${data.access_token.length}, prefix="${data.access_token.slice(0, 6)}…", scope="${data.scope}"`, + ); + return data.access_token; +} + +// Best-effort hello-world against @zapier/zapier-durable's defineDurable shape. +// (Contract is undocumented — this is a probe; the runtime error teaches us the real shape.) +const HELLO_SOURCE = `import { defineDurable } from "@zapier/zapier-durable"; +import { z } from "zod"; + +export default defineDurable({ + name: "hello-world", + inputSchema: z.object({ name: z.string().optional() }), + run: async (ctx, input) => { + const greeting = await ctx.step("greet", async () => \`Hello, \${input?.name ?? "world"}!\`); + return { greeting }; + }, +}); +`; + +async function main() { + const token = await mintUserJwt(); + const sdk = createZapierSdk({ credentials: token }) as any; + + try { + const { data: profile } = await sdk.getProfile(); + console.log(`profile OK: ${profile?.email ?? profile?.id ?? "?"}`); + } catch (e) { + console.log(`profile probe failed: ${(e as Error).message}`); + } + + console.log("\nCalling runDurable with the userJwt…"); + let run: any; + try { + const { data } = await sdk.runDurable({ + source_files: { "index.ts": HELLO_SOURCE }, + input: { name: "Foreman" }, + private: true, + }); + run = data; + console.log(`✓ AUTH PASSED — runDurable accepted. run id=${data.id} status=${data.status}`); + } catch (e: any) { + const msg = String(e?.message ?? e); + console.log(`runDurable threw: ${msg}`); + if (/userJwt|security scheme|authenticate|unauthor/i.test(msg)) { + console.log("→ STILL AN AUTH FAILURE: the userJwt did NOT satisfy the durable scheme."); + } else { + console.log("→ AUTH PASSED (error is NOT auth-related — likely source_files contract)."); + } + for (const k of ["status", "statusCode", "response", "body", "cause"]) { + if (e?.[k] !== undefined) + console.log(` ${k}:`, JSON.stringify(e[k], null, 2).slice(0, 1500)); + } + return; + } + + console.log("\nPolling getDurableRun to terminal…"); + for (let i = 0; i < 20; i++) { + await sleep(3000); + const { data: cur } = await sdk.getDurableRun({ run: run.id }); + console.log(` status=${cur.status}`); + if (["finished", "failed", "cancelled"].includes(cur.status)) { + console.log("\nFINAL RUN STATE:"); + console.log(JSON.stringify(cur, null, 2).slice(0, 4000)); + return; + } + } + console.log("(still running after ~60s — re-query getDurableRun later with the run id)"); +} + +main().catch((e) => { + console.error("\nPROBE FAILED:", e?.message ?? e); + process.exit(1); +}); +``` + +### Observed output + +Original run (2026-06-11, SDK `0.69.3`): + +``` +userJwt minted: len=3192, prefix="eyJhbG…", scope="external credentials offline_access" +profile OK: admin@otakusolutions.io +runDurable threw: None of the security schemes (userJwt) successfully authenticated this request. +HTTP 403 +``` + +Re-confirmation (2026-06-16, latest SDK `0.70.4`): + +``` +userJwt minted: len=3199, prefix="eyJhbG…", scope="external credentials offline_access" +profile OK: admin@otakusolutions.io +runDurable threw: None of the security schemes (userJwt) successfully authenticated this request. +statusCode: 403 +``` + +The minted token is a real, profile-validated per-user JWT — the **same token type we use in production** for `runAction`, discovery, and trigger inboxes — and it still 403s on durable on the latest SDK. Note the granted `scope` is `external …`, not the requested `internal …`, on both versions. + +### Full-surface sweep (all 18 durable/workflow endpoints, both credential types) + +A companion script (`scripts/durable-endpoints-probe.ts`) calls every durable/workflow endpoint — with valid-format UUID args so each clears the SDK's local Zod validation and actually reaches the server — and classifies each response. Run on SDK `0.70.4`: + +``` +=== Durable endpoint sweep — auth: client-credentials === +sanity getProfile -> OK: admin@otakusolutions.io +runDurable, listDurableRuns, getDurableRun, cancelDurableRun, createWorkflow, +listWorkflows, getWorkflow, updateWorkflow, deleteWorkflow, enableWorkflow, +disableWorkflow, publishWorkflowVersion, getWorkflowVersion, listWorkflowVersions, +triggerWorkflow, getWorkflowRun, listWorkflowRuns, getTriggerRun + → every one: 403 "None of the security schemes (userJwt) successfully authenticated this request." +SUMMARY (client-credentials): 18/18 walled by userJwt-403, 0/18 authenticated. + +=== Durable endpoint sweep — auth: public-PKCE userJwt === +userJwt minted: len=3199, scope="external credentials offline_access" +sanity getProfile -> OK: admin@otakusolutions.io + → every one: 403 "None of the security schemes (userJwt) successfully authenticated this request." +SUMMARY (public-PKCE userJwt): 18/18 walled by userJwt-403, 0/18 authenticated. +``` + +So **every** durable/workflow endpoint is walled for **both** credential types a public SDK client can mint — and even a genuine PKCE userJwt is rejected by the `userJwt` scheme because it carries `external`, not `internal`, scope. (The trigger-inbox and action/discovery surfaces, by contrast, authenticate fine with the very same tokens.) + +--- + +## 7. Why this matters to us + +Durable's model (`ctx.step` memoized steps, `ctx.createCallback` for human-in-the-loop approvals) maps almost exactly onto our product: multi-step automations with human approval gates. We'd genuinely like to build on it rather than maintain our own execution engine — but right now we can't authenticate to it at all. A clear answer on the auth path (and, once unblocked, the `source_files` contract) is all we need to prototype a hello-world. + +Thanks very much — happy to jump on a call or share more traces. diff --git a/packages/agents/scripts/durable-endpoints-probe.ts b/packages/agents/scripts/durable-endpoints-probe.ts new file mode 100644 index 00000000..05b09e99 --- /dev/null +++ b/packages/agents/scripts/durable-endpoints-probe.ts @@ -0,0 +1,242 @@ +/** + * Durable/workflow endpoint sweep (foreman-0yra follow-up) + * -------------------------------------------------------- + * Answers: "did we test ALL the durable endpoints, or just runDurable?" + * + * Calls every durable/workflow method on the experimental SDK with minimal + * placeholder args and classifies each response: + * - WALLED (userJwt) -> 403 "None of the security schemes (userJwt)..." (auth wall, same as runDurable) + * - AUTH OK -> success, or a non-auth error (400/404/validation) => the token authenticated + * - OTHER -> anything else (printed verbatim) + * + * Auth precedes arg validation server-side, so placeholder args still surface + * the auth verdict. This proves whether the WHOLE durable family is userJwt-gated + * or just runDurable. + * + * Default mode uses CLIENT CREDENTIALS from env (no browser): + * ZAPIER_CLIENT_ID / ZAPIER_CLIENT_SECRET + * + * Run (from packages/agents): + * npx tsx scripts/durable-endpoints-probe.ts + */ +import { createHash, randomBytes } from "node:crypto"; +import { readFileSync } from "node:fs"; +import { createServer } from "node:http"; +import { createZapierSdk } from "@zapier/zapier-sdk/experimental"; + +// --- PKCE mint (mirrors src/lib/zapier/connect.ts + durable-pkce-probe.ts) --- +const ZAPIER_AUTHORIZE_URL = "https://zapier.com/oauth/authorize/"; +const ZAPIER_TOKEN_URL = "https://zapier.com/oauth/token/"; +const ZAPIER_PKCE_CLIENT_ID = "grwWZD5hUWGvb4V8ODBuOtXer3h0DBEZ2HR8aay6"; +const LOGIN_PORTS = [49505, 50575, 52804, 55981, 61010, 63851]; +const ZAPIER_SCOPE = "internal credentials offline_access"; +const b64url = (b: Buffer) => b.toString("base64url"); + +async function findPort(): Promise { + for (const port of LOGIN_PORTS) { + const ok = await new Promise((resolve) => { + const s = createServer(); + s.listen(port, () => s.close(() => resolve(true))); + s.on("error", () => resolve(false)); + }); + if (ok) return port; + } + throw new Error(`No login port free: ${LOGIN_PORTS.join(", ")}`); +} + +function waitForCode(port: number, expectedState: string): Promise { + return new Promise((resolve, reject) => { + const server = createServer((req, res) => { + const url = new URL(req.url ?? "/", `http://localhost:${port}`); + if (url.pathname !== "/oauth") { + res.writeHead(404); + res.end(); + return; + } + const code = url.searchParams.get("code"); + const state = url.searchParams.get("state"); + res.writeHead(200, { "Content-Type": "text/html" }); + res.end( + "

Foreman durable sweep

Authorization received — return to the terminal.

", + ); + server.close(); + if (!code) return reject(new Error("No code in callback")); + if (state !== expectedState) return reject(new Error("State mismatch")); + resolve(code); + }); + server.listen(port); + setTimeout( + () => { + server.close(); + reject(new Error("Timed out (5 min)")); + }, + 5 * 60 * 1000, + ); + }); +} + +async function mintUserJwt(): Promise { + const verifier = b64url(randomBytes(32)); + const challenge = b64url(createHash("sha256").update(verifier).digest()); + const state = randomBytes(16).toString("hex"); + const port = await findPort(); + const redirectUri = `http://localhost:${port}/oauth`; + const params = new URLSearchParams({ + response_type: "code", + client_id: ZAPIER_PKCE_CLIENT_ID, + redirect_uri: redirectUri, + state, + scope: ZAPIER_SCOPE, + code_challenge: challenge, + code_challenge_method: "S256", + }); + console.log("\n========================================================"); + console.log("ACTION REQUIRED — open this URL and authorize:\n"); + console.log(`${ZAPIER_AUTHORIZE_URL}?${params.toString()}`); + console.log(`\n(listening on ${redirectUri})`); + console.log("========================================================\n"); + const code = await waitForCode(port, state); + console.log("Code received, exchanging…"); + const res = await fetch(ZAPIER_TOKEN_URL, { + method: "POST", + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ + grant_type: "authorization_code", + code, + client_id: ZAPIER_PKCE_CLIENT_ID, + redirect_uri: redirectUri, + code_verifier: verifier, + }), + }); + if (!res.ok) throw new Error(`Token exchange failed (${res.status}): ${await res.text()}`); + const data = (await res.json()) as { access_token: string; scope?: string }; + console.log(`userJwt minted: len=${data.access_token.length}, scope="${data.scope}"`); + return data.access_token; +} + +/** Minimal .env.local loader (only fills vars not already in process.env). */ +function loadEnvLocal(path: string) { + let text: string; + try { + text = readFileSync(path, "utf8"); + } catch { + return; + } + for (const line of text.split(/\r?\n/)) { + const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/); + if (!m) continue; + const key = m[1]; + let val = m[2]; + if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) + val = val.slice(1, -1); + if (val && process.env[key] === undefined) process.env[key] = val; + } +} + +const SRC = { "index.ts": "export default {};" }; +// Well-formed but nonexistent UUID — passes the SDK's client-side Zod validation +// so the call actually reaches the server's auth layer (auth is checked before +// the resource is looked up, so a walled endpoint 403s even for a missing id). +const U = "00000000-0000-4000-8000-000000000000"; + +// Every durable/workflow endpoint + a minimal arg set that clears local validation. +// (Trigger-inbox endpoints are excluded — already known to accept client-creds.) +const CALLS: Array<[string, unknown]> = [ + ["runDurable", { source_files: SRC, input: {}, private: true }], + ["listDurableRuns", {}], + ["getDurableRun", { run: U }], + ["cancelDurableRun", { run: U }], + ["createWorkflow", { name: "probe", source_files: SRC }], + ["listWorkflows", {}], + ["getWorkflow", { workflow: U }], + ["updateWorkflow", { workflow: U, name: "probe" }], + ["deleteWorkflow", { workflow: U }], + ["enableWorkflow", { workflow: U }], + ["disableWorkflow", { workflow: U }], + ["publishWorkflowVersion", { workflow: U, source_files: SRC }], + ["getWorkflowVersion", { workflow: U, version: U }], + ["listWorkflowVersions", { workflow: U }], + ["triggerWorkflow", { workflow: U, input: {} }], + ["getWorkflowRun", { run: U }], + ["listWorkflowRuns", { workflow: U }], + ["getTriggerRun", { trigger: U }], +]; + +const isUserJwt403 = (msg: string, code?: number) => + code === 403 && /security schemes \(userJwt\)|userJwt.*authenticat/i.test(msg); + +async function probeAll(sdk: any, label: string) { + console.log(`\n=== Durable endpoint sweep — auth: ${label} ===`); + try { + const { data } = await sdk.getProfile(); + console.log(`sanity getProfile -> OK: ${data?.email ?? data?.id ?? "?"}\n`); + } catch (e: any) { + console.log(`sanity getProfile -> FAILED: ${e?.message ?? e}\n`); + } + + const rows: Array<{ method: string; verdict: string; code: string; detail: string }> = []; + for (const [method, args] of CALLS) { + if (typeof sdk[method] !== "function") { + rows.push({ method, verdict: "MISSING", code: "-", detail: "not a function" }); + continue; + } + try { + const { data } = await sdk[method](args); + rows.push({ + method, + verdict: "AUTH OK (success)", + code: "2xx", + detail: JSON.stringify(data).slice(0, 60), + }); + } catch (e: any) { + const msg = String(e?.message ?? e); + const code = e?.statusCode ?? e?.status; + let verdict: string; + if (isUserJwt403(msg, code)) verdict = "WALLED (userJwt 403)"; + else if (typeof code === "number" && code >= 400 && code < 500) + verdict = "AUTH OK (non-auth 4xx)"; + else verdict = "OTHER"; + rows.push({ method, verdict, code: String(code ?? "?"), detail: msg.slice(0, 80) }); + } + } + + const pad = (s: string, n: number) => s.padEnd(n); + console.log(pad("METHOD", 24), pad("VERDICT", 24), pad("CODE", 6), "DETAIL"); + for (const r of rows) + console.log(pad(r.method, 24), pad(r.verdict, 24), pad(r.code, 6), r.detail); + + const walled = rows.filter((r) => r.verdict.startsWith("WALLED")).length; + const authok = rows.filter((r) => r.verdict.startsWith("AUTH OK")).length; + console.log( + `\nSUMMARY (${label}): ${walled}/${rows.length} walled by userJwt-403, ${authok}/${rows.length} authenticated (success or non-auth error).`, + ); + return rows; +} + +async function main() { + const mode = process.argv.includes("--pkce") ? "pkce" : "client-creds"; + + if (mode === "pkce") { + const token = await mintUserJwt(); + const sdk = createZapierSdk({ credentials: token }) as any; + await probeAll(sdk, "public-PKCE userJwt"); + return; + } + + loadEnvLocal(new URL("../.env.local", import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, "$1")); + const clientId = process.env.ZAPIER_CLIENT_ID; + const clientSecret = process.env.ZAPIER_CLIENT_SECRET; + if (!clientId || !clientSecret) { + console.error( + "ZAPIER_CLIENT_ID / ZAPIER_CLIENT_SECRET not set in env — cannot run client-creds sweep.", + ); + process.exit(1); + } + const sdk = createZapierSdk({ credentials: { clientId, clientSecret } }) as any; + await probeAll(sdk, "client-credentials"); +} + +main().catch((e) => { + console.error("\nPROBE FAILED:", e?.message ?? e); + process.exit(1); +}); From 24144affcabd9a0bed39b5f6c608f774ee055025 Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Tue, 16 Jun 2026 10:18:57 -0700 Subject: [PATCH 3/7] docs(zapier): sync durable spike + auth-model with the full 18-endpoint sweep The original 0.69.3 single-runDurable-probe framing is superseded by the 2026-06-16 sweep on 0.70.4: all 18 durable/workflow endpoints 403 under both client-creds and PKCE userJwt. Point both internal docs at the engineer brief. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/durable-workflow-spike.md | 7 +++++++ docs/zapier-auth-model.md | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/durable-workflow-spike.md b/docs/durable-workflow-spike.md index ef8b6243..60bbb145 100644 --- a/docs/durable-workflow-spike.md +++ b/docs/durable-workflow-spike.md @@ -3,6 +3,13 @@ > Quick probe of `@zapier/zapier-sdk/experimental`'s durable-workflow API > (`runDurable` / `publishWorkflowVersion`), unlocked by the 0.69.3 bump. > Snapshot: 2026-06-11, `@zapier/zapier-sdk@0.69.3`. Status: **blocked on auth (see below).** +> +> **Update 2026-06-16 (foreman-0yra):** re-confirmed on the latest SDK `0.70.4`, and +> broadened from a single `runDurable` probe to a **full 18-endpoint sweep** of the durable/ +> workflow surface (`scripts/durable-endpoints-probe.ts`). **All 18 endpoints return the +> `userJwt` 403 under BOTH client-credentials AND a real PKCE userJwt (18/18 each)** — the +> "one probe" finding below now holds across the whole surface, empirically, on the current SDK. +> The send-ready writeup for Zapier is [`zapier-durable-questions-for-engineers.md`](zapier-durable-questions-for-engineers.md). ## API shape (from 0.69.3 `.d.ts`) diff --git a/docs/zapier-auth-model.md b/docs/zapier-auth-model.md index 5d6f0f2a..8e15e938 100644 --- a/docs/zapier-auth-model.md +++ b/docs/zapier-auth-model.md @@ -2,7 +2,9 @@ > How Foreman authenticates to `@zapier/zapier-sdk`, and — critically — **which > auth works on which SDK surface.** Some experimental surfaces require a scope no -> public SDK client can obtain. Snapshot: 2026-06-11, `@zapier/zapier-sdk@0.69.3`. +> public SDK client can obtain. Snapshot: 2026-06-11, `@zapier/zapier-sdk@0.69.3`; +> durable wall re-confirmed 2026-06-16 on `0.70.4` across **all 18** durable/workflow +> endpoints under both credential types (see [`zapier-durable-questions-for-engineers.md`](zapier-durable-questions-for-engineers.md)). ## The three credential types the SDK accepts @@ -33,7 +35,7 @@ redirecting to one of a fixed set of localhost ports Zapier allow-lists for it. |---|---|---|---| | `runAction`, discovery, `apps.*`, tables | ✅ | ✅ | The everyday action layer — any user auth works | | Trigger inboxes (`/experimental`) | ✅ | ✅ | `ensureTriggerInbox` / `lease` / `ack` all accept client-creds | -| **Durable** (`runDurable`, `publishWorkflowVersion`, … `/experimental`) | ❌ **403** | ❌ **403** | `"None of the security schemes (userJwt)…"` — see below | +| **Durable / workflow** (all 18 endpoints, `/experimental`) | ❌ **403** | ❌ **403** | `"None of the security schemes (userJwt)…"` — 18/18 swept under both auth types (2026-06-16, `0.70.4`); see below | **Durable is walled for every token a public SDK client can produce.** Proven 2026-06-11 by `packages/agents/scripts/durable-pkce-probe.ts`: it mints a *real* From a1543a515a66a6cb45809cdf7091d682e6cbe9a6 Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Wed, 17 Jun 2026 16:06:07 -0700 Subject: [PATCH 4/7] docs(readme): document Zapier SDK CLI, login methods, sdk:check + add .env.example For Zapier-community newcomers who haven't driven the SDK directly: - New "Working with the Zapier SDK" section: the two packages, the four login methods (CLI / per-user PKCE / client-creds / token override), npm run sdk:check, and an "Explore the SDK yourself" table linking the in-repo docs/zapier-sdk guides, capability map, and sdk-surface-sweep. - Cross-links from "Run it your way" and "Build & test". - Fix stale tool count 34 -> 28 (6 spots) and 17 -> 16 read-only to match the live-introspected surface (v0.70.4). - Add packages/agents/.env.example + packages/web/.env.example (none existed) and repoint the dead "see CLAUDE.md for env vars" pointer to them. Closes foreman-g0tf. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 68 ++++++++++++++++++++--- packages/agents/.env.example | 105 +++++++++++++++++++++++++++++++++++ packages/web/.env.example | 12 ++++ 3 files changed, 177 insertions(+), 8 deletions(-) create mode 100644 packages/agents/.env.example create mode 100644 packages/web/.env.example diff --git a/README.md b/README.md index c217057d..d6395abe 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Every run is recorded (who, what, when, result) and searchable later — _"what ▼ ┌──────────────────────────────────┐ │ Foreman agent │ Claude Sonnet 4.6 - │ Mastra + ToolSearch over 34 │ + │ Mastra + ToolSearch over 28 │ │ live Zapier SDK tools │ └────────────────┬─────────────────┘ │ picks app + action, fills params @@ -125,7 +125,7 @@ Every run is recorded (who, what, when, result) and searchable later — _"what result + run history (Postgres + pgvector) ``` -A request lands from any channel, hits the **Foreman agent**, which loads only the Zapier tools that request needs (via a tool-search processor rather than stuffing all 34 into the prompt). Write actions become **proposals**; you approve them; the **Zapier SDK** runs them; the result and full run record persist to Postgres. Discovery, execution, and history are split into focused sub-agents so each step stays cheap and reliable. +A request lands from any channel, hits the **Foreman agent**, which loads only the Zapier tools that request needs (via a tool-search processor rather than stuffing all 28 into the prompt). Write actions become **proposals**; you approve them; the **Zapier SDK** runs them; the result and full run record persist to Postgres. Discovery, execution, and history are split into focused sub-agents so each step stays cheap and reliable. --- @@ -138,7 +138,7 @@ Foreman draws a hard line between **reading** and **changing the world**: - 🧾 **Every run is recorded** — app, action, inputs, result, who triggered it, when — and is semantically searchable afterward. - 🛡️ **Guardrails** apply rate limits and risk assessment; an output processor redacts PII before responses leave the agent. -The set of write/delete tools that require approval is explicit (9 of them), separate from the 17 read-only discovery tools — so the boundary is defined in code, not guessed at runtime. +The set of write/delete tools that require approval is explicit (9 of them), separate from the 16 read-only discovery tools — so the boundary is defined in code, not guessed at runtime. --- @@ -195,7 +195,7 @@ cd packages/agents && npm run dev cd packages/web && npm run dev ``` -For the full env-var list see [`CLAUDE.md`](CLAUDE.md). For incoming channel webhooks, also run `cd packages/agents && npm run start:webhooks` on port `:4112`. For deterministic mock-mode dev (no real LLM / voice / MCP / A2A): `cd packages/agents && npm run dev:mock`. +Copy `packages/agents/.env.example` → `.env.local` (and `packages/web/.env.example` for the frontend) — every variable is documented inline. For incoming channel webhooks, also run `cd packages/agents && npm run start:webhooks` on port `:4112`. For deterministic mock-mode dev (no real LLM / voice / MCP / A2A): `cd packages/agents && npm run dev:mock`. --- @@ -212,6 +212,56 @@ Same agent, same connected apps — you just choose how Zapier auth resolves. `F Self-hosted is **not** a single-shared-account mode — every user still connects their own Zapier account. Foreman just runs on infrastructure **you** own instead of ours. A managed hosted version is coming soon. +> Which credential type works on which SDK surface — and why durable execution is walled off — is documented in [`docs/zapier-auth-model.md`](docs/zapier-auth-model.md). New to the SDK? See [Working with the Zapier SDK](#-working-with-the-zapier-sdk) below. + +--- + +## 🔌 Working with the Zapier SDK + +Foreman's entire action layer is generated from [`@zapier/zapier-sdk`](https://docs.zapier.com/sdk) — every one of the 9,000+ apps becomes a tool, with parameter names read straight from Zapier's own schemas. If you're coming from the Zapier community and haven't driven the SDK directly, here's the whole picture. + +### Two packages + +| Package | What it is | +|---|---| +| [`@zapier/zapier-sdk`](https://www.npmjs.com/package/@zapier/zapier-sdk) | The library Foreman imports directly. Its registry is what becomes the 28 live tools — no MCP child process, no hand-wired integrations. | +| [`@zapier/zapier-sdk-cli`](https://www.npmjs.com/package/@zapier/zapier-sdk-cli) | The companion CLI. Used to log in for local dev, and to poke at the SDK by hand while exploring what an app/action expects. | + +### Logging in — the four ways + +Foreman accepts any credential type the SDK does; you pick one with `FOREMAN_MODE` + env vars. What each is, and when to reach for it: + +| Method | How | Use it for | +|---|---|---| +| **CLI login** | `npx @zapier/zapier-sdk-cli login` → writes `~/.zapier-sdk/config.json` | The zero-config dev path. `FOREMAN_MODE=dev` falls back to it automatically. | +| **Per-user OAuth (PKCE)** | Each user clicks _Connect Zapier_ in the UI | Self-hosted / multi-user — everyone connects _their own_ account. Needs `ZAPIER_CLIENT_ID` + `ZAPIER_CLIENT_SECRET`. | +| **Client credentials** | `ZAPIER_CLIENT_ID` + `ZAPIER_CLIENT_SECRET` | App-level, server-to-server calls. | +| **Token override** | `DEV_ZAPIER_OVERRIDE=` | Drop in a pre-obtained token for local dev — skips login entirely. | + +> **Heads-up for SDK explorers:** not every surface accepts every credential. The everyday action layer (run actions, discovery, tables, trigger inboxes) works with any user auth — but Zapier's experimental **durable-workflow** endpoints require an `internal`-scoped token no public SDK client can mint, so they `403` under _every_ login method above. The full surface-by-surface breakdown (and why) is in [`docs/zapier-auth-model.md`](docs/zapier-auth-model.md). + +### Staying current — `npm run sdk:check` + +The SDK ships fast, and real capabilities land in point releases (the durable-workflow and trigger-inbox APIs both arrived that way). To make "are we behind?" a fact instead of a surprise, the repo ships a watcher: + +```bash +npm run sdk:check # full report: installed vs latest, releases behind, changelog delta +npm run sdk:check:quiet # one-line notice, only when a newer version exists (session-start hook) +``` + +It tracks **both** packages, fetches the changelog delta since your installed version, and never fails a build if npm is unreachable. A session-start hook runs the quiet form so you're nudged when an upgrade lands — then bump deliberately, since point releases can change behavior. + +### Explore the SDK yourself + +You don't have to take our word for any of this. The repo vendors the SDK + CLI docs and ships an introspection tool so you can see the live surface for yourself: + +| Resource | What it gives you | +|---|---| +| [`docs/zapier-sdk/quickstart.md`](docs/zapier-sdk/quickstart.md) · [`using-the-cli.md`](docs/zapier-sdk/using-the-cli.md) | Hands-on: install, log in, run your first action from the CLI. | +| [`docs/zapier-sdk/cli-reference.md`](docs/zapier-sdk/cli-reference.md) · [`sdk-reference.md`](docs/zapier-sdk/sdk-reference.md) | Full command + method reference for the CLI and SDK. | +| [`docs/zapier-sdk-capability-map.md`](docs/zapier-sdk-capability-map.md) | The living ledger — every SDK surface, what Foreman uses, and what we deliberately don't build. | +| `npx tsx packages/agents/scripts/sdk-surface-sweep.ts` | Dumps the entire live SDK surface — no creds, no network, pure introspection. The "prove it" tool. | + --- ## 🧱 Architecture @@ -225,7 +275,7 @@ packages/ │ │ ├─ agents/ Foreman · Discovery · Execution · History · Supervisor │ │ └─ tools/ connect_zapier · search_history · fork_conversation │ ├─ src/lib/ -│ │ ├─ zapier-sdk-tools 34 auto-generated tools from @zapier/zapier-sdk +│ │ ├─ zapier-sdk-tools 28 auto-generated tools from @zapier/zapier-sdk │ │ ├─ zapier/ PKCE OAuth connect flow + per-user SDK │ │ ├─ db/ Supabase schema + service-role client │ │ ├─ processors/ context injector (in) + PII redactor (out) @@ -262,7 +312,7 @@ supabase/migrations/ Postgres schema (users, conversations, proposals, ▼ ┌─────────────────┐ direct import of │ Zapier SDK │ @zapier/zapier-sdk - │ (single-shot) │ → 34 tools + │ (single-shot) │ → 28 tools └─────────────────┘ ``` @@ -277,7 +327,7 @@ supabase/migrations/ Postgres schema (users, conversations, proposals, |---|---| | Agent framework | [Mastra](https://mastra.ai) — `@mastra/core`, `@mastra/memory`, `@mastra/evals`, `@mastra/duckdb`, `@mastra/observability` | | Chat channels | [Chat SDK](https://chat-sdk.dev) — `chat`, `@chat-adapter/*` | -| Action layer | `@zapier/zapier-sdk` (direct import; 34 auto-generated tools) | +| Action layer | `@zapier/zapier-sdk` (direct import; 28 auto-generated tools) | | LLM | Claude (Anthropic) — Sonnet 4.6 default, Haiku 4.5 for fast steps | | Embeddings / STT | OpenAI `text-embedding-3-small`, Whisper via `@mastra/voice-openai` | | API server | [Hono](https://hono.dev) (mounted via Mastra) | @@ -306,6 +356,8 @@ Four tiers plus end-to-end browser tests. **Tier 1 is the default loop and runs CI runs the mocked tiers, a `next build` for web, Biome lint, a dependency-uniqueness check, and a generated-DB-types freshness check on every push and PR. +> Keeping the action layer current: `npm run sdk:check` reports whether `@zapier/zapier-sdk` / `@zapier/zapier-sdk-cli` are behind the latest release — see [Working with the Zapier SDK](#-working-with-the-zapier-sdk). + --- ## 🔭 Inspect & tune the agents (Mastra Studio) @@ -323,7 +375,7 @@ What you get: - ✏️ **Edit & version the system prompt** — change an agent's instructions live, save a draft, publish; or use Foreman's own agent editor at [`localhost:3000/editor`](http://localhost:3000/editor) - 🧠 **Memory & threads** — every conversation, persisted to your local Supabase - 🔭 **Traces** — per-run agent / tool / LLM spans, so you can see each step an agent took -- 🗂️ **Tools** — browse the 34 Zapier SDK tools + the custom tools each agent loads +- 🗂️ **Tools** — browse the 28 Zapier SDK tools + the custom tools each agent loads - ✅ **Eval scorers** — score runs against the `foreman-baseline-v1` dataset (relaxed-trajectory match + an LLM judge) in the Scores view --- diff --git a/packages/agents/.env.example b/packages/agents/.env.example new file mode 100644 index 00000000..8d6bf160 --- /dev/null +++ b/packages/agents/.env.example @@ -0,0 +1,105 @@ +# ═══════════════════════════════════════════════════════════════════════ +# Foreman · agents server (packages/agents) +# Copy to .env.local and fill in. Boot needs only the REQUIRED block; +# everything else is opt-in (channels, voice, model + caching tuning). +# ═══════════════════════════════════════════════════════════════════════ + +# ── REQUIRED ─────────────────────────────────────────────────────────── +# Postgres. Local: `npx supabase start` prints this (shifted port 54422). +DATABASE_URL=postgres://postgres:postgres@127.0.0.1:54422/postgres +# AES-256-GCM key for Zapier-token encryption at rest. Generate with: +# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" +ENCRYPTION_KEY=YOUR_32_BYTE_HEX_KEY +# LLMs: Anthropic = agents' reasoning; OpenAI = embeddings + Whisper STT. +ANTHROPIC_API_KEY=sk-ant-YOUR_KEY +OPENAI_API_KEY=sk-YOUR_KEY +# Supabase (local values from `npx supabase start`). service_role is server-only. +SUPABASE_URL=http://127.0.0.1:54421 +SUPABASE_SERVICE_ROLE_KEY=YOUR_SERVICE_ROLE_KEY +SUPABASE_ANON_KEY=YOUR_ANON_KEY + +# ── ZAPIER AUTH — how Foreman acts on your behalf ────────────────────── +# See README → "Working with the Zapier SDK" for the four login methods. +# dev = one CLI login (npx @zapier/zapier-sdk-cli login) +# self_hosted = each user OAuths their own Zapier account in the UI +FOREMAN_MODE=dev +# Required when FOREMAN_MODE=self_hosted (per-user PKCE OAuth): +ZAPIER_CLIENT_ID= +ZAPIER_CLIENT_SECRET= +ZAPIER_REDIRECT_URI=http://localhost:4111/zapier/callback +# Dev shortcut: paste a pre-obtained token to skip login entirely. +DEV_ZAPIER_OVERRIDE= +# Optional: shared secret to verify inbound Zapier webhooks. +ZAPIER_WEBHOOK_SECRET= + +# ── RUNTIME ──────────────────────────────────────────────────────────── +PORT=4111 +AGENT_SERVER_URL=http://localhost:4111 +WEB_URL=http://localhost:3000 +DEPLOY_TARGET=vps # vps | vercel | cloudflare +CRON_SECRET= # protects the poll-driver / cron endpoint + +# ── CHANNELS (all optional — set only the ones you use) ──────────────── +# Telegram +TELEGRAM_BOT_TOKEN= +TELEGRAM_BOT_USERNAME= +TELEGRAM_WEBHOOK_SECRET_TOKEN= +# Slack +SLACK_CLIENT_ID= +SLACK_CLIENT_SECRET= +SLACK_SIGNING_SECRET= +SLACK_BOT_TOKEN= +# Discord (also needs the :4112 webhooks server running) +DISCORD_BOT_TOKEN= +DISCORD_PUBLIC_KEY= +DISCORD_APPLICATION_ID= +# Microsoft Teams +TEAMS_APP_ID= +TEAMS_APP_PASSWORD= +TEAMS_APP_TENANT_ID= +# Google Chat +GOOGLE_CHAT_CREDENTIALS= +GOOGLE_CHAT_USE_ADC= +# WhatsApp +WHATSAPP_ACCESS_TOKEN= +WHATSAPP_VERIFY_TOKEN= +WHATSAPP_PHONE_NUMBER_ID= +# GitHub +GITHUB_TOKEN= +GITHUB_APP_ID= +GITHUB_PRIVATE_KEY= +GITHUB_WEBHOOK_SECRET= +GITHUB_INSTALLATION_ID= +GITHUB_BOT_USER_ID= +# Linear +LINEAR_API_KEY= +LINEAR_WEBHOOK_SECRET= +LINEAR_BOT_USERNAME= +# iMessage (requires a macOS host) +IMESSAGE_LOCAL= +IMESSAGE_SERVER_URL= +IMESSAGE_API_KEY= + +# ── VOICE (optional) ─────────────────────────────────────────────────── +ELEVENLABS_API_KEY= +ELEVENLABS_VOICE_ID= + +# ── MODEL OVERRIDES (optional — unset falls back to tier defaults) ───── +MODEL_DEFAULT= +MODEL_FAST= +MODEL_HEAVY= +# Per-agent (comma-separated fallback chain, e.g. anthropic/claude-sonnet-4-6,openai/gpt-4o): +FOREMAN_MODEL= +DISCOVERY_MODEL= +EXECUTION_MODEL= +SUPERVISOR_MODEL= +HISTORY_MODEL= +# Optional alt provider for model overrides: +GOOGLE_GENERATIVE_AI_API_KEY= +# Per-agent generation params + Anthropic prompt/tool caching opt-in also +# exist (*_TEMPERATURE, *_MAX_OUTPUT_TOKENS, *_TOP_P, *_PROMPT_CACHING, +# *_TOOL_CACHING) — see packages/agents/src/lib/env.ts for the full list. + +# ── OBSERVABILITY (optional) ─────────────────────────────────────────── +OTEL_ENABLED= +OTEL_EXPORTER_ENDPOINT= diff --git a/packages/web/.env.example b/packages/web/.env.example new file mode 100644 index 00000000..1d4369df --- /dev/null +++ b/packages/web/.env.example @@ -0,0 +1,12 @@ +# ═══════════════════════════════════════════════════════════════════════ +# Foreman · web frontend (packages/web). Copy to .env.local. +# NEXT_PUBLIC_* ship to the browser — never put a secret here. +# ═══════════════════════════════════════════════════════════════════════ +NEXT_PUBLIC_AGENT_SERVER_URL=http://localhost:4111 +NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54421 +NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=YOUR_PUBLISHABLE_ANON_KEY + +# Channel UI helpers — only for the settings/integrations pages (optional) +NEXT_PUBLIC_SLACK_CLIENT_ID= +NEXT_PUBLIC_DISCORD_APPLICATION_ID= +NEXT_PUBLIC_TELEGRAM_BOT_USERNAME= From 49fff647bdd3db80790bb40565336d4f6268d101 Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Wed, 17 Jun 2026 16:15:45 -0700 Subject: [PATCH 5/7] docs(zapier): live SDK surface-sweep tool + capability map v0.70.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add packages/agents/scripts/sdk-surface-sweep.ts — pure introspection of the installed @zapier/zapier-sdk (entrypoints, getRegistry variants, instance methods, named exports). No creds, no network. - Refresh docs/zapier-sdk-capability-map.md from the live sweep at 0.70.4: 37 stable + 36 experimental methods, the 28-tool Foreman count, the /define authoring DSL, and the 208-export taxonomy. Referenced by the README's "Explore the SDK yourself" section (a1543a5). Refs foreman-xb68. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/zapier-sdk-capability-map.md | 234 ++++++++++----- packages/agents/scripts/sdk-surface-sweep.ts | 287 +++++++++++++++++++ 2 files changed, 449 insertions(+), 72 deletions(-) create mode 100644 packages/agents/scripts/sdk-surface-sweep.ts diff --git a/docs/zapier-sdk-capability-map.md b/docs/zapier-sdk-capability-map.md index 450b2533..4308fdae 100644 --- a/docs/zapier-sdk-capability-map.md +++ b/docs/zapier-sdk-capability-map.md @@ -2,126 +2,216 @@ > **Living ledger.** Foreman is a product built on `@zapier/zapier-sdk`. This file is the authoritative map of the SDK surface, what Foreman uses, and what we've deliberately decided *not* to build. Refresh it on every SDK bump. > -> - **Refresh the version delta:** `npm run sdk:check` (watches both `@zapier/zapier-sdk` and `@zapier/zapier-sdk-cli`; also fires a quiet notice on session start via `scripts/zapier-sdk-watch.mjs`). -> - **Snapshot date:** 2026-06-11 — verified against `@zapier/zapier-sdk@0.69.3`. -> - **Tracking:** open decisions live in beads (see [Open decisions](#open-decisions)). +> - **Snapshot date:** 2026-06-16 — **live-introspected** against `@zapier/zapier-sdk@0.70.4` (installed, nested under `packages/agents`). +> - **How this snapshot was produced:** `npx tsx packages/agents/scripts/sdk-surface-sweep.ts` — imports the installed package and enumerates every entrypoint, `getRegistry()` variant, instance method, and named export. This is **not** changelog-reading; it is what the code on disk actually exposes. Re-run it on every bump (it's the "prove it" tool for the Zapier community showcase). +> - **Version delta watcher:** `npm run sdk:check` (root) — watches `@zapier/zapier-sdk` + `@zapier/zapier-sdk-cli`, fires a quiet notice on session start via `scripts/zapier-sdk-watch.mjs`. +> - **Tracking:** open decisions live in beads (see [Open decisions](#open-decisions)). Sweep tracked under **foreman-xb68**. -## Version status (2026-06-11) +## TL;DR — the whole surface in one breath -| Package | Installed | Latest | Behind | +`@zapier/zapier-sdk@0.70.4` is **four things behind one package**: + +1. **A typed API client** — `createZapierSdk()` → **37 stable methods** (apps/actions discovery, `runAction`, connections, tables/records, profile, raw `fetch`). +2. **An experimental control plane** — `@zapier/zapier-sdk/experimental` → the same 37 **+ 36 more** (trigger inboxes, durable runs, durable workflows). 18 of those (the durable/workflow write+read endpoints) are **scope-walled** for any public-SDK token (see auth model). +3. **An authoring framework** — `@zapier/zapier-sdk/define` → `defineDurable` / `defineTool` / `defineComponent` with durable `step`/`wait`/`createCallback` primitives. This is *code-mode durable workflows*: you author them locally, deploy/run via the (walled) experimental endpoints. +4. **A composable plugin runtime** — 208 named exports on the main entrypoint: every method ships as a `*Plugin`, composable via `composePlugins`/`createPluginStack`; plus a resolver layer, a Zod schema library, a telemetry/event system, credential helpers, and a low-level HTTP client (`createZapierApi`). + +The action-type enum is still **read · read_bulk · write · run · search · search_or_write · search_and_write · filter** — **there is no "create a Zap" action type**. Persisted automation is the experimental durable API, which is walled. This is why Foreman owns its own workflow engine. + +## Live surface totals (2026-06-16, v0.70.4) + +| Entrypoint | `createZapierSdk()` instance methods | `getRegistry({package:"mcp"})` | Named exports | |---|---|---|---| -| `@zapier/zapier-sdk` | **0.48.0** | 0.69.3 (2026-06-10) | 28 releases | -| `@zapier/zapier-sdk-cli` | **0.44.0** | 0.54.3 (2026-06-10) | 33 releases | +| `.` (main) | **39** (37 API + `getRegistry` + `addPlugin`) | **37** | **208** | +| `./experimental` | **75** (37 + 36 experimental + meta) | **71** | **208** | +| `./define` | n/a (authoring fns, not an SDK instance) | n/a | **5** | +| `./apps` | n/a (generated-types anchor) | n/a | **1** (`App`) | -Bump is tracked in **foreman-8ujc** — *not* a blind drop-in (behavior changes below). +**Experimental-only methods (36)** = 18 trigger-inbox + 5 durable-run + 13 durable-workflow (full list below). -## Surface totals +### `getRegistry({ package })` is a curated view, not the whole SDK -**69 public methods** = 35 stable (`@zapier/zapier-sdk`) + 34 experimental (`@zapier/zapier-sdk/experimental`, opt-in import path only). +The registry exists so hosts (MCP servers, CLIs, AI tool layers) can advertise a *subset* of methods. The `package` arg changes the cut — **live counts at 0.70.4**: -### Stable methods (35) +| `package` | main | experimental | Notes | +|---|---|---|---| +| `undefined` (default) | 39 | 75 | includes the 2 app-proxy pseudo-entries | +| `"mcp"` | **37** | 71 | **what Foreman uses** — drops the proxy entries (can't express a fluent proxy as one MCP tool) | +| `"sdk"` | 34 | 70 | | +| `"cli"` | 37 | 71 | | +| `"all"` | 31 | 65 | | +| `"ai"` | 31 | 65 | leanest curated set | + +Foreman's choice of `"mcp"` on the **main** entrypoint loses nothing real vs. the default (only the 2 proxy pseudo-entries `apps.{appKey}` / `apps.{appKey}.{actionType}.{actionKey}`, which Foreman deliberately doesn't use). If we ever want a tighter agent toolset, `"ai"` is a pre-curated 31. **Foreman never imports `./experimental`, so none of the 36 experimental methods are ever generated as tools today.** + +## The 37 stable methods (main `mcp` registry) | Domain | Methods | |---|---| | Apps / discovery | `listApps`, `getApp`, `listActions`, `getAction` | -| Action input fields | `listActionInputFields`, `getActionInputFieldsSchema`, `listActionInputFieldChoices`, `listInputFields`*, `getInputFieldsSchema`, `listInputFieldChoices` | +| Action input fields (canonical) | `listActionInputFields`, `getActionInputFieldsSchema`, `listActionInputFieldChoices` | +| Action input fields (**deprecated aliases**) | `listInputFields`→`listActionInputFields`, `getInputFieldsSchema`→`getActionInputFieldsSchema`, `listInputFieldChoices`→`listActionInputFieldChoices` | | Run | `runAction` | -| Connections / auth | `listConnections`, `getConnection`, `findFirstConnection`, `findUniqueConnection`, `listAuthentications`* | -| HTTP / profile | `fetch`, `request`* (deprecated alias), `getProfile` | -| Client credentials | `listClientCredentials`, `createClientCredentials`, `deleteClientCredentials` | +| Connections | `listConnections`, `getConnection`, `findFirstConnection`, `findUniqueConnection` | +| Connections (**deprecated aliases**) | `listAuthentications`→`listConnections`, `getAuthentication`→`getConnection`, `findFirstAuthentication`→`findFirstConnection`, `findUniqueAuthentication`→`findUniqueConnection` | +| HTTP / profile | `fetch`, `request` (deprecated alias of `fetch`), `getProfile` | +| Client credentials (Connect Builder) | `listClientCredentials`, `createClientCredentials`, `deleteClientCredentials` | | Tables | `listTables`, `getTable`, `createTable`, `deleteTable`, `listTableFields`, `createTableFields`, `deleteTableFields` | | Records | `listTableRecords`, `getTableRecord`, `createTableRecords`, `updateTableRecords`, `deleteTableRecords` | -\* deprecated / legacy duplicate — Foreman excludes these (see usage map). +### Deprecated → canonical alias map (verified from `dist/plugins/deprecated/`) -Low-level API client (under the SDK): `get/post/put/patch/delete`, `poll`, `fetch`, `fetchStream` (SSE, 0.69). Plus internal utilities: FIFO concurrency semaphore (`maxConcurrentRequests`, default 200, since 0.52), error-classification (`isPermanentHttpError`), staged polling backoff. +The SDK ships a `deprecated/` plugin folder that aliases old names onto canonical ones. **All 7 aliases are still live at 0.70.4** but are documented as deprecated: -### Experimental methods (34) — `@zapier/zapier-sdk/experimental` only +``` +listAuthentications -> listConnections +getAuthentication -> getConnection +findFirstAuthentication -> findFirstConnection +findUniqueAuthentication -> findUniqueConnection +listInputFields -> listActionInputFields +listInputFieldChoices -> listActionInputFieldChoices +getInputFieldsSchema -> getActionInputFieldsSchema +``` -**Trigger Inboxes (18)** — app-event subscriptions: -`listTriggers`, `listTriggerInputFields`, `getTriggerInputFieldsSchema`, `listTriggerInputFieldChoices`, `listTriggerInboxes`, `createTriggerInbox`, `getTriggerInbox`, `ensureTriggerInbox`, `updateTriggerInbox`, `deleteTriggerInbox`, `pauseTriggerInbox`, `resumeTriggerInbox`, `listTriggerInboxMessages`, `leaseTriggerInboxMessages`, `ackTriggerInboxMessages`, `releaseTriggerInboxMessages`, `drainTriggerInbox`, `watchTriggerInbox` (SSE, real-time as of 0.69). +## The 36 experimental methods (`./experimental` only) -**Durable Workflows (13)**: -`listWorkflows`, `getWorkflow`, `createWorkflow`, `updateWorkflow`, `enableWorkflow`, `disableWorkflow`, `deleteWorkflow`, `publishWorkflowVersion`, `listWorkflowVersions`, `getWorkflowVersion`, `listWorkflowRuns`, `getWorkflowRun`, `triggerWorkflow`. +**Trigger Inboxes (18)** — app-event subscriptions (client-creds OK): +`listTriggers`, `listTriggerInputFields`, `getTriggerInputFieldsSchema`, `listTriggerInputFieldChoices`, `listTriggerInboxes`, `createTriggerInbox`, `getTriggerInbox`, `ensureTriggerInbox`, `updateTriggerInbox`, `deleteTriggerInbox`, `pauseTriggerInbox`, `resumeTriggerInbox`, `listTriggerInboxMessages`, `leaseTriggerInboxMessages`, `ackTriggerInboxMessages`, `releaseTriggerInboxMessages`, `drainTriggerInbox`, `watchTriggerInbox` (SSE, real-time since 0.69; retries transient drain failures since 0.70.0). -**Durable Runs (5)**: +**Durable Runs (5)** — ⛔ scope-walled: `runDurable`, `cancelDurableRun`, `listDurableRuns`, `getDurableRun`, `getTriggerRun`. -> ✅ **Access confirmed (2026-06-11):** a live probe (latest SDK `/experimental`, client-credentials auth) returned `listTriggerInboxes -> []` and `listTriggers({app:'github'}) -> 23` — i.e. this account already has working trigger-inbox access; the 0.51 "closed beta" notice does **not** block us. Remaining open question (P3): long-term stability/sunset roadmap — ask Zapier. Tracked under **foreman-iyq6**. +**Durable Workflows (13)** — ⛔ scope-walled: +`listWorkflows`, `getWorkflow`, `createWorkflow`, `updateWorkflow`, `enableWorkflow`, `disableWorkflow`, `deleteWorkflow`, `publishWorkflowVersion`, `listWorkflowVersions`, `getWorkflowVersion`, `listWorkflowRuns`, `getWorkflowRun`, `triggerWorkflow`. + +> ⛔ **The durable wall.** All 18 durable+workflow endpoints return **HTTP 403 "None of the security schemes (userJwt)…"** under **both** client-credentials **and** a real per-user PKCE JWT. 18/18 swept 2026-06-16 (`scripts/durable-endpoints-probe.ts`). Root cause: the public PKCE client is granted `external` scope but durable's `userJwt` scheme requires `internal`. This is a Zapier-side wall, not a Foreman gap. Trigger inboxes are **not** walled. Full write-up: [`zapier-auth-model.md`](zapier-auth-model.md) + [`zapier-durable-questions-for-engineers.md`](zapier-durable-questions-for-engineers.md). + +## `./define` — the durable-workflow authoring DSL (previously undocumented) + +`@zapier/zapier-sdk/define` exports **5 authoring functions**. This is the *code substrate* — you author durable workflows as TypeScript, which become the `source_files` that `publishWorkflowVersion` / `runDurable` deploy. The authoring side is **fully usable locally** (type-checks, no network); only the deploy/run endpoints are walled. + +| Export | What it defines | +|---|---| +| `defineDurable(config)` | A durable workflow. `run(ctx, input)` gets a **`DurableContext`** with durability primitives (below). Connectionless / single-connection / multi-connection variants. | +| `defineTool(config)` | A reusable tool (`run(ctx, input)`), connection-bound or not, with `inputDependencies` (dynamic fields) + result processors (`options`/`schema`/`digest`). | +| `defineComponent(config)` | A render-style component (`render(props)`), connection-bound. | +| `optionsFrom(tool, binds?)` | Derive **dynamic dropdown options** from another tool's output (dependent fields). | +| `schemaFrom(tool, binds?)` | Derive a **dynamic Zod schema** from another tool's output. | + +**`DurableContext` primitives** (this is the Temporal/Inngest/Restate-class part): -### Action type enum (current) +```ts +ctx.step(name, fn) // durable, retryable step (maxAttempts, retryDelaySeconds, outputSchema) +ctx.wait(name, seconds) // durable sleep — survives restarts +ctx.createCallback(name) // human-in-the-loop: returns [Promise, callbackUrl] (timeoutSeconds, payloadSchema) +ctx.zapier.fetch(url, opts) // call connected apps from inside the workflow +``` -`read` · `read_bulk` · `search` · `search_and_write` · `search_or_write` · `write` · `filter` · `run` +So Zapier's durable platform = **author with `/define`** → **deploy/execute with the experimental durable endpoints**. Foreman can author and type-check durable code today; it cannot deploy it via a public-SDK token until Zapier opens the `internal` scope. -(Unchanged from 0.48 — still no "create a Zap" type. Workflow persistence is the experimental durable API, not an action type.) +## The 208-export surface (main entrypoint) — taxonomy -## Foreman usage map +Beyond the 37 methods, `import * as zapier from "@zapier/zapier-sdk"` exposes a full runtime. Grouped: -Source of truth: `packages/agents/src/lib/zapier-sdk-tools.ts`. +- **Factory + plugin runtime (~40):** `createZapierSdk`, `createSdk`, `createZapierApi`, `createZapierSdkWithoutRegistry`, `addPlugin`, `definePlugin`, `composePlugins`, `createPluginStack`, `createCorePlugin`, `createOptionsPlugin`, and one `*Plugin` per method (`runActionPlugin`, `listAppsPlugin`, `apiPlugin`, `registryPlugin`, `manifestPlugin`, …). → **The SDK is composable/tree-shakeable**: build a minimal client with only the plugins you need. +- **19 error/signal classes:** `ZapierError` + 15 typed subclasses (`ZapierActionError`, `ZapierApiError`, `ZapierAppNotFoundError`, `ZapierApprovalError`, `ZapierAuthenticationError`, `ZapierBundleError`, `ZapierConfigurationError`, `ZapierConflictError`, `ZapierNotFoundError`, `ZapierRateLimitError`, `ZapierRelayError`, `ZapierResourceNotFoundError`, `ZapierTimeoutError`, `ZapierUnknownError`, `ZapierValidationError`) + **3 control-flow signals** (`ZapierSignal`, `ZapierAbortDrainSignal`, `ZapierReleaseTriggerMessageSignal` — used by the trigger-inbox drain loop, *not* errors to surface). +- **Resolver layer (~25 `*Resolver` objects):** `appKeyResolver`, `actionKeyResolver`, `connectionIdResolver`, `tableIdResolver`, `workflowIdResolver`, … — the alias/identifier resolution used by methods and the proxy. +- **Zod schema library (~40 `*Schema` / `*PropertySchema`):** `CredentialsSchema`, `ConnectionsMapSchema`, `AppPropertySchema`, `RelayFetchSchema`, … — reusable for input validation. +- **Credential helpers:** `resolveCredentials`, `resolveCredentialsFromEnv`, `resolveAuthToken`, `getTokenFromCliLogin`, `isCliLoginAvailable`, `injectCliLogin`, `isClientCredentials`, `isPkceCredentials`, `isCredentialsFunction`, `getBaseUrlFromCredentials`, `clearTokenCache`, `invalidateCachedToken`. +- **Telemetry / event system:** `buildApplicationLifecycleEvent`, `buildErrorEvent`, `buildMethodCalledEvent`, `buildCapabilityMessage`, `createBaseEvent`, `generateEventId`, `eventEmissionPlugin`, `runWithTelemetryContext`, `cleanupEventListeners`. → the SDK emits structured telemetry you can hook. +- **Platform / CI / runtime introspection:** `getCiPlatform`, `isCi`, `getOsInfo`, `getPlatformVersions`, `getCpuTime`, `getMemoryUsage`, `getTtyContext`, `getReleaseId`, `getCurrentTimestamp`. +- **Approval-mode helpers:** `getZapierApprovalMode`, `getZapierDefaultApprovalMode`. +- **Constants (~17):** `ZAPIER_BASE_URL`, `ZAPIER_MAX_CONCURRENT_REQUESTS`, `ZAPIER_MAX_NETWORK_RETRIES`, `ZAPIER_MAX_NETWORK_RETRY_DELAY_MS`, `DEFAULT_PAGE_SIZE`, `MAX_PAGE_LIMIT`, `MAX_CONCURRENCY_LIMIT`, `DEFAULT_ACTION_TIMEOUT_MS`, `DEFAULT_APPROVAL_TIMEOUT_MS`, `DEFAULT_MAX_APPROVAL_RETRIES`, `DEFAULT_CONFIG_PATH`, `CONTEXT_CACHE_TTL_MS`, `CONTEXT_CACHE_MAX_SIZE`. +- **String/format utils:** `toSnakeCase`, `toTitleCase`, `formatErrorMessage`, `zapierAdaptError`, `isPermanentHttpError`, `logDeprecation`. -- **Surfaced as agent tools (20):** 9 `APPROVAL_REQUIRED` (runAction, fetch, create/deleteTable, create/update/deleteTableRecords, create/deleteTableFields) + 11 `READ_ONLY` discovery/introspection (listApps, getApp, listActions, getAction, listConnections, find*/getConnection, getInputFieldsSchema, listInputFieldChoices, tables/records read, getProfile). -- **Explicitly excluded (8):** deprecated auth duplicates (`listAuthentications`, `find*/getAuthentication`), `request`, `listInputFields`, client-credentials management. -- **Called directly at runtime:** `runAction` (execution.ts:86), `fetch` (execution.ts:116), `findFirstConnection` (execution.ts:73), `listApps`/`listActions` (seed.ts, connect-zapier.ts), `listConnections`/`listInputFieldChoices`/schema (discovery.ts), `getRegistry` (zapier-sdk-tools.ts:190). -- **Entire experimental surface (34): unused** — a deliberate choice (experimental, Zapier-hosted, less control), now documented rather than a blind spot. +**Low-level HTTP client** (`dist/api/`, under every method): `createZapierApi` → `get/post/put/patch/delete`, `poll` (staged backoff), `fetch`, `fetchStream` (SSE), `fetchJsonStream` (JSON-per-frame SSE, new in 0.70.0). FIFO concurrency semaphore (`maxConcurrentRequests`, default 200, since 0.52). Error classification via `isPermanentHttpError`. -### What we built that the SDK (now) overlaps — "what not to build" +## Foreman usage map & categorization audit -| Foreman home-grown | SDK equivalent (experimental) | Stance | +Source of truth: `packages/agents/src/lib/zapier-sdk-tools.ts`. Foreman imports the **main** entrypoint, reads `getRegistry({package:"mcp"})` (37 fns), drops `EXCLUDED_METHODS`, and generates a Mastra tool per remaining method. + +**Live tool count: Foreman generates 28 tools** (37 mcp methods − 9 excluded): + +| Bucket | Count | Methods | +|---|---|---| +| `APPROVAL_REQUIRED` (`requireApproval:true`, `destructiveHint:true`) | 9 | `runAction`, `fetch`, `createTable`, `deleteTable`, `createTableRecords`, `updateTableRecords`, `deleteTableRecords`, `createTableFields`, `deleteTableFields` | +| `READ_ONLY` (`readOnlyHint:true`) | 16 | `listApps`, `getApp`, `listActions`, `getAction`, `listConnections`, `findFirstConnection`, `findUniqueConnection`, `getConnection`, `getInputFieldsSchema`, `listInputFieldChoices`, `listTables`, `getTable`, `listTableFields`, `listTableRecords`, `getTableRecord`, `getProfile` | +| **Auto-surfaced, NOT categorized** ⚠️ | 3 | `getActionInputFieldsSchema`, `listActionInputFields`, `listActionInputFieldChoices` | +| `EXCLUDED_METHODS` (no tool) | 9 | `listAuthentications`, `findFirstAuthentication`, `findUniqueAuthentication`, `getAuthentication`, `request`, `listInputFields`, `createClientCredentials`, `deleteClientCredentials`, `listClientCredentials` | + +> 📌 **Correction:** the prior (0.69.3, doc-derived) snapshot claimed "20 surfaced tools (9 + 11)". The live count is **28** (9 + 16 read-only + 3 un-annotated). The old read-only count and the 3 auto-surfaced tools were both undercounted. + +### ⚠️ Finding F1 — input-field categorization is inverted (foreman-xb68 follow-up) + +The SDK's **canonical** input-field methods are `getActionInputFieldsSchema` / `listActionInputFields` / `listActionInputFieldChoices`; the `*InputField*` names are **deprecated aliases**. Foreman has it backwards: + +- It marks the **deprecated** `getInputFieldsSchema` + `listInputFieldChoices` as read-only tools. +- It excludes only **1** of the 3 deprecated input-field aliases (`listInputFields`), keeping the other two. +- It leaves the **3 canonical** methods uncategorized → they're auto-generated as tools but with `readOnlyHint:false` (wrong — they're reads) and as **duplicates** of the deprecated ones. + +Net: the agent sees **5 tools for 3 operations**, with the canonical ones mis-annotated. Correct end-state: canonical trio in `READ_ONLY`; all 7 deprecated aliases (4 auth + 3 input-field) in `EXCLUDED`. + +**Blast radius (why this is a tracked decision, not a drive-by edit):** the deprecated kebab names `get-input-fields-schema` / `list-input-field-choices` are pinned in the **eval dataset trajectories** (`scripts/datasets-label.ts`, `scripts/datasets-mini-experiment.ts`), the **live SDK test** (`tests/sdk/zapier-sdk.test.ts` execs them by name), and **web docs** (`packages/web/content/docs/core-concepts/tool-discovery.mdx`). Fixing the categorization requires re-labeling those in lockstep, or the live test + trajectory scorer break. Also a forward risk: if Zapier ever removes the deprecated aliases, those tests/labels break regardless. + +### Finding F2 — error-class coverage (12/19) + +`handleSdkError` (`zapier-sdk-tools.ts`) does `instanceof` against **12** classes. The other 7 exported classes: 4 real errors (`ZapierApiError`, `ZapierBundleError`, `ZapierConflictError`, `ZapierUnknownError`) fall through to the `instanceof ZapierError` catch-all (degrades fine, no crash); 3 are control-flow **signals**, not errors. Low priority; `ZapierConflictError` (409) is the only one that might warrant a specific message. + +### What we built that the SDK overlaps — "what not to build" + +| Foreman home-grown | SDK equivalent | Stance | |---|---|---| -| `workflow*` tables + `engine.ts` (frozen SDK-action tuples, re-run via `runAction`) | Durable Workflows + Runs | **Keep our engine** (control, conversation-linked, templates, non-experimental); track theirs | -| stubbed `poll` trigger type | Trigger Inboxes | **Don't build the poll-driver from scratch — evaluate trigger inboxes first** | +| `workflow*` tables + `engine.ts` (frozen action tuples, re-run via `runAction`) | Durable Workflows + Runs (`/experimental`) + `/define` authoring | **Keep our engine** — durable is scope-walled, experimental, Zapier-hosted; ours is conversation-linked + non-experimental. Track theirs. | +| stubbed `poll` trigger type | Trigger Inboxes (`/experimental`, not walled) | **Evaluate trigger inboxes before building a poll-driver from scratch** (foreman-bdjp / foreman-ueep) | | `cron-driver.ts` minute-tick | `watchTriggerInbox` (SSE) / `triggerWorkflow` | Possible future real-time replacement | -| manual rate-limit handling | `maxConcurrentRequests` option | Adopt on bump | +| manual rate-limit handling | `maxConcurrentRequests` option (default 200) | Adopt — set on `createZapierSdk` | +| (none) | `/define` durable DSL (`step`/`wait`/`createCallback`) | Not buildable for us until the durable scope opens; document as the target shape | + +## Action-type enum (verified from `dist/types/properties.js`) -## Changelog digest 0.48 → 0.69.3 (tagged) +`read` · `read_bulk` · `write` · `run` · `search` · `search_or_write` · `search_and_write` · `filter` -- **0.69.3** [BUGFIX] restore connections/app_versions/trigger fields on `publishWorkflowVersion`. -- **0.69.1** [BUGFIX] paginated results are now consume-once (don't `.items()` after iterating pages). -- **0.69.0** [NEW] `watchTriggerInbox` → SSE (real-time); add `fetchStream` + `SseMessage`. -- **0.67.0** [BEHAVIOR] extract `kitcore`; deprecate `createSdk().addPlugin()`; `normalizeError` no longer wraps Error subclasses; logs → stderr. -- **0.66.0** [NEW] `triggerWorkflow`. -- **0.65.0 / 0.64.0** [NEW] workflow runs + workflow versions (`publishWorkflowVersion`, etc.). -- **0.61.0–0.63.0** [NEW] workflow write (`create/update/enable/disable/deleteWorkflow`) + durable runs (`runDurable`, `cancelDurableRun`). -- **0.60.0 / 0.59.0** [NEW] workflow read; register durable backend paths. -- **0.57.0** [NEW] `trash` option on `listTableRecords`/`listTableFields`. -- **0.52.0** [NEW] configurable concurrency (`maxConcurrentRequests`, default 200, FIFO). -- **0.51.0** [BEHAVIOR] SDK auth defaults to client credentials; **deprecation notice for experimental Triggers (closed beta)**. -- **0.50.0** [BEHAVIOR] approval surface collapsed to `approvalMode: "disabled"|"poll"|"throw"`; removed `isInteractive`; renamed `"fail"`→`"throw"`; **no back-compat shim**. -- **0.49.0** [NEW] experimental triggers (trigger inboxes). +Unchanged. **No "create a Zap" type** — automation persistence is the (walled) durable API, not an action type. This is the structural reason Foreman owns workflow persistence. -### Bump-verification checklist (foreman-2xdk → gates foreman-8ujc) +## Changelog digest 0.69.3 → 0.70.4 -**Behavior verification — DONE 2026-06-11 (foreman-2xdk). All 5 PASS** (static + 0.69.3 `.d.ts` inspection + a reverted trial install). +- **0.70.4** response-field parity for experimental code-substrate plugins: `updateWorkflow`/`getWorkflow`/`listWorkflows` restore `is_private`, `created_by_user_id`, `triggers` (live claim status); `publishWorkflowVersion`/`getWorkflowVersion`/`listWorkflowVersions` restore `trigger`, `connections`, `app_versions`; `runDurable` input accepts `notifications` (webhook subscribers for run lifecycle). New `shared-schemas.ts`. +- **0.70.3** TTY + agent-caller context in SDK telemetry; `get-durable-run` accepts null `last_error`. +- **0.70.2** `listActions` no longer hardcodes `public_only:"true"` (private/unlisted apps the caller can access now appear) — COSUB-562. +- **0.70.1** reinstate `Schema.parse()` on workflow/durable response handlers; open RunStatus/ExecutionStatus/OperationType/OperationStatus enums for forward-compat; restore `DeleteWorkflowResponseSchema`; wire `outputSchema` on `cancelDurableRun`/`deleteWorkflow`. +- **0.70.0** `watchTriggerInbox` retries transient drain failures (5xx/429/network) with bounded backoff; new `ApiClient.fetchJsonStream` + `JsonSseMessage`. -1. **`approvalMode` (0.50) ✅** — Foreman never sets `approvalMode`/`isInteractive`/`"fail"` (0 grep hits). On a server (non-TTY) the unset default is `"throw"` ⇒ `runAction` throws `ZapierApprovalError` on approval-gated responses. That class `extends ZapierError`, so `handleSdkError`'s catch-all (`zapier-sdk-tools.ts:426`) degrades gracefully — no crash. *Follow-up (non-blocking):* the approval URL carried on the error is not surfaced to the user (only `.message`/`.code`). -2. **Client-credentials auth (0.51) ✅** — 0.69.3 `CredentialsSchema` still accepts a `string` token; PKCE schema present. Per-user path passes `credentials: accessToken` (string). Probe-confirmed (getProfile OK). -3. **`normalizeError` (0.67) ✅** — Foreman relies on `instanceof`, never calls `normalizeError`. All 11 imported `Zapier*Error` classes exist in 0.69.3 as real `Error` subclasses; "no longer wraps Error subclasses" means typed errors reach the catch unwrapped ⇒ `instanceof` still works. Handler order correct (`ZapierResourceNotFoundError` before `ZapierNotFoundError`). -4. **Pagination consume-once (0.69.1) ✅** — `listApps` response `{data, nextCursor}` unchanged 0.48→0.69.3. `seed.ts` walks cursors via `.data`/`.nextCursor`; **zero `.items()` calls** in `packages/`. Auto-paginate path uses `maxItems` (materialized). Immune to the consume-once footgun. -5. **zod single-version ✅ (with a caveat)** — SDK 0.69.3 declares `zod` as a **regular dependency pinned to `4.3.6` exact** (peerDeps empty). The root override `zod: 4.4.3` *does* collapse it to a single version — **but only on a full clean reinstall** (`rm -rf node_modules package-lock.json && npm install`). An *incremental* `npm install` after the bump leaves a stale `zod@4.3.6` nested under `packages/agents/node_modules/zod` and `check:deps` FAILS. See install-mechanics below. +(Earlier 0.48→0.69.3 digest preserved in git history of this file; auth/behavior notes that still matter are folded into the auth model + sections above.) -### Install mechanics for the bump (foreman-8ujc) — discovered in the 2xdk trial +## Reproduce / verify -Bumping `@zapier/zapier-sdk` to `^0.69.3` is **not** a drop-in `npm install`. Two traps: +```bash +# Full live surface dump (no creds, no network — pure introspection): +cd packages/agents && npx tsx scripts/sdk-surface-sweep.ts -- **zod dup → needs a clean reinstall.** Incremental install fails `check:deps` (two zod: 4.4.3 + 4.3.6). Full `rm -rf node_modules package-lock.json && npm install` resolves to single `zod@4.4.3`. -- **A clean reinstall drifts `@mastra/*`.** Nuking the lockfile re-resolves the `^`-ranged Mastra packages: `@mastra/memory ^1.17.5→1.20.2`, `@mastra/pg ^1.10.0→1.12.1`, which then expect `@mastra/core` exports (`modelSupportsAttachments`, `FavoritesStorage`) that the pinned `@mastra/core@1.32.1` (override) lacks ⇒ **5 mocked tests fail** (`foreman.ts`, `rag/index.ts` import errors) — unrelated to Zapier. The committed lockfile pins a compatible constellation; a naive nuke loses it. +# Durable wall re-confirm (needs ZAPIER_CLIENT_ID/SECRET; add --pkce for a user JWT): +cd packages/agents && npx tsx scripts/durable-endpoints-probe.ts -**Recommended recipe for 8ujc:** before the clean reinstall, pin `@mastra/memory`/`@mastra/pg` (and any drift-prone Mastra pkg) to the lockfile's current versions — exact pins or an `overrides` entry — so the zod-collapsing clean install doesn't drift Mastra. Then: `check:deps` + `mastra build` + `npm test` + `test:sdk` green. (Heads-up: `@zapier/zapier-sdk-cli` still transitively pulls `@zapier/zapier-sdk@0.48.x`, hoisted to root `node_modules` — harmless, tooling-only, not imported by the runtime which resolves 0.69.3 from `packages/agents`.) +# Version delta watcher (root): +npm run sdk:check +``` ## Test / Zapier-feedback candidates -- Trigger-inbox closed-beta vs go-forward status (the gating unknown). +- Trigger-inbox closed-beta vs go-forward status (the gating unknown — foreman-13mw). - `watchTriggerInbox` SSE reliability + lease/ack/drain semantics. -- `publishWorkflowVersion` field-drop class of bugs (they fixed one in 0.69.3 — we're a useful signal). -- Server-shape passthrough on durable endpoints (types can drift from responses). +- `publishWorkflowVersion` field-drop class of bugs (they fixed two: 0.69.3, 0.70.4 — we're a useful signal). +- When does the `internal` durable scope open to public SDK clients? (foreman-8bh9 / foreman-13mw). +- `/define` DSL stability + whether `runDurable` will ever accept an `external`-scope token. ## Open decisions Tracked in beads (refresh with `bd show `): -- **foreman-8ujc** — execute the SDK bump (with the verification checklist above). -- **foreman-iyq6** — evaluate the experimental durable-workflow + trigger-inbox APIs vs Foreman's own engine. -- **foreman-v8k1** — workflow tools epic (mostly already built; needs reconciliation + `/workflows` UI). -- **foreman-x944** — SDK/CLI update watcher (done). +- **foreman-xb68** — this live-introspection sweep; spawned F1 (input-field categorization) + F2 (error coverage) follow-ups. +- **foreman-iyq6 / foreman-98j3** — keep home-grown workflow engine for v1; durable API is post-v1. +- **foreman-v8k1** — workflow tools epic (built; needs `/workflows` UI — foreman-ezsm). +- **foreman-bdjp / foreman-ueep** — trigger-inbox poll-driver spike + live-verify. +- **foreman-13mw** — confirm long-term stability/sunset of experimental Triggers with Zapier. -_Regenerate the version section and re-audit the experimental surface whenever `npm run sdk:check` reports a new release._ +_Regenerate this file from `sdk-surface-sweep.ts` whenever `npm run sdk:check` reports a new release._ diff --git a/packages/agents/scripts/sdk-surface-sweep.ts b/packages/agents/scripts/sdk-surface-sweep.ts new file mode 100644 index 00000000..6edd4631 --- /dev/null +++ b/packages/agents/scripts/sdk-surface-sweep.ts @@ -0,0 +1,287 @@ +/** + * Full SDK surface sweep (foreman-xb68) + * ------------------------------------- + * Live-introspects the INSTALLED @zapier/zapier-sdk (no docs, no changelog + * guessing) and prints the complete capability surface, so we can prove what + * the SDK can actually do at this exact version and catch anything Foreman has + * not categorized. + * + * What it enumerates: + * 1. Installed version (from package.json on disk). + * 2. getRegistry() across every `package` value we can find — the function + * list the SDK itself advertises (this is what Foreman turns into tools). + * 3. Every callable method on the main SDK instance vs the experimental one + * (experimental is a superset: trigger-inbox + durable + workflow). + * 4. Every named export of all 4 entrypoints (., ./experimental, ./define, + * ./apps) with its runtime typeof. + * 5. The action-type enum (the "can it create a Zap?" question). + * 6. Diff vs Foreman's READ_ONLY / APPROVAL_REQUIRED / EXCLUDED / PAGINATED + * sets -> surfaces any method that is neither surfaced nor deliberately + * excluded (a real blind spot). + * + * No credentials / no network: getRegistry + method/exports enumeration are all + * local. Run from packages/agents: + * npx tsx scripts/sdk-surface-sweep.ts + */ +import { readFileSync } from "node:fs"; + +// ---- Foreman's own categorization (mirror of zapier-sdk-tools.ts) ---- +const APPROVAL_REQUIRED = new Set([ + "runAction", + "fetch", + "createTable", + "deleteTable", + "createTableRecords", + "updateTableRecords", + "deleteTableRecords", + "createTableFields", + "deleteTableFields", +]); +const READ_ONLY = new Set([ + "listApps", + "getApp", + "listActions", + "getAction", + "listConnections", + "findFirstConnection", + "findUniqueConnection", + "getConnection", + "getInputFieldsSchema", + "listInputFieldChoices", + "listTables", + "getTable", + "listTableFields", + "listTableRecords", + "getTableRecord", + "getProfile", +]); +const EXCLUDED_METHODS = new Set([ + "listAuthentications", + "findFirstAuthentication", + "findUniqueAuthentication", + "getAuthentication", + "request", + "listInputFields", + "createClientCredentials", + "deleteClientCredentials", + "listClientCredentials", +]); +const PAGINATED_METHODS = new Set([ + "listActions", + "listApps", + "listConnections", + "listTables", + "listTableRecords", + "listTableFields", + "listInputFieldChoices", + "runAction", +]); + +const line = (c = "=") => console.log(c.repeat(72)); +const h = (t: string) => { + console.log(); + line(); + console.log(t); + line(); +}; + +/** Collect every function-valued key on an object incl. its prototype chain. */ +function methodNames(obj: any): string[] { + const names = new Set(); + let o = obj; + while (o && o !== Object.prototype) { + for (const k of Object.getOwnPropertyNames(o)) { + if (k === "constructor") continue; + try { + if (typeof obj[k] === "function") names.add(k); + } catch { + /* getters that throw — skip */ + } + } + o = Object.getPrototypeOf(o); + } + // also catch own enumerable function props (plugin pattern attaches these) + for (const k of Object.keys(obj)) { + try { + if (typeof obj[k] === "function") names.add(k); + } catch { + /* skip */ + } + } + return [...names].sort(); +} + +async function main() { + // 1) Installed version straight off disk (exports map blocks require()). + const pkgPath = new URL( + "../node_modules/@zapier/zapier-sdk/package.json", + import.meta.url, + ).pathname.replace(/^\/([A-Za-z]:)/, "$1"); + const pkg = JSON.parse(readFileSync(pkgPath, "utf8")); + h(`@zapier/zapier-sdk SURFACE SWEEP — installed v${pkg.version}`); + console.log("dependencies:", JSON.stringify(pkg.dependencies)); + console.log("entrypoints:", Object.keys(pkg.exports).join(", ")); + + // 2) Import all four entrypoints. + const main = await import("@zapier/zapier-sdk"); + const experimental = await import("@zapier/zapier-sdk/experimental"); + const define = await import("@zapier/zapier-sdk/define").catch((e) => ({ __err: String(e) })); + const apps = await import("@zapier/zapier-sdk/apps").catch((e) => ({ __err: String(e) })); + + // 3) Named exports of each entrypoint with runtime typeof. + const dumpExports = (label: string, mod: any) => { + h(`EXPORTS — ${label}`); + if (mod.__err) { + console.log(" import failed:", mod.__err); + return; + } + const keys = Object.keys(mod).sort(); + console.log(`(${keys.length} named exports)`); + for (const k of keys) { + let kind = typeof mod[k]; + // distinguish error classes / constructors + if (kind === "function" && /^[A-Z]/.test(k)) { + const isErr = mod[k]?.prototype instanceof Error; + kind = isErr ? "class(Error)" : "function/class"; + } + console.log(` ${k.padEnd(34)} ${kind}`); + } + }; + dumpExports(".", main); + dumpExports("./experimental", experimental); + dumpExports("./define", define); + dumpExports("./apps", apps); + + // 4) Build SDK instances (no creds — pure shape introspection). + const mkSdk = (mod: any) => { + try { + return (mod.createZapierSdk as any)({ canDeleteTables: true }); + } catch (e: any) { + console.log(` createZapierSdk failed: ${e?.message ?? e}`); + return null; + } + }; + const sdkMain = mkSdk(main); + const sdkExp = mkSdk(experimental); + + // 5) getRegistry() across package variants on BOTH instances. + const probeRegistry = (sdk: any, label: string) => { + if (!sdk?.getRegistry) { + console.log(` [${label}] no getRegistry`); + return new Map(); + } + const variants: Array | undefined> = [ + undefined, + { package: "mcp" }, + { package: "sdk" }, + { package: "cli" }, + { package: "all" }, + { package: "ai" }, + ]; + const seen = new Map(); + for (const v of variants) { + try { + const reg = sdk.getRegistry(v); + const fns = reg?.functions ?? []; + const names = fns.map((f: any) => f.name).sort(); + console.log( + ` [${label}] getRegistry(${v ? JSON.stringify(v) : "undefined"}) -> ${fns.length} functions`, + ); + for (const f of fns) if (!seen.has(f.name)) seen.set(f.name, f); + } catch (e: any) { + console.log( + ` [${label}] getRegistry(${v ? JSON.stringify(v) : "undefined"}) -> ERROR ${e?.message ?? e}`, + ); + } + } + return seen; + }; + h("REGISTRY — getRegistry() across package variants"); + const regMain = probeRegistry(sdkMain, "main"); + const regExp = probeRegistry(sdkExp, "experimental"); + + // 6) All callable methods on each instance. + const mMain = sdkMain ? methodNames(sdkMain) : []; + const mExp = sdkExp ? methodNames(sdkExp) : []; + const onlyExp = mExp.filter((m) => !mMain.includes(m)); + h("INSTANCE METHODS"); + console.log(`main createZapierSdk() -> ${mMain.length} callable methods`); + console.log(`experimental createZapierSdk()-> ${mExp.length} callable methods`); + console.log(`\nmethods ONLY on experimental (${onlyExp.length}):`); + console.log(" " + onlyExp.join(", ")); + + // 7) Registry union (what is tool-able) — from the experimental registry, + // which is the widest. Categorize each against Foreman's sets. + const regUnion = new Set([...regMain.keys(), ...regExp.keys()]); + h(`REGISTRY UNION (${regUnion.size}) vs FOREMAN CATEGORIZATION`); + const rows: Array<[string, string]> = []; + for (const name of [...regUnion].sort()) { + let cat = "❓ UNCATEGORIZED"; + if (APPROVAL_REQUIRED.has(name)) cat = "approval"; + else if (READ_ONLY.has(name)) cat = "read-only"; + else if (EXCLUDED_METHODS.has(name)) cat = "excluded"; + rows.push([name, cat]); + } + for (const [n, c] of rows) console.log(` ${n.padEnd(34)} ${c}`); + const uncat = rows.filter(([, c]) => c.startsWith("❓")); + h("BLIND-SPOT CHECK"); + console.log(`registry-union methods NOT in any Foreman set: ${uncat.length}`); + for (const [n] of uncat) console.log(` ❓ ${n}`); + + // 8) Instance methods that are NOT in the registry union (callable but not + // advertised as tool-able functions). + const allInstance = new Set([...mMain, ...mExp]); + const notInRegistry = [...allInstance].filter((m) => !regUnion.has(m)).sort(); + console.log( + `\ninstance methods NOT in any registry (helpers/proxies/internals): ${notInRegistry.length}`, + ); + console.log(" " + notInRegistry.join(", ")); + + // 9) Action-type enum (the "create a Zap?" answer). + h("ACTION-TYPE ENUM"); + try { + const schemaPath = new URL( + "../node_modules/@zapier/zapier-sdk/dist/api/schemas.js", + import.meta.url, + ).pathname.replace(/^\/([A-Za-z]:)/, "$1"); + const txt = readFileSync(schemaPath, "utf8"); + const m = txt.match(/actionType[\s\S]{0,400}?enum\(\[([^\]]+)\]/); + console.log( + m + ? `actionType enum: [${m[1].replace(/\s+/g, " ").trim()}]` + : "actionType enum not found via regex (inspect schemas.js)", + ); + } catch (e: any) { + console.log("could not read schemas.js:", e?.message ?? e); + } + + // 10) Machine-readable summary block for doc refresh. + h("JSON SUMMARY"); + console.log( + JSON.stringify( + { + version: pkg.version, + entrypoints: Object.keys(pkg.exports), + registry: { + main: [...regMain.keys()].sort(), + experimental: [...regExp.keys()].sort(), + unionCount: regUnion.size, + }, + instanceMethods: { + main: mMain.length, + experimental: mExp.length, + onlyExperimental: onlyExp, + }, + uncategorized: uncat.map(([n]) => n), + notInRegistry, + }, + null, + 2, + ), + ); +} + +main().catch((e) => { + console.error("SWEEP FAILED:", e?.stack ?? e); + process.exit(1); +}); From c0f52f286bce7a7d10ca7e38475320a294d629fa Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Wed, 17 Jun 2026 19:01:51 -0700 Subject: [PATCH 6/7] docs(claude): add Versioning & Tagging convention to project rules SemVer + annotated tags at release points on main; cut-a-release steps, --follow-tags push gotcha, pre-1.0 rules, package.json/tag lockstep. Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 5b8a8b3d..2ef304cc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -143,6 +143,16 @@ Real provider keys are deliberately absent from CI. Anything that leaks into a n For requirements, full quick-start, env vars, ngrok, deployment, and the testing tier table — see [README.md](README.md). This file is for navigating the codebase; the README is for running it. +## Versioning & Tagging + +Foreman uses **SemVer** (`MAJOR.MINOR.PATCH`) with **annotated** git tags at release points. + +- **Tag releases on `main` only** — never on `feature/`/`fix/`/`chore/` branches or arbitrary commits. A tag is a permanent name on one commit; cut one at deploy-worthy milestones, not every push. +- **Cut a release:** bump `package.json` `version` → commit `chore(release): vX.Y.Z` → `git tag -a vX.Y.Z -m "..."` on that commit (annotated, not lightweight — annotated stores author/date/notes; releases and `git describe` need it). +- **Push tags explicitly:** `git push origin main --follow-tags` (a plain `git push` does NOT send tags — the usual gotcha). Optional: `gh release create vX.Y.Z --generate-notes` for a GitHub Release. +- **Pre-1.0 (`0.x`):** bump MINOR for features *or* breaking changes, PATCH for fixes; no stability promise until `v1.0.0`. +- Keep `package.json` `version` and the tag **in lockstep**. Current: `0.1.0`, **no tags yet** — first baseline tag (`v0.1.0`) pending. + ## Beads Issue Tracker From abce144e9d034d75cd346ed0f7a3ad5e86dbd12f Mon Sep 17 00:00:00 2001 From: HamChowderr Date: Wed, 17 Jun 2026 20:58:21 -0700 Subject: [PATCH 7/7] fix(deps): align zod override to 4.3.6 to match @zapier/zapier-sdk@0.70.4 pin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @zapier/zapier-sdk@0.70.4 pins zod to exactly 4.3.6, which conflicted with the root "zod": "4.4.3" override — npm nested a second zod@4.3.6 under packages/agents, tripping the dep-uniqueness check and failing `npm ci` (all CI jobs) on PR #20. @mastra/core (^3.25 || ^4.0) and agents (^4.3.6) both accept 4.3.6, so aligning the override on the SDK's required version unifies zod to a single 4.3.6 copy. Regenerated package-lock.json (net dedup). Closes foreman-dz3b. Co-Authored-By: Claude Opus 4.8 (1M context) --- package-lock.json | 2111 +++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 992 insertions(+), 1121 deletions(-) diff --git a/package-lock.json b/package-lock.json index af245178..263ee7fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,13 +71,13 @@ "license": "MIT" }, "node_modules/@ai-sdk/gateway": { - "version": "3.0.129", - "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.129.tgz", - "integrity": "sha512-KEQpZGJuCksc4iFxYtVHeHHG7yH0izGFzJLmRZlriI0hFIzJF9bT2AzJoaTHUI6minlxtP0WKYh84dP18o/Cuw==", + "version": "3.0.133", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.133.tgz", + "integrity": "sha512-Ebs+7iS9zUgJu5B0RlxM2JmDWzq79Cpd6YdiqcCzB5qFdpfQJPUDiXutqlQP89F2XGjOdDeidulBTXUdXWzOxw==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "3.0.10", - "@ai-sdk/provider-utils": "4.0.29", + "@ai-sdk/provider-utils": "4.0.30", "@vercel/oidc": "3.2.0" }, "engines": { @@ -100,9 +100,9 @@ } }, "node_modules/@ai-sdk/provider-utils": { - "version": "4.0.29", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.29.tgz", - "integrity": "sha512-uhukHaCBvqkwBHkT8C2PrnqKTCoLn3pdHXqtcR9I8ErH+flbzgW4o7VHSNIup9LRu+WBvZIZDQLsx6rwl2tiOA==", + "version": "4.0.30", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.30.tgz", + "integrity": "sha512-VO7I+vPffqI5sMnPoUq5DCSqKIgQIk/naJWRdQVpz2ma2zoprC/lqiJiUEl2s6DfvTD76TbhD3q39ROjlA6rGw==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "3.0.10", @@ -191,13 +191,13 @@ } }, "node_modules/@ai-sdk/react": { - "version": "3.0.205", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-3.0.205.tgz", - "integrity": "sha512-qh4H9dUqTJwdr+arKSIrVBHG4o4sYJdZGFUCJfAf9vMe/5IwDRwhq9z5ztpcUrXD3QACO01nuyfufNc0ZoGReA==", + "version": "3.0.210", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-3.0.210.tgz", + "integrity": "sha512-VprBlyc8yvwlpIdcIICL307vRncXrLlmcRTY/7JR5ND9+LvUcxJU16yW6prClFahqEWVza8Vr8P4Bgk5ZBtp4A==", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider-utils": "4.0.29", - "ai": "6.0.203", + "@ai-sdk/provider-utils": "4.0.30", + "ai": "6.0.208", "swr": "^2.2.5", "throttleit": "2.1.0" }, @@ -295,36 +295,25 @@ "license": "MIT" }, "node_modules/@azure/msal-common": { - "version": "15.17.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.17.0.tgz", - "integrity": "sha512-VQ5/gTLFADkwue+FohVuCqlzFPUq4xSrX8jeZe+iwZuY6moliNC8xt86qPVNYdtbQfELDf2Nu6LI+demFPHGgw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.9.0.tgz", + "integrity": "sha512-1MWGjqgUCRAYgLmVFZKp7fs3Rg1TFvIMgywY8ze2olNVvLlJoRThuoziWSDJuwwyJI5L4rnLb9Tyt5D9GvSLPw==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.8.10", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.10.tgz", - "integrity": "sha512-0Hz7Kx4hs70KZWep/Rd7aw/qOLUF92wUOhn7ZsOuB5xNR/06NL1E2RAI9+UKH1FtvN8nD6mFjH7UKSjv6vOWvQ==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.5.tgz", + "integrity": "sha512-RUuewWk9JvWJS5Yiy8/74Lm1rQAWlrU/qg/Bgtk1jIauVRtnb9XKwS5Xg0J+Whwjesq9EVrBIFgQEP8vHxgezA==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.17.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" + "@azure/msal-common": "16.9.0", + "jsonwebtoken": "^9.0.0" }, "engines": { - "node": ">=16" - } - }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "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).", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=20" } }, "node_modules/@babel/code-frame": { @@ -1064,13 +1053,13 @@ } }, "node_modules/@chat-adapter/discord": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/discord/-/discord-4.30.0.tgz", - "integrity": "sha512-hWMwCwVgMeQWB5F2JL91GLTWcF8rlE4eewzXzfPSoAsM7Y71yBDCfQ9QfL5VODwPKtYnVPU5Go2pGsuauaZ/yw==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/discord/-/discord-4.31.0.tgz", + "integrity": "sha512-1dVw1+6ZBwdVh5ynLK9D+SyHdPWIBbiPmKRC+WhzDSddR8eySswcBiDUKaDMUaOmvJavPvibJLwWbohUSBiJww==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", - "chat": "4.30.0", + "@chat-adapter/shared": "4.31.0", + "chat": "4.31.0", "discord-api-types": "^0.37.119", "discord-interactions": "^4.4.0", "discord.js": "^14.25.1" @@ -1080,126 +1069,126 @@ } }, "node_modules/@chat-adapter/gchat": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/gchat/-/gchat-4.30.0.tgz", - "integrity": "sha512-s3rqHJqW17RE1drBhS9H+YYDpiasfd4YBaXdLrNqao5AS5sNWR/ekWiDGPeF/zlzDkOUNdnyDq3NbA7/2HsHsQ==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/gchat/-/gchat-4.31.0.tgz", + "integrity": "sha512-4g7k7rJjTJJmtkuAoU3uGp87zNlebhzP+IJcxd9YrfK83/kApB/El5PGtn2P2SF/x5fl+EkOR9r/hWmH1U7Iyg==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", + "@chat-adapter/shared": "4.31.0", "@googleapis/chat": "^44.6.0", "@googleapis/workspaceevents": "^9.1.0", - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/github": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/github/-/github-4.30.0.tgz", - "integrity": "sha512-lwY85HcZrHe2RvmeIYDd2Y6VIvTRTljW6G4c8avF+RBlYAb3aW71LBuM2QYPPs2b/n5frRaddgLOsZ4j+vGEEA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/github/-/github-4.31.0.tgz", + "integrity": "sha512-yMKNR5WWMoCP1jGCxOigI6NrgC7Dm60zuy6ey1BgNPjgA6n769ZI8dvf+N6wgwqFHOeqSNIYhNnT/ojB6WsjtQ==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", + "@chat-adapter/shared": "4.31.0", "@octokit/auth-app": "^8.2.0", "@octokit/rest": "^22.0.1", - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/linear": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/linear/-/linear-4.30.0.tgz", - "integrity": "sha512-L0/B71Sdx8XuMbhaw0YShzR18DwhBS+Yfna61SnTpyoS+BzIRKxP1xEQU6LYGCiOiS+587GZOUm2vSWPakMAWw==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/linear/-/linear-4.31.0.tgz", + "integrity": "sha512-myEDw3LoSDaVCjLQ4nDNWK3XFTVa+asO3/78qRxEv76kl1izcYi0g0BhZvozdJgswkKeZC2AaLzvN8GEerKZPw==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", + "@chat-adapter/shared": "4.31.0", "@linear/sdk": "^76.0.0", - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/shared": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/shared/-/shared-4.30.0.tgz", - "integrity": "sha512-IuYtbn/p1FBXvp7JYGEMLCt07GHOMlyjx7OlZXPJwLTravcyJuP7Q6N31r6c1yubMhM8PLb8eT8l/YnjwYjs9Q==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/shared/-/shared-4.31.0.tgz", + "integrity": "sha512-vT/0S/LKSU5QTz5xJNWdiGp1jl55x0o8Z9I2VqlHfwjOKxVR87z++bQjXlE99w6BAxZjSYhWErlveyKo4LiDGg==", "license": "MIT", "dependencies": { - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/slack": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/slack/-/slack-4.30.0.tgz", - "integrity": "sha512-ZB+G/JBKmaXzvl+DuUQPBb/gCwXP3fOtUK5Cyj6wLbbeeDYzi3NQPvpvieVum/GI4iuR8OUVcNAnVQiH6P6DOQ==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/slack/-/slack-4.31.0.tgz", + "integrity": "sha512-b+nUizoTQac0gNEaZ+F4XAYcFtynXufpGUYMkeSwfiD9najoQEKXpvZya8PgqX1Ddn3SPddeJ/ip+RS2oQuBLA==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", + "@chat-adapter/shared": "4.31.0", "@slack/socket-mode": "^2.0.5", "@slack/web-api": "^7.14.0", - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/state-memory": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/state-memory/-/state-memory-4.30.0.tgz", - "integrity": "sha512-huYnGBKBiY6s/GaYgtAmr0zM6ihvGl8/NOEV9oqY89jr6Zdnm/ZXdpXvDKdXoaxmDXCiZr2U54DbSDzpvGQ6fA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/state-memory/-/state-memory-4.31.0.tgz", + "integrity": "sha512-QsxWce5OaY+j980dRCfFZSIoVHtg+gOg6p4IOWVsB4vxwXFin8CNg/hd34kvnmzqizbD/tmLze0Pkq/sKC4NLg==", "license": "MIT", "dependencies": { - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/teams": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/teams/-/teams-4.30.0.tgz", - "integrity": "sha512-5hm20xnePw8CeeGFAXIPI5D7gNL6TfwCE0sAhJIBwlH8H4SztxJWDvpp8AiHokYjck3ejtaHqXLiGrauUzAi0A==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/teams/-/teams-4.31.0.tgz", + "integrity": "sha512-SGkwO8XqoRHrmWThNEomWc1Tcn7GdoiO6TBod9ixbUKz6MuV4ovYVwWLaxnO8wjPA/W5KoPvPIwSEZiuNpRymw==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", + "@chat-adapter/shared": "4.31.0", "@microsoft/teams.api": "^2.0.8", "@microsoft/teams.apps": "^2.0.8", "@microsoft/teams.cards": "^2.0.8", "@microsoft/teams.graph-endpoints": "^2.0.8", - "chat": "4.30.0" + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/telegram": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/telegram/-/telegram-4.30.0.tgz", - "integrity": "sha512-OX98fYMorz3gRvNoCVidYKOnb89Rf9UZQaUDQMhtk5IsgHX0k2qiUpEb2VOquMHyH8Pb7xkqrG52NFLnzGpspQ==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/telegram/-/telegram-4.31.0.tgz", + "integrity": "sha512-kwhPKkhhRzt82XTunCD1cROkJOo+c1cpOEzSXT3RX6BIcVwqikh6k7qTSPG6gmBPiouMbNnvzgnQYFgA7FZJPw==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", - "chat": "4.30.0" + "@chat-adapter/shared": "4.31.0", + "chat": "4.31.0" }, "engines": { "node": ">=20" } }, "node_modules/@chat-adapter/whatsapp": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@chat-adapter/whatsapp/-/whatsapp-4.30.0.tgz", - "integrity": "sha512-4iXroN/FYRsWdhgVFUNzf4VXX67a9u6xcYoBGgX2eqTwlq5THywYSe7FSA5GP7Hg0SK0mRExdpR/Hvk9+tP9xw==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@chat-adapter/whatsapp/-/whatsapp-4.31.0.tgz", + "integrity": "sha512-aDLs2N1rVtci6CZ4dc2bSglBU1+QytPnMmKIVxy6W9fN/vPvv7tKbiCDNY6g5HIiixqU7QizHQ0Zbd4LOImJ0w==", "license": "MIT", "dependencies": { - "@chat-adapter/shared": "4.30.0", - "chat": "4.30.0" + "@chat-adapter/shared": "4.31.0", + "chat": "4.31.0" }, "engines": { "node": ">=20" @@ -1304,9 +1293,9 @@ } }, "node_modules/@codemirror/search": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.7.0.tgz", - "integrity": "sha512-ZvGm99wc/s2cITtMT15LFdn8aH/aS+V+DqyGq/N5ZlV5vWtH+nILvC2nw0zX7ByNoHHDZ2IxxdW38O0tc5nVHg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.7.1.tgz", + "integrity": "sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -1508,9 +1497,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.3.tgz", - "integrity": "sha512-DOgvIPkikIOixQRlD4YF31VN6fLLUTdrzhfRbis8vm0kMTgIbEPX0Ip/YX9fOeV9iywAS4sUUbTclpan7yYP8Q==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.7.tgz", + "integrity": "sha512-CmjJFQTFQx/U/xNJhSjCQ0ilpesPmNQ8+eOUeM/+kDOVW33qsIjeOXc27vrQDdWVkf83ZSWwtg7kXSUvKDJ8cQ==", "dev": true, "funding": [ { @@ -1631,9 +1620,9 @@ } }, "node_modules/@discordjs/builders/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" @@ -1664,9 +1653,9 @@ } }, "node_modules/@discordjs/formatters/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" @@ -1718,23 +1707,14 @@ } }, "node_modules/@discordjs/rest/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" ] }, - "node_modules/@discordjs/rest/node_modules/undici": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", - "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/@discordjs/util": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz", @@ -1751,9 +1731,9 @@ } }, "node_modules/@discordjs/util/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" @@ -1795,9 +1775,9 @@ } }, "node_modules/@discordjs/ws/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" @@ -1967,9 +1947,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", "license": "MIT", "optional": true, "dependencies": { @@ -2629,9 +2609,9 @@ "license": "MIT" }, "node_modules/@hugeicons/react": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.6.tgz", - "integrity": "sha512-c2LhXJMAW5wN1pC/smBXG0YPqUON6ceR/ZdXHCjEI9KvB+hjtqYjmzIxok5hAQOeXGz0WtORgCQMzqewFKAZwg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.7.tgz", + "integrity": "sha512-0q1gekPJvNtIsfqi6alVdKfqsLz0PGiZWOzxJDxOd55UpFwcgohBFU4CwTcJ7kg4hO3kwXuzxrn/JEj280GX3g==", "license": "MIT", "peerDependencies": { "react": ">=16.0.0" @@ -3816,22 +3796,10 @@ "zod": "^3.25.0 || ^4.0.0" } }, - "node_modules/@mastra/core/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@mastra/deployer": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/@mastra/deployer/-/deployer-1.42.0.tgz", - "integrity": "sha512-iRpCf+gP4OCkGBYfHUKLzARi6+4gFBIK/yVngYveE5f/IuUhIPYRBL1SBoYVDx6r25L9yyLrw7jstAFDggRgHQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@mastra/deployer/-/deployer-1.43.0.tgz", + "integrity": "sha512-bNb6z/dR34/CtKBGmurH2aRi1hDLAR0tCwSPcyfLquAa7F30//Mm+zcNXwNrH8ip609hYhu0oSIpjlF1iuvLEA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -3839,7 +3807,7 @@ "@babel/preset-typescript": "^7.29.7", "@babel/traverse": "^7.29.7", "@hono/node-ws": "^1.3.0", - "@mastra/server": "1.42.0", + "@mastra/server": "1.43.0", "@optimize-lodash/rollup-plugin": "^5.1.0", "@rollup/plugin-alias": "6.0.0", "@rollup/plugin-commonjs": "29.0.2", @@ -3850,13 +3818,13 @@ "@sindresorhus/slugify": "^2.2.1", "@types/babel__traverse": "^7.28.0", "empathic": "^2.0.0", - "esbuild": "^0.27.4", + "esbuild": "^0.28.0", "find-workspaces": "^0.3.1", - "fs-extra": "^11.3.4", + "fs-extra": "^11.3.5", "hono": "^4.12.8", "local-pkg": "^1.1.2", "resolve.exports": "^2.0.3", - "rollup": "^4.59.0", + "rollup": "^4.61.1", "rollup-plugin-esbuild": "^6.2.1", "strip-json-comments": "^5.0.3", "tinyglobby": "^0.2.17", @@ -3915,49 +3883,6 @@ "@mastra/core": ">=1.34.0-0 <2.0.0-0" } }, - "node_modules/@mastra/deployer-vercel/node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "license": "MIT", - "optional": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@mastra/deployer/node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@mastra/deployer/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@mastra/duckdb": { "version": "1.4.1-alpha.0", "resolved": "https://registry.npmjs.org/@mastra/duckdb/-/duckdb-1.4.1-alpha.0.tgz", @@ -4148,9 +4073,9 @@ } }, "node_modules/@mastra/server": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/@mastra/server/-/server-1.42.0.tgz", - "integrity": "sha512-3CXP5Mwh2OcFY8QdmPpqVWSJm4QcA9AD+Ln3PsLbBlcrlpzL2+w59SsbMau0sk9NjHyky6QRK29NzRhwG8hwug==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@mastra/server/-/server-1.43.0.tgz", + "integrity": "sha512-axV2nGgy0yPfAzyX8OSdnewnng3dczvLmHLFLxekEc3Y8aDaSM5SpBk/a9N+JgVZmESlG6r7Fz0A4zreZvbleA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -4237,13 +4162,13 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" + "node_modules/@mdx-js/mdx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" } }, "node_modules/@mermaid-js/parser": { @@ -4256,13 +4181,13 @@ } }, "node_modules/@microsoft/teams.api": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.api/-/teams.api-2.0.12.tgz", - "integrity": "sha512-LQSCwRONUl09pdszTdgsRLQ0ZZcdq16goaBckzM/zKGuQkfSIT3u+3V1X2FVeND4sGt0wn+E/v29cZfhJAW4ZA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.api/-/teams.api-2.0.13.tgz", + "integrity": "sha512-PUbCxZhBLiRPchWeZNcgsXxBGY7lGJrLwqin9I+n+ND9iCwSTtDf9kzhvIWQSPXgxViK8znmKQshSguf1JRz3Q==", "license": "MIT", "dependencies": { - "@microsoft/teams.cards": "2.0.12", - "@microsoft/teams.common": "2.0.12", + "@microsoft/teams.cards": "2.0.13", + "@microsoft/teams.common": "2.0.13", "jwt-decode": "^4.0.0", "qs": "^6.15.2" }, @@ -4271,15 +4196,15 @@ } }, "node_modules/@microsoft/teams.apps": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.apps/-/teams.apps-2.0.12.tgz", - "integrity": "sha512-AZWxhnuBLlUvrz1Jm1DtoB/ZfvIiML8e3PGGmJm9MXnxd6mwv8ZcL9Po8Or96KDF6E+DICRbpXBO7I3b+B+X5A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.apps/-/teams.apps-2.0.13.tgz", + "integrity": "sha512-md8DmJhu+TuMlNu5i9mU0yflZuXEvbyDkZq+DcYABM5xZcj0PTSAtTMcVqW+cdbBz/KYquix6YGWdcV9KOFl/g==", "license": "MIT", "dependencies": { - "@azure/msal-node": "^3.8.1", - "@microsoft/teams.api": "2.0.12", - "@microsoft/teams.common": "2.0.12", - "@microsoft/teams.graph": "2.0.12", + "@azure/msal-node": "^5.2.2", + "@microsoft/teams.api": "2.0.13", + "@microsoft/teams.common": "2.0.13", + "@microsoft/teams.graph": "2.0.13", "axios": "^1.15.2", "cors": "^2.8.5", "express": "^5.0.0", @@ -4292,18 +4217,18 @@ } }, "node_modules/@microsoft/teams.cards": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.cards/-/teams.cards-2.0.12.tgz", - "integrity": "sha512-FVSSuOpvjpWSsoYwJI05eB4irPlaBkepgmWGFe1dhqTC2In9GWvkfNPJieyvmeDydj1jqHwwrjrkHO3MdGjiCw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.cards/-/teams.cards-2.0.13.tgz", + "integrity": "sha512-eeXWvPTSQQZDeByVQOf9QTSfxnB0UvYBoAzgD2X+n+Q7nbsNBhId8nm0oipTF8E0uTp4i9iEb/5m9UkP/fmz6Q==", "license": "MIT", "engines": { "node": ">=20" } }, "node_modules/@microsoft/teams.common": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.common/-/teams.common-2.0.12.tgz", - "integrity": "sha512-gFFeWXXABOkarUViYIM4DJxNxNSTcXHv7Ds6poNyb3HODsY3kZV3EmYaDanP7KDqqXbUPlgB3LPV9bYRgcL9JQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.common/-/teams.common-2.0.13.tgz", + "integrity": "sha512-zDeKZBAsTCjvPCcAmMUpcttyAkQTSV78m3cG3hVYgHmkSupHd4z+pcCOHEw/Tto8gH346622KT7nj2Ar2cT2fg==", "license": "MIT", "dependencies": { "axios": "^1.15.2" @@ -4313,12 +4238,12 @@ } }, "node_modules/@microsoft/teams.graph": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.graph/-/teams.graph-2.0.12.tgz", - "integrity": "sha512-dMioF/l/bb/cDZDZed8/7CeIZJEsREE4GwSn9V9h1/KiY004bLnjePVeLjpMt4QRoUmPn+GVokhEXztIFTYZzA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.graph/-/teams.graph-2.0.13.tgz", + "integrity": "sha512-df3lCP9UmU60hXOm9zMr/GTEzZZhovL2mj9uFizjCEP6u9pQsaTN+0ldHn44FOyHtn5M6x9fUlBxIOiu4VOg9Q==", "license": "MIT", "dependencies": { - "@microsoft/teams.common": "2.0.12", + "@microsoft/teams.common": "2.0.13", "qs": "^6.15.2" }, "engines": { @@ -4326,9 +4251,9 @@ } }, "node_modules/@microsoft/teams.graph-endpoints": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@microsoft/teams.graph-endpoints/-/teams.graph-endpoints-2.0.12.tgz", - "integrity": "sha512-3wJM/Mm3IVqtbpe46BnJjDiS3rKqvxu3TwVEnGnHL0ys7VlupwTJPMZ4RPfI7P9E+/d3ejRAeTrhvLY2sjh0bg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@microsoft/teams.graph-endpoints/-/teams.graph-endpoints-2.0.13.tgz", + "integrity": "sha512-nhPk4BNQ3XbD+ntoGNKtXwhCoWHvmUVp5xuAXuxvv7doFTOJ7u1K/fWa7FLQaaAg/m/zOrEc20S5cJisunWp4A==", "license": "MIT", "engines": { "node": ">=20" @@ -5135,13 +5060,6 @@ "node": ">= 12" } }, - "node_modules/@optimize-lodash/transform/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@orama/orama": { "version": "3.1.18", "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.18.tgz", @@ -5223,13 +5141,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", - "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.0.tgz", + "integrity": "sha512-cKA5B6lpFEMyMGjxF54QihfYpB4FkEGH+qZhtArDEG+wezQAJY8Pq6C7T1SjWz+FFzt3TbyoXBQYk/0292TdJA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.60.0" + "playwright": "1.61.0" }, "bin": { "playwright": "cli.js" @@ -5291,18 +5209,18 @@ "license": "MIT" }, "node_modules/@posthog/core": { - "version": "1.32.3", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.32.3.tgz", - "integrity": "sha512-vwOEMfZvGv5XxNWV7p9I52NSmvFNMhyW2IHpIoUHW5jLkgUrknzJW1H/qxVGSIrNNVQkfsoaDFzDhJdg10pgrA==", + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.35.1.tgz", + "integrity": "sha512-2a9JgJgR+Ow8lrUQHVZYXH9EgXskYDlpbgNW6UvtsVxp8pEEFD8PxjZMnzq73Dx3NhAwNUrnVpb8KeZzHAtoSA==", "license": "MIT", "dependencies": { - "@posthog/types": "1.386.3" + "@posthog/types": "^1.389.0" } }, "node_modules/@posthog/types": { - "version": "1.386.3", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.386.3.tgz", - "integrity": "sha512-LqJoiQi2eyWn7rCUgnn+D+F3Efp6+04o72bjSX6kWHx0nFaYNC/nJuAIRliDTY/X7GPIUAaHAcSjbMI/9wfX1Q==", + "version": "1.390.0", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.390.0.tgz", + "integrity": "sha512-zMjK6nrUWhAlL8ECrM4WldvgawqdoAE5B0ys7eA0lCoWuyzfFoSyh6zYtEuBSDRyN7fQLSfNCK+mQH4ngOl7Zw==", "license": "MIT" }, "node_modules/@radix-ui/number": { @@ -5318,12 +5236,12 @@ "license": "MIT" }, "node_modules/@radix-ui/react-accessible-icon": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.9.tgz", - "integrity": "sha512-5W9KzJz/3DeYbGJHbZv8Q6AkxMOKUmALfc+PRg9dWwJZMk6zD37Sz8sZrF7UD6CBkiJvn7dNeRzn5G7XiCMyig==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.10.tgz", + "integrity": "sha512-TraSwZUqTcVbiDV2/RXzAXC7aeVVXchq0daPFZE7zAxYFaMzjOUggLOfQH9KFLgRizuwVKZO/crveV1eeO3/ZQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-visually-hidden": "1.2.5" + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -5341,19 +5259,19 @@ } }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.13.tgz", - "integrity": "sha512-xITxBB2p5m5tAe7M0F95kb4uAh7jSIKGlExMEm93HlW+XxZHV2eXFbPWLktd4JhRiwcnXNbO7iekcrbZy6ZCvA==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.14.tgz", + "integrity": "sha512-iE8YB9nmTBH8zd73ofBISZ8JCzgMoMkATJr7qDwa6u5F1+7mTM81V6fa71jgZ65rpjVpecDf1vSnwIFP9Ly1zw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collapsible": "1.1.13", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collapsible": "1.1.14", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -5372,17 +5290,16 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.16.tgz", - "integrity": "sha512-vPaIgo0mxYlvcFaM9jB2Uot9TjGXMuAPEvrc6BOLeV+I5U8s1dkIoouYaa6lmSfc5SPMo5x5djOTOTvaigdGMQ==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.17.tgz", + "integrity": "sha512-563ygGeyWPrxyVCNp7OV4rE2aIXhFPknpFyo4wbDlcyMMPZ6ySh+zC5WTvY0ZFLgPTg/QB6tA8PyDQyJ2b4cPg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dialog": "1.1.16", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5" + "@radix-ui/react-dialog": "1.1.17", + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -5400,12 +5317,12 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.9.tgz", - "integrity": "sha512-yqHW5WQ/cTpU/un7dqqIKNy2iRU8BC0JB78PEzTfCCYvZu1U6W9KwObAniMk9nhSfyotKPQTYaUD/HB0f5muig==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.10.tgz", + "integrity": "sha512-j2VTDz1vgCsmuG0k5lBfOcM8n5JPFqZBcMryasFjHYMhwxYL5SRUV5lMSUpRdNtw3D/Sv8pzJtrlAgkssYSsQQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -5423,12 +5340,12 @@ } }, "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.9.tgz", - "integrity": "sha512-Xy+Dpxt/5n9rVTdPrNFmf8GwG1NlT1pzCF/z1MgOGZMLZWdWl+km+ZRWGQAPEhbkzSwYEsfYmTca8NhUtVxqnw==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.10.tgz", + "integrity": "sha512-kbI7NrqhDeuytYrq7JjAsoXczvL8wgj2tc1MyaYWm+50bMKHCHQtVWCryslx4cCpmCTTkBcwQckE4CmmGV2haQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -5446,13 +5363,13 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.12.tgz", - "integrity": "sha512-NQCQyWC7QrDPhjMn8hUqFeU0lUrprIgm1AyMgLbzuQJibNnatdc3SSMo3/UGFu/eUkJUU1cEcKCnyhXTQzq6tA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.0.tgz", + "integrity": "sha512-am/CwltXtmtdtP+5FbYblYDnMa/zuKcMJP1i3/SJMDXXfj2mG+BTqLH2wucqeyyiQMursUtg/5cK+Nh2pCaSOA==", "license": "MIT", "dependencies": { "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-is-hydrated": "0.1.1", "@radix-ui/react-use-layout-effect": "1.1.2" @@ -5473,16 +5390,16 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.4.tgz", - "integrity": "sha512-m3JmIOAX5ZzZ6VPjxEU2dbTOhoHi0nT5riwcDwe8idocsWf4a5DXJLDtZ6LfJwMBx7W+A2b7kp2TgPEKtaiF6A==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.5.tgz", + "integrity": "sha512-pREzrmNnVwGvYaBoM64huTRK7B3lrTRuwj8A9nwhPiEtMb+yudiWh6zWAqEtP0Dzd5+iBa1Ki7V1pCxV8ExMdA==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" @@ -5503,9 +5420,9 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.13.tgz", - "integrity": "sha512-F0s8+p2XNpfc3k02zBfB0jPWbkHVG162+p7BdUMyJ2308QMqZ+oaclX+FAzKFovgL5OqRU+Rvy6f/vbdlJVaqA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.14.tgz", + "integrity": "sha512-9bT+FvifX1FK2Mj6UEsTdyu0cN3JaA3KdfhaBao+ONrYFy/pyOy3TU1TNw7iOk1o+0hOEq67RojlUUmoFGwxyA==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", @@ -5513,7 +5430,7 @@ "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, @@ -5533,15 +5450,15 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.9.tgz", - "integrity": "sha512-zuSVi7ziP7uQRqc+yGxsKJfNkdyHv3ZKDaHe0gzg4dRgws96TPKWIiz84tVHP4GEcEl8bC0mdt17NkcxaJHmaQ==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.10.tgz", + "integrity": "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5" + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", @@ -5589,15 +5506,15 @@ } }, "node_modules/@radix-ui/react-context-menu": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.0.tgz", - "integrity": "sha512-d7CouXhAW+CGmFOqmB+IEvd3E9GcaqfgvfjCc3hfulp2pkaUCEVEGa0SN5nNWYA+IvQ6g1Pt+S5dpNn1AoY9hg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.1.tgz", + "integrity": "sha512-XbrxS68W5dyiE4fAb96yvJwSVU5x66B20A99sD5Mk3xSWK/LqeOnx6TZnim1KieMjXS/CTFq8reOAjWxas2G8Q==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-menu": "2.1.17", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -5616,22 +5533,22 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.16.tgz", - "integrity": "sha512-l9ok83YBclEZhbjgzt76Hw733e6cvRKPNgO6GJ/IETlufXG9p+fRu2wlvpImQvR6xdJ8h7J8J2DBvsPEiEsKMw==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.17.tgz", + "integrity": "sha512-TDTYmpdq8dI2+Xgvgj9AJ8Ghqq+Eph/TRVEdaFQPDItIY+6QSkU7MJMeevw1568Yw/2Ijz8BTphPSP2XejKphw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.9", + "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" @@ -5667,14 +5584,14 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.12.tgz", - "integrity": "sha512-MhoruH6xEzsbvOmo4TNgMfmtvRGyDZw4MDSdf4ybMHfezjqwzv6hyd4lsMzBp8K9Sn6sGzCF62x1I7BYUECXOg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.13.tgz", + "integrity": "sha512-2v+zNAWWe0ySxgC0D0yeXMPQ23xZVgXZTerTz+JKlmdRj6gfTqmCcR29jb6d290DezXPGgruHWDX/vYUebtErg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-escape-keydown": "1.1.2" }, @@ -5694,17 +5611,17 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.17.tgz", - "integrity": "sha512-S6b3Jm57sY5EdDyOMLkacbB0qMnKhy1RCKZCt795ZkmtUOAvojYIZ5p7dXHIh5Cyr3jCLLI5/g64V3FKLudZmw==", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.18.tgz", + "integrity": "sha512-PZGV82gFk0WltDRI//SsG28ZIjlo9ANTmoNYg0jLNzXXiDsAy5PkOOYQaVD1pPxY6t7gxffb1QMD6qaUvsBZdw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-menu": "2.1.17", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -5738,13 +5655,13 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.9.tgz", - "integrity": "sha512-9Se8t+Zry+1rEOL7Y6l/4ANYU/TOtAtf8O2fKdwLltcaMcm6kOqYGbzO4tMFQ0bvzO920pRAoHpFZ4W85S3keQ==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.10.tgz", + "integrity": "sha512-Fas/lXQqhVvqwAb64s5RFeHiHYElZ6SUQbZaNd6EkfhP/Al7wTIQ9WIR4QVX475tlu5yFCEdDcJH6/UwsZjMWw==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { @@ -5763,17 +5680,17 @@ } }, "node_modules/@radix-ui/react-form": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.9.tgz", - "integrity": "sha512-eTPyThIKDacJ3mJDvYwf/PSmsEYlOyA2Qcb+aGyWwYv+P5w57VPUkMVA2XJ9z0Du2KBY1HoHQzhPV9iYL/r4hg==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.10.tgz", + "integrity": "sha512-1NfuvctVtX4sU3Mmq/IdrR8UunxiCMiVg3A5UENKhFzxUBeOyaQQ+lmaQaV7Tc8cqvBKsJL3/KGBsixK0D8WFg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-label": "2.1.9", - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-label": "2.1.10", + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -5791,19 +5708,19 @@ } }, "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.16.tgz", - "integrity": "sha512-hAileDBtd6CX7nlZOarOnISQ6PP4q0e16BX51ulzdZ+7IzjL0sDTVpFdmSYrIjw6zVNsfQBao5gG6AWr3qwfvA==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.17.tgz", + "integrity": "sha512-GjZQIEANVkuuWeztlKz6QEHe31ZX2iDfHzcTMCQVZXC0JyQrgfKWSC+LOOEw6aVV64zyjzobIzSA4AU4eKWrHA==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.12", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -5840,12 +5757,12 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.9.tgz", - "integrity": "sha512-rDoTeMbCwRVcnmo7NGT9IlPo1yXmEI+xc1URP3oeewwZEV4mdTp1dYUhYbQdo4D1q2SjKVvv4N1gNY77QAQtjA==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.10.tgz", + "integrity": "sha512-ib0zvq2ZsAqKm5tRnqGJn3vOxSgIts5ToxsXT0q1S/GfLD1Zj7UOEnkw8u2w6sRmn47djpQWuSU1DCL1R29/yw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -5863,26 +5780,26 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.17.tgz", - "integrity": "sha512-fmbNnFyf+JYCN0DhhWnEdUTDnZD1mXaPQWivdsPIb8oOSbARfD3LIQJbLCG8a8QLCwoMxiJ7GVPIFcC8Dw8v2Q==", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.18.tgz", + "integrity": "sha512-lj8Rxjtn6zJq1oSbE/uDtAwCbB9BnxgHD+8MwJMuTh6u1dPamYhW9iuELr/Z8d0D/UysFblYYHeBPwi7T4k0YQ==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.9", + "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", - "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-callback-ref": "1.1.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" @@ -5903,20 +5820,20 @@ } }, "node_modules/@radix-ui/react-menubar": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.17.tgz", - "integrity": "sha512-AKtZ4O782yO7qwIyq73WpulYt1IHhQ0htDb6wNcxzxnSDCcSWMVBiU9ycpcA90XzQO4IVIxIErtak6Kg/Vt0rQ==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.18.tgz", + "integrity": "sha512-hX7EGx/oFq6DPY27GQuP/2wP48GHf5LG6r06VgNJlG+znmDS8OfopZcRcGly3L4lsB9FqpmLx6JQSE9P3BUpyw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-menu": "2.1.17", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -5935,25 +5852,25 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.15.tgz", - "integrity": "sha512-/fS8hKCcRt4DwCGa5QIB3juRXmfYSOk4a2AEe/BDIyy7Hm+eje2Y13oUx5zejl+wFt1owrM7E8NWlbaEl5EGpg==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.16.tgz", + "integrity": "sha512-nJ0SkrSQgudyYhMiYeHA1ayLVuduEJCFLan1RZZN7c9kqzzCFLaU9kuy81uNtqzweM9YaQPgWzxi9MwQ9jZ04g==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.5" + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -5971,19 +5888,19 @@ } }, "node_modules/@radix-ui/react-one-time-password-field": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.9.tgz", - "integrity": "sha512-fvCzA9hm7yN5xxTPJIi4VhSmH5gv+76ILsxguBK3cm3icD5BR4vW7POQmu8Zio0yh91uuouG/Kang40IbMkaSQ==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.10.tgz", + "integrity": "sha512-GHkcJ+WVj91At+OvUVTD4R3W0/wxw9t/sG5xFUBYXaCbtWiooZX5Md376QjJqgH4VsVyXrbVNHO2O4NYcmjfVg==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-is-hydrated": "0.1.1", @@ -6005,16 +5922,16 @@ } }, "node_modules/@radix-ui/react-password-toggle-field": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.4.tgz", - "integrity": "sha512-qoDSkObZ9faJlsjlwyBH6ia7kq9vaJ2QwWTowT3nQpzPvUTAKesmWuGJYpd91HIoJqS+5ZPXy5uFPp+HlwdaAg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.5.tgz", + "integrity": "sha512-fVuA82u0b/fClpbEJv8yp1nU9eSvoSEOERsU/hhf3FXGPIvkmE7oEaHEu8poowoXO39/Va7zq2E0TUcYr1dBRg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-is-hydrated": "0.1.1" @@ -6035,23 +5952,23 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.16.tgz", - "integrity": "sha512-8brVpAU5Uq7Bh0c8EFc4ZTf2JJTYn0o+1L+CUJB3UYIOkTjKGMgoHvduylrahdmNlr3DfH0rFq2DrbNZXgaspw==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.17.tgz", + "integrity": "sha512-/YSAOdJ7YJvdn7bn5sdSx2egW+SKY+u7O5RyAVs94Ymrg2fg5QTSFPMRkzvhGyFuE4/qsmPBdrwYoZMZh/4f+g==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.9", + "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" @@ -6072,16 +5989,16 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.0.tgz", - "integrity": "sha512-9PB589e1aWZbrlFUHdz6WiPCL+xLZHQFX7oibqG/6Q0SwOkxDyQX9W/cyPa+sAPPKuC8cpLCpRczE5a/1DiwVQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.1.tgz", + "integrity": "sha512-bhnq/0DEPTi2lsOD3J5rTL65qUKHbKbhqHsmN9TMiclSXpipi651ooUKPPp6G5lF/WiHBdn1s0Wuqsn+myVAvw==", "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.9", + "@radix-ui/react-arrow": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-rect": "1.1.2", @@ -6104,12 +6021,12 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.11.tgz", - "integrity": "sha512-UEytdjgEh2tJGgD/gZK4FUx6t1rNIlM3U0DENhSrG7I75FGm1DnaDuVUWF1pWAWUwGmn1sCJ1VGHn8LhN1aTOw==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.12.tgz", + "integrity": "sha512-m309havGzsjLHHaIX50G5PlvRs3xkgPCsGk/5PTvYm8D5q33yG0J7w/712PTOhid7NTaFETtnSXjngHQavvhVw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { @@ -6151,12 +6068,12 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.5.tgz", - "integrity": "sha512-zifXeB8Y88qCYx8PLZ5oQb32KwZub+s925mMoZsBBq9KUQqWKkREubTfs6ASjRPPBe7Jt9O8OHH89+95VG+grA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.6.tgz", + "integrity": "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.5" + "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", @@ -6174,13 +6091,13 @@ } }, "node_modules/@radix-ui/react-progress": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.9.tgz", - "integrity": "sha512-+EOkvg1Zn1vI1+fRDfRSAiJ7BWfcDAo5ASMmbqrcLZ4s4USk2FGkoHgeb2X+CkUgo2zJMiyObwf1k44CrRWsyw==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.10.tgz", + "integrity": "sha512-JYzEg60lk79PwKM27WZyKd7PW8O4OM5jOaFfRPfOyeXmMw7tLJh5kSj+CEjVTehszuwml/AdCzPGMXBTGf4BBw==", "license": "MIT", "dependencies": { "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -6198,9 +6115,9 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.0.tgz", - "integrity": "sha512-eHdV5bLx9sH+tBnbDjkIBdvQEH/c6MEtQYhTbxkaDK9qsIFFLtmJYEQFVdwhnruWotLfQmIuWEL/J+L3utE8rQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.1.tgz", + "integrity": "sha512-/SSxZdKEo2Eo29FFRKd06EfFDYp8HryKg0WYg7QLXaydPzl52YfSvCH2a3QDBRdtcuwACroJT8UVjQVgOJ7P9A==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", @@ -6208,8 +6125,8 @@ "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" @@ -6230,18 +6147,18 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.12.tgz", - "integrity": "sha512-FvgPt1bRmg8Xt2QpF7NUZW3dE0ZQHGm41dAdgT2J2GJPoIXz+9Em3NobAxf4fupcxhgHu03E5CRiU2MWvObXyg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.13.tgz", + "integrity": "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, @@ -6261,9 +6178,9 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.11.tgz", - "integrity": "sha512-DS39ziOgea75U/TrXKU2/oKp0be2jrDHnzFLvahg/0iNAT1Zq16e4Uw0WXwyXvsK+mG3BRyMb7A3NRZMDuEXtQ==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.12.tgz", + "integrity": "sha512-xuafVzQiTCLsyEjakowTdG3OgTXsmO7IdCiO77otIa+z44xoLNs9Do5eg7POFumIOCjtG6djfm6RKUKpUa/csA==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.2", @@ -6272,7 +6189,7 @@ "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2" }, @@ -6292,31 +6209,31 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.0.tgz", - "integrity": "sha512-mENc7WpJvJcW8hlMpzfFcHcEhTvYS5JMBmi9HVC1Q00uhBwML086MHYUV8QQdQv6lcu0Wg8dzd1RB8AFADcG/g==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.1.tgz", + "integrity": "sha512-w6eDvY78LE9ZUiNnXCA1QVK8RYN7k9galFv09kjVydJqBAgHd7Y9A6h0UJ/6DCZNGZMZrB2ohcSW1Bo9d8+wWA==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.9", + "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.5", + "@radix-ui/react-visually-hidden": "1.2.6", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, @@ -6336,12 +6253,12 @@ } }, "node_modules/@radix-ui/react-separator": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.9.tgz", - "integrity": "sha512-gvgW+JV/Mbjj6darztTetnmElpQEzZrXpJvfj+dOxNAxiyHEAyUvEjjl4zxblvmjmKmi3jfPoy7ZdxzCuUBJSA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.10.tgz", + "integrity": "sha512-Y6K6jLQCVfCnTL2MEtGxDLffkhNfEfHsEg3Wa8JU+IWdn3EWbLXd3OuOfQRN7p/W/cUce1WyTk3QeuAoDBzN9g==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -6359,18 +6276,18 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.0.tgz", - "integrity": "sha512-RHcPlLOThRJM51DSIC33ZnpDEBYhyEFroVWkd2P54PGGjkmAt14RboYUU9E1MFst666zFHM0tGtWvMjSOtU1pw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.1.tgz", + "integrity": "sha512-r91WSpQucNGFKAIxT8FT0H0zyjd5tJlqObLp7LOMV4z49KoDCwjy01w3vDOU4e1wxhF9IgjYco7SB6byOW7Buw==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", @@ -6392,9 +6309,9 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.5.tgz", - "integrity": "sha512-rCMO3QsIVKv5JTY5CVbo2MvO77SpEqqYc8AvRE7OWqRDOIqAKjsp+DrmnY9uc8NPdxB5E2z47HTYGeE2+NTptg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", + "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" @@ -6410,15 +6327,15 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.0.tgz", - "integrity": "sha512-GP1EZwhoZO/GGnhM1P5/2Vpm8iN8EnngyU0oezn2l78kN8tj25pyrvjIaT7azBhK615KSt+P2w39y57YV5jVkA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.1.tgz", + "integrity": "sha512-55bQtCnOB0BohomSHi6qvQXpJEEqUGDm6hRrM0Bph5OXwhSegqkd8IqgBAQkM1IlgUlWZIxpxRcpOEfRIgimyw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-use-size": "1.1.2" @@ -6439,9 +6356,9 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.14.tgz", - "integrity": "sha512-D5jwp9JNuwDeCw3CYD2Fz+sSHo0droQjC8u75dJHe4aWr5q6yBiXZU+hurXnKudRgEpUkD5TsI6bjHPo5ThUxA==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.15.tgz", + "integrity": "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", @@ -6449,8 +6366,8 @@ "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -6469,23 +6386,23 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.16.tgz", - "integrity": "sha512-WUymDDiN2DpoGudRN1aW4wF5O3BNQjZZO/5nngPoNiEVqjyOzirvZZNO0R6dC1ifucSINVaSv8JX1aq47VGgiA==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.17.tgz", + "integrity": "sha512-uL4kyyWy000pPL43fGGCV5qT6ZchCWEQZOSlkYiPwPt8Hy1iW38RjeptIvz1/SZesrW6Vn58Ct3sV7tfEfiAbw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.12", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.5" + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -6503,13 +6420,13 @@ } }, "node_modules/@radix-ui/react-toggle": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.11.tgz", - "integrity": "sha512-FikrKJemoBGZQ6uRID0HJqSPBP6D7OppdD2OhLl0ZYLlAyPXI7MezoYGmumwNkrAoRm35xXkb4C8JPfJZZzcaw==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.12.tgz", + "integrity": "sha512-AsAVsYNZIlRBsci7BhE+QyQeKd1h6TffJYt+lF0QQkd5OpQ3klfIByPsCb4G0h/Fq6PJwh1FYNluzBFYzhk4+w==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -6528,17 +6445,17 @@ } }, "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.12.tgz", - "integrity": "sha512-TEgECgJaWGAHJJZGzNNEYTNBdIXqX7LchANycpyP7DkfjmuiSN7ISt1k/ZRGVJgVJonsgP4vwaiKMn5utrcwWQ==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.13.tgz", + "integrity": "sha512-Xb9PLtlvU66F36LiKba6dFswu6V2mDkgidO4fNSbQHQwmZ9ObxMIO17MN/LJ4aWJecVuSVLAHPZjyeMzJrgeiA==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", - "@radix-ui/react-toggle": "1.1.11", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-toggle": "1.1.12", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { @@ -6557,18 +6474,18 @@ } }, "node_modules/@radix-ui/react-toolbar": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.12.tgz", - "integrity": "sha512-4wHtJVdIgqMmEwUvxA0BYg/2JMRbt0L3+8UD8Ml/nhKkfXtiZcM8u/S15gQ5xj9YEd/0qlrm5bE805LsjQ+J8A==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.13.tgz", + "integrity": "sha512-Za1l4f6fzTkGgz/iynAMN8iaqiKff2wm2/QwiLmHPtDQreWEBrvSimgQFIekxMUdRPhILM7xdIXxuS/o/DGZag==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-roving-focus": "1.1.12", - "@radix-ui/react-separator": "1.1.9", - "@radix-ui/react-toggle-group": "1.1.12" + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-separator": "1.1.10", + "@radix-ui/react-toggle-group": "1.1.13" }, "peerDependencies": { "@types/react": "*", @@ -6586,23 +6503,23 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.9.tgz", - "integrity": "sha512-u6F9MmTtBSLkiXNVDrtB/yPCZarM9smNswC24YYLV/M+bth6J3Gs3vlJezEoFwKZvPvxhCpUYdUnOsNG/0XOlA==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.10.tgz", + "integrity": "sha512-NlNe8D0dWEpVfXFli90IO6X07Josx/b1iu98tDnx9Xv0HT4wLIL+m2VOheMHhK7qbp2HoTBqALEFzGyZs/levw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-visually-hidden": "1.2.5" + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -6771,12 +6688,12 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.5.tgz", - "integrity": "sha512-tPcHNI3FajdDBFpl/Ez1m2WL0ufJqBKyHxMDBvKitopamK36WwBGOMicuMEZKkM5Wce41QxUyv6BsiqfrWBiGg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.6.tgz", + "integrity": "sha512-jCE0WljWifTI4niIMCll06kGpsJTAPiZVU9H4WR1N6qW7At9ystHbN7dDB+we2xH535roFHj7qKS+RGj0FMDWQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.5" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -7076,6 +6993,17 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", @@ -7162,26 +7090,6 @@ } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rollup/plugin-esm-shim": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/@rollup/plugin-esm-shim/-/plugin-esm-shim-0.1.8.tgz", @@ -7291,30 +7199,10 @@ } } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", - "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", + "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", "cpu": [ "arm" ], @@ -7325,9 +7213,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", - "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", + "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", "cpu": [ "arm64" ], @@ -7338,9 +7226,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", - "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", + "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", "cpu": [ "arm64" ], @@ -7351,9 +7239,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", - "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", + "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", "cpu": [ "x64" ], @@ -7364,9 +7252,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", - "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", + "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", "cpu": [ "arm64" ], @@ -7377,9 +7265,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", - "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", + "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", "cpu": [ "x64" ], @@ -7390,9 +7278,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", - "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", + "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", "cpu": [ "arm" ], @@ -7406,9 +7294,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", - "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", + "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", "cpu": [ "arm" ], @@ -7422,9 +7310,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", - "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", + "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", "cpu": [ "arm64" ], @@ -7438,9 +7326,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", - "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", + "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", "cpu": [ "arm64" ], @@ -7454,9 +7342,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", - "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", + "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", "cpu": [ "loong64" ], @@ -7470,9 +7358,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", - "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", + "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", "cpu": [ "loong64" ], @@ -7486,9 +7374,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", - "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", + "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", "cpu": [ "ppc64" ], @@ -7502,9 +7390,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", - "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", + "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", "cpu": [ "ppc64" ], @@ -7518,9 +7406,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", - "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", + "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", "cpu": [ "riscv64" ], @@ -7534,9 +7422,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", - "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", + "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", "cpu": [ "riscv64" ], @@ -7550,9 +7438,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", - "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", + "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", "cpu": [ "s390x" ], @@ -7566,9 +7454,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", - "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", + "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", "cpu": [ "x64" ], @@ -7582,9 +7470,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", - "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", + "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", "cpu": [ "x64" ], @@ -7598,9 +7486,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", - "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", + "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", "cpu": [ "x64" ], @@ -7611,9 +7499,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", - "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", + "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", "cpu": [ "arm64" ], @@ -7624,9 +7512,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", - "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", + "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", "cpu": [ "arm64" ], @@ -7637,9 +7525,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", - "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", + "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", "cpu": [ "ia32" ], @@ -7650,9 +7538,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", - "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", + "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", "cpu": [ "x64" ], @@ -7663,9 +7551,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", - "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", + "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", "cpu": [ "x64" ], @@ -7929,15 +7817,6 @@ "node": ">=8" } }, - "node_modules/@slack/web-api/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", @@ -8009,9 +7888,9 @@ } }, "node_modules/@supabase/auth-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.108.1.tgz", - "integrity": "sha512-Lle5rKU8f9LF3K5dDd8Or8mkkG+ptzRZZWKPVMm9B9UuovH65Ss2+iFnQqRsCqaGouvJEcTWyl0cj2riNrrDLQ==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.108.2.tgz", + "integrity": "sha512-tNaQmBgodDZwgB40mRwVbxFy8IDYwjdpcZ0BYrWiwlULCSQoJj4QoG4zgJT7QRPXcqipefNOzvO/qAu4dF98ag==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -8021,9 +7900,9 @@ } }, "node_modules/@supabase/functions-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.108.1.tgz", - "integrity": "sha512-fxBRW/A4IG7ADQztVt0NaEy5ysiO1WJ2pbldsnBchrkHuyepX0Krek9qA9T4gUQBVVTCE9Ea4pdsM5hfn3nc4A==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.108.2.tgz", + "integrity": "sha512-RNUX8EiBy3iLwAX19jtRzLyePnl11/fHcgwDHLnpKcDSXt/5qBnh3LUwAtIjT21Q66QsmNUR2esrHziLCpNubw==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -8033,15 +7912,15 @@ } }, "node_modules/@supabase/phoenix": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.2.tgz", - "integrity": "sha512-YSAGnmDAfuleFCVt3CeurQZAhxRfXWeZIIkwp7NhYzQ1UwW6ePSnzsFAiUm/mbCkfoCf70QQHKW/K6RKh52a4A==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.4.tgz", + "integrity": "sha512-Gt0pqoXuIqX/8dvG0OKp/wMCobXNH3klNbUPBNyOfN0YA1IswrM3HyWFMOPk1Jy+BRaIyDPcFx4jLBwHNmlyfQ==", "license": "MIT" }, "node_modules/@supabase/postgrest-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.108.1.tgz", - "integrity": "sha512-9lj2MCPPMgSTaJ5y+amnhb3TWPtMFVlbDn2hmX/VV91xQU4j0AauwfMaBErHBJ+zzsSwjc0jLU+zLIZFLQzfig==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.108.2.tgz", + "integrity": "sha512-GQ28/Y8hk3CFmkb3kXH1h/AQx6JIYSQfO0CJMRVBcEKZoNy6C45cXAZ4fcJvRC5Id0cs6xnkUV0+c0rIocigsw==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -8051,9 +7930,9 @@ } }, "node_modules/@supabase/realtime-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.108.1.tgz", - "integrity": "sha512-mHGGqOjwd1XTydcoffUqEMsbFQHUi6A3uhQ0EXr3iqzpLqItxKA9nbN6gIQxrZ7JRRnuUe/iOFPUkYV9Tdc5lg==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.108.2.tgz", + "integrity": "sha512-aAGxCSUemZvQIibnCdvNvgaKib28I4rfrNjKbQ9cG1uBLwUsI7hVpGXgEbypCCDhLjQlDTAiJlu7rgljYUT73g==", "license": "MIT", "dependencies": { "@supabase/phoenix": "^0.4.2", @@ -8075,23 +7954,10 @@ "@supabase/supabase-js": "^2.105.3" } }, - "node_modules/@supabase/ssr/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/@supabase/storage-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.108.1.tgz", - "integrity": "sha512-Er0SGGt85iT6ye+SSh98Az6L2CesoZJuyzEZYH2oBOAnIxa9Nn4CtwUC3veGxYggoT56X+3tVuuQeDBP8kR8sg==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.108.2.tgz", + "integrity": "sha512-TVZPQxXGxY2+A6yTtm77zUHsh70lBhYUEaJL8RQC+BghcX/ygiMG/rmXrNVBce30/WAeNPa8FiG8HbqlGeV05g==", "license": "MIT", "dependencies": { "iceberg-js": "^0.8.1", @@ -8102,16 +7968,16 @@ } }, "node_modules/@supabase/supabase-js": { - "version": "2.108.1", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.108.1.tgz", - "integrity": "sha512-V/1hRKLSCJ0zEL+9QFRBUtivvePfOsaAYQmC0HhFNSHC2F3xFs4jSF3YhkLmzex6E4V4FGvmBDOP72D/53NnZA==", + "version": "2.108.2", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.108.2.tgz", + "integrity": "sha512-hFhnPveb5JQg4a0QYicM0swT253YHMdfeRAl2BKHOlI5VAzuHxUGSr8RbwNLYNPauWOgQMS1H8sz8bvYlgwUfQ==", "license": "MIT", "dependencies": { - "@supabase/auth-js": "2.108.1", - "@supabase/functions-js": "2.108.1", - "@supabase/postgrest-js": "2.108.1", - "@supabase/realtime-js": "2.108.1", - "@supabase/storage-js": "2.108.1" + "@supabase/auth-js": "2.108.2", + "@supabase/functions-js": "2.108.2", + "@supabase/postgrest-js": "2.108.2", + "@supabase/realtime-js": "2.108.2", + "@supabase/storage-js": "2.108.2" }, "engines": { "node": ">=20.0.0" @@ -9007,16 +8873,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.8.tgz", - "integrity": "sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.8", - "@vitest/utils": "4.1.8", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -9025,13 +8891,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz", - "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.8", + "@vitest/spy": "4.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -9051,10 +8917,20 @@ } } }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/pretty-format": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz", - "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", "dev": true, "license": "MIT", "dependencies": { @@ -9065,13 +8941,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz", - "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.8", + "@vitest/utils": "4.1.9", "pathe": "^2.0.3" }, "funding": { @@ -9079,14 +8955,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz", - "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.8", - "@vitest/utils": "4.1.8", + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -9095,9 +8971,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz", - "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", "funding": { @@ -9105,13 +8981,13 @@ } }, "node_modules/@vitest/ui": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.8.tgz", - "integrity": "sha512-RUS2ZU2TsduVrI+9c12uTNaKrNUTsm6yFt3fueEUB9iKvyC2UP83F+sqIz00HQIah4UOL1TMoDAki8K0NjGvsA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.9.tgz", + "integrity": "sha512-U/cRvtqfEPj27FI1n9cyUvi4vXXdcLhjJiI+InYKdk8hP4VrS6RXOjGL7rfFaeBc37iRKANsR6eEzIoC7lmgBQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.8", + "@vitest/utils": "4.1.9", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", @@ -9123,17 +8999,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.1.8" + "vitest": "4.1.9" } }, "node_modules/@vitest/utils": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz", - "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.8", + "@vitest/pretty-format": "4.1.9", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -9339,14 +9215,14 @@ } }, "node_modules/ai": { - "version": "6.0.203", - "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.203.tgz", - "integrity": "sha512-2Qi1ZPGF/FnlvnRqntVgRbUYGeA5ZKFYwTtgu8rcUzMmddArM/nLsvCW69Ip99B1cop6XHRHl+GCKk9t9B+GDA==", + "version": "6.0.208", + "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.208.tgz", + "integrity": "sha512-STz+AaZqJ4ZjH7UkpXkbHx+bjgIDOsE8fIUoZjkZ2whoZcfVmG9K/TqEKouJZ03SuZuD7lagntlU3zBhAEkRpQ==", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/gateway": "3.0.129", + "@ai-sdk/gateway": "3.0.133", "@ai-sdk/provider": "3.0.10", - "@ai-sdk/provider-utils": "4.0.29", + "@ai-sdk/provider-utils": "4.0.30", "@opentelemetry/api": "^1.9.0" }, "engines": { @@ -9623,9 +9499,9 @@ } }, "node_modules/axios": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", - "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.0.tgz", + "integrity": "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.16.0", @@ -9784,9 +9660,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.37", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz", - "integrity": "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==", + "version": "2.10.38", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -9802,9 +9678,9 @@ "license": "Apache-2.0" }, "node_modules/better-sqlite3": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz", - "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==", + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz", + "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -9920,21 +9796,34 @@ } }, "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", + "content-type": "^2.0.0", "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -10374,9 +10263,9 @@ "license": "MIT" }, "node_modules/chat": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/chat/-/chat-4.30.0.tgz", - "integrity": "sha512-8LXrauKckMmR83FcYC/R8nNEda5VJDDdIhZwUUu+hzaSbk4lqsro0IWm7rB1GGYXONRrUOG2XJlkNr4C15vgMA==", + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/chat/-/chat-4.31.0.tgz", + "integrity": "sha512-F6oJq9JUraLFkITS96/NKgwZwBfZX8aOwOj5qMs5NNwnOGHrSXZ5+osK+EA4HjzfyUEDfFTNiOSmyzgtFLpuWg==", "license": "MIT", "dependencies": { "@workflow/serde": "4.1.0-beta.2", @@ -10612,56 +10501,27 @@ "node": ">=10.17.0" } }, - "node_modules/clipboardy/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "path-key": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clipboardy/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/clipboardy/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clipboardy/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clipboardy/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" @@ -11034,12 +10894,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cookie-signature": { @@ -12080,23 +11944,14 @@ } }, "node_modules/discord.js/node_modules/discord-api-types": { - "version": "0.38.48", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz", - "integrity": "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==", + "version": "0.38.49", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.49.tgz", + "integrity": "sha512-XnqcWmnFZFAE8ZM8SHAw9DIV8D3Or00rMQ8iQLotrEA2PmXhl+ykaf6L6q4l474hrSUH1JaYcv+iOMRWp2p6Tg==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" ] }, - "node_modules/discord.js/node_modules/undici": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", - "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -12105,9 +11960,9 @@ "license": "MIT" }, "node_modules/dompurify": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.10.tgz", - "integrity": "sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w==", + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", + "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -12202,9 +12057,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.372", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.372.tgz", - "integrity": "sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==", + "version": "1.5.375", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.375.tgz", + "integrity": "sha512-ZWP5eB4BVPW/ZYo9252hQZHZ5XavtsTgpbhcmMmRwymavC5AsLWQWBPaKMeNd2LW0KGby5HPXvj7+sr4ta5j/Q==", "devOptional": true, "license": "ISC" }, @@ -12271,39 +12126,18 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.5.tgz", - "integrity": "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==", + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.6.tgz", + "integrity": "sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", - "ws": "~8.20.1", + "ws": "~8.21.0", "xmlhttprequest-ssl": "~2.1.1" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", - "license": "MIT", - "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 - } - } - }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -12372,10 +12206,10 @@ } }, "node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", - "dev": true, + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "devOptional": true, "license": "MIT" }, "node_modules/es-object-atoms": { @@ -12558,6 +12392,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/estree-util-build-jsx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", @@ -12597,15 +12440,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/estree-util-to-js/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, "node_modules/estree-util-value-to-estree": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", @@ -12633,13 +12467,11 @@ } }, "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "devOptional": true, + "license": "MIT" }, "node_modules/etag": { "version": "1.8.1", @@ -12825,6 +12657,15 @@ "express": ">= 4.11" } }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/exsolve": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", @@ -13274,10 +13115,10 @@ "optional": true }, "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "devOptional": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -13285,7 +13126,7 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, "node_modules/fsevents": { @@ -13303,12 +13144,11 @@ } }, "node_modules/fumadocs-core": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.10.2.tgz", - "integrity": "sha512-7YMEkUYQYYey+8yzZW47jV3pbctCXsevFY6u4yN9PRwJi/q76QOFfefvzSkbYha3OIudr2C0RGzJxEhzV2a1/g==", + "version": "16.10.4", + "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.10.4.tgz", + "integrity": "sha512-YpS6i8QFGgnXfE90MjlNPNE0tW3v/kg0n34CTP1SREHrFaXiPlQXnaBRTpBVT1g5TCK43yK6bkpKkkT8Ji+P4w==", "license": "MIT", "dependencies": { - "@fuma-translate/react": "^1.0.2", "@orama/orama": "^3.1.18", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", @@ -13343,7 +13183,7 @@ "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-router": "7.x.x", + "react-router": "7.x.x || 8.x.x", "waku": "*", "zod": "4.x.x" }, @@ -13564,38 +13404,26 @@ } } }, - "node_modules/fumadocs-mdx/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/fumadocs-ui": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-16.10.2.tgz", - "integrity": "sha512-l8fYpahaLVA73XUktsjTdq6iwG6V0/UGAnN1uuCeVuV4ea/8RDduOo9CcMM62SCup0EnT1zEAk+FGFCdKQ4BhQ==", + "version": "16.10.4", + "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-16.10.4.tgz", + "integrity": "sha512-/PzeT0ml4V87ilvdf10O4/EjGMJe5qKLrN9dG6wKYxWvvZgZE9414E/36LHOf+vFmr40Shjnl6QpkHhlQYwtcw==", "license": "MIT", "dependencies": { "@fuma-translate/react": "^1.0.2", "@fumadocs/tailwind": "0.0.5", - "@radix-ui/react-accordion": "^1.2.13", - "@radix-ui/react-collapsible": "^1.1.13", - "@radix-ui/react-dialog": "^1.1.16", + "@radix-ui/react-accordion": "^1.2.14", + "@radix-ui/react-collapsible": "^1.1.14", + "@radix-ui/react-dialog": "^1.1.17", "@radix-ui/react-direction": "^1.1.2", - "@radix-ui/react-navigation-menu": "^1.2.15", - "@radix-ui/react-popover": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.16", + "@radix-ui/react-popover": "^1.1.17", "@radix-ui/react-presence": "^1.1.6", - "@radix-ui/react-scroll-area": "^1.2.11", - "@radix-ui/react-slot": "^1.2.5", - "@radix-ui/react-tabs": "^1.1.14", + "@radix-ui/react-scroll-area": "^1.2.12", + "@radix-ui/react-slot": "^1.3.0", + "@radix-ui/react-tabs": "^1.1.15", "class-variance-authority": "^0.7.1", - "lucide-react": "^1.17.0", + "lucide-react": "^1.20.0", "motion": "^12.40.0", "next-themes": "^0.4.6", "react-remove-scroll": "^2.7.2", @@ -13609,7 +13437,7 @@ "@takumi-rs/image-response": "*", "@types/mdx": "*", "@types/react": "*", - "fumadocs-core": "16.10.2", + "fumadocs-core": "16.10.4", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0" @@ -14141,6 +13969,16 @@ "uglify-js": "^3.1.4" } }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -14535,9 +14373,9 @@ "license": "MIT" }, "node_modules/hono": { - "version": "4.12.25", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.25.tgz", - "integrity": "sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==", + "version": "4.12.26", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.26.tgz", + "integrity": "sha512-uyZtpnYxM9CmQ7QsQknM4zN8EftNqhON1qYeIKM0Se67CCEe2c44xyGURwB0axX2fBDu1dqHrHAc1hmNT8ITkw==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -15113,16 +14951,29 @@ } }, "node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15263,6 +15114,16 @@ } } }, + "node_modules/jsdom/node_modules/undici": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -16070,9 +15931,9 @@ "license": "ISC" }, "node_modules/lucide-react": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.18.0.tgz", - "integrity": "sha512-LZDb7H/0YfM+RJncD0hDQRCAu+vSGODqpe35TuVI8EuXaRjkczbsx7p8dY4J87F/MUSj6bpYqeI8nw8qXaAdmA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.20.0.tgz", + "integrity": "sha512-jhXLeC/7m0/tjL1nzMdKk6x256zWA6AtbhTVreHOiKPoeX2d6MK4FbyIQPpVq0E6iPWBisyy1TW+pEge/uMEuQ==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -16235,34 +16096,6 @@ "node": ">=20" } }, - "node_modules/mastra/node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/mastra/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -16565,6 +16398,51 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-markdown-cjk-friendly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown-cjk-friendly/-/mdast-util-to-markdown-cjk-friendly-1.0.0.tgz", + "integrity": "sha512-BoaAm8mlJ+LAYz0Qs532Y3ciTuQYgBUPZcSFbvC/ZKmEMAKgulw84YvQK1gI34t/vL2euSfuaWlqczkTBgamkw==", + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^2.1.2", + "micromark-extension-cjk-friendly-util": "3.0.1", + "micromark-util-symbol": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/mdast": "*" + }, + "peerDependenciesMeta": { + "@types/mdast": { + "optional": true + } + } + }, + "node_modules/mdast-util-to-markdown-cjk-friendly-gfm-strikethrough": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown-cjk-friendly-gfm-strikethrough/-/mdast-util-to-markdown-cjk-friendly-gfm-strikethrough-1.0.0.tgz", + "integrity": "sha512-1ePVfB4P/vz3xSsm6H3D32r6VYGErxclnuLLFK02/2ReF+UdEKm7caulK6Vm0LBIp5gPRtB2Z1OYDznCkX3k2w==", + "license": "MIT", + "dependencies": { + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-to-markdown": "^2.1.2", + "micromark-extension-cjk-friendly-util": "3.0.1", + "micromark-util-symbol": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/mdast": "*" + }, + "peerDependenciesMeta": { + "@types/mdast": { + "optional": true + } + } + }, "node_modules/mdast-util-to-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", @@ -17502,6 +17380,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -17714,9 +17605,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.11.tgz", + "integrity": "sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==", "funding": [ { "type": "github", @@ -17725,10 +17616,10 @@ ], "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/napi-build-utils": { @@ -18134,9 +18025,9 @@ } }, "node_modules/openai": { - "version": "6.42.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-6.42.0.tgz", - "integrity": "sha512-1WFEt/uXMXOLhYRNkgJWo08Y2YNvNwpVU72K7ibrWgWpNOXd4VojXLbe6SQ4bLiUQ3Y8jz4IiyVkylJCL1DtZg==", + "version": "6.44.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.44.0.tgz", + "integrity": "sha512-09/gH+8jH0RgUwsgWHAaxsKGRT5zVZ95IaJUnqAWj6XejIBmnFRwq2WUIF37VtDEsmGrtPmvCs5+yBSeZGWvkA==", "license": "Apache-2.0", "peerDependencies": { "ws": "^8.18.0", @@ -18452,6 +18343,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/patch-package/node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -18468,19 +18374,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/patch-package/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/patch-package/node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -18661,13 +18554,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "devOptional": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -18728,18 +18620,6 @@ "pino-pretty": "bin.js" } }, - "node_modules/pino-pretty/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pino-std-serializers": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", @@ -18768,13 +18648,13 @@ } }, "node_modules/playwright": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", - "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz", + "integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.60.0" + "playwright-core": "1.61.0" }, "bin": { "playwright": "cli.js" @@ -18787,9 +18667,9 @@ } }, "node_modules/playwright-core": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", - "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz", + "integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -18850,6 +18730,24 @@ "dev": true, "license": "MIT" }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -18890,12 +18788,12 @@ } }, "node_modules/posthog-node": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.37.0.tgz", - "integrity": "sha512-wFwWGcqAqZ1WJRlNNYc92veV83d1lOQcP4Lq0q7Kar9GdZLPpiFYHeudyybYJnjZjkI9v06vLvY/Og5CZIfByg==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.38.0.tgz", + "integrity": "sha512-xEojUWq7ajYfsMPZIexG9xtvhewpqrPWvL/qRhnm8W3KVZi6BlXHe29tjywZJglrDwEQpqdtYKbRXyg2zF9MWw==", "license": "MIT", "dependencies": { - "@posthog/core": "^1.32.3" + "@posthog/core": "^1.33.0" }, "engines": { "node": "^20.20.0 || >=22.22.0" @@ -19018,6 +18916,16 @@ "signal-exit": "^3.0.2" } }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/proper-lockfile/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -19142,9 +19050,9 @@ } }, "node_modules/prosemirror-model": { - "version": "1.25.8", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.8.tgz", - "integrity": "sha512-BswA4BLSFEiORV6Vjj/yZBXDbos1zTEnhyeSSgT8psGFhstQS7UJ8/WOLiDos9Byaee27+tml0/DuMNxYR84zg==", + "version": "1.25.9", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.9.tgz", + "integrity": "sha512-pRTklkDDMMRopyoAcrr9wV/8g/RYgrLHBuJAb5hlEuYZRdm5yqmPjWId83fpBwPpSFqEdja0H7Dfd7z1X/npcA==", "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" @@ -19328,58 +19236,58 @@ "license": "MIT" }, "node_modules/radix-ui": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.5.0.tgz", - "integrity": "sha512-Nzh2HNpClgB31FBHRqt2xG8XNUfVfQRpf34hACC5PNrXTd5JdXdqOXwLs3BL+D8CNYiNQiJiT8QGr5Q4vq+00w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.6.0.tgz", + "integrity": "sha512-EUEC70O03EgxWMP5aoqfBZ6iLC5bczFagGy7zhSYRt8o5DP7IWNiP3ywetse3L9b8843ExB0OGWZvgbYVJuNeg==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-accessible-icon": "1.1.9", - "@radix-ui/react-accordion": "1.2.13", - "@radix-ui/react-alert-dialog": "1.1.16", - "@radix-ui/react-arrow": "1.1.9", - "@radix-ui/react-aspect-ratio": "1.1.9", - "@radix-ui/react-avatar": "1.1.12", - "@radix-ui/react-checkbox": "1.3.4", - "@radix-ui/react-collapsible": "1.1.13", - "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-accessible-icon": "1.1.10", + "@radix-ui/react-accordion": "1.2.14", + "@radix-ui/react-alert-dialog": "1.1.17", + "@radix-ui/react-arrow": "1.1.10", + "@radix-ui/react-aspect-ratio": "1.1.10", + "@radix-ui/react-avatar": "1.2.0", + "@radix-ui/react-checkbox": "1.3.5", + "@radix-ui/react-collapsible": "1.1.14", + "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-context-menu": "2.3.0", - "@radix-ui/react-dialog": "1.1.16", + "@radix-ui/react-context-menu": "2.3.1", + "@radix-ui/react-dialog": "1.1.17", "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.12", - "@radix-ui/react-dropdown-menu": "2.1.17", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-dropdown-menu": "2.1.18", "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.9", - "@radix-ui/react-form": "0.1.9", - "@radix-ui/react-hover-card": "1.1.16", - "@radix-ui/react-label": "2.1.9", - "@radix-ui/react-menu": "2.1.17", - "@radix-ui/react-menubar": "1.1.17", - "@radix-ui/react-navigation-menu": "1.2.15", - "@radix-ui/react-one-time-password-field": "0.1.9", - "@radix-ui/react-password-toggle-field": "0.1.4", - "@radix-ui/react-popover": "1.1.16", - "@radix-ui/react-popper": "1.3.0", - "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-focus-scope": "1.1.10", + "@radix-ui/react-form": "0.1.10", + "@radix-ui/react-hover-card": "1.1.17", + "@radix-ui/react-label": "2.1.10", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-menubar": "1.1.18", + "@radix-ui/react-navigation-menu": "1.2.16", + "@radix-ui/react-one-time-password-field": "0.1.10", + "@radix-ui/react-password-toggle-field": "0.1.5", + "@radix-ui/react-popover": "1.1.17", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.5", - "@radix-ui/react-progress": "1.1.9", - "@radix-ui/react-radio-group": "1.4.0", - "@radix-ui/react-roving-focus": "1.1.12", - "@radix-ui/react-scroll-area": "1.2.11", - "@radix-ui/react-select": "2.3.0", - "@radix-ui/react-separator": "1.1.9", - "@radix-ui/react-slider": "1.4.0", - "@radix-ui/react-slot": "1.2.5", - "@radix-ui/react-switch": "1.3.0", - "@radix-ui/react-tabs": "1.1.14", - "@radix-ui/react-toast": "1.2.16", - "@radix-ui/react-toggle": "1.1.11", - "@radix-ui/react-toggle-group": "1.1.12", - "@radix-ui/react-toolbar": "1.1.12", - "@radix-ui/react-tooltip": "1.2.9", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-progress": "1.1.10", + "@radix-ui/react-radio-group": "1.4.1", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-scroll-area": "1.2.12", + "@radix-ui/react-select": "2.3.1", + "@radix-ui/react-separator": "1.1.10", + "@radix-ui/react-slider": "1.4.1", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-switch": "1.3.1", + "@radix-ui/react-tabs": "1.1.15", + "@radix-ui/react-toast": "1.2.17", + "@radix-ui/react-toggle": "1.1.12", + "@radix-ui/react-toggle-group": "1.1.13", + "@radix-ui/react-toolbar": "1.1.13", + "@radix-ui/react-tooltip": "1.2.10", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-effect-event": "0.0.3", @@ -19387,7 +19295,7 @@ "@radix-ui/react-use-is-hydrated": "0.1.1", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-size": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.5" + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -19451,6 +19359,16 @@ "devOptional": true, "license": "ISC" }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "19.2.7", "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", @@ -19955,11 +19873,12 @@ } }, "node_modules/remark-cjk-friendly": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-cjk-friendly/-/remark-cjk-friendly-2.0.1.tgz", - "integrity": "sha512-6WwkoQyZf/4j5k53zdFYrR8Ca+UVn992jXdLUSBDZR4eBpFhKyVxmA4gUHra/5fesjGIxrDhHesNr/sVoiiysA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-cjk-friendly/-/remark-cjk-friendly-2.2.0.tgz", + "integrity": "sha512-tJ+FkYnE6I+rl6DIQEarJLwvATHPmIE88ac0NWZjB24WR7hdwowvnystZK+df4mC53x0OJEtiexlKbFn9Zz0hA==", "license": "MIT", "dependencies": { + "mdast-util-to-markdown-cjk-friendly": "1.0.0", "micromark-extension-cjk-friendly": "2.0.1" }, "engines": { @@ -19976,11 +19895,12 @@ } }, "node_modules/remark-cjk-friendly-gfm-strikethrough": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-cjk-friendly-gfm-strikethrough/-/remark-cjk-friendly-gfm-strikethrough-2.0.1.tgz", - "integrity": "sha512-pWKj25O2eLXIL1aBupayl1fKhco+Brw8qWUWJPVB9EBzbQNd7nGLj0nLmJpggWsGLR5j5y40PIdjxby9IEYTuA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-cjk-friendly-gfm-strikethrough/-/remark-cjk-friendly-gfm-strikethrough-2.2.0.tgz", + "integrity": "sha512-sj+Jobl4pUmaE539dxuEBntTgkafi/Adl816dBdbpzyPe3n3DceTYokXFGtwX2vjfR4wv8yFJSZac5VUDzjocw==", "license": "MIT", "dependencies": { + "mdast-util-to-markdown-cjk-friendly-gfm-strikethrough": "1.0.0", "micromark-extension-cjk-friendly-gfm-strikethrough": "2.0.1" }, "engines": { @@ -20173,10 +20093,9 @@ } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "license": "MIT", "engines": { "node": ">= 4" @@ -20248,9 +20167,9 @@ } }, "node_modules/rollup": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", - "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.0.tgz", + "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -20264,31 +20183,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.61.1", - "@rollup/rollup-android-arm64": "4.61.1", - "@rollup/rollup-darwin-arm64": "4.61.1", - "@rollup/rollup-darwin-x64": "4.61.1", - "@rollup/rollup-freebsd-arm64": "4.61.1", - "@rollup/rollup-freebsd-x64": "4.61.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", - "@rollup/rollup-linux-arm-musleabihf": "4.61.1", - "@rollup/rollup-linux-arm64-gnu": "4.61.1", - "@rollup/rollup-linux-arm64-musl": "4.61.1", - "@rollup/rollup-linux-loong64-gnu": "4.61.1", - "@rollup/rollup-linux-loong64-musl": "4.61.1", - "@rollup/rollup-linux-ppc64-gnu": "4.61.1", - "@rollup/rollup-linux-ppc64-musl": "4.61.1", - "@rollup/rollup-linux-riscv64-gnu": "4.61.1", - "@rollup/rollup-linux-riscv64-musl": "4.61.1", - "@rollup/rollup-linux-s390x-gnu": "4.61.1", - "@rollup/rollup-linux-x64-gnu": "4.61.1", - "@rollup/rollup-linux-x64-musl": "4.61.1", - "@rollup/rollup-openbsd-x64": "4.61.1", - "@rollup/rollup-openharmony-arm64": "4.61.1", - "@rollup/rollup-win32-arm64-msvc": "4.61.1", - "@rollup/rollup-win32-ia32-msvc": "4.61.1", - "@rollup/rollup-win32-x64-gnu": "4.61.1", - "@rollup/rollup-win32-x64-msvc": "4.61.1", + "@rollup/rollup-android-arm-eabi": "4.62.0", + "@rollup/rollup-android-arm64": "4.62.0", + "@rollup/rollup-darwin-arm64": "4.62.0", + "@rollup/rollup-darwin-x64": "4.62.0", + "@rollup/rollup-freebsd-arm64": "4.62.0", + "@rollup/rollup-freebsd-x64": "4.62.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", + "@rollup/rollup-linux-arm-musleabihf": "4.62.0", + "@rollup/rollup-linux-arm64-gnu": "4.62.0", + "@rollup/rollup-linux-arm64-musl": "4.62.0", + "@rollup/rollup-linux-loong64-gnu": "4.62.0", + "@rollup/rollup-linux-loong64-musl": "4.62.0", + "@rollup/rollup-linux-ppc64-gnu": "4.62.0", + "@rollup/rollup-linux-ppc64-musl": "4.62.0", + "@rollup/rollup-linux-riscv64-gnu": "4.62.0", + "@rollup/rollup-linux-riscv64-musl": "4.62.0", + "@rollup/rollup-linux-s390x-gnu": "4.62.0", + "@rollup/rollup-linux-x64-gnu": "4.62.0", + "@rollup/rollup-linux-x64-musl": "4.62.0", + "@rollup/rollup-openbsd-x64": "4.62.0", + "@rollup/rollup-openharmony-arm64": "4.62.0", + "@rollup/rollup-win32-arm64-msvc": "4.62.0", + "@rollup/rollup-win32-ia32-msvc": "4.62.0", + "@rollup/rollup-win32-x64-gnu": "4.62.0", + "@rollup/rollup-win32-x64-msvc": "4.62.0", "fsevents": "~2.3.2" } }, @@ -20312,13 +20231,6 @@ "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, - "node_modules/rollup-plugin-esbuild/node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "devOptional": true, - "license": "MIT" - }, "node_modules/rope-sequence": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", @@ -21075,13 +20987,12 @@ } }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, "node_modules/source-map-js": { @@ -21104,6 +21015,16 @@ "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -21415,13 +21336,15 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "devOptional": true, + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/stubborn-fs": { @@ -21758,18 +21681,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinyrainbow": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", @@ -21781,22 +21692,22 @@ } }, "node_modules/tldts": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.2.tgz", - "integrity": "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.3.tgz", + "integrity": "sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.2" + "tldts-core": "^7.4.3" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.2.tgz", - "integrity": "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.3.tgz", + "integrity": "sha512-27ep5H9PzdBrNd5OFM/j3WCU8F3kPwM9D0BOaOf7uYfxMJfyr0K5Tjj69Gri+sZlh2WXd5buIm47NuPF29CDiw==", "dev": true, "license": "MIT" }, @@ -22095,13 +22006,12 @@ } }, "node_modules/undici": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.2.tgz", - "integrity": "sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==", - "dev": true, + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", + "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", "license": "MIT", "engines": { - "node": ">=20.18.1" + "node": ">=18.17" } }, "node_modules/undici-types": { @@ -22298,19 +22208,6 @@ "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/unplugin-utils/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -22664,33 +22561,20 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vitest": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.8.tgz", - "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.8", - "@vitest/mocker": "4.1.8", - "@vitest/pretty-format": "4.1.8", - "@vitest/runner": "4.1.8", - "@vitest/snapshot": "4.1.8", - "@vitest/spy": "4.1.8", - "@vitest/utils": "4.1.8", + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@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.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -22718,12 +22602,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.8", - "@vitest/browser-preview": "4.1.8", - "@vitest/browser-webdriverio": "4.1.8", - "@vitest/coverage-istanbul": "4.1.8", - "@vitest/coverage-v8": "4.1.8", - "@vitest/ui": "4.1.8", + "@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" @@ -22767,18 +22651,12 @@ } } }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "node_modules/vitest/node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "license": "MIT" }, "node_modules/w3c-keyname": { "version": "2.2.8", @@ -23072,6 +22950,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -23233,9 +23127,9 @@ } }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -23351,15 +23245,6 @@ "zod": "4.3.6" } }, - "packages/agents/node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "packages/web": { "name": "@foreman/web", "version": "0.1.0", @@ -23442,28 +23327,14 @@ } }, "packages/web/node_modules/@types/node": { - "version": "22.19.17", + "version": "22.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.21.tgz", + "integrity": "sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } - }, - "packages/web/node_modules/nanoid": { - "version": "5.1.11", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } } } } diff --git a/package.json b/package.json index e0abb3d8..3fa7989e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "overrides": { "esbuild": ">=0.25.0", - "zod": "4.4.3", + "zod": "4.3.6", "postcss": "^8.5.10", "@mastra/core": "1.42.0-alpha.3" },