diff --git a/docs/MEMORY-INTEGRATION.md b/docs/MEMORY-INTEGRATION.md index 75c755f..901f1f8 100644 --- a/docs/MEMORY-INTEGRATION.md +++ b/docs/MEMORY-INTEGRATION.md @@ -1,1002 +1,355 @@ -# OpenZosma Agent Memory System +# Memory Integration -Technical reference for how agent memory works in OpenZosma. Covers every layer from the -Kubernetes pod filesystem through the pi extension hooks to the LLM context window. +Technical plan to wire `@openzosma/zosma-mem` into the agent session lifecycle so +memories persist and are recalled across conversations. -Last updated: 2026-03-24 +Last updated: 2026-04-09 --- -## Table of Contents - -1. [Architecture Overview](#1-architecture-overview) -2. [Package Map](#2-package-map) -3. [Memory Classification](#3-memory-classification) -4. [Filesystem Layout](#4-filesystem-layout) -5. [Bootstrap Sequence](#5-bootstrap-sequence) -6. [Pi Extension: pi-memory](#6-pi-extension-pi-memory) -7. [Pi Extension: pi-extension-observational-memory](#7-pi-extension-pi-extension-observational-memory) -8. [Orchestration Package: @openzosma/memory](#8-orchestration-package-openzosmamemory) -9. [Agent Integration: @openzosma/agents](#9-agent-integration-openzosmaagents) -10. [K3s Pod Lifecycle and Persistence](#10-k3s-pod-lifecycle-and-persistence) -11. [Context Window Flow](#11-context-window-flow) -12. [Tools Available to the Agent](#12-tools-available-to-the-agent) -13. [Search and Retrieval (qmd)](#13-search-and-retrieval-qmd) -14. [Compaction and Observation](#14-compaction-and-observation) -15. [Configuration Reference](#15-configuration-reference) -16. [Failure Modes and Degraded Operation](#16-failure-modes-and-degraded-operation) -17. [What This System Does Not Do](#17-what-this-system-does-not-do) +## Problem ---- - -## 1. Architecture Overview - -The memory system is **filesystem-native**. All memory state lives inside the agent's sandbox -pod as plain markdown and JSON files. There are no database tables, no Valkey keys, and no -external services involved in memory storage or retrieval. - -Three packages collaborate: - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Agent Pod (K3s) │ -│ │ -│ ┌─────────────────────────────────────────────────────────┐ │ -│ │ pi-coding-agent session │ │ -│ │ │ │ -│ │ ┌──────────────┐ ┌──────────────────────────────┐ │ │ -│ │ │ pi-memory │ │ pi-extension-observational- │ │ │ -│ │ │ (extension) │ │ memory (extension) │ │ │ -│ │ │ │ │ │ │ │ -│ │ │ Storage │ │ Compaction │ │ │ -│ │ │ Retrieval │ │ Observer/Reflector │ │ │ -│ │ │ Injection │ │ Auto-GC │ │ │ -│ │ │ Tools │ │ Priority tagging │ │ │ -│ │ └──────┬───────┘ └──────────────┬───────────────┘ │ │ -│ │ │ │ │ │ -│ │ └─────────┬─────────────────┘ │ │ -│ │ │ │ │ -│ │ ┌─────────▼─────────┐ │ │ -│ │ │ Filesystem (PV) │ │ │ -│ │ │ .pi/agent/memory │ │ │ -│ │ └───────────────────┘ │ │ -│ └─────────────────────────────────────────────────────────┘ │ -│ │ -│ ┌─────────────────────────────────────────────────────────┐ │ -│ │ @openzosma/memory (bootstrap, config, env) │ │ -│ │ @openzosma/agents (wires everything together) │ │ -│ └─────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ -``` - -**Key principle:** It orchestrates two -proven pi extensions and configures them for the pod environment. The extensions register -their own tools, hooks, and context injection. The orchestration layer only resolves paths -and sets environment variables. - ---- - -## 2. Package Map - -| Package | Type | Role | Owns | -|---|---|---|---| -| `pi-memory` | pi extension (npm) | Storage, retrieval, injection, tools | MEMORY.md, daily logs, scratchpad, qmd integration | -| `pi-extension-observational-memory` | pi extension (npm) | Compaction strategy, observer/reflector | Observation summaries, auto-GC, priority tagging | -| `@openzosma/memory` | workspace package | Bootstrap + config | Environment variables, extension path resolution | -| `@openzosma/agents` | workspace package | Agent session lifecycle | Wires memory extensions into pi session | - -### Dependency chain - -``` -@openzosma/agents - └── @openzosma/memory - ├── pi-memory - │ ├── @mariozechner/pi-ai - │ └── @mariozechner/pi-coding-agent - └── pi-extension-observational-memory - ├── @mariozechner/pi-ai - └── @mariozechner/pi-coding-agent -``` - ---- - -## 3. Memory Classification - -The system implements four categories of memory, each managed by different components: - -### Long-term memory (MEMORY.md) - -**Owner:** pi-memory -**File:** `.pi/agent/memory/MEMORY.md` -**Lifecycle:** Persists across sessions via PV. Never automatically pruned. -**Purpose:** Durable facts, decisions, preferences, and constraints. - -```markdown - -#decision [[database-choice]] Chose PostgreSQL for all backend services. No ORM. - - -#preference [[editor]] User prefers Neovim with LazyVim config. -``` - -Written explicitly by the agent via the `memory_write` tool when it identifies something -worth remembering. Uses `#tags` and `[[wikilinks]]` for retrieval. - -### Episodic memory (daily logs) - -**Owner:** pi-memory -**File:** `.pi/agent/memory/daily/YYYY-MM-DD.md` -**Lifecycle:** One file per calendar day. Persists across sessions. Never pruned. -**Purpose:** Running narrative of what happened during work. Captures context flow. - -Written to in three ways: -1. Agent calls `memory_write` with `target: "daily"` during execution -2. **Session handoff** — pi-memory auto-captures open scratchpad items + recent daily log - context to the daily file before each compaction (`session_before_compact` hook) -3. **Exit summary** — pi-memory generates an LLM summary of the session and appends it - to the daily file on `session_shutdown` - -Today's and yesterday's daily logs are loaded into context at every turn. - -### Working memory (scratchpad) - -**Owner:** pi-memory -**File:** `.pi/agent/memory/SCRATCHPAD.md` -**Lifecycle:** Persists across sessions. Items are manually checked off or cleared. -**Purpose:** Short-term task tracking. "Fix this later" items. - -```markdown -- [ ] Fix the type error in gateway auth middleware -- [x] Add session creation endpoint -- [ ] Write tests for memory bootstrap -``` - -Managed via the `scratchpad` tool (add, done, undo, clear actions). -Open items are injected into context every turn and captured during compaction handoffs. - -### Observational memory (compaction summaries) - -**Owner:** pi-extension-observational-memory -**Storage:** In-memory session entries (not written to filesystem) -**Lifecycle:** Lives only within the current session's context window. -**Purpose:** Compressed representation of conversation history for long sessions. - -```markdown -## Observations -Date: 2026-03-23 -- 🔴 User requires PostgreSQL — no ORM, raw SQL only -- 🟡 Working on gateway session endpoint, Hono framework -- 🟢 Prefers concise commit messages - -## Open Threads -- Session creation endpoint needs auth middleware - -## Next Action Bias -1. Implement auth middleware for gateway routes -``` - -Created by the observational-memory extension when it replaces pi's default compaction. -Priority-tagged (🔴 critical, 🟡 important, 🟢 informational) with a reflector pass -that deduplicates and prunes when observations grow too large. - -### Summary: memory classification matrix - -| Type | Files | Written by | Injected into context | Survives session end | Survives pod restart | Crosses conversations | -|---|---|---|---|---|---|---| -| Long-term | MEMORY.md | Agent via `memory_write` | Yes (every turn) | Yes | Yes (PV) | Yes | -| Episodic | daily/YYYY-MM-DD.md | Agent + auto-handoff + exit summary | Today + yesterday | Yes | Yes (PV) | Yes | -| Working | SCRATCHPAD.md | Agent via `scratchpad` | Yes (open items) | Yes | Yes (PV) | Yes | -| Observational | Session entries | Observational-memory extension | Yes (as compaction) | No | No | No | -| Conversation | In-memory messages | pi SessionManager | Yes (raw tail) | No | No | No | +The zosma-mem package has a fully working memory engine (ingest, retrieve, salience +scoring, co-access graph, GC, versioned entity store). But **nothing calls it**. -### Cross-conversation boundary rules +- `bootstrapMemory()` sets `PI_MEMORY_DIR` but no extension reads it +- The old extensions (`pi-memory`, `pi-extension-observational-memory`) were removed + but never replaced +- The new packages (`pi-brain`, `pi-dcp`) referenced in `NEW-MEMORY-INTEGRATION.md` + were never installed or integrated +- No code ingests facts from conversations into the engine +- No code retrieves memories at session start and injects them into context +- `systemPromptSuffix` is computed in session-manager.ts but never consumed by pi.agent.ts -All memory types stored in the shared `memoryDir` (MEMORY.md, SCRATCHPAD.md, daily logs) -are **intentionally shared across conversations** that use the same agent configuration. -This is by design: - -- **Long-term memory** carries forward curated facts, decisions, and user preferences. - A new conversation inherits everything the agent has learned so far. -- **Episodic logs** carry forward the daily narrative. A new conversation started on the - same day sees earlier entries from that day plus yesterday. -- **Working memory (scratchpad)** carries forward open TODO items. A task added in one - conversation remains visible in the next. This acts as a cross-conversation task list - for the agent — unfinished work is not forgotten when the user starts a new thread. - -The following are **not shared** across conversations: - -- **Observational memory** (compaction summaries with priority-tagged bullets) exists only - in the pi session's in-memory entries. It dies when the session ends. A new conversation - starts with a clean observation slate. -- **Raw conversation history** (the actual messages and tool calls) lives in - `SessionManager.inMemory()` within the pi SDK. It is never written to disk and is - garbage collected when the session object is released. - -This means a new conversation thread gets the agent's accumulated knowledge but not -the dialogue or reasoning context from previous threads. The agent knows *what* it -learned, but not *how* the previous conversation went. +Result: the agent is stateless across conversations. It cannot remember anything. --- -## 4. Filesystem Layout +## Current State -Memory files are stored in a **stable directory that persists across conversations**. -The gateway derives the memory path from the agent configuration ID, not the session ID: +### What exists and works -``` -workspace/ # OPENZOSMA_WORKSPACE root -├── agents/ -│ ├── / # Stable per-agent-config directory -│ │ └── memory/ # PI_MEMORY_DIR for this config -│ │ ├── MEMORY.md # Long-term curated memory -│ │ ├── SCRATCHPAD.md # Working checklist -│ │ └── daily/ -│ │ ├── 2026-03-21.md -│ │ ├── 2026-03-22.md -│ │ └── 2026-03-23.md -│ └── default/ # Fallback when no agentConfigId -│ └── memory/ -│ ├── MEMORY.md -│ └── ... -└── sessions/ - ├── / # Per-session workspace (ephemeral work) - └── / -``` +| Component | Status | +|---|---| +| `packages/zosma-mem/src/engine/` | Working — factory, salience, reinforcement | +| `packages/zosma-mem/src/store/` | Working — EntityStore (file-based), co-access graph | +| `packages/zosma-mem/src/retrieval/` | Working — attention-scored retrieval with co-access boost | +| `packages/zosma-mem/src/ingestion/` | Working — event ingestion with salience threshold | +| `packages/zosma-mem/src/gc/` | Working — decay, pruning, version compaction | +| Stable memoryDir per agent config | Working — gateway session-manager.ts computes it | +| Memory dir creation | Working — mkdirSync in session-manager.ts | -The critical design decision: **sessions are ephemeral, memory is not.** Each new -conversation creates a fresh session directory under `sessions/`, but all sessions -that share an agent config point to the same memory directory under `agents/`. +### What is missing -The path is controlled by the `PI_MEMORY_DIR` environment variable, which -`@openzosma/memory` sets during bootstrap. The gateway's `SessionManager` computes -the stable path and passes it as `memoryDir` through `AgentSessionOpts`. +| Component | Status | +|---|---| +| `pi-brain` (npm) | Not installed. Needed for structured memory entities | +| `pi-dcp` (npm) | Not installed. Needed for dynamic context pruning / GC | +| Ingestion hook | Missing. Nothing extracts facts from conversations | +| Retrieval-at-session-start | Missing. Nothing loads memories into context | +| Reinforcement tracking | Missing. No read/ignore/decision signals from agent | +| systemPromptSuffix wiring | Bug. Computed but never passed to pi.agent.ts | --- -## 5. Bootstrap Sequence - -When a user sends their first message, the gateway's `SessionManager` creates a session -and computes a stable memory directory. `PiAgentSession` in `@openzosma/agents` then -bootstraps the pi-coding-agent session with that directory: - -``` -SessionManager.createSession() (@openzosma/gateway) -│ -├── Compute stable memoryDir: -│ workspace/agents//memory/ (or agents/default/memory/) -│ mkdirSync(memoryDir, { recursive: true }) -│ -├── Acquire initLock (serializes concurrent session init) -│ -└── provider.createSession({ workspaceDir: sessionDir, memoryDir, ... }) - │ - PiAgentSession constructor (@openzosma/agents) - │ - ├── 1. bootstrapMemory({ workspaceDir, memoryDir }) (@openzosma/memory) - │ ├── Sets process.env.PI_MEMORY_DIR = memoryDir - │ ├── Sets process.env.PI_MEMORY_QMD_UPDATE (if configured) - │ ├── Sets process.env.PI_MEMORY_NO_SEARCH (if configured) - │ ├── Resolves pi-memory/index.ts path (via createRequire) - │ ├── Resolves pi-extension-observational-memory/index.ts path - │ └── Returns { paths: [piMemPath, obsMemPath], memoryDir } - │ - ├── 2. bootstrapPiExtensions() (@openzosma/agents) - │ └── Returns existing extension paths (web-access, subagents, guardrails) - │ - ├── 3. new DefaultResourceLoader({ (pi-coding-agent) - │ additionalExtensionPaths: [ - │ ...extensionPaths, # web-access, subagents, guardrails - │ ...memoryResult.paths, # pi-memory, observational-memory - │ ] - │ }) - │ - ├── 4. resourceLoader.reload() - │ └── jiti loads each extension .ts file at runtime (moduleCache: false) - │ ├── pi-memory default export called with (pi: ExtensionAPI) - │ │ ├── Registers session_start hook - │ │ ├── Registers session_shutdown hook - │ │ ├── Registers before_agent_start hook - │ │ ├── Registers session_before_compact hook - │ │ ├── Registers input hook - │ │ ├── Registers tools: memory_write, memory_read, scratchpad, memory_search - │ │ └── pi-memory reads PI_MEMORY_DIR from env (fresh per jiti load) - │ │ - │ └── observational-memory default export called with (pi: ExtensionAPI) - │ ├── Registers session_start hook (reads flags) - │ ├── Registers agent_end hook (auto-compaction trigger) - │ ├── Registers session_before_compact hook (observer) - │ ├── Registers session_before_tree hook (branch summarizer) - │ ├── Registers session_compact hook (cleanup) - │ ├── Registers commands: obs-memory-status, obs-reflect, etc. - │ └── Registers shortcut: ctrl+shift+o (status overlay) - │ - └── 5. createAgentSession({ ... }) (pi-coding-agent) - └── Session created, hooks are now active - -SessionManager releases initLock (100ms after constructor) +## Architecture (Target) + +``` +┌────────────────────────────────────────────────────────────────────┐ +│ Agent Session │ +│ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ +│ │ pi-brain │ │ pi-dcp │ │ zosma-mem │ │ +│ │ (pi extension) │ │ (pi extension) │ │ engine │ │ +│ │ │ │ │ │ │ │ +│ │ Structured │ │ Context pruning │ │ Salience │ │ +│ │ memory entities │ │ Token management │ │ Retrieval │ │ +│ │ Versioning │ │ GC scheduling │ │ Co-access │ │ +│ │ pi hooks/tools │ │ │ │ Reinforcement │ │ +│ └────────┬──────────┘ └──────────────────┘ └────────┬────────┘ │ +│ │ │ │ +│ └─────────────── zosma-mem-bridge ────────────┘ │ +│ (new integration layer) │ +│ │ +│ ┌──────────────────────────────────────────────────────────────┐ │ +│ │ Filesystem: workspace/agents//memory/ │ │ +│ │ ├── .salience/*.yaml │ │ +│ │ ├── .salience/archive/ │ │ +│ │ ├── .salience/co-access │ │ +│ │ └── (pi-brain managed files) │ │ +│ └──────────────────────────────────────────────────────────────┘ │ +└────────────────────────────────────────────────────────────────────┘ ``` -**Concurrency note:** The `initLock` in `SessionManager` ensures that `PI_MEMORY_DIR` -set by one session's `bootstrapMemory()` is not overwritten by another concurrent -session before jiti reads it. jiti uses `moduleCache: false`, so each load gets a -fresh module instance that reads the env var at that moment. - --- -## 6. Pi Extension: pi-memory - -**Package:** `pi-memory@0.3.6` -**Entry:** `index.ts` (single-file extension, ~1400 lines) -**Source:** npm published package - -### What it does - -pi-memory is the **storage and retrieval layer**. It owns all filesystem operations, -provides tools for the agent to read/write memory, injects memory context into every turn, -and manages the qmd search integration. - -### Hooks registered - -| Hook | When it fires | What pi-memory does | -|---|---|---| -| `session_start` | Session created | Creates memory directories. Detects qmd. Auto-creates qmd collection. Starts background qmd update timer. | -| `before_agent_start` | Before every agent turn | Builds memory context (MEMORY.md + scratchpad + daily logs + search results). Appends to system prompt. | -| `session_before_compact` | Before context compaction | Writes session handoff (open scratchpad items + recent daily log tail) to today's daily file. | -| `session_shutdown` | Session ending | Generates LLM exit summary of the session. Appends to today's daily file. Runs final qmd update. Cleans up timers. | -| `input` | User types input | Detects `/quit` to set exit summary reason. | - -### Tools registered - -| Tool | Purpose | Parameters | -|---|---|---| -| `memory_write` | Write to MEMORY.md or daily log | `target` (memory/daily), `content`, optional `tags` | -| `memory_read` | Read a memory file or list daily logs | `target` (memory/scratchpad/daily/list) | -| `scratchpad` | Manage checklist | `action` (add/done/undo/clear), `text` | -| `memory_search` | Search across all memory files via qmd | `query`, `mode` (keyword/semantic/deep) | - -### Context injection (before_agent_start) +## Integration Steps -Every agent turn, pi-memory appends a `## Memory` section to the system prompt containing: +### Step 1: Install missing npm packages -1. **Scratchpad** — open (unchecked) items from SCRATCHPAD.md -2. **Today's daily log** — full content of `daily/YYYY-MM-DD.md` for today -3. **Search results** — qmd semantic/keyword search against the user's prompt (if qmd available and `PI_MEMORY_NO_SEARCH` not set) -4. **MEMORY.md** — full curated long-term memory content -5. **Yesterday's daily log** — full content of yesterday's file +Install `pi-brain` and `pi-dcp` as dependencies of `@openzosma/zosma-mem`: -Priority order: scratchpad > today > search > MEMORY.md > yesterday. If total content -exceeds token limits, lower-priority items are truncated. - -The injection also includes usage instructions telling the agent how to use each tool -and when to write memories. - -### Exit summary (session_shutdown) - -When a session ends, pi-memory asks the active LLM model to generate a summary of the -conversation. The summary is formatted and appended to today's daily log: - -```markdown - -## Exit Summary - -Built the memory integration for OpenZosma. Created @openzosma/memory package -as orchestration layer. Wired pi-memory and observational-memory extensions -into the agent session. All tests passing. -``` - -If the model call fails, a fallback text-only summary is generated from available context. - -### Session handoff (session_before_compact) - -Before every compaction, pi-memory captures a snapshot to the daily log: - -```markdown - -## Session Handoff - -**Open scratchpad items:** -- [ ] Fix the type error in gateway auth middleware -- [ ] Write tests for memory bootstrap - -**Recent daily log context:** -(last 15 lines of today's daily log) +```bash +cd packages/zosma-mem +pnpm add pi-brain pi-dcp ``` -This ensures that even if observational-memory's compaction loses some detail, the raw -facts are preserved on disk in the daily log. +Verify both packages export a default pi extension function. Check their `index.ts` +entry points in `node_modules/` for the hooks they register and any configuration +they expect. --- -## 7. Pi Extension: pi-extension-observational-memory - -**Package:** `pi-extension-observational-memory@0.1.3` -**Entry:** `index.ts` + `overlay.ts` (TUI status overlay) -**Source:** npm published package - -### What it does - -This extension **replaces pi's default compaction** with an observational memory strategy. -Instead of generic summarization, it produces structured observation logs with priority -tagging and runs a reflector garbage collector when observations grow large. - -### How it relates to pi-memory - -These two extensions serve **different purposes** and do **not conflict**: +### Step 2: Create the bridge package -- **pi-memory** writes the handoff entry to disk, then returns from `session_before_compact` - without a compaction result (returns `undefined`). -- **observational-memory** generates the actual compaction summary and returns a - `CompactionResult` object that replaces pi's default compaction. +Create `packages/zosma-mem/src/bridge/` — the integration layer between the zosma-mem +engine and the pi extension system. -The pi extension system calls all registered hooks in order. pi-memory runs first (writes -handoff to disk, returns `undefined`), then observational-memory runs (generates summary, -returns `{ compaction }`). +#### File: `packages/zosma-mem/src/bridge/index.ts` -### Observer/Reflector two-threshold model +Exports: +- `createMemoryBridge(config: BridgeConfig): MemoryBridge` +- `resolveMemoryExtensionPaths(): { paths: string[], missing: string[] }` -The system uses two thresholds to manage memory pressure: +#### Interface: `BridgeConfig` +```ts +interface BridgeConfig { + memoryDir: string // Stable per-agent-config directory + salienceThreshold?: number // Min salience to persist (default from engine) + topK?: number // How many memories to retrieve (default: 8) +} ``` -Raw conversation tokens (growing) - │ - │ ... agent turns accumulate ... - │ - ├── Observer threshold (default 30k tokens + 8k retain buffer = 38k activation) - │ └── Triggers auto-compaction - │ └── Conversation serialized → LLM → observational summary - │ └── Priority-tagged bullets (🔴/🟡/🟢) - │ - │ ... more turns, observations accumulate ... - │ - └── Reflector threshold (default 40k observation-block tokens) - └── Triggers reflector GC on next compaction - ├── Deduplicate observations by normalized key - ├── Priority-aware pruning (🔴: max 96, 🟡: max 40, 🟢: max 16) - └── Preserve highest-priority, most-recent observations -``` - -### Observer modes - -| Mode | Behavior | -|---|---| -| `buffered` (default) | Auto-compaction triggers in background on `agent_end`. Non-blocking. | -| `blocking` | Auto-compaction disabled. Only manual or regular compaction runs. | -### Observation summary format +#### Interface: `MemoryBridge` -Every compaction produces a summary in this exact structure: +```ts +interface MemoryBridge { + /** Called before each turn. Returns memory context string for injection. */ + loadContext: (userMessage: string) => Promise -```markdown -## Observations -Date: 2026-03-23 -- 🔴 critical constraint or blocker -- 🟡 important evolving context -- 🟢 low-priority informational note + /** Called after each turn. Extracts and ingests memorable facts. */ + ingestFacts: (facts: ExtractedFact[]) => Promise -## Open Threads -- unfinished work item -- (none) + /** Called when agent uses a retrieved memory. Reinforcement signal. */ + recordUsage: (entityId: string, signal: "used" | "ignored" | "influenced_decision") => Promise -## Next Action Bias -1. most likely immediate next action -2. optional second action + /** Run GC. Called on session end. */ + gc: () => Promise - -packages/gateway/src/routes/sessions.ts - + /** Shutdown — clear timers, flush state. */ + shutdown: () => void - -packages/gateway/src/routes/sessions.ts -packages/auth/src/middleware.ts - + /** Return all entity IDs (for testing). */ + listEntityIds: () => Promise +} ``` -File operation tags (``, ``) are accumulated across compactions. -They track which files the agent has read and modified throughout the session. - -### Hooks registered - -| Hook | What it does | -|---|---| -| `session_start` | Reads config flags (thresholds, mode, retain buffer) | -| `agent_end` | In buffered mode, checks raw-tail token estimate and triggers auto-compaction if over threshold | -| `session_before_compact` | Serializes conversation, calls LLM with observation prompt, normalizes output, runs reflector if needed | -| `session_before_tree` | Generates observational summaries for abandoned branches | -| `session_compact` | Resets force-reflect flag and auto-compact-in-flight state | - -### Commands registered - -| Command | Purpose | -|---|---| -| `/obs-memory-status` | Show current observer/reflector status, thresholds, last compaction details | -| `/obs-auto-compact` | Show or set observer/reflector thresholds, mode, and retention | -| `/obs-mode` | Show or set observer mode (buffered/blocking) | -| `/obs-view` | Show latest observation summary | -| `/obs-reflect` | Force aggressive reflection on next compaction and trigger it immediately | - -### Shortcut - -`Ctrl+Shift+O` — opens the observation memory status overlay (TUI). - --- -## 8. Orchestration Package: @openzosma/memory - -**Package:** `@openzosma/memory` (workspace: `packages/memory/`) -**Files:** `bootstrap.ts`, `config.ts`, `types.ts`, `index.ts` +### Step 3: Implement `loadContext` -### What it does +Called before each agent turn to retrieve relevant memories: -This is a thin orchestration layer. It does **not** implement any memory logic. It: +```ts +const loadContext = async (userMessage: string): Promise => { + const results = await engine.retrieve({ taskDescription: userMessage }, topK) -1. Sets environment variables that pi-memory reads (`PI_MEMORY_DIR`, `PI_MEMORY_QMD_UPDATE`, - `PI_MEMORY_NO_SEARCH`) -2. Resolves the filesystem paths to both extension entry points (`pi-memory/index.ts`, - `pi-extension-observational-memory/index.ts`) using `createRequire` -3. Returns those paths for the agent session to pass to `DefaultResourceLoader` -4. Logs warnings if either extension package is missing + if (results.length === 0) return "" -### API + const memories = results.map(r => ({ + id: r.entity.id, + content: r.entity.content, + score: r.attentionScore + })) -```typescript -import { bootstrapMemory } from "@openzosma/memory" + const lines = [ + "## Long-term Memory", + "", + "The following facts have been remembered from previous conversations with this user.", + "Use them to inform your responses naturally, without mentioning memory IDs or scores.", + "", + ...memories.map(m => `- ${m.content}`), + "" + ] -const result = bootstrapMemory({ - workspaceDir: "/home/agent", - memoryDir: "/home/agent/.pi/agent/memory", // optional override - qmdUpdateMode: "background", // optional: background | manual | off - disableSearch: false, // optional: disable qmd search injection -}) - -// result.paths = ["/path/to/pi-memory/index.ts", "/path/to/obs-memory/index.ts"] -// result.memoryDir = "/home/agent/.pi/agent/memory" + return lines.join("\n") +} ``` -### Why it exists - -Without this package, `@openzosma/agents` would need to know how to resolve npm package -paths, which env vars to set, and in what order to list extensions. The orchestration -package encapsulates this configuration so the agent code stays clean. - --- -## 9. Agent Integration: @openzosma/agents - -**Package:** `@openzosma/agents` (workspace: `packages/agents/`) -**File:** `src/pi.agent.ts` - -### How memory is wired in - -The `PiAgentSession` constructor calls `bootstrapMemory` with the stable `memoryDir` -from the gateway and merges the returned extension paths with the other pi extensions: - -```typescript -constructor(opts: AgentSessionOpts) { - const memoryResult = bootstrapMemory({ - workspaceDir: opts.workspaceDir, - memoryDir: opts.memoryDir, // stable dir from SessionManager - }) - const { extensionPaths } = bootstrapPiExtensions() - - const resourceLoader = new DefaultResourceLoader({ - cwd: opts.workspaceDir, - additionalExtensionPaths: [ - ...extensionPaths, // web-access, subagents, guardrails - ...memoryResult.paths, // pi-memory, observational-memory - ], - systemPrompt: opts.systemPrompt ?? DEFAULT_SYSTEM_PROMPT, - }) - - // createAgentSession loads extensions via jiti +### Step 4: Implement `ingestFacts` + +Called after each assistant turn with pre-extracted facts: + +```ts +const ingestFacts = async (facts: ExtractedFact[]): Promise => { + const now = Date.now() + for (const fact of facts) { + await engine.ingest({ + id: factId(fact.content), // deterministic hash + type: fact.type, + content: fact.content, + tags: fact.tags, + timestamp: now, + }) + } } ``` -The `memoryDir` is separate from `workspaceDir`. `workspaceDir` is per-session -(ephemeral), while `memoryDir` is per-agent-config (persistent). This separation -is what allows memory to survive across conversations. - -### What the agent code does NOT do - -- **No manual tool registration.** Both extensions register their own tools. -- **No manual context injection.** pi-memory's `before_agent_start` hook handles it. -- **No manual compaction logic.** observational-memory's `session_before_compact` handles it. -- **No memory-specific imports** beyond `bootstrapMemory`. - -The agent treats memory as a black box that self-configures through the extension system. - -### Full extension loading order - -1. `pi-web-access` — web search tools -2. `pi-subagents` — sub-agent spawning (if pi CLI available) -3. `pi-subagents/notify.ts` — sub-agent notifications -4. `@aliou/pi-guardrails` — input/output guardrails -5. `pi-memory` — memory storage, retrieval, tools, injection -6. `pi-extension-observational-memory` — compaction, observer, reflector - -Position 5 and 6 are critical: pi-memory must come before observational-memory so -its `session_before_compact` handoff writes to disk before observational-memory -replaces the compaction summary. - --- -## 10. K3s Pod Lifecycle and Persistence +### Step 5: Wire the bridge into PiAgentSession -### Pod architecture +Edit `packages/agents/src/pi.agent.ts`: -Each agent session runs inside an isolated OpenShell sandbox, which is a K3s pod -created from the `openzosma/agent-sandbox` Docker image. The orchestrator manages -pod creation, message routing, and pod destruction. +#### 5a. Import and create the bridge +```ts +import { createMemoryBridge, resolveMemoryExtensionPaths } from "@openzosma/zosma-mem/bridge" ``` -Orchestrator - │ - │ gRPC bidirectional streaming - │ - ▼ -K3s Pod (OpenShell sandbox) -├── /workspace/agents//memory/ ← memory PV mount (shared across sessions) -│ ├── MEMORY.md -│ ├── SCRATCHPAD.md -│ └── daily/ -├── /workspace/sessions// ← session workspace (ephemeral) -├── /tmp/agent/ ← scratch space -└── pi-coding-agent process - ├── pi-memory extension (reads from memory PV) - └── observational-memory extension (loaded) -``` - -### PersistentVolume (PV) for memory - -Memory files must survive pod restarts. The memory directory under `workspace/agents/` -is backed by a Kubernetes PersistentVolume (PV) scoped to the agent configuration: - -```yaml -# Conceptual PV spec (not yet implemented) -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: agent--memory-pvc -spec: - accessModes: [ReadWriteOnce] - resources: - requests: - storage: 1Gi -``` - -**Current state:** The K8s manifests in `infra/k8s/` are placeholders. The PV setup -is planned for Phase 4 (orchestrator + sandbox integration). For local development, -the gateway writes memory to `workspace/agents//memory/` on the host -filesystem, which persists across server restarts. -### Session-to-memory mapping +In the `PiAgentSession` constructor: -All sessions that share an `agentConfigId` share the same memory directory. -Sessions without a config use the `default` memory directory. - -| Session state | Pod state | Memory state | -|---|---|---| -| `created` | Pod being allocated from pool | Memory dir exists (created by SessionManager) | -| `active` | Pod running, gRPC connected | pi-memory reads existing files, continues accumulating | -| `paused` | Pod preserved but idle | Memory files intact on PV | -| `active` (resumed) | Pod re-activated | pi-memory reads existing files, continues | -| `ended` | Pod destroyed | Memory files persist on PV | -| New session (same config) | New pod allocated | Same memory PV mounted, all prior memory available | - -### Pod filesystem policy - -The OpenShell sandbox policy controls what the agent process can access: - -```yaml -filesystem: - allow_read: ["/workspace", "/tmp", "/home/agent"] - allow_write: ["/workspace", "/tmp", "/home/agent"] - deny: ["/etc/passwd", "/proc", "/sys"] +```ts +this.memoryBridge = createMemoryBridge({ memoryDir: opts.memoryDir ?? defaultPath }) ``` -The `.pi/agent/memory/` directory falls within `/home/agent/` and is both readable -and writable by the agent process. - ---- - -## 11. Context Window Flow +#### 5b. Per-turn retrieval -This diagram shows how memory content enters the LLM context window during a single -agent turn: +Before each `sendMessage()`, inject memory context: +```ts +const memoryContext = await this.memoryBridge.loadContext(content) +if (memoryContext) { + await session.steer(memoryContext) // Inject before prompt +} ``` - Context Window - ┌─────────────────────────────────┐ - │ │ - │ System prompt (base) │ - │ │ - │ ## Memory │ ← injected by pi-memory - │ ┌────────────────────────────┐ │ (before_agent_start) - │ │ Scratchpad (open items) │ │ - │ │ Today's daily log │ │ - │ │ Search results (qmd) │ │ - │ │ MEMORY.md content │ │ - │ │ Yesterday's daily log │ │ - │ └────────────────────────────┘ │ - │ │ - │ Compaction summary (if any) │ ← generated by - │ ┌────────────────────────────┐ │ observational-memory - │ │ ## Observations │ │ - │ │ - 🔴 critical items │ │ - │ │ - 🟡 important context │ │ - │ │ - 🟢 informational │ │ - │ │ ## Open Threads │ │ - │ │ ## Next Action Bias │ │ - │ │ / │ │ - │ └────────────────────────────┘ │ - │ │ - │ Recent conversation turns │ ← raw messages after - │ (kept after compaction) │ last compaction - │ │ - │ User's current message │ - │ │ - └─────────────────────────────────┘ -``` - -### Token budget breakdown - -| Section | Source | Typical size | -|---|---|---| -| Base system prompt | `@openzosma/agents` config | ~2k tokens | -| Memory injection | pi-memory `before_agent_start` | 1k-10k tokens | -| Compaction summary | observational-memory | 2k-8k tokens | -| Raw conversation tail | Kept after last compaction | up to ~30k tokens | -| User message | Current turn | Variable | - -The observer auto-compaction triggers at ~38k raw-tail tokens (30k threshold + 8k retain -buffer), which keeps the context window from overflowing on most models. ---- - -## 12. Tools Available to the Agent - -The agent has four memory tools, all registered by pi-memory: +#### 5c. Post-turn ingestion -### memory_write +After each turn completes: -Write durable information to memory files. - -``` -Targets: - - memory: append to MEMORY.md (facts, decisions, preferences) - - daily: append to today's daily log (running context, notes) - -Content format: - - Use #tags for categorization: #decision, #preference, #constraint - - Use [[wikilinks]] for cross-references: [[auth-strategy]] - - Each entry gets a timestamp and session ID comment +```ts +const facts = await extractFacts(model, apiKey, userMessage, assistantResponse) +await this.memoryBridge.ingestFacts(facts) ``` -### memory_read +#### 5d. Load pi-brain and pi-dcp -Read memory file contents. +```ts +const { paths: memoryExtensionPaths, missing } = resolveMemoryExtensionPaths() +if (missing.length > 0) log.warn("Memory extensions missing:", missing) +const resourceLoader = new DefaultResourceLoader({ + cwd: opts.workspaceDir, + systemPrompt: finalPrompt, + additionalExtensionPaths: memoryExtensionPaths, +}) ``` -Targets: - - memory: read MEMORY.md - - scratchpad: read SCRATCHPAD.md - - daily: read a specific daily log (by date) - - list: list available daily log files -``` - -### scratchpad -Manage the working checklist. +#### 5e. Fix systemPromptSuffix +```ts +const parts = [opts.systemPromptPrefix, basePrompt, opts.systemPromptSuffix].filter(Boolean) +const finalPrompt = parts.join("\n\n") ``` -Actions: - - add : add a new unchecked item - - done : mark an item as done - - undo : uncheck a completed item - - clear: remove all completed items -``` - -### memory_search - -Search across all memory files using qmd. -``` -Modes: - - keyword: fast text search - - semantic: embedding-based similarity search - - deep: combined keyword + semantic with re-ranking +#### 5f. Session cleanup -Searches: MEMORY.md, SCRATCHPAD.md, all daily logs -Requires: qmd installed and pi-memory collection configured +```ts +await this.memoryBridge.gc() +this.memoryBridge.shutdown() ``` --- -## 13. Search and Retrieval (qmd) - -[qmd](https://github.com/tobi/qmd) is an external CLI tool that provides semantic search -over markdown files. It is **optional** — core memory tools work without it. - -### What qmd provides - -- Keyword search (fast, text-matching) -- Semantic search (embedding-based similarity using local models) -- Hybrid/deep search (combined keyword + semantic with re-ranking) -- Collection-based indexing of the memory directory - -### Auto-setup - -On `session_start`, pi-memory: -1. Detects if qmd is installed (runs `qmd status`) -2. If available, checks if the `pi-memory` collection exists -3. If not, creates it: `qmd collection add --name pi-memory` -4. Adds path contexts: `/daily` with description "Daily append-only work logs" -5. Starts a background timer for periodic `qmd update` calls -6. Runs `qmd embed` to build/update embeddings - -### Selective injection - -Before each agent turn (`before_agent_start`), pi-memory runs: - -``` -qmd search "" -c pi-memory --mode hybrid --limit 5 --json -``` - -The results are included in the memory context section of the system prompt. -This is disabled if `PI_MEMORY_NO_SEARCH=1` is set. - -### Pod image requirement - -For qmd to work in the sandbox, it must be pre-installed in the Docker image: +### Step 6: LLM-based fact extraction -```dockerfile -RUN bun install -g https://github.com/tobi/qmd -``` - -Without qmd, the system operates in degraded mode: `memory_search` tool returns an -install instructions message, and selective injection is skipped. All other memory -functionality works normally. +Create `packages/agents/src/pi/memory.ts` with `extractFacts()` that uses the session's +LLM to identify memorable facts from conversation exchanges. --- -## 14. Compaction and Observation - -### What is compaction? - -When the conversation context grows too large for the model's context window, pi triggers -compaction. This replaces older conversation history with a summary, freeing up context -space for new turns. - -### Default pi compaction vs. observational memory - -| Aspect | Default pi compaction | Observational memory | -|---|---|---| -| Summary format | Generic text summary | Structured observations with priority emoji | -| Priority awareness | No | Yes (🔴/🟡/🟢) | -| Reflector GC | No | Yes (deduplication + pruning at threshold) | -| Auto-trigger | Only when context overflows | Proactive at configurable token threshold | -| File tracking | No | Yes (``, `` tags) | -| Open threads | No | Yes (explicit section) | -| Next action bias | No | Yes (explicit section) | - -### Two-pass compaction flow +### Step 7: Tests -``` -1. pi detects context pressure (or observer auto-trigger fires) -2. pi calls session_before_compact hooks in registration order: - a. pi-memory hook runs first: - - Writes handoff entry to daily log (scratchpad items + recent context) - - Returns undefined (does not replace compaction) - b. observational-memory hook runs second: - - Serializes conversation via convertToLlm + serializeConversation - - Includes previous observation summary if exists - - Calls LLM with observation prompt - - Normalizes output to required three-section format - - Checks if reflector should run (observation tokens > reflector threshold) - - If reflector needed: deduplicates, prunes by priority caps - - Appends file operation tags - - Returns { compaction: CompactionResult } -3. pi uses the CompactionResult from observational-memory -4. Old conversation entries replaced with compaction summary -``` - -### Reflector garbage collection - -When the observation block exceeds the reflector threshold (default 40k tokens), -the reflector runs: - -1. **Parse** all observation lines from the summary -2. **Normalize** each observation to a key (lowercase, strip formatting) -3. **Deduplicate** by key, keeping higher priority and more recent entries -4. **Cap** by priority level: - - Threshold mode: 🔴 max 96, 🟡 max 40, 🟢 max 16 - - Forced mode (`/obs-reflect`): 🔴 max 72, 🟡 max 28, 🟢 max 8 -5. **Deduplicate** open threads and next action items -6. **Reassemble** the summary in the standard three-section format +Create `packages/zosma-mem/src/bridge/__tests__/bridge.test.ts` with integration tests +for the full ingest→retrieve→reinforce lifecycle. --- -## 15. Configuration Reference +## Implementation Status -### Environment variables (set by @openzosma/memory) +### ✅ Completed -| Variable | Default | Description | -|---|---|---| -| `PI_MEMORY_DIR` | `/.pi/agent/memory` | Root directory for all memory files | -| `PI_MEMORY_QMD_UPDATE` | `background` | qmd re-indexing mode: `background`, `manual`, `off` | -| `PI_MEMORY_NO_SEARCH` | unset | Set to `1` to disable selective memory injection | +- [x] Installed pi-brain, pi-dcp as zosma-mem deps +- [x] Created bridge package with `createMemoryBridge` and `resolveMemoryExtensionPaths` +- [x] Implemented `loadContext` with proper formatting +- [x] Implemented `ingestFacts` with fact ID hashing +- [x] Wired bridge into `PiAgentSession` (per-turn injection via `steer()`, post-turn ingestion) +- [x] Fixed `systemPromptSuffix` bug in prompt construction +- [x] Load pi-brain and pi-dcp extensions via `additionalExtensionPaths` +- [x] Session cleanup with GC and shutdown +- [x] LLM-based fact extraction in separate agents module +- [x] Cleaned dead code (evals, adapter, bootstrap, config.ts) -### Observational memory flags (set via pi extension system) +### ⏳ Remaining -| Flag | Default | Description | -|---|---|---| -| `obs-auto-compact` | `true` | Enable observer auto-trigger | -| `obs-mode` | `buffered` | `buffered` (background on agent_end) or `blocking` | -| `obs-observer-threshold` | `30000` | Raw-tail tokens before observer fires | -| `obs-reflector-threshold` | `40000` | Observation-block tokens before reflector GC | -| `obs-retain-raw-tail` | `8000` | Extra raw-tail tokens kept before observer fires | - -These can be set as CLI flags when starting pi, or changed at runtime via -`/obs-auto-compact` command. - -### MemoryConfig interface - -```typescript -interface MemoryConfig { - workspaceDir: string // Pod workspace root (e.g., /home/agent) - memoryDir?: string // Override PI_MEMORY_DIR - qmdUpdateMode?: "background" | "manual" | "off" - disableSearch?: boolean // Disable qmd search injection -} -``` +- [ ] Add reinforcement tracking (when agent uses retrieved memories) +- [ ] Complete bridge tests +- [ ] Manual testing: cross-conversation recall --- -## 16. Failure Modes and Degraded Operation +## Files Created/Modified -| Failure | Impact | Behavior | +| File | Status | Purpose | |---|---|---| -| pi-memory not installed | No memory tools, no context injection | Warning logged, agent works without memory | -| observational-memory not installed | Default pi compaction used | Warning logged, compaction still works | -| Both missing | No memory at all | Warning logged, agent operates statelessly | -| qmd not installed | No `memory_search`, no selective injection | Core tools still work, MEMORY.md/scratchpad/daily logs still injected | -| qmd collection missing | Same as qmd not installed | pi-memory auto-creates collection on session_start | -| LLM API key missing | No exit summary, no observation compaction | Both extensions fall back gracefully, log warnings | -| PV not mounted | Memory lost on pod restart | Files created in ephemeral pod storage, work within session | -| Memory dir not writable | All writes fail | Tools return error messages, agent continues without persistence | -| Observation generation fails | Default compaction used | observational-memory returns undefined, pi uses built-in compaction | +| `packages/zosma-mem/package.json` | ✅ Modified | Added pi-brain/pi-dcp deps, removed evals export/bin | +| `packages/zosma-mem/src/bridge/index.ts` | ✅ Created | Bridge factory + MemoryBridge implementation | +| `packages/zosma-mem/src/bridge/extensions.ts` | ✅ Created | Extension path resolution for pi-brain/pi-dcp | +| `packages/zosma-mem/src/bridge/__tests__/bridge.test.ts` | ⏳ Partial | Bridge unit tests (6 basic tests pass) | +| `packages/agents/src/pi.agent.ts` | ✅ Modified | Wired bridge, fixed suffix bug, load extensions | +| `packages/agents/src/pi/memory.ts` | ✅ Created | LLM-based fact extraction | +| `packages/zosma-mem/README.md` | ✅ Updated | Reflects current package purpose | --- -## 17. What This System Does Not Do +## Non-Goals -- **No database storage for memory.** Memory is files on disk, not rows in PostgreSQL. -- **No cross-session real-time sharing.** Each pod reads its own PV. There is no pub/sub - for memory updates between concurrent sessions. -- **No automatic pruning of long-term memory.** MEMORY.md grows unbounded. Manual curation - by the agent (or user) is the only mechanism. -- **No embedding generation.** Embeddings are handled by qmd externally, not by this system. -- **No memory deduplication across files.** The same fact could exist in MEMORY.md and a - daily log. Search results may contain duplicates. -- **No access control on memory.** Any agent with PV access can read/write all memory files. -- **No encryption at rest.** Memory files are plaintext markdown. -- **No memory versioning or rollback.** Files are append-only with no git-like history. +- No database storage. Memory stays file-based. +- No cross-session real-time sync. Each session reads its own files. +- No embedding model. Retrieval uses tag-based attention scoring. +- No changes to gateway/session-manager (memoryDir wiring works). +- No removal of zosma-mem engine. Bridge wraps it. --- -## Appendix: Source File Locations - -| File | Package | Purpose | -|---|---|---| -| `packages/memory/src/bootstrap.ts` | @openzosma/memory | `bootstrapMemory()` — resolves extensions, sets env | -| `packages/memory/src/config.ts` | @openzosma/memory | `applyMemoryEnv()` — sets PI_MEMORY_DIR etc. | -| `packages/memory/src/types.ts` | @openzosma/memory | `MemoryConfig`, `MemoryBootstrapResult` | -| `packages/memory/src/index.ts` | @openzosma/memory | Public exports | -| `packages/memory/src/bootstrap.test.ts` | @openzosma/memory | 9 tests for bootstrap + config | -| `packages/agents/src/pi.agent.ts` | @openzosma/agents | `PiAgentSession` — wires memory into session | -| `packages/agents/src/types.ts` | @openzosma/agents | `AgentSessionOpts` — includes `memoryDir` field | -| `packages/agents/src/pi/extensions/index.ts` | @openzosma/agents | `bootstrapPiExtensions()` — other extensions | -| `packages/gateway/src/session-manager.ts` | @openzosma/gateway | `SessionManager` — computes stable memory dir per agent config, serializes init | -| `packages/gateway/src/session-manager.test.ts` | @openzosma/gateway | 4 tests for memory dir stability and isolation | -| `node_modules/pi-memory/index.ts` | pi-memory (npm) | Full extension source (~1400 lines) | -| `node_modules/pi-extension-observational-memory/index.ts` | obs-memory (npm) | Full extension source (~1200 lines) | -| `node_modules/pi-extension-observational-memory/overlay.ts` | obs-memory (npm) | TUI status overlay component | +## Architecture (Actual Implementation) + +``` +┌────────────────────────────────────────────────────────────────────┐ +│ Agent Session (PiAgentSession) │ +│ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ +│ │ pi-brain │ │ pi-dcp │ │ zosma-mem │ │ +│ │ (loaded via │ │ (loaded via │ │ bridge │ │ +│ │ additionalExt) │ │ additionalExt) │ │ │ │ +│ │ │ │ │ │ loadContext() │ │ +│ │ Code project │ │ Context pruning │ │ ingestFacts() │ │ +│ │ memory │ │ Token management │ │ recordUsage() │ │ +│ │ │ │ │ │ gc() │ │ +│ └────────┬──────────┘ └──────────────────┘ └────────┬────────┘ │ +│ │ │ │ +│ └─────────────────────────────────────────────┘ │ +│ zosma-mem engine (salience, store, gc) │ +│ │ +│ ┌──────────────────────────────────────────────────────────────┐ │ +│ │ Filesystem: workspace/agents//memory/ │ │ +│ │ ├── .salience/*.yaml (entities) │ │ +│ │ ├── .salience/archive/ (pruned) │ │ +│ │ └── .salience/co-access (patterns) │ │ +│ └──────────────────────────────────────────────────────────────┘ │ +└────────────────────────────────────────────────────────────────────┘ +``` \ No newline at end of file diff --git a/infra/openshell/Dockerfile b/infra/openshell/Dockerfile index cf46793..e34d694 100644 --- a/infra/openshell/Dockerfile +++ b/infra/openshell/Dockerfile @@ -48,7 +48,7 @@ COPY pnpm-workspace.yaml package.json pnpm-lock.yaml tsconfig.base.json ./ COPY packages/sandbox-server/package.json packages/sandbox-server/ COPY packages/agents/package.json packages/agents/ COPY packages/logger/package.json packages/logger/ -COPY packages/memory/package.json packages/memory/ +COPY packages/zosma-mem/package.json packages/zosma-mem/ COPY packages/db/package.json packages/db/ COPY packages/integrations/package.json packages/integrations/ COPY packages/skills/reports/package.json packages/skills/reports/ diff --git a/packages/agents/package.json b/packages/agents/package.json index 655066b..2fe7035 100644 --- a/packages/agents/package.json +++ b/packages/agents/package.json @@ -20,22 +20,22 @@ "check": "tsc --noEmit" }, "dependencies": { + "@mariozechner/pi-agent-core": "^0.61.0", "@mariozechner/pi-ai": "^0.61.0", "@mariozechner/pi-coding-agent": "^0.61.0", - "@openzosma/logger": "workspace:*", - "@openzosma/memory": "workspace:*", - "@sinclair/typebox": "^0.34.48", - "dotenv": "17.3.1", - "uuid": "^13.0.0", "@openzosma/db": "workspace:*", "@openzosma/integrations": "workspace:*", + "@openzosma/logger": "workspace:*", "@openzosma/skill-reports": "workspace:*", + "@openzosma/zosma-mem": "workspace:*", + "@sinclair/typebox": "^0.34.48", + "dotenv": "17.3.1", "pg": "^8.13.1", - "@mariozechner/pi-agent-core": "^0.61.0" + "uuid": "^13.0.0" }, "devDependencies": { "@types/node": "^22.15.2", - "typescript": "^5.7.3", - "@types/pg": "^8.11.10" + "@types/pg": "^8.11.10", + "typescript": "^5.7.3" } } diff --git a/packages/agents/src/pi.agent.ts b/packages/agents/src/pi.agent.ts index 8808d32..49188bf 100644 --- a/packages/agents/src/pi.agent.ts +++ b/packages/agents/src/pi.agent.ts @@ -1,4 +1,6 @@ import { randomUUID } from "node:crypto" +import { join } from "node:path" +import type { Api, Model } from "@mariozechner/pi-ai" import type { AgentSession as PiSdkSession } from "@mariozechner/pi-coding-agent" import { AuthStorage, @@ -8,8 +10,10 @@ import { createAgentSession, } from "@mariozechner/pi-coding-agent" import { createLogger } from "@openzosma/logger" -import { bootstrapMemory } from "@openzosma/memory" +import { createMemoryBridge, resolveMemoryExtensionPaths } from "@openzosma/zosma-mem/bridge" +import type { MemoryBridge } from "@openzosma/zosma-mem/bridge" import { DEFAULT_SYSTEM_PROMPT } from "./pi/config.js" +import { ensureBrainInit, extractFacts } from "./pi/memory.js" import { resolveModel } from "./pi/model.js" import { createDefaultTools, @@ -35,7 +39,7 @@ const LLM_IDLE_TIMEOUT_MS = Number(process.env.OPENZOSMA_LLM_IDLE_TIMEOUT_MS) || * Build a ModelRegistry that knows about a custom provider and its API key. * This is needed because pi-coding-agent's AgentSession validates the API key * via ModelRegistry.getApiKey() before each prompt. Without registration, - * custom providers (like "local") fail with "No API key found". + * custom providers (like openai, anthropic, etc.) fail with "No API key found". */ function buildModelRegistry(providerName: string, apiKey: string, baseUrl: string): ModelRegistry { const authStorage = AuthStorage.inMemory() @@ -50,38 +54,71 @@ function buildModelRegistry(providerName: string, apiKey: string, baseUrl: strin class PiAgentSession implements AgentSession { private sessionPromise: Promise private messages: AgentMessage[] = [] + private memoryBridge: MemoryBridge + private model: Model + private apiKey: string + private inFlightExtracts = new Set>() constructor(opts: AgentSessionOpts) { - bootstrapMemory({ - workspaceDir: opts.workspaceDir, - memoryDir: opts.memoryDir, + const { model, apiKey } = resolveModel({ + provider: opts.provider, + model: opts.model, + baseUrl: opts.baseUrl, }) + this.model = model + this.apiKey = apiKey + + // Stable memory dir: use the explicit memoryDir from opts if provided, + // otherwise fall back to the default path inside the workspace. + const memoryDir = opts.memoryDir ?? join(opts.workspaceDir, ".pi", "agent", "memory") + log.info("Memory directory set", { memoryDir }) + this.memoryBridge = createMemoryBridge({ memoryDir }) + + // Ensure pi-brain .memory/ structure exists in the workspace so its + // extension tools don't return "Brain not initialized" errors to the LLM. + try { + ensureBrainInit(opts.workspaceDir) + } catch (err) { + log.warn("ensureBrainInit failed (non-fatal)", { + error: err instanceof Error ? err.message : String(err), + }) + } + const toolList = [...createDefaultTools(opts.workspaceDir, opts.toolsEnabled)] const reportTools = createReportTools(opts.toolsEnabled, opts.workspaceDir) const customTools = [ ...reportTools, ...(opts.dbPool ? [createQueryDatabaseTool(opts.dbPool), createListDatabaseSchemasTool(opts.dbPool)] : []), ] - const { model, apiKey } = resolveModel({ - provider: opts.provider, - model: opts.model, - baseUrl: opts.baseUrl, - }) - // Build the final system prompt: optional prefix + main prompt + // Build the final system prompt: + // [systemPromptPrefix] + [base prompt] + [systemPromptSuffix] + // systemPromptPrefix: caller-supplied context (e.g. agent-config overrides) + // base prompt: DEFAULT_SYSTEM_PROMPT or per-config override + // systemPromptSuffix: gateway-injected context (e.g. database integration list) const basePrompt = opts.systemPrompt ?? DEFAULT_SYSTEM_PROMPT - const finalPrompt = opts.systemPromptPrefix ? `${opts.systemPromptPrefix}\n\n${basePrompt}` : basePrompt + const parts = [opts.systemPromptPrefix, basePrompt, opts.systemPromptSuffix].filter(Boolean) + const finalPrompt = parts.join("\n\n") log.info("PiAgentSession: building system prompt", { hasPrefix: !!opts.systemPromptPrefix, + hasSuffix: !!opts.systemPromptSuffix, prefixLength: opts.systemPromptPrefix?.length ?? 0, - prefixPreview: opts.systemPromptPrefix?.slice(0, 80) ?? "(none)", + suffixLength: opts.systemPromptSuffix?.length ?? 0, finalPromptLength: finalPrompt.length, }) + // Resolve pi-brain and pi-dcp extension paths. Missing packages are + // silently skipped — the agent degrades gracefully without them. + const { paths: memoryExtensionPaths, missing: missingExtensions } = resolveMemoryExtensionPaths() + if (missingExtensions.length > 0) { + log.warn("Memory extensions not found — skipping", { missing: missingExtensions }) + } + const resourceLoader = new DefaultResourceLoader({ cwd: opts.workspaceDir, systemPrompt: finalPrompt, + additionalExtensionPaths: memoryExtensionPaths, }) // For custom/local providers not in the built-in registry, create a @@ -114,7 +151,41 @@ class PiAgentSession implements AgentSession { async *sendMessage(content: string, signal?: AbortSignal): AsyncGenerator { const session = await this.sessionPromise - const promptContent = content + // Retrieve relevant memories and track which ones we injected. + // We'll use this to record reinforcement signals later. + let injectedMemoryIds: string[] = [] + let injectedMemoryEntities: Array<{ id: string; content: string }> = [] + let memoryContextBlock = "" + try { + const { + context: memoryContext, + ids: injectedIds, + entities: injectedEntities, + } = await this.memoryBridge.loadContext(content) + injectedMemoryIds = injectedIds + injectedMemoryEntities = injectedEntities + log.info("Loaded memory context", { + memories: injectedIds.length, + query: content.slice(0, 80), + contextLength: memoryContext?.length ?? 0, + }) + if (memoryContext) { + memoryContextBlock = memoryContext + log.info("Memory context will be prepended to user message", { + length: memoryContext.length, + injectedIds: injectedMemoryIds.length, + }) + } + } catch (err) { + log.warn("Failed to load memory context (non-fatal)", { + error: err instanceof Error ? err.message : String(err), + }) + } + + // Prepend memory context directly into the prompt so the LLM sees it as + // grounding context alongside the user message. steer() is designed for + // mid-stream interrupts and is not reliable as a pre-turn injection. + const promptContent = memoryContextBlock ? `${memoryContextBlock}\n\nUser message: ${content}` : content const userMsg: AgentMessage = { id: randomUUID(), @@ -292,7 +363,7 @@ class PiAgentSession implements AgentSession { } } if (errorMessages.length > 0) { - enqueue({ type: "error", error: errorMessages.join("; ") }) + enqueue({ type: "error", error: `Agent errors: ${errorMessages.join("; ")}` }) } enqueue({ type: "turn_end", id: randomUUID() }) done = true @@ -335,9 +406,9 @@ class PiAgentSession implements AgentSession { case "auto_retry_start": log.warn("Auto-retry started (LLM error, retrying)", { attempt: "attempt" in event ? event.attempt : undefined, - maxAttempts: "maxAttempts" in event ? event.maxAttempts : undefined, - delayMs: "delayMs" in event ? event.delayMs : undefined, - errorMessage: "errorMessage" in event ? event.errorMessage : undefined, + maxAttempts: "maxAttempts" in event ? (event.maxAttempts as number) : undefined, + delayMs: "delayMs" in event ? (event.delayMs as number) : undefined, + errorMessage: "errorMessage" in event ? (event.errorMessage as string) : undefined, }) enqueue({ type: "auto_retry_start", @@ -351,8 +422,8 @@ class PiAgentSession implements AgentSession { case "auto_retry_end": log.info("Auto-retry ended", { success: "success" in event ? event.success : undefined, - attempt: "attempt" in event ? event.attempt : undefined, - finalError: "finalError" in event ? event.finalError : undefined, + attempt: "attempt" in event ? (event.attempt as number) : undefined, + finalError: "finalError" in event ? (event.finalError as string) : undefined, }) enqueue({ type: "auto_retry_end", @@ -389,7 +460,7 @@ class PiAgentSession implements AgentSession { const promptPromise = session.prompt(promptContent).catch((err: unknown) => { const errorMsg = err instanceof Error ? err.message : "Unknown agent error" log.error("[DIAG] session.prompt() rejected", { error: errorMsg, ms: elapsed(), piEventSeq }) - enqueue({ type: "error", error: errorMsg }) + enqueue({ type: "error", error: `Agent error: ${errorMsg}` }) done = true if (resolveWaiting) { resolveWaiting() @@ -453,6 +524,66 @@ class PiAgentSession implements AgentSession { createdAt: new Date().toISOString(), } this.messages.push(assistantMsg) + + // Record reinforcement signals for memories that were injected and used. + // This improves future retrieval by boosting the salience of helpful memories. + if (injectedMemoryIds.length > 0) { + try { + // Content-based correlation: check whether key words from each + // injected memory's content appear in the response. This avoids + // boosting unrelated high-salience facts just because the response + // was non-empty. + const responseWords = new Set( + fullResponseText + .toLowerCase() + .split(/\W+/) + .filter((w) => w.length > 3), + ) + let usedCount = 0 + let ignoredCount = 0 + + for (const entity of injectedMemoryEntities) { + const contentWords = entity.content + .toLowerCase() + .split(/\W+/) + .filter((w) => w.length > 3) + const overlap = contentWords.filter((w) => responseWords.has(w)).length + // Require at least 2 content words to appear in the response + // to count as "used". Single-word matches are too noisy. + const wasUsed = overlap >= 2 + await this.memoryBridge.recordUsage(entity.id, wasUsed ? "used" : "ignored") + if (wasUsed) usedCount++ + else ignoredCount++ + } + + log.info("Memory reinforcement recorded", { + usedCount, + ignoredCount, + totalInjected: injectedMemoryIds.length, + }) + } catch (err) { + log.warn("Memory reinforcement failed (non-fatal)", { + error: err instanceof Error ? err.message : String(err), + }) + } + } + + // Post-turn memory ingestion: extract memorable facts from this exchange + // and store them so future conversations can recall them. + // This is non-blocking and non-critical — errors are logged and ignored. + const extractPromise = extractFacts(this.model, this.apiKey, content, fullResponseText) + .then((facts) => { + if (facts.length === 0) return + log.info("Memory: ingesting extracted facts", { count: facts.length }) + return this.memoryBridge.ingestFacts(facts) + }) + .catch((err: unknown) => { + log.warn("Memory ingestion failed (non-fatal)", { + error: err instanceof Error ? err.message : String(err), + }) + }) + this.inFlightExtracts.add(extractPromise) + extractPromise.finally(() => this.inFlightExtracts.delete(extractPromise)) } } @@ -469,6 +600,20 @@ class PiAgentSession implements AgentSession { getMessages(): AgentMessage[] { return this.messages } + + /** Shutdown the session — run GC and shut down the memory bridge. */ + async dispose(): Promise { + // Await any in-flight extractFacts promises to ensure no facts are dropped on shutdown + await Promise.allSettled([...this.inFlightExtracts]) + try { + await this.memoryBridge.gc() + } catch (err) { + log.warn("Memory GC on dispose failed (non-fatal)", { + error: err instanceof Error ? err.message : String(err), + }) + } + this.memoryBridge.shutdown() + } } export class PiAgentProvider implements AgentProvider { diff --git a/packages/agents/src/pi/memory.ts b/packages/agents/src/pi/memory.ts new file mode 100644 index 0000000..bf91ee1 --- /dev/null +++ b/packages/agents/src/pi/memory.ts @@ -0,0 +1,145 @@ +/** + * LLM-based fact extraction for agent memory. + * + * After each conversation turn, we ask the active model to extract memorable + * facts from the exchange and return them as ExtractedFact objects for ingestion + * into the zosma-mem bridge. Extension path resolution lives in @openzosma/zosma-mem. + */ + +import { existsSync, mkdirSync, writeFileSync } from "node:fs" +import { join } from "node:path" +import { completeSimple } from "@mariozechner/pi-ai" +import type { Api, Model } from "@mariozechner/pi-ai" +import { createLogger } from "@openzosma/logger" +import type { ExtractedFact } from "@openzosma/zosma-mem/bridge" + +const log = createLogger({ component: "zosma-mem" }) + +const EXTRACTION_SYSTEM_PROMPT = `You are extracting user preferences and facts from conversations for long-term memory. + +CRITICAL RULES: +1. Extract EVERY user preference as a separate fact, even if they seem related +2. "Favorite X" and "love/like Y" are ALWAYS separate facts, even if both are animals +3. Personal statements like "I love X" or "My favorite is Y" become facts +4. Each fact must be self-contained and specific +5. Tags MUST include semantic action words like "like", "love", "hate", "favorite", "prefer" + so the fact can be retrieved by queries like "what do I like?" or "whom do I like?" + +EXAMPLES: +- User says "My favorite animal is elephant" → content: "User's favorite animal is elephant", tags: ["animal", "favorite", "elephant"] +- User says "I love the lion" → content: "User loves lions", tags: ["animal", "love", "lion"] +- User says "I hate snakes" → content: "User hates snakes", tags: ["animal", "hate", "snake"] +- User says "I like Messi" → content: "User likes Messi", tags: ["messi", "like", "football", "person"] + +Extract as JSON array with: +- "content": third-person statement (e.g. "User's favorite animal is elephant") +- "type": "preference" +- "tags": array of lowercase keywords INCLUDING the relationship word (like/love/hate/favorite/prefer) + +Return [] if nothing memorable. ONLY return the raw JSON array, no markdown formatting.` + +/** + * Use the active LLM to extract memorable facts from a single conversation turn. + * Returns an empty array on any error — this is a non-critical background path. + */ +export const extractFacts = async ( + model: Model, + apiKey: string, + userMessage: string, + assistantResponse: string, +): Promise => { + if (!userMessage.trim() || !assistantResponse.trim()) { + return [] + } + + const prompt = `User: ${userMessage}\n\nAssistant: ${assistantResponse}` + + try { + const result = await completeSimple( + model, + { + systemPrompt: EXTRACTION_SYSTEM_PROMPT, + messages: [{ role: "user", content: prompt, timestamp: Date.now() }], + }, + { apiKey, maxTokens: 512 }, + ) + + const text = result.content + .filter((c): c is { type: "text"; text: string } => c.type === "text") + .map((c) => c.text) + .join("") + .trim() + + if (!text) { + log.warn("LLM returned empty text") + return [] + } + + // Strip markdown code fences that some models wrap around JSON output. + const stripped = text + .replace(/^```(?:json)?\s*/i, "") + .replace(/\s*```$/, "") + .trim() + + let parsed: unknown + try { + parsed = JSON.parse(stripped) + } catch (parseErr) { + log.warn("JSON parse failed", { error: parseErr, rawText: stripped.slice(0, 200) }) + return [] + } + + if (!Array.isArray(parsed)) { + log.warn("LLM returned non-array", { type: typeof parsed }) + return [] + } + + const validFacts = parsed.filter( + (item): item is ExtractedFact => + typeof item === "object" && + item !== null && + typeof (item as Record).content === "string" && + ["preference", "decision", "pattern", "error"].includes((item as Record).type as string) && + Array.isArray((item as Record).tags), + ) + + log.info("Extracted facts", { extracted: validFacts.length, total: parsed.length }) + return validFacts + } catch (err) { + log.error("LLM call failed", { error: err instanceof Error ? err.message : String(err) }) + return [] + } +} + +/** + * Ensure the pi-brain `.memory/` structure exists in the workspace. + * pi-brain's tools return a hard error if state.yaml is missing — this silently + * creates the minimal structure so the extension works without requiring the user + * to run brain-init.sh manually. + * + * Idempotent: safe to call on every session start. + */ +export const ensureBrainInit = (workspaceDir: string): void => { + const memDir = join(workspaceDir, ".memory") + const branchDir = join(memDir, "branches", "main") + const stateFile = join(memDir, "state.yaml") + + mkdirSync(branchDir, { recursive: true }) + + if (!existsSync(join(branchDir, "log.md"))) { + writeFileSync(join(branchDir, "log.md"), "") + } + if (!existsSync(join(branchDir, "commits.md"))) { + writeFileSync(join(branchDir, "commits.md"), "# main\n\n**Purpose:** Main project memory branch\n") + } + if (!existsSync(join(branchDir, "metadata.yaml"))) { + writeFileSync(join(branchDir, "metadata.yaml"), "") + } + if (!existsSync(join(memDir, "main.md"))) { + writeFileSync(join(memDir, "main.md"), "") + } + if (!existsSync(stateFile)) { + const now = new Date().toISOString() + writeFileSync(stateFile, `active_branch: main\ninitialized: "${now}"\n`) + } +} diff --git a/packages/gateway/src/session-manager.ts b/packages/gateway/src/session-manager.ts index a96c051..e272e4f 100644 --- a/packages/gateway/src/session-manager.ts +++ b/packages/gateway/src/session-manager.ts @@ -113,10 +113,13 @@ export class SessionManager { let orchSession: Awaited> try { + const workspaceRoot = resolve(process.env.OPENZOSMA_WORKSPACE ?? join(process.cwd(), "workspace")) + const memoryDir = join(workspaceRoot, "agents", agentConfigId ?? "default", "memory") orchSession = await this.orchestrator.createSession(userId, { sessionId, agentConfigId, resolvedConfig, + memoryDir, }) } catch (err) { const msg = err instanceof Error ? err.message : String(err) diff --git a/packages/memory/package.json b/packages/memory/package.json deleted file mode 100644 index 5a87155..0000000 --- a/packages/memory/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@openzosma/memory", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "scripts": { - "build": "tsc", - "check": "tsc --noEmit", - "test": "vitest --run" - }, - "dependencies": {}, - "devDependencies": { - "@types/node": "^22.15.2", - "typescript": "^5.7.3", - "vitest": "^3.0.0" - } -} diff --git a/packages/memory/src/bootstrap.test.ts b/packages/memory/src/bootstrap.test.ts deleted file mode 100644 index 198e195..0000000 --- a/packages/memory/src/bootstrap.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { afterEach, beforeEach, describe, expect, it } from "vitest" -import { bootstrapMemory } from "./bootstrap.js" -import { applyMemoryEnv } from "./config.js" - -describe("applyMemoryEnv", () => { - const saved: Record = {} - - beforeEach(() => { - for (const key of ["PI_MEMORY_DIR", "PI_MEMORY_QMD_UPDATE", "PI_MEMORY_NO_SEARCH"]) { - saved[key] = process.env[key] - delete process.env[key] - } - }) - - afterEach(() => { - for (const [key, val] of Object.entries(saved)) { - if (val === undefined) delete process.env[key] - else process.env[key] = val - } - }) - - it("sets PI_MEMORY_DIR to default subdir", () => { - const dir = applyMemoryEnv({ workspaceDir: "/home/agent" }) - expect(dir).toBe("/home/agent/.pi/agent/memory") - expect(process.env.PI_MEMORY_DIR).toBe("/home/agent/.pi/agent/memory") - }) - - it("uses explicit memoryDir when provided", () => { - const dir = applyMemoryEnv({ workspaceDir: "/home/agent", memoryDir: "/custom/mem" }) - expect(dir).toBe("/custom/mem") - expect(process.env.PI_MEMORY_DIR).toBe("/custom/mem") - }) - - it("sets qmd update mode", () => { - applyMemoryEnv({ workspaceDir: "/w", qmdUpdateMode: "manual" }) - expect(process.env.PI_MEMORY_QMD_UPDATE).toBe("manual") - }) - - it("does not set qmd update mode when not specified", () => { - applyMemoryEnv({ workspaceDir: "/w" }) - expect(process.env.PI_MEMORY_QMD_UPDATE).toBeUndefined() - }) - - it("sets PI_MEMORY_NO_SEARCH when disableSearch is true", () => { - applyMemoryEnv({ workspaceDir: "/w", disableSearch: true }) - expect(process.env.PI_MEMORY_NO_SEARCH).toBe("1") - }) -}) - -describe("bootstrapMemory", () => { - beforeEach(() => { - process.env.PI_MEMORY_DIR = undefined - }) - - afterEach(() => { - process.env.PI_MEMORY_DIR = undefined - }) - - it("sets memoryDir in result", () => { - const result = bootstrapMemory({ workspaceDir: "/home/agent" }) - expect(result.memoryDir).toBe("/home/agent/.pi/agent/memory") - }) - - it("sets PI_MEMORY_DIR env var", () => { - bootstrapMemory({ workspaceDir: "/home/agent" }) - expect(process.env.PI_MEMORY_DIR).toBe("/home/agent/.pi/agent/memory") - }) -}) diff --git a/packages/memory/src/bootstrap.ts b/packages/memory/src/bootstrap.ts deleted file mode 100644 index 4c36d84..0000000 --- a/packages/memory/src/bootstrap.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { applyMemoryEnv } from "./config.js" -import type { MemoryBootstrapResult, MemoryConfig } from "./types.js" - -/** - * Bootstrap the memory system for an agent pod session. - * - * Sets environment variables (PI_MEMORY_DIR, etc.) so the pre-installed - * pi-memory and pi-extension-observational-memory extensions pick up the - * correct workspace-scoped memory directory at session startup. - * - * Extensions are installed at image build time via extensions.json — no - * runtime path resolution is needed here. - */ -export function bootstrapMemory(config: MemoryConfig): MemoryBootstrapResult { - const memoryDir = applyMemoryEnv(config) - return { memoryDir } -} diff --git a/packages/memory/src/config.ts b/packages/memory/src/config.ts deleted file mode 100644 index 0fd2547..0000000 --- a/packages/memory/src/config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { join } from "node:path" -import type { MemoryConfig } from "./types.js" - -const DEFAULT_MEMORY_SUBDIR = ".pi/agent/memory" - -/** - * Apply memory-related environment variables before extensions are loaded. - * Must be called before the pi session is created. - */ -export function applyMemoryEnv(config: MemoryConfig): string { - const memoryDir = config.memoryDir ?? join(config.workspaceDir, DEFAULT_MEMORY_SUBDIR) - - process.env.PI_MEMORY_DIR = memoryDir - - if (config.qmdUpdateMode) { - process.env.PI_MEMORY_QMD_UPDATE = config.qmdUpdateMode - } - - if (config.disableSearch) { - process.env.PI_MEMORY_NO_SEARCH = "1" - } - - return memoryDir -} diff --git a/packages/memory/src/index.ts b/packages/memory/src/index.ts deleted file mode 100644 index 704bd79..0000000 --- a/packages/memory/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { bootstrapMemory } from "./bootstrap.js" -export { applyMemoryEnv } from "./config.js" -export type { MemoryConfig, MemoryBootstrapResult } from "./types.js" diff --git a/packages/memory/src/types.ts b/packages/memory/src/types.ts deleted file mode 100644 index cd2878f..0000000 --- a/packages/memory/src/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** Configuration for the memory bootstrap */ -export interface MemoryConfig { - /** Root workspace directory for the agent pod (e.g. /home/agent) */ - workspaceDir: string - /** Override PI_MEMORY_DIR (default: /.pi/agent/memory) */ - memoryDir?: string - /** Override qmd update mode: background | manual | off */ - qmdUpdateMode?: "background" | "manual" | "off" - /** Disable selective memory injection (for A/B testing) */ - disableSearch?: boolean -} - -/** Result of bootstrapping the memory extensions */ -export interface MemoryBootstrapResult { - /** The resolved memory directory */ - memoryDir: string -} diff --git a/packages/orchestrator/src/sandbox-manager.ts b/packages/orchestrator/src/sandbox-manager.ts index b26a6ed..f4716b3 100644 --- a/packages/orchestrator/src/sandbox-manager.ts +++ b/packages/orchestrator/src/sandbox-manager.ts @@ -323,10 +323,25 @@ export class SandboxManager { } /** - * Get the total number of active (non-suspended) sandboxes. + * Recursively upload a directory from the host into a user's sandbox. */ - get activeSandboxCount(): number { - return this.sandboxes.size + async uploadDirForUser(userId: string, hostPath: string, sandboxPath: string): Promise { + const state = this.sandboxes.get(userId) + if (!state || state.phase !== "ready") { + throw new Error(`Sandbox for user ${userId} is not ready`) + } + await this.openshell.uploadDir(state.sandboxName, hostPath, sandboxPath) + } + + /** + * Recursively download a sandbox directory to the host. + */ + async downloadDirForUser(userId: string, sandboxPath: string, hostPath: string): Promise { + const state = this.sandboxes.get(userId) + if (!state || state.phase !== "ready") { + throw new Error(`Sandbox for user ${userId} is not ready`) + } + await this.openshell.downloadDir(state.sandboxName, sandboxPath, hostPath) } // ----------------------------------------------------------------------- @@ -368,7 +383,6 @@ export class SandboxManager { sandbox: record.sandboxName, varCount: Object.keys(sandboxEnv).length, }) - await this.openshell.injectEnv(record.sandboxName, sandboxEnv) } catch (err) { const msg = err instanceof Error ? err.message : String(err) log.warn("Failed to re-inject .env on reconnect (non-fatal)", { error: msg }) @@ -410,7 +424,6 @@ export class SandboxManager { sandbox: record.sandboxName, varCount: Object.keys(sandboxEnv).length, }) - await this.openshell.injectEnv(record.sandboxName, sandboxEnv) } catch (err) { const msg = err instanceof Error ? err.message : String(err) log.warn("Failed to re-inject .env on reconnect (non-fatal)", { error: msg }) @@ -554,7 +567,6 @@ export class SandboxManager { // before starting the server. If injection fails, the sandbox // will hang for 120s then start without LLM keys. log.info("Injecting .env", { sandbox: record.sandboxName, varCount: Object.keys(sandboxEnv).length }) - await this.openshell.injectEnv(record.sandboxName, sandboxEnv) log.info(".env injected successfully") // Upload knowledge base content into the sandbox so the agent can diff --git a/packages/orchestrator/src/session-manager.ts b/packages/orchestrator/src/session-manager.ts index c17819d..cb2dc1d 100644 --- a/packages/orchestrator/src/session-manager.ts +++ b/packages/orchestrator/src/session-manager.ts @@ -1,4 +1,7 @@ import { randomUUID } from "node:crypto" +import { mkdirSync } from "node:fs" +import { existsSync, readdirSync } from "node:fs" +import { dirname, join, resolve } from "node:path" import type { AgentStreamEvent } from "@openzosma/agents" import type { AgentConfig, Pool, Skill, UserSandbox } from "@openzosma/db" import { agentConfigQueries, skillQueries, userSandboxQueries } from "@openzosma/db" @@ -35,12 +38,14 @@ const buildSkillsPrefix = (skills: Skill[]): string | null => { export class OrchestratorSessionManager { private readonly pool: Pool private readonly sandboxManager: SandboxManager + private readonly workspaceRoot: string /** In-memory session registry: sessionId -> session metadata. */ private readonly sessions = new Map() - constructor(pool: Pool, sandboxManager: SandboxManager) { + constructor(pool: Pool, sandboxManager: SandboxManager, workspaceRoot?: string) { this.pool = pool this.sandboxManager = sandboxManager + this.workspaceRoot = workspaceRoot ?? resolve(process.env.OPENZOSMA_WORKSPACE ?? join(process.cwd(), "workspace")) } // ----------------------------------------------------------------------- @@ -63,6 +68,7 @@ export class OrchestratorSessionManager { systemPromptPrefix?: string toolsEnabled?: string[] } + memoryDir?: string }, ): Promise { const sessionId = opts?.sessionId ?? randomUUID() @@ -181,6 +187,20 @@ export class OrchestratorSessionManager { systemPromptPrefixLength: agentConfig.systemPromptPrefix?.length ?? 0, }) + // Compute stable memory directory for persistence across sandbox restarts. + // hostMemoryDir is the path on the orchestrator host. sandboxMemoryDir is the + // fixed path inside the sandbox. The basename must match so that + // `openshell sandbox upload/download` (which appends the basename) lands in + // the right place. + const hostMemoryDir = + opts?.memoryDir ?? join(this.workspaceRoot, "agents", opts?.agentConfigId ?? "default", "memory") + mkdirSync(hostMemoryDir, { recursive: true }) + // Fixed sandbox-side path. openshell upload/download preserve the dir basename, + // so uploading hostMemoryDir (".../.../memory") to "/workspace/" creates + // "/workspace/memory/" in the sandbox, and downloading "/workspace/memory/" + // to dirname(hostMemoryDir) recreates "hostMemoryDir" exactly. + const sandboxMemoryDir = "/workspace/memory" + await client.createSession({ sessionId, provider: agentConfig.provider, @@ -189,8 +209,27 @@ export class OrchestratorSessionManager { systemPromptPrefix: agentConfig.systemPromptPrefix, toolsEnabled: agentConfig.toolsEnabled, agentConfigId: opts?.agentConfigId, + // Pass the sandbox-side path so the agent writes facts to the right place + memoryDir: sandboxMemoryDir, }) + // Upload existing memory files into the sandbox for persistence. + // openshell upload appends the basename, so uploading hostMemoryDir to + // "/workspace/" results in "/workspace/memory/" in the sandbox. + const hasFiles = existsSync(hostMemoryDir) && readdirSync(hostMemoryDir).length > 0 + if (hasFiles) { + try { + await this.sandboxManager.uploadDirForUser(userId, hostMemoryDir, "/workspace/") + log.info("Uploaded existing memory files to sandbox", { sessionId, hostMemoryDir }) + } catch (err) { + log.warn("Failed to upload memory files (non-fatal)", { + sessionId, + hostMemoryDir, + error: err instanceof Error ? err.message : String(err), + }) + } + } + // Track the session in the sandbox state sandboxState.activeSessions.add(sessionId) @@ -199,6 +238,7 @@ export class OrchestratorSessionManager { userId, sandboxName: sandboxState.sandboxName, agentConfigId: opts?.agentConfigId, + memoryDir: hostMemoryDir, createdAt: new Date().toISOString(), } @@ -222,6 +262,23 @@ export class OrchestratorSessionManager { const session = this.sessions.get(sessionId) if (!session) return false + // Download memory files back to host before deleting the session. + // openshell download appends the source basename, so downloading + // "/workspace/memory/" to dirname(hostMemoryDir) recreates hostMemoryDir. + if (session.memoryDir) { + const parentDir = dirname(session.memoryDir) + try { + await this.sandboxManager.downloadDirForUser(session.userId, "/workspace/memory/", parentDir) + log.info("Downloaded memory files from sandbox", { sessionId, memoryDir: session.memoryDir }) + } catch (err) { + log.warn("Failed to download memory files (non-fatal)", { + sessionId, + memoryDir: session.memoryDir, + error: err instanceof Error ? err.message : String(err), + }) + } + } + // Remove from sandbox try { const client = this.sandboxManager.getHttpClient(session.userId) diff --git a/packages/orchestrator/src/types.ts b/packages/orchestrator/src/types.ts index b3926cf..8e9ad53 100644 --- a/packages/orchestrator/src/types.ts +++ b/packages/orchestrator/src/types.ts @@ -68,6 +68,8 @@ export interface OrchestratorSession { sandboxName: string /** Agent config ID (optional). */ agentConfigId?: string + /** Host memory directory for persistence. */ + memoryDir?: string /** When the session was created. */ createdAt: string } @@ -94,6 +96,7 @@ export interface SandboxCreateSessionRequest { systemPromptPrefix?: string toolsEnabled?: string[] agentConfigId?: string + memoryDir?: string } export interface SandboxCreateSessionResponse { diff --git a/packages/sandbox-server/src/agent.ts b/packages/sandbox-server/src/agent.ts index 072dd16..11b8ea7 100644 --- a/packages/sandbox-server/src/agent.ts +++ b/packages/sandbox-server/src/agent.ts @@ -115,6 +115,7 @@ export class SandboxAgentManager { systemPrompt?: string systemPromptPrefix?: string toolsEnabled?: string[] + memoryDir?: string }): string { const sessionId = opts?.sessionId ?? randomUUID() @@ -142,6 +143,7 @@ export class SandboxAgentManager { systemPrompt: opts?.systemPrompt, systemPromptPrefix: effectivePrefix, toolsEnabled: opts?.toolsEnabled, + memoryDir: opts?.memoryDir, }) this.sessions.set(sessionId, agentSession) diff --git a/packages/sandbox-server/src/server.ts b/packages/sandbox-server/src/server.ts index 97fbb54..3f5bce7 100644 --- a/packages/sandbox-server/src/server.ts +++ b/packages/sandbox-server/src/server.ts @@ -220,6 +220,7 @@ export function createSandboxApp(): Hono { systemPrompt: body.systemPrompt, systemPromptPrefix: body.systemPromptPrefix, toolsEnabled: body.toolsEnabled, + memoryDir: body.memoryDir, }) return c.json({ sessionId }, 201) diff --git a/packages/sandbox-server/src/types.ts b/packages/sandbox-server/src/types.ts index 479b972..c03135b 100644 --- a/packages/sandbox-server/src/types.ts +++ b/packages/sandbox-server/src/types.ts @@ -20,6 +20,8 @@ export interface CreateSessionRequest { toolsEnabled?: string[] /** Agent config ID (for reference). */ agentConfigId?: string + /** Host memory directory path for persistence. */ + memoryDir?: string } /** Response for POST /sessions */ diff --git a/packages/sandbox/src/client.ts b/packages/sandbox/src/client.ts index d9012cc..05d210f 100644 --- a/packages/sandbox/src/client.ts +++ b/packages/sandbox/src/client.ts @@ -1,6 +1,5 @@ import { type ChildProcess, type StdioOptions, execFile, spawn } from "node:child_process" -import { mkdtempSync, readdirSync, writeFileSync } from "node:fs" -import { tmpdir } from "node:os" +import { readdirSync } from "node:fs" import { basename, join, relative } from "node:path" import { promisify } from "node:util" import { createLogger } from "@openzosma/logger" @@ -281,36 +280,38 @@ export class OpenShellClient { } /** - * Write environment variables into a sandbox as `/sandbox/.env`. + * Recursively download a sandbox directory to the host. * - * The OpenShell CLI does not support `--env` on `sandbox create`. - * Instead, we write a temporary .env file on the host and upload - * it into the sandbox via `sandbox upload`. + * @param name Sandbox name. + * @param remoteDir Directory inside the sandbox to download. + * @param dest Parent directory on the host (the remote dir's + * basename is appended automatically). */ - async injectEnv(name: string, env: Record): Promise { - const lines = Object.entries(env).map(([key, value]) => `${key}=${value}`) - const content = `${lines.join("\n")}\n` - - // `openshell sandbox upload ` treats as a - // directory and preserves the local filename. So the local file MUST be - // named `.env` and the destination MUST be the parent directory `/sandbox/`. - const tmpDir = mkdtempSync(join(tmpdir(), `openzosma-env-${name}-`)) - const tmpPath = join(tmpDir, ".env") - writeFileSync(tmpPath, content, { mode: 0o600 }) - try { - await this.upload(name, tmpPath, "/sandbox/") - } finally { - // Best-effort cleanup - try { - const { unlinkSync, rmdirSync } = await import("node:fs") - unlinkSync(tmpPath) - rmdirSync(tmpDir) - } catch { - // Ignore cleanup errors - } - } + async downloadDir(name: string, remoteDir: string, dest: string): Promise { + await this.run(["sandbox", "download", name, remoteDir, dest], 60_000) } + /** + * Download files from the sandbox to the host. + * + * IMPORTANT: `openshell sandbox download` treats `dest` as a directory + * and preserves the sandbox filename. To download a file to `/host/.env`, + * the sandbox file must be named `.env` and `dest` must be `/host/`. + * + * @param name Sandbox name. + * @param remotePath Path inside the sandbox to download. + * @param dest Destination directory on the host (defaults to current dir). + */ + + /** + * Recursively download a sandbox directory to the host. + * + * @param name Sandbox name. + * @param remoteDir Directory inside the sandbox to download. + * @param dest Parent directory on the host (the remote dir's + * basename is appended automatically). + */ + // ----------------------------------------------------------------------- // Port forwarding // ----------------------------------------------------------------------- @@ -412,7 +413,7 @@ export class OpenShellClient { // Internal // ----------------------------------------------------------------------- - private async run( + public async run( args: string[], timeoutMs: number = DEFAULT_CLI_TIMEOUT_MS, opts?: { stdio?: StdioOptions }, diff --git a/packages/zosma-mem/README.md b/packages/zosma-mem/README.md new file mode 100644 index 0000000..6cab544 --- /dev/null +++ b/packages/zosma-mem/README.md @@ -0,0 +1,182 @@ +# @openzosma/zosma-mem + +**Memory engine with bridge for agent integration** + +A file-based memory system with salience scoring, tag-based retrieval, and reinforcement learning. Provides cross-conversation memory persistence for AI agents, with a clean bridge interface for session lifecycle integration. + +## Installation + +This package is part of the OpenZosma workspace. + +## Core Concepts + +### Salience Engine + +The memory system uses **attention-based salience scoring** to prioritize facts: + +- **Reuse count** - How often a fact has been retrieved +- **Decision influence** - How often a fact led to agent actions +- **Time decay** - Recent facts rank higher than old ones +- **Ignored reads** - Facts that didn't help get demoted + +### Tag-Based Retrieval + +Facts are retrieved using semantic tags rather than embeddings: + +```typescript +// Retrieve memories relevant to a task +const results = await engine.retrieve({ + taskDescription: "fix the authentication bug", + intent: "auth security debugging" +}, 8) +``` + +### Cross-Conversation Persistence + +Memory persists across conversations via stable per-agent directories: + +``` +workspace/agents//memory/ +├── .salience/ # YAML files with scored entities +├── .salience/archive/ # Pruned entities +└── .salience/co-access # Access pattern correlations +``` + +## Usage + +### Basic Engine Usage + +```typescript +import { createMemoryEngine } from "@openzosma/zosma-mem" + +const engine = createMemoryEngine({ + memoryDir: "/path/to/memory", + salienceThreshold: 0.4, // Minimum salience to keep + gcIntervalMs: 3600000, // GC every hour +}) + +// Ingest facts +await engine.ingest({ + id: "user-pref-dark", + type: "preference", + content: "User prefers dark mode interfaces", + tags: ["ui", "theme", "preference"], + timestamp: Date.now(), +}) + +// Retrieve relevant memories +const results = await engine.retrieve({ + taskDescription: "design the new UI", + intent: "interface design" +}, 5) + +console.log(results.map(r => ({ + content: r.entity.content, + score: r.attentionScore +}))) +``` + +### Agent Bridge Integration + +For AI agent sessions, use the bridge interface: + +```typescript +import { createMemoryBridge } from "@openzosma/zosma-mem/bridge" + +const bridge = createMemoryBridge({ + memoryDir: "/workspace/agents/config-123/memory", + topK: 8 // Max memories per turn +}) + +// Before each agent turn +const context = await bridge.loadContext("user's question") +if (context) { + await session.steer(context) // Inject memory into prompt +} + +// After each turn, extract and store facts +const facts = await extractFacts(model, apiKey, userMsg, assistantResponse) +await bridge.ingestFacts(facts) + +// Track reinforcement +await bridge.recordUsage(entityId, "used") // or "ignored" or "influenced_decision" +``` + +### Extension Path Resolution + +For pi-brain and pi-dcp extensions: + +```typescript +import { resolveMemoryExtensionPaths } from "@openzosma/zosma-mem/bridge" + +const { paths, missing } = resolveMemoryExtensionPaths() +if (missing.length > 0) { + console.warn("Missing extensions:", missing) +} + +// Use paths with DefaultResourceLoader +``` + +## Memory Types + +The system handles different categories of facts: + +- **preference** - User likes/dislikes, habits +- **decision** - Choices made, constraints set +- **pattern** - Repeating behaviors, workflows +- **error** - Mistakes, lessons learned + +## Garbage Collection + +Automatic cleanup runs periodically: + +- **Decay** - Reduce salience of old/unused facts +- **Prune** - Remove facts below salience threshold +- **Consolidate** - Merge similar entities + +## Evaluation + +For internal OpenZosma evaluation, use the CLI tool to assess memory retrieval effectiveness: + +```bash +# From project root, after building +cd packages/zosma-mem +node dist/bin/eval.js run +``` + +The CLI prompts for: +- Memory directory path (e.g., `../../../workspace/agents/default/memory`) +- Number of test cases +- Query and expected content for each case + +It computes recall, precision, and F1 scores. + +Example output: +``` +Evaluation Results: +Average Recall: 85.00% +Average Precision: 90.00% +Average F1 Score: 87.50% + +Per Test Case: +Case 1: "UI design" + Recall: 100.00% + Precision: 100.00% + F1: 100.00% + Retrieved: 2 memories +``` + +## Development + +```bash +# Build +pnpm run build + +# Test +pnpm run test + +# Type check +pnpm run check +``` + +Built for OpenZosma agents, works with any AI agent framework that needs persistent cross-conversation memory. 🚀 \ No newline at end of file diff --git a/packages/zosma-mem/package.json b/packages/zosma-mem/package.json new file mode 100644 index 0000000..02df9a9 --- /dev/null +++ b/packages/zosma-mem/package.json @@ -0,0 +1,61 @@ +{ + "name": "@openzosma/zosma-mem", + "version": "0.0.1", + "private": false, + "type": "module", + "description": "Memory engine with bridge for agent integration", + "license": "Apache-2.0", + "keywords": ["memory", "evaluation", "ai", "agentic", "cli", "openzosma"], + "repository": { + "type": "git", + "url": "https://github.com/your-org/openzosma", + "directory": "packages/zosma-mem" + }, + "homepage": "https://github.com/your-org/openzosma/tree/main/packages/zosma-mem", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "bin": { + "zosma-mem-eval": "dist/bin/eval.js" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "./bridge": { + "types": "./dist/bridge/index.d.ts", + "import": "./dist/bridge/index.js" + } + }, + "scripts": { + "build": "tsc", + "check": "tsc --noEmit", + "test": "vitest --run", + "prepublishOnly": "pnpm run build && pnpm run test" + }, + "dependencies": { + "@clack/prompts": "^0.10.0", + "@openzosma/logger": "workspace:*", + "chalk": "^5.4.0", + "chokidar": "^3.6.0", + "commander": "^13.0.0", + "ink": "^5.1.0", + "ink-spinner": "^5.0.0", + "p-limit": "^5.0.0", + "pi-brain": "^0.1.7", + "pi-dcp": "^0.2.0", + "pino": "^9.0.0", + "react": "^18.3.0", + "remark-parse": "^11.0.0", + "unified": "^11.0.0", + "yaml": "^2.8.3", + "zod": "^3.23.0" + }, + "devDependencies": { + "@types/node": "^22.15.2", + "@types/react": "^18.3.0", + "tsx": "^4.0.0", + "typescript": "^5.7.3", + "vitest": "^3.0.0" + } +} diff --git a/packages/zosma-mem/src/__tests__/brain-adapter.test.ts b/packages/zosma-mem/src/__tests__/brain-adapter.test.ts new file mode 100644 index 0000000..7b5f551 --- /dev/null +++ b/packages/zosma-mem/src/__tests__/brain-adapter.test.ts @@ -0,0 +1,94 @@ +import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { beforeEach, describe, expect, it } from "vitest" +import { listBranches, parseCommits, readCommitsRaw, readState } from "../brain-adapter.js" + +const mkTempDir = (): string => mkdtempSync(join(tmpdir(), "brain-adapter-test-")) + +describe("brain-adapter", () => { + let dir: string + + beforeEach(() => { + dir = mkTempDir() + }) + + it("readState returns safe default when file missing", () => { + const state = readState(join(dir, ".memory")) + expect(state.activeBranch).toBe("main") + expect(state.initialized).toBe(false) + expect(state.lastCommit).toBeNull() + }) + + it("readState parses a valid state.yaml", () => { + const memDir = join(dir, ".memory") + mkdirSync(memDir, { recursive: true }) + writeFileSync( + join(memDir, "state.yaml"), + [ + "active_branch: feature-x", + "initialized: '2026-01-01T00:00:00Z'", + "last_commit:", + " branch: feature-x", + " hash: abc12345", + " timestamp: '2026-04-01T12:00:00Z'", + " summary: First commit", + ].join("\n"), + ) + const state = readState(memDir) + expect(state.activeBranch).toBe("feature-x") + expect(state.initialized).toBe(true) + expect(state.lastCommit?.hash).toBe("abc12345") + expect(state.lastCommit?.summary).toBe("First commit") + }) + + it("listBranches returns empty array when branches dir missing", () => { + expect(listBranches(join(dir, ".memory"))).toEqual([]) + }) + + it("listBranches returns branch names", () => { + const memDir = join(dir, ".memory") + mkdirSync(join(memDir, "branches", "main"), { recursive: true }) + mkdirSync(join(memDir, "branches", "feature-auth"), { recursive: true }) + const branches = listBranches(memDir) + expect(branches).toContain("main") + expect(branches).toContain("feature-auth") + }) + + it("parseCommits extracts commit blocks", () => { + const raw = [ + "# main", + "", + "**Purpose:** Test", + "", + "---", + "", + "## Commit abc12345 | 2026-04-01T12:00:00.000Z", + "", + "Use JWT tokens for auth", + "", + "---", + "", + "## Commit def67890 | 2026-04-02T12:00:00.000Z", + "", + "Add retry logic for API calls", + "", + ].join("\n") + + const commits = parseCommits(raw, "main") + expect(commits).toHaveLength(2) + expect(commits[0].hash).toBe("abc12345") + expect(commits[0].branch).toBe("main") + expect(commits[0].content).toContain("JWT") + expect(commits[1].hash).toBe("def67890") + expect(commits[1].content).toContain("retry") + }) + + it("parseCommits returns empty array for empty input", () => { + expect(parseCommits("", "main")).toEqual([]) + }) + + it("readCommitsRaw returns empty string when file missing", () => { + expect(readCommitsRaw(join(dir, ".memory"), "main")).toBe("") + }) +}) diff --git a/packages/zosma-mem/src/bin/eval.ts b/packages/zosma-mem/src/bin/eval.ts new file mode 100644 index 0000000..24feec1 --- /dev/null +++ b/packages/zosma-mem/src/bin/eval.ts @@ -0,0 +1,229 @@ +import { intro, note, outro, spinner, text } from "@clack/prompts" +import { createLogger } from "@openzosma/logger" +import chalk from "chalk" +import { Command } from "commander" +import { createMemoryBridge, factId } from "../bridge/index.js" +import { evaluateMemory } from "../evals/index.js" +import type { MemoryEventType } from "../types.js" + +interface SQuADAnswer { + text: string + answer_start: number +} + +interface SQuADQA { + question: string + answers: SQuADAnswer[] +} + +interface SQuADParagraph { + context: string + qas: SQuADQA[] +} + +interface SQuADArticle { + title: string + paragraphs: SQuADParagraph[] +} + +interface SQuADData { + data: SQuADArticle[] +} + +// Common English stop words to exclude from tags +const STOP_WORDS = new Set([ + "a", + "an", + "the", + "and", + "or", + "but", + "in", + "on", + "at", + "to", + "for", + "of", + "with", + "by", + "from", + "is", + "was", + "are", + "were", + "be", + "been", + "has", + "have", + "had", + "do", + "does", + "did", + "will", + "would", + "could", + "should", + "may", + "might", + "that", + "this", + "these", + "those", + "it", + "its", + "as", + "not", + "no", + "so", + "if", + "then", + "than", + "also", + "into", + "about", + "after", + "before", + "between", + "during", + "over", + "under", + "while", + "which", + "who", + "what", + "when", + "where", + "how", + "their", + "they", + "them", + "there", + "he", + "she", + "his", + "her", + "we", + "our", + "you", + "your", + "i", + "my", +]) + +/** + * Extract meaningful keyword tags from a text string. + * Lowercases, strips punctuation, removes stop words, deduplicates. + * Returns up to maxTags tags sorted by length descending (longer = more specific). + */ +const extractTags = (content: string, maxTags = 20): string[] => { + const tokens = content + .toLowerCase() + .replace(/[^a-z0-9\s]/g, " ") + .split(/\s+/) + .filter((t) => t.length > 2 && !STOP_WORDS.has(t)) + + const unique = [...new Set(tokens)] + // Prefer longer tokens — they tend to be more specific/meaningful + unique.sort((a, b) => b.length - a.length) + return unique.slice(0, maxTags) +} + +const logger = createLogger({ component: "zosma-mem-eval" }) + +const program = new Command() + +program.name("zosma-mem-eval").description("CLI tool to evaluate memory retrieval effectiveness").version("0.0.1") + +program + .command("run") + .description("Run interactive memory evaluation") + .action(async () => { + try { + intro(chalk.blue("🧠 Zosma Memory Evaluation")) + + // Prompt for number of test cases + const result = await text({ message: "How many test cases to run?", defaultValue: "10" }) + if (typeof result === "symbol") process.exit(0) + const numCasesStr = result + const numCases = Number.parseInt(numCasesStr || "10") + + // Use default memory dir for internal use + const memoryDir = "../../../workspace/agents/default/memory" + logger.info(`Using memory dir: ${memoryDir}`) + + // Create bridge + const s = spinner() + s.start("Initializing memory bridge...") + const bridge = createMemoryBridge({ memoryDir }) + s.stop("Memory bridge ready!") + + // Fetch SQuAD validation dataset from Hugging Face + const fetchSpinner = spinner() + fetchSpinner.start("Fetching SQuAD dataset...") + const url = "https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json" + const response = await fetch(url) + const data = (await response.json()) as SQuADData + fetchSpinner.stop("Dataset ready!") + + // Prepare facts and test cases. + // Each paragraph becomes one fact. Tags are extracted heuristically from + // the paragraph text so the tag-based retrieval engine has signal to work + // with (mirrors what LLM extraction does in real agent sessions). + const facts: { content: string; type: MemoryEventType; tags: string[] }[] = [] + const testCases: { query: string; expectedIds: string[]; expectedContent: string[] }[] = [] + let totalCases = 0 + + for (const item of data.data) { + if (totalCases >= numCases) break + for (const para of item.paragraphs) { + if (totalCases >= numCases) break + const context = para.context + const contextId = factId(context) + const tags = extractTags(context) + facts.push({ content: context, type: "pattern" as MemoryEventType, tags }) + for (const qa of para.qas.slice(0, 1)) { + if (totalCases >= numCases) break + testCases.push({ + query: qa.question, + expectedIds: [contextId], + expectedContent: qa.answers.map((a: SQuADAnswer) => a.text), + }) + totalCases++ + } + } + } + + // Ingest facts into memory + const ingestSpinner = spinner() + ingestSpinner.start(`Ingesting ${facts.length} facts...`) + await bridge.ingestFacts(facts) + ingestSpinner.stop(`Ingested ${facts.length} facts`) + + logger.info(`Running ${testCases.length} test cases`) + + // Run evaluation + const evalSpinner = spinner() + evalSpinner.start("Running evaluation...") + const results = await evaluateMemory(bridge, { testCases }) + evalSpinner.stop("Evaluation complete!") + + // Display results as table + const table = ` +| Metric | Value | +|-------------------|----------------------------------------------------| +| Total Cases | ${results.cases.length} | +| Average Recall | ${(results.metrics.avgRecall * 100).toFixed(2)}% | +| Average Precision | ${(results.metrics.avgPrecision * 100).toFixed(2)}% | +| Average F1 Score | ${(results.metrics.avgF1 * 100).toFixed(2)}% | +` + + note(table, "Evaluation Results") + + outro(chalk.green("Evaluation complete!")) + } catch (error) { + outro(chalk.red(`Error: ${(error as Error).message}`)) + process.exit(1) + } + }) + +program.parse() diff --git a/packages/zosma-mem/src/brain-adapter.ts b/packages/zosma-mem/src/brain-adapter.ts new file mode 100644 index 0000000..9b6c50f --- /dev/null +++ b/packages/zosma-mem/src/brain-adapter.ts @@ -0,0 +1,179 @@ +/** + * brain-adapter — reads pi-brain's .memory/ directory and surfaces structured data. + * + * pi-brain owns storage (Git-backed commits, branches, state). This module is the + * read-only bridge that translates pi-brain file formats into types zosma-memory + * can work with. It never writes to pi-brain files. + * + * Supported pi-brain layout: + * .memory/ + * state.yaml — active branch, last commit, sessions + * branches//commits.md — distilled milestone snapshots + * branches//metadata.yaml — branch metadata + */ + +import { existsSync, readFileSync, readdirSync, statSync } from "node:fs" +import { join } from "node:path" +import remarkParse from "remark-parse" +import { unified } from "unified" +import { parse as parseYaml } from "yaml" + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- + +export interface BrainState { + activeBranch: string + initialized: boolean + lastCommit: { + branch: string + hash: string + timestamp: string + summary: string + } | null +} + +export interface ParsedCommit { + /** 8-char hex hash generated by pi-brain */ + hash: string + /** ISO timestamp string */ + timestamp: string + /** Full markdown content of the commit block */ + content: string + /** Branch this commit belongs to */ + branch: string +} + +// --------------------------------------------------------------------------- +// State +// --------------------------------------------------------------------------- + +/** + * Read and parse .memory/state.yaml. + * Returns a safe default when the file is absent or unparseable. + */ +export const readState = (memoryDir: string): BrainState => { + const statePath = join(memoryDir, "state.yaml") + if (!existsSync(statePath)) { + return { activeBranch: "main", initialized: false, lastCommit: null } + } + + try { + const raw = readFileSync(statePath, "utf-8") + const data = parseYaml(raw) as Record + + let lastCommit: BrainState["lastCommit"] = null + if (data.last_commit && typeof data.last_commit === "object" && !Array.isArray(data.last_commit)) { + const lc = data.last_commit as Record + lastCommit = { + branch: String(lc.branch ?? ""), + hash: String(lc.hash ?? ""), + timestamp: String(lc.timestamp ?? ""), + summary: String(lc.summary ?? ""), + } + } + + return { + activeBranch: typeof data.active_branch === "string" ? data.active_branch : "main", + initialized: typeof data.initialized === "string" && data.initialized !== "", + lastCommit, + } + } catch { + return { activeBranch: "main", initialized: false, lastCommit: null } + } +} + +// --------------------------------------------------------------------------- +// Branches +// --------------------------------------------------------------------------- + +/** + * List all branch names in .memory/branches/. + */ +export const listBranches = (memoryDir: string): string[] => { + const branchesDir = join(memoryDir, "branches") + if (!existsSync(branchesDir)) return [] + return readdirSync(branchesDir).filter((entry) => statSync(join(branchesDir, entry)).isDirectory()) +} + +/** + * Read raw commits.md content for a branch. Returns empty string when absent. + */ +export const readCommitsRaw = (memoryDir: string, branch: string): string => { + const p = join(memoryDir, "branches", branch, "commits.md") + if (!existsSync(p)) return "" + return readFileSync(p, "utf-8") +} + +// --------------------------------------------------------------------------- +// Commit parsing (remark AST, not regex) +// --------------------------------------------------------------------------- + +const processor = unified().use(remarkParse) + +/** + * Parse raw commits.md text into structured ParsedCommit objects. + * + * pi-brain writes commits in the format: + * ## Commit | + * [content until next --- separator] + * + * We use remark to parse the document into an AST, then walk headings to + * locate commit blocks rather than relying on raw string patterns. + */ +export const parseCommits = (raw: string, branch: string): ParsedCommit[] => { + if (!raw.trim()) return [] + + const tree = processor.parse(raw) + const commits: ParsedCommit[] = [] + + let currentHash: string | null = null + let currentTimestamp: string | null = null + const contentLines: string[] = [] + + const flushCurrent = (): void => { + if (currentHash && currentTimestamp) { + commits.push({ + hash: currentHash, + timestamp: currentTimestamp, + content: contentLines.join("\n").trim(), + branch, + }) + } + contentLines.length = 0 + } + + for (const node of tree.children) { + if (node.type === "heading" && node.depth === 2) { + const text = node.children.map((c) => ("value" in c ? String((c as { value: unknown }).value) : "")).join("") + + // Match: "Commit abc12345 | 2026-04-01T12:00:00.000Z" + const m = text.match(/^Commit\s+([0-9a-f]{8})\s*\|\s*(.+)$/) + if (m) { + flushCurrent() + currentHash = m[1] + currentTimestamp = m[2].trim() + continue + } + } + + // Skip thematic breaks (---) that pi-brain uses as separators + if (node.type === "thematicBreak") { + continue + } + + // Accumulate content for the current commit + if (currentHash && node.position) { + // Slice the original raw text using node positions for fidelity + const start = node.position.start.offset ?? 0 + const end = node.position.end.offset ?? 0 + contentLines.push(raw.slice(start, end)) + } else if (currentHash && node.type === "paragraph") { + const text = node.children.map((c) => ("value" in c ? String((c as { value: unknown }).value) : "")).join("") + contentLines.push(text) + } + } + + flushCurrent() + return commits +} diff --git a/packages/zosma-mem/src/bridge/__tests__/bridge.test.ts b/packages/zosma-mem/src/bridge/__tests__/bridge.test.ts new file mode 100644 index 0000000..f7ff79e --- /dev/null +++ b/packages/zosma-mem/src/bridge/__tests__/bridge.test.ts @@ -0,0 +1,276 @@ +import { mkdirSync, rmSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { afterEach, beforeEach, describe, expect, it } from "vitest" +import { createMemoryBridge } from "../../bridge/index.js" +import type { ExtractedFact } from "../../bridge/index.js" + +describe("MemoryBridge", () => { + let tempDir: string + + beforeEach(() => { + tempDir = join(tmpdir(), `zosma-mem-test-${Date.now()}`) + mkdirSync(tempDir, { recursive: true }) + }) + + afterEach(() => { + rmSync(tempDir, { recursive: true, force: true }) + }) + + describe("ingestFacts and loadContext round-trip", () => { + it("should ingest facts and retrieve them in context", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const facts: ExtractedFact[] = [ + { + content: "User prefers dark mode interfaces", + type: "preference", + tags: ["ui", "theme", "preference"], + }, + ] + + await bridge.ingestFacts(facts) + + const { context, ids } = await bridge.loadContext("design the UI") + expect(context).toContain("User prefers dark mode interfaces") + expect(ids).toHaveLength(1) + expect(ids[0]).toMatch(/^[a-f0-9]{16}$/) + }) + + it("should return empty context when no relevant memories", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const { context, ids } = await bridge.loadContext("unrelated query") + expect(context).toBe("") + expect(ids).toEqual([]) + }) + + it("should deduplicate identical facts", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const facts: ExtractedFact[] = [ + { + content: "User likes coffee", + type: "preference", + tags: ["drink", "preference"], + }, + { + content: "User likes coffee", // Same content + type: "preference", + tags: ["drink", "preference"], + }, + ] + + await bridge.ingestFacts(facts) + + const entityIds = await bridge.listEntityIds() + expect(entityIds).toHaveLength(1) // Should be deduplicated + }) + }) + + describe("reinforcement tracking", () => { + it("should record usage signals", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const facts: ExtractedFact[] = [ + { + content: "User's favorite color is blue", + type: "preference", + tags: ["color", "preference"], + }, + ] + + await bridge.ingestFacts(facts) + const { ids } = await bridge.loadContext("what color should I use") + expect(ids).toHaveLength(1) + + const entityId = ids[0] + + // Record different usage signals + await bridge.recordUsage(entityId, "used") + await bridge.recordUsage(entityId, "ignored") + await bridge.recordUsage(entityId, "influenced_decision") + + // Should not throw + expect(true).toBe(true) + }) + }) + + describe("garbage collection", () => { + it("should run GC without errors", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const facts: ExtractedFact[] = [ + { + content: "Old preference that should be garbage collected", + type: "preference", + tags: ["old"], + }, + ] + + await bridge.ingestFacts(facts) + await bridge.gc() // Should not throw + + expect(true).toBe(true) + }) + }) + + describe("shutdown", () => { + it("should shutdown without errors", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + bridge.shutdown() // Should not throw + expect(true).toBe(true) + }) + }) + + describe("cross-session persistence", () => { + it("should persist facts across bridge instances", async () => { + // First bridge instance + const bridge1 = createMemoryBridge({ memoryDir: tempDir }) + const facts: ExtractedFact[] = [ + { + content: "Persistent memory across sessions", + type: "decision", + tags: ["persistent", "test"], + }, + ] + + await bridge1.ingestFacts(facts) + bridge1.shutdown() + + // Second bridge instance with same directory + const bridge2 = createMemoryBridge({ memoryDir: tempDir }) + const { context } = await bridge2.loadContext("test query") + + expect(context).toContain("Persistent memory across sessions") + }) + }) + + describe("salience filtering", () => { + it("should respect salience threshold", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir, salienceThreshold: 10 }) + + const facts: ExtractedFact[] = [ + { + content: "High salience fact", + type: "decision", + tags: ["important"], + }, + { + content: "Low salience fact", + type: "pattern", + tags: ["minor"], + }, + ] + + await bridge.ingestFacts(facts) + + // Run GC to prune low-salience facts + await bridge.gc() + + const { context } = await bridge.loadContext("important query") + expect(context).toBeTruthy() // At least some facts should remain + }) + }) + + describe("context formatting", () => { + it("should format context with proper structure", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + const facts: ExtractedFact[] = [ + { + content: "Test memory content", + type: "preference", + tags: ["test"], + }, + ] + + await bridge.ingestFacts(facts) + const { context } = await bridge.loadContext("test") + + expect(context).toContain("## Long-term Memory") + expect(context).toContain("Test memory content") + expect(context).toContain("Use them to inform your responses naturally") + }) + + it("should limit retrieved memories to topK", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir, topK: 2 }) + + const facts: ExtractedFact[] = Array.from({ length: 5 }, (_, i) => ({ + content: `Memory fact ${i}`, + type: "preference" as const, + tags: ["test"], + })) + + await bridge.ingestFacts(facts) + const { ids } = await bridge.loadContext("test") + + expect(ids).toHaveLength(2) // Limited by topK + }) + }) + + describe("evaluation integration", () => { + it("should evaluate retrieval effectiveness using the eval module", async () => { + const bridge = createMemoryBridge({ memoryDir: tempDir }) + + // Ingest test facts + const facts: ExtractedFact[] = [ + { + content: "User prefers dark mode", + type: "preference", + tags: ["ui", "theme"], + }, + { + content: "User likes coffee", + type: "preference", + tags: ["drink", "preference"], + }, + { + content: "Agent should use bash for files", + type: "pattern", + tags: ["tool", "bash", "file"], + }, + ] + + await bridge.ingestFacts(facts) + + // Import eval dynamically to avoid circular deps + const { evaluateMemory } = await import("../../evals/index.js") + + const testCases = [ + { + query: "UI design", + expectedIds: [], // We don't know exact IDs, so test content instead + expectedContent: ["User prefers dark mode"], + }, + { + query: "beverages", + expectedIds: [], + expectedContent: ["User likes coffee"], + }, + { + query: "file handling", + expectedIds: [], + expectedContent: ["Agent should use bash for files"], + }, + ] + + const results = await evaluateMemory(bridge, { testCases }) + + // Since we can't predict exact IDs, check that some retrieval happened + expect(results.metrics.avgRecall).toBeGreaterThanOrEqual(0) + expect(results.metrics.avgPrecision).toBeGreaterThanOrEqual(0) + expect(results.cases).toHaveLength(3) + + // Check that relevant content was retrieved + for (const caseResult of results.cases) { + const hasExpected = testCases + .find((tc) => tc.query === caseResult.query) + ?.expectedContent.some((ec) => caseResult.retrievedContext.includes(ec)) + if (hasExpected) { + expect(caseResult.retrievedContext).toBeTruthy() + } + } + }) + }) +}) diff --git a/packages/zosma-mem/src/bridge/extensions.ts b/packages/zosma-mem/src/bridge/extensions.ts new file mode 100644 index 0000000..c82184a --- /dev/null +++ b/packages/zosma-mem/src/bridge/extensions.ts @@ -0,0 +1,60 @@ +/** + * Pi extension path resolution for memory-related extensions. + * + * Resolves filesystem paths for pi-brain and pi-dcp so that the agent session + * can pass them to DefaultResourceLoader. Both packages live here in + * @openzosma/zosma-mem so agents stays decoupled from extension specifics. + * + * Graceful degradation: if a package is not installed, its path is omitted. + * The caller (agents) receives only the paths that exist on disk. + */ + +import { createRequire } from "node:module" + +const require = createRequire(import.meta.url) + +/** + * Try to resolve the entry point of a pi extension package. + * Attempts the TypeScript source entry first (jiti loads .ts directly at runtime), + * then falls back to the package root. + */ +const resolvePiExtension = (pkg: string): string | null => { + for (const entry of [`${pkg}/src/index.ts`, `${pkg}/index.ts`, pkg]) { + try { + return require.resolve(entry) + } catch { + // try next candidate + } + } + return null +} + +/** + * Resolve extension entry paths for all memory-related pi extensions: + * - pi-brain: structured memory entities, versioning, branch/commit tools + * - pi-dcp: dynamic context pruning, token management + * + * Returns only the paths that successfully resolved. Missing packages are + * silently skipped — the caller should log a warning if the list is shorter + * than expected. + */ +export const resolveMemoryExtensionPaths = (): { paths: string[]; missing: string[] } => { + const extensions = [ + { name: "pi-brain", label: "structured memory (pi-brain)" }, + { name: "pi-dcp", label: "context pruning (pi-dcp)" }, + ] + + const paths: string[] = [] + const missing: string[] = [] + + for (const ext of extensions) { + const resolved = resolvePiExtension(ext.name) + if (resolved) { + paths.push(resolved) + } else { + missing.push(ext.label) + } + } + + return { paths, missing } +} diff --git a/packages/zosma-mem/src/bridge/index.ts b/packages/zosma-mem/src/bridge/index.ts new file mode 100644 index 0000000..a3f9d63 --- /dev/null +++ b/packages/zosma-mem/src/bridge/index.ts @@ -0,0 +1,172 @@ +export { resolveMemoryExtensionPaths } from "./extensions.js" + +/** + * MemoryBridge — integration layer between zosma-mem engine and the agent session lifecycle. + * + * Responsibilities: + * - Retrieve relevant memories at the start of each turn and format them for system prompt injection + * - Accept extracted facts and ingest them into the salience engine + * - Track reinforcement signals (used / ignored / influenced_decision) + * - Run GC on demand or on session shutdown + * + * The bridge deliberately does NOT call the LLM for extraction. That is the caller's + * responsibility (packages/agents/src/pi/memory.ts). This keeps @openzosma/zosma-mem + * free of the @mariozechner/pi-ai dependency and testable without an API key. + */ + +import { createHash } from "node:crypto" +import { createMemoryEngine } from "../engine/factory.js" +import type { MemoryEngine, MemoryEventType } from "../types.js" + +export interface ExtractedFact { + /** Human-readable statement of the fact, e.g. "User's favorite animal is elephant" */ + content: string + /** Semantic type of the fact */ + type: MemoryEventType + /** Short lowercase keywords for retrieval matching */ + tags: string[] +} + +export interface BridgeConfig { + /** Stable per-agent-config memory directory */ + memoryDir: string + /** Minimum salience score to keep during GC. Default: engine default */ + salienceThreshold?: number + /** How many memories to retrieve per turn. Default: 8 */ + topK?: number +} + +export interface MemoryBridge { + /** + * Retrieve memories relevant to the current user message and format them + * as a system prompt section. Returns an empty string when no memories exist. + */ + loadContext: ( + userMessage: string, + ) => Promise<{ context: string; ids: string[]; entities: Array<{ id: string; content: string }> }> + + /** + * Ingest a batch of already-extracted facts into the salience engine. + * Called by the agent after each turn with facts extracted from the conversation. + */ + ingestFacts: (facts: ExtractedFact[]) => Promise + + /** + * Record a reinforcement signal for a retrieved memory entity. + * Call with "used" when the agent references a memory in its response. + * Call with "ignored" when a retrieved memory had no visible effect. + * Call with "influenced_decision" when the memory directly shaped a tool call or decision. + */ + recordUsage: (entityId: string, signal: "used" | "ignored" | "influenced_decision") => Promise + + /** Run garbage collection — decay + prune low-salience entities. */ + gc: () => Promise + + /** Shutdown: clear GC timer. Call on session end. */ + shutdown: () => void + + /** Return all entity IDs currently in the store (for testing). */ + listEntityIds: () => Promise +} + +/** + * Stable deterministic ID for a fact. If the same fact is extracted again + * it hashes to the same ID, so the engine deduplicates it by updating in place. + */ +export const factId = (content: string): string => + createHash("sha256").update(content.trim().toLowerCase().replace(/\s+/g, " ")).digest("hex").slice(0, 16) + +/** + * Format retrieved memories as a system prompt section. + */ +const formatContext = (memories: Array<{ id: string; content: string; score: number }>): string => { + if (memories.length === 0) return "" + + const lines = [ + "## Long-term Memory", + "", + "The following facts have been remembered from previous conversations with this user.", + "Use them to inform your responses naturally, without mentioning memory IDs or scores.", + "", + ...memories.map((m) => `- ${m.content}`), + "", + ] + + return lines.join("\n") +} + +/** + * Create a MemoryBridge backed by the zosma-mem salience engine. + */ +export const createMemoryBridge = (config: BridgeConfig): MemoryBridge => { + const engine: MemoryEngine = createMemoryEngine({ + memoryDir: config.memoryDir, + salienceThreshold: config.salienceThreshold, + // GC every 5 minutes in production. Tests override via config. + gcIntervalMs: 5 * 60 * 1000, + gcPruneCycles: 2, + }) + + const topK = config.topK ?? 8 + + const loadContext = async ( + userMessage: string, + ): Promise<{ context: string; ids: string[]; entities: Array<{ id: string; content: string }> }> => { + const results = await engine.retrieve({ taskDescription: userMessage }, topK) + + if (results.length === 0) return { context: "", ids: [], entities: [] } + + const memories = results.map((r) => ({ + id: r.entity.id, + content: r.entity.content, + score: r.attentionScore, + })) + + // Record ignored reads for entities that scored below threshold + // (returned in results but likely not relevant). The low score is the signal. + for (const r of results) { + if (r.attentionScore < 1) { + await engine.recordIgnoredRead(r.entity.id) + } + } + + const ids = memories.map((m) => m.id) + const entities = memories.map((m) => ({ id: m.id, content: m.content })) + return { context: formatContext(memories), ids, entities } + } + + const ingestFacts = async (facts: ExtractedFact[]): Promise => { + const now = Date.now() + for (const fact of facts) { + await engine.ingest({ + id: factId(fact.content), + type: fact.type, + content: fact.content, + tags: fact.tags, + timestamp: now, + }) + } + } + + const recordUsage = async (entityId: string, signal: "used" | "ignored" | "influenced_decision"): Promise => { + if (signal === "used") { + await engine.recordRead(entityId) + } else if (signal === "ignored") { + await engine.recordIgnoredRead(entityId) + } else { + await engine.recordDecisionInfluence(entityId) + } + } + + const gc = async (): Promise => { + await engine.gc() + } + + const shutdown = (): void => { + engine.shutdown() + } + + const listEntityIds = async (): Promise => engine.listEntities() + + return { loadContext, ingestFacts, recordUsage, gc, shutdown, listEntityIds } +} diff --git a/packages/zosma-mem/src/engine/__tests__/factory.test.ts b/packages/zosma-mem/src/engine/__tests__/factory.test.ts new file mode 100644 index 0000000..0f41d97 --- /dev/null +++ b/packages/zosma-mem/src/engine/__tests__/factory.test.ts @@ -0,0 +1,48 @@ +import { mkdtempSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { describe, expect, it } from "vitest" +import { createMemoryEngine } from "../factory.js" + +const NOW = 1_000_000_000_000 + +const makeDir = () => mkdtempSync(join(tmpdir(), "factory-test-")) + +describe("createMemoryEngine", () => { + it("ingest a decision event then retrieve it", async () => { + const memoryDir = makeDir() + const engine = createMemoryEngine({ memoryDir, gcIntervalMs: 0, now: () => NOW }) + await engine.ingest({ + id: "ev1", + type: "decision", + content: "use typescript for everything", + tags: ["typescript", "architecture"], + timestamp: NOW, + }) + const results = await engine.retrieve({ taskDescription: "typescript architecture" }, 5) + expect(results.some((r) => r.entity.id === "ev1")).toBe(true) + engine.shutdown() + }) + + it("shutdown does not throw", () => { + const memoryDir = makeDir() + const engine = createMemoryEngine({ memoryDir, gcIntervalMs: 0 }) + expect(() => engine.shutdown()).not.toThrow() + }) + + it("ingest + recordDecisionInfluence + retrieve: entity still appears", async () => { + const memoryDir = makeDir() + const engine = createMemoryEngine({ memoryDir, gcIntervalMs: 0, now: () => NOW }) + await engine.ingest({ + id: "ev2", + type: "decision", + content: "auth strategy", + tags: ["auth"], + timestamp: NOW, + }) + await engine.recordDecisionInfluence("ev2") + const results = await engine.retrieve({ taskDescription: "auth strategy" }, 5) + expect(results.some((r) => r.entity.id === "ev2")).toBe(true) + engine.shutdown() + }) +}) diff --git a/packages/zosma-mem/src/engine/__tests__/reinforcement.test.ts b/packages/zosma-mem/src/engine/__tests__/reinforcement.test.ts new file mode 100644 index 0000000..08c220b --- /dev/null +++ b/packages/zosma-mem/src/engine/__tests__/reinforcement.test.ts @@ -0,0 +1,71 @@ +import { mkdtempSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { describe, expect, it } from "vitest" +import { EntityStore } from "../../store/entity-store.js" +import type { MemoryEntity } from "../../types.js" +import { recordDecisionInfluence, recordIgnoredRead, recordRead } from "../reinforcement.js" + +const BASE_TS = 1_000_000_000_000 + +const makeEntity = (id: string): MemoryEntity => ({ + id, + source: { branch: "main", commitRef: "0" }, + score: { + reuseCount: 0, + decisionInfluence: 0, + ignoredReads: 0, + lastAccessed: BASE_TS, + attentionWeight: 0, + belowThresholdCycles: 0, + }, + tags: [], + content: "test", +}) + +const makeStore = (entity: MemoryEntity): EntityStore => { + const dir = mkdtempSync(join(tmpdir(), "reinforcement-test-")) + const store = new EntityStore(dir) + store.ensureDir() + store.write(entity) + return store +} + +describe("reinforcement", () => { + it("recordRead increments reuseCount and updates lastAccessed", () => { + const entity = makeEntity("e1") + const store = makeStore(entity) + const later = BASE_TS + 5000 + recordRead("e1", store, () => later) + const updated = store.read("e1")! + expect(updated.score.reuseCount).toBe(1) + expect(updated.score.lastAccessed).toBe(later) + }) + + it("recordIgnoredRead increments ignoredReads and does NOT update lastAccessed", () => { + const entity = makeEntity("e2") + const store = makeStore(entity) + recordIgnoredRead("e2", store) + const updated = store.read("e2")! + expect(updated.score.ignoredReads).toBe(1) + expect(updated.score.lastAccessed).toBe(BASE_TS) + }) + + it("recordDecisionInfluence increments decisionInfluence and updates lastAccessed", () => { + const entity = makeEntity("e3") + const store = makeStore(entity) + const later = BASE_TS + 9000 + recordDecisionInfluence("e3", store, () => later) + const updated = store.read("e3")! + expect(updated.score.decisionInfluence).toBe(1) + expect(updated.score.lastAccessed).toBe(later) + }) + + it("missing entity ID is a no-op", () => { + const entity = makeEntity("e4") + const store = makeStore(entity) + expect(() => recordRead("nonexistent", store)).not.toThrow() + expect(() => recordIgnoredRead("nonexistent", store)).not.toThrow() + expect(() => recordDecisionInfluence("nonexistent", store)).not.toThrow() + }) +}) diff --git a/packages/zosma-mem/src/engine/factory.ts b/packages/zosma-mem/src/engine/factory.ts new file mode 100644 index 0000000..e7ed2f8 --- /dev/null +++ b/packages/zosma-mem/src/engine/factory.ts @@ -0,0 +1,86 @@ +import { runGc } from "../gc/index.js" +import { CommitIndexer } from "../ingestion/commit-indexer.js" +import { ingest as doIngest } from "../ingestion/ingest.js" +import { retrieve as doRetrieve } from "../retrieval/retrieve.js" +import { loadCoAccess, saveCoAccess } from "../store/co-access.js" +import { EntityStore } from "../store/entity-store.js" +import type { AttentionQuery, MemoryConfig, MemoryEngine, MemoryEvent } from "../types.js" +import { recordDecisionInfluence, recordIgnoredRead, recordRead } from "./reinforcement.js" + +/** + * Create a fully wired MemoryEngine instance. + * This is the primary entry point for all memory operations. + */ +export const createMemoryEngine = (config: MemoryConfig): MemoryEngine => { + const resolved = { + memoryDir: config.memoryDir, + salienceThreshold: config.salienceThreshold ?? 0.4, + gcIntervalMs: config.gcIntervalMs ?? 3_600_000, + gcPruneCycles: config.gcPruneCycles ?? 1, + summarizer: config.summarizer, + now: config.now, + } + const store = new EntityStore(resolved.memoryDir) + store.ensureDir() + + const getNow = resolved.now ?? Date.now + + const coAccess = loadCoAccess(resolved.memoryDir) + + const indexer = new CommitIndexer({ + memoryDir: resolved.memoryDir, + store, + salienceConfig: { salienceThreshold: resolved.salienceThreshold, now: resolved.now }, + }) + + let gcTimer: ReturnType | undefined + if (resolved.gcIntervalMs > 0) { + gcTimer = setInterval(() => { + void engine.gc() + }, resolved.gcIntervalMs) + gcTimer.unref?.() + } + + const engine: MemoryEngine = { + ingest: async (event: MemoryEvent) => { + doIngest(event, store, { salienceThreshold: resolved.salienceThreshold, now: getNow }) + }, + + reindex: async () => { + return indexer.reindexAll() + }, + + retrieve: async (query: AttentionQuery, topK = 5) => { + const results = doRetrieve(query, store, coAccess, { now: getNow }, topK) + saveCoAccess(resolved.memoryDir, coAccess) + return results + }, + + recordRead: async (entityId: string) => { + recordRead(entityId, store, getNow) + }, + + recordIgnoredRead: async (entityId: string) => { + recordIgnoredRead(entityId, store) + }, + + recordDecisionInfluence: async (entityId: string) => { + recordDecisionInfluence(entityId, store, getNow) + }, + + gc: async () => { + const report = runGc(store, coAccess, resolved, getNow) + saveCoAccess(resolved.memoryDir, coAccess) + return report + }, + + listEntities: async () => store.list(), + + shutdown: () => { + if (gcTimer) clearInterval(gcTimer) + indexer.stopWatch() + }, + } + + return engine +} diff --git a/packages/zosma-mem/src/engine/index.ts b/packages/zosma-mem/src/engine/index.ts new file mode 100644 index 0000000..57d6054 --- /dev/null +++ b/packages/zosma-mem/src/engine/index.ts @@ -0,0 +1,3 @@ +export { computeSalience, meetsThreshold, initialScore } from "./salience.js" +export { recordRead, recordIgnoredRead, recordDecisionInfluence } from "./reinforcement.js" +export { createMemoryEngine } from "./factory.js" diff --git a/packages/zosma-mem/src/engine/reinforcement.ts b/packages/zosma-mem/src/engine/reinforcement.ts new file mode 100644 index 0000000..2efd97b --- /dev/null +++ b/packages/zosma-mem/src/engine/reinforcement.ts @@ -0,0 +1,41 @@ +import type { EntityStore } from "../store/entity-store.js" + +/** + * Record that an entity was retrieved and acted upon by the agent. + * Increments reuseCount and updates lastAccessed. + */ +export const recordRead = (entityId: string, store: EntityStore, now: () => number = Date.now): void => { + const entity = store.read(entityId) + if (!entity) return + store.write({ + ...entity, + score: { ...entity.score, reuseCount: entity.score.reuseCount + 1, lastAccessed: now() }, + }) +} + +/** + * Record that an entity was retrieved but the agent did not act on it. + * Increments ignoredReads. + */ +export const recordIgnoredRead = (entityId: string, store: EntityStore): void => { + const entity = store.read(entityId) + if (!entity) return + store.write({ ...entity, score: { ...entity.score, ignoredReads: entity.score.ignoredReads + 1 } }) +} + +/** + * Record that an entity directly influenced an agent decision or tool call. + * Strongest reinforcement signal: increments decisionInfluence and updates lastAccessed. + */ +export const recordDecisionInfluence = (entityId: string, store: EntityStore, now: () => number = Date.now): void => { + const entity = store.read(entityId) + if (!entity) return + store.write({ + ...entity, + score: { + ...entity.score, + decisionInfluence: entity.score.decisionInfluence + 1, + lastAccessed: now(), + }, + }) +} diff --git a/packages/zosma-mem/src/engine/salience.ts b/packages/zosma-mem/src/engine/salience.ts new file mode 100644 index 0000000..9331abe --- /dev/null +++ b/packages/zosma-mem/src/engine/salience.ts @@ -0,0 +1,23 @@ +import type { MemoryScore } from "../types.js" + +/** + * Compute the salience score for a memory entity. + * S(e) = 2*reuseCount + 5*decisionInfluence - 2*ignoredReads - ln(1 + ageDays) + * ageDays is computed from lastAccessed using the injectable now(). + */ +export const computeSalience = (score: MemoryScore, now: () => number = Date.now): number => { + const ageDays = (now() - score.lastAccessed) / 86_400_000 + const decay = Math.log(1 + ageDays) + return 2 * score.reuseCount + 5 * score.decisionInfluence - 2 * score.ignoredReads - decay +} + +export const meetsThreshold = (salience: number, threshold: number): boolean => salience >= threshold + +export const initialScore = (eventType: string, now: () => number = Date.now): MemoryScore => ({ + reuseCount: 0, + decisionInfluence: eventType === "decision" ? 1 : 0, + ignoredReads: 0, + lastAccessed: now(), + attentionWeight: eventType === "decision" ? 1.0 : 0.0, + belowThresholdCycles: 0, +}) diff --git a/packages/zosma-mem/src/evals/__tests__/evals.test.ts b/packages/zosma-mem/src/evals/__tests__/evals.test.ts new file mode 100644 index 0000000..1d98238 --- /dev/null +++ b/packages/zosma-mem/src/evals/__tests__/evals.test.ts @@ -0,0 +1,93 @@ +import { describe, expect, it, vi } from "vitest" +import { computeMetrics, evaluateMemory } from "../eval.js" +import type { EvalTestCase, MemoryInterface } from "../types.js" + +describe("Memory Evaluation", () => { + it("should compute perfect recall and precision", () => { + const expected = ["id1", "id2"] + const retrieved = ["id1", "id2"] + const result = computeMetrics(expected, retrieved) + expect(result.recall).toBe(1) + expect(result.precision).toBe(1) + expect(result.f1).toBe(1) + expect(result.truePositives).toBe(2) + }) + + it("should compute zero recall for no matches", () => { + const expected = ["id1", "id2"] + const retrieved = ["id3", "id4"] + const result = computeMetrics(expected, retrieved) + expect(result.recall).toBe(0) + expect(result.precision).toBe(0) + expect(result.f1).toBe(0) + expect(result.truePositives).toBe(0) + }) + + it("should handle empty expected", () => { + const expected: string[] = [] + const retrieved = ["id1"] + const result = computeMetrics(expected, retrieved) + expect(result.recall).toBe(0) + expect(result.precision).toBe(0) + expect(result.f1).toBe(0) + }) + + it("should handle empty retrieved", () => { + const expected = ["id1"] + const retrieved: string[] = [] + const result = computeMetrics(expected, retrieved) + expect(result.recall).toBe(0) + expect(result.precision).toBe(0) // No retrieved, so precision is 0 (no true positives out of nothing) + expect(result.f1).toBe(0) + }) + + const mockLoadContext = vi.fn() + const mockMemory: MemoryInterface = { + loadContext: mockLoadContext, + } + + it("should evaluate multiple test cases", async () => { + const testCases: EvalTestCase[] = [ + { + query: "query1", + expectedIds: ["id1"], + expectedContent: [], + }, + { + query: "query2", + expectedIds: ["id2", "id3"], + expectedContent: [], + }, + ] + + // Mock responses + mockLoadContext.mockImplementation(async (query: string) => { + if (query === "query1") { + return { context: "context1", ids: ["id1"] } + } + return { context: "context2", ids: ["id2"] } + }) + + const results = await evaluateMemory(mockMemory, { testCases }) + + expect(results.metrics.avgRecall).toBe(0.75) // (1 + 0.5) / 2 + expect(results.metrics.avgPrecision).toBe(1) // (1 + 1) / 2 + expect(results.cases).toHaveLength(2) + expect(results.cases[0].recall).toBe(1) + expect(results.cases[1].recall).toBe(0.5) + }) + + it("should handle memory errors", async () => { + const testCases: EvalTestCase[] = [ + { + query: "failing query", + expectedIds: ["id1"], + expectedContent: [], + }, + ] + + mockLoadContext.mockRejectedValue(new Error("Memory error")) + + await expect(evaluateMemory(mockMemory, { testCases })).rejects.toThrow("Memory error") + }) +}) diff --git a/packages/zosma-mem/src/evals/eval.ts b/packages/zosma-mem/src/evals/eval.ts new file mode 100644 index 0000000..70c37a6 --- /dev/null +++ b/packages/zosma-mem/src/evals/eval.ts @@ -0,0 +1,81 @@ +import type { EvalConfig, EvalResults, MemoryInterface } from "./types.js" + +/** + * Run evaluation on a memory system using the provided test cases. + * Computes recall, precision, and F1 for retrieval effectiveness. + * + * Recall: ID-based — was the expected fact retrieved? + * Precision: content-based — does the retrieved context contain an expected answer snippet? + * This is more meaningful than ID-based precision because retrieval systems are designed + * to return broad context (topK > 1), and a retrieved fact that contains the answer is + * genuinely useful even if it is not the exact expected paragraph. + */ +export async function evaluateMemory(memory: MemoryInterface, config: EvalConfig): Promise { + const cases: EvalResults["cases"] = [] + + for (const testCase of config.testCases) { + const { context, ids: retrievedIds } = await memory.loadContext(testCase.query) + + const expectedIds = new Set(testCase.expectedIds) + const retrievedSet = new Set(retrievedIds) + + // Recall: fraction of expected IDs retrieved (ID-based) + const truePositives = [...expectedIds].filter((id) => retrievedSet.has(id)).length + const recall = expectedIds.size > 0 ? truePositives / expectedIds.size : 0 + + // Precision: content-based — does the retrieved context contain at least one + // expected answer snippet? This avoids unfairly penalising topK > 1 retrieval + // when the retrieved context is actually useful. + // Falls back to ID-based precision when expectedContent is empty. + let precision: number + if (testCase.expectedContent.length > 0) { + const contextLower = context.toLowerCase() + const anyAnswerFound = testCase.expectedContent.some((answer) => contextLower.includes(answer.toLowerCase())) + // Binary: 1 if context contains an answer, 0 otherwise. + // A system that retrieves the right content scores 1 regardless of how many + // other facts it also retrieves — consistent with real-world usefulness. + precision = anyAnswerFound ? 1 : 0 + } else { + // Fallback: strict ID-based precision + precision = retrievedIds.length > 0 ? truePositives / retrievedIds.length : 0 + } + + // F1 score + const f1 = recall + precision > 0 ? (2 * recall * precision) / (recall + precision) : 0 + + cases.push({ + query: testCase.query, + recall, + precision, + f1, + retrievedIds, + retrievedContext: context, + }) + } + + // Aggregate metrics + const avgRecall = cases.reduce((sum, c) => sum + c.recall, 0) / cases.length + const avgPrecision = cases.reduce((sum, c) => sum + c.precision, 0) / cases.length + const avgF1 = cases.reduce((sum, c) => sum + c.f1, 0) / cases.length + + return { + metrics: { avgRecall, avgPrecision, avgF1 }, + cases, + } +} + +/** + * Utility to compute individual metrics for a single test case. + * Useful for custom evaluations. + */ +export function computeMetrics(expectedIds: string[], retrievedIds: string[]) { + const expectedSet = new Set(expectedIds) + const retrievedSet = new Set(retrievedIds) + + const truePositives = [...expectedSet].filter((id) => retrievedSet.has(id)).length + const recall = expectedSet.size > 0 ? truePositives / expectedSet.size : 0 + const precision = retrievedIds.length > 0 ? truePositives / retrievedIds.length : 0 + const f1 = recall + precision > 0 ? (2 * recall * precision) / (recall + precision) : 0 + + return { recall, precision, f1, truePositives } +} diff --git a/packages/zosma-mem/src/evals/index.ts b/packages/zosma-mem/src/evals/index.ts new file mode 100644 index 0000000..df53650 --- /dev/null +++ b/packages/zosma-mem/src/evals/index.ts @@ -0,0 +1,2 @@ +export * from "./types.js" +export * from "./eval.js" diff --git a/packages/zosma-mem/src/evals/types.ts b/packages/zosma-mem/src/evals/types.ts new file mode 100644 index 0000000..46f20e9 --- /dev/null +++ b/packages/zosma-mem/src/evals/types.ts @@ -0,0 +1,66 @@ +/** + * Agnostic evaluation interfaces for memory retrieval systems. + * Allows any TypeScript memory implementation to be evaluated for effectiveness. + */ + +/** + * Interface that memory systems must implement to be evaluated. + * Agnostic to the underlying storage (file-based, DB, etc.). + */ +export interface MemoryInterface { + /** + * Retrieve context and entity IDs for a given query. + * @param query The user query string. + * @returns Promise resolving to retrieved context and IDs. + */ + loadContext(query: string): Promise<{ context: string; ids: string[] }> +} + +/** + * A test case for evaluation. + */ +export interface EvalTestCase { + /** The query to test retrieval on. */ + query: string + /** Expected entity IDs that should be retrieved (for recall). */ + expectedIds: string[] + /** Expected content snippets that should appear in context (for relevance). */ + expectedContent: string[] +} + +/** + * Results of running an evaluation. + */ +export interface EvalResults { + /** Overall metrics. */ + metrics: { + /** Average recall across test cases (0-1). */ + avgRecall: number + /** Average precision across test cases (0-1). */ + avgPrecision: number + /** Average F1 score. */ + avgF1: number + } + /** Per-test-case results. */ + cases: Array<{ + query: string + recall: number + precision: number + f1: number + retrievedIds: string[] + retrievedContext: string + }> +} + +/** + * Configuration for evaluation. + */ +export interface EvalConfig { + /** Test cases to run. */ + testCases: EvalTestCase[] + /** Optional: Minimum salience or other thresholds. */ + options?: { + /** Whether to check for expected content in context. */ + checkContent?: boolean + } +} diff --git a/packages/zosma-mem/src/gc/__tests__/gc.test.ts b/packages/zosma-mem/src/gc/__tests__/gc.test.ts new file mode 100644 index 0000000..0f7e528 --- /dev/null +++ b/packages/zosma-mem/src/gc/__tests__/gc.test.ts @@ -0,0 +1,96 @@ +import { mkdtempSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { describe, expect, it } from "vitest" +import { EntityStore } from "../../store/entity-store.js" +import type { MemoryEntity } from "../../types.js" +import { decayAll } from "../decay.js" +import { runGc } from "../index.js" +import { pruneBelow } from "../prune.js" + +const NOW = 1_000_000_000_000 +const DAY_MS = 86_400_000 + +const makeEntity = ( + id: string, + lastAccessedOffset = 0, + reuseCount = 0, + decisionInfluence = 0, + belowThresholdCycles = 0, +): MemoryEntity => ({ + id, + source: { branch: "main", commitRef: "0" }, + score: { + reuseCount, + decisionInfluence, + ignoredReads: 0, + lastAccessed: NOW - lastAccessedOffset, + attentionWeight: 0, + belowThresholdCycles, + }, + tags: [], + content: `content ${id}`, +}) + +const makeStore = (...entities: MemoryEntity[]): EntityStore => { + const dir = mkdtempSync(join(tmpdir(), "gc-test-")) + const store = new EntityStore(dir) + store.ensureDir() + for (const e of entities) store.write(e) + return store +} + +describe("decayAll", () => { + it("entity with 30-day-old lastAccessed gets lower attentionWeight than fresh entity", () => { + const fresh = makeEntity("fresh", 0) + const stale = makeEntity("stale", 30 * DAY_MS) + const store = makeStore(fresh, stale) + decayAll(store, () => NOW) + const freshUpdated = store.read("fresh")! + const staleUpdated = store.read("stale")! + expect(freshUpdated.score.attentionWeight).toBeGreaterThanOrEqual(staleUpdated.score.attentionWeight) + }) +}) + +describe("pruneBelow", () => { + it("entity below threshold for pruneCycles is archived", () => { + // salience: 2*0 + 5*0 - 2*0 - ln(1+100) ≈ -4.6 → below 0.4 + const entity = makeEntity("old", 100 * DAY_MS, 0, 0, 2) // belowThresholdCycles=2, pruneCycles=3 + const store = makeStore(entity) + const pruned = pruneBelow(store, 0.4, 3, () => NOW) + expect(pruned).toBe(1) + expect(store.read("old")).toBeUndefined() + }) + + it("entity below threshold for fewer than pruneCycles cycles is NOT archived", () => { + const entity = makeEntity("young-stale", 50 * DAY_MS, 0, 0, 0) + const store = makeStore(entity) + const pruned = pruneBelow(store, 0.4, 3, () => NOW) + expect(pruned).toBe(0) + const updated = store.read("young-stale")! + expect(updated.score.belowThresholdCycles).toBe(1) + }) +}) + +describe("runGc", () => { + it("integrates decay and prune, returns correct report", () => { + // fresh: reuseCount=5, decisionInfluence=2 → salience = 10+10 - ln(1) = 20 → above threshold + const fresh = makeEntity("fresh", 0, 5, 2) + // stale: below threshold for 2 cycles already, third cycle archives it + const stale = makeEntity("stale", 100 * DAY_MS, 0, 0, 2) + const store = makeStore(fresh, stale) + const coAccess = {} + const config = { + memoryDir: "", + salienceThreshold: 0.4, + gcIntervalMs: 0, + gcPruneCycles: 3, + summarizer: undefined, + now: undefined, + } + const report = runGc(store, coAccess, config, () => NOW) + expect(report.decayed).toBe(2) + expect(report.pruned).toBe(1) + expect(report.consolidated).toBe(0) + }) +}) diff --git a/packages/zosma-mem/src/gc/consolidate.ts b/packages/zosma-mem/src/gc/consolidate.ts new file mode 100644 index 0000000..9be7524 --- /dev/null +++ b/packages/zosma-mem/src/gc/consolidate.ts @@ -0,0 +1,12 @@ +import type { CoAccessGraph } from "../store/co-access.js" +import type { EntityStore } from "../store/entity-store.js" +import type { MemoryConfig } from "../types.js" + +/** Merge co-access clusters where all members are below threshold. MVP: no-op, returns 0. */ +export const consolidateClusters = async ( + _store: EntityStore, + _coAccess: CoAccessGraph, + _config: Pick, +): Promise => { + return 0 +} diff --git a/packages/zosma-mem/src/gc/decay.ts b/packages/zosma-mem/src/gc/decay.ts new file mode 100644 index 0000000..e5ea63a --- /dev/null +++ b/packages/zosma-mem/src/gc/decay.ts @@ -0,0 +1,16 @@ +import { computeSalience } from "../engine/salience.js" +import type { EntityStore } from "../store/entity-store.js" + +/** Recompute salience for all entities. Updates score.attentionWeight. Returns count of updated entities. */ +export const decayAll = (store: EntityStore, now: () => number): number => { + const ids = store.list() + let count = 0 + for (const id of ids) { + const entity = store.read(id) + if (!entity) continue + const newSalience = computeSalience(entity.score, now) + store.write({ ...entity, score: { ...entity.score, attentionWeight: Math.max(0, newSalience) } }) + count++ + } + return count +} diff --git a/packages/zosma-mem/src/gc/index.ts b/packages/zosma-mem/src/gc/index.ts new file mode 100644 index 0000000..e9699da --- /dev/null +++ b/packages/zosma-mem/src/gc/index.ts @@ -0,0 +1,22 @@ +import type { CoAccessGraph } from "../store/co-access.js" +import type { EntityStore } from "../store/entity-store.js" +import type { GcReport, MemoryConfig } from "../types.js" +import { consolidateClusters } from "./consolidate.js" +import { decayAll } from "./decay.js" +import { pruneBelow } from "./prune.js" + +export const runGc = ( + store: EntityStore, + coAccess: CoAccessGraph, + config: Required> & Pick, + now: () => number, +): GcReport => { + const decayed = decayAll(store, now) + const pruned = pruneBelow(store, config.salienceThreshold, config.gcPruneCycles, now) + void consolidateClusters(store, coAccess, { + salienceThreshold: config.salienceThreshold, + summarizer: config.summarizer, + now: config.now, + }) + return { decayed, pruned, consolidated: 0 } +} diff --git a/packages/zosma-mem/src/gc/prune.ts b/packages/zosma-mem/src/gc/prune.ts new file mode 100644 index 0000000..f63b227 --- /dev/null +++ b/packages/zosma-mem/src/gc/prune.ts @@ -0,0 +1,27 @@ +import { computeSalience } from "../engine/salience.js" +import type { EntityStore } from "../store/entity-store.js" + +/** Archive entities that have been below threshold for gcPruneCycles consecutive cycles. */ +export const pruneBelow = (store: EntityStore, threshold: number, pruneCycles: number, now: () => number): number => { + const ids = store.list() + let pruned = 0 + for (const id of ids) { + const entity = store.read(id) + if (!entity) continue + const salience = computeSalience(entity.score, now) + if (salience < threshold) { + const cycles = entity.score.belowThresholdCycles + 1 + if (cycles >= pruneCycles) { + store.archive(id) + pruned++ + } else { + store.write({ ...entity, score: { ...entity.score, belowThresholdCycles: cycles } }) + } + } else { + if (entity.score.belowThresholdCycles > 0) { + store.write({ ...entity, score: { ...entity.score, belowThresholdCycles: 0 } }) + } + } + } + return pruned +} diff --git a/packages/zosma-mem/src/index.ts b/packages/zosma-mem/src/index.ts new file mode 100644 index 0000000..a98325e --- /dev/null +++ b/packages/zosma-mem/src/index.ts @@ -0,0 +1,16 @@ +export * from "./engine/index.js" +export * from "./types.js" + +// Brain adapter +export { parseCommits, listBranches, readCommitsRaw, readState } from "./brain-adapter.js" +export type { ParsedCommit, BrainState } from "./brain-adapter.js" + +// Commit indexer +export { CommitIndexer } from "./ingestion/commit-indexer.js" +export type { IndexerConfig } from "./ingestion/commit-indexer.js" + +// Event bus / ingestion +export { ingest } from "./ingestion/ingest.js" + +// Evals +export * from "./evals/index.js" diff --git a/packages/zosma-mem/src/ingestion/__tests__/commit-indexer.test.ts b/packages/zosma-mem/src/ingestion/__tests__/commit-indexer.test.ts new file mode 100644 index 0000000..b86d4a1 --- /dev/null +++ b/packages/zosma-mem/src/ingestion/__tests__/commit-indexer.test.ts @@ -0,0 +1,96 @@ +import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { beforeEach, describe, expect, it } from "vitest" +import { CommitIndexer } from "../../ingestion/commit-indexer.js" +import { EntityStore } from "../../store/entity-store.js" + +const mkTempDir = (): string => mkdtempSync(join(tmpdir(), "commit-indexer-test-")) + +const makeMemoryDir = (dir: string): string => { + const memDir = join(dir, ".memory") + mkdirSync(join(memDir, ".salience"), { recursive: true }) + return memDir +} + +const makeCommitsFile = (memDir: string, branch: string, content: string): void => { + mkdirSync(join(memDir, "branches", branch), { recursive: true }) + writeFileSync(join(memDir, "branches", branch, "commits.md"), content) +} + +describe("CommitIndexer", () => { + let dir: string + let memDir: string + let store: EntityStore + let indexer: CommitIndexer + + beforeEach(() => { + dir = mkTempDir() + memDir = makeMemoryDir(dir) + store = new EntityStore(memDir) + store.ensureDir() + indexer = new CommitIndexer({ memoryDir: memDir, store, salienceConfig: {} }) + }) + + it("indexBranch returns 0 when commits.md missing", () => { + expect(indexer.indexBranch("main")).toBe(0) + }) + + it("indexBranch ingests commits as entities", () => { + const raw = [ + "## Commit abc12345 | 2026-04-01T12:00:00.000Z", + "", + "Use JWT tokens for authentication with refresh support", + "", + "---", + "", + "## Commit def67890 | 2026-04-02T12:00:00.000Z", + "", + "Add retry logic for API calls with exponential backoff", + "", + ].join("\n") + makeCommitsFile(memDir, "main", raw) + + const count = indexer.indexBranch("main") + expect(count).toBe(2) + + const ids = store.list() + expect(ids).toContain("main-abc12345") + expect(ids).toContain("main-def67890") + }) + + it("indexBranch is idempotent — re-indexing skips already-processed commits", () => { + const raw = "## Commit abc12345 | 2026-04-01T12:00:00.000Z\n\nSome content\n" + makeCommitsFile(memDir, "main", raw) + + const first = indexer.indexBranch("main") + const second = indexer.indexBranch("main") + + expect(first).toBe(1) + expect(second).toBe(0) + }) + + it("reindexAll processes multiple branches", async () => { + const commit1 = "## Commit aaaa0001 | 2026-04-01T12:00:00.000Z\n\nMain branch content\n" + const commit2 = "## Commit bbbb0002 | 2026-04-01T12:00:00.000Z\n\nFeature branch content\n" + makeCommitsFile(memDir, "main", commit1) + makeCommitsFile(memDir, "feature-auth", commit2) + + const total = await indexer.reindexAll() + expect(total).toBe(2) + + const ids = store.list() + expect(ids).toContain("main-aaaa0001") + expect(ids).toContain("feature-auth-bbbb0002") + }) + + it("entity from indexed commit has correct branch source metadata", () => { + const raw = "## Commit abc12345 | 2026-04-01T12:00:00.000Z\n\nAuth content\n" + makeCommitsFile(memDir, "main", raw) + indexer.indexBranch("main") + + const entity = store.read("main-abc12345") + expect(entity?.source.branch).toBe("main") + expect(entity?.source.commitRef).toBe("abc12345") + }) +}) diff --git a/packages/zosma-mem/src/ingestion/__tests__/ingest.test.ts b/packages/zosma-mem/src/ingestion/__tests__/ingest.test.ts new file mode 100644 index 0000000..a73491f --- /dev/null +++ b/packages/zosma-mem/src/ingestion/__tests__/ingest.test.ts @@ -0,0 +1,56 @@ +import { mkdtempSync, rmSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { afterEach, beforeEach, describe, expect, it } from "vitest" +import { EntityStore } from "../../store/entity-store.js" +import type { MemoryEvent } from "../../types.js" +import { ingest } from "../ingest.js" + +const makeEvent = (overrides: Partial = {}): MemoryEvent => ({ + id: "test-entity", + type: "pattern", + content: "Some content", + tags: ["tag-a"], + timestamp: Date.now(), + ...overrides, +}) + +let dir: string +let store: EntityStore + +describe("ingest", () => { + beforeEach(() => { + dir = mkdtempSync(join(tmpdir(), "ingest-test-")) + store = new EntityStore(dir) + store.ensureDir() + }) + + afterEach(() => { + rmSync(dir, { recursive: true, force: true }) + }) + + it("always persists regardless of event type", () => { + for (const type of ["pattern", "error", "preference", "decision"] as const) { + const event = makeEvent({ id: `ev-${type}`, type }) + const result = ingest(event, store, {}) + expect(result).toBe(true) + expect(store.read(`ev-${type}`)).toBeDefined() + } + }) + + it("upsert: second ingest with same id updates content", () => { + ingest(makeEvent({ id: "upsert-me", content: "original" }), store, {}) + ingest(makeEvent({ id: "upsert-me", content: "updated" }), store, {}) + const entity = store.read("upsert-me") + expect(entity?.content).toBe("updated") + }) + + it("preserves existing score on upsert", () => { + ingest(makeEvent({ id: "score-preserve" }), store, {}) + const first = store.read("score-preserve")! + store.write({ ...first, score: { ...first.score, reuseCount: 5 } }) + ingest(makeEvent({ id: "score-preserve", content: "new content" }), store, {}) + const second = store.read("score-preserve")! + expect(second.score.reuseCount).toBe(5) + }) +}) diff --git a/packages/zosma-mem/src/ingestion/commit-indexer.ts b/packages/zosma-mem/src/ingestion/commit-indexer.ts new file mode 100644 index 0000000..58fe864 --- /dev/null +++ b/packages/zosma-mem/src/ingestion/commit-indexer.ts @@ -0,0 +1,245 @@ +/** + * CommitIndexer — bridges pi-brain commits.md files into the salience entity store. + * + * Responsibilities: + * - Walk all (or a single) pi-brain branch commits.md files + * - Parse each commit block into a MemoryEntity via the brain adapter + * - Ingest the entity through the salience engine + * - Track processed commit hashes so re-running is idempotent + * - Optionally watch commits.md files with chokidar for live updates + * + * Entity IDs are namespaced: "-" to avoid collisions. + * Co-mingled branch entities are handled naturally — the namespace keeps them distinct. + * + * Indexed refs are persisted in .salience/indexed.json: + * { "main": ["abc12345", "def67890"], "feature-x": ["xyz99999"] } + */ + +import { existsSync, readFileSync, writeFileSync } from "node:fs" +import { join } from "node:path" +import type { FSWatcher } from "chokidar" +import chokidar from "chokidar" +import pLimit from "p-limit" +import { listBranches, parseCommits, readCommitsRaw } from "../brain-adapter.js" +import type { EntityStore } from "../store/entity-store.js" +import type { MemoryConfig } from "../types.js" +import { ingest } from "./ingest.js" + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- + +export interface IndexerConfig { + memoryDir: string + store: EntityStore + salienceConfig: Pick + /** Max parallel branch indexing operations. Default: 4 */ + concurrency?: number +} + +type IndexedRefs = Record + +// --------------------------------------------------------------------------- +// CommitIndexer +// --------------------------------------------------------------------------- + +export class CommitIndexer { + private readonly memoryDir: string + private readonly indexedPath: string + private readonly store: EntityStore + private readonly salienceConfig: Pick + private readonly limit: ReturnType + private watcher: FSWatcher | null = null + + constructor(config: IndexerConfig) { + this.memoryDir = config.memoryDir + this.indexedPath = join(config.memoryDir, ".salience", "indexed.json") + this.store = config.store + this.salienceConfig = config.salienceConfig + this.limit = pLimit(config.concurrency ?? 4) + } + + // ------------------------------------------------------------------------- + // Indexed refs persistence + // ------------------------------------------------------------------------- + + private loadIndexedRefs = (): IndexedRefs => { + if (!existsSync(this.indexedPath)) return {} + try { + return JSON.parse(readFileSync(this.indexedPath, "utf-8")) as IndexedRefs + } catch { + return {} + } + } + + private saveIndexedRefs = (refs: IndexedRefs): void => { + writeFileSync(this.indexedPath, JSON.stringify(refs, null, 2), "utf-8") + } + + // ------------------------------------------------------------------------- + // Single-branch indexing + // ------------------------------------------------------------------------- + + /** + * Index new commits on a single branch. Already-processed commit hashes are + * skipped — safe to call repeatedly without duplicating entities. + * + * Returns the number of new entities ingested. + */ + indexBranch = (branch: string): number => { + const raw = readCommitsRaw(this.memoryDir, branch) + if (!raw.trim()) return 0 + + const refs = this.loadIndexedRefs() + const processed = new Set(refs[branch] ?? []) + const commits = parseCommits(raw, branch) + + let count = 0 + for (const commit of commits) { + if (processed.has(commit.hash)) continue + + const entityId = `${branch}-${commit.hash}` + ingest( + { + id: entityId, + type: "decision", + content: commit.content || `Commit ${commit.hash} on ${branch}`, + tags: extractTagsFromContent(commit.content, branch), + metadata: { + branch: commit.branch, + commitRef: commit.hash, + }, + timestamp: parseTimestamp(commit.timestamp), + }, + this.store, + this.salienceConfig, + ) + + processed.add(commit.hash) + count++ + } + + if (count > 0) { + refs[branch] = [...processed] + this.saveIndexedRefs(refs) + } + + return count + } + + // ------------------------------------------------------------------------- + // All-branch reindex + // ------------------------------------------------------------------------- + + /** + * Re-index all pi-brain branches. Idempotent — already-processed commits + * are skipped. Returns the total count of newly ingested entities. + */ + reindexAll = async (): Promise => { + const branches = listBranches(this.memoryDir) + if (branches.length === 0) return 0 + + const counts = await Promise.all(branches.map((branch) => this.limit(() => this.indexBranch(branch)))) + return counts.reduce((sum, n) => sum + n, 0) + } + + // ------------------------------------------------------------------------- + // Chokidar watch + // ------------------------------------------------------------------------- + + /** + * Start watching all commits.md files for changes. When pi-brain writes a new + * commit the indexer automatically processes it. + * + * The provided callback receives the branch name and count of new entities each + * time new commits are indexed. + */ + watch = (onChange?: (branch: string, newCount: number) => void): void => { + if (this.watcher) return + + const pattern = join(this.memoryDir, "branches", "**", "commits.md") + this.watcher = chokidar.watch(pattern, { ignoreInitial: true, persistent: false }) + + this.watcher.on("change", (filePath: string) => { + // Extract branch name from path: .memory/branches//commits.md + const parts = (filePath as string).split(/[/\\]/) + const branchesIdx = parts.lastIndexOf("branches") + if (branchesIdx === -1 || branchesIdx + 1 >= parts.length) return + const branch = parts[branchesIdx + 1] + const count = this.indexBranch(branch) + if (count > 0 && onChange) onChange(branch, count) + }) + } + + /** + * Stop watching. Safe to call when no watcher is active. + */ + stopWatch = (): void => { + if (this.watcher) { + void this.watcher.close() + this.watcher = null + } + } +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** + * Extract keyword tags from commit content + branch name. + * Keeps words > 3 chars, lowercased, deduped, max 20 tags. + */ +const STOP = new Set([ + "the", + "and", + "for", + "are", + "was", + "has", + "have", + "been", + "will", + "this", + "that", + "with", + "from", + "they", + "not", + "but", + "its", + "into", + "more", + "also", + "some", + "than", + "then", + "when", + "where", + "what", + "which", + "how", + "would", +]) + +const extractTagsFromContent = (content: string, branch: string): string[] => { + const branchParts = branch + .replace(/[-_]/g, " ") + .split(" ") + .filter((t) => t.length > 2) + + const tokens = content + .toLowerCase() + .replace(/[^a-z0-9\s]/g, " ") + .split(/\s+/) + .filter((t) => t.length > 3 && !STOP.has(t)) + + const all = [...new Set([...branchParts, ...tokens])] + all.sort((a, b) => b.length - a.length) + return all.slice(0, 20) +} + +const parseTimestamp = (ts: string): number => { + const d = new Date(ts) + return Number.isNaN(d.getTime()) ? Date.now() : d.getTime() +} diff --git a/packages/zosma-mem/src/ingestion/index.ts b/packages/zosma-mem/src/ingestion/index.ts new file mode 100644 index 0000000..cea16f0 --- /dev/null +++ b/packages/zosma-mem/src/ingestion/index.ts @@ -0,0 +1,3 @@ +export { ingest } from "./ingest.js" +export { CommitIndexer } from "./commit-indexer.js" +export type { IndexerConfig } from "./commit-indexer.js" diff --git a/packages/zosma-mem/src/ingestion/ingest.ts b/packages/zosma-mem/src/ingestion/ingest.ts new file mode 100644 index 0000000..c5ab961 --- /dev/null +++ b/packages/zosma-mem/src/ingestion/ingest.ts @@ -0,0 +1,44 @@ +import { initialScore } from "../engine/salience.js" +import type { EntityStore } from "../store/entity-store.js" +import type { MemoryConfig, MemoryEntity, MemoryEvent } from "../types.js" + +/** + * Ingest a MemoryEvent. Always persists (upsert). The threshold is enforced + * during GC pruning, not at ingestion time — every event type is stored. + * + * Conflict resolution: when re-ingesting an existing entity with changed + * content, `lastAccessed` is refreshed so the updated version ranks above + * the stale version in time-sensitive queries. + * + * Returns true always (kept for interface compatibility). + */ +export const ingest = ( + event: MemoryEvent, + store: EntityStore, + config: Pick, +): boolean => { + const nowFn = config.now ?? Date.now + const existing = store.read(event.id) + + let score = existing?.score ?? initialScore(event.type, nowFn) + + // Conflict resolution: if content changed, treat the entity as freshly + // accessed so its time-decay resets and it outranks the stale version. + if (existing && existing.content !== event.content) { + score = { ...score, lastAccessed: nowFn(), belowThresholdCycles: 0 } + } + + const entity: MemoryEntity = { + id: event.id, + source: { + branch: event.metadata?.branch ?? "main", + commitRef: event.metadata?.commitRef ?? "0", + }, + score, + tags: event.tags, + content: event.content, + } + + store.write(entity) + return true +} diff --git a/packages/zosma-mem/src/retrieval/__tests__/retrieve.test.ts b/packages/zosma-mem/src/retrieval/__tests__/retrieve.test.ts new file mode 100644 index 0000000..586b2de --- /dev/null +++ b/packages/zosma-mem/src/retrieval/__tests__/retrieve.test.ts @@ -0,0 +1,87 @@ +import { mkdtempSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { describe, expect, it } from "vitest" +import type { CoAccessGraph } from "../../store/co-access.js" +import { EntityStore } from "../../store/entity-store.js" +import type { MemoryEntity } from "../../types.js" +import { retrieve } from "../retrieve.js" + +const NOW = 1_000_000_000_000 +const nowFn = () => NOW + +const makeEntity = ( + id: string, + tags: string[], + reuseCount = 0, + decisionInfluence = 0, + ignoredReads = 0, + lastAccessed = NOW, +): MemoryEntity => ({ + id, + source: { branch: "main", commitRef: "0" }, + score: { + reuseCount, + decisionInfluence, + ignoredReads, + lastAccessed, + attentionWeight: 0, + belowThresholdCycles: 0, + }, + tags, + content: `content of ${id}`, +}) + +const makeStore = (entities: MemoryEntity[]): EntityStore => { + const dir = mkdtempSync(join(tmpdir(), "retrieve-test-")) + const store = new EntityStore(dir) + store.ensureDir() + for (const e of entities) store.write(e) + return store +} + +describe("retrieve", () => { + it("matching entities rank first", () => { + const entities = [ + makeEntity("a", ["typescript", "auth"]), + makeEntity("b", ["database", "sql"]), + makeEntity("c", ["typescript", "config"]), + makeEntity("d", ["logging"]), + makeEntity("e", ["typescript", "auth", "config"]), + ] + const store = makeStore(entities) + const coAccess: CoAccessGraph = {} + const results = retrieve({ taskDescription: "typescript auth config" }, store, coAccess, { now: nowFn }, 3) + const ids = results.map((r) => r.entity.id) + // e has 3 matching tags, a and c have 2 each; b and d have none + expect(ids).toContain("e") + expect(ids).not.toContain("b") + expect(ids).not.toContain("d") + }) + + it("high tag overlap beats high salience with no overlap", () => { + // High salience but NO tag overlap: reuseCount=1, decisionInfluence=0 → salience ≈ 2 + const highSalience = makeEntity("salience", [], 1, 0) + // Two tag matches → tagOverlap score = 3*2 = 6, which exceeds salience entity's 2 + const tagMatch = makeEntity("tagmatch", ["typescript", "auth"]) + const store = makeStore([highSalience, tagMatch]) + const coAccess: CoAccessGraph = {} + const results = retrieve({ taskDescription: "typescript auth" }, store, coAccess, { now: nowFn }, 1) + expect(results[0].entity.id).toBe("tagmatch") + }) + + it("co-access boost: after two entities retrieved together, querying one surfaces the other", () => { + const entities = [makeEntity("x", ["foo"]), makeEntity("y", ["bar"]), makeEntity("z", ["baz"])] + const store = makeStore(entities) + const coAccess: CoAccessGraph = {} + + // First retrieval: x and y are co-retrieved + retrieve({ taskDescription: "foo bar" }, store, coAccess, { now: nowFn }, 2) + + // Now query only for 'foo' — y should get co-access boost because it was retrieved with x + const secondResults = retrieve({ taskDescription: "foo" }, store, coAccess, { now: nowFn }, 3) + const ids = secondResults.map((r) => r.entity.id) + expect(ids).toContain("x") + expect(ids).toContain("y") + }) +}) diff --git a/packages/zosma-mem/src/retrieval/index.ts b/packages/zosma-mem/src/retrieval/index.ts new file mode 100644 index 0000000..96ada25 --- /dev/null +++ b/packages/zosma-mem/src/retrieval/index.ts @@ -0,0 +1 @@ +export { retrieve } from "./retrieve.js" diff --git a/packages/zosma-mem/src/retrieval/retrieve.ts b/packages/zosma-mem/src/retrieval/retrieve.ts new file mode 100644 index 0000000..e599d9e --- /dev/null +++ b/packages/zosma-mem/src/retrieval/retrieve.ts @@ -0,0 +1,96 @@ +import { computeSalience } from "../engine/salience.js" +import type { CoAccessGraph } from "../store/co-access.js" +import { recordCoAccess } from "../store/co-access.js" +import type { EntityStore } from "../store/entity-store.js" +import type { AttentionQuery, MemoryConfig, ScoredEntity } from "../types.js" + +/** + * Attention score: + * A(q, e) = 3*taskOverlap(q, e) + 5*intentOverlap(q, e) + S(e) + coAccessBoost(e) + * + * taskOverlap — entity tags appearing in the query's task description text + * intentOverlap — entity tags matching explicit intent/hint tags (higher weight) + * + * Two-pass retrieval: + * Pass 1: score all entities by tagOverlap + salience, take top 2K candidates + * Pass 2: add coAccessBoost among candidates, re-sort, return top K + */ +export const retrieve = ( + query: AttentionQuery, + store: EntityStore, + coAccess: CoAccessGraph, + config: Pick, + topK = 5, +): ScoredEntity[] => { + const nowFn = config.now ?? Date.now + const taskTerms = new Set( + query.taskDescription + .toLowerCase() + .split(/\s+/) + .map((t) => t.replace(/[^a-z0-9]/g, "")) + .filter((t) => t.length > 0), + ) + // Intent tags (e.g. ["auth", "session"]) get a higher weight — they are + // explicit signals about what the agent is working on right now. + const intentTags: Set = query.intent + ? new Set( + query.intent + .toLowerCase() + .split(/\s+/) + .filter((t) => t.length > 0), + ) + : new Set() + + const ids = store.list() + if (ids.length === 0) return [] + + // Pass 1: base score + const candidates = ids + .map((id) => { + const entity = store.read(id) + if (!entity) return null + const taskOverlap = entity.tags.filter((t) => taskTerms.has(t.toLowerCase())).length + const intentOverlap = intentTags.size > 0 ? entity.tags.filter((t) => intentTags.has(t.toLowerCase())).length : 0 + const salience = computeSalience(entity.score, nowFn) + + // Context isolation: when intent tags are provided and the entity has + // zero overlap with both task terms AND intent tags, it is irrelevant to + // this query. Penalize it to prevent high-salience entities from leaking + // across context boundaries. + if (intentTags.size > 0 && taskOverlap === 0 && intentOverlap === 0) { + // Cap at a small negative value — ensures any entity with even one + // tag match outranks a high-salience but contextually irrelevant entity. + return { entity, baseScore: Math.min(salience * 0.05, -1) } + } + + return { entity, baseScore: 3 * taskOverlap + 5 * intentOverlap + salience } + }) + .filter(Boolean) as Array<{ + entity: NonNullable> + baseScore: number + }> + + candidates.sort((a, b) => b.baseScore - a.baseScore) + const pool = candidates.slice(0, Math.max(topK * 2, 10)) + const poolIds = new Set(pool.map((c) => c.entity.id)) + + // Pass 2: co-access boost + const scored: ScoredEntity[] = pool.map(({ entity, baseScore }) => { + const coBoost = (coAccess[entity.id] ?? []).some((coId) => poolIds.has(coId)) ? 1 : 0 + return { entity, attentionScore: baseScore + coBoost } + }) + + scored.sort((a, b) => b.attentionScore - a.attentionScore) + const results = scored.slice(0, topK) + + // Update co-access graph with this retrieval session + if (results.length > 1) { + const updatedGraph = recordCoAccess( + coAccess, + results.map((r) => r.entity.id), + ) + Object.assign(coAccess, updatedGraph) + } + + return results +} diff --git a/packages/zosma-mem/src/store/__tests__/entity-store.test.ts b/packages/zosma-mem/src/store/__tests__/entity-store.test.ts new file mode 100644 index 0000000..aa1cecf --- /dev/null +++ b/packages/zosma-mem/src/store/__tests__/entity-store.test.ts @@ -0,0 +1,64 @@ +import { mkdtempSync, rmSync } from "node:fs" +import { tmpdir } from "node:os" +import { join } from "node:path" +import { afterEach, beforeEach, describe, expect, it } from "vitest" +import type { MemoryEntity } from "../../types.js" +import { EntityStore } from "../entity-store.js" + +const makeEntity = (id: string): MemoryEntity => ({ + id, + content: `Content for ${id}`, + tags: ["tag-a", "tag-b"], + source: { branch: "main", commitRef: "42" }, + score: { + reuseCount: 3, + decisionInfluence: 1, + ignoredReads: 0, + lastAccessed: 1743897600000, + attentionWeight: 0.8, + belowThresholdCycles: 0, + }, +}) + +let dir: string +let store: EntityStore + +describe("EntityStore", () => { + beforeEach(() => { + dir = mkdtempSync(join(tmpdir(), "entity-store-test-")) + store = new EntityStore(dir) + store.ensureDir() + }) + + afterEach(() => { + rmSync(dir, { recursive: true, force: true }) + }) + + it("write and read back an entity with all fields preserved", () => { + const entity = makeEntity("auth-flow") + store.write(entity) + const result = store.read("auth-flow") + expect(result).toBeDefined() + expect(result?.id).toBe("auth-flow") + expect(result?.content).toBe(entity.content) + expect(result?.tags).toEqual(entity.tags) + expect(result?.source).toEqual(entity.source) + expect(result?.score).toEqual(entity.score) + }) + + it("list returns written entity id", () => { + store.write(makeEntity("my-entity")) + expect(store.list()).toContain("my-entity") + }) + + it("archive moves entity out of list", () => { + store.write(makeEntity("to-archive")) + expect(store.list()).toContain("to-archive") + store.archive("to-archive") + expect(store.list()).not.toContain("to-archive") + }) + + it("read of missing entity returns undefined", () => { + expect(store.read("nonexistent")).toBeUndefined() + }) +}) diff --git a/packages/zosma-mem/src/store/co-access.ts b/packages/zosma-mem/src/store/co-access.ts new file mode 100644 index 0000000..8878bc5 --- /dev/null +++ b/packages/zosma-mem/src/store/co-access.ts @@ -0,0 +1,26 @@ +import { existsSync, readFileSync, writeFileSync } from "node:fs" +import { join } from "node:path" + +export type CoAccessGraph = Record + +export const loadCoAccess = (memoryDir: string): CoAccessGraph => { + const p = join(memoryDir, "co-access.json") + if (!existsSync(p)) return {} + return JSON.parse(readFileSync(p, "utf-8")) as CoAccessGraph +} + +export const saveCoAccess = (memoryDir: string, graph: CoAccessGraph): void => { + writeFileSync(join(memoryDir, "co-access.json"), JSON.stringify(graph, null, 2), "utf-8") +} + +export const recordCoAccess = (graph: CoAccessGraph, entityIds: string[]): CoAccessGraph => { + const updated = { ...graph } + for (const a of entityIds) { + for (const b of entityIds) { + if (a === b) continue + if (!updated[a]) updated[a] = [] + if (!updated[a].includes(b)) updated[a].push(b) + } + } + return updated +} diff --git a/packages/zosma-mem/src/store/entity-store.ts b/packages/zosma-mem/src/store/entity-store.ts new file mode 100644 index 0000000..9f67203 --- /dev/null +++ b/packages/zosma-mem/src/store/entity-store.ts @@ -0,0 +1,44 @@ +import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "node:fs" +import { join } from "node:path" +import { parse as parseYaml, stringify as stringifyYaml } from "yaml" +import type { MemoryEntity } from "../types.js" + +export class EntityStore { + private readonly salienceDir: string + private readonly archiveDir: string + + constructor(memoryDir: string) { + this.salienceDir = join(memoryDir, ".salience") + this.archiveDir = join(memoryDir, ".salience", "archive") + } + + ensureDir = (): void => { + mkdirSync(this.salienceDir, { recursive: true }) + mkdirSync(this.archiveDir, { recursive: true }) + } + + read = (entityId: string): MemoryEntity | undefined => { + const p = this.idToPath(entityId) + if (!existsSync(p)) return undefined + return parseYaml(readFileSync(p, "utf-8")) as MemoryEntity + } + + write = (entity: MemoryEntity): void => { + writeFileSync(this.idToPath(entity.id), stringifyYaml(entity), "utf-8") + } + + list = (): string[] => { + if (!existsSync(this.salienceDir)) return [] + return readdirSync(this.salienceDir) + .filter((f) => f.endsWith(".yaml")) + .map((f) => f.slice(0, -5)) + } + + archive = (entityId: string): void => { + const src = this.idToPath(entityId) + const dst = join(this.archiveDir, `${entityId}.yaml`) + if (existsSync(src)) renameSync(src, dst) + } + + private idToPath = (entityId: string): string => join(this.salienceDir, `${entityId}.yaml`) +} diff --git a/packages/zosma-mem/src/store/index.ts b/packages/zosma-mem/src/store/index.ts new file mode 100644 index 0000000..fc8a3ae --- /dev/null +++ b/packages/zosma-mem/src/store/index.ts @@ -0,0 +1,3 @@ +export { EntityStore } from "./entity-store.js" +export { loadCoAccess, saveCoAccess, recordCoAccess } from "./co-access.js" +export type { CoAccessGraph } from "./co-access.js" diff --git a/packages/zosma-mem/src/types.ts b/packages/zosma-mem/src/types.ts new file mode 100644 index 0000000..b33bb18 --- /dev/null +++ b/packages/zosma-mem/src/types.ts @@ -0,0 +1,81 @@ +// Engine types +export type MemoryEventType = "decision" | "error" | "pattern" | "preference" + +export interface MemoryEvent { + id: string + type: MemoryEventType + content: string + tags: string[] + attentionWeight?: number + metadata?: { + file?: string + module?: string + relatedMemories?: string[] + branch?: string + commitRef?: string + } + timestamp: number +} + +export interface MemoryScore { + reuseCount: number + decisionInfluence: number + ignoredReads: number + lastAccessed: number + attentionWeight: number + belowThresholdCycles: number +} + +export interface MemoryEntity { + id: string + source: { branch: string; commitRef: string } + score: MemoryScore + tags: string[] + content: string +} + +export interface MemoryConfig { + memoryDir: string + salienceThreshold?: number + gcIntervalMs?: number + gcPruneCycles?: number + summarizer?: Summarizer + now?: () => number +} + +export type Summarizer = (texts: string[]) => Promise + +export interface AttentionQuery { + taskDescription: string + activeToolName?: string + intent?: string +} + +export interface ScoredEntity { + entity: MemoryEntity + attentionScore: number +} + +export interface GcReport { + decayed: number + pruned: number + consolidated: number +} + +export interface MemoryEngine { + ingest: (event: MemoryEvent) => Promise + /** + * Re-index all pi-brain branches in .memory/branches/. + * Idempotent — already-processed commits are skipped. + * Returns the number of newly ingested entities. + */ + reindex: () => Promise + retrieve: (query: AttentionQuery, topK?: number) => Promise + recordRead: (entityId: string) => Promise + recordIgnoredRead: (entityId: string) => Promise + recordDecisionInfluence: (entityId: string) => Promise + gc: () => Promise + shutdown: () => void + /** Return all persisted entity IDs (used by the eval adapter). */ + listEntities: () => Promise +} diff --git a/packages/memory/tsconfig.json b/packages/zosma-mem/tsconfig.json similarity index 72% rename from packages/memory/tsconfig.json rename to packages/zosma-mem/tsconfig.json index 12445ec..1560b4f 100644 --- a/packages/memory/tsconfig.json +++ b/packages/zosma-mem/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + "jsx": "react-jsx" }, "include": ["src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38d87ea..4ca9ed0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,172 +16,172 @@ importers: version: 4.21.0 turbo: specifier: ^2.8.19 - version: 2.8.19 + version: 2.9.6 apps/web: dependencies: '@hookform/resolvers': specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.71.2(react@19.2.4)) + version: 5.2.2(react-hook-form@7.72.1(react@19.2.5)) '@icons-pack/react-simple-icons': specifier: ^13.13.0 - version: 13.13.0(react@19.2.4) + version: 13.13.0(react@19.2.5) '@openzosma/agents': specifier: workspace:* version: link:../../packages/agents '@radix-ui/react-accordion': specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-alert-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-aspect-ratio': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-avatar': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-collapsible': specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-context-menu': specifier: ^2.2.16 - version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-hover-card': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-label': specifier: ^2.1.8 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-menubar': specifier: ^1.1.16 - version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-navigation-menu': specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-popover': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-progress': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-radio-group': specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-scroll-area': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-separator': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-slider': specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-slot': specifier: ^1.2.4 - version: 1.2.4(@types/react@19.2.14)(react@19.2.4) + version: 1.2.4(@types/react@19.2.14)(react@19.2.5) '@radix-ui/react-switch': specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-tabs': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-toggle': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-toggle-group': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-use-controllable-state': specifier: ^1.2.2 - version: 1.2.2(@types/react@19.2.14)(react@19.2.4) + version: 1.2.2(@types/react@19.2.14)(react@19.2.5) '@tabler/icons-react': specifier: ^3.35.0 - version: 3.40.0(react@19.2.4) + version: 3.41.1(react@19.2.5) '@tanstack/react-query': specifier: ^5.90.12 - version: 5.91.0(react@19.2.4) + version: 5.99.0(react@19.2.5) '@tanstack/react-table': specifier: ^8.21.3 - version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 8.21.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tiptap/core': specifier: ^3.20.4 - version: 3.20.4(@tiptap/pm@3.20.4) + version: 3.22.3(@tiptap/pm@3.22.3) '@tiptap/extension-color': specifier: ^3.20.4 - version: 3.20.4(@tiptap/extension-text-style@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))) + version: 3.22.3(@tiptap/extension-text-style@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))) '@tiptap/extension-heading': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-highlight': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-image': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-link': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) '@tiptap/extension-placeholder': specifier: ^3.20.4 - version: 3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) '@tiptap/extension-subscript': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) '@tiptap/extension-superscript': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) '@tiptap/extension-text-align': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-text-style': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-typography': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/extension-underline': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) '@tiptap/markdown': specifier: ^3.20.4 - version: 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + version: 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) '@tiptap/pm': specifier: ^3.20.4 - version: 3.20.4 + version: 3.22.3 '@tiptap/react': specifier: ^3.20.4 - version: 3.20.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.22.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tiptap/starter-kit': specifier: ^3.20.4 - version: 3.20.4 + version: 3.22.3 '@xyflow/react': specifier: ^12.10.0 - version: 12.10.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.10.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) ai: specifier: ^6.0.3 - version: 6.0.116(zod@4.3.6) + version: 6.0.158(zod@4.3.6) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 better-auth: specifier: ^1.4.1 - version: 1.5.5(mongodb@7.1.0(socks@2.8.7))(mysql2@3.20.0(@types/node@22.19.15))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.20.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.6.2(@opentelemetry/api@1.9.0)(mysql2@3.22.0(@types/node@22.19.17))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -190,67 +190,67 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) date-fns: specifier: ^4.1.0 version: 4.1.0 embla-carousel-react: specifier: ^8.6.0 - version: 8.6.0(react@19.2.4) + version: 8.6.0(react@19.2.5) framer-motion: specifier: ^12.23.24 - version: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) lucide-react: specifier: ^0.554.0 - version: 0.554.0(react@19.2.4) + version: 0.554.0(react@19.2.5) motion: specifier: ^12.23.25 - version: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) mysql2: specifier: ^3.18.2 - version: 3.20.0(@types/node@22.19.15) + version: 3.22.0(@types/node@22.19.17) nanoid: specifier: ^5.1.6 version: 5.1.7 next: specifier: ^16.2.3 - version: 16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) pg: specifier: ^8.16.3 version: 8.20.0 radix-ui: specifier: ^1.4.3 - version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: specifier: ^19.2.0 - version: 19.2.4 + version: 19.2.5 react-day-picker: specifier: ^9.11.1 - version: 9.14.0(react@19.2.4) + version: 9.14.0(react@19.2.5) react-dom: specifier: ^19.2.0 - version: 19.2.4(react@19.2.4) + version: 19.2.5(react@19.2.5) react-hook-form: specifier: ^7.66.1 - version: 7.71.2(react@19.2.4) + version: 7.72.1(react@19.2.5) react-resizable-panels: specifier: ^3.0.6 - version: 3.0.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.0.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) recharts: specifier: 2.15.4 - version: 2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) shiki: specifier: ^3.19.0 version: 3.23.0 sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) streamdown: specifier: ^1.6.10 - version: 1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.4) + version: 1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.5) tailwind-merge: specifier: ^3.4.0 version: 3.5.0 @@ -259,29 +259,29 @@ importers: version: 1.3.1 use-debounce: specifier: ^10.1.0 - version: 10.1.0(react@19.2.4) + version: 10.1.1(react@19.2.5) use-stick-to-bottom: specifier: ^1.1.1 - version: 1.1.3(react@19.2.4) + version: 1.1.3(react@19.2.5) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) zod: specifier: ^4.1.12 version: 4.3.6 zustand: specifier: ^5.0.8 - version: 5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) + version: 5.0.12(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)) devDependencies: '@tailwindcss/postcss': specifier: ^4.1.4 version: 4.2.2 '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/pg': specifier: ^8.15.6 - version: 8.18.0 + version: 8.20.0 '@types/react': specifier: ^19.1.2 version: 19.2.14 @@ -312,7 +312,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -324,11 +324,11 @@ importers: version: link:../../logger '@slack/bolt': specifier: ^4.3.0 - version: 4.6.0(@types/express@5.0.6) + version: 4.7.0(@types/express@5.0.6) devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -344,7 +344,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -353,13 +353,13 @@ importers: dependencies: '@mariozechner/pi-agent-core': specifier: ^0.61.0 - version: 0.61.1(ws@8.19.0)(zod@4.3.6) + version: 0.61.1(ws@8.20.0)(zod@4.3.6) '@mariozechner/pi-ai': specifier: ^0.61.0 - version: 0.61.1(ws@8.19.0)(zod@4.3.6) + version: 0.61.1(ws@8.20.0)(zod@4.3.6) '@mariozechner/pi-coding-agent': specifier: ^0.61.0 - version: 0.61.0(ws@8.19.0)(zod@4.3.6) + version: 0.61.1(ws@8.20.0)(zod@4.3.6) '@openzosma/db': specifier: workspace:* version: link:../db @@ -369,15 +369,15 @@ importers: '@openzosma/logger': specifier: workspace:* version: link:../logger - '@openzosma/memory': - specifier: workspace:* - version: link:../memory '@openzosma/skill-reports': specifier: workspace:* version: link:../skills/reports + '@openzosma/zosma-mem': + specifier: workspace:* + version: link:../zosma-mem '@sinclair/typebox': specifier: ^0.34.48 - version: 0.34.48 + version: 0.34.49 dotenv: specifier: 17.3.1 version: 17.3.1 @@ -390,10 +390,10 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/pg': specifier: ^8.11.10 - version: 8.18.0 + version: 8.20.0 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -402,13 +402,13 @@ importers: dependencies: '@better-auth/kysely-adapter': specifier: ^1.5.5 - version: 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.16) + version: 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(kysely@0.28.16) '@openzosma/db': specifier: workspace:* version: link:../db better-auth: specifier: ^1.2.7 - version: 1.5.5(mongodb@7.1.0(socks@2.8.7))(mysql2@3.20.0(@types/node@22.19.15))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.20.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.6.2(@opentelemetry/api@1.9.0)(mysql2@3.22.0(@types/node@22.19.17))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3)) kysely: specifier: ^0.28.16 version: 0.28.16 @@ -418,10 +418,10 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/pg': specifier: ^8.11.11 - version: 8.18.0 + version: 8.20.0 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -440,7 +440,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -462,10 +462,10 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/pg': specifier: ^8.11.11 - version: 8.18.0 + version: 8.20.0 tsx: specifier: ^4.19.3 version: 4.21.0 @@ -513,11 +513,11 @@ importers: version: 4.12.12 ws: specifier: ^8.18.1 - version: 8.19.0 + version: 8.20.0 devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/ws': specifier: ^8.18.1 version: 8.18.1 @@ -529,7 +529,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) packages/grpc: dependencies: @@ -554,7 +554,7 @@ importers: version: 2.11.1 '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 tsx: specifier: ^4.19.3 version: 4.21.0 @@ -572,14 +572,14 @@ importers: version: link:../logger mysql2: specifier: ^3.11.0 - version: 3.20.0(@types/node@22.19.17) + version: 3.22.0(@types/node@22.19.17) pg: specifier: ^8.13.1 version: 8.20.0 devDependencies: '@types/pg': specifier: ^8.11.10 - version: 8.18.0 + version: 8.20.0 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -588,23 +588,11 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 - packages/memory: - devDependencies: - '@types/node': - specifier: ^22.15.2 - version: 22.19.15 - typescript: - specifier: ^5.7.3 - version: 5.9.3 - vitest: - specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) - packages/orchestrator: dependencies: '@openzosma/agents': @@ -622,7 +610,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 tsx: specifier: ^4.19.3 version: 4.21.0 @@ -638,7 +626,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -660,7 +648,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -669,7 +657,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 typescript: specifier: ^5.7.3 version: 5.9.3 @@ -678,16 +666,16 @@ importers: dependencies: '@mariozechner/pi-agent-core': specifier: ^0.61.0 - version: 0.61.1(ws@8.19.0)(zod@4.3.6) + version: 0.61.1 '@mariozechner/pi-coding-agent': specifier: ^0.61.0 - version: 0.61.0(ws@8.19.0)(zod@4.3.6) + version: 0.61.1 '@react-pdf/renderer': specifier: ^4.3.0 - version: 4.3.2(react@19.2.4) + version: 4.4.1(react@19.2.5) '@sinclair/typebox': specifier: ^0.34.48 - version: 0.34.48 + version: 0.34.49 chart.js: specifier: ^4.4.9 version: 4.5.1 @@ -702,11 +690,11 @@ importers: version: 3.12.0 react: specifier: ^19.1.0 - version: 19.2.4 + version: 19.2.5 devDependencies: '@types/node': specifier: ^22.15.2 - version: 22.19.15 + version: 22.19.17 '@types/react': specifier: ^19.1.2 version: 19.2.14 @@ -715,18 +703,85 @@ importers: version: 5.9.3 vitest: specifier: ^3.1.1 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + + packages/zosma-mem: + dependencies: + '@clack/prompts': + specifier: ^0.10.0 + version: 0.10.1 + '@openzosma/logger': + specifier: workspace:* + version: link:../logger + chalk: + specifier: ^5.4.0 + version: 5.6.2 + chokidar: + specifier: ^3.6.0 + version: 3.6.0 + commander: + specifier: ^13.0.0 + version: 13.1.0 + ink: + specifier: ^5.1.0 + version: 5.2.1(@types/react@18.3.28)(react@18.3.1) + ink-spinner: + specifier: ^5.0.0 + version: 5.0.0(ink@5.2.1(@types/react@18.3.28)(react@18.3.1))(react@18.3.1) + p-limit: + specifier: ^5.0.0 + version: 5.0.0 + pi-brain: + specifier: ^0.1.7 + version: 0.1.7(@sinclair/typebox@0.34.49) + pi-dcp: + specifier: ^0.2.0 + version: 0.2.0(@mariozechner/pi-agent-core@0.61.1(zod@3.25.76))(@mariozechner/pi-coding-agent@0.61.1(zod@3.25.76)) + pino: + specifier: ^9.0.0 + version: 9.14.0 + react: + specifier: ^18.3.0 + version: 18.3.1 + remark-parse: + specifier: ^11.0.0 + version: 11.0.0 + unified: + specifier: ^11.0.0 + version: 11.0.5 + yaml: + specifier: ^2.8.3 + version: 2.8.3 + zod: + specifier: ^3.23.0 + version: 3.25.76 + devDependencies: + '@types/node': + specifier: ^22.15.2 + version: 22.19.17 + '@types/react': + specifier: ^18.3.0 + version: 18.3.28 + tsx: + specifier: ^4.0.0 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.9.3 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) packages: - '@ai-sdk/gateway@3.0.66': - resolution: {integrity: sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A==} + '@ai-sdk/gateway@3.0.95': + resolution: {integrity: sha512-ZmUNNbZl3V42xwQzPaNUi+s8eqR2lnrxf0bvB6YbLXpLjHYv0k2Y78t12cNOfY0bxGeuVVTLyk856uLuQIuXEQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.19': - resolution: {integrity: sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg==} + '@ai-sdk/provider-utils@4.0.23': + resolution: {integrity: sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -735,6 +790,10 @@ packages: resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} engines: {node: '>=18'} + '@alcalzone/ansi-tokenize@0.1.3': + resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} + engines: {node: '>=14.13.1'} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -768,107 +827,111 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.1012.0': - resolution: {integrity: sha512-d++NOlkdsHwLJpyDbdpfaRBlyG0eytu3dY1G9p2ITt98BDJbUX5EgKFNJRDFLQvcWRJKvwnTAcuDLZZn6hg0VA==} + '@aws-sdk/client-bedrock-runtime@3.1029.0': + resolution: {integrity: sha512-LFmNV+rLPXS87vdQBfNOmhlo+3T+t07tvyEmHeGec8jUAbOFckKbU7TTy7ePe9xVYOXQYcLw+pwslJ/VZvxDkw==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.21': - resolution: {integrity: sha512-OTUcDX9Yfz/FLKbHjiMaP9D4Hs44lYJzN7zBcrK2nDmBt0Wr8D6nYt12QoBkZsW0nVMFsTIGaZCrsU9zCcIMXQ==} + '@aws-sdk/core@3.973.27': + resolution: {integrity: sha512-CUZ5m8hwMCH6OYI4Li/WgMfIEx10Q2PLI9Y3XOUTPGZJ53aZ0007jCv+X/ywsaERyKPdw5MRZWk877roQksQ4A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.19': - resolution: {integrity: sha512-33NpkQtmnsjLr9QdZvL3w8bjy+WoBJ+jY8JwuzxIq38rDNi1kwpBWW7Yjh+8bMlksd+ZAWW0fH4S/6OeoAdU5A==} + '@aws-sdk/credential-provider-env@3.972.25': + resolution: {integrity: sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.21': - resolution: {integrity: sha512-xFke7yjbON4unNOG0TApQwz+o1LH5VhVLgWlUuiLRWNDyBfeHIFje2ck8qHybvJ8Fkm5m3SsN+pvHtVo6PGWlQ==} + '@aws-sdk/credential-provider-http@3.972.27': + resolution: {integrity: sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.21': - resolution: {integrity: sha512-fmJN7KhB7CoG65w9fC2LVOd2wZbR2d1yJIpZNe2J5CeDPu7nUHSmavuJAeGEoE3OL5UIBVPNhmK/fV/NQrs3Hw==} + '@aws-sdk/credential-provider-ini@3.972.29': + resolution: {integrity: sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.21': - resolution: {integrity: sha512-ENU+YCiuQocQjfIf9bPxZ+ZY0wIBkl3SMH22optBQwy8UFpSfonHynXzGT27xQxer4cYTNOpwDqbfo57BusbpQ==} + '@aws-sdk/credential-provider-login@3.972.29': + resolution: {integrity: sha512-OGOslTbOlxXexKMqhxCEbBQbUIfuhGxU5UXw3Fm56ypXHvrXH4aTt/xb5Y884LOoteP1QST1lVZzHfcTnWhiPQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.22': - resolution: {integrity: sha512-VE6i8nkmrRyhKut7nnfCWRbdDf+CfyRr8ixSwdaPDguYlgvkAO2pHu9oK11XzbSuatB0io1ozI/vpYhelXn8Pg==} + '@aws-sdk/credential-provider-node@3.972.30': + resolution: {integrity: sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.19': - resolution: {integrity: sha512-hjj5bFo4kf5/WzAMjDEFByVOMbq5gZiagIpJexf7Kp9nIDaGzhCphMsx03NCA8s9zUJzHlD1lXazd7MS+e03Lg==} + '@aws-sdk/credential-provider-process@3.972.25': + resolution: {integrity: sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.21': - resolution: {integrity: sha512-9jWRCuMZpZKlqCZ46bvievqdfswsyB2yPAr9rOiN+FxaGgf8jrR5iYDqJgscvk1jrbAxiK4cIjHv3XjIAWAhzQ==} + '@aws-sdk/credential-provider-sso@3.972.29': + resolution: {integrity: sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.21': - resolution: {integrity: sha512-ShWQO/cQVZ+j3zUDK7Kj+m7grPzQCVA2iaZdJ+hJTGvVH5lR32Ip/rgZZ+zBdH6D6wczP9Upa4NMXoqJdGpK1g==} + '@aws-sdk/credential-provider-web-identity@3.972.29': + resolution: {integrity: sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew==} engines: {node: '>=20.0.0'} - '@aws-sdk/eventstream-handler-node@3.972.11': - resolution: {integrity: sha512-2IrLrOruRr1NhTK0vguBL1gCWv1pu4bf4KaqpsA+/vCJpFEbvXFawn71GvCzk1wyjnDUsemtKypqoKGv4cSGbA==} + '@aws-sdk/eventstream-handler-node@3.972.13': + resolution: {integrity: sha512-2Pi1kD0MDkMAxDHqvpi/hKMs9hXUYbj2GLEjCwy+0jzfLChAsF50SUYnOeTI+RztA+Ic4pnLAdB03f1e8nggxQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-eventstream@3.972.8': - resolution: {integrity: sha512-r+oP+tbCxgqXVC3pu3MUVePgSY0ILMjA+aEwOosS77m3/DRbtvHrHwqvMcw+cjANMeGzJ+i0ar+n77KXpRA8RQ==} + '@aws-sdk/middleware-eventstream@3.972.9': + resolution: {integrity: sha512-ypgOvpWxQTCnQyDHGxnTviqqANE7FIIzII7VczJnTPCJcJlu17hMQXnvE47aKSKsawVJAaaRsyOEbHQuLJF9ng==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.8': - resolution: {integrity: sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ==} + '@aws-sdk/middleware-host-header@3.972.9': + resolution: {integrity: sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-logger@3.972.8': - resolution: {integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==} + '@aws-sdk/middleware-logger@3.972.9': + resolution: {integrity: sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.8': - resolution: {integrity: sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA==} + '@aws-sdk/middleware-recursion-detection@3.972.10': + resolution: {integrity: sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.22': - resolution: {integrity: sha512-pZPNGWZVQvgUIO/P9PXZNz7ciq9mLYb/wQEurg3phKTa3DiBIunIRcgA0eBNwmog6S3oy0KR1bv4EJ4ld9A5sQ==} + '@aws-sdk/middleware-user-agent@3.972.29': + resolution: {integrity: sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-websocket@3.972.13': - resolution: {integrity: sha512-Gp6EWIqHX5wmsOR5ZxWyyzEU8P0xBdSxkm6VHEwXwBqScKZ7QWRoj6ZmHpr+S44EYb5tuzGya4ottsogSu2W3A==} + '@aws-sdk/middleware-websocket@3.972.15': + resolution: {integrity: sha512-hsZ35FORQsN5hwNdMD6zWmHCphbXkDxO6j+xwCUiuMb0O6gzS/PWgttQNl1OAn7h/uqZAMUG4yOS0wY/yhAieg==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.996.11': - resolution: {integrity: sha512-i7SwoSR4JB/79JoGDUACnFUQOZwXGLWNX35lIb1Pq72nUGlVV+RFZp+BLa8S+mog2pbXU9+6Kc5YwGiMi5bKhQ==} + '@aws-sdk/nested-clients@3.996.19': + resolution: {integrity: sha512-uFkmCDXvmQYLanlYdOFS0+MQWkrj9wPMt/ZCc/0J0fjPim6F5jBVBmEomvGY/j77ILW6GTPwN22Jc174Mhkw6Q==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/region-config-resolver@3.972.11': + resolution: {integrity: sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg==} engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.8': - resolution: {integrity: sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw==} + '@aws-sdk/token-providers@3.1026.0': + resolution: {integrity: sha512-Ieq/HiRrbEtrYP387Nes0XlR7H1pJiJOZKv+QyQzMYpvTiDs0VKy2ZB3E2Zf+aFovWmeE7lRE4lXyF7dYM6GgA==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1012.0': - resolution: {integrity: sha512-vzKwy020zjuiF4WTJzejx5nYcXJnRhHpb6i3lyZHIwfFwXG1yX4bzBVNMWYWF+bz1i2Pp2VhJbPyzpqj4VuJXQ==} + '@aws-sdk/token-providers@3.1029.0': + resolution: {integrity: sha512-oU3a9wEBUYHuWsoMpahiRIIQMUy2RSRb9NhlJ9DtKTwYWV2OXZ0hEM+RTjIC8T8I8v/C83OqbZrj7NBg1ATAhw==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.973.6': - resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} + '@aws-sdk/types@3.973.7': + resolution: {integrity: sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.996.5': - resolution: {integrity: sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==} + '@aws-sdk/util-endpoints@3.996.6': + resolution: {integrity: sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-format-url@3.972.8': - resolution: {integrity: sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A==} + '@aws-sdk/util-format-url@3.972.9': + resolution: {integrity: sha512-fNJXHrs0ZT7Wx0KGIqKv7zLxlDXt2vqjx9z6oKUQFmpE5o4xxnSryvVHfHpIifYHWKz94hFccIldJ0YSZjlCBw==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.5': resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-user-agent-browser@3.972.8': - resolution: {integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==} + '@aws-sdk/util-user-agent-browser@3.972.9': + resolution: {integrity: sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw==} - '@aws-sdk/util-user-agent-node@3.973.8': - resolution: {integrity: sha512-Kvb96TafGPLYo4Z2GRCzQTne77epXgiZEo0DDXwavzkWmgDV/1XD1tMA766gzRcHHFUraWsE+4T8DKtPTZUxgQ==} + '@aws-sdk/util-user-agent-node@3.973.15': + resolution: {integrity: sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -876,8 +939,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.13': - resolution: {integrity: sha512-I/+BMxM4WE/6xL0tyV7tAUDOAXmyw/va1oGr/eSly43HmLUcD1G+v96vEKAA8VoLcZ03ZQo/PWzjmN9zQErqPQ==} + '@aws-sdk/xml-builder@3.972.17': + resolution: {integrity: sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.4': @@ -900,13 +963,14 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@better-auth/core@1.5.5': - resolution: {integrity: sha512-1oR/2jAp821Dcf67kQYHUoyNcdc1TcShfw4QMK0YTVntuRES5mUOyvEJql5T6eIuLfaqaN4LOF78l0FtF66HXA==} + '@better-auth/core@1.6.2': + resolution: {integrity: sha512-nBftDp+eN1fwXor1O4KQorCXa0tJNDgpab7O1z4NcWUU+3faDpdzqLn5mbXZer2E8ZD4VhjqOfYZ041xnBF5NA==} peerDependencies: - '@better-auth/utils': 0.3.1 + '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 '@cloudflare/workers-types': '>=4' - better-call: 1.3.2 + '@opentelemetry/api': ^1.9.0 + better-call: 1.3.5 jose: ^6.1.0 kysely: ^0.28.5 nanostores: ^1.0.1 @@ -914,41 +978,47 @@ packages: '@cloudflare/workers-types': optional: true - '@better-auth/drizzle-adapter@1.5.5': - resolution: {integrity: sha512-HAi9xAP40oDt48QZeYBFTcmg3vt1Jik90GwoRIfangd7VGbxesIIDBJSnvwMbZ52GBIc6+V4FRw9lasNiNrPfw==} + '@better-auth/drizzle-adapter@1.6.2': + resolution: {integrity: sha512-KawrNNuhgmpcc5PgLs6HesMckxCscz5J+BQ99iRmU1cLzG/A87IcydrmYtep+K8WHPN0HmZ/i4z/nOBCtxE2qA==} peerDependencies: - '@better-auth/core': 1.5.5 - '@better-auth/utils': ^0.3.0 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 drizzle-orm: '>=0.41.0' peerDependenciesMeta: drizzle-orm: optional: true - '@better-auth/kysely-adapter@1.5.5': - resolution: {integrity: sha512-LmHffIVnqbfsxcxckMOoE8MwibWrbVFch+kwPKJ5OFDFv6lin75ufN7ZZ7twH0IMPLT/FcgzaRjP8jRrXRef9g==} + '@better-auth/kysely-adapter@1.6.2': + resolution: {integrity: sha512-YMMm75jek/MNCAFWTAaq/U3VPmFnrwZW4NhBjjAwruHQJEIrSZZaOaUEXuUpFRRBhWqg7OOltQcHMwU/45CkuA==} peerDependencies: - '@better-auth/core': 1.5.5 - '@better-auth/utils': ^0.3.0 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 kysely: ^0.27.0 || ^0.28.0 + peerDependenciesMeta: + kysely: + optional: true - '@better-auth/memory-adapter@1.5.5': - resolution: {integrity: sha512-4X0j1/2L+nsgmObjmy9xEGUFWUv38Qjthp558fwS3DAp6ueWWyCaxaD6VJZ7m5qPNMrsBStO5WGP8CmJTEWm7g==} + '@better-auth/memory-adapter@1.6.2': + resolution: {integrity: sha512-QvuK5m7NFgkzLPHyab+NORu3J683nj36Tix58qq6DPcniyY6KZk5gY2yyh4+z1wgSjrxwY5NFx/DC2qz8B8NJg==} peerDependencies: - '@better-auth/core': 1.5.5 - '@better-auth/utils': ^0.3.0 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 - '@better-auth/mongo-adapter@1.5.5': - resolution: {integrity: sha512-P1J9ljL5X5k740I8Rx1esPWNgWYPdJR5hf2CY7BwDSrQFPUHuzeCg0YhtEEP55niNateTXhBqGAcy0fVOeamZg==} + '@better-auth/mongo-adapter@1.6.2': + resolution: {integrity: sha512-IvR2Q+1pjzxA4JXI3ED76+6fsqervIpZ2K5MxoX/+miLQhLEmNcbqqcItg4O2kfkxN8h33/ev57sjTW8QH9Tuw==} peerDependencies: - '@better-auth/core': 1.5.5 - '@better-auth/utils': ^0.3.0 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 mongodb: ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + mongodb: + optional: true - '@better-auth/prisma-adapter@1.5.5': - resolution: {integrity: sha512-CliDd78CXHzzwQIXhCdwGr5Ml53i6JdCHWV7PYwTIJz9EAm6qb2RVBdpP3nqEfNjINGM22A6gfleCgCdZkTIZg==} + '@better-auth/prisma-adapter@1.6.2': + resolution: {integrity: sha512-bQkXYTo1zPau+xAiMpo1yCjEDSy7i7oeYlkYO+fSfRDCo52DE/9oPOOuI+EStmFkPUNSk9L2rhk8Fulifi8WCg==} peerDependencies: - '@better-auth/core': 1.5.5 - '@better-auth/utils': ^0.3.0 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: @@ -957,13 +1027,15 @@ packages: prisma: optional: true - '@better-auth/telemetry@1.5.5': - resolution: {integrity: sha512-1+lklxArn4IMHuU503RcPdXrSG2tlXt4jnGG3omolmspQ7tktg/Y9XO/yAkYDurtvMn1xJ8X1Ov01Ji/r5s9BQ==} + '@better-auth/telemetry@1.6.2': + resolution: {integrity: sha512-o4gHKXqizUxVUUYChZZTowLEzdsz3ViBE/fKFzfHqNFUnF+aVt8QsbLSfipq1WpTIXyJVT/SnH0hgSdWxdssbQ==} peerDependencies: - '@better-auth/core': 1.5.5 + '@better-auth/core': ^1.6.2 + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 - '@better-auth/utils@0.3.1': - resolution: {integrity: sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==} + '@better-auth/utils@0.4.0': + resolution: {integrity: sha512-RpMtLUIQAEWMgdPLNVbIF5ON2mm+CH0U3rCdUCU1VyeAUui4m38DyK7/aXMLZov2YDjG684pS1D0MBllrmgjQA==} '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} @@ -1037,20 +1109,20 @@ packages: '@bufbuild/protoplugin@2.11.0': resolution: {integrity: sha512-lyZVNFUHArIOt4W0+dwYBe5GBwbKzbOy8ObaloEqsw9Mmiwv2O48TwddDoHN4itylC+BaEGqFdI1W8WQt2vWJQ==} - '@chevrotain/cst-dts-gen@11.1.2': - resolution: {integrity: sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==} + '@chevrotain/cst-dts-gen@12.0.0': + resolution: {integrity: sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==} - '@chevrotain/gast@11.1.2': - resolution: {integrity: sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==} + '@chevrotain/gast@12.0.0': + resolution: {integrity: sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==} - '@chevrotain/regexp-to-ast@11.1.2': - resolution: {integrity: sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==} + '@chevrotain/regexp-to-ast@12.0.0': + resolution: {integrity: sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==} - '@chevrotain/types@11.1.2': - resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + '@chevrotain/types@12.0.0': + resolution: {integrity: sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==} - '@chevrotain/utils@11.1.2': - resolution: {integrity: sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==} + '@chevrotain/utils@12.0.0': + resolution: {integrity: sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==} '@clack/core@0.4.2': resolution: {integrity: sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==} @@ -1073,158 +1145,158 @@ packages: '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1250,8 +1322,8 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@google/genai@1.46.0': - resolution: {integrity: sha512-ewPMN5JkKfgU5/kdco9ZhXBHDPhVqZpMQqIFQhwsHLf8kyZfx1cNpw1pHo1eV6PGEW7EhIBFi3aYZraFndAXqg==} + '@google/genai@1.49.0': + resolution: {integrity: sha512-hO69Zl0H3x+L0KL4stl1pLYgnqnwHoLqtKy6MRlNnW8TAxjqMdOUVafomKd4z1BePkzoxJWbYILny9a2Zk43VQ==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -1551,8 +1623,8 @@ packages: engines: {node: '>=20.0.0'} hasBin: true - '@mariozechner/pi-coding-agent@0.61.0': - resolution: {integrity: sha512-fN0DEdefqM4q7bztx5UKGtn8D6vg1sIsJRB4ljq11EKgO44Z4TQ3mmOlzKL5zCa3Wg5YeM3lf+cJoe1CAFL4zg==} + '@mariozechner/pi-coding-agent@0.61.1': + resolution: {integrity: sha512-w0QTn+LFFdyFhpaaYDOacGwBjW4MKYrl40b6LPfKDuVJ+9fDfHl3kWkbx6xJb9brk6M5lEFMheC82UIQdkeK3Q==} engines: {node: '>=20.6.0'} hasBin: true @@ -1560,15 +1632,12 @@ packages: resolution: {integrity: sha512-J3EI1gU5knUf1dXiHJsimDP4IRXLG7QJ1NVykU/yWOJoBPAgG6/qjjPPRcaUA7MYMUfKi+Z/zzGOyQSCVAajPA==} engines: {node: '>=20.0.0'} - '@mermaid-js/parser@1.0.1': - resolution: {integrity: sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==} + '@mermaid-js/parser@1.1.0': + resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==} '@mistralai/mistralai@1.14.1': resolution: {integrity: sha512-IiLmmZFCCTReQgPAT33r7KQ1nYo5JPdvGkrkZqA8qQ2qB1GHgs5LoP5K2ICyrjnpw2n8oSxMM/VP+liiKcGNlQ==} - '@mongodb-js/saslprep@1.4.6': - resolution: {integrity: sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==} - '@next/env@16.2.3': resolution: {integrity: sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==} @@ -1624,18 +1693,33 @@ packages: cpu: [x64] os: [win32] - '@noble/ciphers@2.1.1': - resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/ciphers@2.2.0': + resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} engines: {node: '>= 20.19.0'} - '@noble/hashes@2.0.1': - resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} engines: {node: '>= 20.19.0'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@opentelemetry/semantic-conventions@1.40.0': + resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} + engines: {node: '>=14'} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@protobuf-ts/grpc-transport@2.11.1': resolution: {integrity: sha512-l6wrcFffY+tuNnuyrNCkRM8hDIsAZVLA8Mn7PKdVyYxITosYh60qW663p9kL6TWXYuDCL3oxH8ih3vLKTDyhtg==} peerDependencies: @@ -2471,187 +2555,187 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-pdf/fns@3.1.2': - resolution: {integrity: sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g==} + '@react-pdf/fns@3.1.3': + resolution: {integrity: sha512-0I7pApDr1/RLAKbizuLy/IHTEa93LSPy/bEwYniboC3Xqnp6Od8xFJKbKEzGw2wh/5zKFFwl00g4t9RwgIMc3w==} - '@react-pdf/font@4.0.4': - resolution: {integrity: sha512-8YtgGtL511txIEc9AjiilpZ7yjid8uCd8OGUl6jaL3LIHnrToUupSN4IzsMQpVTCMYiDLFnDNQzpZsOYtRS/Pg==} + '@react-pdf/font@4.0.6': + resolution: {integrity: sha512-1RxR/hTyZcbgjESUjrMms574xuS9PLB4ovqQx6jvgdrIHXUyeUtSH6i3Szw1qVfUnA9MfaEm1FBuydQeJD39BQ==} '@react-pdf/image@3.0.4': resolution: {integrity: sha512-z0ogVQE0bKqgXQ5smgzIU857rLV7bMgVdrYsu3UfXDDLSzI7QPvzf6MFTFllX6Dx2rcsF13E01dqKPtJEM799g==} - '@react-pdf/layout@4.4.2': - resolution: {integrity: sha512-gNu2oh8MiGR+NJZYTJ4c4q0nWCESBI6rKFiodVhE7OeVAjtzZzd6l65wsN7HXdWJqOZD3ttD97iE+tf5SOd/Yg==} + '@react-pdf/layout@4.5.1': + resolution: {integrity: sha512-1V8ssgg9FHVsmvuCKmp7TWoUiPGgxAR2cgyvdcao8UQm7emWB7rP1o4CieHH56kgZyXXbwWqQAmmtgvcju+xfA==} - '@react-pdf/pdfkit@4.1.0': - resolution: {integrity: sha512-Wm/IOAv0h/U5Ra94c/PltFJGcpTUd/fwVMVeFD6X9tTTPCttIwg0teRG1Lqq617J8K4W7jpL/B0HTH0mjp3QpQ==} + '@react-pdf/pdfkit@5.0.0': + resolution: {integrity: sha512-FcQBWGtfhMGuOB0G3NcnF/cBq/JnFVs22i1tuafiT1XlmG6KjCxgTGng5bVh+b9RtTuwNpUGmCtB6CmG6B4ZVA==} '@react-pdf/png-js@3.0.0': resolution: {integrity: sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==} - '@react-pdf/primitives@4.1.1': - resolution: {integrity: sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ==} + '@react-pdf/primitives@4.2.0': + resolution: {integrity: sha512-onlXLcA6SpsD7SX9HOyt55qdRRJCfauegPlo4ZNw0hA/IipaZTbT9MJliWKtEXm03ibGxAQyp/BgTuXm91fo0A==} '@react-pdf/reconciler@2.0.0': resolution: {integrity: sha512-7zaPRujpbHSmCpIrZ+b9HSTJHthcVZzX0Wx7RzvQGsGBUbHP4p6s5itXrAIOuQuPvDepoHGNOvf6xUuMVvdoyw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@react-pdf/render@4.3.2': - resolution: {integrity: sha512-el5KYM1sH/PKcO4tRCIm8/AIEmhtraaONbwCrBhFdehoGv6JtgnXiMxHGAvZbI5kEg051GbyP+XIU6f6YbOu6Q==} + '@react-pdf/render@4.4.1': + resolution: {integrity: sha512-TBaEw6F+IBI4oVHUF7LL2OJX87unRrk6r7mkEmgjehN9BV5LF53I8CzVtdAchuO1+YhvE4MoMzkNelA+X2luRA==} - '@react-pdf/renderer@4.3.2': - resolution: {integrity: sha512-EhPkj35gO9rXIyyx29W3j3axemvVY5RigMmlK4/6Ku0pXB8z9PEE/sz4ZBOShu2uot6V4xiCR3aG+t9IjJJlBQ==} + '@react-pdf/renderer@4.4.1': + resolution: {integrity: sha512-mK7xyCdDUagO1kg8jraad3aUzdVAGBru08qyjjp8FMhGsh4BcuPGa0SycQ8Pv8EDEdyEOfmiE+XI1sBybSLwaQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@react-pdf/stylesheet@6.1.2': - resolution: {integrity: sha512-E3ftGRYUQGKiN3JOgtGsLDo0hGekA6dmkmi/MYACytmPTKxQRBSO3126MebmCq+t1rgU9uRlREIEawJ+8nzSbw==} + '@react-pdf/stylesheet@6.1.4': + resolution: {integrity: sha512-jiwovO7lUwgccAh3JbVcXnh90AiSKZetdz2ETcWsKApPPLzLUzPkEs6wCVvZqh3lcGOAPFV3AfdMkFnLwv1ryg==} - '@react-pdf/textkit@6.1.0': - resolution: {integrity: sha512-sFlzDC9CDFrJsnL3B/+NHrk9+Advqk7iJZIStiYQDdskbow8GF/AGYrpIk+vWSnh35YxaGbHkqXq53XOxnyrjQ==} + '@react-pdf/textkit@6.2.0': + resolution: {integrity: sha512-0B22Kue/ALHiEcYNbrx2BdkpHPTq2j3u2xmAyCnf3XJbTyANjljJjtWRohkVLQKqOlieD88BvmQt7OeWLj+ZYg==} - '@react-pdf/types@2.9.2': - resolution: {integrity: sha512-dufvpKId9OajLLbgn9q7VLUmyo1Jf+iyGk2ZHmCL8nIDtL8N1Ejh9TH7+pXXrR0tdie1nmnEb5Bz9U7g4hI4/g==} + '@react-pdf/types@2.10.0': + resolution: {integrity: sha512-iz0NusqQ/9ZHQirWhJqOaxY1UkpvuNkEDtH4/SPCnhZJKBO/IhlFLFHuzbHkmWByBoX6X3m8GCc2b/1QH6QNlA==} '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rollup/rollup-android-arm-eabi@4.60.0': - resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} + '@rollup/rollup-android-arm-eabi@4.60.1': + resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.0': - resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} + '@rollup/rollup-android-arm64@4.60.1': + resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.0': - resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} + '@rollup/rollup-darwin-arm64@4.60.1': + resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.0': - resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} + '@rollup/rollup-darwin-x64@4.60.1': + resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.0': - resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} + '@rollup/rollup-freebsd-arm64@4.60.1': + resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.0': - resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} + '@rollup/rollup-freebsd-x64@4.60.1': + resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': - resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.0': - resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.0': - resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} + '@rollup/rollup-linux-arm64-gnu@4.60.1': + resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.0': - resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} + '@rollup/rollup-linux-arm64-musl@4.60.1': + resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.0': - resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} + '@rollup/rollup-linux-loong64-gnu@4.60.1': + resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.0': - resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} + '@rollup/rollup-linux-loong64-musl@4.60.1': + resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.0': - resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.0': - resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} + '@rollup/rollup-linux-ppc64-musl@4.60.1': + resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.0': - resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.0': - resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} + '@rollup/rollup-linux-riscv64-musl@4.60.1': + resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.0': - resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} + '@rollup/rollup-linux-s390x-gnu@4.60.1': + resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.0': - resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} + '@rollup/rollup-linux-x64-gnu@4.60.1': + resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.0': - resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} + '@rollup/rollup-linux-x64-musl@4.60.1': + resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.0': - resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} + '@rollup/rollup-openbsd-x64@4.60.1': + resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.0': - resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} + '@rollup/rollup-openharmony-arm64@4.60.1': + resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.0': - resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} + '@rollup/rollup-win32-arm64-msvc@4.60.1': + resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.0': - resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} + '@rollup/rollup-win32-ia32-msvc@4.60.1': + resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.0': - resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} + '@rollup/rollup-win32-x64-gnu@4.60.1': + resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.0': - resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} + '@rollup/rollup-win32-x64-msvc@4.60.1': + resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} cpu: [x64] os: [win32] @@ -2682,15 +2766,15 @@ packages: '@silvia-odwyer/photon-node@0.3.4': resolution: {integrity: sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==} - '@sinclair/typebox@0.34.48': - resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} + '@sinclair/typebox@0.34.49': + resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@slack/bolt@4.6.0': - resolution: {integrity: sha512-xPgfUs2+OXSugz54Ky07pA890+Qydk22SYToi8uGpXeHSt1JWwFJkRyd/9Vlg5I1AdfdpGXExDpwnbuN9Q/2dQ==} + '@slack/bolt@4.7.0': + resolution: {integrity: sha512-Xpf+gKegNvkHpft1z4YiuqZdciJ3tUp1bIRQxylW30Ovf+hzjb0M1zTHVtJsRw9jsjPxHTPoyanEXVvG6qVE1g==} engines: {node: '>=18', npm: '>=8.6.0'} peerDependencies: '@types/express': ^5.0.0 @@ -2715,52 +2799,48 @@ packages: resolution: {integrity: sha512-va7zYIt3QHG1x9M/jqXXRPFMoOVlVSSRHC5YH+DzKYsrz5xUKOA3lR4THsu/Zxha9N1jOndbKFKLtr0WOPW1Vw==} engines: {node: '>= 18', npm: '>= 8.6.0'} - '@smithy/abort-controller@4.2.12': - resolution: {integrity: sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==} + '@smithy/config-resolver@4.4.14': + resolution: {integrity: sha512-N55f8mPEccpzKetUagdvmAy8oohf0J5cuj9jLI1TaSceRlq0pJsIZepY3kmAXAhyxqXPV6hDerDQhqQPKWgAoQ==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.4.11': - resolution: {integrity: sha512-YxFiiG4YDAtX7WMN7RuhHZLeTmRRAOyCbr+zB8e3AQzHPnUhS8zXjB1+cniPVQI3xbWsQPM0X2aaIkO/ME0ymw==} + '@smithy/core@3.23.14': + resolution: {integrity: sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.12': - resolution: {integrity: sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==} + '@smithy/credential-provider-imds@4.2.13': + resolution: {integrity: sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.12': - resolution: {integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==} + '@smithy/eventstream-codec@4.2.13': + resolution: {integrity: sha512-vYahwBAtRaAcFbOmE9aLr12z7RiHYDSLcnogSdxfm7kKfsNa3wH+NU5r7vTeB5rKvLsWyPjVX8iH94brP7umiQ==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.2.12': - resolution: {integrity: sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA==} + '@smithy/eventstream-serde-browser@4.2.13': + resolution: {integrity: sha512-wwybfcOX0tLqCcBP378TIU9IqrDuZq/tDV48LlZNydMpCnqnYr+hWBAYbRE+rFFf/p7IkDJySM3bgiMKP2ihPg==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.2.12': - resolution: {integrity: sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A==} + '@smithy/eventstream-serde-config-resolver@4.3.13': + resolution: {integrity: sha512-ied1lO559PtAsMJzg2TKRlctLnEi1PfkNeMMpdwXDImk1zV9uvS/Oxoy/vcy9uv1GKZAjDAB5xT6ziE9fzm5wA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.3.12': - resolution: {integrity: sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q==} + '@smithy/eventstream-serde-node@4.2.13': + resolution: {integrity: sha512-hFyK+ORJrxAN3RYoaD6+gsGDQjeix8HOEkosoajvXYZ4VeqonM3G4jd9IIRm/sWGXUKmudkY9KdYjzosUqdM8A==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.2.12': - resolution: {integrity: sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA==} + '@smithy/eventstream-serde-universal@4.2.13': + resolution: {integrity: sha512-kRrq4EKLGeOxhC2CBEhRNcu1KSzNJzYY7RK3S7CxMPgB5dRrv55WqQOtRwQxQLC04xqORFLUgnDlc6xrNUULaA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.2.12': - resolution: {integrity: sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ==} + '@smithy/fetch-http-handler@5.3.16': + resolution: {integrity: sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.15': - resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} + '@smithy/hash-node@4.2.13': + resolution: {integrity: sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.12': - resolution: {integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.2.12': - resolution: {integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==} + '@smithy/invalid-dependency@4.2.13': + resolution: {integrity: sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -2771,72 +2851,72 @@ packages: resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.12': - resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} + '@smithy/middleware-content-length@4.2.13': + resolution: {integrity: sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.26': - resolution: {integrity: sha512-8Qfikvd2GVKSm8S6IbjfwFlRY9VlMrj0Dp4vTwAuhqbX7NhJKE5DQc2bnfJIcY0B+2YKMDBWfvexbSZeejDgeg==} + '@smithy/middleware-endpoint@4.4.29': + resolution: {integrity: sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.43': - resolution: {integrity: sha512-ZwsifBdyuNHrFGmbc7bAfP2b54+kt9J2rhFd18ilQGAB+GDiP4SrawqyExbB7v455QVR7Psyhb2kjULvBPIhvA==} + '@smithy/middleware-retry@4.5.1': + resolution: {integrity: sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.15': - resolution: {integrity: sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==} + '@smithy/middleware-serde@4.2.17': + resolution: {integrity: sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.12': - resolution: {integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==} + '@smithy/middleware-stack@4.2.13': + resolution: {integrity: sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.12': - resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} + '@smithy/node-config-provider@4.3.13': + resolution: {integrity: sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.5.0': - resolution: {integrity: sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==} + '@smithy/node-http-handler@4.5.2': + resolution: {integrity: sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.12': - resolution: {integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==} + '@smithy/property-provider@4.2.13': + resolution: {integrity: sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.12': - resolution: {integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==} + '@smithy/protocol-http@5.3.13': + resolution: {integrity: sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.12': - resolution: {integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==} + '@smithy/querystring-builder@4.2.13': + resolution: {integrity: sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.12': - resolution: {integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==} + '@smithy/querystring-parser@4.2.13': + resolution: {integrity: sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.12': - resolution: {integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==} + '@smithy/service-error-classification@4.2.13': + resolution: {integrity: sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.7': - resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} + '@smithy/shared-ini-file-loader@4.4.8': + resolution: {integrity: sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.12': - resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} + '@smithy/signature-v4@5.3.13': + resolution: {integrity: sha512-YpYSyM0vMDwKbHD/JA7bVOF6kToVRpa+FM5ateEVRpsTNu564g1muBlkTubXhSKKYXInhpADF46FPyrZcTLpXg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.12.6': - resolution: {integrity: sha512-aib3f0jiMsJ6+cvDnXipBsGDL7ztknYSVqJs1FdN9P+u9tr/VzOR7iygSh6EUOdaBeMCMSh3N0VdyYsG4o91DQ==} + '@smithy/smithy-client@4.12.9': + resolution: {integrity: sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ==} engines: {node: '>=18.0.0'} - '@smithy/types@4.13.1': - resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} + '@smithy/types@4.14.0': + resolution: {integrity: sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.12': - resolution: {integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==} + '@smithy/url-parser@4.2.13': + resolution: {integrity: sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.3.2': @@ -2863,32 +2943,32 @@ packages: resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.42': - resolution: {integrity: sha512-0vjwmcvkWAUtikXnWIUOyV6IFHTEeQUYh3JUZcDgcszF+hD/StAsQ3rCZNZEPHgI9kVNcbnyc8P2CBHnwgmcwg==} + '@smithy/util-defaults-mode-browser@4.3.45': + resolution: {integrity: sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.45': - resolution: {integrity: sha512-q5dOqqfTgUcLe38TAGiFn9srToKj2YCHJ34QGOLzM+xYLLA+qRZv7N+33kl1MERVusue36ZHnlNaNEvY/PzSrw==} + '@smithy/util-defaults-mode-node@4.2.49': + resolution: {integrity: sha512-jlN6vHwE8gY5AfiFBavtD3QtCX2f7lM3BKkz7nFKSNfFR5nXLXLg6sqXTJEEyDwtxbztIDBQCfjsGVXlIru2lQ==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.3.3': - resolution: {integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==} + '@smithy/util-endpoints@3.3.4': + resolution: {integrity: sha512-BKoR/ubPp9KNKFxPpg1J28N1+bgu8NGAtJblBP7yHy8yQPBWhIAv9+l92SlQLpolGm71CVO+btB60gTgzT0wog==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.2.2': resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.12': - resolution: {integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==} + '@smithy/util-middleware@4.2.13': + resolution: {integrity: sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.12': - resolution: {integrity: sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==} + '@smithy/util-retry@4.3.1': + resolution: {integrity: sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.20': - resolution: {integrity: sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==} + '@smithy/util-stream@4.5.22': + resolution: {integrity: sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.2': @@ -2907,6 +2987,14 @@ packages: resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} engines: {node: '>=18.0.0'} + '@stacksjs/clapp@0.2.0': + resolution: {integrity: sha512-dSqnbeZjXnQLLvVxC5NU7D9Vpjxc6cC9Bo2ZwaqjgruK7pbVoFCI0goc9Mtf/lfSTbTx6Uvv/mbY7+cOW/j3Og==} + hasBin: true + + '@stacksjs/clarity@0.3.24': + resolution: {integrity: sha512-QN21fT/9dovcuFTkni9LFHDzBpiBZ4Q//0a3vFJsckPiblNIu1RhwwePkkTK4j6Xu2DtVYGR60/9Scdrp6wRfw==} + hasBin: true + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2923,13 +3011,13 @@ packages: resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} engines: {node: '>=16.0.0'} - '@tabler/icons-react@3.40.0': - resolution: {integrity: sha512-oO5+6QCnna4a//mYubx4euZfECtzQZFDGsDMIdzZUhbdyBCT+3bRVFBPueGIcemWld4Vb/0UQ39C/cmGfGylAg==} + '@tabler/icons-react@3.41.1': + resolution: {integrity: sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA==} peerDependencies: react: '>= 16' - '@tabler/icons@3.40.0': - resolution: {integrity: sha512-V/Q4VgNPKubRTiLdmWjV/zscYcj5IIk+euicUtaVVqF6luSC9rDngYWgST5/yh3Mrg/mYUwRv1YVTk71Jp0twQ==} + '@tabler/icons@3.41.1': + resolution: {integrity: sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==} '@tailwindcss/node@4.2.2': resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} @@ -3023,11 +3111,11 @@ packages: '@tailwindcss/postcss@4.2.2': resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==} - '@tanstack/query-core@5.91.0': - resolution: {integrity: sha512-FYXN8Kk9Q5VKuV6AIVaNwMThSi0nvAtR4X7HQoigf6ePOtFcavJYVIzgFhOVdtbBQtCJE3KimDIMMJM2DR1hjw==} + '@tanstack/query-core@5.99.0': + resolution: {integrity: sha512-3Jv3WQG0BCcH7G+7lf/bP8QyBfJOXeY+T08Rin3GZ1bshvwlbPt7NrDHMEzGdKIOmOzvIQmxjk28YEQX60k7pQ==} - '@tanstack/react-query@5.91.0': - resolution: {integrity: sha512-S8FODsDTNv0Ym+o/JVBvA6EWiWVhg6K2Q4qFehZyFKk6uW4H9OPbXl4kyiN9hAly0uHJ/1GEbR6kAI4MZWfjEA==} + '@tanstack/react-query@5.99.0': + resolution: {integrity: sha512-OY2bCqPemT1LlqJ8Y2CUau4KELnIhhG9Ol3ZndPbdnB095pRbPo1cHuXTndg8iIwtoHTgwZjyaDnQ0xD0mYwAw==} peerDependencies: react: ^18 || ^19 @@ -3042,207 +3130,207 @@ packages: resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} - '@tiptap/core@3.20.4': - resolution: {integrity: sha512-3i/DG89TFY/b34T5P+j35UcjYuB5d3+9K8u6qID+iUqNPiza015HPIZLuPfE5elNwVdV3EXIoPo0LLeBLgXXAg==} + '@tiptap/core@3.22.3': + resolution: {integrity: sha512-Dv9MKK5BDWCF0N2l6/Pxv3JNCce2kwuWf2cKMBc2bEetx0Pn6o7zlFmSxMvYK4UtG1Tw9Yg/ZHi6QOFWK0Zm9Q==} peerDependencies: - '@tiptap/pm': ^3.20.4 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-blockquote@3.20.4': - resolution: {integrity: sha512-9sskyyhYj2oKat//lyZVXCp9YrPt4oJAZnGHYWXS0xlskjsLElrfKKlM4vpbhGss3VrhQRoEGqWLnIaJYPF1zw==} + '@tiptap/extension-blockquote@3.22.3': + resolution: {integrity: sha512-IaUx3zh7yLHXzIXKL+fw/jzFhsIImdhJyw0lMhe8FfYrefFqXJFYW/sey6+L/e8B3AWvTksPA6VBwefzbH77JA==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-bold@3.20.4': - resolution: {integrity: sha512-Md7/mNAeJCY+VLJc8JRGI+8XkVPKiOGB1NgqQPdh3aYtxXQDChQOZoJEQl6TuudDxZ85bLZB67NjZlx3jo8/0g==} + '@tiptap/extension-bold@3.22.3': + resolution: {integrity: sha512-tysipHla2zCWr8XNIWRaW9O+7i7/SoEqnRqSRUUi2ailcJjlia+RBy3RykhkgyThrQDStu5KGBS/UvrXwA+O1A==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-bubble-menu@3.20.4': - resolution: {integrity: sha512-EXywPlI8wjPcAb8ozymgVhjtMjFrnhtoyNTy8ZcObdpUi5CdO9j892Y7aPbKe5hLhlDpvJk7rMfir4FFKEmfng==} + '@tiptap/extension-bubble-menu@3.22.3': + resolution: {integrity: sha512-Y6zQjh0ypDg32HWgICEvmPSKjGLr39k3aDxxt/H0uQEZSfw4smT0hxUyyyjVjx68C6t6MTnwdfz0hPI5lL68vQ==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-bullet-list@3.20.4': - resolution: {integrity: sha512-1RTGrur1EKoxfnLZ3M6xeNj8GITAz74jH2DHGcjLsd2Xr7Q7BozGaIq6GkkvKguMwbI1zCOxTHFCpUETXAIQQA==} + '@tiptap/extension-bullet-list@3.22.3': + resolution: {integrity: sha512-xOmW/b1hgECIE6r3IeZvKn4VVlG3+dfTjCWE6lnnyLaqdNkNhKS1CwUmDZdYNLUS2ryIUtgz5ID1W/8A3PhbiA==} peerDependencies: - '@tiptap/extension-list': ^3.20.4 + '@tiptap/extension-list': ^3.22.3 - '@tiptap/extension-code-block@3.20.4': - resolution: {integrity: sha512-Zlw3FrXTy01+o1yISeX/LC+iJeHA+ym602bMXGmtA6lyl7QSOSO7WExweJ6xeJGhbCjldwT5al6fkRAs8iGJZg==} + '@tiptap/extension-code-block@3.22.3': + resolution: {integrity: sha512-RiQtEjDAPrHpdo6sw6b7fOw/PijqgFIsozKKkGcSeBgWHQuFg7q9OxJTj+l0e60rVwSu/5gmKEEobzM9bX+t2Q==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-code@3.20.4': - resolution: {integrity: sha512-7j8Hi964bH1SZ9oLdZC1fkqWz27mliSDV7M8lmL/M14+Qw42D/VOAKS4Aw9OCFtHMlTsjLR6qsoVxL8Lpkt6NA==} + '@tiptap/extension-code@3.22.3': + resolution: {integrity: sha512-wafWTDQOuMKtXpZEuk1PFQmzopabBciNLryL90MB9S03MNLaQQZYLnmYkDBlzAaLAbgF5QiC+2XZQEBQuTVjFQ==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-color@3.20.4': - resolution: {integrity: sha512-+OT9wWEJnqoWmzfqPYt0oWm8LZcH+D44Z3jA2TNzBj4tLGQ2YPxN2SyS12AlRi7MuguVT7utFy7qDXrfir8eUA==} + '@tiptap/extension-color@3.22.3': + resolution: {integrity: sha512-eZtOc4Zp5jnlZh4+gvr3JmOa3kPlIU8IbTByDMgXEMdVGZ5cOk+H4TMIlhU0j7j1TMWm8+r1WYtrU9E9ooz9hQ==} peerDependencies: - '@tiptap/extension-text-style': ^3.20.4 + '@tiptap/extension-text-style': ^3.22.3 - '@tiptap/extension-document@3.20.4': - resolution: {integrity: sha512-zF1CIFVLt8MfSpWWnPwtGyxPOsT0xYM2qJKcXf2yZcTG37wDKmUi6heG53vGigIavbQlLaAFvs+1mNdOu2x/0A==} + '@tiptap/extension-document@3.22.3': + resolution: {integrity: sha512-MCSr1PFPtTd++lA3H1RNgqAczAE59XXJ5wUFIQf2F+/0DPY5q2SU4g5QsNJVxPPft5mrNT4C6ty8xBPrALFEdA==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-dropcursor@3.20.4': - resolution: {integrity: sha512-TgMwvZ8myXYdmd6bUV7qkpZXv7ZUiSmX/8eo+iPEzYo2CnDLAGvDKgC50nfq/g87SDvfBgPuAiBfFvsMQQWaTw==} + '@tiptap/extension-dropcursor@3.22.3': + resolution: {integrity: sha512-taXq9Tl5aybdFbptJtFRHX9LFJzbXphAbPp4/vutFyTrBu5meXDxuS+B9pEmE+Or0XcolTlW2nDZB0Tqnr18JQ==} peerDependencies: - '@tiptap/extensions': ^3.20.4 + '@tiptap/extensions': ^3.22.3 - '@tiptap/extension-floating-menu@3.20.4': - resolution: {integrity: sha512-AaPTFhoO8DBIElJyd/RTVJjkctvJuL+GHURX0npbtTxXq5HXbebVwf2ARNR7jMd/GThsmBaNJiGxZg4A2oeDqQ==} + '@tiptap/extension-floating-menu@3.22.3': + resolution: {integrity: sha512-0f8b4KZ3XKai8GXWseIYJGdOfQr3evtFbBo3U08zy2aYzMMXWG0zEF7qe5/oiYp2aZ95edjjITnEceviTsZkIg==} peerDependencies: '@floating-ui/dom': ^1.0.0 - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-gapcursor@3.20.4': - resolution: {integrity: sha512-JJ6f1iQ1e0s4kISgq55U3UYGwWV/N9f0PYMtB6e3L+SBQjXnywaLK0g6vfN6IvTCC2vdIuqeSOX8VlSO97sJLw==} + '@tiptap/extension-gapcursor@3.22.3': + resolution: {integrity: sha512-L/Px4UeQEVG/D9WIlcAOIej+4wyIBCMUSYicSR+hW68UsObe4rxVbUas1QgidQKm6DOhoT7U7D4KQHA/Gdg/7A==} peerDependencies: - '@tiptap/extensions': ^3.20.4 + '@tiptap/extensions': ^3.22.3 - '@tiptap/extension-hard-break@3.20.4': - resolution: {integrity: sha512-gJbq58d8zB1gzyqVEopowej5CpW4/Fpg6oGJvlZxaCukqd0gJRWGC89K+jE62YA1Td4sfcKrekKvN7jm2y/ZUg==} + '@tiptap/extension-hard-break@3.22.3': + resolution: {integrity: sha512-J0v8I99y9tbvVmgKYKzKP/JYNsWaZYS7avn4rzLft2OhnyTfwt3OoY8DtpHmmi6apSUaCtoWHWta/TmoEfK1nQ==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-heading@3.20.4': - resolution: {integrity: sha512-xsnkmTGggJc5P2iCwS1lv8KFG31xC/GNPJKoi/3UH67j/lKDhA3AdtshsLeyv2FKtTtYDb8oV0IqzHB1MM6a7w==} + '@tiptap/extension-heading@3.22.3': + resolution: {integrity: sha512-XBHuhiEV2EEhZHpOLcplLqAmBIhJciU3I6AtwmqeEqDC0P114uMEfAO7JGlbBZdCYotNer26PKnu44TBTeNtkw==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-highlight@3.20.4': - resolution: {integrity: sha512-CyTVPorVWwE4v89+k1nmaoAvjXLo7/fYWBsYlHW6b9Y1Un0iLANgKMFmmuapyfpaqpvg7V0Eg5ElG9U9+rogVA==} + '@tiptap/extension-highlight@3.22.3': + resolution: {integrity: sha512-iGDzQ3IuVQpfQcWsMEQ0B8q3R83bZZH6l6O2MuCmWbzm/p7mMi5vQwRCMLAbM9xFELq8KjDMHOWeER4fozp/Sg==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-horizontal-rule@3.20.4': - resolution: {integrity: sha512-y6joCi49haAA0bo3EGUY+dWUMHH1GPUc84hxrBY/0pMs+Bn+kQ1+DQJErZDTWGJrlHPWU/yekBZT72SNdp0DNA==} + '@tiptap/extension-horizontal-rule@3.22.3': + resolution: {integrity: sha512-wI2bFzScs+KgWeBH/BtypcVKeYelCyqV0RG8nxsZMWtPrBhqixzNd0Oi3gEKtjSjKUqMQ/kjJAIRuESr5UzlHA==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-image@3.20.4': - resolution: {integrity: sha512-57w2TevHQljTh6Xiry9duIm7NNOQAUSTwtwRn4GGLoKwHR8qXTxzp513ASrFOgR2kgs2TP471Au6RHf947P+jg==} + '@tiptap/extension-image@3.22.3': + resolution: {integrity: sha512-Qpp8c5LOQaNpHrzjqZtoxtIR+8sSqJ7k8v+8anmYw3nxjvt2kpfT28Vd7aWMX55ZS43LaxMx+MkZqbmgUmMP0w==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-italic@3.20.4': - resolution: {integrity: sha512-4ZqiWr7cmqPFux8tj1ZLiYytyWf343IvQemNX6AvVWvscrJcrfj3YX4Le2BA0RW3A3M6RpLQXXozuF8vxYFDeQ==} + '@tiptap/extension-italic@3.22.3': + resolution: {integrity: sha512-LteA4cb4EGCiUtrK2JHvDF/Zg0/YqV4DUyHhAAho+oGEQDupZlsS6m0ia5wQcclkiTLzsoPrwcSNu6RDGQ16wQ==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-link@3.20.4': - resolution: {integrity: sha512-JNDSkWrVdb8NSvbQXwHWvK5tCMbTWwOHFOweknQZ1JPK4dei9FJVofYQaHyW4bJBdcCjds3NZSnXE8DM9iAWmg==} + '@tiptap/extension-link@3.22.3': + resolution: {integrity: sha512-S8/P2o9pv6B3kqLjH2TRWwSAximGbciNc6R8/QcN6HWLYxp0N0JoqN3rZHl9VWIBAGRWc4zkt80dhqrl2xmgfQ==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-list-item@3.20.4': - resolution: {integrity: sha512-QoTc5RACXaZF+vIIBBxjGO7D0oWFUDgBKJCpvUZ0CoGGKosnfe4a9I5THFyLj4201cf0oUqgf1oZhTqETGxlVw==} + '@tiptap/extension-list-item@3.22.3': + resolution: {integrity: sha512-80CNf4oO5y8+LdckT4CyMe1t01EyhpRrQC9H45JW20P7559Nrchp5my3vvMtIAJbpTPPZtcB7LwdzWGKsG5drg==} peerDependencies: - '@tiptap/extension-list': ^3.20.4 + '@tiptap/extension-list': ^3.22.3 - '@tiptap/extension-list-keymap@3.20.4': - resolution: {integrity: sha512-RIqXM649+8IP7p/KVfaGlJiwjCylm1m6OPlaoM3K8O7oEOGRQzNeexexECCD2jsXRxew4E+vBNMD2orXqJmu8A==} + '@tiptap/extension-list-keymap@3.22.3': + resolution: {integrity: sha512-pKuyj5llu35zd/s2u/H9aydKZjmPRAIK5P1q/YXULhhCNln2RnmuRfQ5NklAqTD3yGciQ2lxDwwf7J6iw3ergA==} peerDependencies: - '@tiptap/extension-list': ^3.20.4 + '@tiptap/extension-list': ^3.22.3 - '@tiptap/extension-list@3.20.4': - resolution: {integrity: sha512-X+5plTKhOioNcQ4KsAFJJSb/3+zR8Xhdpow4HzXtoV1KcbdDey1fhZdpsfkbrzCL0s6/wAgwZuAchCK7HujurQ==} + '@tiptap/extension-list@3.22.3': + resolution: {integrity: sha512-rqvv/dtqwbX+8KnPv0eMYp6PnBcuhPMol5cv1GlS8Nq/Cxt68EWGUHBuTFesw+hdnRQLmKwzoO1DlRn7PhxYRQ==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-ordered-list@3.20.4': - resolution: {integrity: sha512-3budNL8BgBon3TcXZ4hjT0YpFvx1Ka3uSIECKDxHgES+OQcR+6cagxSb60gFEccf3Dr0PIwcVTY6g14lC1qKRQ==} + '@tiptap/extension-ordered-list@3.22.3': + resolution: {integrity: sha512-orAghtmd+K4Euu4BgI1hG+iZDXBYOyl5YTwiLBc2mQn+pqtZ9LqaH2us4ETwEwNP3/IWXGSAimUZ19nuL+eM2w==} peerDependencies: - '@tiptap/extension-list': ^3.20.4 + '@tiptap/extension-list': ^3.22.3 - '@tiptap/extension-paragraph@3.20.4': - resolution: {integrity: sha512-lm6fOScWuZAF/Sfp97igUwFd3L1QHIVLAWP5NVdh0DTLrEIt4rMBmsww+yOpMQRhvz2uTgMbMXynrimhzi/QVw==} + '@tiptap/extension-paragraph@3.22.3': + resolution: {integrity: sha512-oO7rhfyhEuwm+50s9K3GZPjYyEEEvFAvm1wXopvZnhbkBLydIWImBfrZoC5IQh4/sRDlTIjosV2C+ji5y0tUSg==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-placeholder@3.20.4': - resolution: {integrity: sha512-GB0KWtqm83YHG8cnqBLijvUBm+xvLfQHDfFRRH2fb3EzH3eIsM9jKRC31ADT27RSV1zVpHMFGcP3/pWpdrN1Lw==} + '@tiptap/extension-placeholder@3.22.3': + resolution: {integrity: sha512-7vbtlDVO00odqCnsMSmA4b6wjL5PFdfExFsdsDO0K0VemqHZ/doIRx/tosNUD1VYSOyKQd8U7efUjkFyVoIPlg==} peerDependencies: - '@tiptap/extensions': ^3.20.4 + '@tiptap/extensions': ^3.22.3 - '@tiptap/extension-strike@3.20.4': - resolution: {integrity: sha512-It1Px9uDGTsVqyyg6cy7DigLoenljpQwqdI0jssM7QclZrHnsrye9fZxBBiiuCzzV1305MxKgHvratkHwqmVNA==} + '@tiptap/extension-strike@3.22.3': + resolution: {integrity: sha512-jY2InoUlKkuk5KHoIDGdML1OCA2n6PRHAtxwHNkAmiYh0Khf0zaVPGFpx4dgQrN7W5Q1WE6oBZnjrvy6qb7w0g==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-subscript@3.20.4': - resolution: {integrity: sha512-Sx7YyqovrbMB7bFjWkAkMH1iV2XhlgVuJ5Mz1q5jbnPHb1kB2I1vIRWxlh22FtJhSYxHlkGH69OBn9In/zsycg==} + '@tiptap/extension-subscript@3.22.3': + resolution: {integrity: sha512-fcHinQMye6tPSxTB74CLW4Z/HbA9FX4epKOQ0ld0wIFsQB2bVz0NH9FfwrTEsYWLjeFWkDcL41VOReZXqKz1jQ==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-superscript@3.20.4': - resolution: {integrity: sha512-eJUAf8HJAaT/NeHPYeDogKd/3YWy5sMOGKktp+Gk/5t6XrLGy6KYs/avfcNuFg2QJwSCWpLaZBVfmbdLJI0rxg==} + '@tiptap/extension-superscript@3.22.3': + resolution: {integrity: sha512-q+yPA+vbvaqiVGTJddjBhvWgqLXu6j39knz3TgJKw4nBuvoAXWrlWtgOy44wwIIs8vILI4wENoUuoI0+vOzynA==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/extension-text-align@3.20.4': - resolution: {integrity: sha512-6ZuRyClIyCimXu+S5LQ54DueEsYg5VOVOmubOVbG+WAjM9svn9Z8gv2sNDah2yEqXrX06B02zYcSyMiD7CHbfA==} + '@tiptap/extension-text-align@3.22.3': + resolution: {integrity: sha512-dG1NHE0yGf7fYiOdabCJuecI2IJ1uogyY/QvZqvPNaxRjZDoXYuGlMtz9jEDiIdQSaPED2MSsS7KkuNFQIEMGg==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-text-style@3.20.4': - resolution: {integrity: sha512-PvW0Ja7ahWpo4bRuR8YCCVv4PH8lXjzhzlBAa4bMbsumOg+GbhX8Su7fwqd+IIPrHqfPXz9HTBMApSfzP6/08A==} + '@tiptap/extension-text-style@3.22.3': + resolution: {integrity: sha512-JKmWAogM/LX9ZJmXJQalpcR77wWVtVXdRFgvHGsFomW9WFhZqcnIEDWR2sbpZHWtu8dml6eBQGhdLppJmxeFfA==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-text@3.20.4': - resolution: {integrity: sha512-jchJcBZixDEO2J66Zx5dchsI2mA6IYsROqF8P1poxL4ienH7RVQRCTsBNnSfIeOtREKKWeOU/tEs5fcpvvGwIQ==} + '@tiptap/extension-text@3.22.3': + resolution: {integrity: sha512-Q9R7JsTdomP5uUjtPjNKxHT1xoh/i9OJZnmgJLe7FcgZEaPOQ3bWxmKZoLZQfDfZjyB8BtH+Hc7nUvhCMOePxw==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-typography@3.20.4': - resolution: {integrity: sha512-78dlLJViuZehM2P5p9H3HRN6GMARvFQFkdnJrJsC6b6J7SN10ruytCMM7xnUnHlZElz19LU/0/+LDtMrOA814w==} + '@tiptap/extension-typography@3.22.3': + resolution: {integrity: sha512-QQv1KUHsr3LTGhtPIG/ZP15Cj5VmI5ChgK4Q7UZ7JZBppBKAeMnyAnOcO2ith+qZ8qp5s+UiQ7Unp0zP1VSYkg==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extension-underline@3.20.4': - resolution: {integrity: sha512-0OjMc3FDujX16G+jhvqcY/mLot8SrNtDu8ggUwNLAfiI/QIvMVgk7giFD71DATC/4Nb8i/iwAEegTD8MxBIXCg==} + '@tiptap/extension-underline@3.22.3': + resolution: {integrity: sha512-Ch6CBWRa5w90yYSPUW6x9Py9JdrXMqk3pZ9OIlMYD8A7BqyZGfiHerX7XDMYDS09KjyK3U9XH60/zxYOzXdDLA==} peerDependencies: - '@tiptap/core': ^3.20.4 + '@tiptap/core': ^3.22.3 - '@tiptap/extensions@3.20.4': - resolution: {integrity: sha512-8p6hVT65DjuQjtEdlH6ewX9SOJHlVQAOee3sWIJQmeJNRnZNvqPIBLleebUqDiljNTpxBv6s6QWkSTKgf3btwg==} + '@tiptap/extensions@3.22.3': + resolution: {integrity: sha512-s5eiMq0m5N6N+W7dU6rd60KgZyyCD7FvtPNNswISfPr12EQwJBfbjWwTqd0UKNzA4fNrhQEERXnzORkykttPeA==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/markdown@3.20.4': - resolution: {integrity: sha512-1ARtZzJ1skQCZi4LyVSmImgg6JIIMP5dEs0FvHXS3a7M3O+uMOUvY1sWeggVZExg8DXoVyHd7BjRIpm7uNRuSw==} + '@tiptap/markdown@3.22.3': + resolution: {integrity: sha512-Ajw8AkAae7IET1sxZqNv+dhZQSuLY0AHWocowTny1azyiBtmRRKygkGK0ysVA+k6UxmBD6K+tvnbpjQ0/ACl4A==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 - '@tiptap/pm@3.20.4': - resolution: {integrity: sha512-rCHYSBToilBEuI6PtjziHDdRkABH/XqwJ7dG4Amn/SD3yGiZKYCiEApQlTUS2zZeo8DsLeuqqqB4vEOeD4OEPg==} + '@tiptap/pm@3.22.3': + resolution: {integrity: sha512-NjfWjZuvrqmpICT+GZWNIjtOdhPyqFKDMtQy7tsQ5rErM9L2ZQdy/+T/BKSO1JdTeBhdg9OP+0yfsqoYp2aT6A==} - '@tiptap/react@3.20.4': - resolution: {integrity: sha512-1B8iWsHWwb5TeyVaUs8BRPzwWo4PsLQcl03urHaz0zTJ8DauopqvxzV3+lem1OkzRHn7wnrapDvwmIGoROCaQw==} + '@tiptap/react@3.22.3': + resolution: {integrity: sha512-6MNr6z0PxwfJFs+BKhHcvPNvY+UV1PXgqzTiTM4Z9guml84iVZxv7ZOCSj1dFYTr3Bf1MiOs4hT1yvBFlTfIaQ==} peerDependencies: - '@tiptap/core': ^3.20.4 - '@tiptap/pm': ^3.20.4 + '@tiptap/core': ^3.22.3 + '@tiptap/pm': ^3.22.3 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tiptap/starter-kit@3.20.4': - resolution: {integrity: sha512-WcyK6hsTl8eBsQhQ+d9Sq8fYZKOYdL+D45MyH3hz583elXqJlW3h3JPFYb0o87gddGxn8Mm57OA/gA1zEdeDMw==} + '@tiptap/starter-kit@3.22.3': + resolution: {integrity: sha512-vdW/Oo1fdwTL1VOQ5YYbTov00ANeHLquBVEZyL/EkV7Xv5io9rXQsCysJfTSHhiQlyr2MtWFB4+CPGuwXjQWOQ==} '@tokenizer/inflate@0.4.1': resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} @@ -3266,33 +3354,33 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@turbo/darwin-64@2.8.19': - resolution: {integrity: sha512-WNzpqJV7rO/oKmsxjtSFXuV87fZb/qxzeGWXJng4oHFz7iPOFSWrPb2gTazJgoTvXUfe1kOH2o0F+zFrerwzRw==} + '@turbo/darwin-64@2.9.6': + resolution: {integrity: sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.8.19': - resolution: {integrity: sha512-KTq8/PH0/ml9bNFomZ2VjmOqW6RYPRqBqV5CfNeD5ekJMuNwJUdeQz0qXguxCzW4OkHCnTdPeKIehR0cdQObPg==} + '@turbo/darwin-arm64@2.9.6': + resolution: {integrity: sha512-aalBeSl4agT/QtYGDyf/XLajedWzUC9Vg/pm/YO6QQ93vkQ91Vz5uK1ta5RbVRDozQSz4njxUNqRNmOXDzW+qw==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.8.19': - resolution: {integrity: sha512-d0xcXiGUt1Q/HzMfgkqai5KyXrassLRuUZhxmUs4ZX99tQFbqRL2/CkSKCnMqyDv7c0K5eugLerVUY+DYr1DQg==} + '@turbo/linux-64@2.9.6': + resolution: {integrity: sha512-YKi05jnNHaD7vevgYwahpzGwbsNNTwzU2c7VZdmdFm7+cGDP4oREUWSsainiMfRqjRuolQxBwRn8wf1jmu+YZA==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.8.19': - resolution: {integrity: sha512-UX3r1iwqsOK8dMgKFtZpDqZk7feqHXZJ/EQAknh0SVQrnc4vkm6mZqjX4j2j3DVoSo4Ho8xGITYlor9Xxsyomw==} + '@turbo/linux-arm64@2.9.6': + resolution: {integrity: sha512-02o/ZS69cOYEDczXvOB2xmyrtzjQ2hVFtWZK1iqxXUfzMmTjZK4UumrfNnjckSg+gqeBfnPRHa0NstA173Ik3g==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.8.19': - resolution: {integrity: sha512-3MrvD/gMYWfQKZVZOeilKm1629zPG0+KlErZbI0n9Nr3L32+5qrZOF/cgWErukLnOSR38whgf8t2WaPJQALqxg==} + '@turbo/windows-64@2.9.6': + resolution: {integrity: sha512-wVdQjvnBI15wB6JrA+43CtUtagjIMmX6XYO758oZHAsCNSxqRlJtdyujih0D8OCnwCRWiGWGI63zAxR0hO6s9g==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.8.19': - resolution: {integrity: sha512-j+8mi7kyEgT7cUTPOtPJS8KbTWxu4+OQBiDIo+zklz/RKV4hoN+k4+J8iCM9Nj+o+SVnzc01xSI+s3eBG0MDSA==} + '@turbo/windows-arm64@2.9.6': + resolution: {integrity: sha512-1XUUyWW0W6FTSqGEhU8RHVqb2wP1SPkr7hIvBlMEwH9jr+sJQK5kqeosLJ/QaUv4ecSAd1ZhIrLoW7qslAzT4A==} cpu: [arm64] os: [win32] @@ -3398,8 +3486,8 @@ packages: '@types/d3@7.4.3': resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3455,14 +3543,14 @@ packages: '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@22.19.15': - resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} - '@types/node@22.19.17': resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} - '@types/pg@8.18.0': - resolution: {integrity: sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q==} + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -3475,6 +3563,9 @@ packages: peerDependencies: '@types/react': ^19.2.0 + '@types/react@18.3.28': + resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} + '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} @@ -3499,12 +3590,6 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/webidl-conversions@7.0.3': - resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} - - '@types/whatwg-url@13.0.0': - resolution: {integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==} - '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -3555,14 +3640,14 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@xyflow/react@12.10.1': - resolution: {integrity: sha512-5eSWtIK/+rkldOuFbOOz44CRgQRjtS9v5nufk77DV+XBnfCGL9HAQ8PG00o2ZYKqkEU/Ak6wrKC95Tu+2zuK3Q==} + '@xyflow/react@12.10.2': + resolution: {integrity: sha512-CgIi6HwlcHXwlkTpr0fxLv/0sRVNZ8IdwKLzzeCscaYBwpvfcH1QFOCeaTCuEn1FQEs/B8CjnTSjhs8udgmBgQ==} peerDependencies: react: '>=17' react-dom: '>=17' - '@xyflow/system@0.0.75': - resolution: {integrity: sha512-iXs+AGFLi8w/VlAoc/iSxk+CxfT6o64Uw/k0CKASOPqjqz6E0rb5jFZgJtXGZCpfQI6OQpu5EnumP5fGxQheaQ==} + '@xyflow/system@0.0.76': + resolution: {integrity: sha512-hvwvnRS1B3REwVDlWexsq7YQaPZeG3/mKo1jv38UmnpWmxihp14bW6VtEOuHEwJX2FvzFw8k77LyKSk/wiZVNA==} a2a-js@0.2.0: resolution: {integrity: sha512-JtCjTvbBVNP43mmuCqhSXk16XSKE5L4/4wbVFJsz6K2syfplNUnsZxHxnqJ0dQoe3Fy70V09uWI29uaXkNdjrg==} @@ -3591,8 +3676,8 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ai@6.0.116: - resolution: {integrity: sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA==} + ai@6.0.158: + resolution: {integrity: sha512-gLTp1UXFtMqKUi3XHs33K7UFglbvojkxF/aq337TxnLGOhHIW9+GyP2jwW4hYX87f1es+wId3VQoPRRu9zEStQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -3608,6 +3693,10 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3620,9 +3709,17 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + aproba@2.1.0: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} @@ -3673,12 +3770,20 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} engines: {node: '>= 6.0.0'} - axios@1.13.6: - resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==} + axios@1.15.0: + resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} babel-plugin-react-compiler@1.0.0: resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} @@ -3700,21 +3805,20 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.17: - resolution: {integrity: sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==} + baseline-browser-mapping@2.10.18: + resolution: {integrity: sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==} engines: {node: '>=6.0.0'} hasBin: true - basic-ftp@5.2.0: - resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} + basic-ftp@5.2.2: + resolution: {integrity: sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==} engines: {node: '>=10.0.0'} - deprecated: Security vulnerability fixed in 5.2.1, please upgrade bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - better-auth@1.5.5: - resolution: {integrity: sha512-GpVPaV1eqr3mOovKfghJXXk6QvlcVeFbS3z+n+FPDid5rK/2PchnDtiaVCzWyXA9jH2KkirOfl+JhAUvnja0Eg==} + better-auth@1.6.2: + resolution: {integrity: sha512-5nqDAIj5xexmnk+GjjdrBknJCabi1mlvsVWJbxs4usHreao4vNdxIxINWDzCyDF9iDR1ildRZdXWSiYPAvTHhA==} peerDependencies: '@lynx-js/react': '*' '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -3775,8 +3879,8 @@ packages: vue: optional: true - better-call@1.3.2: - resolution: {integrity: sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==} + better-call@1.3.5: + resolution: {integrity: sha512-kOFJkBP7utAQLEYrobZm3vkTH8mXq5GNgvjc5/XEST1ilVHaxXUXfeDeFlqoETMtyqS4+3/h4ONX2i++ebZrvA==} peerDependencies: zod: ^4.0.0 peerDependenciesMeta: @@ -3793,6 +3897,10 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} @@ -3812,26 +3920,26 @@ packages: bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - bson@7.2.0: - resolution: {integrity: sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==} - engines: {node: '>=20.19.0'} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -3849,6 +3957,10 @@ packages: resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} engines: {node: '>=0.2.0'} + bunfig@0.15.6: + resolution: {integrity: sha512-7ynPmrn1dN5F+0DtUVY0Vo2MZOOnSdb6hpQePwABEYIJ+d/rSb3vaOVUs3MFxwxWuaVc1FEStVJG6+kCgbLuyg==} + hasBin: true + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3919,13 +4031,18 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} - chevrotain-allstar@0.3.1: - resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + chevrotain-allstar@0.4.1: + resolution: {integrity: sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==} peerDependencies: - chevrotain: ^11.0.0 + chevrotain: ^12.0.0 - chevrotain@11.1.2: - resolution: {integrity: sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==} + chevrotain@12.0.0: + resolution: {integrity: sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==} + engines: {node: '>=22.0.0'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -3937,11 +4054,27 @@ packages: classcat@5.0.5: resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-highlight@2.1.11: resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -3969,6 +4102,10 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -4019,14 +4156,18 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@1.0.1: - resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} @@ -4068,9 +4209,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -4088,8 +4226,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.33.1: - resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} + cytoscape@3.33.2: + resolution: {integrity: sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -4304,15 +4442,15 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -4346,8 +4484,8 @@ packages: dfa@1.2.0: resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} - diff@8.0.3: - resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} dom-helpers@5.2.1: @@ -4393,6 +4531,9 @@ packages: emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4420,6 +4561,10 @@ packages: engines: {node: '>=20.10.0'} hasBin: true + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -4439,8 +4584,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} hasBin: true @@ -4451,6 +4599,10 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -4550,8 +4702,8 @@ packages: fast-xml-builder@1.1.4: resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} - fast-xml-parser@5.5.6: - resolution: {integrity: sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==} + fast-xml-parser@5.5.8: + resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} hasBin: true fd-slicer@1.1.0: @@ -4574,10 +4726,14 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-type@21.3.3: - resolution: {integrity: sha512-pNwbwz8c3aZ+GvbJnIsCnDjKvgCZLHxkFWLEFxU3RMa+Ey++ZSEfisvsWQMcdys6PpxQjWUOIDi1fifXsW3YRg==} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} engines: {node: '>=20'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + final-fs@1.6.1: resolution: {integrity: sha512-r5dgz23H8qh1LxKVJK84zet2PhWSWkIOgbLVUd5PlNFAULD/kCDBH9JEMwJt9dpdTnLsSD4rEqS56p2MH7Wbvw==} @@ -4698,13 +4854,17 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} @@ -4868,6 +5028,10 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + inflection@1.13.4: resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==} engines: {'0': node >= 0.4.0} @@ -4882,6 +5046,26 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ink-spinner@5.0.0: + resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==} + engines: {node: '>=14.16'} + peerDependencies: + ink: '>=4.0.0' + react: '>=18.0.0' + + ink@5.2.1: + resolution: {integrity: sha512-BqcUyWrG9zq5HIwW6JcfFHsIYebJkWWb4fczNah1goUO0vv5vneIlfwuS85twyJ5hYR/y18FlAYUxrO9ChIWVg==} + engines: {node: '>=18'} + peerDependencies: + '@types/react': '>=18.0.0' + react: '>=18.0.0' + react-devtools-core: ^4.19.1 + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -4909,6 +5093,10 @@ packages: is-arrayish@0.3.4: resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -4919,13 +5107,38 @@ packages: is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -4970,6 +5183,9 @@ packages: jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + js-md5@0.8.3: + resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5005,26 +5221,22 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} - katex@0.16.38: - resolution: {integrity: sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ==} + katex@0.16.45: + resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==} hasBin: true khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - koffi@2.15.2: - resolution: {integrity: sha512-r9tjJLVRSOhCRWdVyQlF3/Ugzeg13jlzS4czS82MAgLff4W+BcYOW7g8Y62t9O5JYjYOLAjAovAZDNlDfZNu+g==} - - kysely@0.28.13: - resolution: {integrity: sha512-jCkYDvlfzOyHaVsrvR4vnNZxG30oNv2jbbFBjTQAUG8n0h07HW0sZJHk4KAQIRyu9ay+Rg+L8qGa3lwt8Gve9w==} - engines: {node: '>=20.0.0'} + koffi@2.15.6: + resolution: {integrity: sha512-WQBpM5uo74UQ17UpsFN+PUOrQQg4/nYdey4SGVluQun2drYYfePziLLWdSmFb4wSdWlJC1aimXQnjhPCheRKuw==} kysely@0.28.16: resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} engines: {node: '>=20.0.0'} - langium@4.2.1: - resolution: {integrity: sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==} + langium@4.2.2: + resolution: {integrity: sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==} engines: {node: '>=20.10.0', npm: '>=10.2.3'} layout-base@1.0.2: @@ -5130,8 +5342,8 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -5191,8 +5403,8 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -5207,8 +5419,8 @@ packages: loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + lru-cache@11.3.3: + resolution: {integrity: sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==} engines: {node: 20 || >=22} lru-cache@7.18.3: @@ -5253,8 +5465,8 @@ packages: engines: {node: '>= 20'} hasBin: true - marked@17.0.5: - resolution: {integrity: sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==} + marked@17.0.6: + resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} engines: {node: '>= 20'} hasBin: true @@ -5320,15 +5532,12 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memory-pager@1.5.0: - resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - mermaid@11.13.0: - resolution: {integrity: sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==} + mermaid@11.14.0: + resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==} micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -5462,12 +5671,16 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@3.1.5: @@ -5505,44 +5718,13 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.8.1: - resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} - - mongodb-connection-string-url@7.0.1: - resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==} - engines: {node: '>=20.19.0'} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} mongodb-uri@0.9.7: resolution: {integrity: sha512-s6BdnqNoEYfViPJgkH85X5Nw5NpzxN8hoflKLweNa7vBxt2V7kaS06d74pAtqDxde8fn4r9h4dNdLiFGoNV0KA==} engines: {node: '>= 0.6.0'} - mongodb@7.1.0: - resolution: {integrity: sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@aws-sdk/credential-providers': ^3.806.0 - '@mongodb-js/zstd': ^7.0.0 - gcp-metadata: ^7.0.1 - kerberos: ^7.0.0 - mongodb-client-encryption: '>=7.0.0 <7.1.0' - snappy: ^7.3.2 - socks: ^2.8.6 - peerDependenciesMeta: - '@aws-sdk/credential-providers': - optional: true - '@mongodb-js/zstd': - optional: true - gcp-metadata: - optional: true - kerberos: - optional: true - mongodb-client-encryption: - optional: true - snappy: - optional: true - socks: - optional: true - motion-dom@12.38.0: resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} @@ -5563,6 +5745,10 @@ packages: react-dom: optional: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -5572,8 +5758,8 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mysql2@3.20.0: - resolution: {integrity: sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg==} + mysql2@3.22.0: + resolution: {integrity: sha512-4jaJYBObj7FhD3lnZhqX1yDMuZN4mQNz+IolDySDXT7fbozMBpeGQNcuWXKUqo4ahkAEfkjUHPjnwuDI0/6VKw==} engines: {node: '>= 8.0'} peerDependencies: '@types/node': '>= 8' @@ -5606,8 +5792,8 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + netmask@2.1.1: + resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} engines: {node: '>= 0.4.0'} next-themes@0.4.6: @@ -5688,6 +5874,10 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -5695,6 +5885,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -5724,6 +5918,10 @@ packages: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} + p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -5794,6 +5992,10 @@ packages: partial-json@0.1.7: resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + patch-console@2.0.0: + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} @@ -5801,8 +6003,8 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-expression-matcher@1.1.3: - resolution: {integrity: sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} engines: {node: '>=14.0.0'} path-is-absolute@1.0.1: @@ -5824,8 +6026,8 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -5871,13 +6073,38 @@ packages: pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + pi-brain@0.1.7: + resolution: {integrity: sha512-JhSbMX3xoeTB60QcYx45ukCp+3lInYufGr/0jMJAOq501fs798Ei9ez8BGOdQuKw5PTIv+/yeuOc3NZ0M8es7Q==} + peerDependencies: + '@sinclair/typebox': '*' + + pi-dcp@0.2.0: + resolution: {integrity: sha512-VDXIVfdVrcXpwBe6bGGYXegrzKKm8ddBiDcGVZbLf2sJbGZKnM6VWPodT8Yly4vRmzeqEb6ANpCFl7YrQStXBA==} + peerDependencies: + '@mariozechner/pi-agent-core': '*' + '@mariozechner/pi-coding-agent': '*' + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@9.14.0: + resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -5894,10 +6121,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.9: resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} engines: {node: ^10 || ^12 || >=14} @@ -5928,6 +6151,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + prompt@1.3.0: resolution: {integrity: sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==} engines: {node: '>= 6.0.0'} @@ -5993,11 +6219,11 @@ packages: prosemirror-state: ^1.4.2 prosemirror-view: ^1.33.8 - prosemirror-transform@1.11.0: - resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} + prosemirror-transform@1.12.0: + resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} - prosemirror-view@1.41.7: - resolution: {integrity: sha512-jUwKNCEIGiqdvhlS91/2QAg21e4dfU5bH2iwmSDQeosXJgKF7smG0YSplOWK0cjSNgIqXe7VXqo7EIfUFJdt3w==} + prosemirror-view@1.41.8: + resolution: {integrity: sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==} protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} @@ -6014,6 +6240,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} @@ -6021,17 +6251,16 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - qs@6.15.0: - resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + qs@6.15.1: + resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} engines: {node: '>=0.6'} queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + radix-ui@1.4.3: resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} peerDependencies: @@ -6063,13 +6292,13 @@ packages: peerDependencies: react: '>=16.8.0' - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} peerDependencies: - react: ^19.2.4 + react: ^19.2.5 - react-hook-form@7.71.2: - resolution: {integrity: sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==} + react-hook-form@7.72.1: + resolution: {integrity: sha512-RhwBoy2ygeVZje+C+bwJ8g0NjTdBmDlJvAUHTxRjTmSUKPYsKfMphkS2sgEMotsY03bP358yEYlnUeZy//D9Ig==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -6080,6 +6309,12 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-reconciler@0.29.2: + resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^18.3.1 + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -6128,8 +6363,12 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} read@1.0.7: @@ -6146,6 +6385,14 @@ packages: readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + recharts-scale@0.4.5: resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} @@ -6229,11 +6476,15 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} @@ -6259,11 +6510,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rollup@4.60.0: - resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} + rollup@4.60.1: + resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6289,6 +6540,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -6296,6 +6551,9 @@ packages: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.25.0-rc-603e6108-20241029: resolution: {integrity: sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA==} @@ -6326,8 +6584,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@3.0.1: - resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -6350,8 +6608,8 @@ packages: shiki@3.23.0: resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -6388,6 +6646,14 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -6400,6 +6666,9 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -6417,9 +6686,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - sparse-bitfield@3.0.3: - resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -6435,6 +6701,10 @@ packages: stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -6454,6 +6724,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -6482,11 +6756,11 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strnum@2.2.0: - resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==} + strnum@2.2.3: + resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} - strtok3@10.3.4: - resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} style-to-js@1.1.21: @@ -6528,8 +6802,8 @@ packages: tailwindcss@4.2.2: resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} engines: {node: '>=6'} tar-stream@2.2.0: @@ -6548,6 +6822,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -6560,12 +6837,12 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} tinypool@1.1.1: @@ -6584,6 +6861,10 @@ packages: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -6598,10 +6879,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - traverse@0.3.9: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} @@ -6633,8 +6910,8 @@ packages: tunnel-ssh@4.1.6: resolution: {integrity: sha512-y7+x+T3F3rkx2Zov5Tk9DGfeEBVAdWU3A/91E0Dk5rrZ/VFIlpV2uhhRuaISJUdyG0N+Lcp1fXZMXz+ovPt5vA==} - turbo@2.8.19: - resolution: {integrity: sha512-9NTKvQZ/02XnJCSU4mF5gvAPK+nuLbvCtft/NE8dJeOwaup0bJ14rYx7TxmSXp8JJuAN8nAjqfXWFsWwoQSFHg==} + turbo@2.9.6: + resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==} hasBin: true tw-animate-css@1.4.0: @@ -6643,6 +6920,10 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -6678,8 +6959,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.24.4: - resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + undici@7.24.7: + resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==} engines: {node: '>=20.18.1'} unicode-properties@1.4.1: @@ -6733,8 +7014,8 @@ packages: '@types/react': optional: true - use-debounce@10.1.0: - resolution: {integrity: sha512-lu87Za35V3n/MyMoEpD5zJv0k7hCn0p+V/fK2kWD+3k2u3kOCwO593UArbczg1fhfs2rqPEnHpULJ3KmGdDzvg==} + use-debounce@10.1.1: + resolution: {integrity: sha512-kvds8BHR2k28cFsxW8k3nc/tRga2rs1RHYCqmmGqb90MEeE++oALwzh2COiuBLO1/QXiOuShXoSN2ZpWnMmvuQ==} engines: {node: '>= 16.0.0'} peerDependencies: react: '*' @@ -6805,8 +7086,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -6906,14 +7187,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6936,6 +7209,10 @@ packages: wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + winston@2.4.7: resolution: {integrity: sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==} engines: {node: '>= 0.10.0'} @@ -6948,11 +7225,15 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6980,8 +7261,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -7012,6 +7293,10 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -7023,10 +7308,13 @@ packages: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} - zod-to-json-schema@3.25.1: - resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} peerDependencies: - zod: ^3.25 || ^4 + zod: ^3.25.28 || ^4 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -7069,14 +7357,14 @@ packages: snapshots: - '@ai-sdk/gateway@3.0.66(zod@4.3.6)': + '@ai-sdk/gateway@3.0.95(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.19(zod@4.3.6) + '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) '@vercel/oidc': 3.1.0 zod: 4.3.6 - '@ai-sdk/provider-utils@4.0.19(zod@4.3.6)': + '@ai-sdk/provider-utils@4.0.23(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 '@standard-schema/spec': 1.1.0 @@ -7087,12 +7375,27 @@ snapshots: dependencies: json-schema: 0.4.0 + '@alcalzone/ansi-tokenize@0.1.3': + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + '@alloc/quick-lru@5.2.0': {} '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.0.4 + tinyexec: 1.1.1 + + '@anthropic-ai/sdk@0.73.0': + dependencies: + json-schema-to-ts: 3.1.1 + + '@anthropic-ai/sdk@0.73.0(zod@3.25.76)': + dependencies: + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 3.25.76 '@anthropic-ai/sdk@0.73.0(zod@4.3.6)': dependencies: @@ -7103,7 +7406,7 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.6 + '@aws-sdk/types': 3.973.7 tslib: 2.8.1 '@aws-crypto/sha256-browser@5.2.0': @@ -7111,7 +7414,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.6 + '@aws-sdk/types': 3.973.7 '@aws-sdk/util-locate-window': 3.965.5 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -7119,7 +7422,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.6 + '@aws-sdk/types': 3.973.7 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -7128,350 +7431,362 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.973.6 + '@aws-sdk/types': 3.973.7 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.1012.0': + '@aws-sdk/client-bedrock-runtime@3.1029.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.21 - '@aws-sdk/credential-provider-node': 3.972.22 - '@aws-sdk/eventstream-handler-node': 3.972.11 - '@aws-sdk/middleware-eventstream': 3.972.8 - '@aws-sdk/middleware-host-header': 3.972.8 - '@aws-sdk/middleware-logger': 3.972.8 - '@aws-sdk/middleware-recursion-detection': 3.972.8 - '@aws-sdk/middleware-user-agent': 3.972.22 - '@aws-sdk/middleware-websocket': 3.972.13 - '@aws-sdk/region-config-resolver': 3.972.8 - '@aws-sdk/token-providers': 3.1012.0 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@aws-sdk/util-user-agent-browser': 3.972.8 - '@aws-sdk/util-user-agent-node': 3.973.8 - '@smithy/config-resolver': 4.4.11 - '@smithy/core': 3.23.12 - '@smithy/eventstream-serde-browser': 4.2.12 - '@smithy/eventstream-serde-config-resolver': 4.3.12 - '@smithy/eventstream-serde-node': 4.2.12 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/hash-node': 4.2.12 - '@smithy/invalid-dependency': 4.2.12 - '@smithy/middleware-content-length': 4.2.12 - '@smithy/middleware-endpoint': 4.4.26 - '@smithy/middleware-retry': 4.4.43 - '@smithy/middleware-serde': 4.2.15 - '@smithy/middleware-stack': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/node-http-handler': 4.5.0 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/credential-provider-node': 3.972.30 + '@aws-sdk/eventstream-handler-node': 3.972.13 + '@aws-sdk/middleware-eventstream': 3.972.9 + '@aws-sdk/middleware-host-header': 3.972.9 + '@aws-sdk/middleware-logger': 3.972.9 + '@aws-sdk/middleware-recursion-detection': 3.972.10 + '@aws-sdk/middleware-user-agent': 3.972.29 + '@aws-sdk/middleware-websocket': 3.972.15 + '@aws-sdk/region-config-resolver': 3.972.11 + '@aws-sdk/token-providers': 3.1029.0 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-endpoints': 3.996.6 + '@aws-sdk/util-user-agent-browser': 3.972.9 + '@aws-sdk/util-user-agent-node': 3.973.15 + '@smithy/config-resolver': 4.4.14 + '@smithy/core': 3.23.14 + '@smithy/eventstream-serde-browser': 4.2.13 + '@smithy/eventstream-serde-config-resolver': 4.3.13 + '@smithy/eventstream-serde-node': 4.2.13 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/hash-node': 4.2.13 + '@smithy/invalid-dependency': 4.2.13 + '@smithy/middleware-content-length': 4.2.13 + '@smithy/middleware-endpoint': 4.4.29 + '@smithy/middleware-retry': 4.5.1 + '@smithy/middleware-serde': 4.2.17 + '@smithy/middleware-stack': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/node-http-handler': 4.5.2 + '@smithy/protocol-http': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.42 - '@smithy/util-defaults-mode-node': 4.2.45 - '@smithy/util-endpoints': 3.3.3 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 - '@smithy/util-stream': 4.5.20 + '@smithy/util-defaults-mode-browser': 4.3.45 + '@smithy/util-defaults-mode-node': 4.2.49 + '@smithy/util-endpoints': 3.3.4 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-retry': 4.3.1 + '@smithy/util-stream': 4.5.22 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.21': - dependencies: - '@aws-sdk/types': 3.973.6 - '@aws-sdk/xml-builder': 3.972.13 - '@smithy/core': 3.23.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/signature-v4': 5.3.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 + '@aws-sdk/core@3.973.27': + dependencies: + '@aws-sdk/types': 3.973.7 + '@aws-sdk/xml-builder': 3.972.17 + '@smithy/core': 3.23.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/signature-v4': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 '@smithy/util-base64': 4.3.2 - '@smithy/util-middleware': 4.2.12 + '@smithy/util-middleware': 4.2.13 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.19': + '@aws-sdk/credential-provider-env@3.972.25': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.21': - dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/types': 3.973.6 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/node-http-handler': 4.5.0 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 - '@smithy/util-stream': 4.5.20 + '@aws-sdk/credential-provider-http@3.972.27': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/node-http-handler': 4.5.2 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/util-stream': 4.5.22 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.21': - dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/credential-provider-env': 3.972.19 - '@aws-sdk/credential-provider-http': 3.972.21 - '@aws-sdk/credential-provider-login': 3.972.21 - '@aws-sdk/credential-provider-process': 3.972.19 - '@aws-sdk/credential-provider-sso': 3.972.21 - '@aws-sdk/credential-provider-web-identity': 3.972.21 - '@aws-sdk/nested-clients': 3.996.11 - '@aws-sdk/types': 3.973.6 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/credential-provider-ini@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/credential-provider-env': 3.972.25 + '@aws-sdk/credential-provider-http': 3.972.27 + '@aws-sdk/credential-provider-login': 3.972.29 + '@aws-sdk/credential-provider-process': 3.972.25 + '@aws-sdk/credential-provider-sso': 3.972.29 + '@aws-sdk/credential-provider-web-identity': 3.972.29 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.21': + '@aws-sdk/credential-provider-login@3.972.29': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/nested-clients': 3.996.11 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.22': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.19 - '@aws-sdk/credential-provider-http': 3.972.21 - '@aws-sdk/credential-provider-ini': 3.972.21 - '@aws-sdk/credential-provider-process': 3.972.19 - '@aws-sdk/credential-provider-sso': 3.972.21 - '@aws-sdk/credential-provider-web-identity': 3.972.21 - '@aws-sdk/types': 3.973.6 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/credential-provider-node@3.972.30': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.25 + '@aws-sdk/credential-provider-http': 3.972.27 + '@aws-sdk/credential-provider-ini': 3.972.29 + '@aws-sdk/credential-provider-process': 3.972.25 + '@aws-sdk/credential-provider-sso': 3.972.29 + '@aws-sdk/credential-provider-web-identity': 3.972.29 + '@aws-sdk/types': 3.973.7 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.19': + '@aws-sdk/credential-provider-process@3.972.25': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.21': + '@aws-sdk/credential-provider-sso@3.972.29': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/nested-clients': 3.996.11 - '@aws-sdk/token-providers': 3.1012.0 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/token-providers': 3.1026.0 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.21': + '@aws-sdk/credential-provider-web-identity@3.972.29': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/nested-clients': 3.996.11 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/eventstream-handler-node@3.972.11': + '@aws-sdk/eventstream-handler-node@3.972.13': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/eventstream-codec': 4.2.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/eventstream-codec': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/middleware-eventstream@3.972.8': + '@aws-sdk/middleware-eventstream@3.972.9': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.8': + '@aws-sdk/middleware-host-header@3.972.9': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.8': + '@aws-sdk/middleware-logger@3.972.9': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.8': + '@aws-sdk/middleware-recursion-detection@3.972.10': dependencies: - '@aws-sdk/types': 3.973.6 + '@aws-sdk/types': 3.973.7 '@aws/lambda-invoke-store': 0.2.4 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.22': + '@aws-sdk/middleware-user-agent@3.972.29': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@smithy/core': 3.23.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/util-retry': 4.2.12 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-endpoints': 3.996.6 + '@smithy/core': 3.23.14 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-retry': 4.3.1 tslib: 2.8.1 - '@aws-sdk/middleware-websocket@3.972.13': + '@aws-sdk/middleware-websocket@3.972.15': dependencies: - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-format-url': 3.972.8 - '@smithy/eventstream-codec': 4.2.12 - '@smithy/eventstream-serde-browser': 4.2.12 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/protocol-http': 5.3.12 - '@smithy/signature-v4': 5.3.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-format-url': 3.972.9 + '@smithy/eventstream-codec': 4.2.13 + '@smithy/eventstream-serde-browser': 4.2.13 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/protocol-http': 5.3.13 + '@smithy/signature-v4': 5.3.13 + '@smithy/types': 4.14.0 '@smithy/util-base64': 4.3.2 '@smithy/util-hex-encoding': 4.2.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.996.11': + '@aws-sdk/nested-clients@3.996.19': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.21 - '@aws-sdk/middleware-host-header': 3.972.8 - '@aws-sdk/middleware-logger': 3.972.8 - '@aws-sdk/middleware-recursion-detection': 3.972.8 - '@aws-sdk/middleware-user-agent': 3.972.22 - '@aws-sdk/region-config-resolver': 3.972.8 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@aws-sdk/util-user-agent-browser': 3.972.8 - '@aws-sdk/util-user-agent-node': 3.973.8 - '@smithy/config-resolver': 4.4.11 - '@smithy/core': 3.23.12 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/hash-node': 4.2.12 - '@smithy/invalid-dependency': 4.2.12 - '@smithy/middleware-content-length': 4.2.12 - '@smithy/middleware-endpoint': 4.4.26 - '@smithy/middleware-retry': 4.4.43 - '@smithy/middleware-serde': 4.2.15 - '@smithy/middleware-stack': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/node-http-handler': 4.5.0 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/middleware-host-header': 3.972.9 + '@aws-sdk/middleware-logger': 3.972.9 + '@aws-sdk/middleware-recursion-detection': 3.972.10 + '@aws-sdk/middleware-user-agent': 3.972.29 + '@aws-sdk/region-config-resolver': 3.972.11 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-endpoints': 3.996.6 + '@aws-sdk/util-user-agent-browser': 3.972.9 + '@aws-sdk/util-user-agent-node': 3.973.15 + '@smithy/config-resolver': 4.4.14 + '@smithy/core': 3.23.14 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/hash-node': 4.2.13 + '@smithy/invalid-dependency': 4.2.13 + '@smithy/middleware-content-length': 4.2.13 + '@smithy/middleware-endpoint': 4.4.29 + '@smithy/middleware-retry': 4.5.1 + '@smithy/middleware-serde': 4.2.17 + '@smithy/middleware-stack': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/node-http-handler': 4.5.2 + '@smithy/protocol-http': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.42 - '@smithy/util-defaults-mode-node': 4.2.45 - '@smithy/util-endpoints': 3.3.3 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 + '@smithy/util-defaults-mode-browser': 4.3.45 + '@smithy/util-defaults-mode-node': 4.2.49 + '@smithy/util-endpoints': 3.3.4 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-retry': 4.3.1 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.972.8': + '@aws-sdk/region-config-resolver@3.972.11': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/config-resolver': 4.4.11 - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/config-resolver': 4.4.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1012.0': + '@aws-sdk/token-providers@3.1026.0': dependencies: - '@aws-sdk/core': 3.973.21 - '@aws-sdk/nested-clients': 3.996.11 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.973.6': + '@aws-sdk/token-providers@3.1029.0': dependencies: - '@smithy/types': 4.13.1 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.973.7': + dependencies: + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.996.5': + '@aws-sdk/util-endpoints@3.996.6': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@smithy/util-endpoints': 3.3.3 + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-endpoints': 3.3.4 tslib: 2.8.1 - '@aws-sdk/util-format-url@3.972.8': + '@aws-sdk/util-format-url@3.972.9': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/querystring-builder': 4.2.12 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.965.5': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.972.8': + '@aws-sdk/util-user-agent-browser@3.972.9': dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/types': 4.13.1 + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.973.8': + '@aws-sdk/util-user-agent-node@3.973.15': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.22 - '@aws-sdk/types': 3.973.6 - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 + '@aws-sdk/middleware-user-agent': 3.972.29 + '@aws-sdk/types': 3.973.7 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 '@smithy/util-config-provider': 4.2.2 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.13': + '@aws-sdk/xml-builder@3.972.17': dependencies: - '@smithy/types': 4.13.1 - fast-xml-parser: 5.5.6 + '@smithy/types': 4.14.0 + fast-xml-parser: 5.5.8 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.4': {} @@ -7487,68 +7802,55 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0)': - dependencies: - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - '@standard-schema/spec': 1.1.0 - better-call: 1.3.2(zod@4.3.6) - jose: 6.2.2 - kysely: 0.28.13 - nanostores: 1.2.0 - zod: 4.3.6 - - '@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0)': + '@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0)': dependencies: - '@better-auth/utils': 0.3.1 + '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.40.0 '@standard-schema/spec': 1.1.0 - better-call: 1.3.2(zod@4.3.6) + better-call: 1.3.5(zod@4.3.6) jose: 6.2.2 kysely: 0.28.16 nanostores: 1.2.0 zod: 4.3.6 - '@better-auth/drizzle-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)': - dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 - - '@better-auth/kysely-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.13)': + '@better-auth/drizzle-adapter@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 - kysely: 0.28.13 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 - '@better-auth/kysely-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.16)': + '@better-auth/kysely-adapter@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(kysely@0.28.16)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 + optionalDependencies: kysely: 0.28.16 - '@better-auth/memory-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)': + '@better-auth/memory-adapter@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 - '@better-auth/mongo-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7))': + '@better-auth/mongo-adapter@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 - mongodb: 7.1.0(socks@2.8.7) + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 - '@better-auth/prisma-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)': + '@better-auth/prisma-adapter@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 - '@better-auth/telemetry@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))': + '@better-auth/telemetry@1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)': dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/utils': 0.3.1 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - '@better-auth/utils@0.3.1': {} + '@better-auth/utils@0.4.0': + dependencies: + '@noble/hashes': 2.2.0 '@better-fetch/fetch@1.1.21': {} @@ -7601,22 +7903,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@chevrotain/cst-dts-gen@11.1.2': + '@chevrotain/cst-dts-gen@12.0.0': dependencies: - '@chevrotain/gast': 11.1.2 - '@chevrotain/types': 11.1.2 - lodash-es: 4.17.23 + '@chevrotain/gast': 12.0.0 + '@chevrotain/types': 12.0.0 - '@chevrotain/gast@11.1.2': + '@chevrotain/gast@12.0.0': dependencies: - '@chevrotain/types': 11.1.2 - lodash-es: 4.17.23 + '@chevrotain/types': 12.0.0 - '@chevrotain/regexp-to-ast@11.1.2': {} + '@chevrotain/regexp-to-ast@12.0.0': {} - '@chevrotain/types@11.1.2': {} + '@chevrotain/types@12.0.0': {} - '@chevrotain/utils@11.1.2': {} + '@chevrotain/utils@12.0.0': {} '@clack/core@0.4.2': dependencies: @@ -7642,82 +7942,82 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.27.4': + '@esbuild/aix-ppc64@0.27.7': optional: true - '@esbuild/android-arm64@0.27.4': + '@esbuild/android-arm64@0.27.7': optional: true - '@esbuild/android-arm@0.27.4': + '@esbuild/android-arm@0.27.7': optional: true - '@esbuild/android-x64@0.27.4': + '@esbuild/android-x64@0.27.7': optional: true - '@esbuild/darwin-arm64@0.27.4': + '@esbuild/darwin-arm64@0.27.7': optional: true - '@esbuild/darwin-x64@0.27.4': + '@esbuild/darwin-x64@0.27.7': optional: true - '@esbuild/freebsd-arm64@0.27.4': + '@esbuild/freebsd-arm64@0.27.7': optional: true - '@esbuild/freebsd-x64@0.27.4': + '@esbuild/freebsd-x64@0.27.7': optional: true - '@esbuild/linux-arm64@0.27.4': + '@esbuild/linux-arm64@0.27.7': optional: true - '@esbuild/linux-arm@0.27.4': + '@esbuild/linux-arm@0.27.7': optional: true - '@esbuild/linux-ia32@0.27.4': + '@esbuild/linux-ia32@0.27.7': optional: true - '@esbuild/linux-loong64@0.27.4': + '@esbuild/linux-loong64@0.27.7': optional: true - '@esbuild/linux-mips64el@0.27.4': + '@esbuild/linux-mips64el@0.27.7': optional: true - '@esbuild/linux-ppc64@0.27.4': + '@esbuild/linux-ppc64@0.27.7': optional: true - '@esbuild/linux-riscv64@0.27.4': + '@esbuild/linux-riscv64@0.27.7': optional: true - '@esbuild/linux-s390x@0.27.4': + '@esbuild/linux-s390x@0.27.7': optional: true - '@esbuild/linux-x64@0.27.4': + '@esbuild/linux-x64@0.27.7': optional: true - '@esbuild/netbsd-arm64@0.27.4': + '@esbuild/netbsd-arm64@0.27.7': optional: true - '@esbuild/netbsd-x64@0.27.4': + '@esbuild/netbsd-x64@0.27.7': optional: true - '@esbuild/openbsd-arm64@0.27.4': + '@esbuild/openbsd-arm64@0.27.7': optional: true - '@esbuild/openbsd-x64@0.27.4': + '@esbuild/openbsd-x64@0.27.7': optional: true - '@esbuild/openharmony-arm64@0.27.4': + '@esbuild/openharmony-arm64@0.27.7': optional: true - '@esbuild/sunos-x64@0.27.4': + '@esbuild/sunos-x64@0.27.7': optional: true - '@esbuild/win32-arm64@0.27.4': + '@esbuild/win32-arm64@0.27.7': optional: true - '@esbuild/win32-ia32@0.27.4': + '@esbuild/win32-ia32@0.27.7': optional: true - '@esbuild/win32-x64@0.27.4': + '@esbuild/win32-x64@0.27.7': optional: true '@fast-csv/format@4.3.5': @@ -7748,20 +8048,20 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@floating-ui/dom': 1.7.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) '@floating-ui/utils@0.2.11': {} - '@google/genai@1.46.0': + '@google/genai@1.49.0': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 protobufjs: 7.5.4 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - supports-color @@ -7783,10 +8083,10 @@ snapshots: dependencies: hono: 4.12.12 - '@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.4))': + '@hookform/resolvers@5.2.2(react-hook-form@7.72.1(react@19.2.5))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.71.2(react@19.2.4) + react-hook-form: 7.72.1(react@19.2.5) '@iconify/types@2.0.0': {} @@ -7794,11 +8094,11 @@ snapshots: dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - mlly: 1.8.1 + mlly: 1.8.2 - '@icons-pack/react-simple-icons@13.13.0(react@19.2.4)': + '@icons-pack/react-simple-icons@13.13.0(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 '@img/colour@1.1.0': optional: true @@ -7984,9 +8284,9 @@ snapshots: std-env: 3.10.0 yoctocolors: 2.1.2 - '@mariozechner/pi-agent-core@0.61.1(ws@8.19.0)(zod@4.3.6)': + '@mariozechner/pi-agent-core@0.61.1': dependencies: - '@mariozechner/pi-ai': 0.61.1(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.61.1 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt @@ -7996,21 +8296,157 @@ snapshots: - ws - zod - '@mariozechner/pi-ai@0.61.1(ws@8.19.0)(zod@4.3.6)': + '@mariozechner/pi-agent-core@0.61.1(ws@8.20.0)(zod@4.3.6)': dependencies: - '@anthropic-ai/sdk': 0.73.0(zod@4.3.6) - '@aws-sdk/client-bedrock-runtime': 3.1012.0 - '@google/genai': 1.46.0 - '@mistralai/mistralai': 1.14.1 - '@sinclair/typebox': 0.34.48 - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) - chalk: 5.6.2 - openai: 6.26.0(ws@8.19.0)(zod@4.3.6) - partial-json: 0.1.7 + '@mariozechner/pi-ai': 0.61.1(ws@8.20.0)(zod@4.3.6) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-agent-core@0.61.1(zod@3.25.76)': + dependencies: + '@mariozechner/pi-ai': 0.61.1(zod@3.25.76) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-ai@0.61.1': + dependencies: + '@anthropic-ai/sdk': 0.73.0 + '@aws-sdk/client-bedrock-runtime': 3.1029.0 + '@google/genai': 1.49.0 + '@mistralai/mistralai': 1.14.1 + '@sinclair/typebox': 0.34.49 + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + chalk: 5.6.2 + openai: 6.26.0 + partial-json: 0.1.7 + proxy-agent: 6.5.0 + undici: 7.24.7 + zod-to-json-schema: 3.25.2 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-ai@0.61.1(ws@8.20.0)(zod@4.3.6)': + dependencies: + '@anthropic-ai/sdk': 0.73.0(zod@4.3.6) + '@aws-sdk/client-bedrock-runtime': 3.1029.0 + '@google/genai': 1.49.0 + '@mistralai/mistralai': 1.14.1 + '@sinclair/typebox': 0.34.49 + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + chalk: 5.6.2 + openai: 6.26.0(ws@8.20.0)(zod@4.3.6) + partial-json: 0.1.7 + proxy-agent: 6.5.0 + undici: 7.24.7 + zod-to-json-schema: 3.25.2(zod@4.3.6) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-ai@0.61.1(zod@3.25.76)': + dependencies: + '@anthropic-ai/sdk': 0.73.0(zod@3.25.76) + '@aws-sdk/client-bedrock-runtime': 3.1029.0 + '@google/genai': 1.49.0 + '@mistralai/mistralai': 1.14.1 + '@sinclair/typebox': 0.34.49 + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + chalk: 5.6.2 + openai: 6.26.0(zod@3.25.76) + partial-json: 0.1.7 proxy-agent: 6.5.0 - undici: 7.24.4 - zod-to-json-schema: 3.25.1(zod@4.3.6) + undici: 7.24.7 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-coding-agent@0.61.1': + dependencies: + '@mariozechner/jiti': 2.6.5 + '@mariozechner/pi-agent-core': 0.61.1 + '@mariozechner/pi-ai': 0.61.1 + '@mariozechner/pi-tui': 0.61.1 + '@silvia-odwyer/photon-node': 0.3.4 + chalk: 5.6.2 + cli-highlight: 2.1.11 + diff: 8.0.4 + extract-zip: 2.0.1 + file-type: 21.3.4 + glob: 13.0.6 + hosted-git-info: 9.0.2 + ignore: 7.0.5 + marked: 15.0.12 + minimatch: 10.2.5 + proper-lockfile: 4.1.2 + strip-ansi: 7.2.0 + undici: 7.24.7 + yaml: 2.8.3 + optionalDependencies: + '@mariozechner/clipboard': 0.3.2 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@mariozechner/pi-coding-agent@0.61.1(ws@8.20.0)(zod@4.3.6)': + dependencies: + '@mariozechner/jiti': 2.6.5 + '@mariozechner/pi-agent-core': 0.61.1(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.61.1(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-tui': 0.61.1 + '@silvia-odwyer/photon-node': 0.3.4 + chalk: 5.6.2 + cli-highlight: 2.1.11 + diff: 8.0.4 + extract-zip: 2.0.1 + file-type: 21.3.4 + glob: 13.0.6 + hosted-git-info: 9.0.2 + ignore: 7.0.5 + marked: 15.0.12 + minimatch: 10.2.5 + proper-lockfile: 4.1.2 + strip-ansi: 7.2.0 + undici: 7.24.7 + yaml: 2.8.3 + optionalDependencies: + '@mariozechner/clipboard': 0.3.2 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt @@ -8020,27 +8456,27 @@ snapshots: - ws - zod - '@mariozechner/pi-coding-agent@0.61.0(ws@8.19.0)(zod@4.3.6)': + '@mariozechner/pi-coding-agent@0.61.1(zod@3.25.76)': dependencies: '@mariozechner/jiti': 2.6.5 - '@mariozechner/pi-agent-core': 0.61.1(ws@8.19.0)(zod@4.3.6) - '@mariozechner/pi-ai': 0.61.1(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-agent-core': 0.61.1(zod@3.25.76) + '@mariozechner/pi-ai': 0.61.1(zod@3.25.76) '@mariozechner/pi-tui': 0.61.1 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 cli-highlight: 2.1.11 - diff: 8.0.3 + diff: 8.0.4 extract-zip: 2.0.1 - file-type: 21.3.3 + file-type: 21.3.4 glob: 13.0.6 hosted-git-info: 9.0.2 ignore: 7.0.5 marked: 15.0.12 - minimatch: 10.2.4 + minimatch: 10.2.5 proper-lockfile: 4.1.2 strip-ansi: 7.2.0 - undici: 7.24.4 - yaml: 2.8.2 + undici: 7.24.7 + yaml: 2.8.3 optionalDependencies: '@mariozechner/clipboard': 0.3.2 transitivePeerDependencies: @@ -8060,25 +8496,21 @@ snapshots: marked: 15.0.12 mime-types: 3.0.2 optionalDependencies: - koffi: 2.15.2 + koffi: 2.15.6 - '@mermaid-js/parser@1.0.1': + '@mermaid-js/parser@1.1.0': dependencies: - langium: 4.2.1 + langium: 4.2.2 '@mistralai/mistralai@1.14.1': dependencies: - ws: 8.19.0 + ws: 8.20.0 zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + zod-to-json-schema: 3.25.2(zod@4.3.6) transitivePeerDependencies: - bufferutil - utf-8-validate - '@mongodb-js/saslprep@1.4.6': - dependencies: - sparse-bitfield: 3.0.3 - '@next/env@16.2.3': {} '@next/swc-darwin-arm64@16.2.3': @@ -8105,12 +8537,20 @@ snapshots: '@next/swc-win32-x64-msvc@16.2.3': optional: true - '@noble/ciphers@2.1.1': {} + '@noble/ciphers@1.3.0': {} + + '@noble/ciphers@2.2.0': {} - '@noble/hashes@2.0.1': {} + '@noble/hashes@1.8.0': {} + + '@noble/hashes@2.2.0': {} '@opentelemetry/api@1.9.0': {} + '@opentelemetry/semantic-conventions@1.40.0': {} + + '@pinojs/redact@0.4.0': {} + '@protobuf-ts/grpc-transport@2.11.1(@grpc/grpc-js@1.14.3)': dependencies: '@grpc/grpc-js': 1.14.3 @@ -8163,827 +8603,827 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) '@radix-ui/rect': 1.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) + react: 19.2.5 + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) '@radix-ui/rect@1.1.1': {} - '@react-pdf/fns@3.1.2': {} + '@react-pdf/fns@3.1.3': {} - '@react-pdf/font@4.0.4': + '@react-pdf/font@4.0.6': dependencies: - '@react-pdf/pdfkit': 4.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/pdfkit': 5.0.0 + '@react-pdf/types': 2.10.0 fontkit: 2.0.4 is-url: 1.2.4 @@ -8992,26 +9432,28 @@ snapshots: '@react-pdf/png-js': 3.0.0 jay-peg: 1.1.1 - '@react-pdf/layout@4.4.2': + '@react-pdf/layout@4.5.1': dependencies: - '@react-pdf/fns': 3.1.2 + '@react-pdf/fns': 3.1.3 '@react-pdf/image': 3.0.4 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/stylesheet': 6.1.2 - '@react-pdf/textkit': 6.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/primitives': 4.2.0 + '@react-pdf/stylesheet': 6.1.4 + '@react-pdf/textkit': 6.2.0 + '@react-pdf/types': 2.10.0 emoji-regex-xs: 1.0.0 queue: 6.0.2 yoga-layout: 3.2.1 - '@react-pdf/pdfkit@4.1.0': + '@react-pdf/pdfkit@5.0.0': dependencies: '@babel/runtime': 7.29.2 + '@noble/ciphers': 1.3.0 + '@noble/hashes': 1.8.0 '@react-pdf/png-js': 3.0.0 browserify-zlib: 0.2.0 - crypto-js: 4.2.0 fontkit: 2.0.4 jay-peg: 1.1.1 + js-md5: 0.8.3 linebreak: 1.1.0 vite-compatible-readable-stream: 3.6.1 @@ -9019,141 +9461,141 @@ snapshots: dependencies: browserify-zlib: 0.2.0 - '@react-pdf/primitives@4.1.1': {} + '@react-pdf/primitives@4.2.0': {} - '@react-pdf/reconciler@2.0.0(react@19.2.4)': + '@react-pdf/reconciler@2.0.0(react@19.2.5)': dependencies: object-assign: 4.1.1 - react: 19.2.4 + react: 19.2.5 scheduler: 0.25.0-rc-603e6108-20241029 - '@react-pdf/render@4.3.2': + '@react-pdf/render@4.4.1': dependencies: '@babel/runtime': 7.29.2 - '@react-pdf/fns': 3.1.2 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/textkit': 6.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/fns': 3.1.3 + '@react-pdf/primitives': 4.2.0 + '@react-pdf/textkit': 6.2.0 + '@react-pdf/types': 2.10.0 abs-svg-path: 0.1.1 color-string: 1.9.1 normalize-svg-path: 1.1.0 parse-svg-path: 0.1.2 svg-arc-to-cubic-bezier: 3.2.0 - '@react-pdf/renderer@4.3.2(react@19.2.4)': + '@react-pdf/renderer@4.4.1(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 - '@react-pdf/fns': 3.1.2 - '@react-pdf/font': 4.0.4 - '@react-pdf/layout': 4.4.2 - '@react-pdf/pdfkit': 4.1.0 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/reconciler': 2.0.0(react@19.2.4) - '@react-pdf/render': 4.3.2 - '@react-pdf/types': 2.9.2 + '@react-pdf/fns': 3.1.3 + '@react-pdf/font': 4.0.6 + '@react-pdf/layout': 4.5.1 + '@react-pdf/pdfkit': 5.0.0 + '@react-pdf/primitives': 4.2.0 + '@react-pdf/reconciler': 2.0.0(react@19.2.5) + '@react-pdf/render': 4.4.1 + '@react-pdf/types': 2.10.0 events: 3.3.0 object-assign: 4.1.1 prop-types: 15.8.1 queue: 6.0.2 - react: 19.2.4 + react: 19.2.5 - '@react-pdf/stylesheet@6.1.2': + '@react-pdf/stylesheet@6.1.4': dependencies: - '@react-pdf/fns': 3.1.2 - '@react-pdf/types': 2.9.2 + '@react-pdf/fns': 3.1.3 + '@react-pdf/types': 2.10.0 color-string: 1.9.1 hsl-to-hex: 1.0.0 media-engine: 1.0.3 postcss-value-parser: 4.2.0 - '@react-pdf/textkit@6.1.0': + '@react-pdf/textkit@6.2.0': dependencies: - '@react-pdf/fns': 3.1.2 + '@react-pdf/fns': 3.1.3 bidi-js: 1.0.3 hyphen: 1.14.1 unicode-properties: 1.4.1 - '@react-pdf/types@2.9.2': + '@react-pdf/types@2.10.0': dependencies: - '@react-pdf/font': 4.0.4 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/stylesheet': 6.1.2 + '@react-pdf/font': 4.0.6 + '@react-pdf/primitives': 4.2.0 + '@react-pdf/stylesheet': 6.1.4 '@remirror/core-constants@3.0.0': {} - '@rollup/rollup-android-arm-eabi@4.60.0': + '@rollup/rollup-android-arm-eabi@4.60.1': optional: true - '@rollup/rollup-android-arm64@4.60.0': + '@rollup/rollup-android-arm64@4.60.1': optional: true - '@rollup/rollup-darwin-arm64@4.60.0': + '@rollup/rollup-darwin-arm64@4.60.1': optional: true - '@rollup/rollup-darwin-x64@4.60.0': + '@rollup/rollup-darwin-x64@4.60.1': optional: true - '@rollup/rollup-freebsd-arm64@4.60.0': + '@rollup/rollup-freebsd-arm64@4.60.1': optional: true - '@rollup/rollup-freebsd-x64@4.60.0': + '@rollup/rollup-freebsd-x64@4.60.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.0': + '@rollup/rollup-linux-arm-musleabihf@4.60.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.0': + '@rollup/rollup-linux-arm64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.0': + '@rollup/rollup-linux-arm64-musl@4.60.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.0': + '@rollup/rollup-linux-loong64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.0': + '@rollup/rollup-linux-loong64-musl@4.60.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.0': + '@rollup/rollup-linux-ppc64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.0': + '@rollup/rollup-linux-ppc64-musl@4.60.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.0': + '@rollup/rollup-linux-riscv64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.0': + '@rollup/rollup-linux-riscv64-musl@4.60.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.0': + '@rollup/rollup-linux-s390x-gnu@4.60.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.0': + '@rollup/rollup-linux-x64-gnu@4.60.1': optional: true - '@rollup/rollup-linux-x64-musl@4.60.0': + '@rollup/rollup-linux-x64-musl@4.60.1': optional: true - '@rollup/rollup-openbsd-x64@4.60.0': + '@rollup/rollup-openbsd-x64@4.60.1': optional: true - '@rollup/rollup-openharmony-arm64@4.60.0': + '@rollup/rollup-openharmony-arm64@4.60.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.0': + '@rollup/rollup-win32-arm64-msvc@4.60.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.0': + '@rollup/rollup-win32-ia32-msvc@4.60.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.0': + '@rollup/rollup-win32-x64-gnu@4.60.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.0': + '@rollup/rollup-win32-x64-msvc@4.60.1': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -9193,11 +9635,11 @@ snapshots: '@silvia-odwyer/photon-node@0.3.4': {} - '@sinclair/typebox@0.34.48': {} + '@sinclair/typebox@0.34.49': {} '@sindresorhus/merge-streams@4.0.0': {} - '@slack/bolt@4.6.0(@types/express@5.0.6)': + '@slack/bolt@4.7.0(@types/express@5.0.6)': dependencies: '@slack/logger': 4.0.1 '@slack/oauth': 3.0.5 @@ -9205,9 +9647,9 @@ snapshots: '@slack/types': 2.20.1 '@slack/web-api': 7.15.0 '@types/express': 5.0.6 - axios: 1.13.6 + axios: 1.15.0 express: 5.2.1 - path-to-regexp: 8.3.0 + path-to-regexp: 8.4.2 raw-body: 3.0.2 tsscmp: 1.0.6 transitivePeerDependencies: @@ -9218,14 +9660,14 @@ snapshots: '@slack/logger@4.0.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@slack/oauth@3.0.5': dependencies: '@slack/logger': 4.0.1 '@slack/web-api': 7.15.0 '@types/jsonwebtoken': 9.0.10 - '@types/node': 22.19.15 + '@types/node': 22.19.17 jsonwebtoken: 9.0.3 transitivePeerDependencies: - debug @@ -9234,10 +9676,10 @@ snapshots: dependencies: '@slack/logger': 4.0.1 '@slack/web-api': 7.15.0 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/ws': 8.18.1 eventemitter3: 5.0.4 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - debug @@ -9249,9 +9691,9 @@ snapshots: dependencies: '@slack/logger': 4.0.1 '@slack/types': 2.20.1 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/retry': 0.12.0 - axios: 1.13.6 + axios: 1.15.0 eventemitter3: 5.0.4 form-data: 4.0.5 is-electron: 2.2.2 @@ -9262,89 +9704,84 @@ snapshots: transitivePeerDependencies: - debug - '@smithy/abort-controller@4.2.12': - dependencies: - '@smithy/types': 4.13.1 - tslib: 2.8.1 - - '@smithy/config-resolver@4.4.11': + '@smithy/config-resolver@4.4.14': dependencies: - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 '@smithy/util-config-provider': 4.2.2 - '@smithy/util-endpoints': 3.3.3 - '@smithy/util-middleware': 4.2.12 + '@smithy/util-endpoints': 3.3.4 + '@smithy/util-middleware': 4.2.13 tslib: 2.8.1 - '@smithy/core@3.23.12': + '@smithy/core@3.23.14': dependencies: - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-stream': 4.5.20 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-stream': 4.5.22 '@smithy/util-utf8': 4.2.2 '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.12': + '@smithy/credential-provider-imds@4.2.13': dependencies: - '@smithy/node-config-provider': 4.3.12 - '@smithy/property-provider': 4.2.12 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 tslib: 2.8.1 - '@smithy/eventstream-codec@4.2.12': + '@smithy/eventstream-codec@4.2.13': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 '@smithy/util-hex-encoding': 4.2.2 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.2.12': + '@smithy/eventstream-serde-browser@4.2.13': dependencies: - '@smithy/eventstream-serde-universal': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/eventstream-serde-universal': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.3.12': + '@smithy/eventstream-serde-config-resolver@4.3.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.2.12': + '@smithy/eventstream-serde-node@4.2.13': dependencies: - '@smithy/eventstream-serde-universal': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/eventstream-serde-universal': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.2.12': + '@smithy/eventstream-serde-universal@4.2.13': dependencies: - '@smithy/eventstream-codec': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/eventstream-codec': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.15': + '@smithy/fetch-http-handler@5.3.16': dependencies: - '@smithy/protocol-http': 5.3.12 - '@smithy/querystring-builder': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/protocol-http': 5.3.13 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 '@smithy/util-base64': 4.3.2 tslib: 2.8.1 - '@smithy/hash-node@4.2.12': + '@smithy/hash-node@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 '@smithy/util-buffer-from': 4.2.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.12': + '@smithy/invalid-dependency@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -9355,121 +9792,121 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.12': + '@smithy/middleware-content-length@4.2.13': dependencies: - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.26': + '@smithy/middleware-endpoint@4.4.29': dependencies: - '@smithy/core': 3.23.12 - '@smithy/middleware-serde': 4.2.15 - '@smithy/node-config-provider': 4.3.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@smithy/util-middleware': 4.2.12 + '@smithy/core': 3.23.14 + '@smithy/middleware-serde': 4.2.17 + '@smithy/node-config-provider': 4.3.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-middleware': 4.2.13 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.43': + '@smithy/middleware-retry@4.5.1': dependencies: - '@smithy/node-config-provider': 4.3.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/service-error-classification': 4.2.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 + '@smithy/core': 3.23.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/service-error-classification': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-retry': 4.3.1 '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.15': + '@smithy/middleware-serde@4.2.17': dependencies: - '@smithy/core': 3.23.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@smithy/core': 3.23.14 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.12': + '@smithy/middleware-stack@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.12': + '@smithy/node-config-provider@4.3.13': dependencies: - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.5.0': + '@smithy/node-http-handler@4.5.2': dependencies: - '@smithy/abort-controller': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/querystring-builder': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/protocol-http': 5.3.13 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/property-provider@4.2.12': + '@smithy/property-provider@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/protocol-http@5.3.12': + '@smithy/protocol-http@5.3.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.12': + '@smithy/querystring-builder@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 '@smithy/util-uri-escape': 4.2.2 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.12': + '@smithy/querystring-parser@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.12': + '@smithy/service-error-classification@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 - '@smithy/shared-ini-file-loader@4.4.7': + '@smithy/shared-ini-file-loader@4.4.8': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/signature-v4@5.3.12': + '@smithy/signature-v4@5.3.13': dependencies: '@smithy/is-array-buffer': 4.2.2 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-middleware': 4.2.12 + '@smithy/util-middleware': 4.2.13 '@smithy/util-uri-escape': 4.2.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/smithy-client@4.12.6': + '@smithy/smithy-client@4.12.9': dependencies: - '@smithy/core': 3.23.12 - '@smithy/middleware-endpoint': 4.4.26 - '@smithy/middleware-stack': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/util-stream': 4.5.20 + '@smithy/core': 3.23.14 + '@smithy/middleware-endpoint': 4.4.29 + '@smithy/middleware-stack': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-stream': 4.5.22 tslib: 2.8.1 - '@smithy/types@4.13.1': + '@smithy/types@4.14.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.12': + '@smithy/url-parser@4.2.13': dependencies: - '@smithy/querystring-parser': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/querystring-parser': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 '@smithy/util-base64@4.3.2': @@ -9500,49 +9937,49 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.42': + '@smithy/util-defaults-mode-browser@4.3.45': dependencies: - '@smithy/property-provider': 4.2.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 + '@smithy/property-provider': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.45': + '@smithy/util-defaults-mode-node@4.2.49': dependencies: - '@smithy/config-resolver': 4.4.11 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/property-provider': 4.2.12 - '@smithy/smithy-client': 4.12.6 - '@smithy/types': 4.13.1 + '@smithy/config-resolver': 4.4.14 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.3.3': + '@smithy/util-endpoints@3.3.4': dependencies: - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 '@smithy/util-hex-encoding@4.2.2': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.12': + '@smithy/util-middleware@4.2.13': dependencies: - '@smithy/types': 4.13.1 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/util-retry@4.2.12': + '@smithy/util-retry@4.3.1': dependencies: - '@smithy/service-error-classification': 4.2.12 - '@smithy/types': 4.13.1 + '@smithy/service-error-classification': 4.2.13 + '@smithy/types': 4.14.0 tslib: 2.8.1 - '@smithy/util-stream@4.5.20': + '@smithy/util-stream@4.5.22': dependencies: - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/node-http-handler': 4.5.0 - '@smithy/types': 4.13.1 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/node-http-handler': 4.5.2 + '@smithy/types': 4.14.0 '@smithy/util-base64': 4.3.2 '@smithy/util-buffer-from': 4.2.2 '@smithy/util-hex-encoding': 4.2.2 @@ -9567,6 +10004,13 @@ snapshots: dependencies: tslib: 2.8.1 + '@stacksjs/clapp@0.2.0': + dependencies: + mri: 1.2.0 + wrap-ansi: 9.0.2 + + '@stacksjs/clarity@0.3.24': {} + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} @@ -9581,12 +10025,12 @@ snapshots: '@tabby_ai/hijri-converter@1.0.5': {} - '@tabler/icons-react@3.40.0(react@19.2.4)': + '@tabler/icons-react@3.41.1(react@19.2.5)': dependencies: - '@tabler/icons': 3.40.0 - react: 19.2.4 + '@tabler/icons': 3.41.1 + react: 19.2.5 - '@tabler/icons@3.40.0': {} + '@tabler/icons@3.41.1': {} '@tailwindcss/node@4.2.2': dependencies: @@ -9654,181 +10098,181 @@ snapshots: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 - postcss: 8.5.8 + postcss: 8.5.9 tailwindcss: 4.2.2 - '@tanstack/query-core@5.91.0': {} + '@tanstack/query-core@5.99.0': {} - '@tanstack/react-query@5.91.0(react@19.2.4)': + '@tanstack/react-query@5.99.0(react@19.2.5)': dependencies: - '@tanstack/query-core': 5.91.0 - react: 19.2.4 + '@tanstack/query-core': 5.99.0 + react: 19.2.5 - '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-table@8.21.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@tanstack/table-core': 8.21.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) '@tanstack/table-core@8.21.3': {} - '@tiptap/core@3.20.4(@tiptap/pm@3.20.4)': + '@tiptap/core@3.22.3(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/pm': 3.20.4 + '@tiptap/pm': 3.22.3 - '@tiptap/extension-blockquote@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-blockquote@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-bold@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-bold@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-bubble-menu@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-bubble-menu@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: '@floating-ui/dom': 1.7.6 - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 optional: true - '@tiptap/extension-bullet-list@3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-bullet-list@3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extension-list': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extension-list': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-code-block@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-code-block@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/extension-code@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-code@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-color@3.20.4(@tiptap/extension-text-style@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)))': + '@tiptap/extension-color@3.22.3(@tiptap/extension-text-style@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)))': dependencies: - '@tiptap/extension-text-style': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) + '@tiptap/extension-text-style': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) - '@tiptap/extension-document@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-document@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-dropcursor@3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-dropcursor@3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extensions': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extensions': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-floating-menu@3.20.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-floating-menu@3.22.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: '@floating-ui/dom': 1.7.6 - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 optional: true - '@tiptap/extension-gapcursor@3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-gapcursor@3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extensions': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extensions': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-hard-break@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-hard-break@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-heading@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-heading@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-highlight@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-highlight@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-horizontal-rule@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-horizontal-rule@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/extension-image@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-image@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-italic@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-italic@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-link@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-link@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 linkifyjs: 4.3.2 - '@tiptap/extension-list-item@3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-list-item@3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extension-list': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extension-list': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-list-keymap@3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-list-keymap@3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extension-list': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extension-list': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/extension-ordered-list@3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-ordered-list@3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extension-list': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extension-list': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-paragraph@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-paragraph@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-placeholder@3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4))': + '@tiptap/extension-placeholder@3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/extensions': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extensions': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) - '@tiptap/extension-strike@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-strike@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-subscript@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-subscript@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/extension-superscript@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extension-superscript@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/extension-text-align@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-text-align@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-text-style@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-text-style@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-text@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-text@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-typography@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-typography@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extension-underline@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))': + '@tiptap/extension-underline@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) - '@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 - '@tiptap/markdown@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)': + '@tiptap/markdown@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 - marked: 17.0.5 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 + marked: 17.0.6 - '@tiptap/pm@3.20.4': + '@tiptap/pm@3.22.3': dependencies: prosemirror-changeset: 2.4.0 prosemirror-collab: 1.3.1 @@ -9845,53 +10289,53 @@ snapshots: prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.4 prosemirror-tables: 1.8.5 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7) - prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.7 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8) + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.8 - '@tiptap/react@3.20.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tiptap/react@3.22.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) '@types/use-sync-external-store': 0.0.6 fast-equals: 5.4.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: - '@tiptap/extension-bubble-menu': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/extension-floating-menu': 3.20.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) + '@tiptap/extension-bubble-menu': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/extension-floating-menu': 3.22.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) transitivePeerDependencies: - '@floating-ui/dom' - '@tiptap/starter-kit@3.20.4': - dependencies: - '@tiptap/core': 3.20.4(@tiptap/pm@3.20.4) - '@tiptap/extension-blockquote': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-bold': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-bullet-list': 3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-code': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-code-block': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/extension-document': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-dropcursor': 3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-gapcursor': 3.20.4(@tiptap/extensions@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-hard-break': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-heading': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-horizontal-rule': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/extension-italic': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-link': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/extension-list': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/extension-list-item': 3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-list-keymap': 3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-ordered-list': 3.20.4(@tiptap/extension-list@3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4)) - '@tiptap/extension-paragraph': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-strike': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-text': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extension-underline': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4)) - '@tiptap/extensions': 3.20.4(@tiptap/core@3.20.4(@tiptap/pm@3.20.4))(@tiptap/pm@3.20.4) - '@tiptap/pm': 3.20.4 + '@tiptap/starter-kit@3.22.3': + dependencies: + '@tiptap/core': 3.22.3(@tiptap/pm@3.22.3) + '@tiptap/extension-blockquote': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-bold': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-bullet-list': 3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-code': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-code-block': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/extension-document': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-dropcursor': 3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-gapcursor': 3.22.3(@tiptap/extensions@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-hard-break': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-heading': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-horizontal-rule': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/extension-italic': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-link': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/extension-list': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/extension-list-item': 3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-list-keymap': 3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-ordered-list': 3.22.3(@tiptap/extension-list@3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3)) + '@tiptap/extension-paragraph': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-strike': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-text': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extension-underline': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3)) + '@tiptap/extensions': 3.22.3(@tiptap/core@3.22.3(@tiptap/pm@3.22.3))(@tiptap/pm@3.22.3) + '@tiptap/pm': 3.22.3 '@tokenizer/inflate@0.4.1': dependencies: @@ -9919,22 +10363,22 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@turbo/darwin-64@2.8.19': + '@turbo/darwin-64@2.9.6': optional: true - '@turbo/darwin-arm64@2.8.19': + '@turbo/darwin-arm64@2.9.6': optional: true - '@turbo/linux-64@2.8.19': + '@turbo/linux-64@2.9.6': optional: true - '@turbo/linux-arm64@2.8.19': + '@turbo/linux-arm64@2.9.6': optional: true - '@turbo/windows-64@2.8.19': + '@turbo/windows-64@2.9.6': optional: true - '@turbo/windows-arm64@2.8.19': + '@turbo/windows-arm64@2.9.6': optional: true '@types/body-parser@1.19.6': @@ -10068,7 +10512,7 @@ snapshots: '@types/d3-transition': 3.0.9 '@types/d3-zoom': 3.0.8 - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -10104,7 +10548,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/katex@0.16.8': {} @@ -10131,20 +10575,18 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@22.19.15': - dependencies: - undici-types: 6.21.0 - '@types/node@22.19.17': dependencies: undici-types: 6.21.0 - '@types/pg@8.18.0': + '@types/pg@8.20.0': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 pg-protocol: 1.13.0 pg-types: 2.2.0 + '@types/prop-types@15.7.15': {} + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} @@ -10153,6 +10595,11 @@ snapshots: dependencies: '@types/react': 19.2.14 + '@types/react@18.3.28': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.2.3 + '@types/react@19.2.14': dependencies: csstype: 3.2.3 @@ -10177,19 +10624,13 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@types/webidl-conversions@7.0.3': {} - - '@types/whatwg-url@13.0.0': - dependencies: - '@types/webidl-conversions': 7.0.3 - '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 optional: true '@typescript/vfs@1.6.4(typescript@5.4.5)': @@ -10216,13 +10657,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -10250,18 +10691,18 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@xyflow/react@12.10.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@xyflow/react@12.10.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@xyflow/system': 0.0.75 + '@xyflow/system': 0.0.76 classcat: 5.0.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - zustand: 4.5.7(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + zustand: 4.5.7(@types/react@19.2.14)(react@19.2.5) transitivePeerDependencies: - '@types/react' - immer - '@xyflow/system@0.0.75': + '@xyflow/system@0.0.76': dependencies: '@types/d3-drag': 3.0.7 '@types/d3-interpolate': 3.0.4 @@ -10275,7 +10716,7 @@ snapshots: a2a-js@0.2.0: dependencies: - axios: 1.13.6 + axios: 1.15.0 cors: 2.8.6 eventsource: 3.0.7 express: 5.2.1 @@ -10304,11 +10745,11 @@ snapshots: agent-base@7.1.4: {} - ai@6.0.116(zod@4.3.6): + ai@6.0.158(zod@4.3.6): dependencies: - '@ai-sdk/gateway': 3.0.66(zod@4.3.6) + '@ai-sdk/gateway': 3.0.95(zod@4.3.6) '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.19(zod@4.3.6) + '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) '@opentelemetry/api': 1.9.0 zod: 4.3.6 @@ -10323,6 +10764,10 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -10331,8 +10776,15 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.3: {} + any-promise@1.3.0: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + aproba@2.1.0: {} archiver-utils@2.1.0: @@ -10394,7 +10846,7 @@ snapshots: async@2.6.4: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 async@3.2.3: {} @@ -10402,13 +10854,17 @@ snapshots: asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} + + auto-bind@5.0.1: {} + aws-ssl-profiles@1.1.2: {} - axios@1.13.6: + axios@1.15.0: dependencies: follow-redirects: 1.15.11 form-data: 4.0.5 - proxy-from-env: 1.1.0 + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -10426,50 +10882,50 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.17: {} + baseline-browser-mapping@2.10.18: {} - basic-ftp@5.2.0: {} + basic-ftp@5.2.2: {} bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - better-auth@1.5.5(mongodb@7.1.0(socks@2.8.7))(mysql2@3.20.0(@types/node@22.19.15))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.20.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)): + better-auth@1.6.2(@opentelemetry/api@1.9.0)(mysql2@3.22.0(@types/node@22.19.17))(next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@better-auth/core': 1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0) - '@better-auth/drizzle-adapter': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1) - '@better-auth/kysely-adapter': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.13) - '@better-auth/memory-adapter': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1) - '@better-auth/mongo-adapter': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7)) - '@better-auth/prisma-adapter': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0))(@better-auth/utils@0.3.1) - '@better-auth/telemetry': 1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.13)(nanostores@1.2.0)) - '@better-auth/utils': 0.3.1 + '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) + '@better-auth/drizzle-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0) + '@better-auth/kysely-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(kysely@0.28.16) + '@better-auth/memory-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0) + '@better-auth/mongo-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0) + '@better-auth/prisma-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0) + '@better-auth/telemetry': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - '@noble/ciphers': 2.1.1 - '@noble/hashes': 2.0.1 - better-call: 1.3.2(zod@4.3.6) - defu: 6.1.4 + '@noble/ciphers': 2.2.0 + '@noble/hashes': 2.2.0 + better-call: 1.3.5(zod@4.3.6) + defu: 6.1.7 jose: 6.2.2 - kysely: 0.28.13 + kysely: 0.28.16 nanostores: 1.2.0 zod: 4.3.6 optionalDependencies: - mongodb: 7.1.0(socks@2.8.7) - mysql2: 3.20.0(@types/node@22.19.15) - next: 16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + mysql2: 3.22.0(@types/node@22.19.17) + next: 16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) pg: 8.20.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@cloudflare/workers-types' + - '@opentelemetry/api' - better-call@1.3.2(zod@4.3.6): + better-call@1.3.5(zod@4.3.6): dependencies: - '@better-auth/utils': 0.3.1 + '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 rou3: 0.7.12 - set-cookie-parser: 3.0.1 + set-cookie-parser: 3.1.0 optionalDependencies: zod: 4.3.6 @@ -10481,6 +10937,8 @@ snapshots: bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} + binary@0.3.0: dependencies: buffers: 0.1.1 @@ -10504,7 +10962,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.15.0 + qs: 6.15.1 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: @@ -10512,19 +10970,23 @@ snapshots: bowser@2.14.1: {} - brace-expansion@1.1.13: + brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + brotli@1.3.3: dependencies: base64-js: 1.5.1 @@ -10533,8 +10995,6 @@ snapshots: dependencies: pako: 1.0.11 - bson@7.2.0: {} - buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} @@ -10548,6 +11008,11 @@ snapshots: buffers@0.1.1: {} + bunfig@0.15.6: + dependencies: + '@stacksjs/clapp': 0.2.0 + '@stacksjs/clarity': 0.3.24 + bytes@3.1.2: {} cac@6.7.14: {} @@ -10619,19 +11084,30 @@ snapshots: check-error@2.1.3: {} - chevrotain-allstar@0.3.1(chevrotain@11.1.2): + chevrotain-allstar@0.4.1(chevrotain@12.0.0): dependencies: - chevrotain: 11.1.2 - lodash-es: 4.17.23 + chevrotain: 12.0.0 + lodash-es: 4.18.1 - chevrotain@11.1.2: + chevrotain@12.0.0: dependencies: - '@chevrotain/cst-dts-gen': 11.1.2 - '@chevrotain/gast': 11.1.2 - '@chevrotain/regexp-to-ast': 11.1.2 - '@chevrotain/types': 11.1.2 - '@chevrotain/utils': 11.1.2 - lodash-es: 4.17.23 + '@chevrotain/cst-dts-gen': 12.0.0 + '@chevrotain/gast': 12.0.0 + '@chevrotain/regexp-to-ast': 12.0.0 + '@chevrotain/types': 12.0.0 + '@chevrotain/utils': 12.0.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 chownr@2.0.0: {} @@ -10641,6 +11117,12 @@ snapshots: classcat@5.0.5: {} + cli-boxes@3.0.0: {} + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + cli-highlight@2.1.11: dependencies: chalk: 4.1.2 @@ -10650,6 +11132,13 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 yargs: 16.2.0 + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + client-only@0.0.1: {} cliui@6.0.0: @@ -10674,18 +11163,22 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: - '@types/react' - '@types/react-dom' + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -10726,10 +11219,12 @@ snapshots: console-control-strings@1.1.0: {} - content-disposition@1.0.1: {} + content-disposition@1.1.0: {} content-type@1.0.5: {} + convert-to-spaces@2.0.1: {} + cookie-signature@1.2.2: {} cookie@0.7.2: {} @@ -10769,23 +11264,21 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-js@4.2.0: {} - csstype@3.2.3: {} cycle@1.0.3: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.2): dependencies: cose-base: 1.0.3 - cytoscape: 3.33.1 + cytoscape: 3.33.2 - cytoscape-fcose@2.2.0(cytoscape@3.33.1): + cytoscape-fcose@2.2.0(cytoscape@3.33.2): dependencies: cose-base: 2.2.0 - cytoscape: 3.33.1 + cytoscape: 3.33.2 - cytoscape@3.33.1: {} + cytoscape@3.33.2: {} d3-array@2.12.1: dependencies: @@ -10817,7 +11310,7 @@ snapshots: d3-delaunay@6.0.4: dependencies: - delaunator: 5.0.1 + delaunator: 5.1.0 d3-dispatch@3.0.1: {} @@ -10957,7 +11450,7 @@ snapshots: dagre-d3-es@7.0.14: dependencies: d3: 7.9.0 - lodash-es: 4.17.23 + lodash-es: 4.18.1 data-uri-to-buffer@4.0.1: {} @@ -10997,7 +11490,7 @@ snapshots: parse-database-url: 0.3.0 prompt: 1.3.0 rc: 1.2.8 - resolve: 1.22.11 + resolve: 1.22.12 semver: 5.7.2 tunnel-ssh: 4.1.6 yargs: 15.4.1 @@ -11028,7 +11521,7 @@ snapshots: deep-extend@0.6.0: {} - defu@6.1.4: {} + defu@6.1.7: {} degenerator@5.0.1: dependencies: @@ -11036,9 +11529,9 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - delaunator@5.0.1: + delaunator@5.1.0: dependencies: - robust-predicates: 3.0.2 + robust-predicates: 3.0.3 delayed-stream@1.0.0: {} @@ -11060,7 +11553,7 @@ snapshots: dfa@1.2.0: {} - diff@8.0.3: {} + diff@8.0.4: {} dom-helpers@5.2.1: dependencies: @@ -11091,11 +11584,11 @@ snapshots: ee-first@1.1.1: {} - embla-carousel-react@8.6.0(react@19.2.4): + embla-carousel-react@8.6.0(react@19.2.5): dependencies: embla-carousel: 8.6.0 embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.2.4 + react: 19.2.5 embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): dependencies: @@ -11105,6 +11598,8 @@ snapshots: emoji-regex-xs@1.0.0: {} + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} encodeurl@2.0.0: {} @@ -11116,7 +11611,7 @@ snapshots: enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.2 entities@4.5.0: {} @@ -11128,6 +11623,8 @@ snapshots: commander: 13.1.0 cross-spawn: 7.0.6 + environment@1.1.0: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -11145,39 +11642,43 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild@0.27.4: + es-toolkit@1.45.1: {} + + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 escalade@3.2.0: {} escape-html@1.0.3: {} + escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -11249,7 +11750,7 @@ snapshots: dependencies: accepts: 2.0.0 body-parser: 2.2.2 - content-disposition: 1.0.1 + content-disposition: 1.1.0 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 @@ -11267,7 +11768,7 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.15.0 + qs: 6.15.1 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 @@ -11305,21 +11806,21 @@ snapshots: fast-xml-builder@1.1.4: dependencies: - path-expression-matcher: 1.1.3 + path-expression-matcher: 1.5.0 - fast-xml-parser@5.5.6: + fast-xml-parser@5.5.8: dependencies: fast-xml-builder: 1.1.4 - path-expression-matcher: 1.1.3 - strnum: 2.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.2.3 fd-slicer@1.1.0: dependencies: pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fetch-blob@3.2.0: dependencies: @@ -11330,15 +11831,19 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-type@21.3.3: + file-type@21.3.4: dependencies: '@tokenizer/inflate': 0.4.1 - strtok3: 10.3.4 + strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + final-fs@1.6.1: dependencies: node-fs: 0.1.7 @@ -11388,14 +11893,14 @@ snapshots: forwarded@0.2.0: {} - framer-motion@12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + framer-motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: motion-dom: 12.38.0 motion-utils: 12.36.0 tslib: 2.8.1 optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) fresh@2.0.0: {} @@ -11484,21 +11989,25 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-tsconfig@4.13.6: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 get-uri@6.0.5: dependencies: - basic-ftp: 5.2.0 + basic-ftp: 5.2.2 data-uri-to-buffer: 6.0.2 debug: 4.4.3 transitivePeerDependencies: - supports-color + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 @@ -11678,7 +12187,7 @@ snapshots: hosted-git-info@9.0.2: dependencies: - lru-cache: 11.2.7 + lru-cache: 11.3.3 hsl-to-hex@1.0.0: dependencies: @@ -11743,6 +12252,8 @@ snapshots: immediate@3.0.6: {} + indent-string@5.0.0: {} + inflection@1.13.4: {} inflight@1.0.6: @@ -11754,6 +12265,45 @@ snapshots: ini@1.3.8: {} + ink-spinner@5.0.0(ink@5.2.1(@types/react@18.3.28)(react@18.3.1))(react@18.3.1): + dependencies: + cli-spinners: 2.9.2 + ink: 5.2.1(@types/react@18.3.28)(react@18.3.1) + react: 18.3.1 + + ink@5.2.1(@types/react@18.3.28)(react@18.3.1): + dependencies: + '@alcalzone/ansi-tokenize': 0.1.3 + ansi-escapes: 7.3.0 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.45.1 + indent-string: 5.0.0 + is-in-ci: 1.0.0 + patch-console: 2.0.0 + react: 18.3.1 + react-reconciler: 0.29.2(react@18.3.1) + scheduler: 0.23.2 + signal-exit: 3.0.7 + slice-ansi: 7.1.2 + stack-utils: 2.0.6 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + ws: 8.20.0 + yoga-layout: 3.2.1 + optionalDependencies: + '@types/react': 18.3.28 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + inline-style-parser@0.2.7: {} internmap@1.0.1: {} @@ -11773,6 +12323,10 @@ snapshots: is-arrayish@0.3.4: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -11781,10 +12335,26 @@ snapshots: is-electron@2.2.2: {} + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.5.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + is-in-ci@1.0.0: {} + + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} is-promise@4.0.0: {} @@ -11813,6 +12383,8 @@ snapshots: jose@6.2.2: {} + js-md5@0.8.3: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -11863,23 +12435,22 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 - katex@0.16.38: + katex@0.16.45: dependencies: commander: 8.3.0 khroma@2.1.0: {} - koffi@2.15.2: + koffi@2.15.6: optional: true - kysely@0.28.13: {} - kysely@0.28.16: {} - langium@4.2.1: + langium@4.2.2: dependencies: - chevrotain: 11.1.2 - chevrotain-allstar: 0.3.1(chevrotain@11.1.2) + '@chevrotain/regexp-to-ast': 12.0.0 + chevrotain: 12.0.0 + chevrotain-allstar: 0.4.1(chevrotain@12.0.0) vscode-languageserver: 9.0.1 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 @@ -11962,7 +12533,7 @@ snapshots: dependencies: p-locate: 4.1.0 - lodash-es@4.17.23: {} + lodash-es@4.18.1: {} lodash.camelcase@4.3.0: {} @@ -12002,7 +12573,7 @@ snapshots: lodash.uniq@4.5.0: {} - lodash@4.17.23: {} + lodash@4.18.1: {} long@5.3.2: {} @@ -12014,19 +12585,19 @@ snapshots: loupe@3.2.1: {} - lru-cache@11.2.7: {} + lru-cache@11.3.3: {} lru-cache@7.18.3: {} lru.min@1.1.4: {} - lucide-react@0.542.0(react@19.2.4): + lucide-react@0.542.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 - lucide-react@0.554.0(react@19.2.4): + lucide-react@0.554.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 magic-string@0.30.21: dependencies: @@ -12051,7 +12622,7 @@ snapshots: marked@16.4.2: {} - marked@17.0.5: {} + marked@17.0.6: {} math-intrinsics@1.1.0: {} @@ -12226,28 +12797,26 @@ snapshots: media-typer@1.1.0: {} - memory-pager@1.5.0: {} - merge-descriptors@2.0.0: {} - mermaid@11.13.0: + mermaid@11.14.0: dependencies: '@braintree/sanitize-url': 7.1.2 '@iconify/utils': 3.1.0 - '@mermaid-js/parser': 1.0.1 + '@mermaid-js/parser': 1.1.0 '@types/d3': 7.4.3 '@upsetjs/venn.js': 2.0.0 - cytoscape: 3.33.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) - cytoscape-fcose: 2.2.0(cytoscape@3.33.1) + cytoscape: 3.33.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.2) + cytoscape-fcose: 2.2.0(cytoscape@3.33.2) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.14 dayjs: 1.11.20 dompurify: 3.3.3 - katex: 0.16.38 + katex: 0.16.45 khroma: 2.1.0 - lodash-es: 4.17.23 + lodash-es: 4.18.1 marked: 16.4.2 roughjs: 4.6.6 stylis: 4.3.6 @@ -12367,7 +12936,7 @@ snapshots: dependencies: '@types/katex': 0.16.8 devlop: 1.1.0 - katex: 0.16.38 + katex: 0.16.45 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 @@ -12467,7 +13036,7 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 @@ -12499,19 +13068,21 @@ snapshots: dependencies: mime-db: 1.54.0 + mimic-fn@2.1.0: {} + mimic-response@2.1.0: {} - minimatch@10.2.4: + minimatch@10.2.5: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.14 minimatch@5.1.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.0 minimist@1.2.8: {} @@ -12534,41 +13105,30 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.8.1: + mlly@1.8.2: dependencies: acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 - mongodb-connection-string-url@7.0.1: - dependencies: - '@types/whatwg-url': 13.0.0 - whatwg-url: 14.2.0 - mongodb-uri@0.9.7: {} - mongodb@7.1.0(socks@2.8.7): - dependencies: - '@mongodb-js/saslprep': 1.4.6 - bson: 7.2.0 - mongodb-connection-string-url: 7.0.1 - optionalDependencies: - socks: 2.8.7 - motion-dom@12.38.0: dependencies: motion-utils: 12.36.0 motion-utils@12.36.0: {} - motion@12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - framer-motion: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + framer-motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tslib: 2.8.1 optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + mri@1.2.0: {} ms@2.0.0: {} @@ -12576,19 +13136,7 @@ snapshots: mute-stream@0.0.8: {} - mysql2@3.20.0(@types/node@22.19.15): - dependencies: - '@types/node': 22.19.15 - aws-ssl-profiles: 1.1.2 - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.7.2 - long: 5.3.2 - lru.min: 1.1.4 - named-placeholders: 1.1.6 - sql-escaper: 1.3.3 - - mysql2@3.20.0(@types/node@22.19.17): + mysql2@3.22.0(@types/node@22.19.17): dependencies: '@types/node': 22.19.17 aws-ssl-profiles: 1.1.2 @@ -12620,23 +13168,23 @@ snapshots: negotiator@1.0.0: {} - netmask@2.0.2: {} + netmask@2.1.1: {} - next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next-themes@0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.2.3(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: '@next/env': 16.2.3 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.17 + baseline-browser-mapping: 2.10.18 caniuse-lite: 1.0.30001787 postcss: 8.4.31 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + styled-jsx: 5.1.6(react@19.2.5) optionalDependencies: '@next/swc-darwin-arm64': 16.2.3 '@next/swc-darwin-x64': 16.2.3 @@ -12693,6 +13241,8 @@ snapshots: object-inspect@1.13.4: {} + on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -12701,6 +13251,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.5: @@ -12709,11 +13263,17 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - openai@6.26.0(ws@8.19.0)(zod@4.3.6): + openai@6.26.0: {} + + openai@6.26.0(ws@8.20.0)(zod@4.3.6): optionalDependencies: - ws: 8.19.0 + ws: 8.20.0 zod: 4.3.6 + openai@6.26.0(zod@3.25.76): + optionalDependencies: + zod: 3.25.76 + orderedmap@2.1.1: {} p-finally@1.0.0: {} @@ -12722,6 +13282,10 @@ snapshots: dependencies: p-try: 2.2.0 + p-limit@5.0.0: + dependencies: + yocto-queue: 1.2.2 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -12758,7 +13322,7 @@ snapshots: pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 - netmask: 2.0.2 + netmask: 2.1.1 package-manager-detector@1.6.0: {} @@ -12800,11 +13364,13 @@ snapshots: partial-json@0.1.7: {} + patch-console@2.0.0: {} + path-data-parser@0.1.0: {} path-exists@4.0.0: {} - path-expression-matcher@1.1.3: {} + path-expression-matcher@1.5.0: {} path-is-absolute@1.0.1: {} @@ -12816,10 +13382,10 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.7 + lru-cache: 11.3.3 minipass: 7.1.3 - path-to-regexp@8.3.0: {} + path-to-regexp@8.4.2: {} pathe@2.0.3: {} @@ -12862,14 +13428,47 @@ snapshots: dependencies: split2: 4.2.0 + pi-brain@0.1.7(@sinclair/typebox@0.34.49): + dependencies: + '@sinclair/typebox': 0.34.49 + + pi-dcp@0.2.0(@mariozechner/pi-agent-core@0.61.1(zod@3.25.76))(@mariozechner/pi-coding-agent@0.61.1(zod@3.25.76)): + dependencies: + '@mariozechner/pi-agent-core': 0.61.1(zod@3.25.76) + '@mariozechner/pi-coding-agent': 0.61.1(zod@3.25.76) + '@sinclair/typebox': 0.34.49 + bunfig: 0.15.6 + picocolors@1.1.1: {} - picomatch@4.0.3: {} + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.1.0: {} + + pino@9.14.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 3.1.0 pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.1 + mlly: 1.8.2 pathe: 2.0.3 points-on-curve@0.2.0: {} @@ -12887,12 +13486,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.9: dependencies: nanoid: 3.3.11 @@ -12922,6 +13515,8 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@5.0.0: {} + prompt@1.3.0: dependencies: '@colors/colors': 1.5.0 @@ -12946,7 +13541,7 @@ snapshots: prosemirror-changeset@2.4.0: dependencies: - prosemirror-transform: 1.11.0 + prosemirror-transform: 1.12.0 prosemirror-collab@1.3.1: dependencies: @@ -12956,32 +13551,32 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 + prosemirror-transform: 1.12.0 prosemirror-dropcursor@1.8.2: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.7 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.8 prosemirror-gapcursor@1.4.1: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.7 + prosemirror-view: 1.41.8 prosemirror-history@1.5.0: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.7 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.8 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 + prosemirror-transform: 1.12.0 prosemirror-keymap@1.2.3: dependencies: @@ -13013,39 +13608,39 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 + prosemirror-transform: 1.12.0 prosemirror-state@1.4.4: dependencies: prosemirror-model: 1.25.4 - prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.7 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.8 prosemirror-tables@1.8.5: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.7 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.41.8 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.7 + prosemirror-view: 1.41.8 - prosemirror-transform@1.11.0: + prosemirror-transform@1.12.0: dependencies: prosemirror-model: 1.25.4 - prosemirror-view@1.41.7: + prosemirror-view@1.41.8: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.11.0 + prosemirror-transform: 1.12.0 protobufjs@7.5.4: dependencies: @@ -13059,7 +13654,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.15 + '@types/node': 22.19.17 long: 5.3.2 proxy-addr@2.0.7: @@ -13082,6 +13677,8 @@ snapshots: proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} + pump@3.0.4: dependencies: end-of-stream: 1.4.5 @@ -13089,9 +13686,7 @@ snapshots: punycode.js@2.3.1: {} - punycode@2.3.1: {} - - qs@6.15.0: + qs@6.15.1: dependencies: side-channel: 1.1.0 @@ -13099,65 +13694,67 @@ snapshots: dependencies: inherits: 2.0.4 - radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + quick-format-unescaped@4.0.4: {} + + radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) @@ -13178,77 +13775,87 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-day-picker@9.14.0(react@19.2.4): + react-day-picker@9.14.0(react@19.2.5): dependencies: '@date-fns/tz': 1.4.1 '@tabby_ai/hijri-converter': 1.0.5 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 - react: 19.2.4 + react: 19.2.5 - react-dom@19.2.4(react@19.2.4): + react-dom@19.2.5(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 scheduler: 0.27.0 - react-hook-form@7.71.2(react@19.2.4): + react-hook-form@7.72.1(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 react-is@16.13.1: {} react-is@18.3.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + react-reconciler@0.29.2(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - react-resizable-panels@3.0.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-resizable-panels@3.0.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-smooth@4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-smooth@4.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: fast-equals: 5.4.0 prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-transition-group: 4.4.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5): dependencies: get-nonce: 1.0.1 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-transition-group@4.4.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 - react@19.2.4: {} + react@19.2.5: {} read@1.0.7: dependencies: @@ -13274,19 +13881,25 @@ snapshots: dependencies: minimatch: 5.1.9 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + real-require@0.2.0: {} + recharts-scale@0.4.5: dependencies: decimal.js-light: 2.5.1 - recharts@2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + recharts@2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 - lodash: 4.17.23 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + lodash: 4.18.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-smooth: 4.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) recharts-scale: 0.4.5 tiny-invariant: 1.3.3 victory-vendor: 36.9.2 @@ -13311,7 +13924,7 @@ snapshots: '@types/katex': 0.16.8 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.38 + katex: 0.16.45 unist-util-visit-parents: 6.0.2 vfile: 6.0.3 @@ -13399,12 +14012,18 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: + resolve@1.22.12: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restructure@3.0.2: {} retry@0.12.0: {} @@ -13421,37 +14040,37 @@ snapshots: dependencies: glob: 7.2.3 - robust-predicates@3.0.2: {} + robust-predicates@3.0.3: {} - rollup@4.60.0: + rollup@4.60.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.0 - '@rollup/rollup-android-arm64': 4.60.0 - '@rollup/rollup-darwin-arm64': 4.60.0 - '@rollup/rollup-darwin-x64': 4.60.0 - '@rollup/rollup-freebsd-arm64': 4.60.0 - '@rollup/rollup-freebsd-x64': 4.60.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 - '@rollup/rollup-linux-arm-musleabihf': 4.60.0 - '@rollup/rollup-linux-arm64-gnu': 4.60.0 - '@rollup/rollup-linux-arm64-musl': 4.60.0 - '@rollup/rollup-linux-loong64-gnu': 4.60.0 - '@rollup/rollup-linux-loong64-musl': 4.60.0 - '@rollup/rollup-linux-ppc64-gnu': 4.60.0 - '@rollup/rollup-linux-ppc64-musl': 4.60.0 - '@rollup/rollup-linux-riscv64-gnu': 4.60.0 - '@rollup/rollup-linux-riscv64-musl': 4.60.0 - '@rollup/rollup-linux-s390x-gnu': 4.60.0 - '@rollup/rollup-linux-x64-gnu': 4.60.0 - '@rollup/rollup-linux-x64-musl': 4.60.0 - '@rollup/rollup-openbsd-x64': 4.60.0 - '@rollup/rollup-openharmony-arm64': 4.60.0 - '@rollup/rollup-win32-arm64-msvc': 4.60.0 - '@rollup/rollup-win32-ia32-msvc': 4.60.0 - '@rollup/rollup-win32-x64-gnu': 4.60.0 - '@rollup/rollup-win32-x64-msvc': 4.60.0 + '@rollup/rollup-android-arm-eabi': 4.60.1 + '@rollup/rollup-android-arm64': 4.60.1 + '@rollup/rollup-darwin-arm64': 4.60.1 + '@rollup/rollup-darwin-x64': 4.60.1 + '@rollup/rollup-freebsd-arm64': 4.60.1 + '@rollup/rollup-freebsd-x64': 4.60.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 + '@rollup/rollup-linux-arm-musleabihf': 4.60.1 + '@rollup/rollup-linux-arm64-gnu': 4.60.1 + '@rollup/rollup-linux-arm64-musl': 4.60.1 + '@rollup/rollup-linux-loong64-gnu': 4.60.1 + '@rollup/rollup-linux-loong64-musl': 4.60.1 + '@rollup/rollup-linux-ppc64-gnu': 4.60.1 + '@rollup/rollup-linux-ppc64-musl': 4.60.1 + '@rollup/rollup-linux-riscv64-gnu': 4.60.1 + '@rollup/rollup-linux-riscv64-musl': 4.60.1 + '@rollup/rollup-linux-s390x-gnu': 4.60.1 + '@rollup/rollup-linux-x64-gnu': 4.60.1 + '@rollup/rollup-linux-x64-musl': 4.60.1 + '@rollup/rollup-openbsd-x64': 4.60.1 + '@rollup/rollup-openharmony-arm64': 4.60.1 + '@rollup/rollup-win32-arm64-msvc': 4.60.1 + '@rollup/rollup-win32-ia32-msvc': 4.60.1 + '@rollup/rollup-win32-x64-gnu': 4.60.1 + '@rollup/rollup-win32-x64-msvc': 4.60.1 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -13471,7 +14090,7 @@ snapshots: depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.3.0 + path-to-regexp: 8.4.2 transitivePeerDependencies: - supports-color @@ -13481,12 +14100,18 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} saxes@5.0.1: dependencies: xmlchars: 2.2.0 + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + scheduler@0.25.0-rc-603e6108-20241029: {} scheduler@0.27.0: {} @@ -13524,7 +14149,7 @@ snapshots: set-blocking@2.0.0: {} - set-cookie-parser@3.0.1: {} + set-cookie-parser@3.1.0: {} setimmediate@1.0.5: {} @@ -13579,7 +14204,7 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -13603,7 +14228,7 @@ snapshots: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -13627,6 +14252,16 @@ snapshots: sisteransi@1.0.5: {} + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + smart-buffer@4.2.0: {} socks-proxy-agent@8.0.5: @@ -13642,10 +14277,14 @@ snapshots: ip-address: 10.1.0 smart-buffer: 4.2.0 - sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + + sonner@2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) source-map-js@1.2.1: {} @@ -13654,10 +14293,6 @@ snapshots: space-separated-tokens@2.0.2: {} - sparse-bitfield@3.0.3: - dependencies: - memory-pager: 1.5.0 - split2@4.2.0: {} sql-escaper@1.3.3: {} @@ -13672,23 +14307,27 @@ snapshots: stack-trace@0.0.10: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + stackback@0.0.2: {} statuses@2.0.2: {} std-env@3.10.0: {} - streamdown@1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.4): + streamdown@1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.5): dependencies: clsx: 2.1.1 hast: 1.0.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 - katex: 0.16.38 - lucide-react: 0.542.0(react@19.2.4) + katex: 0.16.45 + lucide-react: 0.542.0(react@19.2.5) marked: 16.4.2 - mermaid: 11.13.0 - react: 19.2.4 + mermaid: 11.14.0 + react: 19.2.5 rehype-harden: 1.1.8 rehype-katex: 7.0.1 rehype-raw: 7.0.0 @@ -13716,6 +14355,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -13745,9 +14390,9 @@ snapshots: dependencies: js-tokens: 9.0.1 - strnum@2.2.0: {} + strnum@2.2.3: {} - strtok3@10.3.4: + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -13759,10 +14404,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - styled-jsx@5.1.6(react@19.2.4): + styled-jsx@5.1.6(react@19.2.5): dependencies: client-only: 0.0.1 - react: 19.2.4 + react: 19.2.5 stylis@4.3.6: {} @@ -13778,7 +14423,7 @@ snapshots: tailwindcss@4.2.2: {} - tapable@2.3.0: {} + tapable@2.3.2: {} tar-stream@2.2.0: dependencies: @@ -13805,6 +14450,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} @@ -13813,12 +14462,12 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.0.4: {} + tinyexec@1.1.1: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinypool@1.1.1: {} @@ -13828,6 +14477,10 @@ snapshots: tmp@0.2.5: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + toidentifier@1.0.1: {} token-types@6.1.2: @@ -13845,10 +14498,6 @@ snapshots: tr46@0.0.3: {} - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - traverse@0.3.9: {} trim-lines@3.0.1: {} @@ -13865,8 +14514,8 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.4 - get-tsconfig: 4.13.6 + esbuild: 0.27.7 + get-tsconfig: 4.13.7 optionalDependencies: fsevents: 2.3.3 @@ -13878,19 +14527,21 @@ snapshots: transitivePeerDependencies: - supports-color - turbo@2.8.19: + turbo@2.9.6: optionalDependencies: - '@turbo/darwin-64': 2.8.19 - '@turbo/darwin-arm64': 2.8.19 - '@turbo/linux-64': 2.8.19 - '@turbo/linux-arm64': 2.8.19 - '@turbo/windows-64': 2.8.19 - '@turbo/windows-arm64': 2.8.19 + '@turbo/darwin-64': 2.9.6 + '@turbo/darwin-arm64': 2.9.6 + '@turbo/linux-64': 2.9.6 + '@turbo/linux-arm64': 2.9.6 + '@turbo/windows-64': 2.9.6 + '@turbo/windows-arm64': 2.9.6 tw-animate-css@1.4.0: {} tweetnacl@0.14.5: {} + type-fest@4.41.0: {} + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -13913,7 +14564,7 @@ snapshots: undici-types@6.21.0: {} - undici@7.24.4: {} + undici@7.24.7: {} unicode-properties@1.4.1: dependencies: @@ -13985,32 +14636,32 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-debounce@10.1.0(react@19.2.4): + use-debounce@10.1.1(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5): dependencies: detect-node-es: 1.1.0 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-stick-to-bottom@1.1.3(react@19.2.4): + use-stick-to-bottom@1.1.3(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 - use-sync-external-store@1.6.0(react@19.2.4): + use-sync-external-store@1.6.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 util-deprecate@1.0.2: {} @@ -14022,11 +14673,11 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -14069,13 +14720,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-node@3.2.4(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -14090,27 +14741,27 @@ snapshots: - tsx - yaml - vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: - esbuild: 0.27.4 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.9 - rollup: 4.60.0 - tinyglobby: 0.2.15 + rollup: 4.60.1 + tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -14121,19 +14772,19 @@ snapshots: expect-type: 1.3.0 magic-string: 0.30.21 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 22.19.15 + '@types/debug': 4.1.13 + '@types/node': 22.19.17 transitivePeerDependencies: - jiti - less @@ -14173,13 +14824,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} - - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -14202,6 +14846,10 @@ snapshots: dependencies: string-width: 4.2.3 + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + winston@2.4.7: dependencies: async: 2.6.4 @@ -14223,9 +14871,15 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} - ws@8.19.0: {} + ws@8.20.0: {} xmlchars@2.2.0: {} @@ -14237,7 +14891,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.2: {} + yaml@2.8.3: {} yargs-parser@18.1.3: dependencies: @@ -14287,6 +14941,8 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yocto-queue@1.2.2: {} + yoctocolors@2.1.2: {} yoga-layout@3.2.1: {} @@ -14297,23 +14953,31 @@ snapshots: compress-commons: 4.1.2 readable-stream: 3.6.2 - zod-to-json-schema@3.25.1(zod@4.3.6): + zod-to-json-schema@3.25.2: {} + + zod-to-json-schema@3.25.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod-to-json-schema@3.25.2(zod@4.3.6): dependencies: zod: 4.3.6 + zod@3.25.76: {} + zod@4.3.6: {} - zustand@4.5.7(@types/react@19.2.14)(react@19.2.4): + zustand@4.5.7(@types/react@19.2.14)(react@19.2.5): dependencies: - use-sync-external-store: 1.6.0(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - react: 19.2.4 + react: 19.2.5 - zustand@5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): + zustand@5.0.12(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)): optionalDependencies: '@types/react': 19.2.14 - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) + react: 19.2.5 + use-sync-external-store: 1.6.0(react@19.2.5) zwitch@2.0.4: {}