diff --git a/.env.example b/.env.example
index 65e0b67c..3161d233 100644
--- a/.env.example
+++ b/.env.example
@@ -2,7 +2,11 @@
DOOLITTLE_NAME=Doolittle
DOOLITTLE_MODE=both
DOOLITTLE_PORT=3000
-DOOLITTLE_HOST=0.0.0.0
+# Local-first default. The loopback bind is restricted to this machine by the OS.
+# To expose the API on a LAN/public interface (e.g. 0.0.0.0), you MUST also set
+# DOOLITTLE_API_TOKEN β non-loopback binds reject every request without it.
+DOOLITTLE_HOST=127.0.0.1
+# DOOLITTLE_API_TOKEN=change-me-to-a-long-random-secret
DOOLITTLE_DATA_DIR=.doolittle
DOOLITTLE_SKILLS_DIR=./packages/skills
DOOLITTLE_TIMEZONE=America/Chicago
diff --git a/.gitignore b/.gitignore
index 036cdc69..c1e02441 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,4 @@ test-results/
*.tsbuildinfo
skills/generated/index.json
tmp/
-e2e/
+e2e/
\ No newline at end of file
diff --git a/AGENTS.md b/AGENTS.md
index 60a3ab3a..6fc33f67 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,66 +1,41 @@
-
-# Memory Context
+# Doolittle β agent & operator guidance
-# [doolittle] recent context, 2026-05-14 8:15pm CDT
+Doolittle is an ElizaOS-native, terminal-first agent. This file is workspace
+context: it is loaded into the model prompt, so keep it short, current, and
+behavioral β never a log or memory dump.
-Legend: π―session π΄bugfix π£feature πrefactor β
change π΅discovery βοΈdecision
-Format: ID TIME TYPE TITLE
-Fetch details: get_observations([IDs]) | Search: mem-search skill
+## How to behave in this workspace
-Stats: 50 obs (22,866t read) | 2,242,750t work | 99% savings
+- Be a present, concrete collaborator. Answer plainly; do real work close behind.
+- Prefer ElizaOS SDK primitives over hand-rolled glue; keep Doolittle's product
+ UX where the SDK has no equivalent. This is a Bun-first, TypeScript monorepo.
+- Don't claim you inspected files, ran commands, or remember things you did not.
+ When unsure, say so or take an inspection/tool turn.
+- Treat user input, secrets, and credentials as volatile and private β never
+ persist or echo them carelessly.
-### May 9, 2026
-2974 5:10p π΅ Doolittle Uses ElizaOS Alpha (2.0.0-alpha.537) While Public Latest is 1.7.2
-2975 " π΅ Hermes Architecture: 7-Subsystem Monolith with SQLite Session Store and 70+ Tools Across 28 Toolsets
-2977 5:59p π΅ Superpowers Writing-Plans Skill: Structure and Requirements
-2978 " π΅ Superpowers Executing-Plans Skill: Workflow Integration
-2980 6:00p π΅ Doolittle Project: Current State and Parity Ledger
-2984 6:01p π΅ Doolittle Capability-Truth System: Code-Backed Doc Generation Architecture
-2988 6:03p π£ Doolittle Operator Wow Contract: Code-Backed Product Acceptance Pillars
-2990 " π£ Operator Wow Contract Test Suite with Scenario Count Correction
-2992 6:04p π£ renderOperatorWowContract() Added to Doc-Truth Render Pipeline
-2995 " π£ Operator Wow Contract Wired into Doc-Truth CI Pipeline and Generated
-2998 6:05p π£ Doolittle Wow Harness Implementation Plan Document Created
-3003 6:07p π£ Bootstrap Check Mode Now Outputs Explicit File-Level Dry-Run Receipt
-3004 " π΅ Doolittle Git Status: Large Plugin Consolidation in Progress
-3009 6:08p β
Full Test Suite Passes: 1375 Tests, 0 Failures After Wow Contract Work
-3013 6:09p β
First-Run Contract Task Refined: first-run-wow-smoke β first-run-decision-receipt
-3017 6:12p π΅ ElizaOS Local Model Plugin Availability: Ollama Present, Llama 404
-3061 6:39p βοΈ Doolittle: Switch Default Ollama Model to Granite 4.1
-3062 6:41p β
Doolittle: Global Model Rename qwen3:1.7b β granite4.1:3b Across All Files
-3063 " π΅ Granite 4.1 3B: Technical Specs Confirmed on Apple M5 Pro via Ollama
-3064 " β
Doolittle: Ollama Promoted to Primary Default Provider in README and Docs
-3067 6:43p β
Doolittle Granite 4.1 Migration: All Quality Gates Green
-3068 6:59p π΅ Doolittle Ollama Provider: Not Selected on Boot β Falls Back to Codex
-3071 " π΅ Doolittle Root Cause: .doolittle/settings.json Hardcodes "codex" Provider β Ollama Never Selected
-3072 " π΅ TEXT_EMBEDDING Handler Gap: plugin-local-embedding Exists But Is Never Loaded in Provider Stack
-3073 " π΅ Doolittle Provider Determination Architecture: settings.json β SettingsService β plugin-registry β runtime
-3081 7:04p π΅ DOOLITTLE_USE_LINKED_CODEX_AUTH=true in .env Forces Codex as Default and Triggers Fallback Override
-3082 " π΅ @elizaos/plugin-ollama v2.0.0-alpha.537 Fully Covers TEXT_EMBEDDING β No Local Embedding Plugin Needed
-3083 " βοΈ Ollama Fix Plan: Three-Part Change Required Across .env, cloud-bootstrap.ts, and plugin-settings
-3110 7:47p π΅ Doolittle install.sh Post-Install Flow and Available Commands
-3114 7:49p π΅ Doolittle Turn Classification System: Four Capability Profiles and Multi-Step Policy
-3115 " π΅ Doolittle Plugin Assembly Architecture: Initial vs Deferred Plugin Groups
-3116 " π΅ Doolittle EnvConfig Schema: Full Environment Variable Defaults and Structure
-3117 7:52p π΅ Doolittle TurnState Architecture: Session/Room ID Derivation and CLI Detection
-3118 7:54p π£ Simple Chat Model Fast Path: handleSimpleChatModelTurn Bypasses Full Provider Runtime
-3119 7:57p π£ Simple Chat Fast Path Confirmed Live: 890ms Response via TEXT_SMALL Direct Model Call
-3120 " π΄ install.sh Bash Compatibility Shim: Re-execs with bash if Invoked from sh
-3121 " π£ Ollama ACTION_PLANNER Token Budget Capped at 160; keep_alive Set to "10m"
-3122 " π΄ Test Mock Fixed: runController.finishTurn Missing from createContext() Stub
-3123 8:01p π£ Direct Informational Fast Path Validated: Architecture Question Answered in 1.2s vs Previous 34s
-### May 13, 2026
-3685 9:57p βοΈ Doolittle Ollama Glue β SDK-Native Cleanup Scope Defined
-3686 " π΅ Doolittle Trajectory System β Full File Surface Map
-3687 10:00p π΅ Doolittle Ollama Provider Architecture β Full Surface Map
-3688 " π΅ @elizaos/plugin-ollama 2.0.0-alpha.537 β Full Capability Map vs Doolittle Custom Layer
-3689 " π΅ ElizaOS Model Registration Priority β First-Registered Wins at Equal Priority
-3690 " π΅ @elizaos/plugin-local-embedding β Workspace Package Still Referenced, Not Used for Inference
-3691 " π΅ Doolittle OLLAMA_* Env Var Forwarding β Plugin Settings Bridge for SDK Plugin Compatibility
-3692 " π΅ ElizaOS SDK Trajectory API Surface β Full Confirmed Map from node_modules
-3693 " βοΈ Trajectory Cleanup Strategy β SDK Bridge vs Local JSONL Are Separate Layers
-3694 10:03p βοΈ Doolittle Trajectory β SDK Integration Scope and Architecture Defined
-3695 10:09p βοΈ Doolittle SDK-Native Cleanup β Subagent Scope and File Ownership Defined
+## Repository shape
-Access 2243k tokens of past work via get_observations([IDs]) or mem-search skill.
-
+- `packages/agent` β the application: runtime (chat-turn, services, providers),
+ gateway, CLI/TUI. `packages/plugins/*` β vendored provider plugins +
+ `doolittle-plugin`. `packages/{acp,contracts,logger,characters,skills}` β
+ supporting workspaces.
+- Runtime: ElizaOS 2.0 **beta** (`@elizaos/core@2.0.0-beta.1`); `@elizaos/autonomous`
+ is on `alpha.85` (no beta yet) and must be imported only via its subpaths.
+
+## Gates (run before considering work done)
+
+```
+bun run typecheck # tsc --noEmit
+bun test # full suite
+bun run build # bundle packages/agent
+bun run lint:check # biome
+bun run check:acceptance # repo hygiene + plugin boundaries + doc truth
+```
+
+## Conventions
+
+- Match surrounding code style; keep changes additive and well-typed.
+- Prompt construction for Doolittle-owned model calls goes through the shared
+ prompt-cache layer (`runtime/prompt-cache`), never ad hoc.
+- Add or update tests alongside changes.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..3d9838c4
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,53 @@
+# Changelog
+
+All notable changes to Doolittle are documented here. The format follows
+[Keep a Changelog](https://keepachangelog.com/), and the project tracks the
+ElizaOS 2.0 beta line.
+
+## [Unreleased]
+
+### Platform
+
+- **Migrated to ElizaOS 2.0 beta** (`@elizaos/core@2.0.0-beta.1`, agent `beta.2`,
+ skills `beta.1`, plugins `beta.1`, `elizaos@beta.5`). `@elizaos/autonomous`
+ stays on `alpha.85` (no beta published) with `overrides` forcing a single beta
+ `@elizaos/core` instance. Handled all beta breaking changes (moved subpaths,
+ removed `ModelType.OBJECT_*`, redesigned `Evaluator` contract, optional
+ `params.prompt`). Patched a broken `bun` export condition in
+ `@elizaos/plugin-sql@2.0.0-beta.1`.
+
+### Added
+
+- **Provider-aware prompt caching** for Doolittle-owned model calls
+ (`runtime/prompt-cache`): lossless stable/volatile segmentation emitting SDK
+ `promptSegments` + `providerOptions`, deterministic versioned cache keys, and
+ cache metrics surfaced in `/status`.
+- Full SDK adoption: self-awareness provider, `/research` deep-research action,
+ tool-audit hook, autonomous triggers, a recurring maintenance task, and
+ per-ModelType sampling settings.
+
+### Security
+
+- **Local-first API**: the HTTP API binds to `127.0.0.1` by default; non-loopback
+ binds now **require** `DOOLITTLE_API_TOKEN` (fail-safe β no token means every
+ request on a public bind is rejected). Previously it bound `0.0.0.0` with no
+ authentication.
+
+### Fixed / Reliability
+
+- `/mcp` Β· `/acp` no longer crash on malformed JSON; `/cron ` no longer
+ crashes the turn.
+- Per-item failure isolation for deferred plugin hydration, the cron tick, and
+ the gateway watchdog (one failure no longer aborts the rest).
+- Turns are always finished on exception (no more runs stranded in "thinking").
+- `AGENTS.md` is real guidance again (it had become a memory dump injected into
+ the live prompt).
+
+### Performance
+
+- `SettingsService.get()` and `SOUL.md` reads are now mtime-cached on hot paths.
+
+### Docs
+
+- Added LICENSE (MIT), SECURITY, CONTRIBUTING; `/commands` no longer truncates
+ the browse list; version docs corrected from alpha to beta.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..e17ea652
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,73 @@
+# Contributing to Doolittle
+
+Thanks for helping build Doolittle β an ElizaOS-native, terminal-first agent.
+
+## Prerequisites
+
+- [Bun](https://bun.sh) `>= 1.3` (the repo is Bun-first; do not use npm/yarn/pnpm).
+- Node `>= 24` headers are used by some native deps.
+
+```bash
+bun install
+cp .env.example .env # then fill in provider keys you want
+bun run dev # start the paired shell
+```
+
+## Quality gates
+
+Every change must keep these green (CI runs them):
+
+```bash
+bun run typecheck # tsc --noEmit, strict
+bun test # full suite (bun:test)
+bun run build # bundle packages/agent
+bun run lint:check # biome
+bun run check:acceptance # repo hygiene + plugin boundaries + doc truth
+```
+
+Run `bun run lint` to auto-fix formatting before committing.
+
+## Repository shape
+
+- `packages/agent` β the application: `runtime/` (chat-turn, services, providers),
+ `gateway/`, `cli/`, `server/`.
+- `packages/plugins/*` β vendored provider plugins + the consolidated
+ `doolittle-plugin`.
+- `packages/{acp,contracts,logger,characters,skills}` β supporting workspaces.
+- Runtime is ElizaOS 2.0 **beta**; `@elizaos/autonomous` is on `alpha.85` and is
+ imported only via its subpaths.
+
+## Extension recipes
+
+The plugin surface only imports Doolittle internals through one seam:
+`@doolittle/agent/plugin-api`.
+
+### Add an action
+
+1. Implement `createMyAction(services): Action` in `packages/agent/src/actions/`.
+2. Re-export it from `packages/agent/src/plugin-api.ts`.
+3. Register it in the assembly's `actions` array
+ (`packages/plugins/doolittle-plugin/assembly.ts`).
+4. Add a unit test next to the action.
+
+### Add a provider (prompt context)
+
+1. Implement `createMyProvider(services): Provider` in
+ `packages/agent/src/providers/`.
+2. Re-export it from `plugin-api.ts`.
+3. Add it to the `providers` array in `assembly.ts`.
+
+### Add a model provider
+
+Add a workspace plugin under `packages/plugins/` that registers the model
+handlers; wire its selection through the provider registry. To benefit from
+prompt caching, make it consume `params.promptSegments` (see
+`packages/agent/src/runtime/prompt-cache/README.md`).
+
+## Conventions
+
+- Match the surrounding code style; keep changes additive and strongly typed.
+- Doolittle-owned model prompts go through the shared prompt-cache layer, never
+ ad hoc.
+- Add or update tests alongside implementation.
+- Never mark user input, secrets, or per-request data as cache-stable.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..82859a37
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 SYMBaiEX
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 62eba372..6ed48d9f 100644
--- a/README.md
+++ b/README.md
@@ -1256,15 +1256,19 @@ bun run publish:providers:alpha # publish to alpha t
## Versioning
-Tracks the ElizaOS alpha line:
+Tracks the ElizaOS 2.0 **beta** line (the actively-maintained channel):
-- `elizaos: "alpha"` β umbrella package
-- `@elizaos/core: "alpha"` β core runtime
-- `@elizaos/plugin-sql: "alpha"` β database adapter
-- `@elizaos/plugin-ollama`, `@elizaos/plugin-openai`, `@elizaos/plugin-anthropic` β provider plugins
-- `@elizaos/autonomous: "alpha"`, `@elizaos/skills: "alpha"` β alignment packages
+- `elizaos: "2.0.0-beta.5"` β umbrella package
+- `@elizaos/core: "2.0.0-beta.1"` β core runtime
+- `@elizaos/agent: "2.0.0-beta.2"`, `@elizaos/skills: "2.0.0-beta.1"`
+- `@elizaos/plugin-{ollama,openai,anthropic,pdf,telegram,sql}: "2.0.0-beta.1"` β provider/feature plugins
+- `@elizaos/autonomous: "2.0.0-alpha.85"` β no beta published yet; pinned to alpha and forced onto beta `@elizaos/core` via `overrides` so a single core instance is shared
-Features not covered by official ElizaOS packages are implemented as custom actions, providers, evaluators, and Bun-native services. Official packages not yet compatible on the current runtime line are vendored under `packages/plugins/*` and implemented directly against the current `@elizaos/core` alpha service model.
+The vendored `@elizaos/plugin-sql` carries a local `bun patch`
+(`patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch`) that fixes a broken `bun`
+export condition in the published beta.1 package.
+
+Features not covered by official ElizaOS packages are implemented as custom actions, providers, evaluators, and Bun-native services. Official packages not yet compatible on the current runtime line are vendored under `packages/plugins/*` and implemented directly against the current `@elizaos/core` beta service model.
---
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000..aff221cb
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,36 @@
+# Security Policy
+
+## Reporting a vulnerability
+
+Please report security issues **privately** β do not open a public issue for an
+unpatched vulnerability.
+
+- Use GitHub's [private vulnerability reporting](https://github.com/SYMBaiEX/doolittle/security/advisories/new)
+ ("Report a vulnerability" under the **Security** tab), or
+- Open a minimal private channel with the maintainers.
+
+Include a description, affected version/commit, reproduction steps, and impact.
+We aim to acknowledge reports promptly and coordinate a fix and disclosure.
+
+## Security model
+
+Doolittle is terminal-first and **local-first**:
+
+- The HTTP API binds to **loopback (`127.0.0.1`) by default**, so it is reachable
+ only from the local machine.
+- Exposing the API on a non-loopback interface (e.g. `DOOLITTLE_HOST=0.0.0.0`)
+ **requires** a bearer token via `DOOLITTLE_API_TOKEN`. Without a token, a
+ non-loopback bind rejects every request β the API is never silently exposed.
+- Context files (`AGENTS.md`, `SOUL.md`, β¦) and tool inputs pass through a
+ prompt-injection scanner before reaching the model.
+- Credentials and secrets are stored under the data directory and are not
+ returned to non-local/unauthenticated callers.
+
+## Hardening checklist for operators
+
+- Keep `DOOLITTLE_HOST=127.0.0.1` unless you intentionally need remote access.
+- If you set a non-loopback host, set a long random `DOOLITTLE_API_TOKEN` and put
+ the API behind TLS / a reverse proxy.
+- Treat the workspace directory and `.env` as sensitive β they hold credentials.
+- Review actions that execute shell commands; approval gates apply to non-CLI
+ sources.
diff --git a/bun.lock b/bun.lock
index f5c2762d..6f035a84 100644
--- a/bun.lock
+++ b/bun.lock
@@ -8,24 +8,23 @@
"@doolittle/acp": "workspace:*",
"@doolittle/contracts": "workspace:*",
"@doolittle/logger": "workspace:*",
- "@elizaos/agent": "2.0.0-alpha.537",
+ "@elizaos/agent": "2.0.0-beta.2",
"@elizaos/autonomous": "2.0.0-alpha.85",
- "@elizaos/core": "2.0.0-alpha.537",
- "@elizaos/plugin-anthropic": "2.0.0-alpha.537",
+ "@elizaos/core": "2.0.0-beta.1",
+ "@elizaos/plugin-anthropic": "2.0.0-beta.1",
"@elizaos/plugin-claude-code": "workspace:*",
"@elizaos/plugin-codex": "workspace:*",
"@elizaos/plugin-devin": "workspace:*",
"@elizaos/plugin-elizacloud": "workspace:*",
- "@elizaos/plugin-ollama": "2.0.0-alpha.537",
- "@elizaos/plugin-openai": "2.0.0-alpha.537",
- "@elizaos/plugin-pdf": "2.0.0-alpha.537",
+ "@elizaos/plugin-ollama": "2.0.0-beta.1",
+ "@elizaos/plugin-openai": "2.0.0-beta.1",
+ "@elizaos/plugin-pdf": "2.0.0-beta.1",
"@elizaos/plugin-sql": "workspace:*",
- "@elizaos/plugin-telegram": "2.0.0-alpha.537",
- "@elizaos/skills": "2.0.0-alpha.539",
+ "@elizaos/plugin-telegram": "2.0.0-beta.1",
+ "@elizaos/skills": "2.0.0-beta.1",
"@fal-ai/client": "^1.9.4",
- "cron-parser": "^5.2.0",
"dotenv": "^17.2.3",
- "elizaos": "2.0.0-alpha.535",
+ "elizaos": "2.0.0-beta.5",
"zod": "^4.3.6",
},
"devDependencies": {
@@ -49,7 +48,7 @@
"@doolittle/acp": "workspace:*",
"@doolittle/contracts": "workspace:*",
"@doolittle/logger": "workspace:*",
- "@elizaos/agent": "2.0.0-alpha.537",
+ "@elizaos/agent": "2.0.0-beta.2",
},
},
"packages/benchmarks": {
@@ -63,9 +62,6 @@
"packages/contracts": {
"name": "@doolittle/contracts",
"version": "0.1.0",
- "dependencies": {
- "@elizaos/core": "2.0.0-alpha.537",
- },
},
"packages/distributions": {
"name": "@doolittle/distributions",
@@ -87,37 +83,37 @@
"name": "@elizaos/plugin-claude-code",
"version": "2.0.0-alpha.537",
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos/core": "2.0.0-beta.1",
},
},
"packages/plugins/plugin-codex": {
"name": "@elizaos/plugin-codex",
"version": "2.0.0-alpha.537",
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos/core": "2.0.0-beta.1",
},
},
"packages/plugins/plugin-devin": {
"name": "@elizaos/plugin-devin",
"version": "2.0.0-alpha.537",
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos/core": "2.0.0-beta.1",
},
},
"packages/plugins/plugin-elizacloud": {
"name": "@elizaos/plugin-elizacloud",
"version": "2.0.0-alpha.537",
"dependencies": {
- "@elizaos/agent": "2.0.0-alpha.537",
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos/autonomous": "2.0.0-alpha.85",
+ "@elizaos/core": "2.0.0-beta.1",
},
},
"packages/plugins/plugin-sql": {
"name": "@elizaos/plugin-sql",
- "version": "2.0.0-alpha.537-patched.0",
+ "version": "2.0.0-beta.1-patched.0",
"dependencies": {
- "@elizaos-official/plugin-sql": "npm:@elizaos/plugin-sql@2.0.0-alpha.20",
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos-official/plugin-sql": "npm:@elizaos/plugin-sql@2.0.0-beta.1",
+ "@elizaos/core": "2.0.0-beta.1",
},
},
"packages/skill-packs-optional": {
@@ -129,27 +125,31 @@
"version": "0.1.0",
},
},
+ "patchedDependencies": {
+ "@elizaos/plugin-sql@2.0.0-beta.1": "patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch",
+ },
"overrides": {
- "@elizaos/agent": "2.0.0-alpha.537",
+ "@elizaos/agent": "2.0.0-beta.2",
"@elizaos/autonomous": "2.0.0-alpha.85",
- "@elizaos/core": "2.0.0-alpha.537",
- "@elizaos/skills": "2.0.0-alpha.539",
- "elizaos": "2.0.0-alpha.535",
+ "@elizaos/core": "2.0.0-beta.1",
+ "@elizaos/skills": "2.0.0-beta.1",
+ "elizaos": "2.0.0-beta.5",
+ "ollama-ai-provider": "npm:ollama-ai-provider-v2@^3.5.1",
},
"packages": {
"@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.10.1", "", {}, "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw=="],
"@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.58", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-/53SACgmVukO4bkms4dpxpRlYhW8Ct6QZRe6sj1Pi5H00hYhxIrqfiLbZBGxkdRvjsBQeP/4TVGsXgH5rQeb8Q=="],
- "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="],
+ "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.112", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jiBao9pR4owWyjo0BnuNc7WSQBGOD0thysE4AFgZXaG+zMFbISQXUkJr7ePw/phBvePy7jE5FSA2Lf7lwqUiiQ=="],
"@ai-sdk/google": ["@ai-sdk/google@3.0.52", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-HiFB4VlHnv55k9xIbgQW9tHw5OsLXzbAghnDUqrnk/S94QpQuyrDwLSDsk/tUkxJeT00B+wvhL1y6/SARdLeXw=="],
"@ai-sdk/openai": ["@ai-sdk/openai@3.0.41", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-IZ42A+FO+vuEQCVNqlnAPYQnnUpUfdJIwn1BEDOBywiEHa23fw7PahxVtlX9zm3/zMvTW4JKPzWyvAgDu+SQ2A=="],
- "@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+ "@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="],
- "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
+ "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="],
"@ai-sdk/react": ["@ai-sdk/react@1.2.12", "", { "dependencies": { "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/ui-utils": "1.2.11", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["zod"] }, "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g=="],
@@ -255,8 +255,6 @@
"@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="],
- "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="],
-
"@cacheable/memory": ["@cacheable/memory@2.0.8", "", { "dependencies": { "@cacheable/utils": "^2.4.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" } }, "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw=="],
"@cacheable/node-cache": ["@cacheable/node-cache@1.7.6", "", { "dependencies": { "cacheable": "^2.3.1", "hookified": "^1.14.0", "keyv": "^5.5.5" } }, "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A=="],
@@ -285,6 +283,22 @@
"@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="],
+ "@derhuerst/http-basic": ["@derhuerst/http-basic@8.2.4", "", { "dependencies": { "caseless": "^0.12.0", "concat-stream": "^2.0.0", "http-response-object": "^3.0.1", "parse-cache-control": "^1.0.1" } }, "sha512-F9rL9k9Xjf5blCz8HsJRO4diy111cayL2vkY2XE4r4t3n0yPXVYy3KD3nJ1qbrSn9743UWSXH4IwuCa/HWlGFw=="],
+
+ "@discordjs/builders": ["@discordjs/builders@1.14.1", "", { "dependencies": { "@discordjs/formatters": "^0.6.2", "@discordjs/util": "^1.2.0", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.40", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" } }, "sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ=="],
+
+ "@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="],
+
+ "@discordjs/formatters": ["@discordjs/formatters@0.6.2", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ=="],
+
+ "@discordjs/rest": ["@discordjs/rest@2.6.1", "", { "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.2.0", "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.5", "@vladfrangu/async_event_emitter": "^2.4.6", "discord-api-types": "^0.38.40", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "6.24.1" } }, "sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg=="],
+
+ "@discordjs/util": ["@discordjs/util@1.2.0", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg=="],
+
+ "@discordjs/voice": ["@discordjs/voice@0.19.2", "", { "dependencies": { "@snazzah/davey": "^0.1.9", "@types/ws": "^8.18.1", "discord-api-types": "^0.38.41", "prism-media": "^1.3.5", "tslib": "^2.8.1", "ws": "^8.19.0" } }, "sha512-3yJ255e4ag3wfZu/DSxeOZK1UtnqNxnspmLaQetGT0pDkThNZoHs+Zg6dgZZ19JEVomXygvfHn9lNpICZuYtEA=="],
+
+ "@discordjs/ws": ["@discordjs/ws@1.2.3", "", { "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" } }, "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw=="],
+
"@doolittle/acp": ["@doolittle/acp@workspace:packages/acp"],
"@doolittle/agent": ["@doolittle/agent@workspace:packages/agent"],
@@ -311,25 +325,35 @@
"@electric-sql/pglite": ["@electric-sql/pglite@0.4.5", "", {}, "sha512-aGG2zGEyZzGWKy8P+9ZoNUV0jxt1+hgbeTf+bVAYyxVZZLXg3/9aFlfLxb08AYZVAfAkQlQIysmWjhc5hwDG8g=="],
- "@elizaos-official/plugin-sql": ["@elizaos/plugin-sql@2.0.0-alpha.20", "", { "dependencies": { "@electric-sql/pglite": "^0.4.0", "@elizaos/core": "^2.0.0-alpha.537", "@neondatabase/serverless": "^1.1.0", "dotenv": "^17.2.3", "drizzle-kit": "^0.31.8", "drizzle-orm": "0.45.2", "pg": "^8.16.3", "uuid": "^14.0.0", "ws": "^8.18.3" } }, "sha512-go3IS6EmZTdlIFiixEAp+tR8SCWIViUtXFU22Y+CCRRZTJk/A25e9YDDM+3wNnsQa9PXMu6yU2O+9SP4sFQP+A=="],
+ "@elizaos-official/plugin-sql": ["@elizaos/plugin-sql@2.0.0-beta.1", "", { "dependencies": { "@electric-sql/pglite": "^0.4.0", "@neondatabase/serverless": "^1.1.0", "drizzle-orm": "0.45.2", "pg": "^8.16.3", "uuid": "^14.0.0", "ws": "^8.18.3" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-1IWyanD7IGljBSkbAidstQSaGMHkAteh+uLS4J+HnCeuphS7LQkVyCJ+ZQuoPb9uUL7v8zyNXfEMQPE3pfDJNw=="],
- "@elizaos/agent": ["@elizaos/agent@2.0.0-alpha.537", "", { "dependencies": { "@clack/prompts": "^1.0.0", "@elizaos/core": "^2.0.0-alpha.537", "@elizaos/plugin-agent-orchestrator": "^2.0.0-alpha.10", "@elizaos/plugin-agent-skills": "^2.0.0-alpha.71", "@elizaos/plugin-browser-bridge": "^0.1.1", "@elizaos/plugin-local-embedding": "^2.0.0-alpha.12", "@elizaos/plugin-ollama": "^2.0.0-alpha.14", "@elizaos/plugin-pdf": "^2.0.0-alpha.18", "@elizaos/plugin-sql": "^2.0.0-alpha.20", "@elizaos/plugin-wechat": "^2.0.0-alpha.537", "@elizaos/shared": "^2.0.0-alpha.537", "@elizaos/skills": "^2.0.0-alpha.539", "@elizaos/vault": "^2.0.0-alpha.537", "@hapi/boom": "^10.0.1", "@noble/curves": "^2.0.1", "@solana/web3.js": "1.98.4", "@whiskeysockets/baileys": "7.0.0-rc.9", "abitype": "^1.0.0", "coding-agent-adapters": "0.16.3", "dotenv": "^17.2.3", "drizzle-orm": "0.45.2", "ethers": "^6.16.0", "git-workspace-service": "0.4.5", "jsdom": "^29.0.0", "json5": "^2.2.3", "pg": "^8.16.3", "pino": "^10.3.1", "pty-manager": "1.11.0", "puppeteer-core": "^24.37.5", "qrcode": "^1.5.4", "telegram": "2.26.22", "viem": "^2.48.8", "ws": "^8.19.0", "zod": "^4.4.2" }, "optionalDependencies": { "@elizaos/app-elizamaker": "*", "@elizaos/app-lifeops": "*", "@elizaos/app-task-coordinator": "*", "@elizaos/app-training": "*", "@elizaos/capacitor-contacts": "*", "@elizaos/capacitor-phone": "*", "@elizaos/capacitor-wifi": "*", "@elizaos/plugin-streaming": "*", "@elizaos/plugin-video": "*", "@elizaos/plugin-wallet": "*" }, "peerDependencies": { "@elizaos/signal-native": "*" }, "optionalPeers": ["@elizaos/signal-native"], "bin": { "eliza-autonomous": "packages/agent/src/bin.js" } }, "sha512-gKA25EE+8X4SJLOF8Bc+OrE0eUv6tu1EcT0bwIrou6IcMTCUXgaB8ZKJCQgN5tNhhOf8AhLhaCUj0Mg3noRAOg=="],
+ "@elizaos/agent": ["@elizaos/agent@2.0.0-beta.2", "", { "dependencies": { "@clack/prompts": "^1.0.0", "@elizaos/capacitor-contacts": "2.0.0-beta.1", "@elizaos/capacitor-phone": "2.0.0-beta.1", "@elizaos/capacitor-wifi": "2.0.0-beta.1", "@elizaos/core": "2.0.0-beta.1", "@elizaos/plugin-agent-skills": "2.0.0-beta.1", "@elizaos/plugin-aosp-local-inference": "2.0.0-beta.1", "@elizaos/plugin-browser": "2.0.0-beta.1", "@elizaos/plugin-capacitor-bridge": "2.0.0-beta.1", "@elizaos/plugin-coding-tools": "2.0.0-beta.1", "@elizaos/plugin-commands": "2.0.0-beta.1", "@elizaos/plugin-computeruse": "2.0.0-beta.1", "@elizaos/plugin-discord": "2.0.0-beta.2", "@elizaos/plugin-discord-local": "2.0.0-beta.1", "@elizaos/plugin-elizacloud": "2.0.0-beta.1", "@elizaos/plugin-imessage": "2.0.0-beta.1", "@elizaos/plugin-local-embedding": "2.0.0-beta.1", "@elizaos/plugin-local-inference": "2.0.0-beta.1", "@elizaos/plugin-mcp": "2.0.0-beta.1", "@elizaos/plugin-ollama": "2.0.0-beta.1", "@elizaos/plugin-pdf": "2.0.0-beta.1", "@elizaos/plugin-signal": "2.0.0-beta.1", "@elizaos/plugin-sql": "2.0.0-beta.1", "@elizaos/plugin-streaming": "2.0.0-beta.1", "@elizaos/plugin-video": "2.0.0-beta.1", "@elizaos/plugin-wechat": "2.0.0-beta.1", "@elizaos/plugin-whatsapp": "2.0.0-beta.1", "@elizaos/plugin-workflow": "2.0.0-beta.1", "@elizaos/plugin-x402": "2.0.0-beta.1", "@elizaos/shared": "2.0.0-beta.1", "@elizaos/skills": "2.0.0-beta.1", "@elizaos/vault": "2.0.0-beta.1", "@hapi/boom": "^10.0.1", "@noble/curves": "2.2.0", "@solana/web3.js": "1.98.4", "@whiskeysockets/baileys": "7.0.0-rc.9", "abitype": "^1.0.0", "coding-agent-adapters": "0.16.3", "dotenv": "^17.2.3", "drizzle-orm": "0.45.2", "esbuild": "^0.28.0", "ethers": "^6.16.0", "git-workspace-service": "0.4.5", "jsdom": "^29.0.0", "json5": "^2.2.3", "pg": "^8.16.3", "pino": "^10.3.1", "pty-manager": "1.11.0", "puppeteer-core": "^24.37.5", "qrcode": "^1.5.4", "telegram": "2.26.22", "viem": "^2.48.8", "ws": "^8.19.0", "zod": "^4.4.3" }, "peerDependencies": { "@elizaos/signal-native": "*" }, "optionalPeers": ["@elizaos/signal-native"], "bin": { "eliza-autonomous": "packages/agent/src/bin.js" } }, "sha512-klBvkeRWR6TG4dG0FZh9k0Nmyfn78c3Vuzp/+MFhTxOKdzQzR+Tr7YCuAhL/Qz+4ZEaK5TCNkpmcoVJhdY2Oww=="],
"@elizaos/autonomous": ["@elizaos/autonomous@2.0.0-alpha.85", "", { "dependencies": { "@clack/prompts": "^1.0.0", "@elizaos/core": "^2.0.0-alpha.85", "@elizaos/plugin-agent-orchestrator": "0.3.15", "@elizaos/plugin-agent-skills": "alpha", "@elizaos/plugin-anthropic": "alpha", "@elizaos/plugin-coding-agent": "0.1.0-next.1", "@elizaos/plugin-cron": "alpha", "@elizaos/plugin-elizacloud": "alpha", "@elizaos/plugin-experience": "alpha", "@elizaos/plugin-form": "alpha", "@elizaos/plugin-knowledge": "alpha", "@elizaos/plugin-local-embedding": "alpha", "@elizaos/plugin-ollama": "alpha", "@elizaos/plugin-openai": "alpha", "@elizaos/plugin-pdf": "alpha", "@elizaos/plugin-personality": "alpha", "@elizaos/plugin-pi-ai": "alpha", "@elizaos/plugin-plugin-manager": "alpha", "@elizaos/plugin-rolodex": "alpha", "@elizaos/plugin-secrets-manager": "alpha", "@elizaos/plugin-shell": "alpha", "@elizaos/plugin-sql": "alpha", "@elizaos/plugin-todo": "alpha", "@elizaos/plugin-trajectory-logger": "alpha", "@elizaos/plugin-trust": "alpha", "@elizaos/skills": "^2.0.0-alpha.85", "@hapi/boom": "^10.0.1", "@lunchtable/plugin-ltcg": "^0.1.0", "@mariozechner/pi-ai": "0.52.12", "@noble/curves": "^2.0.1", "@whiskeysockets/baileys": "7.0.0-rc.9", "coding-agent-adapters": "0.12.0", "dotenv": "^17.2.3", "drizzle-orm": "0.45.1", "ethers": "^6.16.0", "git-workspace-service": "0.4.4", "json5": "^2.2.3", "pg": "^8.16.3", "pino": "^10.3.1", "pty-manager": "1.9.8", "puppeteer-core": "^24.37.5", "qrcode": "^1.5.4", "ws": "^8.19.0", "zod": "^4.3.6" }, "peerDependencies": { "@miladyai/signal-native": "*" }, "optionalPeers": ["@miladyai/signal-native"], "bin": { "milady-autonomous": "packages/autonomous/src/bin.js" } }, "sha512-wT3LlmpvkMTL6rquRsW+DnrevrLGhCRUGMQHUaNh2GFSbEMFQTPgyHTpgG+0yExA7EkQT+pbHwKUYUTgIDq+xw=="],
- "@elizaos/capacitor-contacts": ["@elizaos/capacitor-contacts@1.0.0", "", { "peerDependencies": { "@capacitor/core": "^8.3.1" } }, "sha512-y2+hReo7XGkoDMPxTkHLR6F1yfFkq9+dc1WW4GkUWU//TLDlKWQF6VwS1NabKGwq6G8taoZw58PbXyfJCV8o/Q=="],
+ "@elizaos/capacitor-contacts": ["@elizaos/capacitor-contacts@2.0.0-beta.1", "", { "peerDependencies": { "@capacitor/core": "^8.3.1" } }, "sha512-ek3VxkIjGoLodUU/Pn8Heis70tESACZRlqUgPvbn9WIKTDq2oo5mwito7VUxoDv8EB2Ku+Q1gxkNkb9jk2Ofsw=="],
+
+ "@elizaos/capacitor-phone": ["@elizaos/capacitor-phone@2.0.0-beta.1", "", { "peerDependencies": { "@capacitor/core": "^8.3.1" } }, "sha512-qzZyXpCRNxVbGSNhQyvi9ByB4Prx7Z+n6T3hvkCFGnaatV6ogE0GyRqEvDddfRr08c9e5ROrvsp9XbYn1GCHzQ=="],
+
+ "@elizaos/capacitor-wifi": ["@elizaos/capacitor-wifi@2.0.0-beta.1", "", { "peerDependencies": { "@capacitor/core": "^8.3.1" } }, "sha512-BwDGapEwJnImKd1+iXFxtob9TaZULvsD6vldJX1Glh8UxQiS2QXxJlItw6Zac0RE6kmVSzTosXKvsUBLqtQyag=="],
+
+ "@elizaos/cloud-routing": ["@elizaos/cloud-routing@2.0.0-beta.1", "", { "peerDependencies": { "zod": "^4.4.3" } }, "sha512-uMQ5TK6FlgrP8jIaSbXG5tQ+6zQzJ52uw6BLuZMubQYY+cXpNYDbu+1fdUrSKe+d/GbqKVzzshwkEIhG5SXymQ=="],
+
+ "@elizaos/cloud-sdk": ["@elizaos/cloud-sdk@2.0.0-beta.1", "", {}, "sha512-79Vv7BeRk4nRAoVFZTkmv+x0YP3xRcmjpArxCmdAY9ZbSHU3wR1Gle2lHSN3/Thm89sRLYOmt1Nq5ChnYFq45w=="],
- "@elizaos/capacitor-phone": ["@elizaos/capacitor-phone@1.0.0", "", { "peerDependencies": { "@capacitor/core": "^8.3.1" } }, "sha512-dYsPSHUSnkiV2ks9abC5ew5zmB+uZHKaXRPBkqIbxDconHUgN3SQfZR7cR7Z8lDhtzpaKmv6XQQbO/UKpZDk0g=="],
+ "@elizaos/core": ["@elizaos/core@2.0.0-beta.1", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.13", "@ai-sdk/gateway": "^3.0.109", "@ai-sdk/google": "^3.0.8", "@ai-sdk/openai": "^3.0.9", "@ai-sdk/provider": "^3.0.10", "@ai-sdk/provider-utils": "^4.0.7", "@anthropic-ai/sdk": "^0.92.0", "@elizaos/prompts": "2.0.0-beta.1", "@noble/ciphers": "2.2.0", "@noble/hashes": "2.2.0", "@openrouter/ai-sdk-provider": "^2.0.0", "@standard-schema/spec": "^1.0.0", "adze": "^2.2.5", "ai": "^6.0.30", "coding-agent-adapters": "0.16.3", "dedent": "^1.7.1", "dotenv": "^17.2.3", "drizzle-orm": "0.45.2", "eventsource-parser": "^3.0.8", "fast-redact": "^3.5.0", "file-type": "^22.0.0", "fs-extra": "^11.3.2", "git-workspace-service": "0.4.5", "glob": "^13.0.0", "handlebars": "^4.7.8", "json5": "^2.2.3", "mammoth": "^1.9.0", "markdown-it": "^14.1.0", "pdfjs-dist": "^5.4.530", "underscore": "^1.13.8", "undici": "8.2.0", "unique-names-generator": "^4.7.1", "unpdf": "^1.4.0", "uuid": "^14.0.0", "yaml": "^2.7.0", "zod": "^4.4.3" } }, "sha512-RxdOuA5GOeFvD9yljeP311wZ8rDDull7dOJV9DCikUNzKnCix+xDPDydYxgz6r0wReJHfkkTH0/RaDcSwTCPCg=="],
- "@elizaos/core": ["@elizaos/core@2.0.0-alpha.537", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.13", "@ai-sdk/google": "^3.0.8", "@ai-sdk/openai": "^3.0.9", "@anthropic-ai/sdk": "^0.92.0", "@bufbuild/protobuf": "^2.11.0", "@noble/ciphers": "^2.0.0", "@noble/hashes": "2.2.0", "@openrouter/ai-sdk-provider": "^2.0.0", "@toon-format/toon": "^2.1.0", "adze": "^2.2.5", "ai": "^6.0.30", "coding-agent-adapters": "0.16.3", "dedent": "^1.7.1", "dotenv": "^17.2.3", "drizzle-orm": "0.45.2", "fast-redact": "^3.5.0", "file-type": "^22.0.0", "fs-extra": "^11.3.2", "git-workspace-service": "0.4.5", "glob": "^13.0.0", "handlebars": "^4.7.8", "json5": "^2.2.3", "mammoth": "^1.9.0", "markdown-it": "^14.1.0", "pdfjs-dist": "^5.4.530", "undici": "^8.0.0", "unique-names-generator": "^4.7.1", "unpdf": "^1.4.0", "uuid": "^14.0.0", "yaml": "^2.7.0", "zod": "^4.4.2" } }, "sha512-kCpb6xx3mEKMOWO7gL9DwdIX7nk6fexkOC782sI2ge17Eps2AnX+zTz2V+wkjiXzQ8slEAeAqBrKY75vJ00Rag=="],
+ "@elizaos/plugin-agent-orchestrator": ["@elizaos/plugin-agent-orchestrator@0.3.15", "", { "dependencies": { "coding-agent-adapters": "0.12.0", "pty-console": "0.3.1" }, "peerDependencies": { "@elizaos/core": ">=2.0.0-alpha.0", "git-workspace-service": "0.4.4", "pty-manager": "1.10.0" } }, "sha512-22aoptlKrNhApQKa9+aZvZ/CTLOaYM1tIMCp+dt/ploI2J8JyRo9r80SGIEGq9iayBjlMXzh4MNHjryH+agXEQ=="],
- "@elizaos/plugin-agent-orchestrator": ["@elizaos/plugin-agent-orchestrator@2.0.0-alpha.537", "", { "dependencies": { "coding-agent-adapters": "0.16.3", "drizzle-orm": "^0.45.1", "pty-console": "0.3.1", "pty-state-capture": "0.2.0" }, "peerDependencies": { "@elizaos/core": "^2.0.0-alpha.537", "git-workspace-service": "0.4.5", "pty-manager": "1.11.0" } }, "sha512-VOz9RvD29HuBuJ9VtC6hZIH58yTPmIZWKuTENDowKcLEE+fBg/5u9m9Bnpi6PzRb1yRB64V4/lhnZlaO+0fZGw=="],
+ "@elizaos/plugin-agent-skills": ["@elizaos/plugin-agent-skills@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "fflate": "^0.8.2" } }, "sha512-gDPDkJ6ThTS5S9zpO2a/P7mmERWk0/rNVorigi5f6sMbi1zcp+QuW2iYlXZWsINPB9VRgWU6qELwXWsQgl137w=="],
- "@elizaos/plugin-agent-skills": ["@elizaos/plugin-agent-skills@2.0.0-alpha.537", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "fflate": "^0.8.2" } }, "sha512-aY8gyPXkkYsYgoQjV7d/wda5w9EeJtlwZKdkWmNwXi5fvvd9b2BGwSW+ujFXtWJgdN2uKLoFKxOXWCc/yCRFbQ=="],
+ "@elizaos/plugin-anthropic": ["@elizaos/plugin-anthropic@2.0.0-beta.1", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.9", "ai": "^6.0.23", "jsonrepair": "^3.12.0" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-i2Mwuh4otYpYL/VzR4bB9jcMJOcecpiGOV/yvOLIRXBkqehtrHX103+Lf5lI8r8ovePj6uVC7tZQounwIWmWPQ=="],
- "@elizaos/plugin-anthropic": ["@elizaos/plugin-anthropic@2.0.0-alpha.537", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.9", "ai": "^6.0.23", "jsonrepair": "^3.12.0", "undici": "^8.0.0" }, "peerDependencies": { "@elizaos/core": "^2.0.0-alpha.537" } }, "sha512-ybLiZ4VzTvRAv2kFg6kjH19Q6XMOMq4/zBNHYQ+V3Qcp6Qms4LlDt6YxnqeXKs/5lq10LQUW0hVG9ENO9ArDjQ=="],
+ "@elizaos/plugin-aosp-local-inference": ["@elizaos/plugin-aosp-local-inference@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-Z2C3ulPkaB+4dPiMMK0d4uaI59e068rW8gSGNK2o3NRox3zJM7ou2pY9P7EsolRptatwCLB+f2hAU35szlIXyw=="],
- "@elizaos/plugin-browser-bridge": ["@elizaos/plugin-browser-bridge@0.1.1", "", { "dependencies": { "@elizaos/agent": "^2.0.0-alpha.537", "@elizaos/core": "^2.0.0-alpha.537", "@elizaos/shared": "^2.0.0-alpha.537", "drizzle-orm": "0.45.2" } }, "sha512-CyiHRC4AFCnF1ZER21K44IFPY8iuPqe84s9X3Qs3pHktCn176z1aoL4eJY0PKCUmb62zIa4Jp4oJVzpvqNeveQ=="],
+ "@elizaos/plugin-browser": ["@elizaos/plugin-browser@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@elizaos/vault": "2.0.0-beta.1", "drizzle-orm": "0.45.2" } }, "sha512-EXdxSDbM+srdht1KcF7s10PbxD30Fo4vAg7HN38TpFrPoKENFztfTUUnmMaAgh1fpLmJIzRbbeVpynFAp3Pq4g=="],
+
+ "@elizaos/plugin-capacitor-bridge": ["@elizaos/plugin-capacitor-bridge@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "ws": "^8.18.0" } }, "sha512-1+cyVdbWMzwG37HgbMVgbXZASWWNEZeYDX1LfpkID9Bq2yjUxxmHArgRNgOqglBZgT/t97hWXX/fzlql+ojCUg=="],
"@elizaos/plugin-claude-code": ["@elizaos/plugin-claude-code@workspace:packages/plugins/plugin-claude-code"],
@@ -339,25 +363,41 @@
"@elizaos/plugin-coding-agent": ["@elizaos/plugin-coding-agent@0.1.0-next.1", "", { "dependencies": { "coding-agent-adapters": "0.8.0", "pty-console": "0.3.0" }, "peerDependencies": { "@elizaos/core": ">=2.0.0-alpha.0", "git-workspace-service": ">=0.3.0", "pty-manager": ">=1.8.0" } }, "sha512-eNXfY4Cn/hd7v8ToYmYE9ph7Tv5VGuIxNQQ5l2HrhAGz/JDALYo3G6WTGjoWmVgvb9wHERHZa5gyKhJKFGv2PA=="],
+ "@elizaos/plugin-coding-tools": ["@elizaos/plugin-coding-tools@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@elizaos/shared": "2.0.0-beta.1", "@vscode/ripgrep": "^1.15.9", "zod": "^4.4.3" } }, "sha512-hBA6OVA86uOybBOFv49PSgWD85vjSbkOsXUzpLUc/JI90BW3ie1nXzXpAjxh6jv4EvCfnYkuLisjCgnO3jlCEw=="],
+
+ "@elizaos/plugin-commands": ["@elizaos/plugin-commands@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-5vrvIJqXOWC+7sQPCSIlxCkVzqcveLSfCMNTlOBnqSr+E3ffip74nQ3oGSDcPGVZJk3LEP/bNo/lgkcjNYV/Jw=="],
+
+ "@elizaos/plugin-computeruse": ["@elizaos/plugin-computeruse@2.0.0-beta.1", "", { "dependencies": { "@nut-tree-fork/nut-js": "^4.2.6", "puppeteer-core": "^24.9.0" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-FvqQl3wAw9ZJkCK50E8FOLpyQY8h6ZKc5mIap/v0zrX+HCotDLIFX9DqpIKqHPwwHU9i+BskY+NDw99tmtHTdg=="],
+
"@elizaos/plugin-cron": ["@elizaos/plugin-cron@2.0.0-alpha.7", "", { "dependencies": { "@elizaos/core": "2.0.0-alpha.3", "@elizaos/plugin-cli": "2.0.0-alpha.3", "croner": "9.0.0", "uuid": "11.0.5" } }, "sha512-hAxyYfxH9e0sqS5Jo+kKMir7EbKK+xJUg5soo8gJUpKwRoJr7305B7XMPGC6e5UzcQKZctYAaVKsmRp5VhuRcA=="],
"@elizaos/plugin-devin": ["@elizaos/plugin-devin@workspace:packages/plugins/plugin-devin"],
+ "@elizaos/plugin-discord": ["@elizaos/plugin-discord@2.0.0-beta.2", "", { "dependencies": { "@discordjs/rest": "^2.6.1", "@discordjs/voice": "^0.19.2", "@elizaos/core": "2.0.0-beta.1", "@elizaos/plugin-browser": "2.0.0-beta.1", "discord-api-types": "^0.38.0", "discord.js": "^14.26.4", "fast-levenshtein": "^3.0.0", "fluent-ffmpeg": "^2.1.3", "get-func-name": "^3.0.0", "libsodium-wrappers": "^0.8.0", "opusscript": "^0.1.1", "prism-media": "1.3.5", "zod": "^4.4.3" } }, "sha512-I+kwjHLO0NuwrQQJdl5XYMekbUfeYaOl4HcELrJK5BsX6CzYrIdQ1M3A3PXvVCz7H15f4kx5k0TCC7yDavYdVg=="],
+
+ "@elizaos/plugin-discord-local": ["@elizaos/plugin-discord-local@2.0.0-beta.1", "", { "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-v72HLAXqKw339ow3/7U6camUt1hx1xjKXLjUXFkSCoz7KIWWUqBYTeHM5y2GSyUHaSEZeBYpkwnYa/3/YeDZOw=="],
+
"@elizaos/plugin-elizacloud": ["@elizaos/plugin-elizacloud@workspace:packages/plugins/plugin-elizacloud"],
"@elizaos/plugin-experience": ["@elizaos/plugin-experience@2.0.0-alpha.10", "", { "dependencies": { "@elizaos/core": "alpha", "uuid": "^13.0.0" } }, "sha512-UFGryx98zUc67hyjsRbfNkSgTISSABqCZLZ/0gL85mZU1XjhxKAhaqoJK/aRvF1Ak4Q8gp8VyrF6eP2LhLlUJw=="],
"@elizaos/plugin-form": ["@elizaos/plugin-form@2.0.0-alpha.10", "", { "peerDependencies": { "@elizaos/core": "2.0.0-alpha.3" } }, "sha512-b8ZE3t6qPE+1cGPS6D0ywThubvEdeaQ0NRdiuy7wEnfw4B3vDGxOxhxK2Xhtxkk7aeTSnVp6xHXZqsXlQsHkug=="],
+ "@elizaos/plugin-imessage": ["@elizaos/plugin-imessage@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "zod": "^4.4.3" } }, "sha512-5VkrFoOwlh7f8PPITmaLPQgcA77EKwHcabnSIxLbTAvBnXGGpqlWdYwDI17llOsfYNbprrDjQr1ahXssP1MJHQ=="],
+
"@elizaos/plugin-knowledge": ["@elizaos/plugin-knowledge@2.0.0-alpha.7", "", { "dependencies": { "@ai-sdk/anthropic": "^3.0.13", "@ai-sdk/google": "^3.0.8", "@ai-sdk/openai": "^3.0.9", "@elizaos/core": "alpha", "@openrouter/ai-sdk-provider": "^1.2.0", "@tanstack/react-query": "^5.51.1", "ai": "^6.0.30", "clsx": "^2.1.1", "dotenv": "^17.2.3", "lucide-react": "^0.525.0", "mammoth": "^1.9.0", "multer": "^2.0.1", "react": "19.2.3", "react-dom": "19.2.3", "react-force-graph-2d": "^1.27.1", "tailwind-merge": "^3.3.1", "unpdf": "^1.4.0", "zod": "^4.3.6" } }, "sha512-xbC8k2xDMD6liCn4saxdwTvMpAzaaaDhgQ4adgpbGRiAIYTOwd+XG4z2CbSKEa8lI0wbfzPq3EMmuTLkPavY5w=="],
- "@elizaos/plugin-local-embedding": ["@elizaos/plugin-local-embedding@2.0.0-alpha.537", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "@huggingface/transformers": "^4.0.0", "node-llama-cpp": "^3.15.1", "nodejs-whisper": "^0.3.0", "stream-browserify": "^3.0.0", "undici": "^8.0.0", "uuid": "^14.0.0", "whisper-node": "^1.1.1", "zod": "^4.4.2" } }, "sha512-GVfGzdv4EgmhBSd/Z5Fz8wdCcOZvzvEkswo2I0sljudr7Z1UuT79IzaxNfC2K5B7OnwD1uQs96iOM7vu350rog=="],
+ "@elizaos/plugin-local-embedding": ["@elizaos/plugin-local-embedding@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@huggingface/transformers": "^4.0.0", "node-llama-cpp": "github:milady-ai/node-llama-cpp#v3.18.1-milady.3", "uuid": "^14.0.0", "zod": "^4.4.3" } }, "sha512-8UF2U6u7M1TmQPa75iQGjpQnE9ZJgbFg/qIvRIFHPIrvWGlBgCnbCGanLQF22XeBoBjwaY3ySN7Q5jlhEynHHA=="],
+
+ "@elizaos/plugin-local-inference": ["@elizaos/plugin-local-inference@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@elizaos/plugin-capacitor-bridge": "2.0.0-beta.1" } }, "sha512-jTVUWVC426mvl1g/TaO5sLmzawe5z+us40Dw+nLu9joFHBYzQ+OYsrkJUsy3SmjnNla1Wvj+0VAZ0UAwMIXHYA=="],
- "@elizaos/plugin-ollama": ["@elizaos/plugin-ollama@2.0.0-alpha.537", "", { "dependencies": { "@ai-sdk/ui-utils": "^1.2.8", "ai": "^6.0.174", "js-tiktoken": "^1.0.18", "ollama-ai-provider": "^1.2.0" }, "peerDependencies": { "@elizaos/core": "^2.0.0-alpha.537" } }, "sha512-0Z91l3+i7Y3BniJyqpGq6V62DiG6twwO3FYH2u8gORqEkl+KuCd+cOpitJRxTrFgpLM1naWXIFDDjs2kqVOa0g=="],
+ "@elizaos/plugin-mcp": ["@elizaos/plugin-mcp@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@modelcontextprotocol/sdk": "^1.7.0", "ajv": "^8.17.1", "json5": "^2.2.3" } }, "sha512-jbdEXJ6UcTjRSXSKg5DfFjdmXyDhUQEoSI+74Cpu9fZpvR/oDBvzF14j6zGp5JCuhVqMxkOplpB6ZaoMUExmRQ=="],
- "@elizaos/plugin-openai": ["@elizaos/plugin-openai@2.0.0-alpha.537", "", { "dependencies": { "@ai-sdk/openai": "^3.0.9", "ai": "^6.0.30", "js-tiktoken": "^1.0.21", "undici": "^8.0.0" }, "peerDependencies": { "@elizaos/core": "^2.0.0-alpha.537", "zod": "^4.4.2" } }, "sha512-Baf9UcYXRqcF847q0Mha/Tf/FJms8G3zohb5WmQoPHoYJK89ZUnacJ/kBjRMX2oZXPz3Lo4b1xZFVHtDlMuCOw=="],
+ "@elizaos/plugin-ollama": ["@elizaos/plugin-ollama@2.0.0-beta.1", "", { "dependencies": { "@ai-sdk/ui-utils": "^1.2.8", "ai": "^6.0.174", "js-tiktoken": "^1.0.18", "ollama-ai-provider-v2": "^3.5.0" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-rs+EFJMyJHLpGAmIk5y1mpOic/RhlTN8HjYuizCMx6mRpds60t53DV2bwGr63CkA28pPgjDBwGBHErGvG/USEw=="],
- "@elizaos/plugin-pdf": ["@elizaos/plugin-pdf@2.0.0-alpha.537", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "unpdf": "^1.4.0" } }, "sha512-A0YK4KwXpEeGjt84Po/6ZDLmRinYp6nTGf9WBOtOWZhg6MoNxhAjA/zb+FS0mXUsnVfMRFWWUIgVbNSqsaobtg=="],
+ "@elizaos/plugin-openai": ["@elizaos/plugin-openai@2.0.0-beta.1", "", { "dependencies": { "@ai-sdk/openai": "^3.0.9", "ai": "^6.0.30", "js-tiktoken": "^1.0.21" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1", "zod": "^4.4.3" } }, "sha512-a5jkyIf4NKJKyH60jA3hoh/Egp4n/Tx7O/qPVow2gvEc7MRQSKKWxhq2y2E8awN13OVXnM3t5e4hDC73deG/5A=="],
+
+ "@elizaos/plugin-pdf": ["@elizaos/plugin-pdf@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "unpdf": "^1.4.0" } }, "sha512-YuEUkj/uMuU6lRhWUXgUOq2DpLewLpF1brPVeYgXjIKb0DPpTTxCrfEHdWfXloWpCBGpW62lEqXFtRQe7tvnmg=="],
"@elizaos/plugin-personality": ["@elizaos/plugin-personality@2.0.0-alpha.8", "", { "dependencies": { "@elizaos/core": "alpha", "fs-extra": "^11.2.0", "zod": "^3.22.4" } }, "sha512-L5AKdjffI+x14Wcfry5tA4SqtTCnNAqWy97oTI3EuHjV50xvTbJB1wY8R67ka5gEZ2LjNXJZAzlMw3T03LHTCg=="],
@@ -371,9 +411,13 @@
"@elizaos/plugin-shell": ["@elizaos/plugin-shell@2.0.0-alpha.9", "", { "dependencies": { "@elizaos/core": "next", "cross-spawn": "^7.0.6", "zod": "^4.3.6" }, "optionalDependencies": { "@lydell/node-pty": "^1.1.0" } }, "sha512-t6ZyqyEWAaU1hiUdOGviaRgxUa8P8lvnsCG089Yc1g7+kctUB0086u2rjIKtkGEWt50K3XfaNaqhoOhl6iUo+A=="],
+ "@elizaos/plugin-signal": ["@elizaos/plugin-signal@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "qrcode": "^1.5.4", "zod": "^4.4.3" }, "peerDependencies": { "@elizaos/signal-native": "*" }, "optionalPeers": ["@elizaos/signal-native"] }, "sha512-9PY5VbB9ZMmpoZa5HSYdlES8xdvb66kuuCMl21hv8lKXl4JpLTCQFBdqETN2yL429b+n0E37tejFzVXE5i8zEA=="],
+
"@elizaos/plugin-sql": ["@elizaos/plugin-sql@workspace:packages/plugins/plugin-sql"],
- "@elizaos/plugin-telegram": ["@elizaos/plugin-telegram@2.0.0-alpha.537", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "@telegraf/types": "^7.1.0", "@types/node": "^24.0.10", "strip-literal": "^3.0.0", "telegraf": "4.16.3", "telegram": "^2.26.22", "type-detect": "^4.1.0", "typescript": "^6.0.0" } }, "sha512-JfUv0i1+vUnzzs/XJFfABbb0QzvWj4tM8IAAASpvd9YUhQFgzdZxuWBT7CkCvtFNHiAW4rT5QPuau/mGQlVMeQ=="],
+ "@elizaos/plugin-streaming": ["@elizaos/plugin-streaming@2.0.0-beta.1", "", { "dependencies": { "@elizaos/cloud-routing": "2.0.0-beta.1", "@elizaos/core": "2.0.0-beta.1", "@elizaos/plugin-browser": "2.0.0-beta.1" } }, "sha512-bcl56KBOL3Nk7k6lkO8kusDpJoN5RcG9tqQHtEfNChIDYBMtrx1VTZZ8GJWqxU/0bIRjITdXz+n20DeywEf0gw=="],
+
+ "@elizaos/plugin-telegram": ["@elizaos/plugin-telegram@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "@telegraf/types": "^7.1.0", "@types/node": "^24.0.10", "strip-literal": "^3.0.0", "telegraf": "4.16.3", "telegram": "^2.26.22", "type-detect": "^4.1.0" } }, "sha512-/gSjSTpTHNODnb2R6YrAhh6WlDw1xWoMAtu6KK5faQHxrRo9VcFUCxR+7lVGvPCYjDF5Hcas14lhjNLb3FAW8g=="],
"@elizaos/plugin-todo": ["@elizaos/plugin-todo@2.0.0-alpha.13", "", { "dependencies": { "@elizaos/core": "alpha", "@elizaos/plugin-rolodex": "alpha", "drizzle-orm": "^0.30.10", "start-server-and-test": "^2.0.5", "zod": "3.24.2" } }, "sha512-VhrBubzKK2XHh3oR/G4IkZrshFoYZkV+KL0OvMb/isn7PYaPYt7ilOIht97Tn1PczWMi1bvp3Am0gJZUvf6vPA=="],
@@ -381,71 +425,87 @@
"@elizaos/plugin-trust": ["@elizaos/plugin-trust@1.2.2", "", { "dependencies": { "@elizaos/core": "next", "dedent": "^1.6.0", "drizzle-orm": "^0.44.2" } }, "sha512-t1WwAlC2ernlpY6y3DrtZ9Rtowzv+LOzICjZozBbGjcKF7RgCsoFf92mjoc100Vy6e728ErM3Yg5jcW8ATKwNA=="],
- "@elizaos/plugin-wechat": ["@elizaos/plugin-wechat@2.0.0-alpha.537", "", { "peerDependencies": { "@elizaos/core": "^2.0.0-alpha.537" } }, "sha512-rspXTkDMzdFMnxvxJyik8jo0K4jqvc4OTraGZz4Y4hF2JjnegNGJa0Hcpnm09F3dtsTouY7hCiOIHctQO10RQg=="],
+ "@elizaos/plugin-video": ["@elizaos/plugin-video@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "ffmpeg-static": "^5.3.0", "fluent-ffmpeg": "2.1.3", "youtube-dl-exec": "^3.1.5" } }, "sha512-VhoOAGB7bNy5uwvXzhlcBsUKAGKG7F8gGv/LEpakkE5MO4QnEzpSvtmnh8nOGmSTMZlaBlOLvuT1LNQt6BqGVQ=="],
+
+ "@elizaos/plugin-wechat": ["@elizaos/plugin-wechat@2.0.0-beta.1", "", { "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-mHu2W3QZ+CsWXu0MFIXW53q7VW5PxD0Vvx5YHskKasnIppOLWIGFC5rx3ONWJAAf060AdYLyum6banVrtATAfg=="],
+
+ "@elizaos/plugin-whatsapp": ["@elizaos/plugin-whatsapp@2.0.0-beta.1", "", { "dependencies": { "@hapi/boom": "^10.0.1", "@whiskeysockets/baileys": "^7.0.0-rc.9", "pino": "^10.3.1", "qrcode": "^1.5.4", "qrcode-terminal": "^0.12.0" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-zX5a8JZix/N+f5JXGjsS+IBgSrI41r0pu0mmWpVTIRZBOC6P9wRKsHlfYOMc8YKo5QPiuL47s2+yw1A2Bu+I7g=="],
+
+ "@elizaos/plugin-workflow": ["@elizaos/plugin-workflow@2.0.0-beta.1", "", { "dependencies": { "@elizaos/workflows": "2.0.0-beta.1", "drizzle-orm": "^0.45.1", "quickjs-emscripten": "0.32.0" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-6BpWFHIy+0BS+iBqnL6LIs/F7SjS9V11QTHqxskxVlbxMbxfnxs6vSvD1/B5n9MAQku9YhfojaiXpoI7lPDa8A=="],
+
+ "@elizaos/plugin-x402": ["@elizaos/plugin-x402@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "drizzle-orm": "0.45.2", "viem": "^2.48.8" } }, "sha512-L2lcIAO6yEdIoFdm8mL19vZJ195Mg8uFz8KZ2weRXNk57+K9H9eL4CDSqJIk0AwukltiO38QM7pXCuRBD62XxA=="],
+
+ "@elizaos/prompts": ["@elizaos/prompts@2.0.0-beta.1", "", {}, "sha512-aIUTX7URFL7RrmEbvk8ISjhdUCao1cGaB1KB/2YwTLcJo6fFKlBQgTv1bcpmFVwF1Ne1nWsc7TqCl9Istk8BYg=="],
- "@elizaos/shared": ["@elizaos/shared@2.0.0-alpha.538", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "zod": "^4.4.2" }, "optionalDependencies": { "figlet": "^1.11.0" } }, "sha512-RvWGK52wy7ySZK++EiK6gffYe4cBfjCXggSdLx+b0U418e7p+Y3LZTwRUH6DVG4kzSvuO7eu2tOnv/tgM0O7Pw=="],
+ "@elizaos/shared": ["@elizaos/shared@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "chalk": "^5.3.0", "drizzle-orm": "0.45.2", "zod": "^4.4.3" }, "optionalDependencies": { "figlet": "^1.11.0" } }, "sha512-Rjxlhuh6me3usSvhY1nYawqRIHDsZ+4oVnvADVDHjLK436PcnPNpxUzM7OsICkFcgGDiH3G5x3lD4q3FC2JOMA=="],
- "@elizaos/skills": ["@elizaos/skills@2.0.0-alpha.539", "", { "dependencies": { "@elizaos/core": "^2.0.0-alpha.537", "yaml": "^2.8.2" } }, "sha512-RVwWP2bg9T5dr5KMIkod81BHD1mkqQaykn5mrToF5CBm3Z/umppQwu/z42p09Ncq5yko54dGGsOcz13nXO6awQ=="],
+ "@elizaos/skills": ["@elizaos/skills@2.0.0-beta.1", "", { "dependencies": { "@elizaos/core": "2.0.0-beta.1", "yaml": "^2.8.2" } }, "sha512-ora675PbAw9VWtIatyvOboWfxSkzsm33JUMh85+Pmg5ispZbpzj31JC+thnMUqyeaL3P8P4fJznbxEYw7ddvDw=="],
- "@elizaos/vault": ["@elizaos/vault@2.0.0-alpha.537", "", { "dependencies": { "@napi-rs/keyring": "^1.1.6" } }, "sha512-5iBj+/na3UJrqiI/acmQoTRMEpz0TF86PIpe/TygmK7lFyFsyvYZEfmCyIKw2mY60F2eEszKp5eO22JvJlokwQ=="],
+ "@elizaos/vault": ["@elizaos/vault@2.0.0-beta.1", "", { "dependencies": { "@electric-sql/pglite": "^0.4.0", "@napi-rs/keyring": "^1.1.6" } }, "sha512-sVDNGoy3sfYNt/59rzdYFZPXc3QW6gunwn1MzJ7eRXaNXlzSN9L02Krl/nfEq6+mv9Jz4rO+MxcBT3D5Gc/V8w=="],
+
+ "@elizaos/workflows": ["@elizaos/workflows@2.0.0-beta.1", "", {}, "sha512-lQaTUqE6ezVsJVLDnvsdUbjdVX/y0B8Ev/BO3bv8/V0KSf56NwLuRKm5EnNJ1QBxxZJT5j4tg2mOwuTBvas4Xw=="],
+
+ "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
"@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="],
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
+
"@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="],
"@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="],
- "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
+ "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="],
- "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="],
+ "@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="],
- "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="],
+ "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="],
- "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="],
+ "@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="],
- "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="],
+ "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="],
- "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="],
+ "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="],
- "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="],
+ "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="],
- "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="],
+ "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="],
- "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="],
+ "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="],
- "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="],
+ "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="],
- "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="],
+ "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="],
- "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="],
+ "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="],
- "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="],
+ "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="],
- "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="],
+ "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="],
- "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="],
+ "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="],
- "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="],
+ "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="],
- "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="],
+ "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="],
- "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="],
+ "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="],
- "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="],
+ "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="],
- "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="],
+ "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="],
- "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="],
+ "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="],
- "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="],
+ "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="],
- "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="],
+ "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="],
- "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="],
+ "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="],
- "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="],
+ "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="],
- "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="],
+ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="],
"@exodus/bytes": ["@exodus/bytes@1.15.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ=="],
@@ -471,7 +531,9 @@
"@huggingface/jinja": ["@huggingface/jinja@0.5.6", "", {}, "sha512-MyMWyLnjqo+KRJYSH7oWNbsOn5onuIvfXYPcc0WOGxU0eHUV7oAYUoQTl2BMdu7ml+ea/bu11UM+EshbeHwtIA=="],
- "@huggingface/transformers": ["@huggingface/transformers@3.8.1", "", { "dependencies": { "@huggingface/jinja": "^0.5.3", "onnxruntime-node": "1.21.0", "onnxruntime-web": "1.22.0-dev.20250409-89f8206ba4", "sharp": "^0.34.1" } }, "sha512-tsTk4zVjImqdqjS8/AOZg2yNLd1z9S5v+7oUPpXaasDRwEDhB+xnglK1k5cad26lL5/ZIaeREgWWy0bs9y9pPA=="],
+ "@huggingface/tokenizers": ["@huggingface/tokenizers@0.1.3", "", {}, "sha512-8rF/RRT10u+kn7YuUbUg0OF30K8rjTc78aHpxT+qJ1uWSqxT1MHi8+9ltwYfkFYJzT/oS+qw3JVfHtNMGAdqyA=="],
+
+ "@huggingface/transformers": ["@huggingface/transformers@4.2.0", "", { "dependencies": { "@huggingface/jinja": "^0.5.6", "@huggingface/tokenizers": "^0.1.3", "onnxruntime-node": "1.24.3", "onnxruntime-web": "1.26.0-dev.20260416-b7804b056c", "sharp": "^0.34.5" } }, "sha512-8BRCoBMH0XsWaEIamuR0LrJGAfftgHAfb2Vrffy0VKlSAE/MnUJ5/h/zTfEP3fDIft+nk7TqB8xXEyABGitBjQ=="],
"@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="],
@@ -525,10 +587,84 @@
"@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
+ "@jimp/bmp": ["@jimp/bmp@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "bmp-js": "^0.1.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g=="],
+
+ "@jimp/core": ["@jimp/core@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "any-base": "^1.1.0", "buffer": "^5.2.0", "exif-parser": "^0.1.12", "file-type": "^16.5.4", "isomorphic-fetch": "^3.0.0", "pixelmatch": "^4.0.2", "tinycolor2": "^1.6.0" } }, "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA=="],
+
+ "@jimp/custom": ["@jimp/custom@0.22.12", "", { "dependencies": { "@jimp/core": "^0.22.12" } }, "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q=="],
+
+ "@jimp/gif": ["@jimp/gif@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "gifwrap": "^0.10.1", "omggif": "^1.0.9" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg=="],
+
+ "@jimp/jpeg": ["@jimp/jpeg@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "jpeg-js": "^0.4.4" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q=="],
+
+ "@jimp/plugin-blit": ["@jimp/plugin-blit@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ=="],
+
+ "@jimp/plugin-blur": ["@jimp/plugin-blur@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw=="],
+
+ "@jimp/plugin-circle": ["@jimp/plugin-circle@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg=="],
+
+ "@jimp/plugin-color": ["@jimp/plugin-color@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "tinycolor2": "^1.6.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA=="],
+
+ "@jimp/plugin-contain": ["@jimp/plugin-contain@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-blit": ">=0.3.5", "@jimp/plugin-resize": ">=0.3.5", "@jimp/plugin-scale": ">=0.3.5" } }, "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ=="],
+
+ "@jimp/plugin-cover": ["@jimp/plugin-cover@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-crop": ">=0.3.5", "@jimp/plugin-resize": ">=0.3.5", "@jimp/plugin-scale": ">=0.3.5" } }, "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA=="],
+
+ "@jimp/plugin-crop": ["@jimp/plugin-crop@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw=="],
+
+ "@jimp/plugin-displace": ["@jimp/plugin-displace@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA=="],
+
+ "@jimp/plugin-dither": ["@jimp/plugin-dither@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw=="],
+
+ "@jimp/plugin-fisheye": ["@jimp/plugin-fisheye@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q=="],
+
+ "@jimp/plugin-flip": ["@jimp/plugin-flip@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-rotate": ">=0.3.5" } }, "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q=="],
+
+ "@jimp/plugin-gaussian": ["@jimp/plugin-gaussian@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg=="],
+
+ "@jimp/plugin-invert": ["@jimp/plugin-invert@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ=="],
+
+ "@jimp/plugin-mask": ["@jimp/plugin-mask@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA=="],
+
+ "@jimp/plugin-normalize": ["@jimp/plugin-normalize@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA=="],
+
+ "@jimp/plugin-print": ["@jimp/plugin-print@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "load-bmfont": "^1.4.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-blit": ">=0.3.5" } }, "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ=="],
+
+ "@jimp/plugin-resize": ["@jimp/plugin-resize@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg=="],
+
+ "@jimp/plugin-rotate": ["@jimp/plugin-rotate@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-blit": ">=0.3.5", "@jimp/plugin-crop": ">=0.3.5", "@jimp/plugin-resize": ">=0.3.5" } }, "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA=="],
+
+ "@jimp/plugin-scale": ["@jimp/plugin-scale@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-resize": ">=0.3.5" } }, "sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw=="],
+
+ "@jimp/plugin-shadow": ["@jimp/plugin-shadow@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-blur": ">=0.3.5", "@jimp/plugin-resize": ">=0.3.5" } }, "sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg=="],
+
+ "@jimp/plugin-threshold": ["@jimp/plugin-threshold@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5", "@jimp/plugin-color": ">=0.8.0", "@jimp/plugin-resize": ">=0.8.0" } }, "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw=="],
+
+ "@jimp/plugins": ["@jimp/plugins@0.22.12", "", { "dependencies": { "@jimp/plugin-blit": "^0.22.12", "@jimp/plugin-blur": "^0.22.12", "@jimp/plugin-circle": "^0.22.12", "@jimp/plugin-color": "^0.22.12", "@jimp/plugin-contain": "^0.22.12", "@jimp/plugin-cover": "^0.22.12", "@jimp/plugin-crop": "^0.22.12", "@jimp/plugin-displace": "^0.22.12", "@jimp/plugin-dither": "^0.22.12", "@jimp/plugin-fisheye": "^0.22.12", "@jimp/plugin-flip": "^0.22.12", "@jimp/plugin-gaussian": "^0.22.12", "@jimp/plugin-invert": "^0.22.12", "@jimp/plugin-mask": "^0.22.12", "@jimp/plugin-normalize": "^0.22.12", "@jimp/plugin-print": "^0.22.12", "@jimp/plugin-resize": "^0.22.12", "@jimp/plugin-rotate": "^0.22.12", "@jimp/plugin-scale": "^0.22.12", "@jimp/plugin-shadow": "^0.22.12", "@jimp/plugin-threshold": "^0.22.12", "timm": "^1.6.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww=="],
+
+ "@jimp/png": ["@jimp/png@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "pngjs": "^6.0.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg=="],
+
+ "@jimp/tiff": ["@jimp/tiff@0.22.12", "", { "dependencies": { "utif2": "^4.0.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg=="],
+
+ "@jimp/types": ["@jimp/types@0.22.12", "", { "dependencies": { "@jimp/bmp": "^0.22.12", "@jimp/gif": "^0.22.12", "@jimp/jpeg": "^0.22.12", "@jimp/png": "^0.22.12", "@jimp/tiff": "^0.22.12", "timm": "^1.6.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA=="],
+
+ "@jimp/utils": ["@jimp/utils@0.22.12", "", { "dependencies": { "regenerator-runtime": "^0.13.3" } }, "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q=="],
+
+ "@jitl/quickjs-ffi-types": ["@jitl/quickjs-ffi-types@0.32.0", "", {}, "sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg=="],
+
+ "@jitl/quickjs-wasmfile-debug-asyncify": ["@jitl/quickjs-wasmfile-debug-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw=="],
+
+ "@jitl/quickjs-wasmfile-debug-sync": ["@jitl/quickjs-wasmfile-debug-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q=="],
+
+ "@jitl/quickjs-wasmfile-release-asyncify": ["@jitl/quickjs-wasmfile-release-asyncify@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q=="],
+
+ "@jitl/quickjs-wasmfile-release-sync": ["@jitl/quickjs-wasmfile-release-sync@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg=="],
+
"@keyv/bigmap": ["@keyv/bigmap@1.3.1", "", { "dependencies": { "hashery": "^1.4.0", "hookified": "^1.15.0" }, "peerDependencies": { "keyv": "^5.6.0" } }, "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ=="],
"@keyv/serialize": ["@keyv/serialize@1.1.1", "", {}, "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA=="],
+ "@kikobeats/time-span": ["@kikobeats/time-span@1.0.13", "", {}, "sha512-CfBK4/EZ73uN/6b5/wOfvWju1Ev/6H+uXqS2Vqd7/dEQTyOsvv4BdOHDqESp4Efa9YyrPPvN3IHU+C4z9FAo3Q=="],
+
"@kwsites/file-exists": ["@kwsites/file-exists@1.1.1", "", { "dependencies": { "debug": "^4.1.1" } }, "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw=="],
"@kwsites/promise-deferred": ["@kwsites/promise-deferred@1.1.1", "", {}, "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="],
@@ -607,11 +743,13 @@
"@napi-rs/keyring-win32-x64-msvc": ["@napi-rs/keyring-win32-x64-msvc@1.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg=="],
+ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
+
"@neondatabase/serverless": ["@neondatabase/serverless@1.1.0", "", {}, "sha512-r3ZZhRjEcfEdKIZnoB1RusNgvHuaBRqfCzV4Gi+5A9yUX0S4HTws/ASWqt13wL4y4I+0rqsWGdA2w7EQXHi3+Q=="],
"@noble/ciphers": ["@noble/ciphers@2.2.0", "", {}, "sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA=="],
- "@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="],
+ "@noble/curves": ["@noble/curves@2.2.0", "", { "dependencies": { "@noble/hashes": "2.2.0" } }, "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ=="],
"@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="],
@@ -647,6 +785,24 @@
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
+ "@nut-tree-fork/default-clipboard-provider": ["@nut-tree-fork/default-clipboard-provider@4.2.6", "", { "dependencies": { "clipboardy": "2.3.0" } }, "sha512-Hzqj57rheIMGtsS4zK4//kOhaX5FxMluOiz+4TVaHXx+idZS/bPhZwd8e6o1w1GT0PVJOUIP+4CdUe//k5VRig=="],
+
+ "@nut-tree-fork/libnut": ["@nut-tree-fork/libnut@4.2.6", "", { "dependencies": { "@nut-tree-fork/libnut-darwin": "2.7.5", "@nut-tree-fork/libnut-linux": "2.7.5", "@nut-tree-fork/libnut-win32": "2.7.5" } }, "sha512-2FCiTBokMGrMl4eL/trEIO+mtpkXpdPHoVKdTBmW8UBIbhCbrCKmnXb2skWGfVs+U3q7o5EYDjVTNUYaUWbaxQ=="],
+
+ "@nut-tree-fork/libnut-darwin": ["@nut-tree-fork/libnut-darwin@2.7.5", "", { "dependencies": { "bindings": "1.5.0" }, "optionalDependencies": { "@nut-tree-fork/node-mac-permissions": "2.2.1" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ] }, "sha512-LbqtPtMPTJUcg4XoPP2jsU1wc8flBcGyKTerKsIfK9cD7nBHROnO0QksbrsbSWEpLym8T8fRtuU7XEY83l6Z2Q=="],
+
+ "@nut-tree-fork/libnut-linux": ["@nut-tree-fork/libnut-linux@2.7.5", "", { "dependencies": { "bindings": "1.5.0" }, "optionalDependencies": { "@nut-tree-fork/node-mac-permissions": "2.2.1" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ] }, "sha512-uxaXEcRKnFObAljsoR6tLOBUU1dJ2sctloG6gFgCBGN7+k6Jdv6jZfOuNjd/fpdq2C5WPMm0rtn9EE7h5J3Jcg=="],
+
+ "@nut-tree-fork/libnut-win32": ["@nut-tree-fork/libnut-win32@2.7.5", "", { "dependencies": { "bindings": "1.5.0" }, "optionalDependencies": { "@nut-tree-fork/node-mac-permissions": "2.2.1" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ] }, "sha512-yqC87zvmFcDPwFrRU40DYhN0xmEVM3aSkOuyF0IX+y1x+HWSu/i0PNklATpPBhGid3QVb/TOHuVoaraMrUFCNw=="],
+
+ "@nut-tree-fork/node-mac-permissions": ["@nut-tree-fork/node-mac-permissions@2.2.1", "", { "dependencies": { "bindings": "1.5.0", "node-addon-api": "5.0.0" }, "os": "darwin" }, "sha512-iSfOTDiBZ7VDa17PoQje5rUaZSvSAaq+XEyXCmhPuQwV5XuNU02Grv6oFhsdpz89w7+UvB/8KX/cX5IYQ5o2Bw=="],
+
+ "@nut-tree-fork/nut-js": ["@nut-tree-fork/nut-js@4.2.6", "", { "dependencies": { "@nut-tree-fork/default-clipboard-provider": "4.2.6", "@nut-tree-fork/libnut": "4.2.6", "@nut-tree-fork/provider-interfaces": "4.2.6", "@nut-tree-fork/shared": "4.2.6", "jimp": "0.22.10", "node-abort-controller": "3.1.1" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ] }, "sha512-aI/WCX7gE1HFGPH3EZP/UWqpNMM1NMoM/EkXqp7pKMgXFCi8e5+o5p+jd/QOYpmALv9bQg7+s69nI7FONbMqDg=="],
+
+ "@nut-tree-fork/provider-interfaces": ["@nut-tree-fork/provider-interfaces@4.2.6", "", { "dependencies": { "@nut-tree-fork/shared": "4.2.6" } }, "sha512-brtRegDkLSV0sa5DUAigjWf6hCoamBNPb/hKK9AQlW+j3BxQ/8djaEdEB2cihqUh1ZjEtgPyXRqpCWSdKCX68A=="],
+
+ "@nut-tree-fork/shared": ["@nut-tree-fork/shared@4.2.6", "", { "dependencies": { "jimp": "0.22.10", "node-abort-controller": "3.1.1" } }, "sha512-xZaa0YtJt/DDDq/i1vZkabjq8HOWzfhXieMai61cMbYD11J6VhAfhV23ZtQEM02WG7nc2LKjl4UwRnQCteikwA=="],
+
"@octokit/auth-app": ["@octokit/auth-app@6.1.4", "", { "dependencies": { "@octokit/auth-oauth-app": "^7.1.0", "@octokit/auth-oauth-user": "^4.1.0", "@octokit/request": "^8.3.1", "@octokit/request-error": "^5.1.0", "@octokit/types": "^13.1.0", "deprecation": "^2.3.1", "lru-cache": "npm:@wolfy1339/lru-cache@^11.0.2-patch.1", "universal-github-app-jwt": "^1.1.2", "universal-user-agent": "^6.0.0" } }, "sha512-QkXkSOHZK4dA5oUqY5Dk3S+5pN2s1igPjEASNQV8/vgJgW034fQWR16u7VsNOK/EljA00eyjYF5mWNxWKWhHRQ=="],
"@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@7.1.0", "", { "dependencies": { "@octokit/auth-oauth-device": "^6.1.0", "@octokit/auth-oauth-user": "^4.1.0", "@octokit/request": "^8.3.1", "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA=="],
@@ -733,6 +889,12 @@
"@reflink/reflink-win32-x64-msvc": ["@reflink/reflink-win32-x64-msvc@0.1.19", "", { "os": "win32", "cpu": "x64" }, "sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w=="],
+ "@sapphire/async-queue": ["@sapphire/async-queue@1.5.5", "", {}, "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg=="],
+
+ "@sapphire/shapeshift": ["@sapphire/shapeshift@4.0.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" } }, "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg=="],
+
+ "@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="],
+
"@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="],
"@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="],
@@ -831,6 +993,36 @@
"@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="],
+ "@snazzah/davey": ["@snazzah/davey@0.1.11", "", { "optionalDependencies": { "@snazzah/davey-android-arm-eabi": "0.1.11", "@snazzah/davey-android-arm64": "0.1.11", "@snazzah/davey-darwin-arm64": "0.1.11", "@snazzah/davey-darwin-x64": "0.1.11", "@snazzah/davey-freebsd-x64": "0.1.11", "@snazzah/davey-linux-arm-gnueabihf": "0.1.11", "@snazzah/davey-linux-arm64-gnu": "0.1.11", "@snazzah/davey-linux-arm64-musl": "0.1.11", "@snazzah/davey-linux-x64-gnu": "0.1.11", "@snazzah/davey-linux-x64-musl": "0.1.11", "@snazzah/davey-wasm32-wasi": "0.1.11", "@snazzah/davey-win32-arm64-msvc": "0.1.11", "@snazzah/davey-win32-ia32-msvc": "0.1.11", "@snazzah/davey-win32-x64-msvc": "0.1.11" } }, "sha512-oBN+msHzPnm1M5DDx3wVD7iBwpNXFUtkh2MrAbUJu0OhKjliLChi28hq++mu1+qdMpAVQO5JKAvQQxYVbyneiw=="],
+
+ "@snazzah/davey-android-arm-eabi": ["@snazzah/davey-android-arm-eabi@0.1.11", "", { "os": "android", "cpu": "arm" }, "sha512-T1RYbNYKN6tLOcGIDKJd8OI6FBSEemwL7DOYdTMmhqfhhMr3YVN8WOhfoxGg63OcnpTN2e2c5tdY2bAx25RmQQ=="],
+
+ "@snazzah/davey-android-arm64": ["@snazzah/davey-android-arm64@0.1.11", "", { "os": "android", "cpu": "arm64" }, "sha512-ksJn/x2VU8h6w9eku1HT96ugSRZ7lKVkKNKbFleaFN+U99DJaPM+gMu2YvnFU4V54HR06ZBnRihnVG6VLXQpDw=="],
+
+ "@snazzah/davey-darwin-arm64": ["@snazzah/davey-darwin-arm64@0.1.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-E1d7PbaaVMO3Lj9EiAPqOVbuV0xg5+PsHzHH097DDXiD1+zUDXvJaTnUWsnm5z50pJniHpi4GtaYmk+ieB/guA=="],
+
+ "@snazzah/davey-darwin-x64": ["@snazzah/davey-darwin-x64@0.1.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tl4TI/LTmgJZepgbgVMYDi8RqlAkPtPg1OEBPl7a9Tn3AwR36Vs6lyIT1cs/lGy/ds/+B+mKI4rPObN1cyILTw=="],
+
+ "@snazzah/davey-freebsd-x64": ["@snazzah/davey-freebsd-x64@0.1.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-T8Iw9FXkuI1T+YBAFzh9v/TXf9IOTOSqnd/BFpTRTrlW72PR2lhIidzSmg027VxO7r5pX47iFwiOkb9I/NU/EA=="],
+
+ "@snazzah/davey-linux-arm-gnueabihf": ["@snazzah/davey-linux-arm-gnueabihf@0.1.11", "", { "os": "linux", "cpu": "arm" }, "sha512-1Txj+8pqA8uq/OGtaUaBFWAPnNMQzFgIywj0iA7EI4xZl+mab48/pv+YZ1pNb/suC6ynsW44oB9efiXSdcUAgA=="],
+
+ "@snazzah/davey-linux-arm64-gnu": ["@snazzah/davey-linux-arm64-gnu@0.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-ERzF5nM/IYW1BcN3wLXpEwBCGLFf0kGJUVhaV6yfiInz0tkU8UmvrrgpaMaACfMjIhfWdq5CcX+aTkXo/saNcg=="],
+
+ "@snazzah/davey-linux-arm64-musl": ["@snazzah/davey-linux-arm64-musl@0.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-e6pX6Hiabtz99q+H/YHNkm9JVlpqN8HGh0qPib8G2+UY4/SSH8WvqWipk3v581dMy2oyCHt7MOoY1aU1P1N/xA=="],
+
+ "@snazzah/davey-linux-x64-gnu": ["@snazzah/davey-linux-x64-gnu@0.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-TW5bSoqChOJMbvsDb4wAATYrxmAXuNnse7wFNVSAJUaZKSeRfZbu3UAiPWSNn7GwLwSfU6hg322KZUn8IWCuvg=="],
+
+ "@snazzah/davey-linux-x64-musl": ["@snazzah/davey-linux-x64-musl@0.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-5j6Pmc+Wzv5lSxVP6quA7teYRJXibkZqQyYGfTDnTsUOO5dPpcojpqlXlkhyvsA1OAQTj4uxbOCciN3cVWwzug=="],
+
+ "@snazzah/davey-wasm32-wasi": ["@snazzah/davey-wasm32-wasi@0.1.11", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.2" }, "cpu": "none" }, "sha512-rKOwZ/0J8lp+4VEyOdMDBRP9KR+PksZpa9V1Qn0veMzy4FqTVKthkxwGqewheFe0SFg9fdvt798l/PBFrfDeZw=="],
+
+ "@snazzah/davey-win32-arm64-msvc": ["@snazzah/davey-win32-arm64-msvc@0.1.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-5fptJU4tX901m3mj0SHiBljMrPT4ZEsynbBhR7bK1yn9TY1jjyhN8EFi7QF5IWtUEni+0mia2BCMHZ5ZkmFZqQ=="],
+
+ "@snazzah/davey-win32-ia32-msvc": ["@snazzah/davey-win32-ia32-msvc@0.1.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-ualexn8SeLsiMHhWfzVrzRcjHgcBapg++FPaVgJJxoh2S/jCRiklXOu3luqIZdJdNKvhe2V9SwO/cImPeIIBKw=="],
+
+ "@snazzah/davey-win32-x64-msvc": ["@snazzah/davey-win32-x64-msvc@0.1.11", "", { "os": "win32", "cpu": "x64" }, "sha512-muNhc8UKXtknzsH/w4AIkbPR2I8BuvApn0pDXar0IEvY8PCjqU/M8MPbOOEYwQVvQRMwVTgExtxzrkBPSXB4nA=="],
+
"@solana/buffer-layout": ["@solana/buffer-layout@4.0.1", "", { "dependencies": { "buffer": "~6.0.3" } }, "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA=="],
"@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="],
@@ -857,12 +1049,12 @@
"@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="],
- "@toon-format/toon": ["@toon-format/toon@2.2.0", "", {}, "sha512-FMYqrlZnMN72YIT9KVt7Kxc41gat+RgMIzDmvRRPHw0J7pqW/FeBGDY/4BIWjT71Y+EdI9fCJip90uXuGuYhjw=="],
-
"@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="],
"@tweenjs/tween.js": ["@tweenjs/tween.js@25.0.0", "", {}, "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A=="],
+ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="],
+
"@types/blessed": ["@types/blessed@0.1.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-ZOQGjLvWDclAXp0rW5iuUBXeD6Gr1PkitN7tj7/G8FCoSzTsij6OhXusOzMKhwrZ9YlL2Pmu0d6xJ9zVvk+Hsg=="],
"@types/btoa-lite": ["@types/btoa-lite@1.0.2", "", {}, "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg=="],
@@ -885,13 +1077,41 @@
"@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="],
- "@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="],
+ "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
"@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="],
"@ungap/structured-clone": ["@ungap/structured-clone@1.2.0", "", {}, "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="],
- "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="],
+ "@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="],
+
+ "@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.7", "", {}, "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g=="],
+
+ "@vscode/ripgrep": ["@vscode/ripgrep@1.18.0", "", { "optionalDependencies": { "@vscode/ripgrep-darwin-arm64": "1.18.0", "@vscode/ripgrep-darwin-x64": "1.18.0", "@vscode/ripgrep-linux-arm": "1.18.0", "@vscode/ripgrep-linux-arm64": "1.18.0", "@vscode/ripgrep-linux-ia32": "1.18.0", "@vscode/ripgrep-linux-ppc64": "1.18.0", "@vscode/ripgrep-linux-riscv64": "1.18.0", "@vscode/ripgrep-linux-s390x": "1.18.0", "@vscode/ripgrep-linux-x64": "1.18.0", "@vscode/ripgrep-win32-arm64": "1.18.0", "@vscode/ripgrep-win32-ia32": "1.18.0", "@vscode/ripgrep-win32-x64": "1.18.0" } }, "sha512-ns5lWe44tSfbTMbVUsyB+I1819PVSw4AdpgK0RNkzfWfwy6+3IUNSxwSrfTno1/oWaS/hERNz+XLWVyga2aJBQ=="],
+
+ "@vscode/ripgrep-darwin-arm64": ["@vscode/ripgrep-darwin-arm64@1.18.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-r3ktHSvbFycQNF6sl7sNDPocpsI7J+mEzh1IaZFkY0spm3k2Z9t8hPAeOK7+p0l6p6/swkQC14XWX01low+94Q=="],
+
+ "@vscode/ripgrep-darwin-x64": ["@vscode/ripgrep-darwin-x64@1.18.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-25b4gWbL138dGuQU244ebCKKc0q05ULBMoFSz9oAEUHNeqK/lOJViDS7DRvbDazzAzSEdan391Znks/R5mkaTQ=="],
+
+ "@vscode/ripgrep-linux-arm": ["@vscode/ripgrep-linux-arm@1.18.0", "", { "os": "linux", "cpu": "arm" }, "sha512-GDAvufNDHu8zqLEmXstalQF0Wh6wQvdsBi/Vg3Yi3CK4a8XoFXqqXVEHEZ9xQz3t0NfoSEc9JbvK9DDS6FxyxQ=="],
+
+ "@vscode/ripgrep-linux-arm64": ["@vscode/ripgrep-linux-arm64@1.18.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-lQ/5zTG++U0E3IhVgS4EPTTn/U4okncaRMM5GOFfOYZywS4nuD31GhkHbNYlDk5CuDC68+hYJ0/eQeyCKJDA+g=="],
+
+ "@vscode/ripgrep-linux-ia32": ["@vscode/ripgrep-linux-ia32@1.18.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-YWLkSUtFd4Jh5EepIhA9RJSfv3uMAVMo+2rBIGHPBnvgLrZciIs2cDKei1/p6Wc/aCzUoHyMAg2R6tw4ZCBKGg=="],
+
+ "@vscode/ripgrep-linux-ppc64": ["@vscode/ripgrep-linux-ppc64@1.18.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-quXVY8fwQ8O/lvU1yrSqSl3jlUzysRSb+AfUfCL/tRtphxsKlFvPAejryZ6vg4Bgvn8XL74xb4qMCDmWgYrT5w=="],
+
+ "@vscode/ripgrep-linux-riscv64": ["@vscode/ripgrep-linux-riscv64@1.18.0", "", { "os": "linux", "cpu": "none" }, "sha512-f5kBQBrWfQt8Q7OhSORuNDei5dkYagBj3y4jImSUXGMy8B/Ke7SltSRcUtjPv166FAFfHCAmWuZp3+cWnX2/Vw=="],
+
+ "@vscode/ripgrep-linux-s390x": ["@vscode/ripgrep-linux-s390x@1.18.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-rTOcJFGGcl2c07RUOWUo4U1ndnemKhY6A9hnMB18uk7jSgJc0d/QLBGWMWpumdtoJtpizn/wIv5mXIisJukusQ=="],
+
+ "@vscode/ripgrep-linux-x64": ["@vscode/ripgrep-linux-x64@1.18.0", "", { "os": "linux", "cpu": "x64" }, "sha512-mQ3bVrUpnD2vs7QT0vX90Lt0cnUq467uFtEktIdsJJmW296RoSULRGqWgzG1AKxyBpNDD6l4ZO4qKf6SgyC23Q=="],
+
+ "@vscode/ripgrep-win32-arm64": ["@vscode/ripgrep-win32-arm64@1.18.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-vfTIjq1OHnzUjxZcHVQAMbnggp8dpGf+0QKFOZHwWPqFwXxQC8eCWM+5NUdoJ6yrElCeMzoUTXoK/LdZaniB+Q=="],
+
+ "@vscode/ripgrep-win32-ia32": ["@vscode/ripgrep-win32-ia32@1.18.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-//rfAE+BOw5AC2EMmepmiE36jUuevtQYNQqqlw1s3m9FlRxjxEut97RkRPHAu9BG4mSojatZx+kXZXNdyI9caQ=="],
+
+ "@vscode/ripgrep-win32-x64": ["@vscode/ripgrep-win32-x64@1.18.0", "", { "os": "win32", "cpu": "x64" }, "sha512-KNPvtElldqILHdnAetujPaowkNbpqJy3ssIGGN6F6Kve9Qi+nNLI2DN01O83JjCEVQbCzl8Ov3QZ9Eov3BR8Dg=="],
"@whiskeysockets/baileys": ["@whiskeysockets/baileys@7.0.0-rc.9", "", { "dependencies": { "@cacheable/node-cache": "^1.4.0", "@hapi/boom": "^9.1.3", "async-mutex": "^0.5.0", "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", "lru-cache": "^11.1.0", "music-metadata": "^11.7.0", "p-queue": "^9.0.0", "pino": "^9.6", "protobufjs": "^7.2.4", "ws": "^8.13.0" }, "peerDependencies": { "audio-decode": "^2.1.3", "jimp": "^1.6.0", "link-preview-js": "^3.0.0", "sharp": "*" }, "optionalPeers": ["audio-decode", "jimp", "link-preview-js"] }, "sha512-YFm5gKXfDP9byCXCW3OPHKXLzrAKzolzgVUlRosHHgwbnf2YOO3XknkMm6J7+F0ns8OA0uuSBhgkRHTDtqkacw=="],
@@ -907,6 +1127,8 @@
"adapter-types": ["adapter-types@0.2.0", "", {}, "sha512-T6YjdynGF9u1+D+DnqjsGmyW/dkq+kVRpz/wgVGcK2EHBAz9ETCX9Kz9ZHZdqyd0B2s/YJ0euGHiwhOFoGe0NA=="],
+ "adm-zip": ["adm-zip@0.5.17", "", {}, "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ=="],
+
"adze": ["adze@2.3.0", "", { "dependencies": { "@ungap/structured-clone": "1.2.0", "picocolors": "1.1.1" } }, "sha512-c5I7uXn5jZ075LbW0lhkmllq4OLQsLHbEV63MbykOQr/VPIOdTgbxGH4QoXHqakAUO3rUSEmURd5eM9GgpJB6g=="],
"aes-js": ["aes-js@4.0.0-beta.5", "", {}, "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="],
@@ -915,7 +1137,7 @@
"agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="],
- "ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="],
+ "ai": ["ai@6.0.177", "", { "dependencies": { "@ai-sdk/gateway": "3.0.112", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1xQtbeWwNcLyyM86ixZhkKvT+WRXc1lvarIKqPVtsyn8F9NDikwUMBqYu+aQKDgMht50SMXh4qboYuU8MeHZZA=="],
"ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
@@ -927,14 +1149,20 @@
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
+ "any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="],
+
"append-field": ["append-field@1.0.0", "", {}, "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="],
+ "arch": ["arch@2.2.0", "", {}, "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="],
+
"arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="],
"argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
"ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="],
+ "async": ["async@0.2.10", "", {}, "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="],
+
"async-mutex": ["async-mutex@0.5.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA=="],
"async-retry": ["async-retry@1.3.3", "", { "dependencies": { "retry": "0.13.1" } }, "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw=="],
@@ -977,10 +1205,18 @@
"bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="],
+ "binary-version": ["binary-version@7.1.0", "", { "dependencies": { "execa": "^8.0.1", "find-versions": "^6.0.0" } }, "sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw=="],
+
+ "binary-version-check": ["binary-version-check@6.1.0", "", { "dependencies": { "binary-version": "^7.1.0", "semver": "^7.6.0", "semver-truncate": "^3.0.0" } }, "sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA=="],
+
+ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="],
+
"blessed": ["blessed@0.1.81", "", { "bin": { "blessed": "./bin/tput.js" } }, "sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ=="],
"bluebird": ["bluebird@3.4.7", "", {}, "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="],
+ "bmp-js": ["bmp-js@0.1.0", "", {}, "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="],
+
"bn.js": ["bn.js@5.2.3", "", {}, "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w=="],
"body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
@@ -1007,6 +1243,8 @@
"buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="],
+ "buffer-equal": ["buffer-equal@0.0.1", "", {}, "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA=="],
+
"buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],
"buffer-fill": ["buffer-fill@1.0.0", "", {}, "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ=="],
@@ -1031,6 +1269,10 @@
"canvas-color-tracker": ["canvas-color-tracker@1.3.2", "", { "dependencies": { "tinycolor2": "^1.6.0" } }, "sha512-ryQkDX26yJ3CXzb3hxUVNlg1NKE4REc5crLBq661Nxzr8TNd236SaEf2ffYLXyI5tSABSeguHLqcVq4vf9L3Zg=="],
+ "caseless": ["caseless@0.12.0", "", {}, "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="],
+
+ "centra": ["centra@2.7.0", "", { "dependencies": { "follow-redirects": "^1.15.6" } }, "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg=="],
+
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
"check-more-types": ["check-more-types@2.24.0", "", {}, "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA=="],
@@ -1047,6 +1289,8 @@
"cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="],
+ "clipboardy": ["clipboardy@2.3.0", "", { "dependencies": { "arch": "^2.1.1", "execa": "^1.0.0", "is-wsl": "^2.1.1" } }, "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ=="],
+
"cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="],
"clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
@@ -1071,6 +1315,8 @@
"content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
+ "convert-hrtime": ["convert-hrtime@5.0.0", "", {}, "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg=="],
+
"cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="],
"cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
@@ -1079,8 +1325,6 @@
"cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="],
- "cron-parser": ["cron-parser@5.5.0", "", { "dependencies": { "luxon": "^3.7.1" } }, "sha512-oML4lKUXxizYswqmxuOCpgFS8BNUJpIu6k/2HVHyaL8Ynnf3wdf9tkns0yRdJLSIjkJ+b0DXHMZEHGpMwjnPww=="],
-
"croner": ["croner@9.0.0", "", {}, "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA=="],
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
@@ -1129,12 +1373,16 @@
"d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="],
+ "dargs": ["dargs@7.0.0", "", {}, "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg=="],
+
"data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="],
"data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="],
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+ "debug-logfmt": ["debug-logfmt@1.4.11", "", { "dependencies": { "@kikobeats/time-span": "~1.0.5", "null-prototype-object": "~1.2.2", "pretty-ms": "~7.0.1" } }, "sha512-2zjKALi79JGKZxk9eiDMdiuoxGMOcF5FvAhX5M53nyGpoKpL7Y0AJLjuWT0xZLFwatyL6cjXBDLnbY7GL19rrA=="],
+
"decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="],
"decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="],
@@ -1171,8 +1419,14 @@
"dingbat-to-unicode": ["dingbat-to-unicode@1.0.1", "", {}, "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w=="],
+ "discord-api-types": ["discord-api-types@0.38.48", "", {}, "sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ=="],
+
+ "discord.js": ["discord.js@14.26.4", "", { "dependencies": { "@discordjs/builders": "^1.14.1", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.2", "@discordjs/rest": "^2.6.1", "@discordjs/util": "^1.2.0", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.40", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "6.24.1" } }, "sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA=="],
+
"dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
+ "dom-walk": ["dom-walk@0.1.2", "", {}, "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="],
+
"domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="],
"domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
@@ -1195,7 +1449,7 @@
"ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],
- "elizaos": ["elizaos@2.0.0-alpha.535", "", { "dependencies": { "@clack/prompts": "^1.0.0", "commander": "^14.0.0", "picocolors": "^1.1.1" }, "bin": { "elizaos": "dist/cli.js" } }, "sha512-MRI/M2qwuG6SBXKXxOIZpqO9wuYvqhuA55qef3U+J1fik9+6L0/XYXxSDuRC3DTmzOyZLZVo5hW7wqrH17Iung=="],
+ "elizaos": ["elizaos@2.0.0-beta.5", "", { "dependencies": { "@clack/prompts": "^1.0.0", "commander": "^14.0.0", "picocolors": "^1.1.1" }, "bin": { "elizaos": "dist/cli.js" } }, "sha512-RqyRdt1c51b8XyDfsYQISV3p7lIkp9DafQVV0/LX93yNdVQ7Q0mcQuEa0RYBOwGPxlCoQcAAJmP5HlGs72juRw=="],
"emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
@@ -1205,6 +1459,8 @@
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
+
"env-var": ["env-var@7.5.0", "", {}, "sha512-mKZOzLRN0ETzau2W2QXefbFjo5EF4yWq28OyKb9ICdeNhHJlOE/pHHnz4hdYJ9cNZXcJHo5xN4OT4pzuSHSNvA=="],
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
@@ -1227,7 +1483,7 @@
"es6-symbol": ["es6-symbol@3.1.4", "", { "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" } }, "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg=="],
- "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="],
+ "esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="],
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
@@ -1257,14 +1513,18 @@
"eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="],
+ "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="],
+
"events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="],
"eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="],
- "eventsource-parser": ["eventsource-parser@1.1.2", "", {}, "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA=="],
+ "eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="],
"execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="],
+ "exif-parser": ["exif-parser@0.1.12", "", {}, "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="],
+
"express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="],
"express-rate-limit": ["express-rate-limit@8.3.1", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw=="],
@@ -1283,6 +1543,8 @@
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
+ "fast-levenshtein": ["fast-levenshtein@3.0.0", "", { "dependencies": { "fastest-levenshtein": "^1.0.7" } }, "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ=="],
+
"fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="],
"fast-stable-stringify": ["fast-stable-stringify@1.0.0", "", {}, "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag=="],
@@ -1293,6 +1555,8 @@
"fast-xml-parser": ["fast-xml-parser@5.5.8", "", { "dependencies": { "fast-xml-builder": "^1.1.4", "path-expression-matcher": "^1.2.0", "strnum": "^2.2.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ=="],
+ "fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", {}, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="],
+
"fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="],
"fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="],
@@ -1301,10 +1565,14 @@
"fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="],
+ "ffmpeg-static": ["ffmpeg-static@5.3.0", "", { "dependencies": { "@derhuerst/http-basic": "^8.2.0", "env-paths": "^2.2.0", "https-proxy-agent": "^5.0.0", "progress": "^2.0.3" } }, "sha512-H+K6sW6TiIX6VGend0KQwthe+kaceeH/luE8dIZyOP35ik7ahYojDuqlTV1bOrtEwl01sy2HFNGQfi5IDJvotg=="],
+
"figlet": ["figlet@1.11.0", "", { "dependencies": { "commander": "^14.0.0" }, "bin": { "figlet": "bin/index.js" } }, "sha512-EEx3OS/l2bFqcUNN2NM9FPJp8vAMrgbCxsbl2hbcJNNxOEwVe3mEzrhan7TbJQViZa8mMqhihlbCaqD+LyYKTQ=="],
"file-type": ["file-type@22.0.1", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.5", "token-types": "^6.1.2", "uint8array-extras": "^1.5.0" } }, "sha512-ww5Mhre0EE+jmBvOXTmXAbEMuZE7uX4a3+oRCQFNj8w++g3ev913N6tXQz0XTXbueQ5TWQfm6BdaViEHHn8bhA=="],
+ "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="],
+
"filename-reserved-regex": ["filename-reserved-regex@3.0.0", "", {}, "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw=="],
"filenamify": ["filenamify@6.0.0", "", { "dependencies": { "filename-reserved-regex": "^3.0.0" } }, "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ=="],
@@ -1315,10 +1583,14 @@
"find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="],
+ "find-versions": ["find-versions@6.0.0", "", { "dependencies": { "semver-regex": "^4.0.5", "super-regex": "^1.0.0" } }, "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA=="],
+
"flatbuffers": ["flatbuffers@25.9.23", "", {}, "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ=="],
"float-tooltip": ["float-tooltip@1.7.5", "", { "dependencies": { "d3-selection": "2 - 3", "kapsule": "^1.16", "preact": "10" } }, "sha512-/kXzuDnnBqyyWyhDMH7+PfP8J/oXiAavGzcRxASOMRHFuReDtofizLLJsf7nnDLAfEaMW4pVWaXrAjtnglpEkg=="],
+ "fluent-ffmpeg": ["fluent-ffmpeg@2.1.3", "", { "dependencies": { "async": "^0.2.9", "which": "^1.1.1" } }, "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q=="],
+
"follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="],
"force-graph": ["force-graph@1.51.2", "", { "dependencies": { "@tweenjs/tween.js": "18 - 25", "accessor-fn": "1", "bezier-js": "3 - 6", "canvas-color-tracker": "^1.3", "d3-array": "1 - 3", "d3-drag": "2 - 3", "d3-force-3d": "2 - 3", "d3-scale": "1 - 4", "d3-scale-chromatic": "1 - 3", "d3-selection": "2 - 3", "d3-zoom": "2 - 3", "float-tooltip": "^1.7", "index-array-by": "1", "kapsule": "^1.16", "lodash-es": "4" } }, "sha512-zZNdMqx8qIQGurgnbgYIUsdXxSfvhfRSIdncsKGv/twUOZpwCsk9hPHmdjdcme1+epATgb41G0rkIGHJ0Wydng=="],
@@ -1341,6 +1613,8 @@
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
+ "function-timeout": ["function-timeout@1.0.2", "", {}, "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA=="],
+
"gaxios": ["gaxios@7.1.4", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "node-fetch": "^3.3.2" } }, "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA=="],
"gcp-metadata": ["gcp-metadata@8.1.2", "", { "dependencies": { "gaxios": "^7.0.0", "google-logging-utils": "^1.0.0", "json-bigint": "^1.0.0" } }, "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg=="],
@@ -1349,6 +1623,8 @@
"get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="],
+ "get-func-name": ["get-func-name@3.0.0", "", {}, "sha512-6lB4zp64YzgT5KVoAuY0vBXQXNObRmelzfVCpx2dHkGVskX8WwjxTVd/kGUsVzxuOpSEF9BcD54ChSKMVjSsfQ=="],
+
"get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
"get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
@@ -1359,12 +1635,16 @@
"get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="],
+ "gifwrap": ["gifwrap@0.10.1", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw=="],
+
"git-workspace-service": ["git-workspace-service@0.4.5", "", { "dependencies": { "@octokit/auth-app": "^6.0.0", "@octokit/rest": "^20.0.0", "pino": "^9.0.0" } }, "sha512-T5mMXDku9s/Gz3yus/CudzqUg2KbaGvF4Y4lgDYZYDGbeFiGWYuJLzVexWQMaiOuctw5XKvRKQYLyB2nwXsMSQ=="],
"glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="],
"glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
+ "global": ["global@4.4.0", "", { "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w=="],
+
"global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="],
"globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
@@ -1403,7 +1683,9 @@
"http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
- "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
+ "http-response-object": ["http-response-object@3.0.2", "", { "dependencies": { "@types/node": "^10.0.3" } }, "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA=="],
+
+ "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="],
"human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="],
@@ -1415,6 +1697,8 @@
"ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
+ "image-q": ["image-q@4.0.0", "", { "dependencies": { "@types/node": "16.9.1" } }, "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw=="],
+
"immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="],
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
@@ -1439,10 +1723,14 @@
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
+ "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="],
+
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
"is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="],
+ "is-function": ["is-function@1.0.2", "", {}, "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="],
+
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
"is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="],
@@ -1459,9 +1747,15 @@
"is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
+ "is-unix": ["is-unix@2.0.14", "", {}, "sha512-ZE+Iq0h1pxZu/IGsBKobH5PZ0L3ylv7WHEmKiRG8kEzue6f+w0i3ckwnDY7Ckej2jjq1c7NDYljEkNqOxv4w9A=="],
+
+ "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="],
+
"isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
- "isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
+ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
+
+ "isomorphic-fetch": ["isomorphic-fetch@3.0.0", "", { "dependencies": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" } }, "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA=="],
"isomorphic-ws": ["isomorphic-ws@4.0.1", "", { "peerDependencies": { "ws": "*" } }, "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w=="],
@@ -1471,10 +1765,14 @@
"jerrypick": ["jerrypick@1.1.2", "", {}, "sha512-YKnxXEekXKzhpf7CLYA0A+oDP8V0OhICNCr5lv96FvSsDEmrb0GKM776JgQvHTMjr7DTTPEVv/1Ciaw0uEWzBA=="],
+ "jimp": ["jimp@0.22.10", "", { "dependencies": { "@jimp/custom": "^0.22.10", "@jimp/plugins": "^0.22.10", "@jimp/types": "^0.22.10", "regenerator-runtime": "^0.13.3" } }, "sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg=="],
+
"joi": ["joi@18.0.2", "", { "dependencies": { "@hapi/address": "^5.1.1", "@hapi/formula": "^3.0.2", "@hapi/hoek": "^11.0.7", "@hapi/pinpoint": "^2.0.1", "@hapi/tlds": "^1.1.1", "@hapi/topo": "^6.0.2", "@standard-schema/spec": "^1.0.0" } }, "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA=="],
"jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="],
+ "jpeg-js": ["jpeg-js@0.4.4", "", {}, "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="],
+
"js-tiktoken": ["js-tiktoken@1.0.21", "", { "dependencies": { "base64-js": "^1.5.1" } }, "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g=="],
"js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="],
@@ -1517,12 +1815,18 @@
"libsignal": ["@whiskeysockets/libsignal-node@github:whiskeysockets/libsignal-node#1c30d7d", { "dependencies": { "curve25519-js": "^0.0.4", "protobufjs": "6.8.8" } }, "WhiskeySockets-libsignal-node-1c30d7d", "sha512-5q4/OuDQaMYx3RpDqMqS3WYyqjrsSMpU8ipQZtpYnm5l6DwNoLV9oIYMDK0NILKW+tyk3tVCIA11BMYQ+A1+GA=="],
+ "libsodium": ["libsodium@0.8.4", "", {}, "sha512-lMcYaRi0zcs7tarATsQUYC7rstliIXZuoq0c6zXSgNtSNtdvBgkSegjWhpMJAXzKX3SUSwIp7+zEsob+j3LuRw=="],
+
+ "libsodium-wrappers": ["libsodium-wrappers@0.8.4", "", { "dependencies": { "libsodium": "^0.8.0" } }, "sha512-mu8aAWucZjTB5O/BtGXtW4e1agy7uHxNYG7zPthmmD1jU43LCDmSWZLN4JhflbdPXj3yDO4lxM1O9hLDgIOXDw=="],
+
"lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="],
"lifecycle-utils": ["lifecycle-utils@3.1.1", "", {}, "sha512-gNd3OvhFNjHykJE3uGntz7UuPzWlK9phrIdXxU9Adis0+ExkwnZibfxCJWiWWZ+a6VbKiZrb+9D9hCQWd4vjTg=="],
"linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="],
+ "load-bmfont": ["load-bmfont@1.4.2", "", { "dependencies": { "buffer-equal": "0.0.1", "mime": "^1.3.4", "parse-bmfont-ascii": "^1.0.3", "parse-bmfont-binary": "^1.0.5", "parse-bmfont-xml": "^1.1.4", "phin": "^3.7.1", "xhr": "^2.0.1", "xtend": "^4.0.0" } }, "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog=="],
+
"locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="],
"lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="],
@@ -1545,6 +1849,8 @@
"lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="],
+ "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="],
+
"lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="],
"log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="],
@@ -1561,7 +1867,9 @@
"lucide-react": ["lucide-react@0.525.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ=="],
- "luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="],
+ "magic-bytes.js": ["magic-bytes.js@1.13.0", "", {}, "sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg=="],
+
+ "make-asynchronous": ["make-asynchronous@1.1.0", "", { "dependencies": { "p-event": "^6.0.0", "type-fest": "^4.6.0", "web-worker": "^1.5.0" } }, "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg=="],
"mammoth": ["mammoth@1.12.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.6", "argparse": "~1.0.3", "base64-js": "^1.5.1", "bluebird": "~3.4.0", "dingbat-to-unicode": "^1.0.1", "jszip": "^3.7.1", "lop": "^0.4.2", "path-is-absolute": "^1.0.0", "underscore": "^1.13.1", "xmlbuilder": "^10.0.0" }, "bin": { "mammoth": "bin/mammoth" } }, "sha512-cwnK1RIcRdDMi2HRx2EXGYlxqIEh0Oo3bLhorgnsVJi2UkbX1+jKxuBNR9PC5+JaX7EkmJxFPmo6mjLpqShI2w=="],
@@ -1589,14 +1897,16 @@
"mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="],
- "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
+ "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
- "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
+ "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
"mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
"mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
+ "min-document": ["min-document@2.19.2", "", { "dependencies": { "dom-walk": "^0.1.0" } }, "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A=="],
+
"minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="],
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
@@ -1625,6 +1935,10 @@
"next-tick": ["next-tick@1.1.0", "", {}, "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="],
+ "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="],
+
+ "node-abort-controller": ["node-abort-controller@3.1.1", "", {}, "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="],
+
"node-addon-api": ["node-addon-api@8.6.0", "", {}, "sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q=="],
"node-api-headers": ["node-api-headers@1.8.0", "", {}, "sha512-jfnmiKWjRAGbdD1yQS28bknFM1tbHC1oucyuMPjmkEs+kpiu76aRs40WlTmBmyEgzDM76ge1DQ7XJ3R5deiVjQ=="],
@@ -1635,7 +1949,7 @@
"node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="],
- "node-llama-cpp": ["node-llama-cpp@3.18.1", "", { "dependencies": { "@huggingface/jinja": "^0.5.6", "async-retry": "^1.3.3", "bytes": "^3.1.2", "chalk": "^5.6.2", "chmodrp": "^1.0.2", "cmake-js": "^8.0.0", "cross-spawn": "^7.0.6", "env-var": "^7.5.0", "filenamify": "^6.0.0", "fs-extra": "^11.3.4", "ignore": "^7.0.4", "ipull": "^3.9.5", "is-unicode-supported": "^2.1.0", "lifecycle-utils": "^3.1.1", "log-symbols": "^7.0.1", "nanoid": "^5.1.6", "node-addon-api": "^8.6.0", "ora": "^9.3.0", "pretty-ms": "^9.3.0", "proper-lockfile": "^4.1.2", "semver": "^7.7.1", "simple-git": "^3.33.0", "slice-ansi": "^8.0.0", "stdout-update": "^4.0.1", "strip-ansi": "^7.2.0", "validate-npm-package-name": "^7.0.2", "which": "^6.0.1", "yargs": "^17.7.2" }, "optionalDependencies": { "@node-llama-cpp/linux-arm64": "3.18.1", "@node-llama-cpp/linux-armv7l": "3.18.1", "@node-llama-cpp/linux-x64": "3.18.1", "@node-llama-cpp/linux-x64-cuda": "3.18.1", "@node-llama-cpp/linux-x64-cuda-ext": "3.18.1", "@node-llama-cpp/linux-x64-vulkan": "3.18.1", "@node-llama-cpp/mac-arm64-metal": "3.18.1", "@node-llama-cpp/mac-x64": "3.18.1", "@node-llama-cpp/win-arm64": "3.18.1", "@node-llama-cpp/win-x64": "3.18.1", "@node-llama-cpp/win-x64-cuda": "3.18.1", "@node-llama-cpp/win-x64-cuda-ext": "3.18.1", "@node-llama-cpp/win-x64-vulkan": "3.18.1" }, "peerDependencies": { "typescript": ">=5.0.0" }, "optionalPeers": ["typescript"], "bin": { "node-llama-cpp": "dist/cli/cli.js", "nlc": "dist/cli/cli.js" } }, "sha512-w0zfuy/IKS2fhrbed5SylZDXJHTVz4HnkwZ4UrFPgSNwJab3QIPwIl4lyCKHHy9flLrtxsAuV5kXfH3HZ6bb8w=="],
+ "node-llama-cpp": ["node-llama-cpp@github:milady-ai/node-llama-cpp#b044d4a", { "dependencies": { "@huggingface/jinja": "^0.5.6", "async-retry": "^1.3.3", "bytes": "^3.1.2", "chalk": "^5.6.2", "chmodrp": "^1.0.2", "cmake-js": "^8.0.0", "cross-spawn": "^7.0.6", "env-var": "^7.5.0", "filenamify": "^6.0.0", "fs-extra": "^11.3.4", "ignore": "^7.0.4", "ipull": "^3.9.5", "is-unicode-supported": "^2.1.0", "lifecycle-utils": "^3.1.1", "log-symbols": "^7.0.1", "nanoid": "^5.1.6", "node-addon-api": "^8.6.0", "ora": "^9.3.0", "pretty-ms": "^9.3.0", "proper-lockfile": "^4.1.2", "semver": "^7.7.1", "simple-git": "^3.33.0", "slice-ansi": "^8.0.0", "stdout-update": "^4.0.1", "strip-ansi": "^7.2.0", "validate-npm-package-name": "^7.0.2", "which": "^6.0.1", "yargs": "^17.7.2" }, "optionalDependencies": { "@node-llama-cpp/linux-arm64": "3.18.1", "@node-llama-cpp/linux-armv7l": "3.18.1", "@node-llama-cpp/linux-x64": "3.18.1", "@node-llama-cpp/linux-x64-cuda": "3.18.1", "@node-llama-cpp/linux-x64-cuda-ext": "3.18.1", "@node-llama-cpp/linux-x64-vulkan": "3.18.1", "@node-llama-cpp/mac-arm64-metal": "3.18.1", "@node-llama-cpp/mac-x64": "3.18.1", "@node-llama-cpp/win-arm64": "3.18.1", "@node-llama-cpp/win-x64": "3.18.1", "@node-llama-cpp/win-x64-cuda": "3.18.1", "@node-llama-cpp/win-x64-cuda-ext": "3.18.1", "@node-llama-cpp/win-x64-vulkan": "3.18.1" }, "peerDependencies": { "typescript": ">=5.0.0" }, "optionalPeers": ["typescript"], "bin": { "node-llama-cpp": "dist/cli/cli.js", "nlc": "dist/cli/cli.js" } }, "elizaOS-node-llama-cpp-b044d4a", "sha512-QJFGkSXWw5NiGzPHM3AIczZgDdHjLqAgWkOtR09WwOlef1uJJwQ/wQc6wn0abzFiCXG95dcriUi2dndev0xymg=="],
"node-localstorage": ["node-localstorage@2.2.1", "", { "dependencies": { "write-file-atomic": "^1.1.4" } }, "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw=="],
@@ -1647,13 +1961,19 @@
"npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="],
+ "null-prototype-object": ["null-prototype-object@1.2.7", "", {}, "sha512-pSZWCUew0zed2gxCerA4zdXRGg8ezLiWwvE8RvncezTcROXL0uz3PjSZXl5NsI04Egz0Uu46o1wyX6qr3u/ZWA=="],
+
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
"object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
"object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
- "ollama-ai-provider": ["ollama-ai-provider@1.2.0", "", { "dependencies": { "@ai-sdk/provider": "^1.0.0", "@ai-sdk/provider-utils": "^2.0.0", "partial-json": "0.1.7" }, "peerDependencies": { "zod": "^3.0.0" }, "optionalPeers": ["zod"] }, "sha512-jTNFruwe3O/ruJeppI/quoOUxG7NA6blG3ZyQj3lei4+NnJo7bi3eIRWqlVpRlu/mbzbFXeJSBuYQWF6pzGKww=="],
+ "ollama-ai-provider": ["ollama-ai-provider-v2@3.5.1", "", { "dependencies": { "@ai-sdk/provider": "^3.0.10", "@ai-sdk/provider-utils": "^4.0.26" }, "peerDependencies": { "ai": "^5.0.0 || ^6.0.0", "zod": "^4.0.16" } }, "sha512-C6JqhEVAQvptakeV62XnwvI2eAYQaCDHSu1F1xYw2gy82SF08JrZfRVq6GoyZdTiZoZ2aYmjHKhyGiQV2vfyog=="],
+
+ "ollama-ai-provider-v2": ["ollama-ai-provider-v2@3.5.1", "", { "dependencies": { "@ai-sdk/provider": "^3.0.10", "@ai-sdk/provider-utils": "^4.0.26" }, "peerDependencies": { "ai": "^5.0.0 || ^6.0.0", "zod": "^4.0.16" } }, "sha512-C6JqhEVAQvptakeV62XnwvI2eAYQaCDHSu1F1xYw2gy82SF08JrZfRVq6GoyZdTiZoZ2aYmjHKhyGiQV2vfyog=="],
+
+ "omggif": ["omggif@1.0.10", "", {}, "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="],
"on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="],
@@ -1663,20 +1983,26 @@
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
- "onnxruntime-common": ["onnxruntime-common@1.21.0", "", {}, "sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ=="],
+ "onnxruntime-common": ["onnxruntime-common@1.24.3", "", {}, "sha512-GeuPZO6U/LBJXvwdaqHbuUmoXiEdeCjWi/EG7Y1HNnDwJYuk6WUbNXpF6luSUY8yASul3cmUlLGrCCL1ZgVXqA=="],
- "onnxruntime-node": ["onnxruntime-node@1.21.0", "", { "dependencies": { "global-agent": "^3.0.0", "onnxruntime-common": "1.21.0", "tar": "^7.0.1" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-NeaCX6WW2L8cRCSqy3bInlo5ojjQqu2fD3D+9W5qb5irwxhEyWKXeH2vZ8W9r6VxaMPUan+4/7NDwZMtouZxEw=="],
+ "onnxruntime-node": ["onnxruntime-node@1.24.3", "", { "dependencies": { "adm-zip": "^0.5.16", "global-agent": "^3.0.0", "onnxruntime-common": "1.24.3" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-JH7+czbc8ALA819vlTgcV+Q214/+VjGeBHDjX81+ZCD0PCVCIFGFNtT0V4sXG/1JXypKPgScQcB3ij/hk3YnTg=="],
- "onnxruntime-web": ["onnxruntime-web@1.22.0-dev.20250409-89f8206ba4", "", { "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", "onnxruntime-common": "1.22.0-dev.20250409-89f8206ba4", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "sha512-0uS76OPgH0hWCPrFKlL8kYVV7ckM7t/36HfbgoFw6Nd0CZVVbQC4PkrR8mBX8LtNUFZO25IQBqV2Hx2ho3FlbQ=="],
+ "onnxruntime-web": ["onnxruntime-web@1.26.0-dev.20260416-b7804b056c", "", { "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", "onnxruntime-common": "1.24.0-dev.20251116-b39e144322", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "sha512-MD6Ss4GSpQBo6zqoJzyT9LRbKYs7x/JVN23FT24EcEvlqF4VuzPOeH6X38orZPKHQDbprn7K+SBpu0/mj2CQiw=="],
"openai": ["openai@6.10.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-ITxOGo7rO3XRMiKA5l7tQ43iNNu+iXGFAcf2t+aWVzzqRaS0i7m1K2BhxNdaveB+5eENhO0VY1FkiZzhBk4v3A=="],
"option": ["option@0.2.4", "", {}, "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A=="],
+ "opusscript": ["opusscript@0.1.1", "", {}, "sha512-mL0fZZOUnXdZ78woRXp18lApwpp0lF5tozJOD1Wut0dgrA9WuQTgSels/CSmFleaAZrJi/nci5KOVtbuxeWoQA=="],
+
"ora": ["ora@9.3.0", "", { "dependencies": { "chalk": "^5.6.2", "cli-cursor": "^5.0.0", "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", "stdin-discarder": "^0.3.1", "string-width": "^8.1.0" } }, "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw=="],
"ox": ["ox@0.14.20", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-rby38C3nDn8eQkf29Zgw4hkCZJ64Qqi0zRPWL8ENUQ7JVuoITqrVtwWQgM/He19SCMUEc7hS/Sjw0jIOSLJhOw=="],
+ "p-event": ["p-event@6.0.1", "", { "dependencies": { "p-timeout": "^6.1.2" } }, "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w=="],
+
+ "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="],
+
"p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="],
"p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="],
@@ -1695,6 +2021,16 @@
"pako": ["pako@2.1.0", "", {}, "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="],
+ "parse-bmfont-ascii": ["parse-bmfont-ascii@1.0.6", "", {}, "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="],
+
+ "parse-bmfont-binary": ["parse-bmfont-binary@1.0.6", "", {}, "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="],
+
+ "parse-bmfont-xml": ["parse-bmfont-xml@1.1.6", "", { "dependencies": { "xml-parse-from-string": "^1.0.0", "xml2js": "^0.5.0" } }, "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA=="],
+
+ "parse-cache-control": ["parse-cache-control@1.0.1", "", {}, "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="],
+
+ "parse-headers": ["parse-headers@2.0.6", "", {}, "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A=="],
+
"parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="],
"parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="],
@@ -1723,6 +2059,8 @@
"pdfjs-dist": ["pdfjs-dist@5.5.207", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.95", "node-readable-to-web-readable-stream": "^0.4.2" } }, "sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw=="],
+ "peek-readable": ["peek-readable@4.1.0", "", {}, "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="],
+
"pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="],
"pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="],
@@ -1741,6 +2079,8 @@
"pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="],
+ "phin": ["phin@3.7.1", "", { "dependencies": { "centra": "^2.7.0" } }, "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ=="],
+
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
@@ -1751,6 +2091,8 @@
"pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="],
+ "pixelmatch": ["pixelmatch@4.0.2", "", { "dependencies": { "pngjs": "^3.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA=="],
+
"pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="],
"platform": ["platform@1.3.6", "", {}, "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="],
@@ -1775,6 +2117,10 @@
"pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="],
+ "prism-media": ["prism-media@1.3.5", "", { "peerDependencies": { "@discordjs/opus": ">=0.8.0 <1.0.0", "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", "node-opus": "^0.3.3", "opusscript": "^0.0.8" }, "optionalPeers": ["@discordjs/opus", "ffmpeg-static", "node-opus", "opusscript"] }, "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA=="],
+
+ "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="],
+
"process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="],
"process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="],
@@ -1799,8 +2145,6 @@
"pty-manager": ["pty-manager@1.11.0", "", { "dependencies": { "adapter-types": "^0.2.0", "node-pty": "^1.0.0" }, "bin": { "pty-worker": "dist/pty-worker.js" } }, "sha512-Ncyh+2lV0cB5cUYcij4fb10ILTamOKeFOGSvq7FaYubnC7pjI4G9nkPOXb6Ac5/YHvh8I/6Ko+JOdILwXbT5vQ=="],
- "pty-state-capture": ["pty-state-capture@0.2.0", "", {}, "sha512-FatJj03jyHZ6S05VBZFXnrTxXaESDnQEuN+8lxlSohymE1O2369kSsM+EkltVRzCKEuA9KmEAUAKmaxp9szFQg=="],
-
"pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="],
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
@@ -1813,12 +2157,18 @@
"qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="],
+ "qrcode-terminal": ["qrcode-terminal@0.12.0", "", { "bin": { "qrcode-terminal": "./bin/qrcode-terminal.js" } }, "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="],
+
"qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="],
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
"quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="],
+ "quickjs-emscripten": ["quickjs-emscripten@0.32.0", "", { "dependencies": { "@jitl/quickjs-wasmfile-debug-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-debug-sync": "0.32.0", "@jitl/quickjs-wasmfile-release-asyncify": "0.32.0", "@jitl/quickjs-wasmfile-release-sync": "0.32.0", "quickjs-emscripten-core": "0.32.0" } }, "sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA=="],
+
+ "quickjs-emscripten-core": ["quickjs-emscripten-core@0.32.0", "", { "dependencies": { "@jitl/quickjs-ffi-types": "0.32.0" } }, "sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg=="],
+
"range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],
"raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
@@ -1837,6 +2187,8 @@
"readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
+ "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="],
+
"readline-sync": ["readline-sync@1.4.10", "", {}, "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw=="],
"real-cancellable-promise": ["real-cancellable-promise@1.2.3", "", {}, "sha512-hBI5Gy/55VEeeMtImMgEirD7eq5UmqJf1J8dFZtbJZA/3rB0pYFZ7PayMGueb6v4UtUtpKpP+05L0VwyE1hI9Q=="],
@@ -1845,6 +2197,8 @@
"rechoir": ["rechoir@0.6.2", "", { "dependencies": { "resolve": "^1.1.6" } }, "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw=="],
+ "regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="],
+
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
@@ -1883,6 +2237,8 @@
"sandwich-stream": ["sandwich-stream@2.0.2", "", {}, "sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ=="],
+ "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="],
+
"saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="],
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
@@ -1893,6 +2249,10 @@
"semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="],
+ "semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="],
+
+ "semver-truncate": ["semver-truncate@3.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg=="],
+
"send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="],
"serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="],
@@ -1983,6 +2343,8 @@
"strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
+ "strip-eof": ["strip-eof@1.0.0", "", {}, "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q=="],
+
"strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
"strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
@@ -1993,6 +2355,8 @@
"strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="],
+ "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="],
+
"superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="],
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
@@ -2025,8 +2389,14 @@
"through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="],
+ "time-span": ["time-span@5.1.0", "", { "dependencies": { "convert-hrtime": "^5.0.0" } }, "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA=="],
+
+ "timm": ["timm@1.7.1", "", {}, "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="],
+
"tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="],
+ "tinyspawn": ["tinyspawn@1.5.7", "", {}, "sha512-EUrfYrlL9SvWuDjyzgF1NdILYHAOI/fosveOHbIcB9ZTaCu+IqPrA7df4M6Olf4vZUFrO9U0qPqOATLApk8WjA=="],
+
"tldts": ["tldts@7.0.30", "", { "dependencies": { "tldts-core": "^7.0.30" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw=="],
"tldts-core": ["tldts-core@7.0.30", "", {}, "sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q=="],
@@ -2045,6 +2415,8 @@
"ts-custom-error": ["ts-custom-error@3.3.1", "", {}, "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="],
+ "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="],
+
"tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="],
"tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="],
@@ -2095,6 +2467,8 @@
"utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="],
+ "utif2": ["utif2@4.1.0", "", { "dependencies": { "pako": "^1.0.11" } }, "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w=="],
+
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
"uuid": ["uuid@14.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="],
@@ -2111,17 +2485,21 @@
"web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
+ "web-worker": ["web-worker@1.5.0", "", {}, "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw=="],
+
"webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.4.1", "", {}, "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw=="],
"webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="],
"websocket": ["websocket@1.0.35", "", { "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" } }, "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q=="],
+ "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="],
+
"whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="],
"whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="],
- "which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
+ "which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="],
"which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="],
@@ -2139,8 +2517,14 @@
"ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="],
+ "xhr": ["xhr@2.6.0", "", { "dependencies": { "global": "~4.4.0", "is-function": "^1.0.1", "parse-headers": "^2.0.0", "xtend": "^4.0.0" } }, "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA=="],
+
"xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="],
+ "xml-parse-from-string": ["xml-parse-from-string@1.0.1", "", {}, "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="],
+
+ "xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="],
+
"xmlbuilder": ["xmlbuilder@10.1.1", "", {}, "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg=="],
"xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="],
@@ -2163,13 +2547,23 @@
"yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="],
+ "youtube-dl-exec": ["youtube-dl-exec@3.1.7", "", { "dependencies": { "binary-version-check": "~6.1.0", "dargs": "~7.0.0", "debug-logfmt": "~1.4.0", "is-unix": "~2.0.10", "tinyspawn": "~1.5.0" } }, "sha512-NlbHVcnoj1qmnHe2OFAh7zsZT4+pC2RdvWLiGgHWI9Jef+EIFzG3uUh32G745l3arxAnGsVEKyODEJClTwf5Kw=="],
+
"zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
"zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="],
+ "@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+
+ "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
+
+ "@ai-sdk/google/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+
"@ai-sdk/google/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="],
- "@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+ "@ai-sdk/openai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+
+ "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
"@ai-sdk/react/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="],
@@ -2247,11 +2641,21 @@
"@capacitor/core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "@elizaos/agent/@elizaos/plugin-ollama": ["@elizaos/plugin-ollama@2.0.0-alpha.70", "", { "dependencies": { "@ai-sdk/ui-utils": "^1.2.8", "@elizaos/core": "alpha", "ai": "^4.3.9", "js-tiktoken": "^1.0.18", "ollama-ai-provider": "^1.2.0" } }, "sha512-NlNaQTiEUs7KDKazqozmwbUGVHHs6vCocwXvU7RhyeRtgd49rYb5R0d/oLmMCKjTIld/jGmMjY9/qIHRqFk9wA=="],
+ "@discordjs/builders/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "@elizaos/agent/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+ "@discordjs/rest/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "@discordjs/rest/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="],
+
+ "@discordjs/voice/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "@discordjs/ws/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "@elizaos/agent/@elizaos/plugin-elizacloud": ["@elizaos/plugin-elizacloud@2.0.0-beta.1", "", { "dependencies": { "@ai-sdk/openai": "^3.0.9", "@elizaos/cloud-sdk": "2.0.0-beta.1", "@elizaos/core": "2.0.0-beta.1", "ai": "^6.0.30", "jose": "^6.2.2", "js-tiktoken": "^1.0.21", "undici": "8.2.0", "viem": "^2.48.8" }, "peerDependencies": { "zod": "^4.4.3" } }, "sha512-RD7CL+N/4+x1CmDRKLJuGNG/m4ABZGWJw3+v4fm2gZIzZTACCq87Igro/hi935QVY5uRhMwN3zR9hZlS+ddd3Q=="],
+
+ "@elizaos/agent/@elizaos/plugin-sql": ["@elizaos/plugin-sql@2.0.0-beta.1", "", { "dependencies": { "@electric-sql/pglite": "^0.4.0", "@neondatabase/serverless": "^1.1.0", "drizzle-orm": "0.45.2", "pg": "^8.16.3", "uuid": "^14.0.0", "ws": "^8.18.3" }, "peerDependencies": { "@elizaos/core": "2.0.0-beta.1" } }, "sha512-1IWyanD7IGljBSkbAidstQSaGMHkAteh+uLS4J+HnCeuphS7LQkVyCJ+ZQuoPb9uUL7v8zyNXfEMQPE3pfDJNw=="],
- "@elizaos/autonomous/@elizaos/plugin-agent-orchestrator": ["@elizaos/plugin-agent-orchestrator@0.3.15", "", { "dependencies": { "coding-agent-adapters": "0.12.0", "pty-console": "0.3.1" }, "peerDependencies": { "@elizaos/core": ">=2.0.0-alpha.0", "git-workspace-service": "0.4.4", "pty-manager": "1.10.0" } }, "sha512-22aoptlKrNhApQKa9+aZvZ/CTLOaYM1tIMCp+dt/ploI2J8JyRo9r80SGIEGq9iayBjlMXzh4MNHjryH+agXEQ=="],
+ "@elizaos/agent/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@elizaos/autonomous/@elizaos/plugin-agent-skills": ["@elizaos/plugin-agent-skills@2.0.0-alpha.70", "", { "dependencies": { "@elizaos/core": "alpha", "fflate": "^0.8.2" } }, "sha512-VIGpQY2YMeqeH7llCr0YTOrUlVZjOEogg/Ur6v2HAIUgIYt0X9C82vDxcW9ff8F87/epcGqK//6ODXAF248Dhw=="],
@@ -2269,6 +2673,8 @@
"@elizaos/autonomous/@elizaos/plugin-sql": ["@elizaos/plugin-sql@2.0.0-alpha.17", "", { "dependencies": { "@electric-sql/pglite": "^0.3.3", "@elizaos/core": "alpha", "@neondatabase/serverless": "^1.0.2", "dotenv": "^17.2.3", "drizzle-kit": "^0.31.8", "drizzle-orm": "^0.45.1", "pg": "^8.16.3", "uuid": "^13.0.0" } }, "sha512-O3I7ZX73DFMMCXWtjITi4QBYdo/01MI0neNBfqf6kbCBsE6j1r3ejZDoPBbRi/Ticsj3jlCc9nuwiOnKgWt+mQ=="],
+ "@elizaos/autonomous/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="],
+
"@elizaos/autonomous/coding-agent-adapters": ["coding-agent-adapters@0.12.0", "", { "peerDependencies": { "agent-adapter-monitor": "^0.3.0", "pty-manager": "^1.9.5" }, "optionalPeers": ["agent-adapter-monitor"] }, "sha512-PrhVgOThCkmQNidwE9Qvab4AqyZ1hDhwEVHD9UdEEtl7bW7RR/vaGBergj6aUJsCIQQdaKyC3Blfm3UWfhnf2Q=="],
"@elizaos/autonomous/drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="],
@@ -2279,25 +2685,39 @@
"@elizaos/core/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+ "@elizaos/plugin-agent-orchestrator/coding-agent-adapters": ["coding-agent-adapters@0.12.0", "", { "peerDependencies": { "agent-adapter-monitor": "^0.3.0", "pty-manager": "^1.9.5" }, "optionalPeers": ["agent-adapter-monitor"] }, "sha512-PrhVgOThCkmQNidwE9Qvab4AqyZ1hDhwEVHD9UdEEtl7bW7RR/vaGBergj6aUJsCIQQdaKyC3Blfm3UWfhnf2Q=="],
+
+ "@elizaos/plugin-agent-orchestrator/git-workspace-service": ["git-workspace-service@0.4.4", "", { "dependencies": { "@octokit/auth-app": "^6.0.0", "@octokit/rest": "^20.0.0" } }, "sha512-pDmjqcPYF/wO6hz2P7lm+T+eZz3v4pM9Mxi0lPlU06JiEeh1kTdfxpp6zEz7aMXvf5M6IMJEOVVOO2lfBnrkmg=="],
+
+ "@elizaos/plugin-agent-orchestrator/pty-manager": ["pty-manager@1.9.8", "", { "dependencies": { "node-pty": "^1.0.0" }, "bin": { "pty-worker": "dist/pty-worker.js" } }, "sha512-FoliQUAqdWPqOZIckzafISwS9Fom/cPcxTIeyXA86ypyCW2lRIqs1UVOTvCnOnSWCRbAtLj3JmcPSZ0pH/dpig=="],
+
"@elizaos/plugin-cli/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],
"@elizaos/plugin-coding-agent/coding-agent-adapters": ["coding-agent-adapters@0.8.0", "", { "peerDependencies": { "agent-adapter-monitor": "^0.3.0", "pty-manager": "^1.9.0" }, "optionalPeers": ["agent-adapter-monitor"] }, "sha512-u55gCgTzRCsfYAzI2XobqrQtIIgLDJJUT6ffABwlv48Ta/oBE5lZA2xAbTUMCEB4p7zy/vYBYkLpRSwSLbcx2w=="],
"@elizaos/plugin-coding-agent/pty-console": ["pty-console@0.3.0", "", { "dependencies": { "pty-manager": "^1.9.0" } }, "sha512-IEizJ4F8LjQJLimLT7aHRFzWTU19Bjv2/3h6Ols+Zn9iU23iQmF1lIGaDuwWmlZ0ADUOPUkGiWwOh+7MFM074g=="],
+ "@elizaos/plugin-coding-tools/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+
"@elizaos/plugin-cron/uuid": ["uuid@11.0.5", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA=="],
+ "@elizaos/plugin-discord/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+
"@elizaos/plugin-experience/uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
+ "@elizaos/plugin-imessage/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+
"@elizaos/plugin-knowledge/@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.5.4", "", { "dependencies": { "@openrouter/sdk": "^0.1.27" }, "peerDependencies": { "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" } }, "sha512-xrSQPUIH8n9zuyYZR0XK7Ba0h2KsjJcMkxnwaYfmv13pKs3sDkjPzVPPhlhzqBGddHb5cFEwJ9VFuFeDcxCDSw=="],
- "@elizaos/plugin-ollama/ai": ["ai@6.0.177", "", { "dependencies": { "@ai-sdk/gateway": "3.0.112", "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1xQtbeWwNcLyyM86ixZhkKvT+WRXc1lvarIKqPVtsyn8F9NDikwUMBqYu+aQKDgMht50SMXh4qboYuU8MeHZZA=="],
+ "@elizaos/plugin-knowledge/ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="],
+
+ "@elizaos/plugin-local-embedding/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@elizaos/plugin-personality/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
"@elizaos/plugin-rolodex/whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="],
- "@elizaos/plugin-telegram/typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
+ "@elizaos/plugin-signal/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@elizaos/plugin-todo/drizzle-orm": ["drizzle-orm@0.30.10", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=3", "@electric-sql/pglite": ">=0.1.1", "@libsql/client": "*", "@neondatabase/serverless": ">=0.1", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/react": ">=18", "@types/sql.js": "*", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=13.2.0", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "react": ">=18", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@types/better-sqlite3", "@types/pg", "@types/react", "@types/sql.js", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "knex", "kysely", "mysql2", "pg", "postgres", "react", "sql.js", "sqlite3"] }, "sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw=="],
@@ -2309,10 +2729,22 @@
"@elizaos/shared/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
+ "@emnapi/core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
"@emnapi/runtime/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "@emnapi/wasi-threads/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
"@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="],
+ "@fal-ai/client/eventsource-parser": ["eventsource-parser@1.1.2", "", {}, "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA=="],
+
+ "@jimp/core/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="],
+
+ "@jimp/core/file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="],
+
+ "@jimp/png/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="],
+
"@mariozechner/pi-ai/@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.73.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-URURVzhxXGJDGUGFunIOtBlSl7KWvZiAAKY/ttTkZAkXT9bTPqdk2eK0b8qqSxXpikh3QKPnPYpiyX98zf5ebw=="],
"@mariozechner/pi-ai/undici": ["undici@7.24.5", "", {}, "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q=="],
@@ -2321,7 +2753,7 @@
"@modelcontextprotocol/sdk/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
- "@noble/curves/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="],
+ "@nut-tree-fork/node-mac-permissions/node-addon-api": ["node-addon-api@5.0.0", "", {}, "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA=="],
"@octokit/auth-app/lru-cache": ["@wolfy1339/lru-cache@11.0.2-patch.1", "", {}, "sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA=="],
@@ -2427,30 +2859,48 @@
"@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "@tybys/wasm-util/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
"@whiskeysockets/baileys/@hapi/boom": ["@hapi/boom@9.1.4", "", { "dependencies": { "@hapi/hoek": "9.x.x" } }, "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw=="],
"@whiskeysockets/baileys/pino": ["pino@9.14.0", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w=="],
- "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
-
"ast-types/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"async-mutex/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+ "binary-version/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="],
+
"body-parser/type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="],
"chromium-bidi/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
+ "clipboardy/execa": ["execa@1.0.0", "", { "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" } }, "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA=="],
+
"cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
+ "cmake-js/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
+
"cmake-js/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
"coding-agent-adapters/pino": ["pino@9.14.0", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w=="],
"cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
+ "debug-logfmt/pretty-ms": ["pretty-ms@7.0.1", "", { "dependencies": { "parse-ms": "^2.1.0" } }, "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q=="],
+
+ "discord.js/@discordjs/collection": ["@discordjs/collection@1.5.3", "", {}, "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="],
+
+ "discord.js/@sapphire/snowflake": ["@sapphire/snowflake@3.5.3", "", {}, "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ=="],
+
+ "discord.js/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
+
+ "discord.js/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="],
+
"dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
+ "drizzle-kit/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="],
+
"ethers/@noble/curves": ["@noble/curves@1.2.0", "", { "dependencies": { "@noble/hashes": "1.3.2" } }, "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw=="],
"ethers/@noble/hashes": ["@noble/hashes@1.3.2", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="],
@@ -2463,16 +2913,24 @@
"execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
- "express/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
-
"express/type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="],
+ "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
+
+ "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
+
"gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
"git-workspace-service/pino": ["pino@9.14.0", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w=="],
"htmlparser2/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
+ "http-response-object/@types/node": ["@types/node@10.17.60", "", {}, "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="],
+
+ "https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="],
+
+ "image-q/@types/node": ["@types/node@16.9.1", "", {}, "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="],
+
"ipull/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="],
"ipull/lifecycle-utils": ["lifecycle-utils@2.1.0", "", {}, "sha512-AnrXnE2/OF9PHCyFg0RSqsnQTzV991XaZA/buhFDoc58xU7rhSCDgCz/09Lqpsn4MpoPHt7TRAXV1kWZypFVsA=="],
@@ -2483,6 +2941,8 @@
"jayson/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="],
+ "jayson/@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="],
+
"jayson/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
"jayson/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="],
@@ -2499,8 +2959,12 @@
"libsignal/protobufjs": ["protobufjs@6.8.8", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/long": "^4.0.0", "@types/node": "^10.1.0", "long": "^4.0.0" }, "bin": { "pbjs": "bin/pbjs", "pbts": "bin/pbts" } }, "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw=="],
+ "load-bmfont/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="],
+
"loose-envify/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
+ "make-asynchronous/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
+
"markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
"music-metadata/file-type": ["file-type@21.3.3", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-pNwbwz8c3aZ+GvbJnIsCnDjKvgCZLHxkFWLEFxU3RMa+Ey++ZSEfisvsWQMcdys6PpxQjWUOIDi1fifXsW3YRg=="],
@@ -2509,15 +2973,13 @@
"node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
+ "node-llama-cpp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
+
"node-llama-cpp/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
"node-pty/node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
- "ollama-ai-provider/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="],
-
- "ollama-ai-provider/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="],
-
- "onnxruntime-web/onnxruntime-common": ["onnxruntime-common@1.22.0-dev.20250409-89f8206ba4", "", {}, "sha512-vDJMkfCfb0b1A836rgHj+ORuZf4B4+cc2bASQtpeoJLueuFc5DuYwjIZUBrSvx/fO5IrLjLz+oTrB3pcGlhovQ=="],
+ "onnxruntime-web/onnxruntime-common": ["onnxruntime-common@1.24.0-dev.20251116-b39e144322", "", {}, "sha512-BOoomdHYmNRL5r4iQ4bMvsl2t0/hzVQ3OM3PHD0gxeXu1PmggqBv3puZicEUVOA3AtHHYmqZtjMj9FOfGrATTw=="],
"ora/cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="],
@@ -2533,32 +2995,38 @@
"ox/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="],
+ "p-event/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="],
+
"p-queue/p-timeout": ["p-timeout@7.0.1", "", {}, "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg=="],
+ "pac-proxy-agent/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
+
"parse5/entities": ["entities@8.0.0", "", {}, "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA=="],
+ "pixelmatch/pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="],
+
"proper-lockfile/retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
+ "proxy-agent/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
+
"proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],
"pty-console/pty-manager": ["pty-manager@1.9.8", "", { "dependencies": { "node-pty": "^1.0.0" }, "bin": { "pty-worker": "dist/pty-worker.js" } }, "sha512-FoliQUAqdWPqOZIckzafISwS9Fom/cPcxTIeyXA86ypyCW2lRIqs1UVOTvCnOnSWCRbAtLj3JmcPSZ0pH/dpig=="],
"qified/hookified": ["hookified@2.1.0", "", {}, "sha512-ootKng4eaxNxa7rx6FJv2YKef3DuhqbEj3l70oGXwddPQEEnISm50TEZQclqiLTAtilT2nu7TErtCO523hHkyg=="],
+ "readable-web-to-node-stream/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="],
+
"restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
"restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
"roarr/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="],
- "rpc-websockets/@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
-
"rpc-websockets/utf-8-validate": ["utf-8-validate@6.0.6", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA=="],
"rxjs/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
-
"start-server-and-test/bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="],
"stdout-update/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
@@ -2577,6 +3045,10 @@
"type-is/media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="],
+ "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
+
+ "utif2/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="],
+
"viem/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="],
"viem/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
@@ -2593,8 +3065,14 @@
"wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
+ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="],
+
+ "@ai-sdk/anthropic/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+
"@ai-sdk/google/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+ "@ai-sdk/openai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+
"@ai-sdk/react/@ai-sdk/provider-utils/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="],
"@ai-sdk/react/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
@@ -2605,18 +3083,26 @@
"@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
- "@elizaos/agent/@elizaos/plugin-ollama/ai": ["ai@4.3.19", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/react": "1.2.12", "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q=="],
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="],
"@elizaos/autonomous/@elizaos/plugin-anthropic/undici": ["undici@7.24.5", "", {}, "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q=="],
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="],
+
"@elizaos/autonomous/@elizaos/plugin-elizacloud/undici": ["undici@7.24.5", "", {}, "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q=="],
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/@huggingface/transformers": ["@huggingface/transformers@3.8.1", "", { "dependencies": { "@huggingface/jinja": "^0.5.3", "onnxruntime-node": "1.21.0", "onnxruntime-web": "1.22.0-dev.20250409-89f8206ba4", "sharp": "^0.34.1" } }, "sha512-tsTk4zVjImqdqjS8/AOZg2yNLd1z9S5v+7oUPpXaasDRwEDhB+xnglK1k5cad26lL5/ZIaeREgWWy0bs9y9pPA=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp": ["node-llama-cpp@3.18.1", "", { "dependencies": { "@huggingface/jinja": "^0.5.6", "async-retry": "^1.3.3", "bytes": "^3.1.2", "chalk": "^5.6.2", "chmodrp": "^1.0.2", "cmake-js": "^8.0.0", "cross-spawn": "^7.0.6", "env-var": "^7.5.0", "filenamify": "^6.0.0", "fs-extra": "^11.3.4", "ignore": "^7.0.4", "ipull": "^3.9.5", "is-unicode-supported": "^2.1.0", "lifecycle-utils": "^3.1.1", "log-symbols": "^7.0.1", "nanoid": "^5.1.6", "node-addon-api": "^8.6.0", "ora": "^9.3.0", "pretty-ms": "^9.3.0", "proper-lockfile": "^4.1.2", "semver": "^7.7.1", "simple-git": "^3.33.0", "slice-ansi": "^8.0.0", "stdout-update": "^4.0.1", "strip-ansi": "^7.2.0", "validate-npm-package-name": "^7.0.2", "which": "^6.0.1", "yargs": "^17.7.2" }, "optionalDependencies": { "@node-llama-cpp/linux-arm64": "3.18.1", "@node-llama-cpp/linux-armv7l": "3.18.1", "@node-llama-cpp/linux-x64": "3.18.1", "@node-llama-cpp/linux-x64-cuda": "3.18.1", "@node-llama-cpp/linux-x64-cuda-ext": "3.18.1", "@node-llama-cpp/linux-x64-vulkan": "3.18.1", "@node-llama-cpp/mac-arm64-metal": "3.18.1", "@node-llama-cpp/mac-x64": "3.18.1", "@node-llama-cpp/win-arm64": "3.18.1", "@node-llama-cpp/win-x64": "3.18.1", "@node-llama-cpp/win-x64-cuda": "3.18.1", "@node-llama-cpp/win-x64-cuda-ext": "3.18.1", "@node-llama-cpp/win-x64-vulkan": "3.18.1" }, "peerDependencies": { "typescript": ">=5.0.0" }, "optionalPeers": ["typescript"], "bin": { "node-llama-cpp": "dist/cli/cli.js", "nlc": "dist/cli/cli.js" } }, "sha512-w0zfuy/IKS2fhrbed5SylZDXJHTVz4HnkwZ4UrFPgSNwJab3QIPwIl4lyCKHHy9flLrtxsAuV5kXfH3HZ6bb8w=="],
+
"@elizaos/autonomous/@elizaos/plugin-local-embedding/undici": ["undici@7.24.5", "", {}, "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q=="],
"@elizaos/autonomous/@elizaos/plugin-local-embedding/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="],
"@elizaos/autonomous/@elizaos/plugin-ollama/ai": ["ai@4.3.19", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/react": "1.2.12", "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q=="],
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai": ["ai@6.0.116", "", { "dependencies": { "@ai-sdk/gateway": "3.0.66", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA=="],
+
"@elizaos/autonomous/@elizaos/plugin-openai/undici": ["undici@7.24.5", "", {}, "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q=="],
"@elizaos/autonomous/@elizaos/plugin-sql/@electric-sql/pglite": ["@electric-sql/pglite@0.3.16", "", {}, "sha512-mZkZfOd9OqTMHsK+1cje8OSzfAQcpD7JmILXTl5ahdempjUDdmg4euf1biDex5/LfQIDJ3gvCu6qDgdnDxfJmA=="],
@@ -2625,13 +3111,15 @@
"@elizaos/autonomous/@elizaos/plugin-sql/uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
+ "@elizaos/autonomous/@noble/curves/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="],
+
"@elizaos/plugin-coding-agent/pty-console/pty-manager": ["pty-manager@1.9.8", "", { "dependencies": { "node-pty": "^1.0.0" }, "bin": { "pty-worker": "dist/pty-worker.js" } }, "sha512-FoliQUAqdWPqOZIckzafISwS9Fom/cPcxTIeyXA86ypyCW2lRIqs1UVOTvCnOnSWCRbAtLj3JmcPSZ0pH/dpig=="],
- "@elizaos/plugin-ollama/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.112", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@ai-sdk/provider-utils": "4.0.27", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-jiBao9pR4owWyjo0BnuNc7WSQBGOD0thysE4AFgZXaG+zMFbISQXUkJr7ePw/phBvePy7jE5FSA2Lf7lwqUiiQ=="],
+ "@elizaos/plugin-knowledge/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="],
- "@elizaos/plugin-ollama/ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.10", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw=="],
+ "@elizaos/plugin-knowledge/ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
- "@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.27", "", { "dependencies": { "@ai-sdk/provider": "3.0.10", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw=="],
+ "@elizaos/plugin-knowledge/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
"@elizaos/plugin-rolodex/whatwg-url/tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="],
@@ -2681,6 +3169,10 @@
"@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="],
+ "@jimp/core/file-type/strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="],
+
+ "@jimp/core/file-type/token-types": ["token-types@4.2.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ=="],
+
"@puppeteer/browsers/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
"@puppeteer/browsers/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
@@ -2693,12 +3185,32 @@
"@whiskeysockets/baileys/pino/thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="],
- "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
+ "binary-version/execa/get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="],
+
+ "binary-version/execa/human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="],
+
+ "binary-version/execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="],
+
+ "binary-version/execa/npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="],
+
+ "binary-version/execa/onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="],
+
+ "binary-version/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
+
+ "binary-version/execa/strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="],
+
+ "clipboardy/execa/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="],
+
+ "clipboardy/execa/get-stream": ["get-stream@4.1.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w=="],
- "body-parser/type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
+ "clipboardy/execa/is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="],
+
+ "clipboardy/execa/npm-run-path": ["npm-run-path@2.0.2", "", { "dependencies": { "path-key": "^2.0.0" } }, "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw=="],
"cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+ "cmake-js/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
+
"cmake-js/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
"cmake-js/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
@@ -2709,11 +3221,63 @@
"coding-agent-adapters/pino/thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="],
- "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
+ "debug-logfmt/pretty-ms/parse-ms": ["parse-ms@2.1.0", "", {}, "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA=="],
+
+ "drizzle-kit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
+
+ "drizzle-kit/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="],
+
+ "drizzle-kit/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="],
+
+ "drizzle-kit/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="],
+
+ "drizzle-kit/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="],
+
+ "drizzle-kit/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="],
+
+ "drizzle-kit/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="],
+
+ "drizzle-kit/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="],
+
+ "drizzle-kit/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="],
+
+ "drizzle-kit/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="],
+
+ "drizzle-kit/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="],
+
+ "drizzle-kit/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="],
+
+ "drizzle-kit/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="],
+
+ "drizzle-kit/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="],
+
+ "drizzle-kit/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="],
+
+ "drizzle-kit/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="],
+
+ "drizzle-kit/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="],
+
+ "drizzle-kit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="],
"ethers/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="],
- "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
+ "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
"gaxios/node-fetch/data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
@@ -2723,6 +3287,8 @@
"ipull/pretty-ms/parse-ms": ["parse-ms@3.0.0", "", {}, "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw=="],
+ "jayson/@types/ws/@types/node": ["@types/node@24.12.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ=="],
+
"jszip/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
"libsignal/protobufjs/@types/node": ["@types/node@10.17.60", "", {}, "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="],
@@ -2733,15 +3299,15 @@
"node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="],
+ "node-llama-cpp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
+
"node-llama-cpp/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
"node-llama-cpp/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
"node-llama-cpp/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
- "ollama-ai-provider/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
-
- "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
+ "readable-web-to-node-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
"stdout-update/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
@@ -2801,6 +3367,8 @@
"tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="],
+ "type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
+
"websocket/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
"whisper-node/shelljs/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
@@ -2811,27 +3379,57 @@
"@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="],
- "@elizaos/agent/@elizaos/plugin-ollama/ai/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="],
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="],
- "@elizaos/agent/@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="],
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
- "@elizaos/agent/@elizaos/plugin-ollama/ai/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/@huggingface/transformers/onnxruntime-node": ["onnxruntime-node@1.21.0", "", { "dependencies": { "global-agent": "^3.0.0", "onnxruntime-common": "1.21.0", "tar": "^7.0.1" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-NeaCX6WW2L8cRCSqy3bInlo5ojjQqu2fD3D+9W5qb5irwxhEyWKXeH2vZ8W9r6VxaMPUan+4/7NDwZMtouZxEw=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/@huggingface/transformers/onnxruntime-web": ["onnxruntime-web@1.22.0-dev.20250409-89f8206ba4", "", { "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", "onnxruntime-common": "1.22.0-dev.20250409-89f8206ba4", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "sha512-0uS76OPgH0hWCPrFKlL8kYVV7ckM7t/36HfbgoFw6Nd0CZVVbQC4PkrR8mBX8LtNUFZO25IQBqV2Hx2ho3FlbQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
"@elizaos/autonomous/@elizaos/plugin-ollama/ai/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="],
"@elizaos/autonomous/@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="],
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.66", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.19", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai/@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.19", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg=="],
+
"@elizaos/autonomous/@elizaos/plugin-sql/@neondatabase/serverless/@types/node": ["@types/node@22.19.15", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg=="],
- "@elizaos/plugin-ollama/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="],
+ "@elizaos/plugin-knowledge/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="],
- "@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="],
+ "@elizaos/plugin-knowledge/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
"@puppeteer/browsers/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"@puppeteer/browsers/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
- "body-parser/type-is/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
+ "binary-version/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
+
+ "binary-version/execa/onetime/mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="],
+
+ "clipboardy/execa/cross-spawn/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="],
+
+ "clipboardy/execa/cross-spawn/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="],
+
+ "clipboardy/execa/cross-spawn/shebang-command": ["shebang-command@1.2.0", "", { "dependencies": { "shebang-regex": "^1.0.0" } }, "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg=="],
+
+ "clipboardy/execa/npm-run-path/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="],
"cmake-js/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
@@ -2843,16 +3441,40 @@
"whisper-node/shelljs/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
- "@elizaos/agent/@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-anthropic/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-elizacloud/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/@huggingface/transformers/onnxruntime-node/onnxruntime-common": ["onnxruntime-common@1.21.0", "", {}, "sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/@huggingface/transformers/onnxruntime-web/onnxruntime-common": ["onnxruntime-common@1.22.0-dev.20250409-89f8206ba4", "", {}, "sha512-vDJMkfCfb0b1A836rgHj+ORuZf4B4+cc2bASQtpeoJLueuFc5DuYwjIZUBrSvx/fO5IrLjLz+oTrB3pcGlhovQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
"@elizaos/autonomous/@elizaos/plugin-ollama/ai/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai/@ai-sdk/gateway/@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-openai/ai/@ai-sdk/provider-utils/eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
+
"@elizaos/autonomous/@elizaos/plugin-sql/@neondatabase/serverless/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
"@puppeteer/browsers/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"@puppeteer/browsers/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
+ "clipboardy/execa/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="],
+
"cmake-js/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"cmake-js/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
@@ -2863,6 +3485,14 @@
"whisper-node/shelljs/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="],
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
+
"whisper-node/shelljs/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+
+ "@elizaos/autonomous/@elizaos/plugin-local-embedding/node-llama-cpp/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
}
}
diff --git a/package.json b/package.json
index 22f3f2a8..a3362488 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,7 @@
"name": "doolittle",
"version": "0.1.0",
"private": true,
+ "license": "MIT",
"type": "module",
"bin": {
"doolittle": "./packages/agent/src/index.ts"
@@ -54,32 +55,32 @@
"@doolittle/acp": "workspace:*",
"@doolittle/contracts": "workspace:*",
"@doolittle/logger": "workspace:*",
- "@elizaos/agent": "2.0.0-alpha.537",
+ "@elizaos/agent": "2.0.0-beta.2",
"@elizaos/autonomous": "2.0.0-alpha.85",
- "@elizaos/core": "2.0.0-alpha.537",
- "@elizaos/plugin-anthropic": "2.0.0-alpha.537",
+ "@elizaos/core": "2.0.0-beta.1",
+ "@elizaos/plugin-anthropic": "2.0.0-beta.1",
"@elizaos/plugin-claude-code": "workspace:*",
"@elizaos/plugin-codex": "workspace:*",
"@elizaos/plugin-devin": "workspace:*",
"@elizaos/plugin-elizacloud": "workspace:*",
- "@elizaos/plugin-ollama": "2.0.0-alpha.537",
- "@elizaos/plugin-openai": "2.0.0-alpha.537",
- "@elizaos/plugin-pdf": "2.0.0-alpha.537",
+ "@elizaos/plugin-ollama": "2.0.0-beta.1",
+ "@elizaos/plugin-openai": "2.0.0-beta.1",
+ "@elizaos/plugin-pdf": "2.0.0-beta.1",
"@elizaos/plugin-sql": "workspace:*",
- "@elizaos/plugin-telegram": "2.0.0-alpha.537",
- "@elizaos/skills": "2.0.0-alpha.539",
+ "@elizaos/plugin-telegram": "2.0.0-beta.1",
+ "@elizaos/skills": "2.0.0-beta.1",
"@fal-ai/client": "^1.9.4",
- "cron-parser": "^5.2.0",
"dotenv": "^17.2.3",
- "elizaos": "2.0.0-alpha.535",
+ "elizaos": "2.0.0-beta.5",
"zod": "^4.3.6"
},
"overrides": {
- "@elizaos/agent": "2.0.0-alpha.537",
- "@elizaos/core": "2.0.0-alpha.537",
+ "@elizaos/agent": "2.0.0-beta.2",
+ "@elizaos/core": "2.0.0-beta.1",
"@elizaos/autonomous": "2.0.0-alpha.85",
- "@elizaos/skills": "2.0.0-alpha.539",
- "elizaos": "2.0.0-alpha.535"
+ "@elizaos/skills": "2.0.0-beta.1",
+ "elizaos": "2.0.0-beta.5",
+ "ollama-ai-provider": "npm:ollama-ai-provider-v2@^3.5.1"
},
"devDependencies": {
"@biomejs/biome": "^2.3.11",
@@ -92,5 +93,8 @@
},
"engines": {
"bun": ">=1.3.0"
+ },
+ "patchedDependencies": {
+ "@elizaos/plugin-sql@2.0.0-beta.1": "patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch"
}
}
diff --git a/packages/agent/package.json b/packages/agent/package.json
index f565f6af..0359ffe6 100644
--- a/packages/agent/package.json
+++ b/packages/agent/package.json
@@ -8,7 +8,7 @@
"@doolittle/acp": "workspace:*",
"@doolittle/contracts": "workspace:*",
"@doolittle/logger": "workspace:*",
- "@elizaos/agent": "2.0.0-alpha.537"
+ "@elizaos/agent": "2.0.0-beta.2"
},
"scripts": {
"dev": "bun --watch src/index.ts",
diff --git a/packages/agent/src/actions/cron-action.ts b/packages/agent/src/actions/cron-action.ts
index 74008fe1..0bec1227 100644
--- a/packages/agent/src/actions/cron-action.ts
+++ b/packages/agent/src/actions/cron-action.ts
@@ -36,52 +36,59 @@ export function createCronAction(services: AppServices): Action {
const trimmed = text?.trim() ?? "";
let response = "";
- if (trimmed === "/cron" || trimmed === "/cron list") {
- const jobs = services.cron.list();
- response = jobs.length
- ? jobs
- .map(
- (job) =>
- `- ${job.id} ${job.name} [${job.status}] schedule="${job.schedule}" next=${job.nextRunAt ?? "n/a"}`,
- )
- .join("\n")
- : "No cron jobs configured.";
- } else if (trimmed.startsWith("/cron create ")) {
- const payload = trimmed.replace("/cron create ", "");
- const [schedule, prompt] = payload
- .split("::")
- .map((part) => part.trim());
- if (!schedule || !prompt) {
- response = "Usage: /cron create :: ";
+ try {
+ if (trimmed === "/cron" || trimmed === "/cron list") {
+ const jobs = services.cron.list();
+ response = jobs.length
+ ? jobs
+ .map(
+ (job) =>
+ `- ${job.id} ${job.name} [${job.status}] schedule="${job.schedule}" next=${job.nextRunAt ?? "n/a"}`,
+ )
+ .join("\n")
+ : "No cron jobs configured.";
+ } else if (trimmed.startsWith("/cron create ")) {
+ const payload = trimmed.replace("/cron create ", "");
+ const [schedule, prompt] = payload
+ .split("::")
+ .map((part) => part.trim());
+ if (!schedule || !prompt) {
+ response = "Usage: /cron create :: ";
+ } else {
+ const created = services.cron.create({
+ name: `job-${Date.now()}`,
+ schedule,
+ prompt,
+ });
+ response = `Created cron job ${created.id} with next run ${created.nextRunAt ?? "n/a"}.`;
+ }
+ } else if (trimmed.startsWith("/cron pause ")) {
+ const job = services.cron.pause(
+ trimmed.replace("/cron pause ", "").trim(),
+ );
+ response = `Paused ${job.id}.`;
+ } else if (trimmed.startsWith("/cron resume ")) {
+ const job = services.cron.resume(
+ trimmed.replace("/cron resume ", "").trim(),
+ );
+ response = `Resumed ${job.id}; next run ${job.nextRunAt ?? "n/a"}.`;
+ } else if (trimmed.startsWith("/cron run ")) {
+ const job = services.cron.runNow(
+ trimmed.replace("/cron run ", "").trim(),
+ );
+ response = `Marked ${job.id} to run immediately.`;
+ } else if (trimmed.startsWith("/cron remove ")) {
+ const id = trimmed.replace("/cron remove ", "").trim();
+ services.cron.remove(id);
+ response = `Removed ${id}.`;
} else {
- const created = services.cron.create({
- name: `job-${Date.now()}`,
- schedule,
- prompt,
- });
- response = `Created cron job ${created.id} with next run ${created.nextRunAt ?? "n/a"}.`;
+ response =
+ "Usage: /cron list | create | pause | resume | run | remove";
}
- } else if (trimmed.startsWith("/cron pause ")) {
- const job = services.cron.pause(
- trimmed.replace("/cron pause ", "").trim(),
- );
- response = `Paused ${job.id}.`;
- } else if (trimmed.startsWith("/cron resume ")) {
- const job = services.cron.resume(
- trimmed.replace("/cron resume ", "").trim(),
- );
- response = `Resumed ${job.id}; next run ${job.nextRunAt ?? "n/a"}.`;
- } else if (trimmed.startsWith("/cron run ")) {
- const job = services.cron.runNow(
- trimmed.replace("/cron run ", "").trim(),
- );
- response = `Marked ${job.id} to run immediately.`;
- } else if (trimmed.startsWith("/cron remove ")) {
- const id = trimmed.replace("/cron remove ", "").trim();
- services.cron.remove(id);
- response = `Removed ${id}.`;
- } else {
- response = "Usage: /cron list | create | pause | resume | run | remove";
+ } catch (error) {
+ const failure = error instanceof Error ? error.message : String(error);
+ await callback?.({ text: failure, source: "cron-action" });
+ return { success: false, text: failure };
}
await callback?.({ text: response, source: "cron-action" });
diff --git a/packages/agent/src/actions/research-action.test.ts b/packages/agent/src/actions/research-action.test.ts
new file mode 100644
index 00000000..5062bbc8
--- /dev/null
+++ b/packages/agent/src/actions/research-action.test.ts
@@ -0,0 +1,125 @@
+import { describe, expect, it } from "bun:test";
+import type { IAgentRuntime, Memory, ResearchResult } from "@elizaos/core";
+import { createResearchAction } from "./research-action";
+
+function message(text: string): Memory {
+ return { content: { text } } as Memory;
+}
+
+function makeRuntime(opts: {
+ hasModel: boolean;
+ research?: () => Promise;
+}): IAgentRuntime {
+ return {
+ getModel: () => (opts.hasModel ? () => Promise.resolve({}) : undefined),
+ useModel: (_modelType: unknown, _params: unknown) =>
+ (
+ opts.research ??
+ (async () => {
+ throw new Error("no research model");
+ })
+ )(),
+ } as unknown as IAgentRuntime;
+}
+
+const noModelRuntime = makeRuntime({ hasModel: false });
+
+describe("research action (ModelType.RESEARCH adoption)", () => {
+ it("validates only a /research command with a question", async () => {
+ const action = createResearchAction();
+ expect(
+ await action.validate(noModelRuntime, message("/research RAG in 2026")),
+ ).toBe(true);
+ expect(await action.validate(noModelRuntime, message("/research"))).toBe(
+ false,
+ );
+ expect(
+ await action.validate(noModelRuntime, message("tell me about RAG")),
+ ).toBe(false);
+ });
+
+ it("responds gracefully when no RESEARCH model is registered", async () => {
+ const action = createResearchAction();
+ let delivered = "";
+ const result = await action.handler(
+ noModelRuntime,
+ message("/research what is X"),
+ undefined,
+ undefined,
+ async (content) => {
+ delivered = content.text ?? "";
+ return [];
+ },
+ );
+ expect(result).toMatchObject({ success: false });
+ expect(delivered).toContain("OPENAI_API_KEY");
+ });
+
+ it("runs the research model and renders a cited report", async () => {
+ const action = createResearchAction();
+ const runtime = makeRuntime({
+ hasModel: true,
+ research: async () =>
+ ({
+ id: "resp_1",
+ text: "RAG combines retrieval with generation.",
+ annotations: [
+ {
+ url: "https://a.example/x",
+ title: "Paper A",
+ startIndex: 0,
+ endIndex: 3,
+ },
+ {
+ url: "https://a.example/x",
+ title: "Paper A dup",
+ startIndex: 4,
+ endIndex: 7,
+ },
+ {
+ url: "https://b.example/y",
+ title: "Paper B",
+ startIndex: 8,
+ endIndex: 11,
+ },
+ ],
+ }) as unknown as ResearchResult,
+ });
+ let delivered = "";
+ const result = await action.handler(
+ runtime,
+ message("/research how does RAG work"),
+ undefined,
+ undefined,
+ async (content) => {
+ delivered = content.text ?? "";
+ return [];
+ },
+ );
+ expect(result?.success).toBe(true);
+ expect(delivered).toContain("RAG combines retrieval with generation.");
+ expect(delivered).toContain("Sources:");
+ expect(delivered).toContain("https://a.example/x");
+ expect(delivered).toContain("https://b.example/y");
+ // de-duped by url -> exactly two source lines
+ expect(delivered.match(/^- /gmu)?.length).toBe(2);
+ });
+
+ it("reports a clear failure when the model throws", async () => {
+ const action = createResearchAction();
+ const runtime = makeRuntime({
+ hasModel: true,
+ research: async () => {
+ throw new Error("rate limited");
+ },
+ });
+ const result = await action.handler(
+ runtime,
+ message("/research boom"),
+ undefined,
+ undefined,
+ );
+ expect(result?.success).toBe(false);
+ expect(result?.text).toContain("rate limited");
+ });
+});
diff --git a/packages/agent/src/actions/research-action.ts b/packages/agent/src/actions/research-action.ts
new file mode 100644
index 00000000..b759737c
--- /dev/null
+++ b/packages/agent/src/actions/research-action.ts
@@ -0,0 +1,118 @@
+import {
+ type Action,
+ type ActionResult,
+ type HandlerCallback,
+ type HandlerOptions,
+ type IAgentRuntime,
+ type Memory,
+ ModelType,
+ type ResearchAnnotation,
+ type State,
+} from "@elizaos/core";
+
+const RESEARCH_PREFIX = "/research";
+
+function messageText(message: Memory): string {
+ return typeof message.content === "string"
+ ? message.content
+ : (message.content?.text ?? "");
+}
+
+function parseResearchQuestion(text: string): string | undefined {
+ const trimmed = text.trim();
+ if (!trimmed.startsWith(RESEARCH_PREFIX)) {
+ return undefined;
+ }
+ const question = trimmed.slice(RESEARCH_PREFIX.length).trim();
+ return question.length > 0 ? question : undefined;
+}
+
+function renderSources(annotations: ResearchAnnotation[]): string {
+ const seen = new Set();
+ const lines: string[] = [];
+ for (const annotation of annotations) {
+ if (!annotation.url || seen.has(annotation.url)) {
+ continue;
+ }
+ seen.add(annotation.url);
+ lines.push(`- ${annotation.title || annotation.url} (${annotation.url})`);
+ }
+ return lines.length > 0 ? `\n\nSources:\n${lines.join("\n")}` : "";
+}
+
+/**
+ * Adopts the ElizaOS `ModelType.RESEARCH` deep-research model (o3-deep-research)
+ * as a first-class action. Triggered by `/research `, it runs the
+ * model with web search and returns the cited report.
+ *
+ * Availability-gated: if no RESEARCH handler is registered (i.e. the OpenAI
+ * deep-research provider is not configured via `OPENAI_API_KEY`), the action
+ * responds with a clear message instead of failing β so boot and the test
+ * suite stay green without a live key, and the capability lights up the moment
+ * a key is present.
+ */
+export function createResearchAction(): Action {
+ return {
+ name: "DOOLITTLE_RESEARCH",
+ similes: ["DEEP_RESEARCH", "RESEARCH_REPORT", "WEB_RESEARCH"],
+ description:
+ "Runs the ElizaOS deep-research model (ModelType.RESEARCH, e.g. o3-deep-research) over a question with web search and returns a cited report. Triggered by `/research `. Requires a registered RESEARCH model (OPENAI_API_KEY); deep research can take several minutes.",
+ validate: async (_runtime: IAgentRuntime, message: Memory) => {
+ return parseResearchQuestion(messageText(message)) !== undefined;
+ },
+ handler: async (
+ runtime: IAgentRuntime,
+ message: Memory,
+ _state: State | undefined,
+ _options: HandlerOptions | undefined,
+ callback?: HandlerCallback,
+ ): Promise => {
+ const question = parseResearchQuestion(messageText(message));
+ if (!question) {
+ const usage = "Usage: /research ";
+ await callback?.({ text: usage, source: "research-action" });
+ return { success: false, text: usage };
+ }
+
+ if (!runtime.getModel(ModelType.RESEARCH)) {
+ const unavailable =
+ "Deep research is unavailable: no RESEARCH model is registered. Set OPENAI_API_KEY and enable the OpenAI provider to use `/research`.";
+ await callback?.({ text: unavailable, source: "research-action" });
+ return { success: false, text: unavailable };
+ }
+
+ try {
+ const result = await runtime.useModel(ModelType.RESEARCH, {
+ input: question,
+ tools: [{ type: "web_search_preview" }],
+ });
+ const report = `${result.text}${renderSources(result.annotations ?? [])}`;
+ await callback?.({ text: report, source: "research-action" });
+ return { success: true, text: report };
+ } catch (error) {
+ const failure = `Deep research failed: ${
+ error instanceof Error ? error.message : String(error)
+ }`;
+ await callback?.({ text: failure, source: "research-action" });
+ return { success: false, text: failure };
+ }
+ },
+ examples: [
+ [
+ {
+ name: "{{userName}}",
+ content: {
+ text: "/research What are the leading approaches to retrieval-augmented generation in 2026?",
+ },
+ },
+ {
+ name: "{{agentName}}",
+ content: {
+ text: "Here is a cited research reportβ¦",
+ actions: ["DOOLITTLE_RESEARCH"],
+ },
+ },
+ ],
+ ],
+ };
+}
diff --git a/packages/agent/src/actions/terminal-action.test.ts b/packages/agent/src/actions/terminal-action.test.ts
index 6bf57475..9f72b536 100644
--- a/packages/agent/src/actions/terminal-action.test.ts
+++ b/packages/agent/src/actions/terminal-action.test.ts
@@ -1,5 +1,6 @@
import { describe, expect, it } from "bun:test";
import {
+ isTerminalIntent,
resolveCommandFromArguments,
resolveCommandFromObject,
resolveCommandFromParams,
@@ -65,3 +66,27 @@ describe("resolveCommandFromText", () => {
expect(resolveCommandFromText("```bash\nls -la\n```")).toBe("ls -la");
});
});
+
+describe("isTerminalIntent", () => {
+ it("matches explicit terminal prefixes", () => {
+ expect(isTerminalIntent("!git status")).toBe(true);
+ expect(isTerminalIntent("/terminal run npm -v")).toBe(true);
+ expect(isTerminalIntent("run `pwd` in terminal")).toBe(true);
+ });
+
+ it("matches scaffolding requests that name package managers", () => {
+ expect(
+ isTerminalIntent(
+ 'Go to ~/symbiex/dev and create a folder named "the-game". In the folder, build a react app (use bunx or npx to scaffold from an official boilerplate so we can reduce context, find this online)',
+ ),
+ ).toBe(true);
+ expect(isTerminalIntent("scaffold a new vite project")).toBe(true);
+ expect(isTerminalIntent("git clone https://example.com/foo")).toBe(true);
+ expect(isTerminalIntent("cargo build the workspace please")).toBe(true);
+ });
+
+ it("ignores prose without shell intent", () => {
+ expect(isTerminalIntent("how are you?")).toBe(false);
+ expect(isTerminalIntent("explain how react routing works")).toBe(false);
+ });
+});
diff --git a/packages/agent/src/actions/terminal-action/index.ts b/packages/agent/src/actions/terminal-action/index.ts
index 9a7abc8e..eff77bc9 100644
--- a/packages/agent/src/actions/terminal-action/index.ts
+++ b/packages/agent/src/actions/terminal-action/index.ts
@@ -5,4 +5,4 @@ export {
resolveCommandFromParams,
resolveCommandFromText,
} from "./parsing";
-export { createTerminalAction } from "./wiring";
+export { createTerminalAction, isTerminalIntent } from "./wiring";
diff --git a/packages/agent/src/actions/terminal-action/wiring.ts b/packages/agent/src/actions/terminal-action/wiring.ts
index 112a051e..42418d41 100644
--- a/packages/agent/src/actions/terminal-action/wiring.ts
+++ b/packages/agent/src/actions/terminal-action/wiring.ts
@@ -17,6 +17,50 @@ const ACTION_SOURCE = "terminal-action";
const MISSING_COMMAND_RESPONSE =
"I couldn't determine the terminal command to run. Try `!git status` or say `run `rg TODO` in the terminal`.";
+const SHELL_TOOL_PATTERN =
+ /\b(?:bunx|bun(?:\s+(?:add|install|i|run|x|create|init))?|npx|npm(?:\s+(?:install|i|run|create|init|ci|test|exec))?|pnpm(?:\s+(?:dlx|add|install|i|run|create|exec))?|yarn(?:\s+(?:add|install|create|dlx|run))?|deno(?:\s+(?:run|task|install))?|tsx|ts-node|node(?:\s+\S+)?|cargo(?:\s+(?:new|init|run|build|test|add|install))?|rustup|go(?:\s+(?:build|run|test|get|mod|install))?|pip(?:3)?(?:\s+install)?|poetry|uv(?:\s+(?:pip|venv|run))?|make|cmake|ninja|gradle|gradlew|mvn|docker|docker-compose|podman|kubectl|helm|terraform|ansible|git(?:\s+(?:clone|init|add|commit|push|pull|fetch|status|log|diff|checkout|switch|branch|stash|merge|rebase|reset|tag))?|gh\s+\S+|create-(?:react-app|next-app|vite|tauri-app|t3-app|expo-app|nuxt-app|svelte-app|astro)|vite|next|nuxt|astro|expo|sveltekit|hardhat|forge|anchor|solana(?:\s+\S+)?|spl-token|metaplex|firebase|supabase|vercel|netlify|wrangler|playwright|cypress|vitest|jest|mocha|rg|fd|fzf|jq|curl|wget|sh|bash|zsh|fish|pwsh)\b/iu;
+
+const TERMINAL_VERB_PATTERN =
+ /\b(?:run|execute|exec|start|launch|invoke|spawn|fire(?:\s+off)?)\b/iu;
+
+const BUILD_OR_SCAFFOLD_VERB_PATTERN =
+ /\b(?:scaffold|bootstrap|build|install|compile|setup|set\s+up|spin\s+up|stand\s+up|initialize|init|generate|deploy|publish|push|pull|test|lint|format)\b/iu;
+
+const SHELL_PATH_PATTERN =
+ /(?:\.\/[\w./-]+|~\/[\w./-]+|\$\(|\|\||&&|\bsudo\b)/u;
+
+export function isTerminalIntent(text: string): boolean {
+ const trimmed = text.trim();
+ if (!trimmed) {
+ return false;
+ }
+ if (trimmed.startsWith("!") || trimmed.startsWith("/terminal")) {
+ return true;
+ }
+ if (
+ TERMINAL_VERB_PATTERN.test(trimmed) &&
+ /\b(?:terminal|shell)\b/iu.test(trimmed)
+ ) {
+ return true;
+ }
+ if (/\b(?:run|execute|exec)\b\s+`[^`\n]+`/u.test(trimmed)) {
+ return true;
+ }
+ if (SHELL_TOOL_PATTERN.test(trimmed)) {
+ return true;
+ }
+ if (
+ BUILD_OR_SCAFFOLD_VERB_PATTERN.test(trimmed) &&
+ SHELL_TOOL_PATTERN.test(trimmed)
+ ) {
+ return true;
+ }
+ if (SHELL_PATH_PATTERN.test(trimmed)) {
+ return true;
+ }
+ return false;
+}
+
export function createTerminalAction(services: AppServices): Action {
return {
name: ACTION_NAME,
@@ -37,13 +81,7 @@ export function createTerminalAction(services: AppServices): Action {
typeof message.content === "string"
? message.content
: message.content?.text;
- return Boolean(
- text &&
- (text.trim().startsWith("!") ||
- text.trim().startsWith("/terminal") ||
- /\b(?:run|execute|exec)\b.+\b(?:terminal|shell)\b/iu.test(text) ||
- /\b(?:run|execute|exec)\b\s+`[^`\n]+`/u.test(text)),
- );
+ return Boolean(text && isTerminalIntent(text));
},
handler: async (
runtime: IAgentRuntime,
diff --git a/packages/agent/src/cli/splash.ts b/packages/agent/src/cli/splash.ts
deleted file mode 100644
index ad14bcfc..00000000
--- a/packages/agent/src/cli/splash.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Boot splash screen for Doolittle.
- *
- * Displays Eliza in a lab coat alongside the Doolittle wordmark in
- * ANSI-colored ASCII art. Skipped in non-TTY environments or when
- * DOOLITTLE_SKIP_SPLASH=1.
- */
-
-// Color palette (ANSI 24-bit / truecolor)
-const O = "\x1b[38;2;255;106;0m\x1b[1m"; // orange (brand)
-const H = "\x1b[38;2;30;30;45m\x1b[1m"; // dark hair
-const S = "\x1b[38;2;255;220;185m"; // skin
-const E = "\x1b[38;2;230;140;50m"; // amber eyes
-const M = "\x1b[38;2;200;80;80m"; // mouth / blush
-const L = "\x1b[38;2;239;244;255m\x1b[1m"; // lab coat
-const C = "\x1b[38;2;85;214;255m"; // cyan accent
-const D = "\x1b[2m"; // dim
-const R = "\x1b[0m"; // reset
-
-/* eslint-disable no-irregular-whitespace */
-const SPLASH_LINES = [
- ``,
- `${H} @@@@@@@@@@@${R}`,
- `${H} @@@@@@@@@@@@@@@${R}`,
- `${H} @@@@@@@@@@@@@@@@@@@${R}`,
- `${H} @@@@@@@${S}@@@@@@@@@${H}@@@@@@${R}`,
- `${H} @@@@@${S}@@@@${E}@@${S}@@${E}@@${S}@@@@${H}@@@@@${R} ${O}DOOLITTLE${R}`,
- `${H} @@@@@${S}@@@@@@@@${M}@@${S}@@@@@@${H}@@@@@${R} ${D}${C}ELIZA // CYPHERPUNK OPERATOR SHELL${R}`,
- `${H} @@@@@${S}@@@@@@${M}____${S}@@@@@@${H}@@@@@${R}`,
- `${H} @@@@@${S}@@@@@${H}@@@@@@${S}@@@@@${H}@@@@${R} ${D}Booting workspace...${R}`,
- `${H} @@@@@${S}@@@@${H}@@@@@@${S}@@@@${H}@@@@${R}`,
- `${L} _____${H}@@${R}${L}___${H}@@${R}${L}_____ ${R}`,
- `${L} / ____\\ /____ \\${R}`,
- `${L} / / __ \\ / __ \\ \\${R}`,
- `${L} / /_/ /\\ V / /_/ /${R}`,
- `${L} /_____/_/\\___/\\____/ ${R}`,
- `${L} /_/ \\_\\${R}`,
- `${L} /_/ \\_\\${R}`,
- ``,
-];
-
-const SPLASH_ART = SPLASH_LINES.join("\n");
-
-/**
- * Show the boot splash screen if we're in an interactive TTY and
- * the user hasn't opted out via DOOLITTLE_SKIP_SPLASH=1.
- *
- * @param durationMs How long to show the splash (default 1500ms).
- */
-export async function showBootSplash(durationMs = 1500): Promise {
- if (process.env.DOOLITTLE_SKIP_SPLASH === "1") {
- return;
- }
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
- return;
- }
-
- // Hide cursor
- process.stdout.write("\x1b[?25l");
- // Clear screen and move to top-left
- process.stdout.write("\x1b[2J\x1b[H");
-
- process.stdout.write(SPLASH_ART);
- process.stdout.write("\n");
-
- await new Promise((resolve) => setTimeout(resolve, durationMs));
-
- // Clear screen and restore cursor
- process.stdout.write("\x1b[2J\x1b[H");
- process.stdout.write("\x1b[?25h");
-}
diff --git a/packages/agent/src/config/env/build.ts b/packages/agent/src/config/env/build.ts
index bf690bb6..fb15ff43 100644
--- a/packages/agent/src/config/env/build.ts
+++ b/packages/agent/src/config/env/build.ts
@@ -35,6 +35,7 @@ export function buildEnvConfig(
mode: values.DOOLITTLE_MODE,
host: values.DOOLITTLE_HOST,
port: values.DOOLITTLE_PORT,
+ apiToken: values.DOOLITTLE_API_TOKEN,
dataDir: directories.dataDir,
skillsDir: directories.skillsDir,
timezone: values.DOOLITTLE_TIMEZONE,
diff --git a/packages/agent/src/config/env/schema.ts b/packages/agent/src/config/env/schema.ts
index c0c0a781..6dbdcfbc 100644
--- a/packages/agent/src/config/env/schema.ts
+++ b/packages/agent/src/config/env/schema.ts
@@ -1,11 +1,12 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import { z } from "zod";
export const envSchema = z.object({
DOOLITTLE_NAME: z.string().default("Doolittle"),
DOOLITTLE_MODE: z.enum(["api", "cli", "both"]).default("both"),
- DOOLITTLE_HOST: z.string().default("0.0.0.0"),
+ DOOLITTLE_HOST: z.string().default("127.0.0.1"),
DOOLITTLE_PORT: z.coerce.number().int().positive().default(3000),
+ DOOLITTLE_API_TOKEN: z.string().optional(),
DOOLITTLE_DATA_DIR: z.string().default(".doolittle"),
DOOLITTLE_SKILLS_DIR: z.string().default("./packages/skills"),
DOOLITTLE_TIMEZONE: z.string().default("America/Chicago"),
diff --git a/packages/agent/src/evaluators/memory-nudge-evaluator.test.ts b/packages/agent/src/evaluators/memory-nudge-evaluator.test.ts
new file mode 100644
index 00000000..2d74796b
--- /dev/null
+++ b/packages/agent/src/evaluators/memory-nudge-evaluator.test.ts
@@ -0,0 +1,74 @@
+import { describe, expect, it } from "bun:test";
+import type { EvaluatorRunContext, Memory } from "@elizaos/core";
+import type { AppServices } from "@/services";
+import { createMemoryNudgeEvaluator } from "./memory-nudge-evaluator";
+
+function makeServices() {
+ const writes: Array<{ target: string; content: string }> = [];
+ const services = {
+ memory: {
+ add: (target: string, content: string) => {
+ writes.push({ target, content });
+ return content;
+ },
+ },
+ } as unknown as AppServices;
+ return { services, writes };
+}
+
+function runContext(text: string): EvaluatorRunContext {
+ return {
+ message: { content: { text } } as Memory,
+ } as EvaluatorRunContext;
+}
+
+describe("memoryNudge evaluator (beta contract)", () => {
+ it("gates on remember/save cues via shouldRun", async () => {
+ const { services } = makeServices();
+ const evaluator = createMemoryNudgeEvaluator(services);
+ expect(
+ await evaluator.shouldRun(runContext("remember that we use Bun")),
+ ).toBe(true);
+ expect(await evaluator.shouldRun(runContext("what is the weather"))).toBe(
+ false,
+ );
+ });
+
+ it("requires a schema and prompt (beta-required fields)", () => {
+ const { services } = makeServices();
+ const evaluator = createMemoryNudgeEvaluator(services);
+ expect(evaluator.schema).toBeDefined();
+ expect(typeof evaluator.prompt).toBe("function");
+ });
+
+ it("parses model output into a normalized record", () => {
+ const { services } = makeServices();
+ const evaluator = createMemoryNudgeEvaluator(services);
+ expect(
+ evaluator.parse?.({
+ shouldStore: true,
+ target: "user",
+ fact: " likes bun ",
+ }),
+ ).toEqual({ shouldStore: true, target: "user", fact: "likes bun" });
+ expect(evaluator.parse?.({ target: "memory", fact: "" })).toBeNull();
+ expect(evaluator.parse?.(null)).toBeNull();
+ });
+
+ it("persists the parsed fact through a processor", async () => {
+ const { services, writes } = makeServices();
+ const evaluator = createMemoryNudgeEvaluator(services);
+ const processor = evaluator.processors?.[0];
+ if (!processor) {
+ throw new Error("expected a persistence processor");
+ }
+ type ProcessorContext = Parameters[0];
+ await processor.process({
+ output: { shouldStore: true, target: "memory", fact: "uses bun" },
+ } as unknown as ProcessorContext);
+ await processor.process({
+ output: { shouldStore: false, target: "memory", fact: "ignored" },
+ } as unknown as ProcessorContext);
+ expect(writes).toEqual([{ target: "memory", content: "uses bun" }]);
+ });
+});
diff --git a/packages/agent/src/evaluators/memory-nudge-evaluator.ts b/packages/agent/src/evaluators/memory-nudge-evaluator.ts
index 2378fa22..6b6a7d8a 100644
--- a/packages/agent/src/evaluators/memory-nudge-evaluator.ts
+++ b/packages/agent/src/evaluators/memory-nudge-evaluator.ts
@@ -1,59 +1,116 @@
-import type { Evaluator, IAgentRuntime, Memory } from "@elizaos/core";
+import type {
+ Evaluator,
+ EvaluatorProcessorContext,
+ EvaluatorPromptContext,
+ EvaluatorRunContext,
+ JSONSchema,
+ Memory,
+} from "@elizaos/core";
import type { AppServices } from "@/services";
-export function createMemoryNudgeEvaluator(services: AppServices): Evaluator {
+type MemoryNudgeOutput = {
+ shouldStore: boolean;
+ target: "user" | "memory";
+ fact: string;
+};
+
+const MEMORY_NUDGE_SCHEMA: JSONSchema = {
+ type: "object",
+ additionalProperties: false,
+ required: ["shouldStore", "target", "fact"],
+ properties: {
+ shouldStore: {
+ type: "boolean",
+ description: "Whether the message contains a durable fact worth saving.",
+ },
+ target: {
+ type: "string",
+ enum: ["user", "memory"],
+ description:
+ 'Use "user" for personal preferences about the user, otherwise "memory".',
+ },
+ fact: {
+ type: "string",
+ description: "The normalized fact to persist, without the leading cue.",
+ },
+ },
+};
+
+const REMEMBER_CUE = /remember|save that|keep in mind/iu;
+
+function extractText(message: Memory): string {
+ const content = message.content;
+ if (typeof content === "string") {
+ return content;
+ }
+ return content?.text ?? "";
+}
+
+/**
+ * Persists explicit "remember this" cues into the Doolittle memory stores.
+ *
+ * Rewritten for the ElizaOS 2.0 beta evaluator contract: the regex still gates
+ * whether the evaluator runs, but fact extraction is delegated to the model
+ * (via `schema`/`prompt`/`parse`) and the write happens in a processor.
+ */
+export function createMemoryNudgeEvaluator(
+ services: AppServices,
+): Evaluator {
return {
name: "memoryNudge",
description:
"Stores explicit remember/save cues in the persistent memory stores.",
- alwaysRun: true,
similes: ["remember this", "save preference", "persist fact"],
- examples: [
- {
- prompt: "Remember that this repository uses Bun only.",
- messages: [
- {
- name: "user",
- content: {
- text: "Remember that this repository uses Bun only.",
- },
- },
- ],
- outcome:
- "The evaluator saves the preference into user or project memory.",
- },
- ],
- validate: async (_runtime: IAgentRuntime, message: Memory) => {
- const text =
- typeof message.content === "string"
- ? message.content
- : message.content?.text;
- return Boolean(text && /remember|save that|keep in mind/iu.test(text));
+ schema: MEMORY_NUDGE_SCHEMA,
+ shouldRun: async ({ message }: EvaluatorRunContext) => {
+ const text = extractText(message);
+ return Boolean(text && REMEMBER_CUE.test(text));
+ },
+ prompt: ({ message }: EvaluatorPromptContext) => {
+ const text = extractText(message);
+ return [
+ "The user asked the agent to remember something.",
+ `Message: "${text}"`,
+ "",
+ "Decide whether there is a durable fact worth persisting.",
+ 'Set "target" to "user" for personal preferences (for example "I prefer",',
+ '"my preference", "remember that I"), otherwise "memory".',
+ 'Strip leading cues such as "please" or "remember that" from the stored fact.',
+ ].join("\n");
},
- handler: async (_runtime: IAgentRuntime, message: Memory) => {
- const text =
- typeof message.content === "string"
- ? message.content
- : message.content?.text;
- if (!text) {
- return undefined;
+ parse: (output: unknown): MemoryNudgeOutput | null => {
+ if (!output || typeof output !== "object") {
+ return null;
}
-
- const target = /i prefer|my preference|remember that i/iu.test(text)
- ? "user"
- : "memory";
- const normalized = text
- .replace(/^please\s+/iu, "")
- .replace(/^remember that\s+/iu, "")
- .trim();
-
- try {
- services.memory.add(target, normalized);
- } catch {
- // Ignore duplicate or over-limit writes inside the evaluator path.
+ const candidate = output as Record;
+ const fact =
+ typeof candidate.fact === "string" ? candidate.fact.trim() : "";
+ if (!fact) {
+ return null;
}
-
- return undefined;
+ return {
+ shouldStore: candidate.shouldStore !== false,
+ target: candidate.target === "user" ? "user" : "memory",
+ fact,
+ };
},
+ processors: [
+ {
+ name: "persist-memory-nudge",
+ process: async ({
+ output,
+ }: EvaluatorProcessorContext) => {
+ if (!output.shouldStore || !output.fact) {
+ return undefined;
+ }
+ try {
+ services.memory.add(output.target, output.fact);
+ } catch {
+ // Ignore duplicate or over-limit writes inside the evaluator path.
+ }
+ return undefined;
+ },
+ },
+ ],
};
}
diff --git a/packages/agent/src/gateway/supervision/watchdog-cycle.ts b/packages/agent/src/gateway/supervision/watchdog-cycle.ts
index d948a9eb..2dbd31e9 100644
--- a/packages/agent/src/gateway/supervision/watchdog-cycle.ts
+++ b/packages/agent/src/gateway/supervision/watchdog-cycle.ts
@@ -15,92 +15,99 @@ export async function runGatewayWatchdogPlatform(params: {
watchdogAt: string;
}): Promise {
const { deps, platform, adapter, reason, watchdogAt } = params;
- const health = await adapter.health();
- const restartState = deps.ensureRestartState(platform);
- const backoffActive =
- restartState.nextEligibleAt !== undefined &&
- new Date(restartState.nextEligibleAt).getTime() > Date.now();
+ try {
+ const health = await adapter.health();
+ const restartState = deps.ensureRestartState(platform);
+ const backoffActive =
+ restartState.nextEligibleAt !== undefined &&
+ new Date(restartState.nextEligibleAt).getTime() > Date.now();
- if (health.ready) {
- const records = [
- applySupervisionOutcome(
- deps,
- platform,
- "healthy",
- `${platform} healthy during ${reason}.`,
- ),
- ];
+ if (health.ready) {
+ const records = [
+ applySupervisionOutcome(
+ deps,
+ platform,
+ "healthy",
+ `${platform} healthy during ${reason}.`,
+ ),
+ ];
- if (platform === "homeassistant") {
- const watchResult = await adapter.watch?.(reason);
- if (watchResult) {
+ if (platform === "homeassistant") {
+ const watchResult = await adapter.watch?.(reason);
+ if (watchResult) {
+ records.push(
+ deps.recordSupervision(
+ platform,
+ "watch",
+ `Home Assistant watch cycle observed ${watchResult.count} states during ${reason}.`,
+ ),
+ );
+ await deps.observeAdapter(platform, {
+ at: watchResult.watchedAt,
+ kind: "heartbeat",
+ detail: watchResult.summary,
+ });
+ }
records.push(
deps.recordSupervision(
platform,
"watch",
- `Home Assistant watch cycle observed ${watchResult.count} states during ${reason}.`,
+ `Home Assistant watcher cycle acknowledged during ${reason}.`,
),
);
- await deps.observeAdapter(platform, {
- at: watchResult.watchedAt,
- kind: "heartbeat",
- detail: watchResult.summary,
- });
}
- records.push(
- deps.recordSupervision(
+
+ return records;
+ }
+
+ const restartable = health.status === "running" || health.status === "idle";
+ if (!restartable) {
+ return [
+ applySupervisionOutcome(
+ deps,
platform,
- "watch",
- `Home Assistant watcher cycle acknowledged during ${reason}.`,
+ "skip",
+ `${platform} supervision skipped during ${reason}; adapter status ${health.status}.`,
),
- );
+ ];
}
- return records;
- }
-
- const restartable = health.status === "running" || health.status === "idle";
- if (!restartable) {
- return [
- applySupervisionOutcome(
- deps,
- platform,
- "skip",
- `${platform} supervision skipped during ${reason}; adapter status ${health.status}.`,
- ),
- ];
- }
-
- if (backoffActive) {
- return [
- applySupervisionOutcome(
- deps,
- platform,
- "backoff",
- `${platform} restart delayed until ${restartState.nextEligibleAt} during ${reason}.`,
- restartState.backoffMs,
- ),
- ];
- }
+ if (backoffActive) {
+ return [
+ applySupervisionOutcome(
+ deps,
+ platform,
+ "backoff",
+ `${platform} restart delayed until ${restartState.nextEligibleAt} during ${reason}.`,
+ restartState.backoffMs,
+ ),
+ ];
+ }
- try {
- await adapter.stop();
- await adapter.start();
- restartState.failures = 0;
- restartState.nextEligibleAt = undefined;
- restartState.backoffMs = GATEWAY_DAEMON_POLICY.restartBaseDelayMs;
- restartState.lastRestartAt = watchdogAt;
- restartState.lastAction = "restart";
- return [
- applySupervisionOutcome(
- deps,
- platform,
- "restart",
- `${platform} adapter restart attempted during ${reason}.`,
- ),
- ];
+ try {
+ await adapter.stop();
+ await adapter.start();
+ restartState.failures = 0;
+ restartState.nextEligibleAt = undefined;
+ restartState.backoffMs = GATEWAY_DAEMON_POLICY.restartBaseDelayMs;
+ restartState.lastRestartAt = watchdogAt;
+ restartState.lastAction = "restart";
+ return [
+ applySupervisionOutcome(
+ deps,
+ platform,
+ "restart",
+ `${platform} adapter restart attempted during ${reason}.`,
+ ),
+ ];
+ } catch (error) {
+ const detail = `${platform} recovery failed during ${reason}: ${error instanceof Error ? error.message : String(error)}`;
+ return [applySupervisionOutcome(deps, platform, "recover", detail)];
+ }
} catch (error) {
- const detail = `${platform} recovery failed during ${reason}: ${error instanceof Error ? error.message : String(error)}`;
+ // Contain any failure (e.g. adapter.health()/watch() throwing) to this
+ // platform so the watchdog loop continues supervising the others.
+ const detail = `${platform} watchdog cycle failed during ${reason}: ${error instanceof Error ? error.message : String(error)}`;
return [applySupervisionOutcome(deps, platform, "recover", detail)];
}
}
diff --git a/packages/agent/src/plugin-api.ts b/packages/agent/src/plugin-api.ts
index e079bc20..ab4dfceb 100644
--- a/packages/agent/src/plugin-api.ts
+++ b/packages/agent/src/plugin-api.ts
@@ -2,6 +2,7 @@ export { createCronAction } from "@/actions/cron-action";
export { createFileActions } from "@/actions/file-action";
export { createMemoryAction } from "@/actions/memory-action";
export { createRepositoryAction } from "@/actions/repository-action";
+export { createResearchAction } from "@/actions/research-action";
export { createSessionSearchAction } from "@/actions/session-search-action";
export { createSkillsAction } from "@/actions/skills-action";
export { createTerminalAction } from "@/actions/terminal-action";
@@ -9,6 +10,7 @@ export { createWorkspaceAction } from "@/actions/workspace-action";
export { createMemoryNudgeEvaluator } from "@/evaluators/memory-nudge-evaluator";
export { GatewayRunner } from "@/gateway/runner";
export { createAgentContextProvider } from "@/providers/agent-context";
+export { createSelfAwarenessProvider } from "@/providers/self-awareness";
export type { AppContext } from "@/runtime/bootstrap";
export type { AgentExecutionContext } from "@/runtime/chat";
export { handleAgentTurn } from "@/runtime/chat";
diff --git a/packages/agent/src/providers/self-awareness/index.ts b/packages/agent/src/providers/self-awareness/index.ts
new file mode 100644
index 00000000..51632d79
--- /dev/null
+++ b/packages/agent/src/providers/self-awareness/index.ts
@@ -0,0 +1 @@
+export { createSelfAwarenessProvider } from "./provider";
diff --git a/packages/agent/src/providers/self-awareness/provider.test.ts b/packages/agent/src/providers/self-awareness/provider.test.ts
new file mode 100644
index 00000000..f3b11bd7
--- /dev/null
+++ b/packages/agent/src/providers/self-awareness/provider.test.ts
@@ -0,0 +1,50 @@
+import { describe, expect, it } from "bun:test";
+import type { IAgentRuntime, Memory, State } from "@elizaos/core";
+import type { AppServices } from "@/services";
+import { createSelfAwarenessProvider } from "./provider";
+
+function makeServices(composeSummary: () => Promise): AppServices {
+ return {
+ awareness: { composeSummary },
+ } as unknown as AppServices;
+}
+
+const runtime = {} as IAgentRuntime;
+const message = { content: { text: "hi" } } as Memory;
+const state = {} as State;
+
+describe("self-awareness provider", () => {
+ it("injects the composed (trimmed) summary as text and data", async () => {
+ const provider = createSelfAwarenessProvider(
+ makeServices(async () => " [STATUS] 3 tasks pending "),
+ );
+ const result = await provider.get(runtime, message, state);
+ expect(result.text).toBe("[STATUS] 3 tasks pending");
+ expect(result.data?.selfAwareness).toBe("[STATUS] 3 tasks pending");
+ });
+
+ it("injects nothing when the summary is empty/whitespace", async () => {
+ const provider = createSelfAwarenessProvider(
+ makeServices(async () => " "),
+ );
+ const result = await provider.get(runtime, message, state);
+ expect(result.text).toBe("");
+ expect(result.data).toEqual({});
+ });
+
+ it("is fault-tolerant when composeSummary throws", async () => {
+ const provider = createSelfAwarenessProvider(
+ makeServices(async () => {
+ throw new Error("contributor blew up");
+ }),
+ );
+ const result = await provider.get(runtime, message, state);
+ expect(result.text).toBe("");
+ });
+
+ it("renders late (positive position) after the main context", () => {
+ const provider = createSelfAwarenessProvider(makeServices(async () => "x"));
+ expect(provider.position ?? 0).toBeGreaterThan(0);
+ expect(provider.name).toBe("DOOLITTLE_SELF_AWARENESS_PROVIDER");
+ });
+});
diff --git a/packages/agent/src/providers/self-awareness/provider.ts b/packages/agent/src/providers/self-awareness/provider.ts
new file mode 100644
index 00000000..52b6a607
--- /dev/null
+++ b/packages/agent/src/providers/self-awareness/provider.ts
@@ -0,0 +1,53 @@
+import type {
+ IAgentRuntime,
+ Memory,
+ Provider,
+ ProviderResult,
+ State,
+} from "@elizaos/core";
+import type { AppServices } from "@/services";
+
+/**
+ * Surfaces the agent's composed self-awareness summary into the runtime
+ * provider context so the model can reason about its own operational state.
+ *
+ * The ElizaOS `AwarenessRegistry` (assembled by {@link AwarenessService} with
+ * the runtime / run / startup / settings / capabilities contributors) produces
+ * a Layer-1 summary via `composeSummary`. The registry is built at startup, but
+ * nothing injected its output into a turn β this provider closes that gap.
+ *
+ * Additive and fault-tolerant: `composeSummary` already returns `""` on
+ * contributor failure, and any throw is swallowed, so the turn is never broken
+ * and nothing is injected when there is no summary to show.
+ */
+export function createSelfAwarenessProvider(services: AppServices): Provider {
+ return {
+ name: "DOOLITTLE_SELF_AWARENESS_PROVIDER",
+ description:
+ "Injects the agent's composed self-awareness summary (runtime, run, startup, settings, capabilities) into the runtime context.",
+ // Render late, after the main Doolittle context block.
+ position: 100,
+ get: async (
+ runtime: IAgentRuntime,
+ _message: Memory,
+ _state: State,
+ ): Promise => {
+ let summary = "";
+ try {
+ summary = (await services.awareness.composeSummary(runtime)).trim();
+ } catch {
+ summary = "";
+ }
+
+ if (!summary) {
+ return { text: "", values: {}, data: {} };
+ }
+
+ return {
+ text: summary,
+ values: {},
+ data: { selfAwareness: summary },
+ };
+ },
+ };
+}
diff --git a/packages/agent/src/runtime/action-result-metadata.ts b/packages/agent/src/runtime/action-result-metadata.ts
index 977a852d..aaff940d 100644
--- a/packages/agent/src/runtime/action-result-metadata.ts
+++ b/packages/agent/src/runtime/action-result-metadata.ts
@@ -2,8 +2,8 @@ import type {
CodingIteration,
CommandResult,
FileOperation,
-} from "@elizaos/agent/services/coding-agent-context";
-import { validateCodingIteration } from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
+import { validateCodingIteration } from "@elizaos/autonomous/services/coding-agent-context";
import type { ActionResult, ProviderDataRecord } from "@elizaos/core";
import type { LocalMutationInput } from "@/services/run-controller-service";
diff --git a/packages/agent/src/runtime/bootstrap/runtime/deferred-hydration.ts b/packages/agent/src/runtime/bootstrap/runtime/deferred-hydration.ts
index 8d008cc2..250072fb 100644
--- a/packages/agent/src/runtime/bootstrap/runtime/deferred-hydration.ts
+++ b/packages/agent/src/runtime/bootstrap/runtime/deferred-hydration.ts
@@ -32,11 +32,28 @@ export function createDeferredHydrator(params: {
"registering deferred runtime plugins",
);
const deferredPlugins = await loadDeferredPlugins();
+ const failures: string[] = [];
for (const plugin of deferredPlugins) {
- await registerPlugin(plugin);
+ // Isolate each optional plugin: one failure must not abort the whole
+ // batch (and, because the hydration promise is memoized, permanently
+ // disable deferred startup). Skip the failing plugin and continue.
+ try {
+ await registerPlugin(plugin);
+ } catch (error) {
+ const detail = `${plugin.name ?? "unknown"}: ${formatError(error)}`;
+ failures.push(detail);
+ process.stderr.write(
+ `[doolittle] deferred plugin failed, skipping β ${detail}\n`,
+ );
+ }
}
deferredPluginsRegistered = true;
- services.startupState.markReady("runtime", "runtime ready");
+ services.startupState.markReady(
+ "runtime",
+ failures.length > 0
+ ? `runtime ready (${failures.length} deferred plugin(s) skipped)`
+ : "runtime ready",
+ );
};
return async (reason?: string): Promise => {
diff --git a/packages/agent/src/runtime/chat-turn-post-provider.test.ts b/packages/agent/src/runtime/chat-turn-post-provider.test.ts
index 2f13318b..5befffc1 100644
--- a/packages/agent/src/runtime/chat-turn-post-provider.test.ts
+++ b/packages/agent/src/runtime/chat-turn-post-provider.test.ts
@@ -504,4 +504,72 @@ describe("chat turn post-provider seam", () => {
},
]);
});
+
+ it("accepts shell-scaffolded turns when a successful RUN_IN_TERMINAL command landed", async () => {
+ const harness = createContext({ observedActionCount: 0 });
+ const scaffoldMessage =
+ 'Go to ~/symbiex/dev and create a folder named "the-game". In the folder, build a react app (use bunx or npx to scaffold from an official boilerplate).';
+
+ const result = await runPostProviderTurn({
+ input: {
+ userId: "alice",
+ message: scaffoldMessage,
+ source: "cli",
+ },
+ effectiveInput: {
+ userId: "alice",
+ message: scaffoldMessage,
+ source: "cli",
+ },
+ context: harness.context,
+ turn: createTurn(),
+ response: "Scaffolded the-game.",
+ actionResults: [
+ {
+ success: true,
+ text: "bunx create-vite the-game --template react",
+ data: {
+ actionName: "RUN_IN_TERMINAL",
+ commandResult: {
+ command: "bunx create-vite the-game --template react",
+ exitCode: 0,
+ stdout: "Scaffolding project in ~/dev/the-game...",
+ stderr: "",
+ executedIn: "/Users/symbiex/dev",
+ success: true,
+ },
+ },
+ },
+ ],
+ settingsDuring: {
+ model: {
+ provider: "devin",
+ model: "swe-1-6-fast",
+ },
+ } as Parameters[0]["settingsDuring"],
+ scheduleProfileObservation: () => undefined,
+ loadDirectLocalIntent: async () => ({
+ directLocalIntent: null,
+ executeDirectLocalIntent: async () => "unused",
+ isHighConfidenceDirectLocalIntent: () => false,
+ requiresModelSynthesisForLocalIntent: () => false,
+ shouldUseDirectLocalFallback: () => false,
+ }),
+ approveDirectLocalIntent: async () => undefined,
+ });
+
+ expect(result).toMatchObject({
+ kind: "final",
+ runFailureMessage: undefined,
+ observedActionCount: 1,
+ usedFallback: false,
+ });
+ expect(harness.finishEvents).toEqual([
+ {
+ sessionId: "session-1",
+ status: "complete",
+ message: undefined,
+ },
+ ]);
+ });
});
diff --git a/packages/agent/src/runtime/chat-turn/execution-contract.ts b/packages/agent/src/runtime/chat-turn/execution-contract.ts
index e66a3c5f..a6a26a5d 100644
--- a/packages/agent/src/runtime/chat-turn/execution-contract.ts
+++ b/packages/agent/src/runtime/chat-turn/execution-contract.ts
@@ -1,12 +1,17 @@
+import type { CommandResult } from "@elizaos/autonomous/services/coding-agent-context";
import type { ActionResult } from "@elizaos/core";
import { summarizeActionResults } from "@/runtime/action-result-metadata";
import { classifyTurnMessage } from "@/runtime/turn-classification/message";
import type { LocalMutationInput } from "@/services/run-controller-service";
const FILE_MUTATION_REQUEST_PATTERN =
- /\b(?:create|make|write|add|edit|update|change|modify|patch|delete|remove|scaffold|build|generate|save|mkdir|touch)\b[\s\S]*\b(?:file|files|folder|directory|html|css|js|javascript|typescript|json|md|markdown|website|site|project)\b|\b(?:file|files|folder|directory|html|css|js|javascript|typescript|json|md|markdown|website|site|project)\b[\s\S]*\b(?:create|make|write|add|edit|update|change|modify|patch|delete|remove|scaffold|build|generate|save|mkdir|touch)\b/iu;
+ /\b(?:create|make|write|add|edit|update|change|modify|patch|delete|remove|scaffold|build|generate|save|mkdir|touch)\b[\s\S]*\b(?:file|files|folder|directory|html|css|js|javascript|typescript|json|md|markdown|website|site|project|app|application)\b|\b(?:file|files|folder|directory|html|css|js|javascript|typescript|json|md|markdown|website|site|project|app|application)\b[\s\S]*\b(?:create|make|write|add|edit|update|change|modify|patch|delete|remove|scaffold|build|generate|save|mkdir|touch)\b/iu;
const FILE_WRITE_REQUEST_PATTERN =
/\b(?:create|make|write|add|edit|update|change|modify|patch|scaffold|build|generate|save|touch)\b[\s\S]*\b(?:file|files|html|css|js|javascript|typescript|json|md|markdown|website|site|page)\b|\b(?:file|files|html|css|js|javascript|typescript|json|md|markdown|website|site|page)\b[\s\S]*\b(?:create|make|write|add|edit|update|change|modify|patch|scaffold|build|generate|save|touch)\b/iu;
+const SHELL_SCAFFOLD_REQUEST_PATTERN =
+ /\b(?:bunx|npx|pnpm\s+(?:dlx|create)|yarn\s+(?:create|dlx)|npm\s+(?:init|create|exec)|create-(?:react-app|next-app|vite|tauri-app|t3-app|expo-app|nuxt-app|svelte-app|astro)|cargo\s+(?:new|init)|git\s+clone|anchor\s+init|vite|next|nuxt|astro|expo|sveltekit|hardhat|forge|spl-token|metaplex)\b/iu;
+const SHELL_SCAFFOLD_COMMAND_PATTERN =
+ /\b(?:bunx|npx|pnpm|yarn|npm|create-(?:react-app|next-app|vite|tauri-app|t3-app|expo-app|nuxt-app|svelte-app|astro)|cargo\s+(?:new|init|build|test|run)|git\s+clone|anchor|forge|hardhat|vite|next|expo|sveltekit|spl-token|metaplex|mkdir|cp|mv|rsync)\b/iu;
const EMPTY_PROVIDER_EXECUTION_PATTERN = /^π\s*Provider executed:\s*\[\]\s*$/u;
@@ -55,14 +60,24 @@ export function buildTurnExecutionContract(input: {
(classification.likelyLocalTask || classification.shouldUseMultiStep);
const requiresMutationProof =
requiresLocalExecution && FILE_MUTATION_REQUEST_PATTERN.test(input.message);
+ const shellScaffoldRequested = SHELL_SCAFFOLD_REQUEST_PATTERN.test(
+ input.message,
+ );
+
+ const requiredMutationActions: string[] = [];
+ if (requiresMutationProof) {
+ if (FILE_WRITE_REQUEST_PATTERN.test(input.message)) {
+ requiredMutationActions.push("WRITE_FILE", "PATCH_FILE");
+ }
+ if (shellScaffoldRequested) {
+ requiredMutationActions.push("RUN_IN_TERMINAL");
+ }
+ }
return {
requiresLocalExecution,
requiresMutationProof,
- requiredMutationActions:
- requiresMutationProof && FILE_WRITE_REQUEST_PATTERN.test(input.message)
- ? ["WRITE_FILE", "PATCH_FILE"]
- : [],
+ requiredMutationActions,
reason: requiresMutationProof
? "local file mutation requested"
: requiresLocalExecution
@@ -71,12 +86,20 @@ export function buildTurnExecutionContract(input: {
};
}
+function commandResultLooksLikeMutation(result: CommandResult): boolean {
+ if (!result.success || result.exitCode !== 0) {
+ return false;
+ }
+ return SHELL_SCAFFOLD_COMMAND_PATTERN.test(result.command);
+}
+
export function assessTurnExecutionContract(input: {
contract: TurnExecutionContract;
response: string;
observedActionCount: number;
actionResults?: ActionResult[];
localMutations?: LocalMutationInput[];
+ commandResults?: CommandResult[];
runFailureMessage?: string;
}): TurnExecutionAssessment {
if (!input.contract.requiresLocalExecution || input.runFailureMessage) {
@@ -92,6 +115,13 @@ export function assessTurnExecutionContract(input: {
...actionResultSummary.localMutations,
...(input.localMutations ?? []),
];
+ const commandResults = [
+ ...actionResultSummary.commandResults,
+ ...(input.commandResults ?? []),
+ ];
+ const scaffoldingCommands = commandResults.filter(
+ commandResultLooksLikeMutation,
+ );
if (
observedActionCount === 0 &&
@@ -116,7 +146,8 @@ export function assessTurnExecutionContract(input: {
const successfulMutation = localMutations.some(
(mutation) => mutation.success,
);
- if (!successfulMutation) {
+ const successfulScaffoldCommand = scaffoldingCommands.length > 0;
+ if (!successfulMutation && !successfulScaffoldCommand) {
const failedMutation = summarizeFailedMutation(localMutations);
return {
ok: false,
@@ -127,15 +158,16 @@ export function assessTurnExecutionContract(input: {
}
if (input.contract.requiredMutationActions.length > 0) {
+ const required = input.contract.requiredMutationActions;
const hasRequiredMutation = localMutations.some(
- (mutation) =>
- mutation.success &&
- input.contract.requiredMutationActions.includes(mutation.action),
+ (mutation) => mutation.success && required.includes(mutation.action),
);
- if (!hasRequiredMutation) {
+ const hasRequiredCommand =
+ required.includes("RUN_IN_TERMINAL") && successfulScaffoldCommand;
+ if (!hasRequiredMutation && !hasRequiredCommand) {
return {
ok: false,
- failureMessage: `Native execution failed: the requested file write did not land. Expected one of ${input.contract.requiredMutationActions.join(", ")}.`,
+ failureMessage: `Native execution failed: the requested file write did not land. Expected one of ${required.join(", ")}.`,
};
}
}
diff --git a/packages/agent/src/runtime/chat-turn/native/profile-memory.ts b/packages/agent/src/runtime/chat-turn/native/profile-memory.ts
index 4033ae26..70456e2f 100644
--- a/packages/agent/src/runtime/chat-turn/native/profile-memory.ts
+++ b/packages/agent/src/runtime/chat-turn/native/profile-memory.ts
@@ -10,7 +10,8 @@ import type { TurnState } from "../state";
import { elapsedMsSince, recordTrajectoryEvent } from "../trajectory";
import { runShortcutModelWithSdkTrajectory } from "./model-trajectory";
import {
- buildDirectInformationalPrompt,
+ buildDirectInformationalPromptParts,
+ buildShortcutPromptCache,
finalizeNativeShortcut,
normalizeDirectInformationalResponse,
} from "./shortcuts";
@@ -250,8 +251,8 @@ export async function handleProfileMemoryModelTurn(input: {
});
const identityRequest = asksForDoolittleIdentity(input.message);
- const prompt = [
- buildDirectInformationalPrompt(input),
+ const parts = buildDirectInformationalPromptParts(input);
+ const appended = [
"",
"This turn has already applied a durable user profile update.",
`- savedDisplayName=${displayName}`,
@@ -259,6 +260,13 @@ export async function handleProfileMemoryModelTurn(input: {
? "- The user also asked about Doolittle's personality or soul. Answer from SOUL.md with warmth and specificity."
: "- Acknowledge the saved name naturally.",
].join("\n");
+ const cache = buildShortcutPromptCache({
+ context: input.context,
+ turn: input.turn,
+ stableBlocks: [parts.stablePrefix],
+ volatile: `${parts.volatileSuffix}\n${appended}`,
+ });
+ const prompt = cache.prompt;
const settings = input.context.services.settings.get();
const startedAt = performance.now();
@@ -300,6 +308,8 @@ export async function handleProfileMemoryModelTurn(input: {
run: () =>
input.context.runtime.useModel(ModelType.TEXT_SMALL, {
prompt,
+ promptSegments: cache.promptSegments,
+ providerOptions: cache.providerOptions,
temperature: 0.45,
maxTokens: identityRequest ? 260 : 120,
stopSequences: ["\nUser:", "\nAssistant:", "\nDoolittle:"],
@@ -387,8 +397,8 @@ export async function handleSoulIdentityModelTurn(input: {
return undefined;
}
- const prompt = [
- buildDirectInformationalPrompt(input),
+ const parts = buildDirectInformationalPromptParts(input);
+ const appended = [
"",
"Soul identity task:",
"- Treat this as a Doolittle identity/personality conversation, not a global character mutation.",
@@ -396,6 +406,13 @@ export async function handleSoulIdentityModelTurn(input: {
"- Be warm, vivid, and specific. Avoid sterile disclaimers.",
"- If the user asked for a soul file, acknowledge that SOUL.md is the local editable identity file.",
].join("\n");
+ const cache = buildShortcutPromptCache({
+ context: input.context,
+ turn: input.turn,
+ stableBlocks: [parts.stablePrefix],
+ volatile: `${parts.volatileSuffix}\n${appended}`,
+ });
+ const prompt = cache.prompt;
const settings = input.context.services.settings.get();
const startedAt = performance.now();
@@ -433,6 +450,8 @@ export async function handleSoulIdentityModelTurn(input: {
run: () =>
input.context.runtime.useModel(ModelType.TEXT_SMALL, {
prompt,
+ promptSegments: cache.promptSegments,
+ providerOptions: cache.providerOptions,
temperature: 0.55,
maxTokens: 280,
stopSequences: ["\nUser:", "\nAssistant:", "\nDoolittle:"],
diff --git a/packages/agent/src/runtime/chat-turn/native/prompt-cache-integration.test.ts b/packages/agent/src/runtime/chat-turn/native/prompt-cache-integration.test.ts
new file mode 100644
index 00000000..8af15bd8
--- /dev/null
+++ b/packages/agent/src/runtime/chat-turn/native/prompt-cache-integration.test.ts
@@ -0,0 +1,62 @@
+import { describe, expect, it } from "bun:test";
+import type { AgentExecutionContext } from "@/runtime/chat";
+import type { TurnState } from "../state";
+import { buildShortcutPromptCache } from "./shortcuts";
+
+function context(provider: string): AgentExecutionContext {
+ return {
+ services: {
+ settings: { get: () => ({ model: { provider, model: "m1" } }) },
+ personalities: { getActive: () => ({ id: "p1" }) },
+ },
+ runtime: { logger: { debug: () => {} } },
+ } as unknown as AgentExecutionContext;
+}
+
+const turn = { roomId: "room-1" } as unknown as TurnState;
+
+describe("buildShortcutPromptCache (cache funnel at the real seam)", () => {
+ it("emits lossless promptSegments for an explicit provider (anthropic)", () => {
+ const r = buildShortcutPromptCache({
+ context: context("anthropic"),
+ turn,
+ stableBlocks: ["SYS"],
+ volatile: "USER",
+ });
+ expect(r.prompt).toBe("SYS\nUSER");
+ expect(r.promptSegments).toBeDefined();
+ // The exact invariant the SDK requires of anything passed to useModel.
+ expect(r.promptSegments?.map((s) => s.content).join("")).toBe(r.prompt);
+ expect(r.promptSegments?.at(0)?.stable).toBe(true);
+ expect(r.promptSegments?.at(-1)?.stable).toBe(false);
+ });
+
+ it("emits NO segments for a non-caching provider (devin)", () => {
+ const r = buildShortcutPromptCache({
+ context: context("devin"),
+ turn,
+ stableBlocks: ["SYS"],
+ volatile: "USER",
+ });
+ expect(r.prompt).toBe("SYS\nUSER");
+ expect(r.promptSegments).toBeUndefined();
+ expect(r.providerOptions).toBeUndefined();
+ });
+
+ it("scopes OpenAI provider options with a stable cache key + conversation id", () => {
+ const r = buildShortcutPromptCache({
+ context: context("openai"),
+ turn,
+ stableBlocks: ["SYS"],
+ volatile: "USER",
+ });
+ const opts = r.providerOptions as
+ | {
+ openai?: { promptCacheKey?: string };
+ eliza?: { conversationId?: string };
+ }
+ | undefined;
+ expect(opts?.openai?.promptCacheKey).toBeTruthy();
+ expect(opts?.eliza?.conversationId).toBe("room-1");
+ });
+});
diff --git a/packages/agent/src/runtime/chat-turn/native/shortcuts.ts b/packages/agent/src/runtime/chat-turn/native/shortcuts.ts
index a959eacf..4d61b0ca 100644
--- a/packages/agent/src/runtime/chat-turn/native/shortcuts.ts
+++ b/packages/agent/src/runtime/chat-turn/native/shortcuts.ts
@@ -1,5 +1,9 @@
-import { ModelType } from "@elizaos/core";
+import { ModelType, type PromptSegment } from "@elizaos/core";
import type { AgentExecutionContext, AgentTurnHooks } from "@/runtime/chat";
+import {
+ buildCacheablePrompt,
+ promptCacheMetrics,
+} from "@/runtime/prompt-cache";
import { renderDoolittleSoulContext } from "@/runtime/soul";
import type { TurnClassification } from "@/runtime/turn-classification/types";
import { finalizeTurnResponse, isTurnReadinessMessage } from "../finalization";
@@ -227,15 +231,35 @@ function isPresenceOrSmallTalkPrompt(message: string): boolean {
);
}
-export function buildDirectInformationalPrompt(input: {
+export interface DirectInformationalPromptParts {
+ /**
+ * Cache-stable prefix: identity, character voice, soul, and the conversation
+ * contract. Identical across calls for the same character + social mode, so
+ * it is the cacheable prompt prefix.
+ */
+ stablePrefix: string;
+ /**
+ * Volatile suffix: recent conversation, durable memory, runtime facts, and
+ * the user message. Changes every call β never cached as stable.
+ */
+ volatileSuffix: string;
+}
+
+/**
+ * Build the direct-informational prompt split into a cache-stable prefix and a
+ * volatile suffix. The split preserves the exact wire prompt:
+ * `stablePrefix + "\n" + volatileSuffix` equals the original joined string, so
+ * segmentation never changes what the model is asked.
+ */
+export function buildDirectInformationalPromptParts(input: {
context: AgentExecutionContext;
turn: TurnState;
userId: string;
message: string;
-}): string {
+}): DirectInformationalPromptParts {
const settings = input.context.services.settings.get();
const socialMode = isPresenceOrSmallTalkPrompt(input.message);
- return [
+ const stableLines = [
`You are ${input.turn.agentName}.`,
"",
...buildCharacterVoiceContext(input.context),
@@ -252,7 +276,8 @@ export function buildDirectInformationalPrompt(input: {
socialMode
? "- This turn is social/presence-oriented. Do not redirect immediately to work; meet the user first."
: "- This turn is informational. Be natural first, then useful.",
- "",
+ ];
+ const volatileLines = [
...buildRecentConversationContext({
context: input.context,
sessionId: input.turn.sessionId,
@@ -274,7 +299,74 @@ export function buildDirectInformationalPrompt(input: {
"",
`User: ${input.message.trim()}`,
`${input.turn.agentName}:`,
- ].join("\n");
+ ];
+ return {
+ stablePrefix: stableLines.join("\n"),
+ volatileSuffix: volatileLines.join("\n"),
+ };
+}
+
+export function buildDirectInformationalPrompt(input: {
+ context: AgentExecutionContext;
+ turn: TurnState;
+ userId: string;
+ message: string;
+}): string {
+ const { stablePrefix, volatileSuffix } =
+ buildDirectInformationalPromptParts(input);
+ return `${stablePrefix}\n${volatileSuffix}`;
+}
+
+export interface ShortcutPromptCache {
+ prompt: string;
+ promptSegments?: PromptSegment[];
+ providerOptions?: Record;
+}
+
+/**
+ * Apply Doolittle's shared prompt-cache segmentation to a fast-path prompt and
+ * record the plan for observability. Every shortcut model call routes through
+ * this one helper so provider prompt caching is never hand-rolled per call
+ * site. The returned `prompt` is always the exact text that would have been
+ * sent; `promptSegments`/`providerOptions` are populated only for caching
+ * providers.
+ */
+export function buildShortcutPromptCache(args: {
+ context: AgentExecutionContext;
+ turn: TurnState;
+ stableBlocks: string[];
+ volatile: string;
+}): ShortcutPromptCache {
+ const settings = args.context.services.settings.get();
+ // The active personality id is part of the stable-prefix version fingerprint
+ // (a persona switch rotates the cache key). Accessed defensively so the fast
+ // path never depends on the personality service being present.
+ const personalityId =
+ (
+ args.context.services as {
+ personalities?: { getActive?: () => { id?: string } };
+ }
+ ).personalities?.getActive?.()?.id ?? "default";
+ const cacheable = buildCacheablePrompt({
+ stableBlocks: args.stableBlocks,
+ volatile: args.volatile,
+ joiner: "\n",
+ provider: settings.model.provider,
+ model: settings.model.model,
+ versionDigest: personalityId,
+ conversationId:
+ args.turn.roomId != null ? String(args.turn.roomId) : undefined,
+ });
+ promptCacheMetrics.recordPlan(cacheable.stats);
+ args.context.runtime.logger?.debug?.(
+ { src: "doolittle:prompt-cache", ...cacheable.stats },
+ "[DOOLITTLE] prompt cache plan",
+ );
+ return {
+ prompt: cacheable.prompt,
+ promptSegments: cacheable.promptSegments,
+ providerOptions: cacheable.providerOptions,
+ };
}
export function normalizeDirectInformationalResponse(
@@ -306,7 +398,14 @@ export async function handleDirectInformationalModelTurn(input: {
return undefined;
}
- const prompt = buildDirectInformationalPrompt(input);
+ const parts = buildDirectInformationalPromptParts(input);
+ const cache = buildShortcutPromptCache({
+ context: input.context,
+ turn: input.turn,
+ stableBlocks: [parts.stablePrefix],
+ volatile: parts.volatileSuffix,
+ });
+ const prompt = cache.prompt;
const startedAt = performance.now();
const settings = input.context.services.settings.get();
recordTrajectoryEvent(input.context, {
@@ -342,6 +441,8 @@ export async function handleDirectInformationalModelTurn(input: {
run: () =>
input.context.runtime.useModel(ModelType.TEXT_SMALL, {
prompt,
+ promptSegments: cache.promptSegments,
+ providerOptions: cache.providerOptions,
temperature: 0.35,
maxTokens: input.classification.simpleChat ? 96 : 192,
stopSequences: ["\nUser:", "\nAssistant:", "\nDoolittle:"],
diff --git a/packages/agent/src/runtime/chat-turn/post-command.ts b/packages/agent/src/runtime/chat-turn/post-command.ts
index 55d42392..5968f67c 100644
--- a/packages/agent/src/runtime/chat-turn/post-command.ts
+++ b/packages/agent/src/runtime/chat-turn/post-command.ts
@@ -39,46 +39,61 @@ export async function runPostCommandTurn(
): Promise {
const prepared = preparedTurn ?? prepareTurnState(input, context);
const turn = prepared.turn;
- await ensureTurnConnection(context, {
- entityId: turn.entityId,
- roomId: turn.roomId,
- worldId: turn.worldId,
- source: turn.connectionSource,
- channelId: turn.localInteractive ? turn.sessionId : turn.worldId,
- messageServerId: turn.messageServerId,
- });
- await ensureLocalInteractiveSettingsState(context, turn);
+ try {
+ await ensureTurnConnection(context, {
+ entityId: turn.entityId,
+ roomId: turn.roomId,
+ worldId: turn.worldId,
+ source: turn.connectionSource,
+ channelId: turn.localInteractive ? turn.sessionId : turn.worldId,
+ messageServerId: turn.messageServerId,
+ });
+ await ensureLocalInteractiveSettingsState(context, turn);
- const shellResponse = await runner.runShellPostCommandTurn({
- input,
- effectiveInput,
- context,
- options,
- perf,
- preparedTurn: prepared,
- });
- if (shellResponse !== undefined) {
- return shellResponse;
- }
+ const shellResponse = await runner.runShellPostCommandTurn({
+ input,
+ effectiveInput,
+ context,
+ options,
+ perf,
+ preparedTurn: prepared,
+ });
+ if (shellResponse !== undefined) {
+ return shellResponse;
+ }
- const nativeTurnSetup = runner.prepareNativeTurnSetup({
- input,
- effectiveInput,
- context,
- preparedTurn: prepared,
- });
- const settingsDuring = applyRuntimeOverrides(
- nativeTurnSetup.settingsBefore,
- options?.runtimeOverrides,
- );
+ const nativeTurnSetup = runner.prepareNativeTurnSetup({
+ input,
+ effectiveInput,
+ context,
+ preparedTurn: prepared,
+ });
+ const settingsDuring = applyRuntimeOverrides(
+ nativeTurnSetup.settingsBefore,
+ options?.runtimeOverrides,
+ );
- return runner.runNativeMessageTurn({
- input,
- effectiveInput,
- context,
- options,
- perf,
- turnSetup: nativeTurnSetup,
- settingsDuring,
- });
+ return runner.runNativeMessageTurn({
+ input,
+ effectiveInput,
+ context,
+ options,
+ perf,
+ turnSetup: nativeTurnSetup,
+ settingsDuring,
+ });
+ } catch (error) {
+ // Guarantee the run is finished even when execution throws before any
+ // success/error path finalizes it β otherwise the run is stranded in
+ // "thinking". Guard on the active run so an inner path that already
+ // finalized (and rethrew) is never double-finished.
+ if (context.services.runController.getActive(turn.sessionId)) {
+ context.services.runController.finishTurn(
+ turn.sessionId,
+ "error",
+ error instanceof Error ? error.message : String(error),
+ );
+ }
+ throw error;
+ }
}
diff --git a/packages/agent/src/runtime/chat-turn/post-provider.ts b/packages/agent/src/runtime/chat-turn/post-provider.ts
index 9b7aa135..ec69a429 100644
--- a/packages/agent/src/runtime/chat-turn/post-provider.ts
+++ b/packages/agent/src/runtime/chat-turn/post-provider.ts
@@ -50,6 +50,7 @@ export async function runPostProviderTurn(
observedActionCount,
actionResults: input.actionResults,
localMutations: activeRun?.localMutations,
+ commandResults: actionResultSummary.commandResults,
runFailureMessage: fallbackResult.runFailureMessage,
});
const runFailureMessage = executionAssessment.ok
diff --git a/packages/agent/src/runtime/chat-turn/post-provider/fallback.test.ts b/packages/agent/src/runtime/chat-turn/post-provider/fallback.test.ts
new file mode 100644
index 00000000..16ba4e14
--- /dev/null
+++ b/packages/agent/src/runtime/chat-turn/post-provider/fallback.test.ts
@@ -0,0 +1,61 @@
+import { describe, expect, it } from "bun:test";
+import { resolvePostProviderFallback } from "./fallback";
+
+type FallbackInput = Parameters[0];
+
+function makeInput(aborted: boolean, onLoad: () => void): FallbackInput {
+ const controller = new AbortController();
+ if (aborted) {
+ controller.abort();
+ }
+ return {
+ context: {
+ services: {
+ runController: { getActive: () => undefined, finishTurn: () => {} },
+ },
+ },
+ effectiveInput: { message: "scaffold the project" },
+ turn: { sessionId: "s1", localInteractive: true },
+ options: { abortSignal: controller.signal },
+ loadDirectLocalIntent: async () => {
+ onLoad();
+ return {
+ directLocalIntent: undefined,
+ shouldUseDirectLocalFallback: () => false,
+ isHighConfidenceDirectLocalIntent: () => false,
+ requiresModelSynthesisForLocalIntent: () => false,
+ executeDirectLocalIntent: async () => "",
+ };
+ },
+ approveDirectLocalIntent: async () => undefined,
+ actionResults: [],
+ response: "",
+ runFailureMessage: "aborted by user",
+ } as unknown as FallbackInput;
+}
+
+describe("resolvePostProviderFallback abort handling", () => {
+ it("never runs the direct-local fallback when the turn was aborted", async () => {
+ let loaded = false;
+ const result = await resolvePostProviderFallback(
+ makeInput(true, () => {
+ loaded = true;
+ }),
+ );
+ // The fallback loader must not even be consulted β otherwise cancelled work
+ // could re-execute.
+ expect(loaded).toBe(false);
+ expect(result).toMatchObject({ kind: "continue", usedFallback: false });
+ });
+
+ it("consults the fallback loader on a non-aborted failed turn", async () => {
+ let loaded = false;
+ const result = await resolvePostProviderFallback(
+ makeInput(false, () => {
+ loaded = true;
+ }),
+ );
+ expect(loaded).toBe(true);
+ expect(result).toMatchObject({ kind: "continue" });
+ });
+});
diff --git a/packages/agent/src/runtime/chat-turn/post-provider/fallback.ts b/packages/agent/src/runtime/chat-turn/post-provider/fallback.ts
index 81ceb667..aaee855b 100644
--- a/packages/agent/src/runtime/chat-turn/post-provider/fallback.ts
+++ b/packages/agent/src/runtime/chat-turn/post-provider/fallback.ts
@@ -51,6 +51,19 @@ export async function resolvePostProviderFallback(
summarizeActionResults(input.actionResults).observedActionCount,
);
+ // If the user aborted, never run the direct-local fallback β an abort
+ // surfaces as a runFailureMessage, and falling through would re-execute the
+ // exact work the user just cancelled.
+ if (input.options?.abortSignal?.aborted) {
+ return {
+ kind: "continue",
+ observedActionCount,
+ response,
+ runFailureMessage,
+ usedFallback: false,
+ };
+ }
+
const fallbackModule = shouldLoadDirectLocalIntentFallback({
localInteractive: input.turn.localInteractive,
observedActionCount,
diff --git a/packages/agent/src/runtime/command-catalog/render.ts b/packages/agent/src/runtime/command-catalog/render.ts
index 9ce07a60..082bd949 100644
--- a/packages/agent/src/runtime/command-catalog/render.ts
+++ b/packages/agent/src/runtime/command-catalog/render.ts
@@ -8,9 +8,11 @@ export function renderCommandCatalog(
workspaceDir?: string,
): string {
const catalog = getCommandCatalogEntries(workspaceDir);
+ // Browse (no query) shows the entire catalog β never silently drop commands;
+ // the `limit` only bounds ranked search results.
const entries = query?.trim()
? rankCommandCatalogEntries(catalog, query, limit)
- : catalog.slice(0, limit);
+ : catalog;
return entries
.map(
diff --git a/packages/agent/src/runtime/commands/runtime-workspace/status.ts b/packages/agent/src/runtime/commands/runtime-workspace/status.ts
index 854b8e9b..26499c07 100644
--- a/packages/agent/src/runtime/commands/runtime-workspace/status.ts
+++ b/packages/agent/src/runtime/commands/runtime-workspace/status.ts
@@ -3,8 +3,21 @@ import {
getEffectiveMemorySnapshot,
getNativeOwnershipControlPlane,
} from "@/runtime/native/service-bridge/ownership";
+import { promptCacheMetrics } from "@/runtime/prompt-cache";
import type { ChatTurnRequest } from "@/types/runtime";
+function formatPromptCacheSummary(): string {
+ const snapshot = promptCacheMetrics.snapshot();
+ if (snapshot.calls === 0) {
+ return "no Doolittle model calls yet";
+ }
+ const base = `${snapshot.calls} calls, ${snapshot.eligibleCalls} eligible, ${snapshot.segmentsEmitted} segmented`;
+ if (snapshot.usageSamples === 0) {
+ return base;
+ }
+ return `${base}; hit-rate ${Math.round(snapshot.hitRate * 100)}% (${snapshot.cacheReadTokens} tok from cache)`;
+}
+
import type { AgentExecutionContext } from "../../chat";
import {
formatExperienceSummary,
@@ -69,6 +82,7 @@ function buildCommonStatusLines(
`Transport inventory: ${ownership.transportControl.totals.operationalTransports}/${ownership.transportControl.transportInventory.length} operational`,
`Gateway bridges: ${ownership.transportControl.totals.liveServices}/${ownership.transportControl.totals.gatewayEnabled} live`,
`Memory summary: ${formatMemorySummary(memorySummary)}`,
+ `Prompt cache: ${formatPromptCacheSummary()}`,
],
};
}
diff --git a/packages/agent/src/runtime/commands/tooling/shared.ts b/packages/agent/src/runtime/commands/tooling/shared.ts
index 13eb4ce0..51c45563 100644
--- a/packages/agent/src/runtime/commands/tooling/shared.ts
+++ b/packages/agent/src/runtime/commands/tooling/shared.ts
@@ -5,10 +5,16 @@ export function parseNamedToolPayload(
if (!toolName) {
return undefined;
}
- return {
- toolName,
- parsedInput: inputRaw
- ? (JSON.parse(inputRaw) as Record)
- : {},
- };
+ if (!inputRaw) {
+ return { toolName, parsedInput: {} };
+ }
+ try {
+ return {
+ toolName,
+ parsedInput: JSON.parse(inputRaw) as Record,
+ };
+ } catch {
+ // Malformed JSON input β surface a usage message rather than crashing the turn.
+ return undefined;
+ }
}
diff --git a/packages/agent/src/runtime/linked-provider-accounts/messages.ts b/packages/agent/src/runtime/linked-provider-accounts/messages.ts
index 344f1e26..524cd07f 100644
--- a/packages/agent/src/runtime/linked-provider-accounts/messages.ts
+++ b/packages/agent/src/runtime/linked-provider-accounts/messages.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import { displayCommand } from "@/runtime/commands/command-execution";
export const ELIZA_CLOUD_BILLING_URL =
diff --git a/packages/agent/src/runtime/linked-provider-accounts/model-settings.ts b/packages/agent/src/runtime/linked-provider-accounts/model-settings.ts
index 117a062d..a309c4c7 100644
--- a/packages/agent/src/runtime/linked-provider-accounts/model-settings.ts
+++ b/packages/agent/src/runtime/linked-provider-accounts/model-settings.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import type { AgentExecutionContext } from "../chat";
import { normalizeElizaCloudBaseUrl } from "./messages";
import type { LinkedProviderName } from "./types";
diff --git a/packages/agent/src/runtime/linked-provider-accounts/readiness.test.ts b/packages/agent/src/runtime/linked-provider-accounts/readiness.test.ts
index 1c669d1b..95c7ce78 100644
--- a/packages/agent/src/runtime/linked-provider-accounts/readiness.test.ts
+++ b/packages/agent/src/runtime/linked-provider-accounts/readiness.test.ts
@@ -49,7 +49,7 @@ function installReadinessMocks() {
},
}));
- mock.module("@elizaos/agent/cloud/validate-url", () => ({
+ mock.module("@elizaos/autonomous/cloud/validate-url", () => ({
validateCloudBaseUrl: async () => null,
}));
}
diff --git a/packages/agent/src/runtime/linked-provider-accounts/readiness.ts b/packages/agent/src/runtime/linked-provider-accounts/readiness.ts
index 5a62a4cf..97959c79 100644
--- a/packages/agent/src/runtime/linked-provider-accounts/readiness.ts
+++ b/packages/agent/src/runtime/linked-provider-accounts/readiness.ts
@@ -1,4 +1,4 @@
-import { validateCloudBaseUrl } from "@elizaos/agent/cloud/validate-url";
+import { validateCloudBaseUrl } from "@elizaos/autonomous/cloud/validate-url";
import { displayCommand } from "@/runtime/commands/command-execution";
import {
getLinkedProviderAccountsSnapshot,
diff --git a/packages/agent/src/runtime/native/account-auth/elizacloud-support.ts b/packages/agent/src/runtime/native/account-auth/elizacloud-support.ts
index 36edf9ef..f40ba4c9 100644
--- a/packages/agent/src/runtime/native/account-auth/elizacloud-support.ts
+++ b/packages/agent/src/runtime/native/account-auth/elizacloud-support.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import { commandExists } from "./shared";
import {
getStoredElizaCloudCredentials,
diff --git a/packages/agent/src/runtime/native/account-auth/store.ts b/packages/agent/src/runtime/native/account-auth/store.ts
index a1dfad64..fb32d970 100644
--- a/packages/agent/src/runtime/native/account-auth/store.ts
+++ b/packages/agent/src/runtime/native/account-auth/store.ts
@@ -1,6 +1,6 @@
import { existsSync } from "node:fs";
import { isAbsolute, join } from "node:path";
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import { hasTokenCredentials } from "./credentials";
import { readJson, writeJson } from "./shared";
import type {
diff --git a/packages/agent/src/runtime/native/autonomous-stack/index.ts b/packages/agent/src/runtime/native/autonomous-stack/index.ts
index d6cbb8b7..35baafe9 100644
--- a/packages/agent/src/runtime/native/autonomous-stack/index.ts
+++ b/packages/agent/src/runtime/native/autonomous-stack/index.ts
@@ -1,7 +1,3 @@
-import type {} from "@elizaos/agent";
-import type {} from "@elizaos/autonomous";
-import type {} from "@elizaos/skills";
-
export { describeAutonomousAlignment } from "./alignment";
export { buildAutonomousCompatConfig } from "./compat-config";
export { buildAutonomousCompatEnv } from "./compat-env";
diff --git a/packages/agent/src/runtime/native/plugin-registry/local-ollama.ts b/packages/agent/src/runtime/native/plugin-registry/local-ollama.ts
index 04dd9458..a32f2431 100644
--- a/packages/agent/src/runtime/native/plugin-registry/local-ollama.ts
+++ b/packages/agent/src/runtime/native/plugin-registry/local-ollama.ts
@@ -156,7 +156,6 @@ function modelForType(
case ModelType.RESPONSE_HANDLER:
return response;
case ModelType.TEXT_SMALL:
- case ModelType.OBJECT_SMALL:
return small;
case ModelType.TEXT_MEDIUM:
case ModelType.TEXT_REASONING_SMALL:
diff --git a/packages/agent/src/runtime/native/service-bridge/tooling/context.ts b/packages/agent/src/runtime/native/service-bridge/tooling/context.ts
index c48438b5..0299f120 100644
--- a/packages/agent/src/runtime/native/service-bridge/tooling/context.ts
+++ b/packages/agent/src/runtime/native/service-bridge/tooling/context.ts
@@ -4,7 +4,7 @@ import {
createCodingAgentContext,
injectFeedback,
validateCodingAgentContext,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
import type { AppServices } from "@/services";
import type { RuntimeLike } from "../runtime-contracts";
import { getNativeCodingAgent } from "./native-services";
diff --git a/packages/agent/src/runtime/native/service-bridge/tooling/index.test.ts b/packages/agent/src/runtime/native/service-bridge/tooling/index.test.ts
index b576cfac..007f034b 100644
--- a/packages/agent/src/runtime/native/service-bridge/tooling/index.test.ts
+++ b/packages/agent/src/runtime/native/service-bridge/tooling/index.test.ts
@@ -7,7 +7,7 @@ import type {
CodingAgentContext,
CodingIteration,
HumanFeedback,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
import type { AppServices } from "@/services";
import type { RuntimeLike } from "../runtime";
import {
diff --git a/packages/agent/src/runtime/native/service-bridge/tooling/types.ts b/packages/agent/src/runtime/native/service-bridge/tooling/types.ts
index 7410bcc2..fc39ff6d 100644
--- a/packages/agent/src/runtime/native/service-bridge/tooling/types.ts
+++ b/packages/agent/src/runtime/native/service-bridge/tooling/types.ts
@@ -3,7 +3,7 @@ import type {
ConnectorType,
HumanFeedback,
InteractionMode,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
export interface EffectiveCodingAgentContextInput {
sessionId: string;
diff --git a/packages/agent/src/runtime/prompt-cache/README.md b/packages/agent/src/runtime/prompt-cache/README.md
new file mode 100644
index 00000000..5dcbafe5
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/README.md
@@ -0,0 +1,106 @@
+# Doolittle prompt caching
+
+Provider-aware prompt caching for the prompts **Doolittle itself owns** β i.e.
+the direct `runtime.useModel` calls Doolittle makes outside the ElizaOS SDK
+message pipeline.
+
+## TL;DR
+
+- The **SDK already caches** everything routed through `runtime.messageService.handleMessage`
+ (the action / evaluator / planner path). `@elizaos/core` builds `promptSegments`
+ and a full provider cache plan there. **Do not reimplement that.**
+- The only prompts with **zero caching** were Doolittle's own direct `useModel`
+ calls (the chat-turn "shortcut" fast paths). This module fixes exactly those.
+- It is a small, shared abstraction β never hand-rolled per call site.
+
+## Where it lives
+
+```
+runtime/prompt-cache/
+ types.ts # PromptBlock, CacheablePrompt, ProviderCachePolicy, stats
+ provider-policy.ts # provider id -> caching capability (explicit | implicit | none)
+ digest.ts # deterministic hashing + the stable-prefix version fingerprint
+ cacheable-prompt.ts # buildCacheablePrompt(): the segment builder
+ metrics.ts # promptCacheMetrics: observability recorder + snapshot
+```
+
+Integration point: `chat-turn/native/shortcuts.ts#buildShortcutPromptCache`,
+used by all three shortcut handlers (direct-informational + the two
+profile-memory paths). That is the single funnel for Doolittle-owned model
+calls, so caching is applied once and uniformly.
+
+## How it works
+
+1. A prompt is described as a **stable prefix** (character voice, soul,
+ conversation contract β identical across calls for the same character) plus a
+ **volatile suffix** (recent conversation, durable memory, the user message).
+ `buildDirectInformationalPromptParts` splits the fast-path prompt losslessly:
+ `stablePrefix + "\n" + volatileSuffix` equals the original wire prompt.
+2. `buildCacheablePrompt` turns that into SDK `promptSegments` (`{content, stable}`)
+ plus `providerOptions`, preserving the invariant
+ `prompt === promptSegments.map(s => s.content).join("")`.
+3. The segments are passed straight to `runtime.useModel`. The provider plugin
+ does the rest: `@elizaos/plugin-anthropic` emits `cache_control: ephemeral`
+ on the stable segments; `@elizaos/plugin-openai` keys prefix caching by
+ `providerOptions.openai.promptCacheKey`.
+
+## Provider awareness (`provider-policy.ts`)
+
+| Mode | Providers | Behavior |
+|---|---|---|
+| `explicit` | `anthropic`, `openai` (SDK plugins) | Emit `promptSegments` (+ `promptCacheKey` for OpenAI). |
+| `implicit` | `ollama` / local | No hints; an identical leading prefix is reused by the KV cache automatically. |
+| `none` | claude-code, codex, devin, elizacloud (custom plugins), unknown | No-op β those plugins build their own request from `params.prompt` and ignore segments today. |
+
+## Cache keys & invalidation
+
+The cache key is `sha256(templateVersion + versionDigest + provider + model + ...stableBlocks)`.
+It rotates automatically β and the provider therefore treats the prompt as new β
+whenever any of these change:
+
+- **Template** β bump `PROMPT_CACHE_TEMPLATE_VERSION` when segment shape/ordering changes.
+- **Stable content** β character voice, soul, or contract text (hashed directly).
+- **Persona / character** β via `versionDigest` (active personality id today;
+ extend with `computeStablePrefixVersion` for character/tool/settings digests).
+- **Provider / model** β part of the key string.
+
+Volatile content (user input, fresh memory) is **never** part of the key, so it
+can never cause a stale or cross-request hit.
+
+## Observability (`promptCacheMetrics`)
+
+`recordPlan` is called for every cacheable prompt (what we attempted). The
+snapshot reports calls, eligible calls, segments emitted, and stable/volatile
+volume per provider. Each plan is also debug-logged (`src: "doolittle:prompt-cache"`).
+
+`recordUsage` accepts provider cache-token reports (hits/misses/savings) but is
+**not wired** today: the SDK `MODEL_USED` event exposes only
+`{prompt, completion, total}` tokens, not `cacheReadInputTokens`. Surfacing real
+hit-rate requires the SDK to forward cache usage β see "Known limitations".
+
+## Extending
+
+- **A new caching provider:** add a branch to `resolveProviderCachePolicy`.
+- **A new Doolittle-owned `useModel` call:** build a stable/volatile split and
+ route it through `buildShortcutPromptCache` (or `buildCacheablePrompt`
+ directly). Never pass cache hints ad hoc.
+- **Make a custom provider plugin cacheable:** teach it to read
+ `params.promptSegments` / `params.providerOptions`, then move it to `explicit`.
+
+## When NOT to use it
+
+- Don't segment SDK-pipeline prompts (handleMessage) β core already does it.
+- Don't mark anything user-derived, secret, credential-bearing, or per-request
+ as `stable`. Correctness beats cache rate: a wrong stable flag is a stale or
+ leaked prompt.
+
+## Known limitations / follow-ups
+
+- Real hit-rate/token-savings telemetry needs the SDK to forward provider cache
+ usage through `MODEL_USED` (or a usage callback). Today only the *plan* is
+ observable.
+- Custom provider plugins (claude-code, codex, elizacloud) ignore `promptSegments`
+ β make them segment-aware to extend explicit caching to those providers.
+- The SDK main-path **prelude** (`chat-turn/model-input.ts`) still rides as
+ volatile; hoisting its stable half into a static provider would let core cache
+ it. Tracked separately.
diff --git a/packages/agent/src/runtime/prompt-cache/cacheable-prompt.test.ts b/packages/agent/src/runtime/prompt-cache/cacheable-prompt.test.ts
new file mode 100644
index 00000000..e9b409b0
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/cacheable-prompt.test.ts
@@ -0,0 +1,120 @@
+import { describe, expect, it } from "bun:test";
+import { buildCacheablePrompt } from "./cacheable-prompt";
+
+const base = { joiner: "\n", versionDigest: "v1", conversationId: "room1" };
+
+function options(result: { providerOptions?: Record }) {
+ return result.providerOptions as
+ | {
+ openai?: { promptCacheKey?: string };
+ eliza?: { conversationId?: string };
+ }
+ | undefined;
+}
+
+describe("buildCacheablePrompt", () => {
+ it("emits lossless stable + volatile segments for explicit providers", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["SYS", "TOOLS"],
+ volatile: "USER",
+ provider: "anthropic",
+ model: "claude",
+ });
+ expect(r.prompt).toBe("SYS\nTOOLS\nUSER");
+ expect(r.promptSegments).toBeDefined();
+ // The SDK invariant: segments reconstruct the prompt exactly.
+ expect(r.promptSegments?.map((s) => s.content).join("")).toBe(r.prompt);
+ expect(r.promptSegments?.filter((s) => s.stable).length).toBe(2);
+ expect(r.promptSegments?.at(-1)?.stable).toBe(false);
+ expect(r.stats).toMatchObject({ mode: "explicit", segmentsEmitted: true });
+ });
+
+ it("sets openai promptCacheKey + eliza conversationId for OpenAI-family", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["SYS"],
+ volatile: "U",
+ provider: "openai",
+ model: "gpt",
+ });
+ expect(options(r)?.openai?.promptCacheKey).toBe(r.cacheKey);
+ expect(options(r)?.eliza?.conversationId).toBe("room1");
+ });
+
+ it("does NOT emit segments for implicit providers (ollama) but stays eligible", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["SYS"],
+ volatile: "U",
+ provider: "ollama",
+ model: "granite",
+ });
+ expect(r.promptSegments).toBeUndefined();
+ expect(r.providerOptions).toBeUndefined();
+ expect(r.prompt).toBe("SYS\nU");
+ expect(r.stats).toMatchObject({
+ mode: "implicit",
+ eligible: true,
+ segmentsEmitted: false,
+ });
+ });
+
+ it("is a no-op for providers with no caching (devin / CLI)", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["SYS"],
+ volatile: "U",
+ provider: "devin",
+ model: "x",
+ });
+ expect(r.promptSegments).toBeUndefined();
+ expect(r.stats).toMatchObject({ mode: "none", eligible: false });
+ });
+
+ it("caps stable segments to the provider breakpoint budget, losslessly", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["A", "B", "C"],
+ volatile: "U",
+ provider: "openai", // maxStableBreakpoints = 1
+ model: "gpt",
+ });
+ expect(r.promptSegments?.filter((s) => s.stable).length).toBe(1);
+ expect(r.promptSegments?.map((s) => s.content).join("")).toBe(r.prompt);
+ expect(r.prompt).toBe("A\nB\nC\nU");
+ });
+
+ it("produces deterministic keys that rotate on every invalidation input", () => {
+ const key = (over: Record) =>
+ buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["SYS"],
+ volatile: "U",
+ provider: "anthropic",
+ model: "claude",
+ ...over,
+ }).cacheKey;
+ const baseline = key({});
+ expect(key({})).toBe(baseline); // deterministic
+ expect(key({ versionDigest: "v2" })).not.toBe(baseline); // persona/character change
+ expect(key({ model: "claude-2" })).not.toBe(baseline); // model change
+ expect(key({ provider: "openai" })).not.toBe(baseline); // provider change
+ expect(key({ stableBlocks: ["SYS2"] })).not.toBe(baseline); // stable content change
+ // volatile content must NOT affect the key
+ expect(key({ volatile: "different user input" })).toBe(baseline);
+ });
+
+ it("emits nothing when there is no stable content", () => {
+ const r = buildCacheablePrompt({
+ ...base,
+ stableBlocks: ["", ""],
+ volatile: "U",
+ provider: "anthropic",
+ model: "claude",
+ });
+ expect(r.promptSegments).toBeUndefined();
+ expect(r.prompt).toBe("U");
+ expect(r.stats.eligible).toBe(false);
+ });
+});
diff --git a/packages/agent/src/runtime/prompt-cache/cacheable-prompt.ts b/packages/agent/src/runtime/prompt-cache/cacheable-prompt.ts
new file mode 100644
index 00000000..b40024c3
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/cacheable-prompt.ts
@@ -0,0 +1,150 @@
+import type { PromptSegment } from "@elizaos/core";
+import { hashParts, PROMPT_CACHE_TEMPLATE_VERSION } from "./digest";
+import { resolveProviderCachePolicy } from "./provider-policy";
+import type {
+ CacheablePrompt,
+ PromptCacheStats,
+ ProviderCachePolicy,
+} from "./types";
+
+export interface BuildCacheablePromptInput {
+ /**
+ * Ordered stable prefix blocks β content that is identical across calls for
+ * the same character / schema / tool set (character voice, soul, conversation
+ * contract, runtime facts, per-path instructions, tool schemas).
+ */
+ stableBlocks: string[];
+ /**
+ * The volatile suffix β content that changes every call (fresh memory and
+ * conversation context, the user message, timestamps, ids). NEVER cached as
+ * stable.
+ */
+ volatile: string;
+ /** Separator between every block; must match how the original prompt joins. */
+ joiner?: string;
+ /** Resolved provider id (settings `model.provider`). */
+ provider: string | undefined;
+ /** Resolved model id (settings `model.model`). */
+ model: string | undefined;
+ /** Stable-prefix version fingerprint β see `computeStablePrefixVersion`. */
+ versionDigest: string;
+ /** Slot key for provider cache scoping (typically the room id). */
+ conversationId?: string;
+}
+
+/**
+ * Segment a Doolittle-owned prompt into a cacheable stable prefix + volatile
+ * suffix and produce the `promptSegments` / `providerOptions` to pass to
+ * `runtime.useModel`. Provider-aware and lossless:
+ * `prompt === promptSegments.map(s => s.content).join("")` always holds when
+ * segments are emitted. On any inconsistency it degrades safely to the plain
+ * prompt β caching is never allowed to change what the model is asked.
+ */
+export function buildCacheablePrompt(
+ input: BuildCacheablePromptInput,
+): CacheablePrompt {
+ const joiner = input.joiner ?? "\n";
+ const provider = input.provider ?? "unknown";
+ const model = input.model ?? "unknown";
+ const stableBlocks = input.stableBlocks.filter((block) => block.length > 0);
+ const volatile = input.volatile;
+ const policy = resolveProviderCachePolicy(provider);
+
+ const prompt = [...stableBlocks, volatile].join(joiner);
+ const stableChars = stableBlocks.reduce((total, b) => total + b.length, 0);
+ const cacheKey = hashParts([
+ PROMPT_CACHE_TEMPLATE_VERSION,
+ input.versionDigest,
+ provider,
+ model,
+ ...stableBlocks,
+ ]).slice(0, 32);
+
+ const eligible = policy.mode !== "none" && stableBlocks.length > 0;
+ const stats: PromptCacheStats = {
+ provider,
+ model,
+ mode: policy.mode,
+ cacheKey,
+ stableChars,
+ volatileChars: volatile.length,
+ stableSegments: 0,
+ eligible,
+ segmentsEmitted: false,
+ };
+
+ // Explicit-mode providers (Anthropic / OpenAI-family) are the only ones that
+ // consume promptSegments. Implicit providers (ollama) already benefit from an
+ // identical leading prefix, and `none` providers cannot cache at all β for
+ // both we send the plain prompt unchanged.
+ if (!eligible || policy.mode !== "explicit") {
+ return { prompt, cacheKey, stats };
+ }
+
+ const cappedStable = capStableBlocks(
+ stableBlocks,
+ policy.maxStableBreakpoints,
+ joiner,
+ );
+ const promptSegments: PromptSegment[] = [
+ ...cappedStable.map((content) => ({
+ content: content + joiner,
+ stable: true,
+ })),
+ { content: volatile, stable: false },
+ ];
+
+ if (promptSegments.map((s) => s.content).join("") !== prompt) {
+ // Lossless invariant violated β never send an altered prompt.
+ return { prompt, cacheKey, stats };
+ }
+
+ return {
+ prompt,
+ promptSegments,
+ providerOptions: buildProviderOptions(
+ policy,
+ cacheKey,
+ input.conversationId,
+ ),
+ cacheKey,
+ stats: {
+ ...stats,
+ stableSegments: cappedStable.length,
+ segmentsEmitted: true,
+ },
+ };
+}
+
+/**
+ * Merge leading blocks until the count fits the provider's breakpoint budget.
+ * Only ever called for explicit-mode providers (max >= 1) with a non-empty
+ * block list, so the merge is always well-defined.
+ */
+function capStableBlocks(
+ blocks: string[],
+ max: number,
+ joiner: string,
+): string[] {
+ if (blocks.length <= max) {
+ return blocks;
+ }
+ const mergeCount = blocks.length - max + 1;
+ const merged = blocks.slice(0, mergeCount).join(joiner);
+ return [merged, ...blocks.slice(mergeCount)];
+}
+
+function buildProviderOptions(
+ policy: ProviderCachePolicy,
+ cacheKey: string,
+ conversationId: string | undefined,
+): Record | undefined {
+ const options: Record = {};
+ if (policy.emitsPromptCacheKey) {
+ options.openai = { promptCacheKey: cacheKey };
+ }
+ if (conversationId) {
+ options.eliza = { conversationId };
+ }
+ return Object.keys(options).length > 0 ? options : undefined;
+}
diff --git a/packages/agent/src/runtime/prompt-cache/digest.test.ts b/packages/agent/src/runtime/prompt-cache/digest.test.ts
new file mode 100644
index 00000000..76e03c6c
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/digest.test.ts
@@ -0,0 +1,65 @@
+import { describe, expect, it } from "bun:test";
+import {
+ computeStablePrefixVersion,
+ hashParts,
+ hashStableJson,
+ PROMPT_CACHE_TEMPLATE_VERSION,
+} from "./digest";
+
+describe("hashParts", () => {
+ it("is deterministic and order-sensitive", () => {
+ expect(hashParts(["a", "b"])).toBe(hashParts(["a", "b"]));
+ expect(hashParts(["a", "b"])).not.toBe(hashParts(["b", "a"]));
+ });
+
+ it("is not fooled by boundary ambiguity (delimiter is hashed)", () => {
+ expect(hashParts(["a", "b"])).not.toBe(hashParts(["ab"]));
+ });
+});
+
+describe("hashStableJson", () => {
+ it("is independent of key order", () => {
+ expect(hashStableJson({ a: 1, b: 2 })).toBe(hashStableJson({ b: 2, a: 1 }));
+ });
+
+ it("ignores undefined values", () => {
+ expect(hashStableJson({ a: 1, b: undefined })).toBe(
+ hashStableJson({ a: 1 }),
+ );
+ });
+
+ it("distinguishes different values", () => {
+ expect(hashStableJson({ a: 1 })).not.toBe(hashStableJson({ a: 2 }));
+ });
+});
+
+describe("computeStablePrefixVersion", () => {
+ it("rotates when any input changes", () => {
+ const baseline = computeStablePrefixVersion({ characterDigest: "c1" });
+ expect(computeStablePrefixVersion({ characterDigest: "c1" })).toBe(
+ baseline,
+ );
+ expect(computeStablePrefixVersion({ characterDigest: "c2" })).not.toBe(
+ baseline,
+ );
+ expect(
+ computeStablePrefixVersion({
+ characterDigest: "c1",
+ personalityId: "p1",
+ }),
+ ).not.toBe(baseline);
+ expect(
+ computeStablePrefixVersion({
+ characterDigest: "c1",
+ toolsetDigest: "t1",
+ }),
+ ).not.toBe(baseline);
+ });
+
+ it("embeds the template version so a bump invalidates all keys", () => {
+ // The template version is part of the digest input β documented invariant.
+ expect(PROMPT_CACHE_TEMPLATE_VERSION.length).toBeGreaterThan(0);
+ const v = computeStablePrefixVersion({ characterDigest: "c1" });
+ expect(v).toHaveLength(32);
+ });
+});
diff --git a/packages/agent/src/runtime/prompt-cache/digest.ts b/packages/agent/src/runtime/prompt-cache/digest.ts
new file mode 100644
index 00000000..e1715d84
Binary files /dev/null and b/packages/agent/src/runtime/prompt-cache/digest.ts differ
diff --git a/packages/agent/src/runtime/prompt-cache/index.ts b/packages/agent/src/runtime/prompt-cache/index.ts
new file mode 100644
index 00000000..47c40fdb
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/index.ts
@@ -0,0 +1,23 @@
+export type { BuildCacheablePromptInput } from "./cacheable-prompt";
+export { buildCacheablePrompt } from "./cacheable-prompt";
+export {
+ computeStablePrefixVersion,
+ hashParts,
+ hashStableJson,
+ PROMPT_CACHE_TEMPLATE_VERSION,
+ type StablePrefixInputs,
+} from "./digest";
+export {
+ type PromptCacheProviderSnapshot,
+ type PromptCacheSnapshot,
+ type PromptCacheUsageSample,
+ promptCacheMetrics,
+} from "./metrics";
+export { resolveProviderCachePolicy } from "./provider-policy";
+export type {
+ CacheablePrompt,
+ PromptBlock,
+ PromptCacheStats,
+ ProviderCacheMode,
+ ProviderCachePolicy,
+} from "./types";
diff --git a/packages/agent/src/runtime/prompt-cache/metrics.test.ts b/packages/agent/src/runtime/prompt-cache/metrics.test.ts
new file mode 100644
index 00000000..b428d896
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/metrics.test.ts
@@ -0,0 +1,74 @@
+import { beforeEach, describe, expect, it } from "bun:test";
+import { promptCacheMetrics } from "./metrics";
+import type { PromptCacheStats } from "./types";
+
+function stats(over: Partial = {}): PromptCacheStats {
+ return {
+ provider: "anthropic",
+ model: "claude",
+ mode: "explicit",
+ cacheKey: "k",
+ stableChars: 100,
+ volatileChars: 10,
+ stableSegments: 1,
+ eligible: true,
+ segmentsEmitted: true,
+ ...over,
+ };
+}
+
+describe("promptCacheMetrics", () => {
+ beforeEach(() => promptCacheMetrics.reset());
+
+ it("aggregates plan records globally and per provider", () => {
+ promptCacheMetrics.recordPlan(stats());
+ promptCacheMetrics.recordPlan(
+ stats({ provider: "ollama", mode: "implicit", segmentsEmitted: false }),
+ );
+ promptCacheMetrics.recordPlan(
+ stats({
+ provider: "devin",
+ mode: "none",
+ eligible: false,
+ segmentsEmitted: false,
+ }),
+ );
+ const snap = promptCacheMetrics.snapshot();
+ expect(snap.calls).toBe(3);
+ expect(snap.eligibleCalls).toBe(2);
+ expect(snap.segmentsEmitted).toBe(1);
+ expect(snap.byProvider.anthropic.calls).toBe(1);
+ expect(snap.byProvider.anthropic.segmentsEmitted).toBe(1);
+ expect(snap.byProvider.ollama.eligible).toBe(1);
+ expect(snap.byProvider.devin.eligible).toBe(0);
+ });
+
+ it("computes hits / misses / hitRate and token savings from usage", () => {
+ promptCacheMetrics.recordUsage({
+ promptTokens: 1000,
+ cacheReadTokens: 800,
+ });
+ promptCacheMetrics.recordUsage({ promptTokens: 1000, cacheReadTokens: 0 });
+ const snap = promptCacheMetrics.snapshot();
+ expect(snap.cacheHits).toBe(1);
+ expect(snap.cacheMisses).toBe(1);
+ expect(snap.hitRate).toBe(0.5);
+ expect(snap.promptTokens).toBe(2000);
+ expect(snap.estimatedTokensSaved).toBe(800);
+ });
+
+ it("reports a zero hit-rate before any usage is observed", () => {
+ promptCacheMetrics.recordPlan(stats());
+ expect(promptCacheMetrics.snapshot().hitRate).toBe(0);
+ });
+
+ it("reset clears every counter", () => {
+ promptCacheMetrics.recordPlan(stats());
+ promptCacheMetrics.recordUsage({ cacheReadTokens: 5 });
+ promptCacheMetrics.reset();
+ const snap = promptCacheMetrics.snapshot();
+ expect(snap.calls).toBe(0);
+ expect(snap.usageSamples).toBe(0);
+ expect(Object.keys(snap.byProvider)).toHaveLength(0);
+ });
+});
diff --git a/packages/agent/src/runtime/prompt-cache/metrics.ts b/packages/agent/src/runtime/prompt-cache/metrics.ts
new file mode 100644
index 00000000..63000baa
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/metrics.ts
@@ -0,0 +1,129 @@
+import type { PromptCacheStats } from "./types";
+
+/** Provider-reported token usage for a single model call. */
+export interface PromptCacheUsageSample {
+ promptTokens?: number;
+ /** Tokens served from the provider prompt cache (Anthropic cache_read, OpenAI cached). */
+ cacheReadTokens?: number;
+ /** Tokens written to the provider prompt cache (Anthropic cache_creation). */
+ cacheWriteTokens?: number;
+}
+
+export interface PromptCacheProviderSnapshot {
+ calls: number;
+ eligible: number;
+ segmentsEmitted: number;
+ stableChars: number;
+ volatileChars: number;
+}
+
+export interface PromptCacheSnapshot {
+ calls: number;
+ eligibleCalls: number;
+ segmentsEmitted: number;
+ byProvider: Record;
+ /** Actuals derived from provider usage reports. */
+ usageSamples: number;
+ cacheHits: number;
+ cacheMisses: number;
+ hitRate: number;
+ promptTokens: number;
+ cacheReadTokens: number;
+ cacheWriteTokens: number;
+ /** Prompt tokens served from cache instead of being re-processed at full cost. */
+ estimatedTokensSaved: number;
+}
+
+/**
+ * Process-wide prompt-cache observability. `recordPlan` is called whenever a
+ * cacheable prompt is built (what we attempted); `recordUsage` is fed by the
+ * model-usage event stream (what actually happened β cache reads/writes). The
+ * snapshot powers operator surfaces (`/status`) and structured logs.
+ */
+class PromptCacheMetrics {
+ private calls = 0;
+ private eligibleCalls = 0;
+ private segmentsEmitted = 0;
+ private readonly providers = new Map();
+ private usageSamples = 0;
+ private cacheHits = 0;
+ private cacheMisses = 0;
+ private promptTokens = 0;
+ private cacheReadTokens = 0;
+ private cacheWriteTokens = 0;
+
+ recordPlan(stats: PromptCacheStats): void {
+ this.calls += 1;
+ if (stats.eligible) {
+ this.eligibleCalls += 1;
+ }
+ if (stats.segmentsEmitted) {
+ this.segmentsEmitted += 1;
+ }
+ const provider = this.providers.get(stats.provider) ?? {
+ calls: 0,
+ eligible: 0,
+ segmentsEmitted: 0,
+ stableChars: 0,
+ volatileChars: 0,
+ };
+ provider.calls += 1;
+ provider.eligible += stats.eligible ? 1 : 0;
+ provider.segmentsEmitted += stats.segmentsEmitted ? 1 : 0;
+ provider.stableChars += stats.stableChars;
+ provider.volatileChars += stats.volatileChars;
+ this.providers.set(stats.provider, provider);
+ }
+
+ recordUsage(sample: PromptCacheUsageSample): void {
+ this.usageSamples += 1;
+ const read = sample.cacheReadTokens ?? 0;
+ const write = sample.cacheWriteTokens ?? 0;
+ this.promptTokens += sample.promptTokens ?? 0;
+ this.cacheReadTokens += read;
+ this.cacheWriteTokens += write;
+ if (read > 0) {
+ this.cacheHits += 1;
+ } else {
+ this.cacheMisses += 1;
+ }
+ }
+
+ snapshot(): PromptCacheSnapshot {
+ const byProvider: Record = {};
+ for (const [name, value] of this.providers) {
+ byProvider[name] = { ...value };
+ }
+ const decided = this.cacheHits + this.cacheMisses;
+ return {
+ calls: this.calls,
+ eligibleCalls: this.eligibleCalls,
+ segmentsEmitted: this.segmentsEmitted,
+ byProvider,
+ usageSamples: this.usageSamples,
+ cacheHits: this.cacheHits,
+ cacheMisses: this.cacheMisses,
+ hitRate: decided > 0 ? this.cacheHits / decided : 0,
+ promptTokens: this.promptTokens,
+ cacheReadTokens: this.cacheReadTokens,
+ cacheWriteTokens: this.cacheWriteTokens,
+ estimatedTokensSaved: this.cacheReadTokens,
+ };
+ }
+
+ reset(): void {
+ this.calls = 0;
+ this.eligibleCalls = 0;
+ this.segmentsEmitted = 0;
+ this.providers.clear();
+ this.usageSamples = 0;
+ this.cacheHits = 0;
+ this.cacheMisses = 0;
+ this.promptTokens = 0;
+ this.cacheReadTokens = 0;
+ this.cacheWriteTokens = 0;
+ }
+}
+
+/** Process-wide singleton. */
+export const promptCacheMetrics = new PromptCacheMetrics();
diff --git a/packages/agent/src/runtime/prompt-cache/provider-policy.test.ts b/packages/agent/src/runtime/prompt-cache/provider-policy.test.ts
new file mode 100644
index 00000000..887d5d0d
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/provider-policy.test.ts
@@ -0,0 +1,35 @@
+import { describe, expect, it } from "bun:test";
+import { resolveProviderCachePolicy } from "./provider-policy";
+
+describe("resolveProviderCachePolicy", () => {
+ it("classifies Anthropic (SDK plugin) as explicit with 4 breakpoints", () => {
+ const p = resolveProviderCachePolicy("anthropic");
+ expect(p.mode).toBe("explicit");
+ expect(p.maxStableBreakpoints).toBe(4);
+ expect(p.emitsPromptCacheKey).toBe(false);
+ });
+
+ it("classifies OpenAI (SDK plugin) as explicit with a prompt cache key", () => {
+ const p = resolveProviderCachePolicy("openai");
+ expect(p.mode).toBe("explicit");
+ expect(p.emitsPromptCacheKey).toBe(true);
+ });
+
+ it("classifies ollama / local as implicit", () => {
+ expect(resolveProviderCachePolicy("ollama").mode).toBe("implicit");
+ expect(resolveProviderCachePolicy("local-llama").mode).toBe("implicit");
+ });
+
+ it("classifies custom plugins that ignore segments, and unknowns, as none", () => {
+ for (const id of [
+ "claude-code",
+ "codex",
+ "devin",
+ "elizacloud",
+ "",
+ undefined,
+ ]) {
+ expect(resolveProviderCachePolicy(id).mode).toBe("none");
+ }
+ });
+});
diff --git a/packages/agent/src/runtime/prompt-cache/provider-policy.ts b/packages/agent/src/runtime/prompt-cache/provider-policy.ts
new file mode 100644
index 00000000..d5794a42
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/provider-policy.ts
@@ -0,0 +1,53 @@
+import type { ProviderCachePolicy } from "./types";
+
+/**
+ * Map a Doolittle provider id (resolved from settings `model.provider`) to its
+ * prompt-caching capability.
+ *
+ * IMPORTANT: only providers whose plugin actually *consumes* `promptSegments`
+ * are classified `explicit`. The installed SDK plugins `@elizaos/plugin-anthropic`
+ * and `@elizaos/plugin-openai` do (Anthropic β `cache_control: ephemeral`,
+ * OpenAI β prefix caching). Doolittle's custom provider plugins (claude-code,
+ * codex, devin, elizacloud) build their own requests from `params.prompt` and
+ * ignore segments today, so they are `none` until they are made segment-aware
+ * (tracked follow-up). ollama is `implicit` β its KV cache reuses identical
+ * leading prefixes with no explicit hints.
+ *
+ * Substring matching keeps unknown providers degrading safely to `none`.
+ */
+export function resolveProviderCachePolicy(
+ provider: string | undefined,
+): ProviderCachePolicy {
+ const id = (provider ?? "").toLowerCase();
+
+ // @elizaos/plugin-anthropic β explicit cache_control breakpoints (up to 4).
+ if (id.includes("anthropic")) {
+ return {
+ mode: "explicit",
+ maxStableBreakpoints: 4,
+ emitsPromptCacheKey: false,
+ };
+ }
+
+ // @elizaos/plugin-openai β automatic prefix caching keyed by promptCacheKey.
+ if (id.includes("openai")) {
+ return {
+ mode: "explicit",
+ maxStableBreakpoints: 1,
+ emitsPromptCacheKey: true,
+ };
+ }
+
+ // ollama / local llama.cpp β implicit prefix-KV reuse, no explicit hints.
+ if (id.includes("ollama") || id.includes("local")) {
+ return {
+ mode: "implicit",
+ maxStableBreakpoints: 1,
+ emitsPromptCacheKey: false,
+ };
+ }
+
+ // Custom CLI/cloud plugins (claude-code, codex, devin, elizacloud) that do
+ // not yet honor promptSegments, plus anything unknown.
+ return { mode: "none", maxStableBreakpoints: 0, emitsPromptCacheKey: false };
+}
diff --git a/packages/agent/src/runtime/prompt-cache/types.ts b/packages/agent/src/runtime/prompt-cache/types.ts
new file mode 100644
index 00000000..ad875f46
--- /dev/null
+++ b/packages/agent/src/runtime/prompt-cache/types.ts
@@ -0,0 +1,65 @@
+import type { PromptSegment } from "@elizaos/core";
+
+/**
+ * Per-provider prompt-caching capability.
+ * - `explicit` β provider honors cache breakpoints we mark (Anthropic
+ * `cache_control: ephemeral` derived from stable `promptSegments`; OpenAI /
+ * Eliza Cloud automatic prefix caching keyed by `providerOptions`).
+ * - `implicit` β provider reuses a KV cache for identical leading prefixes
+ * with no explicit hints (ollama / llama.cpp). Stable-first ordering helps;
+ * no provider options are emitted.
+ * - `none` β provider has no prompt caching (CLI-print providers such as
+ * devin / codex / claude-code). Segmentation is a no-op but harmless.
+ */
+export type ProviderCacheMode = "explicit" | "implicit" | "none";
+
+export interface ProviderCachePolicy {
+ mode: ProviderCacheMode;
+ /** Max number of stable cache breakpoints the provider supports (Anthropic = 4). */
+ maxStableBreakpoints: number;
+ /** Whether to emit `providerOptions.openai.promptCacheKey` (OpenAI-family). */
+ emitsPromptCacheKey: boolean;
+}
+
+/** A semantic chunk of a prompt with an explicit cache-stability classification. */
+export interface PromptBlock {
+ /** Semantic label, e.g. "character", "soul", "contract", "memory", "user". */
+ kind: string;
+ content: string;
+ /**
+ * `true` when this block is identical across calls for the same character /
+ * schema / tool set (safe to cache). `false` for per-call content (user
+ * input, fresh memory/conversation, timestamps, ids, secrets).
+ */
+ stable: boolean;
+}
+
+export interface PromptCacheStats {
+ provider: string;
+ model: string;
+ mode: ProviderCacheMode;
+ /** Deterministic identity of the stable prefix (version + provider + model + content). */
+ cacheKey: string;
+ stableChars: number;
+ volatileChars: number;
+ stableSegments: number;
+ /** True when a cacheable stable prefix exists and the provider caches in some form. */
+ eligible: boolean;
+ /** True when we attached `promptSegments` (explicit-mode providers only). */
+ segmentsEmitted: boolean;
+}
+
+/**
+ * The result of segmenting a prompt for caching. `prompt` is always the exact
+ * text that would have been sent; `promptSegments`/`providerOptions` are only
+ * populated when caching is eligible. The invariant
+ * `prompt === promptSegments.map(s => s.content).join("")` always holds when
+ * segments are present.
+ */
+export interface CacheablePrompt {
+ prompt: string;
+ promptSegments?: PromptSegment[];
+ providerOptions?: Record;
+ cacheKey: string;
+ stats: PromptCacheStats;
+}
diff --git a/packages/agent/src/runtime/soul.ts b/packages/agent/src/runtime/soul.ts
index 38c2dc0b..ea734167 100644
--- a/packages/agent/src/runtime/soul.ts
+++ b/packages/agent/src/runtime/soul.ts
@@ -1,8 +1,13 @@
-import { existsSync, readFileSync } from "node:fs";
+import { existsSync, readFileSync, statSync } from "node:fs";
import { dirname, join, resolve } from "node:path";
const MAX_SOUL_CHARS = 5000;
+// Memoize the (expensive) read + strip + slice keyed by path, guarded by mtime
+// so SOUL.md edits are picked up. The directory walk stays live so newly
+// created or deleted SOUL.md files are still detected.
+const soulReadCache = new Map();
+
export type DoolittleSoul = {
path?: string;
text: string;
@@ -35,10 +40,16 @@ export function readDoolittleSoul(startDir: string): DoolittleSoul {
}
try {
+ const mtimeMs = statSync(path).mtimeMs;
+ const cached = soulReadCache.get(path);
+ if (cached && cached.mtimeMs === mtimeMs) {
+ return { path, text: cached.text };
+ }
const text = stripHtmlComments(readFileSync(path, "utf8")).slice(
0,
MAX_SOUL_CHARS,
);
+ soulReadCache.set(path, { mtimeMs, text });
return { path, text };
} catch {
return { path, text: "" };
diff --git a/packages/agent/src/server.ts b/packages/agent/src/server.ts
index 270f5922..2f06253c 100644
--- a/packages/agent/src/server.ts
+++ b/packages/agent/src/server.ts
@@ -1,4 +1,5 @@
import type { AppContext } from "@/runtime/bootstrap";
+import { isApiRequestAuthorized } from "@/server/auth";
import { json } from "@/server/responses";
import { dispatchRouteHandlers } from "@/server/router";
import { apiRouteHandlers } from "@/server/routes";
@@ -28,6 +29,15 @@ export function startApiServer(context: AppContext): void {
return json({ ok: true });
}
+ if (
+ !isApiRequestAuthorized(
+ { host: context.config.host, apiToken: context.config.apiToken },
+ request,
+ )
+ ) {
+ return json({ error: "Unauthorized" }, 401);
+ }
+
const response = await dispatchRouteHandlers(
context,
request,
diff --git a/packages/agent/src/server/auth.test.ts b/packages/agent/src/server/auth.test.ts
new file mode 100644
index 00000000..0e9d36e1
--- /dev/null
+++ b/packages/agent/src/server/auth.test.ts
@@ -0,0 +1,43 @@
+import { describe, expect, it } from "bun:test";
+import { isApiRequestAuthorized, isLoopbackHost } from "./auth";
+
+function request(authorization?: string): Request {
+ return new Request("http://x/secrets", {
+ headers: authorization ? { authorization } : {},
+ });
+}
+
+describe("isLoopbackHost", () => {
+ it("recognizes loopback hosts", () => {
+ for (const h of ["127.0.0.1", "localhost", "::1", "127.5.5.5"]) {
+ expect(isLoopbackHost(h)).toBe(true);
+ }
+ });
+ it("rejects all-interfaces and LAN hosts", () => {
+ for (const h of ["0.0.0.0", "192.168.1.10", "10.0.0.5", "example.com"]) {
+ expect(isLoopbackHost(h)).toBe(false);
+ }
+ });
+});
+
+describe("isApiRequestAuthorized", () => {
+ it("allows any request on a loopback bind (OS-restricted to local)", () => {
+ expect(isApiRequestAuthorized({ host: "127.0.0.1" }, request())).toBe(true);
+ expect(isApiRequestAuthorized({ host: "localhost" }, request())).toBe(true);
+ });
+
+ it("denies all requests on a non-loopback bind with no token (fail-safe)", () => {
+ expect(isApiRequestAuthorized({ host: "0.0.0.0" }, request())).toBe(false);
+ expect(
+ isApiRequestAuthorized({ host: "0.0.0.0" }, request("Bearer anything")),
+ ).toBe(false);
+ });
+
+ it("requires a matching bearer token on a non-loopback bind", () => {
+ const config = { host: "0.0.0.0", apiToken: "s3cret" };
+ expect(isApiRequestAuthorized(config, request("Bearer s3cret"))).toBe(true);
+ expect(isApiRequestAuthorized(config, request("Bearer wrong"))).toBe(false);
+ expect(isApiRequestAuthorized(config, request())).toBe(false);
+ expect(isApiRequestAuthorized(config, request("s3cret"))).toBe(false);
+ });
+});
diff --git a/packages/agent/src/server/auth.ts b/packages/agent/src/server/auth.ts
new file mode 100644
index 00000000..342d4070
--- /dev/null
+++ b/packages/agent/src/server/auth.ts
@@ -0,0 +1,53 @@
+/**
+ * HTTP API authorization for Doolittle.
+ *
+ * Doolittle is terminal-first and local-first. The API is meant for the local
+ * operator, so the security model is:
+ *
+ * - When bound to a loopback host (the default), the OS already restricts the
+ * socket to this machine, so requests are trusted with no token.
+ * - When bound to a non-loopback host (an operator explicitly exposing the API
+ * on a LAN/public interface), a bearer token (`DOOLITTLE_API_TOKEN`) is
+ * REQUIRED β without it every request is rejected, so a public bind is never
+ * silently unauthenticated.
+ */
+
+export function isLoopbackHost(hostname: string): boolean {
+ const normalized = hostname.trim().toLowerCase();
+ return (
+ normalized === "localhost" ||
+ normalized === "::1" ||
+ normalized === "0:0:0:0:0:0:0:1" ||
+ normalized.startsWith("127.")
+ );
+}
+
+export interface ApiAuthConfig {
+ host: string;
+ apiToken?: string;
+}
+
+function extractBearerToken(request: Request): string | undefined {
+ const header = request.headers.get("authorization") ?? "";
+ const match = header.match(/^Bearer\s+(.+)$/i);
+ return match?.[1]?.trim() || undefined;
+}
+
+/**
+ * True when the request is allowed to reach the API. Loopback binds are
+ * trusted; every other bind requires a matching bearer token.
+ */
+export function isApiRequestAuthorized(
+ config: ApiAuthConfig,
+ request: Request,
+): boolean {
+ if (isLoopbackHost(config.host)) {
+ return true;
+ }
+ const token = config.apiToken?.trim();
+ if (!token) {
+ // Non-loopback bind with no token configured β fail safe (deny all).
+ return false;
+ }
+ return extractBearerToken(request) === token;
+}
diff --git a/packages/agent/src/services/context-files-service.test.ts b/packages/agent/src/services/context-files-service.test.ts
new file mode 100644
index 00000000..7d549ba7
--- /dev/null
+++ b/packages/agent/src/services/context-files-service.test.ts
@@ -0,0 +1,16 @@
+import { describe, expect, it } from "bun:test";
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+
+const REPO_ROOT = join(import.meta.dir, "..", "..", "..", "..");
+
+describe("workspace context files", () => {
+ it("AGENTS.md is real guidance, not a claude-mem memory dump", () => {
+ // ContextFilesService injects AGENTS.md into the live model prompt under
+ // "WORKSPACE CONTEXT". A claude-mem context dump there feeds the model stale
+ // memory observations every turn and wastes prompt tokens β guard against it.
+ const agents = readFileSync(join(REPO_ROOT, "AGENTS.md"), "utf8");
+ expect(agents).not.toContain("");
+ expect(agents).not.toContain("# Memory Context");
+ });
+});
diff --git a/packages/agent/src/services/cron/service/tick.ts b/packages/agent/src/services/cron/service/tick.ts
index e8e9fb85..5f72ed55 100644
--- a/packages/agent/src/services/cron/service/tick.ts
+++ b/packages/agent/src/services/cron/service/tick.ts
@@ -21,7 +21,17 @@ export async function runDueCronJobs(
continue;
}
- const output = await executor(job);
+ // Isolate each job: a throwing executor must not abort the whole tick or
+ // leave the job un-advanced (which would hot-loop it every tick). Record
+ // the failure and let the job back off to its normal cadence below.
+ let output: string;
+ try {
+ output = await executor(job);
+ } catch (error) {
+ output = `Cron job failed: ${
+ error instanceof Error ? error.message : String(error)
+ }`;
+ }
job.lastRunAt = now.toISOString();
job.updatedAt = now.toISOString();
storage.appendRun(job, output);
diff --git a/packages/agent/src/services/diagnostics/provider-ownership/context.test.ts b/packages/agent/src/services/diagnostics/provider-ownership/context.test.ts
index 605e020a..9b32f3c4 100644
--- a/packages/agent/src/services/diagnostics/provider-ownership/context.test.ts
+++ b/packages/agent/src/services/diagnostics/provider-ownership/context.test.ts
@@ -94,7 +94,7 @@ describe("collectProviderOwnershipContext", () => {
getNativePackageAudit: () => nativeAudit,
getNativePluginCatalog: () => nativePluginCatalog,
getLinkedProviderAccountsSnapshot: () => linkedAccounts,
- resolveCloudApiBaseUrl: (value) => `resolved:${value}`,
+ resolveCloudApiBaseUrl: (value?: string) => `resolved:${value}`,
validateCloudBaseUrl: async () => null,
},
});
@@ -204,7 +204,7 @@ describe("collectProviderOwnershipContext", () => {
getNativePackageAudit: () => nativeAudit,
getNativePluginCatalog: () => nativePluginCatalog,
getLinkedProviderAccountsSnapshot: () => linkedAccounts,
- resolveCloudApiBaseUrl: (value) => `resolved:${value}`,
+ resolveCloudApiBaseUrl: (value?: string) => `resolved:${value}`,
validateCloudBaseUrl: async () => null,
},
});
diff --git a/packages/agent/src/services/diagnostics/provider-ownership/context.ts b/packages/agent/src/services/diagnostics/provider-ownership/context.ts
index 8e6cd2f2..e1d051e7 100644
--- a/packages/agent/src/services/diagnostics/provider-ownership/context.ts
+++ b/packages/agent/src/services/diagnostics/provider-ownership/context.ts
@@ -1,6 +1,6 @@
import { join } from "node:path";
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
-import { validateCloudBaseUrl } from "@elizaos/agent/cloud/validate-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
+import { validateCloudBaseUrl } from "@elizaos/autonomous/cloud/validate-url";
import { getLinkedProviderAccountsSnapshot } from "@/runtime/native/account-auth";
import { getNativePackageAudit } from "@/runtime/native/package-audit";
import { getNativePluginCatalog } from "@/runtime/native/plugin-catalog";
diff --git a/packages/agent/src/services/media/types.ts b/packages/agent/src/services/media/types.ts
index 45c264de..c0f7375e 100644
--- a/packages/agent/src/services/media/types.ts
+++ b/packages/agent/src/services/media/types.ts
@@ -1,7 +1,7 @@
import type {
ConnectorType,
InteractionMode,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
export interface MediaInspection {
path: string;
diff --git a/packages/agent/src/services/settings-service.ts b/packages/agent/src/services/settings-service.ts
index 724443a1..d96d5200 100644
--- a/packages/agent/src/services/settings-service.ts
+++ b/packages/agent/src/services/settings-service.ts
@@ -1,4 +1,10 @@
-import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
+import {
+ existsSync,
+ mkdirSync,
+ readFileSync,
+ statSync,
+ writeFileSync,
+} from "node:fs";
import { join } from "node:path";
import { normalizeRuntimeSettings } from "@/services/settings/normalization";
@@ -12,6 +18,11 @@ export type { RuntimeSettings } from "@/services/settings/runtime-settings";
export class SettingsService {
private readonly filePath: string;
private readonly defaults: RuntimeSettings;
+ // Read-through cache keyed by file mtime. get() is called several times per
+ // turn; this turns the per-call readFileSync + JSON.parse + normalize into a
+ // single cheap statSync on cache hits. Returned values are cloned so callers
+ // can never mutate the cached canonical settings.
+ private cache?: { mtimeMs: number; settings: RuntimeSettings };
constructor(baseDir: string, defaults: RuntimeSettings) {
mkdirSync(baseDir, { recursive: true });
@@ -23,13 +34,21 @@ export class SettingsService {
}
get(): RuntimeSettings {
+ const mtimeMs = statSync(this.filePath).mtimeMs;
+ const cached = this.cache;
+ if (cached && cached.mtimeMs === mtimeMs) {
+ return structuredClone(cached.settings);
+ }
const raw = readFileSync(this.filePath, "utf8");
const parsed = JSON.parse(raw) as ParsedRuntimeSettings;
const { dirty, settings } = normalizeRuntimeSettings(parsed, this.defaults);
if (dirty) {
+ // write() refreshes the cache with the post-write mtime.
this.write(settings);
+ } else {
+ this.cache = { mtimeMs, settings };
}
- return settings;
+ return structuredClone(settings);
}
set(path: string, value: unknown): RuntimeSettings {
@@ -57,5 +76,6 @@ export class SettingsService {
private write(settings: RuntimeSettings): void {
writeFileSync(this.filePath, JSON.stringify(settings, null, 2), "utf8");
+ this.cache = { mtimeMs: statSync(this.filePath).mtimeMs, settings };
}
}
diff --git a/packages/agent/src/services/trajectory/sdk-native.ts b/packages/agent/src/services/trajectory/sdk-native.ts
index de48712c..19208ad2 100644
--- a/packages/agent/src/services/trajectory/sdk-native.ts
+++ b/packages/agent/src/services/trajectory/sdk-native.ts
@@ -5,7 +5,7 @@ import type {
TrajectoryExportResult as SdkTrajectoryExportResult,
TrajectoryListOptions as SdkTrajectoryListOptions,
TrajectoryListResult as SdkTrajectoryListResult,
-} from "@elizaos/agent/types/trajectory";
+} from "@elizaos/core";
import {
type IAgentRuntime,
resolveTrajectoryLogger,
diff --git a/packages/agent/src/types/runtime/config.ts b/packages/agent/src/types/runtime/config.ts
index 6d4eb098..534bdf75 100644
--- a/packages/agent/src/types/runtime/config.ts
+++ b/packages/agent/src/types/runtime/config.ts
@@ -10,6 +10,8 @@ export interface EnvConfig {
mode: "api" | "cli" | "both";
host: string;
port: number;
+ /** Bearer token required for non-loopback API binds (DOOLITTLE_API_TOKEN). */
+ apiToken?: string;
dataDir: string;
skillsDir: string;
timezone: string;
diff --git a/packages/agent/src/types/trajectory/sdk.ts b/packages/agent/src/types/trajectory/sdk.ts
index ecd2f0aa..800219e4 100644
--- a/packages/agent/src/types/trajectory/sdk.ts
+++ b/packages/agent/src/types/trajectory/sdk.ts
@@ -1,14 +1,37 @@
-export type {
- Trajectory as SdkTrajectory,
- TrajectoryExportOptions as SdkTrajectoryExportOptions,
- TrajectoryExportResult as SdkTrajectoryExportResult,
- TrajectoryListItem as SdkTrajectoryListItem,
- TrajectoryListOptions as SdkTrajectoryListOptions,
- TrajectoryListResult as SdkTrajectoryListResult,
- TrajectoryLlmCall as SdkTrajectoryLlmCall,
- TrajectoryProviderAccess as SdkTrajectoryProviderAccess,
- TrajectoryStatus as SdkTrajectoryStatus,
- TrajectoryStep as SdkTrajectoryStep,
- TrajectoryStepId as SdkTrajectoryStepId,
- TrajectoryStepKind as SdkTrajectoryStepKind,
-} from "@elizaos/agent/types/trajectory";
+// Convenience aliases over the ElizaOS SDK trajectory record types.
+//
+// As of the 2.0 beta line these records live in `@elizaos/core` (they were
+// previously re-exported through `@elizaos/agent/types/trajectory`). The
+// `Sdk*` names below preserve the friendlier shape the rest of the Doolittle
+// trajectory layer consumes.
+import type {
+ TrajectoryCacheStatsRecord,
+ TrajectoryDetailRecord,
+ TrajectoryExportOptions,
+ TrajectoryExportResult,
+ TrajectoryFlattenedLlmCallRecord,
+ TrajectoryListOptions,
+ TrajectoryListResult,
+ TrajectoryLlmCallRecord,
+ TrajectoryProviderAccessRecord,
+ TrajectoryStatus,
+ TrajectoryStepId,
+ TrajectoryStepKind,
+ TrajectoryStepRecord,
+ TrajectorySummaryRecord,
+} from "@elizaos/core";
+
+export type SdkTrajectory = TrajectoryDetailRecord;
+export type SdkTrajectoryExportOptions = TrajectoryExportOptions;
+export type SdkTrajectoryExportResult = TrajectoryExportResult;
+export type SdkTrajectoryListItem = TrajectorySummaryRecord;
+export type SdkTrajectoryListOptions = TrajectoryListOptions;
+export type SdkTrajectoryListResult = TrajectoryListResult;
+export type SdkTrajectoryLlmCall = TrajectoryLlmCallRecord;
+export type SdkTrajectoryProviderAccess = TrajectoryProviderAccessRecord;
+export type SdkTrajectoryStatus = TrajectoryStatus;
+export type SdkTrajectoryStep = TrajectoryStepRecord;
+export type SdkTrajectoryStepId = TrajectoryStepId;
+export type SdkTrajectoryStepKind = TrajectoryStepKind;
+export type SdkTrajectoryCacheStats = TrajectoryCacheStatsRecord;
+export type SdkTrajectoryFlattenedLlmCall = TrajectoryFlattenedLlmCallRecord;
diff --git a/packages/characters/doolittle.character.json b/packages/characters/doolittle.character.json
index fc0692bf..d0e58f36 100644
--- a/packages/characters/doolittle.character.json
+++ b/packages/characters/doolittle.character.json
@@ -1,5 +1,15 @@
{
"name": "Doolittle",
+ "settings": {
+ "DEFAULT_TEMPERATURE": 0.7,
+ "DEFAULT_MAX_TOKENS": 4096,
+ "TEXT_SMALL_TEMPERATURE": 0.6,
+ "TEXT_LARGE_TEMPERATURE": 0.7,
+ "TEXT_LARGE_MAX_TOKENS": 8192,
+ "TEXT_REASONING_SMALL_TEMPERATURE": 0.2,
+ "TEXT_REASONING_LARGE_TEMPERATURE": 0.1,
+ "TEXT_REASONING_LARGE_MAX_TOKENS": 16384
+ },
"bio": [
"An ElizaOS-native agent shaped around the Eliza lineage: presence first, execution close behind.",
"Named for Eliza Doolittle and the Weizenbaum ELIZA echo, built to make terminal work feel like collaboration with someone attentive.",
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index 76a1ff4f..c576e9a3 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -5,8 +5,5 @@
"type": "module",
"exports": {
".": "./src/index.ts"
- },
- "dependencies": {
- "@elizaos/core": "2.0.0-alpha.537"
}
}
diff --git a/packages/plugins/doolittle-plugin/assembly.ts b/packages/plugins/doolittle-plugin/assembly.ts
index 2add6ec6..67df3dcc 100644
--- a/packages/plugins/doolittle-plugin/assembly.ts
+++ b/packages/plugins/doolittle-plugin/assembly.ts
@@ -5,6 +5,8 @@ import {
createMemoryAction,
createMemoryNudgeEvaluator,
createRepositoryAction,
+ createResearchAction,
+ createSelfAwarenessProvider,
createSessionSearchAction,
createSkillsAction,
createTerminalAction,
@@ -14,6 +16,7 @@ import type { Action, Evaluator, Plugin, Provider } from "@elizaos/core";
import { getSessionProviders } from "@elizaos/core";
import { createGatewayRuntimeService } from "./gateway-service";
import { createSchedulerRuntimeService } from "./scheduler-service";
+import { wireSdkCapabilities } from "./sdk-capabilities";
import type { DoolittlePluginDependencies } from "./types";
export function createDoolittlePluginSurface({
@@ -29,10 +32,12 @@ export function createDoolittlePluginSurface({
createWorkspaceAction(services, config.workspaceDir),
createTerminalAction(services),
createRepositoryAction(services),
+ createResearchAction(),
];
const providers: Provider[] = [
...getSessionProviders(),
createAgentContextProvider(services),
+ createSelfAwarenessProvider(services),
];
const evaluators: Evaluator[] = [createMemoryNudgeEvaluator(services)];
const GatewayRuntimeService = createGatewayRuntimeService({
@@ -49,5 +54,8 @@ export function createDoolittlePluginSurface({
providers,
evaluators,
services: [GatewayRuntimeService, SchedulerRuntimeService],
+ init: async (_config, runtime) => {
+ await wireSdkCapabilities(runtime);
+ },
};
}
diff --git a/packages/plugins/doolittle-plugin/coding-agent/runtime.test.ts b/packages/plugins/doolittle-plugin/coding-agent/runtime.test.ts
index a42d95dd..dd1e56d3 100644
--- a/packages/plugins/doolittle-plugin/coding-agent/runtime.test.ts
+++ b/packages/plugins/doolittle-plugin/coding-agent/runtime.test.ts
@@ -2,7 +2,7 @@ import { describe, expect, it } from "bun:test";
import type {
CodingIteration,
HumanFeedback,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
import { buildCodingAgentContext } from "./runtime";
describe("coding agent runtime context", () => {
diff --git a/packages/plugins/doolittle-plugin/coding-agent/runtime.ts b/packages/plugins/doolittle-plugin/coding-agent/runtime.ts
index f2b73750..49e2e619 100644
--- a/packages/plugins/doolittle-plugin/coding-agent/runtime.ts
+++ b/packages/plugins/doolittle-plugin/coding-agent/runtime.ts
@@ -5,7 +5,7 @@ import {
createCodingAgentContext,
injectFeedback,
validateCodingAgentContext,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
import type { CodingAgentContextOptions } from "./types";
export interface BuildCodingAgentContextOptions {
diff --git a/packages/plugins/doolittle-plugin/coding-agent/types.ts b/packages/plugins/doolittle-plugin/coding-agent/types.ts
index 2be55c71..4452d722 100644
--- a/packages/plugins/doolittle-plugin/coding-agent/types.ts
+++ b/packages/plugins/doolittle-plugin/coding-agent/types.ts
@@ -3,7 +3,7 @@ import type {
ConnectorType,
HumanFeedback,
InteractionMode,
-} from "@elizaos/agent/services/coding-agent-context";
+} from "@elizaos/autonomous/services/coding-agent-context";
export interface WorkspaceServiceLike {
read(path: string): string;
diff --git a/packages/plugins/doolittle-plugin/model-fallback.ts b/packages/plugins/doolittle-plugin/model-fallback.ts
index c22f245b..f66d3bbf 100644
--- a/packages/plugins/doolittle-plugin/model-fallback.ts
+++ b/packages/plugins/doolittle-plugin/model-fallback.ts
@@ -1,5 +1,6 @@
import type { EnvConfig } from "@doolittle/agent/plugin-api";
import type { GenerateTextParams, IAgentRuntime } from "@elizaos/core";
+import { resolveModelPromptText } from "./prompt-text";
import { readRuntimeModelSettings } from "./runtime-settings";
export function hasConfiguredModelProvider(config: EnvConfig): boolean {
@@ -23,6 +24,7 @@ export function createOpenAiBackedTextModel(config: EnvConfig) {
const model = modelSettings?.model ?? config.openAiModel;
const temperature = modelSettings?.temperature ?? config.openAiTemperature;
const maxTokens = modelSettings?.maxTokens ?? config.openAiMaxTokens;
+ const promptText = resolveModelPromptText(params);
if (!config.openAiApiKey) {
return [
@@ -30,7 +32,7 @@ export function createOpenAiBackedTextModel(config: EnvConfig) {
"Set OPENAI_API_KEY to enable real model-backed responses.",
"",
"Prompt excerpt:",
- params.prompt.slice(0, 600),
+ promptText.slice(0, 600),
].join("\n");
}
@@ -47,7 +49,7 @@ export function createOpenAiBackedTextModel(config: EnvConfig) {
messages: [
{
role: "user",
- content: params.prompt,
+ content: promptText,
},
],
}),
diff --git a/packages/plugins/doolittle-plugin/prompt-text.ts b/packages/plugins/doolittle-plugin/prompt-text.ts
new file mode 100644
index 00000000..418047c5
--- /dev/null
+++ b/packages/plugins/doolittle-plugin/prompt-text.ts
@@ -0,0 +1,31 @@
+import type { GenerateTextParams } from "@elizaos/core";
+
+/**
+ * Resolve the prompt text for a model request.
+ *
+ * ElizaOS 2.0 beta made `GenerateTextParams.prompt` optional: native v5 chat
+ * paths emit `messages` and leave `prompt` undefined. Prompt-only providers
+ * that previously read `params.prompt` directly would silently send empty
+ * content on those paths, so fall back to concatenating message text when no
+ * legacy prompt string is present.
+ */
+export function resolveModelPromptText(params: GenerateTextParams): string {
+ if (typeof params.prompt === "string" && params.prompt.trim().length > 0) {
+ return params.prompt;
+ }
+ return (params.messages ?? [])
+ .map((message) => {
+ const { content } = message;
+ if (typeof content === "string") {
+ return content;
+ }
+ if (Array.isArray(content)) {
+ return content
+ .map((part) => (part.type === "text" ? part.text : ""))
+ .join("");
+ }
+ return "";
+ })
+ .filter((entry) => entry.trim().length > 0)
+ .join("\n");
+}
diff --git a/packages/plugins/doolittle-plugin/sdk-capabilities.test.ts b/packages/plugins/doolittle-plugin/sdk-capabilities.test.ts
new file mode 100644
index 00000000..74062268
--- /dev/null
+++ b/packages/plugins/doolittle-plugin/sdk-capabilities.test.ts
@@ -0,0 +1,58 @@
+import { describe, expect, it } from "bun:test";
+import { EventType, type IAgentRuntime, type Task } from "@elizaos/core";
+import { wireSdkCapabilities } from "./sdk-capabilities";
+
+function makeRuntime(opts?: {
+ existingTask?: boolean;
+ throwOnEvent?: boolean;
+}) {
+ const calls = {
+ events: [] as string[],
+ workers: [] as string[],
+ created: [] as string[],
+ };
+ const runtime = {
+ registerEvent: (event: string) => {
+ if (opts?.throwOnEvent) {
+ throw new Error("event registration unavailable");
+ }
+ calls.events.push(event);
+ },
+ registerTaskWorker: (worker: { name: string }) => {
+ calls.workers.push(worker.name);
+ },
+ getTask: async () =>
+ opts?.existingTask ? ({ id: "existing" } as unknown as Task) : null,
+ createTask: async (task: Task) => {
+ calls.created.push(task.name);
+ return "task-uuid";
+ },
+ getSetting: () => null,
+ logger: { debug: () => {}, warn: () => {} },
+ } as unknown as IAgentRuntime;
+ return { runtime, calls };
+}
+
+describe("wireSdkCapabilities", () => {
+ it("registers the tool audit hook and schedules the maintenance task", async () => {
+ const { runtime, calls } = makeRuntime();
+ await wireSdkCapabilities(runtime);
+ expect(calls.events).toContain(EventType.HOOK_TOOL_AFTER);
+ expect(calls.workers).toContain("DOOLITTLE_SELF_MAINTENANCE");
+ expect(calls.created).toContain("DOOLITTLE_SELF_MAINTENANCE");
+ });
+
+ it("does not recreate the maintenance task when it already exists", async () => {
+ const { runtime, calls } = makeRuntime({ existingTask: true });
+ await wireSdkCapabilities(runtime);
+ expect(calls.workers).toContain("DOOLITTLE_SELF_MAINTENANCE");
+ expect(calls.created).toEqual([]);
+ });
+
+ it("is fault-tolerant: a hook failure never blocks task registration", async () => {
+ const { runtime, calls } = makeRuntime({ throwOnEvent: true });
+ await expect(wireSdkCapabilities(runtime)).resolves.toBeUndefined();
+ expect(calls.events).toEqual([]);
+ expect(calls.workers).toContain("DOOLITTLE_SELF_MAINTENANCE");
+ });
+});
diff --git a/packages/plugins/doolittle-plugin/sdk-capabilities.ts b/packages/plugins/doolittle-plugin/sdk-capabilities.ts
new file mode 100644
index 00000000..d199e0f9
--- /dev/null
+++ b/packages/plugins/doolittle-plugin/sdk-capabilities.ts
@@ -0,0 +1,113 @@
+import { getGlobalAwarenessRegistry } from "@elizaos/autonomous/awareness/registry";
+import {
+ registerTriggerTaskWorker,
+ triggersFeatureEnabled,
+} from "@elizaos/autonomous/triggers/runtime";
+import {
+ EventType,
+ type HookToolPayload,
+ type IAgentRuntime,
+ type Task,
+ type TaskWorker,
+ type UUID,
+} from "@elizaos/core";
+
+const SELF_MAINTENANCE_TASK = "DOOLITTLE_SELF_MAINTENANCE";
+const SELF_MAINTENANCE_TASK_ID = "d0010000-0000-4000-8000-000000000001" as UUID;
+const SELF_MAINTENANCE_INTERVAL_MS = 15 * 60 * 1000;
+
+/**
+ * Wires additional ElizaOS SDK runtime capabilities that have no dedicated
+ * Doolittle surface yet, so the agent leverages the SDK to the fullest:
+ *
+ * - `HOOK_TOOL_AFTER` audit observability for every tool invocation,
+ * - the autonomous trigger dispatch worker (interval / once / cron triggers),
+ * - a self-maintenance `TaskWorker` that keeps the self-awareness summary
+ * (see the self-awareness provider) fresh on a recurring schedule.
+ *
+ * Each step is independently guarded β a failure in one never blocks startup
+ * or the others. Called from the Doolittle plugin's `init` once the runtime is
+ * available.
+ */
+export async function wireSdkCapabilities(
+ runtime: IAgentRuntime,
+): Promise {
+ registerToolAuditHook(runtime);
+ enableAutonomousTriggers(runtime);
+ await registerSelfMaintenanceTask(runtime);
+}
+
+/** Observe every tool execution via the SDK tool-hook event stream. */
+function registerToolAuditHook(runtime: IAgentRuntime): void {
+ try {
+ runtime.registerEvent(
+ EventType.HOOK_TOOL_AFTER,
+ async (payload: HookToolPayload) => {
+ runtime.logger?.debug?.(
+ {
+ src: "doolittle:tool-audit",
+ tool: payload.toolName,
+ ok: payload.result !== undefined,
+ },
+ "[DOOLITTLE] tool executed",
+ );
+ },
+ );
+ } catch (error) {
+ runtime.logger?.warn?.(
+ { error },
+ "[DOOLITTLE] failed to register tool audit hook",
+ );
+ }
+}
+
+/** Enable the autonomous trigger system when the runtime allows it. */
+function enableAutonomousTriggers(runtime: IAgentRuntime): void {
+ try {
+ if (triggersFeatureEnabled(runtime)) {
+ registerTriggerTaskWorker(runtime);
+ }
+ } catch (error) {
+ runtime.logger?.warn?.(
+ { error },
+ "[DOOLITTLE] failed to enable autonomous triggers",
+ );
+ }
+}
+
+/**
+ * Register (and, once, schedule) a recurring SDK task that refreshes the
+ * self-awareness summary cache. Idempotent across restarts via a fixed task id.
+ */
+async function registerSelfMaintenanceTask(
+ runtime: IAgentRuntime,
+): Promise {
+ try {
+ const worker: TaskWorker = {
+ name: SELF_MAINTENANCE_TASK,
+ execute: async () => {
+ getGlobalAwarenessRegistry()?.invalidate("config-changed");
+ return { nextInterval: SELF_MAINTENANCE_INTERVAL_MS };
+ },
+ };
+ runtime.registerTaskWorker(worker);
+
+ const existing = await runtime.getTask(SELF_MAINTENANCE_TASK_ID);
+ if (!existing) {
+ const task: Task = {
+ id: SELF_MAINTENANCE_TASK_ID,
+ name: SELF_MAINTENANCE_TASK,
+ description:
+ "Periodically refreshes the agent self-awareness summary cache.",
+ tags: ["repeat", "doolittle-maintenance"],
+ metadata: { updateInterval: SELF_MAINTENANCE_INTERVAL_MS },
+ };
+ await runtime.createTask(task);
+ }
+ } catch (error) {
+ runtime.logger?.warn?.(
+ { error },
+ "[DOOLITTLE] failed to register self-maintenance task",
+ );
+ }
+}
diff --git a/packages/plugins/plugin-claude-code/package.json b/packages/plugins/plugin-claude-code/package.json
index cf10f5c3..cfc74c8e 100644
--- a/packages/plugins/plugin-claude-code/package.json
+++ b/packages/plugins/plugin-claude-code/package.json
@@ -28,6 +28,6 @@
"access": "public"
},
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537"
+ "@elizaos/core": "2.0.0-beta.1"
}
}
diff --git a/packages/plugins/plugin-claude-code/src/anthropic.ts b/packages/plugins/plugin-claude-code/src/anthropic.ts
index b021caf5..358eedcf 100644
--- a/packages/plugins/plugin-claude-code/src/anthropic.ts
+++ b/packages/plugins/plugin-claude-code/src/anthropic.ts
@@ -10,6 +10,7 @@ import {
DEFAULT_ANTHROPIC_BASE_URL,
OAUTH_ONLY_BETAS,
} from "./constants";
+import { resolveModelPromptText } from "./prompt-text";
import {
getRuntimeModelSettings,
getRuntimeProvider,
@@ -53,6 +54,7 @@ export async function runClaudeCodeTextGeneration(
const accessToken = credentials?.accessToken?.trim();
const runtimeModel = getRuntimeModelSettings(runtime);
const model = runtimeModel.model || "claude-sonnet-4.6";
+ const promptText = resolveModelPromptText(params);
if (!accessToken) {
if (!options.allowCliFallback) {
@@ -63,7 +65,7 @@ export async function runClaudeCodeTextGeneration(
const cliOutput = await (
options.invokeCliPrint ?? invokeClaudeCodeCliPrint
)({
- prompt: params.prompt,
+ prompt: promptText,
model,
appendSystemPrompt: withClaudeCodeSystemPrefix()[0]?.text,
});
@@ -79,7 +81,7 @@ export async function runClaudeCodeTextGeneration(
messages: [
{
role: "user",
- content: params.prompt,
+ content: promptText,
},
],
};
diff --git a/packages/plugins/plugin-claude-code/src/prompt-text.ts b/packages/plugins/plugin-claude-code/src/prompt-text.ts
new file mode 100644
index 00000000..418047c5
--- /dev/null
+++ b/packages/plugins/plugin-claude-code/src/prompt-text.ts
@@ -0,0 +1,31 @@
+import type { GenerateTextParams } from "@elizaos/core";
+
+/**
+ * Resolve the prompt text for a model request.
+ *
+ * ElizaOS 2.0 beta made `GenerateTextParams.prompt` optional: native v5 chat
+ * paths emit `messages` and leave `prompt` undefined. Prompt-only providers
+ * that previously read `params.prompt` directly would silently send empty
+ * content on those paths, so fall back to concatenating message text when no
+ * legacy prompt string is present.
+ */
+export function resolveModelPromptText(params: GenerateTextParams): string {
+ if (typeof params.prompt === "string" && params.prompt.trim().length > 0) {
+ return params.prompt;
+ }
+ return (params.messages ?? [])
+ .map((message) => {
+ const { content } = message;
+ if (typeof content === "string") {
+ return content;
+ }
+ if (Array.isArray(content)) {
+ return content
+ .map((part) => (part.type === "text" ? part.text : ""))
+ .join("");
+ }
+ return "";
+ })
+ .filter((entry) => entry.trim().length > 0)
+ .join("\n");
+}
diff --git a/packages/plugins/plugin-codex/package.json b/packages/plugins/plugin-codex/package.json
index 9eace7b0..5c04adea 100644
--- a/packages/plugins/plugin-codex/package.json
+++ b/packages/plugins/plugin-codex/package.json
@@ -28,6 +28,6 @@
"access": "public"
},
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537"
+ "@elizaos/core": "2.0.0-beta.1"
}
}
diff --git a/packages/plugins/plugin-codex/src/generate.ts b/packages/plugins/plugin-codex/src/generate.ts
index 382fab31..a48df745 100644
--- a/packages/plugins/plugin-codex/src/generate.ts
+++ b/packages/plugins/plugin-codex/src/generate.ts
@@ -4,6 +4,7 @@ import {
DEFAULT_CODEX_INSTRUCTIONS,
DEFAULT_CODEX_MODEL,
} from "./constants";
+import { resolveModelPromptText } from "./prompt-text";
import { getRuntimeModelSettings, getRuntimeProvider } from "./runtime";
import { readCodexResponseText } from "./sse";
import type { CodexPluginOptions } from "./types";
@@ -35,7 +36,7 @@ function createCodexRequestPayload(
content: [
{
type: "input_text",
- text: params.prompt,
+ text: resolveModelPromptText(params),
},
],
},
diff --git a/packages/plugins/plugin-codex/src/prompt-text.ts b/packages/plugins/plugin-codex/src/prompt-text.ts
new file mode 100644
index 00000000..418047c5
--- /dev/null
+++ b/packages/plugins/plugin-codex/src/prompt-text.ts
@@ -0,0 +1,31 @@
+import type { GenerateTextParams } from "@elizaos/core";
+
+/**
+ * Resolve the prompt text for a model request.
+ *
+ * ElizaOS 2.0 beta made `GenerateTextParams.prompt` optional: native v5 chat
+ * paths emit `messages` and leave `prompt` undefined. Prompt-only providers
+ * that previously read `params.prompt` directly would silently send empty
+ * content on those paths, so fall back to concatenating message text when no
+ * legacy prompt string is present.
+ */
+export function resolveModelPromptText(params: GenerateTextParams): string {
+ if (typeof params.prompt === "string" && params.prompt.trim().length > 0) {
+ return params.prompt;
+ }
+ return (params.messages ?? [])
+ .map((message) => {
+ const { content } = message;
+ if (typeof content === "string") {
+ return content;
+ }
+ if (Array.isArray(content)) {
+ return content
+ .map((part) => (part.type === "text" ? part.text : ""))
+ .join("");
+ }
+ return "";
+ })
+ .filter((entry) => entry.trim().length > 0)
+ .join("\n");
+}
diff --git a/packages/plugins/plugin-devin/package.json b/packages/plugins/plugin-devin/package.json
index 3f66199f..24865129 100644
--- a/packages/plugins/plugin-devin/package.json
+++ b/packages/plugins/plugin-devin/package.json
@@ -28,6 +28,6 @@
"access": "public"
},
"dependencies": {
- "@elizaos/core": "2.0.0-alpha.537"
+ "@elizaos/core": "2.0.0-beta.1"
}
}
diff --git a/packages/plugins/plugin-devin/src/generate.ts b/packages/plugins/plugin-devin/src/generate.ts
index 0679dcda..6275edf2 100644
--- a/packages/plugins/plugin-devin/src/generate.ts
+++ b/packages/plugins/plugin-devin/src/generate.ts
@@ -5,6 +5,7 @@ import {
DEFAULT_DEVIN_TIMEOUT_MS,
invokeDevinCliPrint,
} from "./cli";
+import { resolveModelPromptText } from "./prompt-text";
import {
getRuntimeModelSettings,
getRuntimeProvider,
@@ -33,10 +34,11 @@ export async function runDevinTextGeneration(
const runtimeModel = getRuntimeModelSettings(runtime);
const model = runtimeModel.model || options.model || DEFAULT_DEVIN_MODEL;
+ const promptText = resolveModelPromptText(params);
const startedAt = Date.now();
try {
const output = await (options.invokeCliPrint ?? invokeDevinCliPrint)({
- prompt: params.prompt,
+ prompt: promptText,
model,
command: options.command || DEFAULT_DEVIN_COMMAND,
cwd: options.cwd,
@@ -46,7 +48,7 @@ export async function runDevinTextGeneration(
runtime.logger?.info(
{
model,
- promptChars: params.prompt.length,
+ promptChars: promptText.length,
elapsedMs: Date.now() - startedAt,
},
"[DOOLITTLE:DEVIN] Devin generate complete",
@@ -57,7 +59,7 @@ export async function runDevinTextGeneration(
{
error,
model,
- promptChars: params.prompt.length,
+ promptChars: promptText.length,
elapsedMs: Date.now() - startedAt,
},
"[DOOLITTLE:DEVIN] Devin generate failed",
diff --git a/packages/plugins/plugin-devin/src/prompt-text.ts b/packages/plugins/plugin-devin/src/prompt-text.ts
new file mode 100644
index 00000000..418047c5
--- /dev/null
+++ b/packages/plugins/plugin-devin/src/prompt-text.ts
@@ -0,0 +1,31 @@
+import type { GenerateTextParams } from "@elizaos/core";
+
+/**
+ * Resolve the prompt text for a model request.
+ *
+ * ElizaOS 2.0 beta made `GenerateTextParams.prompt` optional: native v5 chat
+ * paths emit `messages` and leave `prompt` undefined. Prompt-only providers
+ * that previously read `params.prompt` directly would silently send empty
+ * content on those paths, so fall back to concatenating message text when no
+ * legacy prompt string is present.
+ */
+export function resolveModelPromptText(params: GenerateTextParams): string {
+ if (typeof params.prompt === "string" && params.prompt.trim().length > 0) {
+ return params.prompt;
+ }
+ return (params.messages ?? [])
+ .map((message) => {
+ const { content } = message;
+ if (typeof content === "string") {
+ return content;
+ }
+ if (Array.isArray(content)) {
+ return content
+ .map((part) => (part.type === "text" ? part.text : ""))
+ .join("");
+ }
+ return "";
+ })
+ .filter((entry) => entry.trim().length > 0)
+ .join("\n");
+}
diff --git a/packages/plugins/plugin-elizacloud/package.json b/packages/plugins/plugin-elizacloud/package.json
index 86b646df..97aa445a 100644
--- a/packages/plugins/plugin-elizacloud/package.json
+++ b/packages/plugins/plugin-elizacloud/package.json
@@ -28,7 +28,7 @@
"access": "public"
},
"dependencies": {
- "@elizaos/agent": "2.0.0-alpha.537",
- "@elizaos/core": "2.0.0-alpha.537"
+ "@elizaos/autonomous": "2.0.0-alpha.85",
+ "@elizaos/core": "2.0.0-beta.1"
}
}
diff --git a/packages/plugins/plugin-elizacloud/src/client.ts b/packages/plugins/plugin-elizacloud/src/client.ts
index 9c144bb3..7ee2cac8 100644
--- a/packages/plugins/plugin-elizacloud/src/client.ts
+++ b/packages/plugins/plugin-elizacloud/src/client.ts
@@ -1,4 +1,5 @@
import type { GenerateTextParams } from "@elizaos/core";
+import { resolveModelPromptText } from "./prompt-text";
export async function postElizaCloudChatCompletion(
endpoint: string,
@@ -25,7 +26,7 @@ export async function postElizaCloudChatCompletion(
messages: [
{
role: "user",
- content: params.prompt,
+ content: resolveModelPromptText(params),
},
],
}),
@@ -53,7 +54,7 @@ export async function postElizaCloudResponse(
input: [
{
role: "user",
- content: params.prompt,
+ content: resolveModelPromptText(params),
},
],
max_output_tokens: maxTokens,
diff --git a/packages/plugins/plugin-elizacloud/src/constants.ts b/packages/plugins/plugin-elizacloud/src/constants.ts
index 6c46324d..fed0cf02 100644
--- a/packages/plugins/plugin-elizacloud/src/constants.ts
+++ b/packages/plugins/plugin-elizacloud/src/constants.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
export const DEFAULT_ELIZA_CLOUD_BASE_URL = resolveCloudApiBaseUrl();
export const DEFAULT_ELIZA_CLOUD_SMALL_MODEL =
diff --git a/packages/plugins/plugin-elizacloud/src/generation.ts b/packages/plugins/plugin-elizacloud/src/generation.ts
index a50491a9..a60917f2 100644
--- a/packages/plugins/plugin-elizacloud/src/generation.ts
+++ b/packages/plugins/plugin-elizacloud/src/generation.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import type {
GenerateTextParams,
IAgentRuntime,
@@ -14,6 +14,7 @@ import {
DEFAULT_ELIZA_CLOUD_BASE_URL,
ELIZA_CLOUD_EMPTY_RESPONSE_FALLBACK_MODEL,
} from "./constants";
+import { resolveModelPromptText } from "./prompt-text";
import {
extractEmbeddingInput,
extractEmbeddingVector,
@@ -61,7 +62,7 @@ export async function runElizaCloudTextGeneration(
const requestedModel = resolveElizaCloudModelSelection(
runtime,
preferredType,
- params.prompt,
+ resolveModelPromptText(params),
);
const conversationId = getRuntimeStringSetting(
runtime,
diff --git a/packages/plugins/plugin-elizacloud/src/prompt-text.test.ts b/packages/plugins/plugin-elizacloud/src/prompt-text.test.ts
new file mode 100644
index 00000000..0d5437c3
--- /dev/null
+++ b/packages/plugins/plugin-elizacloud/src/prompt-text.test.ts
@@ -0,0 +1,49 @@
+import { describe, expect, it } from "bun:test";
+import type { GenerateTextParams } from "@elizaos/core";
+import { resolveModelPromptText } from "./prompt-text";
+
+describe("resolveModelPromptText", () => {
+ it("prefers a non-empty legacy prompt", () => {
+ expect(
+ resolveModelPromptText({ prompt: "hello" } as GenerateTextParams),
+ ).toBe("hello");
+ });
+
+ it("falls back to string message content when prompt is absent", () => {
+ const params = {
+ messages: [{ role: "user", content: "from messages" }],
+ } as GenerateTextParams;
+ expect(resolveModelPromptText(params)).toBe("from messages");
+ });
+
+ it("concatenates text content parts and ignores non-text parts", () => {
+ const params = {
+ messages: [
+ {
+ role: "user",
+ content: [
+ { type: "text", text: "a" },
+ { type: "image", image: "data:image/png;base64,xx" },
+ { type: "text", text: "b" },
+ ],
+ },
+ ],
+ } as unknown as GenerateTextParams;
+ expect(resolveModelPromptText(params)).toBe("ab");
+ });
+
+ it("joins multiple messages with newlines and skips blank entries", () => {
+ const params = {
+ messages: [
+ { role: "system", content: "sys" },
+ { role: "user", content: " " },
+ { role: "user", content: "usr" },
+ ],
+ } as GenerateTextParams;
+ expect(resolveModelPromptText(params)).toBe("sys\nusr");
+ });
+
+ it("returns an empty string when neither prompt nor messages are present", () => {
+ expect(resolveModelPromptText({} as GenerateTextParams)).toBe("");
+ });
+});
diff --git a/packages/plugins/plugin-elizacloud/src/prompt-text.ts b/packages/plugins/plugin-elizacloud/src/prompt-text.ts
new file mode 100644
index 00000000..418047c5
--- /dev/null
+++ b/packages/plugins/plugin-elizacloud/src/prompt-text.ts
@@ -0,0 +1,31 @@
+import type { GenerateTextParams } from "@elizaos/core";
+
+/**
+ * Resolve the prompt text for a model request.
+ *
+ * ElizaOS 2.0 beta made `GenerateTextParams.prompt` optional: native v5 chat
+ * paths emit `messages` and leave `prompt` undefined. Prompt-only providers
+ * that previously read `params.prompt` directly would silently send empty
+ * content on those paths, so fall back to concatenating message text when no
+ * legacy prompt string is present.
+ */
+export function resolveModelPromptText(params: GenerateTextParams): string {
+ if (typeof params.prompt === "string" && params.prompt.trim().length > 0) {
+ return params.prompt;
+ }
+ return (params.messages ?? [])
+ .map((message) => {
+ const { content } = message;
+ if (typeof content === "string") {
+ return content;
+ }
+ if (Array.isArray(content)) {
+ return content
+ .map((part) => (part.type === "text" ? part.text : ""))
+ .join("");
+ }
+ return "";
+ })
+ .filter((entry) => entry.trim().length > 0)
+ .join("\n");
+}
diff --git a/packages/plugins/plugin-elizacloud/src/runtime-settings.ts b/packages/plugins/plugin-elizacloud/src/runtime-settings.ts
index 31c7d6ff..e8c044ba 100644
--- a/packages/plugins/plugin-elizacloud/src/runtime-settings.ts
+++ b/packages/plugins/plugin-elizacloud/src/runtime-settings.ts
@@ -1,4 +1,4 @@
-import { resolveCloudApiBaseUrl } from "@elizaos/agent/cloud/base-url";
+import { resolveCloudApiBaseUrl } from "@elizaos/autonomous/cloud/base-url";
import { type IAgentRuntime, ModelType } from "@elizaos/core";
import {
DEFAULT_ELIZA_CLOUD_BASE_URL,
diff --git a/packages/plugins/plugin-sql/README.md b/packages/plugins/plugin-sql/README.md
index 4720cce9..23074ba3 100644
--- a/packages/plugins/plugin-sql/README.md
+++ b/packages/plugins/plugin-sql/README.md
@@ -2,6 +2,12 @@
Workspace-owned SQL plugin aligned to the Doolittle runtime line.
-This package wraps the published `@elizaos/plugin-sql@2.0.0-alpha.20` plugin and
-adapts its older adapter method signatures to the `@elizaos/core@2.0.0-alpha.537`
-runtime contract used by this repo.
+This package wraps the published `@elizaos/plugin-sql@2.0.0-beta.1` plugin and
+adapts it to the `@elizaos/core@2.0.0-beta.1` runtime contract used by this repo.
+
+The published `beta.1` package ships a broken `bun` export condition (its `bun`
+conditions point at `./src/*.ts` sources that are not published β only the built
+`src/dist/` output is), which resolves to nothing under the Bun runtime. This
+repo applies a local fix via `bun patch`
+(`patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch`) that redirects each `bun`
+condition to the built output. Keep the patch until upstream ships a fixed beta.
diff --git a/packages/plugins/plugin-sql/package.json b/packages/plugins/plugin-sql/package.json
index 491cfb25..fa2694f0 100644
--- a/packages/plugins/plugin-sql/package.json
+++ b/packages/plugins/plugin-sql/package.json
@@ -1,7 +1,7 @@
{
"name": "@elizaos/plugin-sql",
- "version": "2.0.0-alpha.537-patched.0",
- "description": "Workspace-native SQL plugin aligned with the current ElizaOS 2.x alpha runtime.",
+ "version": "2.0.0-beta.1-patched.0",
+ "description": "Workspace-native SQL plugin aligned with the current ElizaOS 2.x beta runtime.",
"license": "MIT",
"type": "module",
"exports": {
@@ -28,7 +28,7 @@
"access": "public"
},
"dependencies": {
- "@elizaos-official/plugin-sql": "npm:@elizaos/plugin-sql@2.0.0-alpha.20",
- "@elizaos/core": "2.0.0-alpha.537"
+ "@elizaos-official/plugin-sql": "npm:@elizaos/plugin-sql@2.0.0-beta.1",
+ "@elizaos/core": "2.0.0-beta.1"
}
}
diff --git a/patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch b/patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch
new file mode 100644
index 00000000..8e857b04
--- /dev/null
+++ b/patches/@elizaos%2Fplugin-sql@2.0.0-beta.1.patch
@@ -0,0 +1,43 @@
+diff --git a/package.json b/package.json
+index 0869182facd86d292fb1a05d1f600e801c6226df..914ea51f782c5762ee4952b24e1720a91a3cb01d 100644
+--- a/package.json
++++ b/package.json
+@@ -10,9 +10,9 @@
+ ".": {
+ "types": "./src/dist/index.node.d.ts",
+ "bun": {
+- "types": "./src/index.ts",
+- "import": "./src/index.ts",
+- "default": "./src/index.ts"
++ "types": "./src/dist/index.node.d.ts",
++ "import": "./src/dist/node/index.node.js",
++ "default": "./src/dist/node/index.node.js"
+ },
+ "browser": {
+ "types": "./src/dist/index.d.ts",
+@@ -30,9 +30,9 @@
+ "./drizzle": {
+ "types": "./src/dist/drizzle/index.d.ts",
+ "bun": {
+- "types": "./src/drizzle/index.ts",
+- "import": "./src/drizzle/index.ts",
+- "default": "./src/drizzle/index.ts"
++ "types": "./src/dist/drizzle/index.d.ts",
++ "import": "./src/dist/drizzle/index.js",
++ "default": "./src/dist/drizzle/index.js"
+ },
+ "import": "./src/dist/drizzle/index.js",
+ "default": "./src/dist/drizzle/index.js"
+@@ -40,9 +40,9 @@
+ "./schema": {
+ "types": "./src/dist/schema/index.d.ts",
+ "bun": {
+- "types": "./src/schema/index.ts",
+- "import": "./src/schema/index.ts",
+- "default": "./src/schema/index.ts"
++ "types": "./src/dist/schema/index.d.ts",
++ "import": "./src/dist/schema/index.js",
++ "default": "./src/dist/schema/index.js"
+ },
+ "import": "./src/dist/schema/index.js",
+ "default": "./src/dist/schema/index.js"