diff --git a/.dockerignore b/.dockerignore
index 11d03a1c54..3ad0f8d8e4 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -77,6 +77,7 @@ src/node_modules
!pnpm-workspace.yaml
!scripts/bootstrap.mjs
!apps/web-evals/
+!apps/roomote/
!src/
!webview-ui/
!packages/evals/.docker/entrypoints/runner.sh
diff --git a/.roo/rules/rules.md b/.roo/rules/rules.md
index d3795393f3..9e75224b39 100644
--- a/.roo/rules/rules.md
+++ b/.roo/rules/rules.md
@@ -1,3 +1,8 @@
+# Repository Rules
+
+1. This repository is a monorepo that uses pnpm workspaces. Prefer `pnpm` over `npm` when executing commands.
+2. Tests should be written with vitest instead of jest.
+
# Code Quality Rules
1. Test Coverage:
@@ -8,14 +13,8 @@
- Tests must be run from the same directory as the `package.json` file that specifies `vitest` in `devDependencies`
2. Lint Rules:
-
- Never disable any lint rules without explicit user approval
-
3. Styling Guidelines:
- Use Tailwind CSS classes instead of inline style objects for new markup
- VSCode CSS variables must be added to webview-ui/src/index.css before using them in Tailwind classes
- Example: `
` instead of style objects
-
-# Adding a New Setting
-
-To add a new setting that persists its state, follow the steps in docs/settings.md
diff --git a/apps/roomote/.env.example b/apps/roomote/.env.example
new file mode 100644
index 0000000000..0e1eb3ae79
--- /dev/null
+++ b/apps/roomote/.env.example
@@ -0,0 +1,9 @@
+DATABASE_URL=postgresql://postgres:password@localhost:5433/cloud_agents
+REDIS_URL=redis://localhost:6380
+
+GH_WEBHOOK_SECRET=your-webhook-secret-here
+GH_TOKEN=your-token-here
+
+OPENROUTER_API_KEY=sk-or-v1-...
+
+SLACK_API_TOKEN=xoxb-...
diff --git a/apps/roomote/.gitignore b/apps/roomote/.gitignore
new file mode 100644
index 0000000000..9ef9b815c5
--- /dev/null
+++ b/apps/roomote/.gitignore
@@ -0,0 +1,10 @@
+# Next.js
+.next
+
+# docker
+.docker/*
+!.docker/scripts
+!.docker/entrypoints
+
+# ENV
+!.env.example
diff --git a/apps/roomote/Dockerfile.api b/apps/roomote/Dockerfile.api
new file mode 100644
index 0000000000..6566096a71
--- /dev/null
+++ b/apps/roomote/Dockerfile.api
@@ -0,0 +1,27 @@
+# docker compose build base api
+
+FROM roomote-base AS base
+
+WORKDIR /roo
+
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+COPY packages/config-eslint/package.json ./packages/config-eslint/
+COPY packages/config-typescript/package.json ./packages/config-typescript/
+COPY packages/types/package.json ./packages/types/
+COPY packages/ipc/package.json ./packages/ipc/
+COPY apps/roomote/package.json ./apps/roomote/
+
+COPY scripts/bootstrap.mjs ./scripts/
+RUN pnpm install
+
+COPY apps/roomote ./apps/roomote/
+COPY packages/config-eslint ./packages/config-eslint/
+COPY packages/config-typescript ./packages/config-typescript/
+COPY packages/types ./packages/types/
+COPY packages/ipc ./packages/ipc/
+
+WORKDIR /roo/apps/roomote
+RUN pnpm build
+ENV NODE_ENV=production
+EXPOSE 3001
+CMD ["pnpm", "start"]
diff --git a/apps/roomote/Dockerfile.base b/apps/roomote/Dockerfile.base
new file mode 100644
index 0000000000..3320b0b6a5
--- /dev/null
+++ b/apps/roomote/Dockerfile.base
@@ -0,0 +1,31 @@
+# docker compose build base
+
+FROM node:20-slim AS base
+
+# Install pnpm
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
+
+# Install common system packages
+RUN apt update && \
+ apt install -y \
+ curl \
+ git \
+ vim \
+ jq \
+ netcat-openbsd \
+ apt-transport-https \
+ ca-certificates \
+ gnupg \
+ lsb-release \
+ wget \
+ gpg \
+ gh \
+ && rm -rf /var/lib/apt/lists/*
+
+# Install Docker cli
+RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
+ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
+ && apt update && apt install -y docker-ce-cli \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/apps/roomote/Dockerfile.controller b/apps/roomote/Dockerfile.controller
new file mode 100644
index 0000000000..a2a2e00203
--- /dev/null
+++ b/apps/roomote/Dockerfile.controller
@@ -0,0 +1,25 @@
+# docker compose build base controller
+
+FROM roomote-base AS base
+
+WORKDIR /roo
+
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+COPY packages/config-eslint/package.json ./packages/config-eslint/
+COPY packages/config-typescript/package.json ./packages/config-typescript/
+COPY packages/types/package.json ./packages/types/
+COPY packages/ipc/package.json ./packages/ipc/
+COPY apps/roomote/package.json ./apps/roomote/
+
+COPY scripts/bootstrap.mjs ./scripts/
+RUN pnpm install
+
+COPY apps/roomote ./apps/roomote/
+COPY packages/config-eslint ./packages/config-eslint/
+COPY packages/config-typescript ./packages/config-typescript/
+COPY packages/types ./packages/types/
+COPY packages/ipc ./packages/ipc/
+
+WORKDIR /roo/apps/roomote
+ENV NODE_ENV=production
+CMD ["pnpm", "controller"]
diff --git a/apps/roomote/Dockerfile.dashboard b/apps/roomote/Dockerfile.dashboard
new file mode 100644
index 0000000000..f04160d9d2
--- /dev/null
+++ b/apps/roomote/Dockerfile.dashboard
@@ -0,0 +1,25 @@
+# docker compose build base dashboard
+
+FROM roomote-base AS base
+
+WORKDIR /roo
+
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+COPY packages/config-eslint/package.json ./packages/config-eslint/
+COPY packages/config-typescript/package.json ./packages/config-typescript/
+COPY packages/types/package.json ./packages/types/
+COPY packages/ipc/package.json ./packages/ipc/
+COPY apps/roomote/package.json ./apps/roomote/
+
+COPY scripts/bootstrap.mjs ./scripts/
+RUN pnpm install
+
+COPY apps/roomote ./apps/roomote/
+COPY packages/config-eslint ./packages/config-eslint/
+COPY packages/config-typescript ./packages/config-typescript/
+COPY packages/types ./packages/types/
+COPY packages/ipc ./packages/ipc/
+
+WORKDIR /roo/apps/roomote
+EXPOSE 3002
+CMD ["pnpm", "dashboard"]
diff --git a/apps/roomote/Dockerfile.worker b/apps/roomote/Dockerfile.worker
new file mode 100644
index 0000000000..b1a21c8a62
--- /dev/null
+++ b/apps/roomote/Dockerfile.worker
@@ -0,0 +1,62 @@
+# docker compose build worker
+# Note: Requires $GH_TOKEN to be set as build argument.
+
+FROM roomote-base AS base
+
+# Install additional worker-specific packages
+RUN apt update && \
+ apt install -y \
+ xvfb \
+ && rm -rf /var/lib/apt/lists/*
+
+# Install VS Code
+RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg \
+ && install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg \
+ && echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | tee /etc/apt/sources.list.d/vscode.list > /dev/null \
+ && rm -f packages.microsoft.gpg \
+ && apt update && apt install -y code \
+ && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /roo
+
+# Install extensions
+RUN mkdir -p /roo/.vscode \
+ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension dbaeumer.vscode-eslint \
+ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension esbenp.prettier-vscode \
+ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension csstools.postcss \
+ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension RooVeterinaryInc.roo-cline
+
+# Clone repo (requires $GH_TOKEN)
+ARG GH_TOKEN
+ENV GH_TOKEN=${GH_TOKEN}
+WORKDIR /roo/repos
+RUN git config --global user.email "chris@roocode.com"
+RUN git config --global user.name "Roo Code"
+RUN git config --global credential.helper store
+RUN echo "https://oauth2:${GH_TOKEN}@github.com" > ~/.git-credentials
+RUN gh repo clone RooCodeInc/Roo-Code
+WORKDIR /roo/repos/Roo-Code
+RUN gh repo set-default RooCodeInc/Roo-Code
+RUN pnpm install
+
+# Install dependencies
+WORKDIR /roo
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+COPY packages/config-eslint/package.json ./packages/config-eslint/
+COPY packages/config-typescript/package.json ./packages/config-typescript/
+COPY packages/types/package.json ./packages/types/
+COPY packages/ipc/package.json ./packages/ipc/
+COPY apps/roomote/package.json ./apps/roomote/
+
+COPY scripts/bootstrap.mjs ./scripts/
+RUN pnpm install
+
+COPY apps/roomote ./apps/roomote/
+COPY packages/config-eslint ./packages/config-eslint/
+COPY packages/config-typescript ./packages/config-typescript/
+COPY packages/types ./packages/types/
+COPY packages/ipc ./packages/ipc/
+
+WORKDIR /roo/apps/roomote
+ENV NODE_ENV=production
+CMD ["pnpm", "worker"]
diff --git a/apps/roomote/docker-compose.yml b/apps/roomote/docker-compose.yml
new file mode 100644
index 0000000000..1a6a5f0b83
--- /dev/null
+++ b/apps/roomote/docker-compose.yml
@@ -0,0 +1,120 @@
+services:
+ base:
+ build:
+ context: ../../
+ dockerfile: apps/roomote/Dockerfile.base
+ image: roomote-base
+
+ db:
+ container_name: roomote-db
+ image: postgres:17.5
+ ports:
+ - "5433:5432"
+ volumes:
+ - ./.docker/postgres:/var/lib/postgresql/data
+ environment:
+ - POSTGRES_USER=postgres
+ - POSTGRES_PASSWORD=password
+ - POSTGRES_DB=cloud_agents
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d cloud_agents"]
+ interval: 5s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+
+ redis:
+ container_name: roomote-redis
+ image: redis:7-alpine
+ ports:
+ - "6380:6379"
+ volumes:
+ - ./.docker/redis:/data
+ command: redis-server --appendonly yes
+
+ dashboard:
+ container_name: roomote-dashboard
+ build:
+ context: ../../
+ dockerfile: apps/roomote/Dockerfile.dashboard
+ image: roomote-dashboard
+ ports:
+ - "3002:3002"
+ environment:
+ - REDIS_URL=redis://redis:6379
+ - NODE_ENV=production
+ depends_on:
+ redis:
+ condition: service_started
+
+ api:
+ container_name: roomote-api
+ build:
+ context: ../../
+ dockerfile: apps/roomote/Dockerfile.api
+ image: roomote-api
+ ports:
+ - "3001:3001"
+ environment:
+ - DATABASE_URL=postgresql://postgres:password@db:5432/cloud_agents
+ - REDIS_URL=redis://redis:6379
+ - NODE_ENV=production
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ depends_on:
+ db:
+ condition: service_healthy
+ redis:
+ condition: service_started
+
+ controller:
+ container_name: roomote-controller
+ build:
+ context: ../../
+ dockerfile: apps/roomote/Dockerfile.controller
+ args:
+ - GH_TOKEN=${GH_TOKEN}
+ image: roomote-controller
+ env_file:
+ - .env
+ environment:
+ - HOST_EXECUTION_METHOD=docker
+ - DATABASE_URL=postgresql://postgres:password@db:5432/cloud_agents
+ - REDIS_URL=redis://redis:6379
+ - NODE_ENV=production
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /tmp/roomote:/var/log/roomote
+ depends_on:
+ db:
+ condition: service_healthy
+ redis:
+ condition: service_started
+ restart: unless-stopped
+
+ worker:
+ build:
+ context: ../../
+ dockerfile: apps/roomote/Dockerfile.worker
+ args:
+ - GH_TOKEN=${GH_TOKEN}
+ image: roomote-worker
+ env_file:
+ - .env
+ environment:
+ - HOST_EXECUTION_METHOD=docker
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /tmp/roomote:/var/log/roomote
+ stdin_open: true
+ tty: true
+ depends_on:
+ db:
+ condition: service_healthy
+ redis:
+ condition: service_started
+
+networks:
+ default:
+ name: roomote_default
+ driver: bridge
diff --git a/apps/roomote/drizzle.config.ts b/apps/roomote/drizzle.config.ts
new file mode 100644
index 0000000000..a5e5683fba
--- /dev/null
+++ b/apps/roomote/drizzle.config.ts
@@ -0,0 +1,10 @@
+import { defineConfig } from "drizzle-kit"
+
+export default defineConfig({
+ schema: "./src/db/schema.ts",
+ out: "./drizzle",
+ dialect: "postgresql",
+ dbCredentials: {
+ url: process.env.DATABASE_URL!,
+ },
+})
diff --git a/apps/roomote/drizzle/0000_cuddly_luke_cage.sql b/apps/roomote/drizzle/0000_cuddly_luke_cage.sql
new file mode 100644
index 0000000000..2535f219e2
--- /dev/null
+++ b/apps/roomote/drizzle/0000_cuddly_luke_cage.sql
@@ -0,0 +1,21 @@
+CREATE TABLE "cloud_jobs" (
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "cloud_jobs_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
+ "type" text NOT NULL,
+ "status" text DEFAULT 'pending' NOT NULL,
+ "payload" jsonb NOT NULL,
+ "result" jsonb,
+ "error" text,
+ "created_at" timestamp DEFAULT now() NOT NULL,
+ "started_at" timestamp,
+ "completed_at" timestamp
+);
+--> statement-breakpoint
+CREATE TABLE "cloud_tasks" (
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "cloud_tasks_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
+ "job_id" integer NOT NULL,
+ "task_id" integer,
+ "container_id" text,
+ "created_at" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+ALTER TABLE "cloud_tasks" ADD CONSTRAINT "cloud_tasks_job_id_cloud_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "public"."cloud_jobs"("id") ON DELETE no action ON UPDATE no action;
\ No newline at end of file
diff --git a/apps/roomote/drizzle/0001_fluffy_sasquatch.sql b/apps/roomote/drizzle/0001_fluffy_sasquatch.sql
new file mode 100644
index 0000000000..aeddbe02a8
--- /dev/null
+++ b/apps/roomote/drizzle/0001_fluffy_sasquatch.sql
@@ -0,0 +1 @@
+ALTER TABLE "cloud_jobs" ADD COLUMN "slack_thread_ts" text;
\ No newline at end of file
diff --git a/apps/roomote/drizzle/0002_brief_sentry.sql b/apps/roomote/drizzle/0002_brief_sentry.sql
new file mode 100644
index 0000000000..2f22f7825c
--- /dev/null
+++ b/apps/roomote/drizzle/0002_brief_sentry.sql
@@ -0,0 +1 @@
+DROP TABLE "cloud_tasks" CASCADE;
\ No newline at end of file
diff --git a/apps/roomote/drizzle/meta/0000_snapshot.json b/apps/roomote/drizzle/meta/0000_snapshot.json
new file mode 100644
index 0000000000..8815e6a299
--- /dev/null
+++ b/apps/roomote/drizzle/meta/0000_snapshot.json
@@ -0,0 +1,164 @@
+{
+ "id": "8f65bfed-78de-4e22-a15f-36de8afe5f2e",
+ "prevId": "00000000-0000-0000-0000-000000000000",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.cloud_jobs": {
+ "name": "cloud_jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cloud_jobs_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "result": {
+ "name": "result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error": {
+ "name": "error",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.cloud_tasks": {
+ "name": "cloud_tasks",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cloud_tasks_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "container_id": {
+ "name": "container_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cloud_tasks_job_id_cloud_jobs_id_fk": {
+ "name": "cloud_tasks_job_id_cloud_jobs_id_fk",
+ "tableFrom": "cloud_tasks",
+ "tableTo": "cloud_jobs",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/apps/roomote/drizzle/meta/0001_snapshot.json b/apps/roomote/drizzle/meta/0001_snapshot.json
new file mode 100644
index 0000000000..0169baf6b8
--- /dev/null
+++ b/apps/roomote/drizzle/meta/0001_snapshot.json
@@ -0,0 +1,170 @@
+{
+ "id": "4cae0c18-141d-40a3-acc8-38fcd7f07534",
+ "prevId": "8f65bfed-78de-4e22-a15f-36de8afe5f2e",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.cloud_jobs": {
+ "name": "cloud_jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cloud_jobs_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "result": {
+ "name": "result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error": {
+ "name": "error",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "slack_thread_ts": {
+ "name": "slack_thread_ts",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.cloud_tasks": {
+ "name": "cloud_tasks",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cloud_tasks_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "container_id": {
+ "name": "container_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cloud_tasks_job_id_cloud_jobs_id_fk": {
+ "name": "cloud_tasks_job_id_cloud_jobs_id_fk",
+ "tableFrom": "cloud_tasks",
+ "tableTo": "cloud_jobs",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/apps/roomote/drizzle/meta/0002_snapshot.json b/apps/roomote/drizzle/meta/0002_snapshot.json
new file mode 100644
index 0000000000..2c06436562
--- /dev/null
+++ b/apps/roomote/drizzle/meta/0002_snapshot.json
@@ -0,0 +1,105 @@
+{
+ "id": "16afebd7-b27a-457e-b3d5-4de50a597c2e",
+ "prevId": "4cae0c18-141d-40a3-acc8-38fcd7f07534",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.cloud_jobs": {
+ "name": "cloud_jobs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cloud_jobs_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "result": {
+ "name": "result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error": {
+ "name": "error",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "slack_thread_ts": {
+ "name": "slack_thread_ts",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/apps/roomote/drizzle/meta/_journal.json b/apps/roomote/drizzle/meta/_journal.json
new file mode 100644
index 0000000000..7bfbcd4d35
--- /dev/null
+++ b/apps/roomote/drizzle/meta/_journal.json
@@ -0,0 +1,27 @@
+{
+ "version": "7",
+ "dialect": "postgresql",
+ "entries": [
+ {
+ "idx": 0,
+ "version": "7",
+ "when": 1749740498648,
+ "tag": "0000_cuddly_luke_cage",
+ "breakpoints": true
+ },
+ {
+ "idx": 1,
+ "version": "7",
+ "when": 1750099429125,
+ "tag": "0001_fluffy_sasquatch",
+ "breakpoints": true
+ },
+ {
+ "idx": 2,
+ "version": "7",
+ "when": 1750107620472,
+ "tag": "0002_brief_sentry",
+ "breakpoints": true
+ }
+ ]
+}
diff --git a/apps/roomote/eslint.config.mjs b/apps/roomote/eslint.config.mjs
new file mode 100644
index 0000000000..024d6157d4
--- /dev/null
+++ b/apps/roomote/eslint.config.mjs
@@ -0,0 +1,17 @@
+import { nextJsConfig } from "@roo-code/config-eslint/next-js"
+
+/** @type {import("eslint").Linter.Config} */
+export default [
+ ...nextJsConfig,
+ {
+ rules: {
+ "no-unused-vars": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+ },
+ },
+]
diff --git a/apps/roomote/next-env.d.ts b/apps/roomote/next-env.d.ts
new file mode 100644
index 0000000000..1b3be0840f
--- /dev/null
+++ b/apps/roomote/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/roomote/next.config.ts b/apps/roomote/next.config.ts
new file mode 100644
index 0000000000..dd960b3d85
--- /dev/null
+++ b/apps/roomote/next.config.ts
@@ -0,0 +1,7 @@
+import type { NextConfig } from "next"
+
+const nextConfig: NextConfig = {
+ serverExternalPackages: ["postgres", "ioredis", "bullmq"],
+}
+
+export default nextConfig
diff --git a/apps/roomote/package.json b/apps/roomote/package.json
new file mode 100644
index 0000000000..ae547aa905
--- /dev/null
+++ b/apps/roomote/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "@roo-code/roomote",
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "lint": "next lint",
+ "check-types": "tsc --noEmit",
+ "test": "vitest",
+ "dev": "concurrently \"next dev --port 3001\" \"ngrok http 3001 --domain cte.ngrok.dev\"",
+ "build": "next build",
+ "start": "next start --port 3001",
+ "clean": "rimraf .next .turbo",
+ "drizzle-kit": "dotenvx run -f .env -- tsx node_modules/drizzle-kit/bin.cjs",
+ "db:generate": "pnpm drizzle-kit generate",
+ "db:migrate": "pnpm drizzle-kit migrate",
+ "db:push": "pnpm drizzle-kit push",
+ "db:check": "pnpm drizzle-kit check",
+ "db:studio": "pnpm drizzle-kit studio",
+ "services:start": "docker compose up -d db redis dashboard",
+ "services:stop": "docker compose down dashboard redis db",
+ "worker": "dotenvx run -f .env -- tsx src/lib/worker.ts",
+ "controller": "dotenvx run -f .env -- tsx src/lib/controller.ts",
+ "dashboard": "tsx scripts/dashboard.ts"
+ },
+ "dependencies": {
+ "@bull-board/api": "^6.10.1",
+ "@bull-board/express": "^6.10.1",
+ "@bull-board/ui": "^6.10.1",
+ "@roo-code/ipc": "workspace:^",
+ "@roo-code/types": "workspace:^",
+ "bullmq": "^5.37.0",
+ "drizzle-orm": "^0.44.1",
+ "execa": "^9.6.0",
+ "express": "^5.1.0",
+ "ioredis": "^5.4.3",
+ "next": "^15.2.5",
+ "p-wait-for": "^5.0.2",
+ "postgres": "^3.4.7",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "zod": "^3.25.41"
+ },
+ "devDependencies": {
+ "@roo-code/config-eslint": "workspace:^",
+ "@roo-code/config-typescript": "workspace:^",
+ "@types/express": "^5.0.3",
+ "@types/node": "^22.15.20",
+ "@types/react": "^18.3.23",
+ "@types/react-dom": "^18.3.7",
+ "concurrently": "^9.1.0",
+ "drizzle-kit": "^0.31.1",
+ "tsx": "^4.19.3",
+ "vitest": "^2.1.8"
+ }
+}
diff --git a/apps/roomote/scripts/build.sh b/apps/roomote/scripts/build.sh
new file mode 100755
index 0000000000..1bc54d1e26
--- /dev/null
+++ b/apps/roomote/scripts/build.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Build script for roomote services.
+# This ensures the base image is built before dependent services.
+
+set -e
+
+build_service() {
+ local service=$1
+
+ case $service in
+ "dashboard"|"api"|"worker"|"controller")
+ echo "Building base image first..."
+ docker compose build base
+ echo "Building $service..."
+ docker compose build $service
+ ;;
+ "base")
+ echo "Building base image..."
+ docker compose build base
+ ;;
+ *)
+ echo "Building $service..."
+ docker compose build $service
+ ;;
+ esac
+}
+
+if [ $# -eq 0 ]; then
+ echo "Usage: $0 "
+ echo "Available services: base, dashboard, api, worker, controller, db, redis"
+ echo "Example: $0 dashboard"
+ exit 1
+fi
+
+build_service $1
+
+echo "Build completed successfully!"
diff --git a/apps/roomote/scripts/dashboard.ts b/apps/roomote/scripts/dashboard.ts
new file mode 100644
index 0000000000..f43ba904b4
--- /dev/null
+++ b/apps/roomote/scripts/dashboard.ts
@@ -0,0 +1,20 @@
+import IORedis from "ioredis"
+import { Queue } from "bullmq"
+import { ExpressAdapter } from "@bull-board/express"
+import { BullMQAdapter } from "@bull-board/api/bullMQAdapter"
+import { createBullBoard } from "@bull-board/api"
+import express from "express"
+import type { Express, Request, Response } from "express"
+
+const redis = new IORedis(process.env.REDIS_URL || "redis://localhost:6380", { maxRetriesPerRequest: null })
+const queue = new Queue("roomote", { connection: redis })
+
+const serverAdapter = new ExpressAdapter()
+serverAdapter.setBasePath("/admin/queues")
+createBullBoard({ queues: [new BullMQAdapter(queue)], serverAdapter })
+
+const port = 3002
+const app: Express = express()
+app.use("/admin/queues", serverAdapter.getRouter())
+app.use("/", (req: Request, res: Response) => res.redirect("/admin/queues"))
+app.listen(port, () => console.log(`Bull Board running on: http://localhost:${port}/admin/queues`))
diff --git a/apps/roomote/scripts/enqueue-github-issue-job.sh b/apps/roomote/scripts/enqueue-github-issue-job.sh
new file mode 100755
index 0000000000..5ec7448cc6
--- /dev/null
+++ b/apps/roomote/scripts/enqueue-github-issue-job.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+REPO="RooCodeInc/Roo-Code"
+ISSUE_NUMBER="$1"
+BASE_URL="http://localhost:3001"
+JOBS_ENDPOINT="$BASE_URL/api/jobs"
+
+if [ -z "$ISSUE_NUMBER" ]; then
+ echo "Usage: $0 [repo]"
+ echo ""
+ echo "Examples:"
+ echo " $0 4567 # Fetch issue #4567 from RooCodeInc/Roo-Code"
+ echo " $0 123 owner/repo # Fetch issue #123 from owner/repo"
+ echo ""
+ echo "This script fetches real GitHub issue data and enqueues it as a job."
+ exit 1
+fi
+
+if [ -n "$2" ]; then
+ REPO="$2"
+fi
+
+if ! command -v gh &> /dev/null; then
+ echo "Error: GitHub CLI (gh) is not installed. Please install it first."
+ echo "Visit: https://cli.github.com/"
+ exit 1
+fi
+
+if ! gh auth status &> /dev/null; then
+ echo "Error: Not authenticated with GitHub CLI. Please run 'gh auth login' first."
+ exit 1
+fi
+
+if ! command -v jq &> /dev/null; then
+ echo "Error: jq is not installed. Please install it first."
+ echo "Visit: https://jqlang.github.io/jq/download/"
+ exit 1
+fi
+
+echo "Fetching issue #${ISSUE_NUMBER} from ${REPO}..."
+
+ISSUE_DATA=$(gh issue view ${ISSUE_NUMBER} --repo ${REPO} --json title,body,labels 2>/dev/null)
+
+if [ $? -ne 0 ]; then
+ echo "Error: Failed to fetch issue #${ISSUE_NUMBER} from ${REPO}"
+ echo "Please check that the issue exists and you have access to the repository."
+ exit 1
+fi
+
+TITLE=$(echo "$ISSUE_DATA" | jq -r '.title')
+BODY=$(echo "$ISSUE_DATA" | jq -r '.body // ""')
+LABELS=$(echo "$ISSUE_DATA" | jq -r '[.labels[].name] | @json')
+
+JSON_PAYLOAD=$(jq -n \
+ --arg type "github.issue.fix" \
+ --arg repo "$REPO" \
+ --argjson issue "$ISSUE_NUMBER" \
+ --arg title "$TITLE" \
+ --arg body "$BODY" \
+ --argjson labels "$LABELS" \
+ '{
+ type: $type,
+ payload: {
+ repo: $repo,
+ issue: $issue,
+ title: $title,
+ body: $body,
+ labels: $labels
+ }
+ }')
+
+echo "curl -X POST \"$JOBS_ENDPOINT\" -H \"Content-Type: application/json\" -d \"$JSON_PAYLOAD\" -w \"\nStatus: %{http_code}\n\n\""
+
+curl -X POST "$JOBS_ENDPOINT" -H "Content-Type: application/json" -d "$JSON_PAYLOAD" -w "\nStatus: %{http_code}\n\n"
diff --git a/apps/roomote/src/app/api/health/route.ts b/apps/roomote/src/app/api/health/route.ts
new file mode 100644
index 0000000000..26afc264a8
--- /dev/null
+++ b/apps/roomote/src/app/api/health/route.ts
@@ -0,0 +1,30 @@
+import { NextResponse } from "next/server"
+
+import { db } from "@/db"
+import { redis } from "@/lib"
+
+export async function GET() {
+ try {
+ const services = { database: false, redis: false }
+
+ try {
+ await db.execute("SELECT 1")
+ services.database = true
+ } catch (error) {
+ console.error("Database health check failed:", error)
+ }
+
+ try {
+ await redis.ping()
+ services.redis = true
+ } catch (error) {
+ console.error("Redis health check failed:", error)
+ }
+
+ const allHealthy = Object.values(services).every(Boolean)
+ return NextResponse.json({ status: allHealthy ? "ok" : "error", services }, { status: allHealthy ? 200 : 500 })
+ } catch (error) {
+ console.error("Health check error:", error)
+ return NextResponse.json({ status: "error", error: "Internal server error" }, { status: 500 })
+ }
+}
diff --git a/apps/roomote/src/app/api/jobs/[id]/route.ts b/apps/roomote/src/app/api/jobs/[id]/route.ts
new file mode 100644
index 0000000000..1299312c41
--- /dev/null
+++ b/apps/roomote/src/app/api/jobs/[id]/route.ts
@@ -0,0 +1,38 @@
+import { NextRequest, NextResponse } from "next/server"
+import { eq } from "drizzle-orm"
+
+import { db, cloudJobs } from "@/db"
+
+type Params = Promise<{ id: string }>
+
+export async function GET(request: NextRequest, { params }: { params: Params }) {
+ try {
+ const { id } = await params
+ const jobId = parseInt(id, 10)
+
+ if (isNaN(jobId)) {
+ return NextResponse.json({ error: "Invalid job ID" }, { status: 400 })
+ }
+
+ const [job] = await db.select().from(cloudJobs).where(eq(cloudJobs.id, jobId)).limit(1)
+
+ if (!job) {
+ return NextResponse.json({ error: "Job not found" }, { status: 404 })
+ }
+
+ return NextResponse.json({
+ id: job.id,
+ type: job.type,
+ status: job.status,
+ payload: job.payload,
+ result: job.result,
+ error: job.error,
+ createdAt: job.createdAt,
+ startedAt: job.startedAt,
+ completedAt: job.completedAt,
+ })
+ } catch (error) {
+ console.error("Error fetching job:", error)
+ return NextResponse.json({ error: "Internal server error" }, { status: 500 })
+ }
+}
diff --git a/apps/roomote/src/app/api/jobs/route.ts b/apps/roomote/src/app/api/jobs/route.ts
new file mode 100644
index 0000000000..4838ffcffe
--- /dev/null
+++ b/apps/roomote/src/app/api/jobs/route.ts
@@ -0,0 +1,42 @@
+import { NextRequest, NextResponse } from "next/server"
+import { z } from "zod"
+
+import { createJobSchema } from "@/types"
+import { db, cloudJobs } from "@/db"
+import { enqueue } from "@/lib"
+
+export async function POST(request: NextRequest) {
+ try {
+ const body = await request.json()
+ const values = createJobSchema.parse(body)
+
+ const [job] = await db
+ .insert(cloudJobs)
+ .values({ ...values, status: "pending" })
+ .returning()
+
+ if (!job) {
+ throw new Error("Failed to create `cloudJobs` record.")
+ }
+
+ let enqueuedJob
+
+ switch (values.type) {
+ case "github.issue.fix":
+ enqueuedJob = await enqueue({ jobId: job.id, ...values })
+ break
+ default:
+ throw new Error(`Unknown job type: ${values.type}`)
+ }
+
+ return NextResponse.json({ message: "job_enqueued", jobId: job.id, enqueuedJobId: enqueuedJob.id })
+ } catch (error) {
+ console.error("Create Job Error:", error)
+
+ if (error instanceof z.ZodError) {
+ return NextResponse.json({ error: "bad_request", details: error.errors }, { status: 400 })
+ }
+
+ return NextResponse.json({ error: "internal_server_error" }, { status: 500 })
+ }
+}
diff --git a/apps/roomote/src/app/api/webhooks/github/route.ts b/apps/roomote/src/app/api/webhooks/github/route.ts
new file mode 100644
index 0000000000..40322bcd4c
--- /dev/null
+++ b/apps/roomote/src/app/api/webhooks/github/route.ts
@@ -0,0 +1,128 @@
+import { NextRequest, NextResponse } from "next/server"
+import { createHmac } from "crypto"
+import { z } from "zod"
+import { eq } from "drizzle-orm"
+
+import { type JobType, type JobPayload, githubIssueWebhookSchema, githubPullRequestWebhookSchema } from "@/types"
+import { db, cloudJobs } from "@/db"
+import { enqueue } from "@/lib"
+import { SlackNotifier } from "@/lib/slack"
+
+function verifySignature(body: string, signature: string, secret: string): boolean {
+ const expectedSignature = createHmac("sha256", secret).update(body, "utf8").digest("hex")
+ const receivedSignature = signature.replace("sha256=", "")
+ return expectedSignature === receivedSignature
+}
+
+async function handleIssueEvent(body: string) {
+ const data = githubIssueWebhookSchema.parse(JSON.parse(body))
+ const { action, repository, issue } = data
+
+ if (action !== "opened") {
+ return NextResponse.json({ message: "action_ignored" })
+ }
+
+ console.log("🗄️ Issue Webhook ->", data)
+
+ const type: JobType = "github.issue.fix"
+
+ const payload: JobPayload = {
+ repo: repository.full_name,
+ issue: issue.number,
+ title: issue.title,
+ body: issue.body || "",
+ labels: issue.labels.map(({ name }) => name),
+ }
+
+ const [job] = await db.insert(cloudJobs).values({ type, payload, status: "pending" }).returning()
+
+ if (!job) {
+ throw new Error("Failed to create `cloudJobs` record.")
+ }
+
+ const enqueuedJob = await enqueue({ jobId: job.id, type, payload })
+ console.log("🔗 Enqueued job ->", enqueuedJob)
+
+ return NextResponse.json({ message: "job_enqueued", jobId: job.id, enqueuedJobId: enqueuedJob.id })
+}
+
+async function handlePullRequestEvent(body: string) {
+ const data = githubPullRequestWebhookSchema.parse(JSON.parse(body))
+ const { action, pull_request, repository } = data
+
+ if (action !== "opened") {
+ return NextResponse.json({ message: "action_ignored" })
+ }
+
+ console.log("🗄️ PR Webhook ->", data)
+
+ // Extract issue number from PR title or body (looking for "Fixes #123" pattern).
+ const issueNumberMatch =
+ pull_request.title.match(/(?:fixes|closes|resolves)\s+#(\d+)/i) ||
+ (pull_request.body && pull_request.body.match(/(?:fixes|closes|resolves)\s+#(\d+)/i))
+
+ if (!issueNumberMatch) {
+ return NextResponse.json({ message: "no_issue_reference_found" })
+ }
+
+ const issueNumber = parseInt(issueNumberMatch[1]!, 10)
+
+ // Find the job that corresponds to this issue.
+ const jobs = await db.select().from(cloudJobs).where(eq(cloudJobs.type, "github.issue.fix"))
+
+ // Filter jobs to find the one matching this repo and issue.
+ const job = jobs.find((j) => {
+ const payload = j.payload as { repo: string; issue: number }
+ return payload.repo === repository.full_name && payload.issue === issueNumber
+ })
+
+ if (!job || !job.slackThreadTs) {
+ console.log("No job found or no slack thread for issue", issueNumber)
+ return NextResponse.json({ message: "no_job_or_slack_thread_found" })
+ }
+
+ // Post to Slack thread.
+ const slackNotifier = new SlackNotifier()
+
+ await slackNotifier.postTaskUpdated(
+ job.slackThreadTs,
+ `🎉 Pull request created: <${pull_request.html_url}|PR #${pull_request.number}>\n*${pull_request.title}*`,
+ "success",
+ )
+
+ return NextResponse.json({ message: "slack_notification_sent" })
+}
+
+export async function POST(request: NextRequest) {
+ try {
+ const signature = request.headers.get("x-hub-signature-256")
+
+ if (!signature) {
+ return NextResponse.json({ error: "missing_signature" }, { status: 400 })
+ }
+
+ const body = await request.text()
+
+ if (!verifySignature(body, signature, process.env.GH_WEBHOOK_SECRET!)) {
+ return NextResponse.json({ error: "invalid_signature" }, { status: 401 })
+ }
+
+ const event = request.headers.get("x-github-event")
+
+ if (event === "issues") {
+ return await handleIssueEvent(body)
+ } else if (event === "pull_request") {
+ return await handlePullRequestEvent(body)
+ } else {
+ return NextResponse.json({ message: "event_ignored" })
+ }
+ } catch (error) {
+ console.error("GitHub Webhook Error:", error)
+
+ if (error instanceof z.ZodError) {
+ return NextResponse.json({ error: "bad_request", details: error.errors }, { status: 400 })
+ }
+
+ return NextResponse.json({ error: "internal_server_error" }, { status: 500 })
+ }
+}
diff --git a/apps/roomote/src/app/layout.tsx b/apps/roomote/src/app/layout.tsx
new file mode 100644
index 0000000000..03b9311e65
--- /dev/null
+++ b/apps/roomote/src/app/layout.tsx
@@ -0,0 +1,14 @@
+import type { Metadata } from "next"
+
+export const metadata: Metadata = {
+ title: "Cloud Agents",
+ description: "Roo Code task execution service",
+}
+
+export default function RootLayout({ children }: { children: React.ReactNode }) {
+ return (
+
+ {children}
+
+ )
+}
diff --git a/apps/roomote/src/app/page.tsx b/apps/roomote/src/app/page.tsx
new file mode 100644
index 0000000000..0cbb883e46
--- /dev/null
+++ b/apps/roomote/src/app/page.tsx
@@ -0,0 +1,3 @@
+export default function Page() {
+ return Hello, World!
+}
diff --git a/apps/roomote/src/db/index.ts b/apps/roomote/src/db/index.ts
new file mode 100644
index 0000000000..57fcedc8ec
--- /dev/null
+++ b/apps/roomote/src/db/index.ts
@@ -0,0 +1,8 @@
+import { drizzle } from "drizzle-orm/postgres-js"
+import postgres from "postgres"
+
+import { schema } from "./schema"
+
+export const db = drizzle(postgres(process.env.DATABASE_URL!, { prepare: false }), { schema })
+
+export * from "./schema"
diff --git a/apps/roomote/src/db/schema.ts b/apps/roomote/src/db/schema.ts
new file mode 100644
index 0000000000..88fb0c6000
--- /dev/null
+++ b/apps/roomote/src/db/schema.ts
@@ -0,0 +1,34 @@
+import { pgTable, text, timestamp, integer, jsonb } from "drizzle-orm/pg-core"
+
+import type { JobType, JobStatus, JobPayload } from "@/types"
+
+/**
+ * cloudJobs
+ */
+
+export const cloudJobs = pgTable("cloud_jobs", {
+ id: integer().primaryKey().generatedAlwaysAsIdentity(),
+ type: text().notNull().$type(),
+ status: text().notNull().default("pending").$type(),
+ payload: jsonb().notNull().$type(),
+ result: jsonb(),
+ error: text(),
+ slackThreadTs: text("slack_thread_ts"),
+ startedAt: timestamp("started_at"),
+ completedAt: timestamp("completed_at"),
+ createdAt: timestamp("created_at").notNull().defaultNow(),
+})
+
+export type CloudJob = typeof cloudJobs.$inferSelect
+
+export type InsertCloudJob = typeof cloudJobs.$inferInsert
+
+export type UpdateCloudJob = Partial>
+
+/**
+ * schema
+ */
+
+export const schema = {
+ cloudJobs,
+}
diff --git a/apps/roomote/src/lib/__tests__/controller.test.ts b/apps/roomote/src/lib/__tests__/controller.test.ts
new file mode 100644
index 0000000000..8131f15c19
--- /dev/null
+++ b/apps/roomote/src/lib/__tests__/controller.test.ts
@@ -0,0 +1,95 @@
+// npx vitest src/lib/__tests__/controller.test.ts
+
+import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"
+
+const mockQueue = {
+ getWaiting: vi.fn(() => Promise.resolve([])),
+ getActive: vi.fn(() => Promise.resolve([])),
+ close: vi.fn(() => Promise.resolve()),
+ on: vi.fn(),
+}
+
+const mockSpawn = vi.fn(() => ({
+ stdout: { pipe: vi.fn() },
+ stderr: { pipe: vi.fn() },
+ on: vi.fn(),
+ unref: vi.fn(),
+}))
+
+const mockCreateWriteStream = vi.fn(() => ({
+ end: vi.fn(),
+}))
+
+vi.mock("../redis", () => ({
+ redis: { host: "localhost", port: 6379 },
+}))
+
+vi.mock("child_process", () => ({
+ spawn: mockSpawn,
+}))
+
+vi.mock("fs", () => ({
+ default: {
+ existsSync: vi.fn(() => false),
+ createWriteStream: mockCreateWriteStream,
+ },
+}))
+
+const mockQueueConstructor = vi.fn(() => mockQueue)
+
+vi.mock("bullmq", () => ({
+ Queue: mockQueueConstructor,
+}))
+
+describe("WorkerController", () => {
+ let WorkerController: typeof import("../controller").WorkerController
+
+ beforeEach(async () => {
+ vi.clearAllMocks()
+ const controllerModule = await import("../controller")
+ WorkerController = controllerModule.WorkerController
+ })
+
+ afterEach(() => {
+ vi.restoreAllMocks()
+ })
+
+ it("should create a Queue instance with correct configuration", () => {
+ const controller = new WorkerController()
+
+ expect(mockQueueConstructor).toHaveBeenCalledWith("roomote", {
+ connection: { host: "localhost", port: 6379 },
+ })
+
+ expect(controller).toBeDefined()
+ })
+
+ it("should handle queue monitoring without errors", async () => {
+ const controller = new WorkerController()
+
+ await controller.start()
+ expect(controller).toBeDefined()
+
+ await controller.stop()
+ expect(mockQueue.close).toHaveBeenCalled()
+ })
+
+ it("should handle worker spawning logic", () => {
+ const controller = new WorkerController()
+ expect(mockSpawn).toBeDefined()
+ expect(mockCreateWriteStream).toBeDefined()
+ expect(controller).toBeDefined()
+ })
+
+ it("should track running state correctly", async () => {
+ const controller = new WorkerController()
+
+ expect(controller.isRunning).toBeFalsy()
+
+ await controller.start()
+ expect(controller.isRunning).toBeTruthy()
+
+ await controller.stop()
+ expect(controller.isRunning).toBeFalsy()
+ })
+})
diff --git a/apps/roomote/src/lib/controller.ts b/apps/roomote/src/lib/controller.ts
new file mode 100644
index 0000000000..293e8d844d
--- /dev/null
+++ b/apps/roomote/src/lib/controller.ts
@@ -0,0 +1,159 @@
+import { spawn } from "child_process"
+import fs from "fs"
+import { Queue } from "bullmq"
+
+import { redis } from "./redis"
+
+export class WorkerController {
+ private readonly POLL_INTERVAL_MS = 5000
+ private readonly MAX_WORKERS = 5
+
+ private queue: Queue
+ public isRunning = false
+ private pollingInterval: NodeJS.Timeout | null = null
+ private activeWorkers = new Set()
+
+ constructor() {
+ this.queue = new Queue("roomote", { connection: redis })
+ }
+
+ async start() {
+ if (this.isRunning) {
+ console.log("Controller is already running")
+ return
+ }
+
+ this.isRunning = true
+ console.log("Worker controller started")
+
+ await this.checkAndSpawnWorker()
+
+ this.pollingInterval = setInterval(async () => {
+ await this.checkAndSpawnWorker()
+ }, this.POLL_INTERVAL_MS)
+ }
+
+ async stop() {
+ if (!this.isRunning) {
+ return
+ }
+
+ this.isRunning = false
+ console.log("Stopping worker controller...")
+
+ if (this.pollingInterval) {
+ clearInterval(this.pollingInterval)
+ this.pollingInterval = null
+ }
+
+ await this.queue.close()
+ console.log("Worker controller stopped")
+ }
+
+ private async checkAndSpawnWorker() {
+ try {
+ const waiting = await this.queue.getWaiting()
+ const active = await this.queue.getActive()
+
+ const waitingCount = waiting.length
+ const activeCount = active.length
+
+ console.log(
+ `Queue status: ${waitingCount} waiting, ${activeCount} active, ${this.activeWorkers.size} spawned workers`,
+ )
+
+ if (waitingCount > 0 && this.activeWorkers.size < this.MAX_WORKERS) {
+ await this.spawnWorker()
+ }
+ } catch (error) {
+ console.error("Error checking queue status:", error)
+ }
+ }
+
+ private async spawnWorker() {
+ const workerId = `worker-${Date.now()}`
+
+ try {
+ console.log(`Spawning worker: ${workerId}`)
+ const isRunningInDocker = fs.existsSync("/.dockerenv")
+
+ const dockerArgs = [
+ `--name roomote-${workerId}`,
+ "--rm",
+ "--network roomote_default",
+ "-e HOST_EXECUTION_METHOD=docker",
+ `-e GH_TOKEN=${process.env.GH_TOKEN}`,
+ `-e DATABASE_URL=${process.env.DATABASE_URL}`,
+ `-e REDIS_URL=${process.env.REDIS_URL}`,
+ `-e NODE_ENV=${process.env.NODE_ENV}`,
+ "-v /var/run/docker.sock:/var/run/docker.sock",
+ "-v /tmp/roomote:/var/log/roomote",
+ ]
+
+ const cliCommand = "pnpm worker"
+
+ const command = isRunningInDocker
+ ? `docker run ${dockerArgs.join(" ")} roomote-worker sh -c "${cliCommand}"`
+ : cliCommand
+
+ console.log("Spawning worker with command:", command)
+
+ const childProcess = spawn("sh", ["-c", command], {
+ detached: true,
+ stdio: ["ignore", "pipe", "pipe"],
+ })
+
+ if (childProcess.stdout) {
+ childProcess.stdout.on("data", (data) => {
+ console.log(data.toString())
+ })
+ }
+
+ if (childProcess.stderr) {
+ childProcess.stderr.on("data", (data) => {
+ console.error(data.toString())
+ })
+ }
+
+ this.activeWorkers.add(workerId)
+
+ childProcess.on("exit", (code) => {
+ console.log(`Worker ${workerId} exited with code ${code}`)
+ this.activeWorkers.delete(workerId)
+ })
+
+ childProcess.on("error", (error) => {
+ console.error(`Worker ${workerId} error:`, error)
+ this.activeWorkers.delete(workerId)
+ })
+
+ // Detach the process so it can run independently.
+ childProcess.unref()
+ } catch (error) {
+ console.error(`Failed to spawn worker ${workerId}:`, error)
+ this.activeWorkers.delete(workerId)
+ }
+ }
+}
+
+// Only run if this file is executed directly (not imported).
+if (import.meta.url === `file://${process.argv[1]}`) {
+ const controller = new WorkerController()
+
+ process.on("SIGTERM", async () => {
+ console.log("SIGTERM -> shutting down controller gracefully...")
+ await controller.stop()
+ process.exit(0)
+ })
+
+ process.on("SIGINT", async () => {
+ console.log("SIGINT -> shutting down controller gracefully...")
+ await controller.stop()
+ process.exit(0)
+ })
+
+ controller.start().catch((error) => {
+ console.error("Failed to start controller:", error)
+ process.exit(1)
+ })
+}
diff --git a/apps/roomote/src/lib/index.ts b/apps/roomote/src/lib/index.ts
new file mode 100644
index 0000000000..2e5ea80e16
--- /dev/null
+++ b/apps/roomote/src/lib/index.ts
@@ -0,0 +1,2 @@
+export { redis } from "./redis"
+export { enqueue } from "./queue"
diff --git a/apps/roomote/src/lib/job.ts b/apps/roomote/src/lib/job.ts
new file mode 100644
index 0000000000..cc6e15dc23
--- /dev/null
+++ b/apps/roomote/src/lib/job.ts
@@ -0,0 +1,69 @@
+import { eq } from "drizzle-orm"
+import { Job } from "bullmq"
+
+import { db, cloudJobs, type UpdateCloudJob } from "@/db"
+import type { JobType, JobStatus, JobParams } from "@/types"
+
+import { fixGitHubIssue } from "./jobs/fixGitHubIssue"
+
+export async function processJob({ data: { type, payload, jobId }, ...job }: Job>) {
+ console.log(`[${job.name} | ${job.id}] Processing job ${jobId} of type ${type}`)
+
+ try {
+ let result: unknown
+
+ switch (type) {
+ case "github.issue.fix":
+ result = await fixGitHubIssue(payload, {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ onTaskStarted: async (slackThreadTs: string | null, _rooTaskId: string) => {
+ if (slackThreadTs) {
+ await updateJobStatus(jobId, "processing", undefined, undefined, slackThreadTs)
+ }
+ },
+ })
+
+ break
+ default:
+ throw new Error(`Unknown job type: ${type}`)
+ }
+
+ await updateJobStatus(jobId, "completed", result)
+ console.log(`[${job.name} | ${job.id}] Job ${jobId} completed successfully`)
+ } catch (error) {
+ console.error(`[${job.name} | ${job.id}] Job ${jobId} failed:`, error)
+ const errorMessage = error instanceof Error ? error.message : String(error)
+ await updateJobStatus(jobId, "failed", undefined, errorMessage)
+ throw error // Re-throw to mark job as failed in BullMQ.
+ }
+}
+
+async function updateJobStatus(
+ jobId: number,
+ status: JobStatus,
+ result?: unknown,
+ error?: string,
+ slackThreadTs?: string,
+) {
+ const values: UpdateCloudJob = { status }
+
+ if (status === "processing") {
+ values.startedAt = new Date()
+ } else if (status === "completed" || status === "failed") {
+ values.completedAt = new Date()
+
+ if (result) {
+ values.result = result
+ }
+
+ if (error) {
+ values.error = error
+ }
+ }
+
+ if (slackThreadTs) {
+ values.slackThreadTs = slackThreadTs
+ }
+
+ await db.update(cloudJobs).set(values).where(eq(cloudJobs.id, jobId))
+}
diff --git a/apps/roomote/src/lib/jobs/fixGitHubIssue.ts b/apps/roomote/src/lib/jobs/fixGitHubIssue.ts
new file mode 100644
index 0000000000..3c22b8d9a8
--- /dev/null
+++ b/apps/roomote/src/lib/jobs/fixGitHubIssue.ts
@@ -0,0 +1,55 @@
+import * as path from "path"
+import * as os from "node:os"
+
+import type { JobType, JobPayload } from "@/types"
+
+import { runTask, type RunTaskCallbacks } from "../runTask"
+import { Logger } from "../logger"
+
+const jobType: JobType = "github.issue.fix"
+
+type FixGitHubIssueJobPayload = JobPayload<"github.issue.fix">
+
+export async function fixGitHubIssue(
+ jobPayload: FixGitHubIssueJobPayload,
+ callbacks?: RunTaskCallbacks,
+): Promise<{
+ repo: string
+ issue: number
+ result: unknown
+}> {
+ const prompt = `
+Fix the following GitHub issue:
+
+Repository: ${jobPayload.repo}
+Issue #${jobPayload.issue}: ${jobPayload.title}
+
+Description:
+${jobPayload.body}
+
+${jobPayload.labels && jobPayload.labels.length > 0 ? `Labels: ${jobPayload.labels.join(", ")}` : ""}
+
+Please analyze the issue, understand what needs to be fixed, and implement a solution.
+
+When you're finished:
+- Create a git branch to store your work (git checkout -b fix-${jobPayload.issue})
+- Commit your changes to this branch (git commit -m "Fixes #${jobPayload.issue}")
+- Push your branch to the remote repository (git push --set-upstream origin fix-${jobPayload.issue})
+- Submit a pull request using the "gh" command line tool (gh pr create --title "Fixes #${jobPayload.issue}\n\n[Your PR description here.]" --fill)
+
+Your job isn't done until you've created a pull request. Try to solve any git issues that arise while creating your branch and submitting your pull request.
+`.trim()
+
+ const { repo, issue } = jobPayload
+
+ const result = await runTask({
+ jobType,
+ jobPayload,
+ prompt,
+ publish: async () => {},
+ logger: new Logger({ logDir: path.resolve(os.tmpdir(), "logs"), filename: "worker.log", tag: "worker" }),
+ callbacks,
+ })
+
+ return { repo, issue, result }
+}
diff --git a/apps/roomote/src/lib/logger.ts b/apps/roomote/src/lib/logger.ts
new file mode 100644
index 0000000000..e185803ea1
--- /dev/null
+++ b/apps/roomote/src/lib/logger.ts
@@ -0,0 +1,86 @@
+import * as fs from "fs"
+import * as path from "path"
+
+enum LogLevel {
+ INFO = "INFO",
+ ERROR = "ERROR",
+ WARN = "WARN",
+ DEBUG = "DEBUG",
+}
+
+interface LoggerOptions {
+ logDir: string
+ filename: string
+ tag: string
+}
+
+export class Logger {
+ private logStream: fs.WriteStream | undefined
+ private logFilePath: string
+ private tag: string
+
+ constructor({ logDir, filename, tag }: LoggerOptions) {
+ this.tag = tag
+ this.logFilePath = path.join(logDir, filename)
+ this.initializeLogger(logDir)
+ }
+
+ private initializeLogger(logDir: string): void {
+ try {
+ fs.mkdirSync(logDir, { recursive: true })
+ } catch (error) {
+ console.error(`Failed to create log directory ${logDir}:`, error)
+ }
+
+ try {
+ this.logStream = fs.createWriteStream(this.logFilePath, { flags: "a" })
+ } catch (error) {
+ console.error(`Failed to create log file ${this.logFilePath}:`, error)
+ }
+ }
+
+ private writeToLog(level: LogLevel, message: string, ...args: unknown[]) {
+ try {
+ const timestamp = new Date().toISOString()
+
+ const logLine = `[${timestamp} | ${level} | ${this.tag}] ${message} ${
+ args.length > 0 ? JSON.stringify(args) : ""
+ }\n`
+
+ console.log(logLine.trim())
+
+ if (this.logStream) {
+ this.logStream.write(logLine)
+ }
+ } catch (error) {
+ console.error(`Failed to write to log file ${this.logFilePath}:`, error)
+ }
+ }
+
+ public info(message: string, ...args: unknown[]): void {
+ this.writeToLog(LogLevel.INFO, message, ...args)
+ }
+
+ public error(message: string, ...args: unknown[]): void {
+ this.writeToLog(LogLevel.ERROR, message, ...args)
+ }
+
+ public warn(message: string, ...args: unknown[]): void {
+ this.writeToLog(LogLevel.WARN, message, ...args)
+ }
+
+ public debug(message: string, ...args: unknown[]): void {
+ this.writeToLog(LogLevel.DEBUG, message, ...args)
+ }
+
+ public log(message: string, ...args: unknown[]): void {
+ this.info(message, ...args)
+ }
+
+ public close(): void {
+ if (this.logStream) {
+ this.logStream.end()
+ this.logStream = undefined
+ }
+ }
+}
diff --git a/apps/roomote/src/lib/queue.ts b/apps/roomote/src/lib/queue.ts
new file mode 100644
index 0000000000..2afef68a12
--- /dev/null
+++ b/apps/roomote/src/lib/queue.ts
@@ -0,0 +1,19 @@
+import { Queue, Job } from "bullmq"
+
+import type { JobTypes, JobPayload, JobParams } from "@/types"
+
+import { redis } from "./redis"
+
+const queue = new Queue("roomote", {
+ connection: redis,
+ defaultJobOptions: {
+ removeOnComplete: 100,
+ removeOnFail: 50,
+ attempts: 3,
+ backoff: { type: "exponential", delay: 2000 },
+ },
+})
+
+export async function enqueue(params: JobParams): Promise>> {
+ return queue.add(params.type, params, { jobId: `${params.type}-${params.jobId}` })
+}
diff --git a/apps/roomote/src/lib/redis.ts b/apps/roomote/src/lib/redis.ts
new file mode 100644
index 0000000000..c29477b27b
--- /dev/null
+++ b/apps/roomote/src/lib/redis.ts
@@ -0,0 +1,5 @@
+import IORedis from "ioredis"
+
+export const redis = new IORedis(process.env.REDIS_URL || "redis://localhost:6379", {
+ maxRetriesPerRequest: null,
+})
diff --git a/apps/roomote/src/lib/runTask.ts b/apps/roomote/src/lib/runTask.ts
new file mode 100644
index 0000000000..84aa2c97c4
--- /dev/null
+++ b/apps/roomote/src/lib/runTask.ts
@@ -0,0 +1,274 @@
+import * as path from "path"
+import * as os from "node:os"
+import * as crypto from "node:crypto"
+
+import pWaitFor from "p-wait-for"
+import { execa } from "execa"
+
+import { type TaskEvent, TaskCommandName, RooCodeEventName, IpcMessageType, EVALS_SETTINGS } from "@roo-code/types"
+import { IpcClient } from "@roo-code/ipc"
+
+import type { JobPayload, JobType } from "@/types"
+
+import { Logger } from "./logger"
+import { isDockerContainer } from "./utils"
+import { SlackNotifier } from "./slack"
+
+const TIMEOUT = 30 * 60 * 1_000
+
+class SubprocessTimeoutError extends Error {
+ constructor(timeout: number) {
+ super(`Subprocess timeout after ${timeout}ms`)
+ this.name = "SubprocessTimeoutError"
+ }
+}
+
+export type RunTaskCallbacks = {
+ onTaskStarted?: (slackThreadTs: string | null, rooTaskId: string) => Promise
+ onTaskAborted?: (slackThreadTs: string | null) => Promise
+ onTaskCompleted?: (
+ slackThreadTs: string | null,
+ success: boolean,
+ duration: number,
+ rooTaskId?: string,
+ ) => Promise
+ onTaskTimedOut?: (slackThreadTs: string | null) => Promise
+ onClientDisconnected?: (slackThreadTs: string | null) => Promise
+}
+
+type RunTaskOptions = {
+ jobType: T
+ jobPayload: JobPayload
+ prompt: string
+ publish: (taskEvent: TaskEvent) => Promise
+ logger: Logger
+ callbacks?: RunTaskCallbacks
+}
+
+export const runTask = async ({
+ jobType,
+ jobPayload,
+ prompt,
+ publish,
+ logger,
+ callbacks,
+}: RunTaskOptions) => {
+ const workspacePath = "/roo/repos/Roo-Code" // findGitRoot(process.cwd())
+ const ipcSocketPath = path.resolve(os.tmpdir(), `${crypto.randomUUID().slice(0, 8)}.sock`)
+ const env = { ROO_CODE_IPC_SOCKET_PATH: ipcSocketPath }
+ const controller = new AbortController()
+ const cancelSignal = controller.signal
+ const containerized = isDockerContainer()
+
+ const codeCommand = containerized
+ ? `xvfb-run --auto-servernum --server-num=1 code --wait --log trace --disable-workspace-trust --disable-gpu --disable-lcd-text --no-sandbox --user-data-dir /roo/.vscode --password-store="basic" -n ${workspacePath}`
+ : `code --disable-workspace-trust -n ${workspacePath}`
+
+ logger.info(codeCommand)
+
+ // Sleep for a random amount of time between 5 and 10 seconds, unless we're
+ // running in a container, in which case there are no issues with flooding
+ // VSCode with new windows.
+ if (!containerized) {
+ await new Promise((resolve) => setTimeout(resolve, Math.random() * 5_000 + 5_000))
+ }
+
+ const subprocess = execa({ env, shell: "/bin/bash", cancelSignal })`${codeCommand}`
+
+ // If debugging, add `--verbose` to `command` and uncomment the following line.
+ // subprocess.stdout.pipe(process.stdout)
+
+ // Give VSCode some time to spawn before connecting to its unix socket.
+ await new Promise((resolve) => setTimeout(resolve, 3_000))
+ let client: IpcClient | undefined = undefined
+ let attempts = 5
+
+ while (true) {
+ try {
+ client = new IpcClient(ipcSocketPath)
+ await pWaitFor(() => client!.isReady, { interval: 250, timeout: 1_000 })
+ break
+ } catch (_error) {
+ client?.disconnect()
+ attempts--
+
+ if (attempts <= 0) {
+ logger.error(`unable to connect to IPC socket -> ${ipcSocketPath}`)
+ throw new Error("Unable to connect.")
+ }
+ }
+ }
+
+ let taskStartedAt = Date.now()
+ let taskFinishedAt: number | undefined
+ let taskAbortedAt: number | undefined
+ let taskTimedOut: boolean = false
+ let rooTaskId: string | undefined
+ let isClientDisconnected = false
+
+ const slackNotifier = new SlackNotifier(logger)
+ let slackThreadTs: string | null = null
+
+ const ignoreEvents: Record<"broadcast" | "log", RooCodeEventName[]> = {
+ broadcast: [RooCodeEventName.Message],
+ log: [RooCodeEventName.TaskTokenUsageUpdated, RooCodeEventName.TaskAskResponded],
+ }
+
+ client.on(IpcMessageType.TaskEvent, async (taskEvent) => {
+ const { eventName, payload } = taskEvent
+
+ // Publish all events except for these to Redis.
+ if (!ignoreEvents.broadcast.includes(eventName)) {
+ await publish({ ...taskEvent })
+ }
+
+ // Log all events except for these.
+ // For message events we only log non-partial messages.
+ if (
+ !ignoreEvents.log.includes(eventName) &&
+ (eventName !== RooCodeEventName.Message || payload[0].message.partial !== true)
+ ) {
+ logger.info(`${eventName} ->`, payload)
+ }
+
+ if (eventName === RooCodeEventName.TaskStarted) {
+ taskStartedAt = Date.now()
+ rooTaskId = payload[0]
+
+ if (rooTaskId) {
+ slackThreadTs = await slackNotifier.postTaskStarted({ jobType, jobPayload, rooTaskId })
+
+ if (callbacks?.onTaskStarted) {
+ await callbacks.onTaskStarted(slackThreadTs, rooTaskId)
+ }
+ }
+ }
+
+ if (eventName === RooCodeEventName.TaskAborted) {
+ taskAbortedAt = Date.now()
+
+ if (slackThreadTs) {
+ await slackNotifier.postTaskUpdated(slackThreadTs, "Task was aborted", "warning")
+ }
+
+ if (callbacks?.onTaskAborted) {
+ await callbacks.onTaskAborted(slackThreadTs)
+ }
+ }
+
+ if (eventName === RooCodeEventName.TaskCompleted) {
+ taskFinishedAt = Date.now()
+
+ if (slackThreadTs) {
+ await slackNotifier.postTaskCompleted(slackThreadTs, true, taskFinishedAt - taskStartedAt, rooTaskId)
+ }
+
+ if (callbacks?.onTaskCompleted) {
+ await callbacks.onTaskCompleted(slackThreadTs, true, taskFinishedAt - taskStartedAt, rooTaskId)
+ }
+ }
+ })
+
+ client.on(IpcMessageType.Disconnect, async () => {
+ logger.info(`disconnected from IPC socket -> ${ipcSocketPath}`)
+ isClientDisconnected = true
+ })
+
+ client.sendCommand({
+ commandName: TaskCommandName.StartNewTask,
+ data: {
+ configuration: {
+ ...EVALS_SETTINGS,
+ openRouterApiKey: process.env.OPENROUTER_API_KEY,
+ },
+ text: prompt,
+ newTab: true,
+ },
+ })
+
+ try {
+ await pWaitFor(() => !!taskFinishedAt || !!taskAbortedAt || isClientDisconnected, {
+ interval: 1_000,
+ timeout: TIMEOUT,
+ })
+ } catch (_error) {
+ taskTimedOut = true
+ logger.error("time limit reached")
+
+ if (slackThreadTs) {
+ await slackNotifier.postTaskUpdated(slackThreadTs, "Task timed out after 30 minutes", "error")
+ }
+
+ if (callbacks?.onTaskTimedOut) {
+ await callbacks.onTaskTimedOut(slackThreadTs)
+ }
+
+ if (rooTaskId && !isClientDisconnected) {
+ logger.info("cancelling task")
+ client.sendCommand({ commandName: TaskCommandName.CancelTask, data: rooTaskId })
+ await new Promise((resolve) => setTimeout(resolve, 5_000)) // Allow some time for the task to cancel.
+ }
+
+ taskFinishedAt = Date.now()
+ }
+
+ if (!taskFinishedAt && !taskTimedOut) {
+ logger.error("client disconnected before task finished")
+
+ if (slackThreadTs) {
+ await slackNotifier.postTaskUpdated(slackThreadTs, "Client disconnected before task completion", "error")
+ }
+
+ if (callbacks?.onClientDisconnected) {
+ await callbacks.onClientDisconnected(slackThreadTs)
+ }
+
+ throw new Error("Client disconnected before task completion.")
+ }
+
+ if (rooTaskId && !isClientDisconnected) {
+ logger.info("closing task")
+ client.sendCommand({ commandName: TaskCommandName.CloseTask, data: rooTaskId })
+ await new Promise((resolve) => setTimeout(resolve, 2_000)) // Allow some time for the window to close.
+ }
+
+ if (!isClientDisconnected) {
+ logger.info("disconnecting client")
+ client.disconnect()
+ }
+
+ logger.info("waiting for subprocess to finish")
+ controller.abort()
+
+ // Wait for subprocess to finish gracefully, with a timeout.
+ const SUBPROCESS_TIMEOUT = 10_000
+
+ try {
+ await Promise.race([
+ subprocess,
+ new Promise((_, reject) =>
+ setTimeout(() => reject(new SubprocessTimeoutError(SUBPROCESS_TIMEOUT)), SUBPROCESS_TIMEOUT),
+ ),
+ ])
+
+ logger.info("subprocess finished gracefully")
+ } catch (error) {
+ if (error instanceof SubprocessTimeoutError) {
+ logger.error("subprocess did not finish within timeout, force killing")
+
+ try {
+ if (subprocess.kill("SIGKILL")) {
+ logger.info("SIGKILL sent to subprocess")
+ } else {
+ logger.error("failed to send SIGKILL to subprocess")
+ }
+ } catch (killError) {
+ logger.error("subprocess.kill(SIGKILL) failed:", killError)
+ }
+ } else {
+ throw error
+ }
+ }
+
+ logger.close()
+}
diff --git a/apps/roomote/src/lib/slack.ts b/apps/roomote/src/lib/slack.ts
new file mode 100644
index 0000000000..b7502810ab
--- /dev/null
+++ b/apps/roomote/src/lib/slack.ts
@@ -0,0 +1,135 @@
+import { JobPayload, JobType } from "@/types"
+import { Logger } from "./logger"
+
+export interface SlackMessage {
+ text: string
+ blocks?: unknown[]
+ attachments?: unknown[]
+ thread_ts?: string
+ channel?: string
+}
+
+export interface SlackResponse {
+ ok: boolean
+ channel?: string
+ ts?: string
+ error?: string
+ message?: Record
+}
+
+export class SlackNotifier {
+ private readonly logger?: Logger
+ private readonly token: string
+
+ constructor(logger?: Logger, token: string = process.env.SLACK_API_TOKEN!) {
+ this.logger = logger
+ this.token = token
+ }
+
+ private async postMessage(message: SlackMessage): Promise {
+ try {
+ const messageWithChannel = { ...message, channel: message.channel || "#roomote-control" }
+
+ const response = await fetch("https://slack.com/api/chat.postMessage", {
+ method: "POST",
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${this.token}` },
+ body: JSON.stringify(messageWithChannel),
+ })
+
+ if (!response.ok) {
+ this.logger?.error(`Slack API failed: ${response.status} ${response.statusText}`)
+ return null
+ }
+
+ const result: SlackResponse = await response.json()
+
+ if (!result.ok) {
+ this.logger?.error(`Slack API error: ${result.error}`)
+ }
+
+ return result.ts ?? null
+ } catch (error) {
+ this.logger?.error("Failed to send Slack message:", error)
+ return null
+ }
+ }
+
+ public async postTaskStarted({
+ jobType,
+ jobPayload,
+ rooTaskId,
+ }: {
+ jobType: T
+ jobPayload: JobPayload
+ rooTaskId: string
+ }) {
+ switch (jobType) {
+ case "github.issue.fix":
+ return await this.postMessage({
+ text: `🚀 Task Started`,
+ blocks: [
+ {
+ type: "section",
+ text: {
+ type: "mrkdwn",
+ text: `🚀 *Task Started*\nCreating a pull request for `,
+ },
+ },
+ {
+ type: "context",
+ elements: [
+ {
+ type: "mrkdwn",
+ text: `jobType: ${jobType}, rooTaskId: ${rooTaskId}`,
+ },
+ ],
+ },
+ ],
+ })
+ default:
+ throw new Error(`Unknown job type: ${jobType}`)
+ }
+ }
+
+ public async postTaskUpdated(
+ threadTs: string,
+ text: string,
+ status?: "info" | "success" | "warning" | "error",
+ ): Promise {
+ const emoji = { info: "ℹ️", success: "✅", warning: "⚠️", error: "❌" }[status || "info"]
+ await this.postMessage({ text: `${emoji} ${text}`, thread_ts: threadTs })
+ }
+
+ public async postTaskCompleted(
+ threadTs: string,
+ success: boolean,
+ duration: number,
+ taskId?: string,
+ ): Promise {
+ const status = success ? "✅ Completed" : "❌ Failed"
+ const durationText = `${Math.round(duration / 1000)}s`
+
+ await this.postMessage({
+ text: `${status} Task finished in ${durationText}`,
+ blocks: [
+ {
+ type: "section",
+ text: {
+ type: "mrkdwn",
+ text: `*${status}*\n*Task ID:* ${taskId || "Unknown"}\n*Duration:* ${durationText}`,
+ },
+ },
+ {
+ type: "context",
+ elements: [
+ {
+ type: "mrkdwn",
+ text: `Finished at: `,
+ },
+ ],
+ },
+ ],
+ thread_ts: threadTs,
+ })
+ }
+}
diff --git a/apps/roomote/src/lib/utils.ts b/apps/roomote/src/lib/utils.ts
new file mode 100644
index 0000000000..53ab51ed63
--- /dev/null
+++ b/apps/roomote/src/lib/utils.ts
@@ -0,0 +1,37 @@
+import * as fs from "fs"
+import * as path from "path"
+
+export const isDockerContainer = () => {
+ try {
+ return fs.existsSync("/.dockerenv")
+ } catch (_error) {
+ return false
+ }
+}
+
+/**
+ * Traverses up the directory tree to find an ancestor directory that contains a .git directory
+ * @param startPath The starting directory path
+ * @returns The path to the git repository root
+ * @throws Error if no .git directory is found
+ */
+export const findGitRoot = (startPath: string): string => {
+ let currentPath = path.resolve(startPath)
+ const root = path.parse(currentPath).root
+
+ while (currentPath !== root) {
+ const gitPath = path.join(currentPath, ".git")
+ if (fs.existsSync(gitPath) && fs.statSync(gitPath).isDirectory()) {
+ return currentPath
+ }
+ currentPath = path.dirname(currentPath)
+ }
+
+ const gitPath = path.join(root, ".git")
+
+ if (fs.existsSync(gitPath) && fs.statSync(gitPath).isDirectory()) {
+ return root
+ }
+
+ throw new Error("No .git directory found in any ancestor directory")
+}
diff --git a/apps/roomote/src/lib/worker.ts b/apps/roomote/src/lib/worker.ts
new file mode 100644
index 0000000000..d8e9609062
--- /dev/null
+++ b/apps/roomote/src/lib/worker.ts
@@ -0,0 +1,72 @@
+import { Worker } from "bullmq"
+
+import { redis } from "./redis"
+import { processJob } from "./job"
+
+// docker compose build worker
+// docker run \
+// --name roomote-worker \
+// --rm \
+// --interactive \
+// --tty \
+// --network roomote_default \
+// -e HOST_EXECUTION_METHOD=docker \
+// -e GH_TOKEN=$GH_TOKEN \
+// -e DATABASE_URL=postgresql://postgres:password@db:5432/cloud_agents \
+// -e REDIS_URL=redis://redis:6379 \
+// -e NODE_ENV=production \
+// -v /var/run/docker.sock:/var/run/docker.sock \
+// -v /tmp/roomote:/var/log/roomote \
+// roomote-worker sh -c "bash"
+
+async function processSingleJob() {
+ const worker = new Worker("roomote", undefined, {
+ autorun: false,
+ connection: redis,
+ lockDuration: 30 * 60 * 1_000, // 30 minutes
+ })
+
+ const token = crypto.randomUUID()
+
+ try {
+ const job = await worker.getNextJob(token)
+
+ if (!job) {
+ console.log("No jobs available, exiting...")
+ await worker.close()
+ process.exit(0)
+ }
+
+ console.log(`Processing job ${job.id}...`)
+
+ try {
+ await processJob(job)
+ await job.moveToCompleted(undefined, token, false)
+ console.log(`Job ${job.id} completed successfully`)
+ } catch (error) {
+ await job.moveToFailed(error as Error, token, false)
+ console.error(`Job ${job.id} failed:`, error)
+ }
+ } catch (error) {
+ console.error("Error processing job:", error)
+ } finally {
+ await worker.close()
+ process.exit(0)
+ }
+}
+
+process.on("SIGTERM", async () => {
+ console.log("SIGTERM -> shutting down gracefully...")
+ process.exit(0)
+})
+
+process.on("SIGINT", async () => {
+ console.log("SIGINT -> shutting down gracefully...")
+ process.exit(0)
+})
+
+if (!process.env.GH_TOKEN) {
+ throw new Error("GH_TOKEN is not set")
+}
+
+processSingleJob()
diff --git a/apps/roomote/src/types/index.ts b/apps/roomote/src/types/index.ts
new file mode 100644
index 0000000000..d86334a24c
--- /dev/null
+++ b/apps/roomote/src/types/index.ts
@@ -0,0 +1,76 @@
+import { z } from "zod"
+
+export interface JobTypes {
+ "github.issue.fix": {
+ repo: string
+ issue: number
+ title: string
+ body: string
+ labels?: string[]
+ }
+}
+
+export type JobType = keyof JobTypes
+
+export type JobStatus = "pending" | "processing" | "completed" | "failed"
+
+export type JobPayload = JobTypes[T]
+
+export type JobParams = {
+ jobId: number
+ type: T
+ payload: JobPayload
+}
+
+/**
+ * CreateJob
+ */
+
+export const createJobSchema = z.discriminatedUnion("type", [
+ z.object({
+ type: z.literal("github.issue.fix"),
+ payload: z.object({
+ repo: z.string(),
+ issue: z.number(),
+ title: z.string(),
+ body: z.string(),
+ labels: z.array(z.string()).optional(),
+ }),
+ }),
+])
+
+export type CreateJob = z.infer
+
+/**
+ * GitHubWebhook
+ */
+
+export const githubIssueWebhookSchema = z.object({
+ action: z.string(),
+ issue: z.object({
+ number: z.number(),
+ title: z.string(),
+ body: z.string().nullable(),
+ labels: z.array(z.object({ name: z.string() })),
+ }),
+ repository: z.object({
+ full_name: z.string(),
+ }),
+})
+
+export type GitHubIssueWebhook = z.infer
+
+export const githubPullRequestWebhookSchema = z.object({
+ action: z.string(),
+ pull_request: z.object({
+ number: z.number(),
+ title: z.string(),
+ body: z.string().nullable(),
+ html_url: z.string(),
+ }),
+ repository: z.object({
+ full_name: z.string(),
+ }),
+})
+
+export type GitHubPullRequestWebhook = z.infer
diff --git a/apps/roomote/tsconfig.json b/apps/roomote/tsconfig.json
new file mode 100644
index 0000000000..75ccc2980d
--- /dev/null
+++ b/apps/roomote/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "@roo-code/config-typescript/nextjs.json",
+ "compilerOptions": {
+ "paths": { "@/*": ["./src/*"] }
+ },
+ "include": ["next-env.d.ts", "src/**/*.ts", "src/**/*.tsx", ".next/types/**/*.ts", "drizzle.config.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/apps/roomote/vitest.config.ts b/apps/roomote/vitest.config.ts
new file mode 100644
index 0000000000..82d55b4ba9
--- /dev/null
+++ b/apps/roomote/vitest.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from "vitest/config"
+import path from "path"
+
+export default defineConfig({
+ test: {
+ environment: "node",
+ globals: true,
+ watch: false,
+ },
+ resolve: {
+ alias: {
+ "@": path.resolve(__dirname, "./src"),
+ },
+ },
+})
diff --git a/apps/web-evals/package.json b/apps/web-evals/package.json
index eddf5d6340..69d0571c43 100644
--- a/apps/web-evals/package.json
+++ b/apps/web-evals/package.json
@@ -8,7 +8,8 @@
"dev": "scripts/check-services.sh && next dev",
"format": "prettier --write src",
"build": "next build",
- "start": "next start"
+ "start": "next start",
+ "clean": "rimraf .next .turbo"
},
"dependencies": {
"@hookform/resolvers": "^5.1.1",
diff --git a/locales/ca/README.md b/locales/ca/README.md
index 32b916dcb8..2696d5acea 100644
--- a/locales/ca/README.md
+++ b/locales/ca/README.md
@@ -181,38 +181,40 @@ Ens encanten les contribucions de la comunitat! Comenceu llegint el nostre [CONT
Gràcies a tots els nostres col·laboradors que han ajudat a millorar Roo Code!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Llicència
diff --git a/locales/de/README.md b/locales/de/README.md
index 2cf784c83a..a29482988e 100644
--- a/locales/de/README.md
+++ b/locales/de/README.md
@@ -181,38 +181,40 @@ Wir lieben Community-Beiträge! Beginnen Sie mit dem Lesen unserer [CONTRIBUTING
Danke an alle unsere Mitwirkenden, die geholfen haben, Roo Code zu verbessern!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Lizenz
diff --git a/locales/es/README.md b/locales/es/README.md
index 05083f12a3..e15daabcd7 100644
--- a/locales/es/README.md
+++ b/locales/es/README.md
@@ -181,38 +181,40 @@ Usamos [changesets](https://github.com/changesets/changesets) para versionar y p
¡Gracias a todos nuestros colaboradores que han ayudado a mejorar Roo Code!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licencia
diff --git a/locales/fr/README.md b/locales/fr/README.md
index 0aa7803fe0..2d811e2a7c 100644
--- a/locales/fr/README.md
+++ b/locales/fr/README.md
@@ -181,38 +181,40 @@ Nous adorons les contributions de la communauté ! Commencez par lire notre [CON
Merci à tous nos contributeurs qui ont aidé à améliorer Roo Code !
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licence
diff --git a/locales/hi/README.md b/locales/hi/README.md
index ea858d9103..61730f5455 100644
--- a/locales/hi/README.md
+++ b/locales/hi/README.md
@@ -181,38 +181,40 @@ code --install-extension bin/roo-cline-.vsix
Roo Code को बेहतर बनाने में मदद करने वाले हमारे सभी योगदानकर्ताओं को धन्यवाद!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## लाइसेंस
diff --git a/locales/id/README.md b/locales/id/README.md
index 5e6cf614e0..b53b1dde03 100644
--- a/locales/id/README.md
+++ b/locales/id/README.md
@@ -175,38 +175,40 @@ Kami menyukai kontribusi komunitas! Mulai dengan membaca [CONTRIBUTING.md](CONTR
Terima kasih kepada semua kontributor kami yang telah membantu membuat Roo Code lebih baik!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## License
diff --git a/locales/it/README.md b/locales/it/README.md
index 4e0d019ca8..9eee9ed218 100644
--- a/locales/it/README.md
+++ b/locales/it/README.md
@@ -181,38 +181,40 @@ Amiamo i contributi della community! Inizia leggendo il nostro [CONTRIBUTING.md]
Grazie a tutti i nostri contributori che hanno aiutato a migliorare Roo Code!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licenza
diff --git a/locales/ja/README.md b/locales/ja/README.md
index ba00310f79..37bb6621a0 100644
--- a/locales/ja/README.md
+++ b/locales/ja/README.md
@@ -181,38 +181,40 @@ code --install-extension bin/roo-cline-.vsix
Roo Codeの改善に貢献してくれたすべての貢献者に感謝します!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## ライセンス
diff --git a/locales/ko/README.md b/locales/ko/README.md
index f439588142..f16bb5bd33 100644
--- a/locales/ko/README.md
+++ b/locales/ko/README.md
@@ -181,38 +181,40 @@ code --install-extension bin/roo-cline-.vsix
Roo Code를 더 좋게 만드는 데 도움을 준 모든 기여자에게 감사드립니다!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## 라이선스
diff --git a/locales/nl/README.md b/locales/nl/README.md
index a52efdb1eb..6aeda32ebd 100644
--- a/locales/nl/README.md
+++ b/locales/nl/README.md
@@ -181,38 +181,40 @@ We houden van bijdragen uit de community! Begin met het lezen van onze [CONTRIBU
Dank aan alle bijdragers die Roo Code beter hebben gemaakt!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licentie
diff --git a/locales/pl/README.md b/locales/pl/README.md
index b074b34675..cecd69b2d4 100644
--- a/locales/pl/README.md
+++ b/locales/pl/README.md
@@ -181,38 +181,40 @@ Kochamy wkład społeczności! Zacznij od przeczytania naszego [CONTRIBUTING.md]
Dziękujemy wszystkim naszym współtwórcom, którzy pomogli ulepszyć Roo Code!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licencja
diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md
index ce887b6aa5..492f608498 100644
--- a/locales/pt-BR/README.md
+++ b/locales/pt-BR/README.md
@@ -181,38 +181,40 @@ Adoramos contribuições da comunidade! Comece lendo nosso [CONTRIBUTING.md](CON
Obrigado a todos os nossos contribuidores que ajudaram a tornar o Roo Code melhor!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Licença
diff --git a/locales/ru/README.md b/locales/ru/README.md
index 1c62495472..d1109196dd 100644
--- a/locales/ru/README.md
+++ b/locales/ru/README.md
@@ -181,38 +181,40 @@ code --install-extension bin/roo-cline-.vsix
Спасибо всем нашим участникам, которые помогли сделать Roo Code лучше!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Лицензия
diff --git a/locales/tr/README.md b/locales/tr/README.md
index b528fa31d8..271b996481 100644
--- a/locales/tr/README.md
+++ b/locales/tr/README.md
@@ -181,38 +181,40 @@ Topluluk katkılarını seviyoruz! [CONTRIBUTING.md](CONTRIBUTING.md) dosyasın
Roo Code'u daha iyi hale getirmeye yardımcı olan tüm katkıda bulunanlara teşekkür ederiz!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Lisans
diff --git a/locales/vi/README.md b/locales/vi/README.md
index b8e85d4250..5782227ea7 100644
--- a/locales/vi/README.md
+++ b/locales/vi/README.md
@@ -181,38 +181,40 @@ Chúng tôi rất hoan nghênh đóng góp từ cộng đồng! Bắt đầu b
Cảm ơn tất cả những người đóng góp đã giúp cải thiện Roo Code!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## Giấy Phép
diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md
index 0d726f2fe2..2b1d357ab0 100644
--- a/locales/zh-CN/README.md
+++ b/locales/zh-CN/README.md
@@ -181,38 +181,40 @@ code --install-extension bin/roo-cline-.vsix
感谢所有帮助改进 Roo Code 的贡献者!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## 许可证
diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md
index 30987c4fe8..e5d8a1010e 100644
--- a/locales/zh-TW/README.md
+++ b/locales/zh-TW/README.md
@@ -182,38 +182,40 @@ code --install-extension bin/roo-cline-.vsix
感謝所有幫助改進 Roo Code 的貢獻者!
-|
mrubens|
saoudrizwan|
cte|
samhvw8|
daniel-lxs|
hannesrudolph|
-|:---:|:---:|:---:|:---:|:---:|:---:|
-|
KJ7LNW|
a8trejo|
ColemanRoo|
canrobins13|
stea9499|
joemanley201|
-|
System233|
nissa-seru|
jquanton|
NyxJae|
MuriloFP|
jr|
-|
d-oit|
punkpeye|
wkordalski|
elianiva|
sachasayan|
Smartsheet-JB-Brown|
-|
monotykamary|
cannuri|
zhangtony239|
qdaxb|
feifei325|
xyOz-dev|
-|
pugazhendhi-m|
shariqriazz|
lloydchang|
vigneshsubbiah16|
dtrugman|
Szpadel|
-|
diarmidmackenzie|
psv2522|
Premshay|
lupuletic|
kiwina|
aheizi|
-|
PeterDaveHello|
olweraltuve|
chrarnoldus|
ChuKhaLi|
nbihan-mediware|
RaySinner|
-|
afshawnlotfi|
pdecat|
noritaka1166|
kyle-apex|
emshvac|
Lunchb0ne|
-|
SmartManoj|
vagadiya|
slytechnical|
arthurauffray|
upamune|
NamesMT|
-|
taylorwilsdon|
StevenTCramer|
sammcj|
Ruakij|
p12tic|
gtaylor|
-|
hassoncs|
aitoroses|
anton-otee|
SannidhyaSah|
heyseth|
taisukeoe|
-|
avtc|
dlab-anton|
eonghk|
kcwhite|
ronyblum|
teddyOOXX|
-|
vincentsong|
yongjer|
zeozeozeo|
ashktn|
franekp|
yt3trees|
-|
benzntech|
axkirillov|
bramburn|
olearycrew|
snoyiatk|
GitlyHallows|
-|
jcbdev|
mr-ryan-james|
ross|
philfung|
napter|
Chenjiayuan195|
-|
julionav|
SplittyDev|
mdp|
kohii|
kinandan|
jwcraig|
-|
shoopapa|
im47cn|
hongzio|
hatsu38|
GOODBOY008|
forestyoo|
-|
dqroid|
dairui1|
tmsjngx0|
bannzai|
axmo|
asychin|
-|
amittell|
vladstudio|
Yoshino-Yukitaro|
Yikai-Liao|
zxdvd|
nevermorec|
-|
PretzelVector|
zetaloop|
cdlliuy|
user202729|
student20880|
shohei-ihaya|
-|
shaybc|
seedlord|
samir-nimbly|
robertheadley|
refactorthis|
qingyuan1109|
-|
pokutuna|
philipnext|
oprstchn|
nobu007|
mosleyit|
moqimoqidea|
-|
mlopezr|
mecab|
olup|
lightrabbit|
linegel|
edwin-truthsearch-io|
-|
EamonNerbonne|
dbasclpy|
dflatline|
Deon588|
dleen|
devxpain|
-|
chadgauth|
bogdan0083|
Atlogit|
atlasgong|
andreastempsch|
alasano|
-|
QuinsZouls|
HadesArchitect|
alarno|
nexon33|
adilhafeez|
adamwlarson|
-|
adamhill|
AMHesch|
tgfjt|
maekawataiki|
samsilveira|
01Rian|
-|
RSO|
SECKainersdorfer|
R-omk|
Sarke|
kvokka|
ecmasx|
-|
mollux|
marvijo-code|
mamertofabian|
monkeyDluffy6017|
libertyteeth|
shtse8|
-|
ksze|
Jdo300|
hesara|
DeXtroTip|
pfitz|
celestial-vault|
+
+| 
mrubens | 
saoudrizwan | 
cte | 
samhvw8 | 
daniel-lxs | 
hannesrudolph |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 
KJ7LNW | 
a8trejo | 
ColemanRoo | 
canrobins13 | 
stea9499 | 
joemanley201 |
+| 
System233 | 
nissa-seru | 
jquanton | 
NyxJae | 
MuriloFP | 
jr |
+| 
d-oit | 
punkpeye | 
wkordalski | 
elianiva | 
sachasayan | 
Smartsheet-JB-Brown |
+| 
monotykamary | 
cannuri | 
zhangtony239 | 
qdaxb | 
feifei325 | 
xyOz-dev |
+| 
pugazhendhi-m | 
shariqriazz | 
lloydchang | 
vigneshsubbiah16 | 
dtrugman | 
Szpadel |
+| 
diarmidmackenzie | 
psv2522 | 
Premshay | 
lupuletic | 
kiwina | 
aheizi |
+| 
PeterDaveHello | 
olweraltuve | 
chrarnoldus | 
ChuKhaLi | 
nbihan-mediware | 
RaySinner |
+| 
afshawnlotfi | 
pdecat | 
noritaka1166 | 
kyle-apex | 
emshvac | 
Lunchb0ne |
+| 
SmartManoj | 
vagadiya | 
slytechnical | 
arthurauffray | 
upamune | 
NamesMT |
+| 
taylorwilsdon | 
StevenTCramer | 
sammcj | 
Ruakij | 
p12tic | 
gtaylor |
+| 
hassoncs | 
aitoroses | 
anton-otee | 
SannidhyaSah | 
heyseth | 
taisukeoe |
+| 
avtc | 
dlab-anton | 
eonghk | 
kcwhite | 
ronyblum | 
teddyOOXX |
+| 
vincentsong | 
yongjer | 
zeozeozeo | 
ashktn | 
franekp | 
yt3trees |
+| 
benzntech | 
axkirillov | 
bramburn | 
olearycrew | 
snoyiatk | 
GitlyHallows |
+| 
jcbdev | 
mr-ryan-james | 
ross | 
philfung | 
napter | 
Chenjiayuan195 |
+| 
julionav | 
SplittyDev | 
mdp | 
kohii | 
kinandan | 
jwcraig |
+| 
shoopapa | 
im47cn | 
hongzio | 
hatsu38 | 
GOODBOY008 | 
forestyoo |
+| 
dqroid | 
dairui1 | 
tmsjngx0 | 
bannzai | 
axmo | 
asychin |
+| 
amittell | 
vladstudio | 
Yoshino-Yukitaro | 
Yikai-Liao | 
zxdvd | 
nevermorec |
+| 
PretzelVector | 
zetaloop | 
cdlliuy | 
user202729 | 
student20880 | 
shohei-ihaya |
+| 
shaybc | 
seedlord | 
samir-nimbly | 
robertheadley | 
refactorthis | 
qingyuan1109 |
+| 
pokutuna | 
philipnext | 
oprstchn | 
nobu007 | 
mosleyit | 
moqimoqidea |
+| 
mlopezr | 
mecab | 
olup | 
lightrabbit | 
linegel | 
edwin-truthsearch-io |
+| 
EamonNerbonne | 
dbasclpy | 
dflatline | 
Deon588 | 
dleen | 
devxpain |
+| 
chadgauth | 
bogdan0083 | 
Atlogit | 
atlasgong | 
andreastempsch | 
alasano |
+| 
QuinsZouls | 
HadesArchitect | 
alarno | 
nexon33 | 
adilhafeez | 
adamwlarson |
+| 
adamhill | 
AMHesch | 
tgfjt | 
maekawataiki | 
samsilveira | 
01Rian |
+| 
RSO | 
SECKainersdorfer | 
R-omk | 
Sarke | 
kvokka | 
ecmasx |
+| 
mollux | 
marvijo-code | 
mamertofabian | 
monkeyDluffy6017 | 
libertyteeth | 
shtse8 |
+| 
ksze | 
Jdo300 | 
hesara | 
DeXtroTip | 
pfitz | 
celestial-vault |
+
## 授權
diff --git a/packages/telemetry/src/TelemetryService.ts b/packages/telemetry/src/TelemetryService.ts
index 956f49313a..728809f8bd 100644
--- a/packages/telemetry/src/TelemetryService.ts
+++ b/packages/telemetry/src/TelemetryService.ts
@@ -173,7 +173,7 @@ export class TelemetryService {
itemType,
itemName,
target,
- ... (properties || {}),
+ ...(properties || {}),
})
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5c62c73bd4..94ca8be9a7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -57,6 +57,88 @@ importers:
specifier: ^5.4.5
version: 5.8.3
+ apps/roomote:
+ dependencies:
+ '@bull-board/api':
+ specifier: ^6.10.1
+ version: 6.10.1(@bull-board/ui@6.10.1)
+ '@bull-board/express':
+ specifier: ^6.10.1
+ version: 6.10.1
+ '@bull-board/ui':
+ specifier: ^6.10.1
+ version: 6.10.1
+ '@roo-code/ipc':
+ specifier: workspace:^
+ version: link:../../packages/ipc
+ '@roo-code/types':
+ specifier: workspace:^
+ version: link:../../packages/types
+ bullmq:
+ specifier: ^5.37.0
+ version: 5.53.2
+ drizzle-orm:
+ specifier: ^0.44.1
+ version: 0.44.1(@libsql/client@0.15.8)(better-sqlite3@11.10.0)(gel@2.1.0)(postgres@3.4.7)
+ execa:
+ specifier: ^9.6.0
+ version: 9.6.0
+ express:
+ specifier: ^5.1.0
+ version: 5.1.0
+ ioredis:
+ specifier: ^5.4.3
+ version: 5.6.1
+ next:
+ specifier: ^15.2.5
+ version: 15.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ p-wait-for:
+ specifier: ^5.0.2
+ version: 5.0.2
+ postgres:
+ specifier: ^3.4.7
+ version: 3.4.7
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
+ zod:
+ specifier: ^3.25.41
+ version: 3.25.57
+ devDependencies:
+ '@roo-code/config-eslint':
+ specifier: workspace:^
+ version: link:../../packages/config-eslint
+ '@roo-code/config-typescript':
+ specifier: workspace:^
+ version: link:../../packages/config-typescript
+ '@types/express':
+ specifier: ^5.0.3
+ version: 5.0.3
+ '@types/node':
+ specifier: ^22.15.20
+ version: 22.15.29
+ '@types/react':
+ specifier: ^18.3.23
+ version: 18.3.23
+ '@types/react-dom':
+ specifier: ^18.3.7
+ version: 18.3.7(@types/react@18.3.23)
+ concurrently:
+ specifier: ^9.1.0
+ version: 9.1.2
+ drizzle-kit:
+ specifier: ^0.31.1
+ version: 0.31.1
+ tsx:
+ specifier: ^4.19.3
+ version: 4.19.4
+ vitest:
+ specifier: ^2.1.8
+ version: 2.1.9(@types/node@22.15.29)(jsdom@20.0.3)(lightningcss@1.30.1)
+
apps/vscode-e2e:
devDependencies:
'@roo-code/config-eslint':
@@ -205,7 +287,7 @@ importers:
version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -299,7 +381,7 @@ importers:
version: 1.0.7(tailwindcss@3.4.17)
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -333,7 +415,7 @@ importers:
dependencies:
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -361,7 +443,7 @@ importers:
version: 1.9.0
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -454,7 +536,7 @@ importers:
version: 5.5.5
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -516,7 +598,7 @@ importers:
version: 4.17.2
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -538,7 +620,7 @@ importers:
dependencies:
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/config-eslint':
specifier: workspace:^
@@ -578,7 +660,7 @@ importers:
version: 1.3.0(@modelcontextprotocol/sdk@1.12.0)
'@mistralai/mistralai':
specifier: ^1.3.6
- version: 1.6.1(zod@3.25.61)
+ version: 1.6.1(zod@3.25.62)
'@modelcontextprotocol/sdk':
specifier: ^1.9.0
version: 1.12.0
@@ -674,7 +756,7 @@ importers:
version: 12.0.0
openai:
specifier: ^4.78.1
- version: 4.103.0(ws@8.18.2)(zod@3.25.61)
+ version: 4.103.0(ws@8.18.2)(zod@3.25.62)
os-name:
specifier: ^6.0.0
version: 6.1.0
@@ -758,7 +840,7 @@ importers:
version: 2.8.0
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@roo-code/build':
specifier: workspace:^
@@ -855,7 +937,7 @@ importers:
version: 3.2.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)
zod-to-ts:
specifier: ^1.2.0
- version: 1.2.0(typescript@5.8.3)(zod@3.25.61)
+ version: 1.2.0(typescript@5.8.3)(zod@3.25.62)
webview-ui:
dependencies:
@@ -1032,7 +1114,7 @@ importers:
version: 0.2.2(@types/react@18.3.23)(react@18.3.1)
zod:
specifier: ^3.25.61
- version: 3.25.61
+ version: 3.25.62
devDependencies:
'@jest/globals':
specifier: ^29.7.0
@@ -1505,6 +1587,17 @@ packages:
'@braintree/sanitize-url@7.1.1':
resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
+ '@bull-board/api@6.10.1':
+ resolution: {integrity: sha512-VPkZa2XZI2Wk2MqK1XyiiS+tOhNan54mnm2fpv2KA0fdZ92mQqNjhKkOpsykhQv9XUEc8cCRlZqGxf67YCMJbQ==}
+ peerDependencies:
+ '@bull-board/ui': 6.10.1
+
+ '@bull-board/express@6.10.1':
+ resolution: {integrity: sha512-IZl+t6B8bGCHqd/8Mbvit9RXqndXBe2Kx7pYHq7PZRrEKjK9b643Uizlc+OVqmWpLSjpQMP96K1SO5/Nq24o+A==}
+
+ '@bull-board/ui@6.10.1':
+ resolution: {integrity: sha512-b6z6MBid/0DEShAMFPjPVZoPSoWqRBHCvTknyaxr/m8gL2/C+QP7jlCXut+L7uTFbCj9qs+CreAP0x/VdLI/Ig==}
+
'@changesets/apply-release-plan@7.0.12':
resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==}
@@ -1614,6 +1707,12 @@ packages:
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/aix-ppc64@0.25.4':
resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
engines: {node: '>=18'}
@@ -1632,6 +1731,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.25.4':
resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
engines: {node: '>=18'}
@@ -1650,6 +1755,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.25.4':
resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
engines: {node: '>=18'}
@@ -1668,6 +1779,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.25.4':
resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
engines: {node: '>=18'}
@@ -1686,6 +1803,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.25.4':
resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
engines: {node: '>=18'}
@@ -1704,6 +1827,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.4':
resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
engines: {node: '>=18'}
@@ -1722,6 +1851,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.25.4':
resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
engines: {node: '>=18'}
@@ -1740,6 +1875,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.4':
resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
engines: {node: '>=18'}
@@ -1758,6 +1899,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.25.4':
resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
engines: {node: '>=18'}
@@ -1776,6 +1923,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.4':
resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
engines: {node: '>=18'}
@@ -1794,6 +1947,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.4':
resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
engines: {node: '>=18'}
@@ -1812,6 +1971,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.4':
resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
engines: {node: '>=18'}
@@ -1830,6 +1995,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.4':
resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
engines: {node: '>=18'}
@@ -1848,6 +2019,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.4':
resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
engines: {node: '>=18'}
@@ -1866,6 +2043,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.4':
resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
engines: {node: '>=18'}
@@ -1884,6 +2067,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.4':
resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
engines: {node: '>=18'}
@@ -1902,6 +2091,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.4':
resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
engines: {node: '>=18'}
@@ -1932,6 +2127,12 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.4':
resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
engines: {node: '>=18'}
@@ -1962,6 +2163,12 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.4':
resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
engines: {node: '>=18'}
@@ -1980,6 +2187,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.25.4':
resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
engines: {node: '>=18'}
@@ -1998,6 +2211,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.25.4':
resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
engines: {node: '>=18'}
@@ -2016,6 +2235,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.4':
resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
engines: {node: '>=18'}
@@ -2034,6 +2259,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.4':
resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
engines: {node: '>=18'}
@@ -2249,6 +2480,9 @@ packages:
cpu: [x64]
os: [win32]
+ '@ioredis/commands@1.2.0':
+ resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2455,6 +2689,36 @@ packages:
resolution: {integrity: sha512-m//7RlINx1F3sz3KqwY1WWzVgTcYX52HYk4bJ1hkBXV3zccAEth+jRvG8DBRrdaQuRsPAJOx2MH3zaHNCKL7Zg==}
engines: {node: '>=18'}
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
+ cpu: [x64]
+ os: [win32]
+
'@mswjs/interceptors@0.38.6':
resolution: {integrity: sha512-qFlpmObPqeUs4u3oFYv/OM/xyX+pNa5TRAjqjvMhbGYlyMhzSrE5UfncL2rUcEeVfD9Gebgff73hPwqcOwJQNA==}
engines: {node: '>=18'}
@@ -4038,12 +4302,18 @@ packages:
'@types/babel__traverse@7.20.7':
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
'@types/chai@5.2.2':
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
'@types/clone-deep@4.0.4':
resolution: {integrity: sha512-vXh6JuuaAha6sqEbJueYdh5zNBPPgG1OYumuz2UvLvriN6ABHDSW8ludREGWJb1MLIzbwZn4q4zUbUCerJTJfA==}
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
'@types/d3-array@3.2.1':
resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
@@ -4158,6 +4428,12 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/express-serve-static-core@5.0.6':
+ resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==}
+
+ '@types/express@5.0.3':
+ resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==}
+
'@types/geojson@7946.0.16':
resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
@@ -4170,6 +4446,9 @@ packages:
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -4203,6 +4482,9 @@ packages:
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@types/mime@1.3.5':
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+
'@types/minimatch@5.1.2':
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
@@ -4234,9 +4516,6 @@ packages:
'@types/node@20.17.57':
resolution: {integrity: sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==}
- '@types/node@20.19.0':
- resolution: {integrity: sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==}
-
'@types/node@22.15.29':
resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==}
@@ -4249,6 +4528,12 @@ packages:
'@types/ps-tree@1.1.6':
resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+
'@types/react-dom@18.3.7':
resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
peerDependencies:
@@ -4257,6 +4542,12 @@ packages:
'@types/react@18.3.23':
resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
+ '@types/send@0.17.5':
+ resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
+
+ '@types/serve-static@1.15.8':
+ resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==}
+
'@types/shell-quote@1.7.5':
resolution: {integrity: sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==}
@@ -4371,9 +4662,23 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0
+ '@vitest/expect@2.1.9':
+ resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
+
'@vitest/expect@3.2.3':
resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==}
+ '@vitest/mocker@2.1.9':
+ resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/mocker@3.2.3':
resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==}
peerDependencies:
@@ -4385,18 +4690,33 @@ packages:
vite:
optional: true
+ '@vitest/pretty-format@2.1.9':
+ resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
+
'@vitest/pretty-format@3.2.3':
resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==}
+ '@vitest/runner@2.1.9':
+ resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
+
'@vitest/runner@3.2.3':
resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==}
+ '@vitest/snapshot@2.1.9':
+ resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
+
'@vitest/snapshot@3.2.3':
resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==}
+ '@vitest/spy@2.1.9':
+ resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
+
'@vitest/spy@3.2.3':
resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==}
+ '@vitest/utils@2.1.9':
+ resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
+
'@vitest/utils@3.2.3':
resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==}
@@ -4808,6 +5128,9 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ bullmq@5.53.2:
+ resolution: {integrity: sha512-xHgxrP/yNJHD7VCw1h+eRBh+2TCPBCM39uC9gCyksYc6ufcJP+HTZ/A2lzB2x7qMFWrvsX7tM40AT2BmdkYL/Q==}
+
bundle-name@4.1.0:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
engines: {node: '>=18'}
@@ -5095,6 +5418,11 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ concurrently@9.1.2:
+ resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -5159,6 +5487,10 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
+ cron-parser@4.9.0:
+ resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
+ engines: {node: '>=12.0.0'}
+
cross-fetch@4.0.0:
resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==}
@@ -5494,6 +5826,10 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
+ denque@2.1.0:
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
+ engines: {node: '>=0.10'}
+
depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
@@ -5848,6 +6184,11 @@ packages:
engines: {node: '>=12'}
hasBin: true
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
esbuild@0.25.4:
resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
engines: {node: '>=18'}
@@ -6674,6 +7015,10 @@ packages:
resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
engines: {node: '>=12'}
+ ioredis@5.6.1:
+ resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==}
+ engines: {node: '>=12.22.0'}
+
ip-address@9.0.5:
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
engines: {node: '>= 12'}
@@ -7462,9 +7807,15 @@ packages:
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ lodash.defaults@4.2.0:
+ resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+
lodash.includes@4.3.0:
resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
+ lodash.isarguments@3.1.0:
+ resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
+
lodash.isboolean@3.0.3:
resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
@@ -7549,6 +7900,10 @@ packages:
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ luxon@3.6.1:
+ resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==}
+ engines: {node: '>=12'}
+
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
@@ -7883,6 +8238,13 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ msgpackr-extract@3.0.3:
+ resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
+ hasBin: true
+
+ msgpackr@1.11.4:
+ resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==}
+
mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
@@ -7953,6 +8315,9 @@ packages:
resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==}
engines: {node: '>=10'}
+ node-abort-controller@3.1.1:
+ resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
+
node-addon-api@4.3.0:
resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==}
@@ -7981,6 +8346,10 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ node-gyp-build-optional-packages@5.2.2:
+ resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
+ hasBin: true
+
node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -8290,6 +8659,9 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
@@ -8775,6 +9147,17 @@ packages:
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
engines: {node: '>=8'}
+ redis-errors@1.2.0:
+ resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
+ engines: {node: '>=4'}
+
+ redis-info@3.1.0:
+ resolution: {integrity: sha512-ER4L9Sh/vm63DkIE0bkSjxluQlioBiBgf5w1UuldaW/3vPcecdljVDisZhmnCMvsxHNiARTTDDHGg9cGwTfrKg==}
+
+ redis-parser@3.0.0:
+ resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
+ engines: {node: '>=4'}
+
redis@5.5.5:
resolution: {integrity: sha512-x7vpciikEY7nptGzQrE5I+/pvwFZJDadPk/uEoyGSg/pZ2m/CX2n5EhSgUh+S5T7Gz3uKM6YzWcXEu3ioAsdFQ==}
engines: {node: '>= 18'}
@@ -8905,6 +9288,9 @@ packages:
rw@1.3.3:
resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
safe-array-concat@1.1.3:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
@@ -9175,6 +9561,9 @@ packages:
stacktrace-js@2.0.2:
resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==}
+ standard-as-callback@2.1.0:
+ resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
+
statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
@@ -9473,10 +9862,18 @@ packages:
resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==}
engines: {node: ^18.0.0 || >=20.0.0}
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
tinyspy@4.0.3:
resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
engines: {node: '>=14.0.0'}
@@ -9932,11 +10329,47 @@ packages:
victory-vendor@36.9.2:
resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
+ vite-node@2.1.9:
+ resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
vite-node@3.2.3:
resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
+ vite@5.4.19:
+ resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
vite@6.3.5:
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -9977,6 +10410,31 @@ packages:
yaml:
optional: true
+ vitest@2.1.9:
+ resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.9
+ '@vitest/ui': 2.1.9
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vitest@3.2.3:
resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -10298,8 +10756,11 @@ packages:
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
- zod@3.25.61:
- resolution: {integrity: sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ==}
+ zod@3.25.57:
+ resolution: {integrity: sha512-6tgzLuwVST5oLUxXTmBqoinKMd3JeesgbgseXeFasKKj8Q1FCZrHnbqJOyiEvr4cVAlbug+CgIsmJ8cl/pU5FA==}
+
+ zod@3.25.62:
+ resolution: {integrity: sha512-YCxsr4DmhPcrKPC9R1oBHQNlQzlJEyPAId//qTau/vBee9uO8K6prmRq4eMkOyxvBfH4wDPIPdLx9HVMWIY3xA==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -11122,6 +11583,24 @@ snapshots:
'@braintree/sanitize-url@7.1.1': {}
+ '@bull-board/api@6.10.1(@bull-board/ui@6.10.1)':
+ dependencies:
+ '@bull-board/ui': 6.10.1
+ redis-info: 3.1.0
+
+ '@bull-board/express@6.10.1':
+ dependencies:
+ '@bull-board/api': 6.10.1(@bull-board/ui@6.10.1)
+ '@bull-board/ui': 6.10.1
+ ejs: 3.1.10
+ express: 5.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@bull-board/ui@6.10.1':
+ dependencies:
+ '@bull-board/api': 6.10.1(@bull-board/ui@6.10.1)
+
'@changesets/apply-release-plan@7.0.12':
dependencies:
'@changesets/config': 3.1.1
@@ -11333,6 +11812,9 @@ snapshots:
'@esbuild-kit/core-utils': 3.3.2
get-tsconfig: 4.10.0
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
'@esbuild/aix-ppc64@0.25.4':
optional: true
@@ -11342,6 +11824,9 @@ snapshots:
'@esbuild/android-arm64@0.18.20':
optional: true
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
'@esbuild/android-arm64@0.25.4':
optional: true
@@ -11351,6 +11836,9 @@ snapshots:
'@esbuild/android-arm@0.18.20':
optional: true
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
'@esbuild/android-arm@0.25.4':
optional: true
@@ -11360,6 +11848,9 @@ snapshots:
'@esbuild/android-x64@0.18.20':
optional: true
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
'@esbuild/android-x64@0.25.4':
optional: true
@@ -11369,6 +11860,9 @@ snapshots:
'@esbuild/darwin-arm64@0.18.20':
optional: true
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.4':
optional: true
@@ -11378,6 +11872,9 @@ snapshots:
'@esbuild/darwin-x64@0.18.20':
optional: true
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
'@esbuild/darwin-x64@0.25.4':
optional: true
@@ -11387,6 +11884,9 @@ snapshots:
'@esbuild/freebsd-arm64@0.18.20':
optional: true
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.4':
optional: true
@@ -11396,6 +11896,9 @@ snapshots:
'@esbuild/freebsd-x64@0.18.20':
optional: true
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.4':
optional: true
@@ -11405,6 +11908,9 @@ snapshots:
'@esbuild/linux-arm64@0.18.20':
optional: true
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
'@esbuild/linux-arm64@0.25.4':
optional: true
@@ -11414,6 +11920,9 @@ snapshots:
'@esbuild/linux-arm@0.18.20':
optional: true
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
'@esbuild/linux-arm@0.25.4':
optional: true
@@ -11423,6 +11932,9 @@ snapshots:
'@esbuild/linux-ia32@0.18.20':
optional: true
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
'@esbuild/linux-ia32@0.25.4':
optional: true
@@ -11432,6 +11944,9 @@ snapshots:
'@esbuild/linux-loong64@0.18.20':
optional: true
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
'@esbuild/linux-loong64@0.25.4':
optional: true
@@ -11441,6 +11956,9 @@ snapshots:
'@esbuild/linux-mips64el@0.18.20':
optional: true
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.4':
optional: true
@@ -11450,6 +11968,9 @@ snapshots:
'@esbuild/linux-ppc64@0.18.20':
optional: true
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.4':
optional: true
@@ -11459,6 +11980,9 @@ snapshots:
'@esbuild/linux-riscv64@0.18.20':
optional: true
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.4':
optional: true
@@ -11468,6 +11992,9 @@ snapshots:
'@esbuild/linux-s390x@0.18.20':
optional: true
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
'@esbuild/linux-s390x@0.25.4':
optional: true
@@ -11477,6 +12004,9 @@ snapshots:
'@esbuild/linux-x64@0.18.20':
optional: true
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
'@esbuild/linux-x64@0.25.4':
optional: true
@@ -11492,6 +12022,9 @@ snapshots:
'@esbuild/netbsd-x64@0.18.20':
optional: true
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.4':
optional: true
@@ -11507,6 +12040,9 @@ snapshots:
'@esbuild/openbsd-x64@0.18.20':
optional: true
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.4':
optional: true
@@ -11516,6 +12052,9 @@ snapshots:
'@esbuild/sunos-x64@0.18.20':
optional: true
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
'@esbuild/sunos-x64@0.25.4':
optional: true
@@ -11525,6 +12064,9 @@ snapshots:
'@esbuild/win32-arm64@0.18.20':
optional: true
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
'@esbuild/win32-arm64@0.25.4':
optional: true
@@ -11534,6 +12076,9 @@ snapshots:
'@esbuild/win32-ia32@0.18.20':
optional: true
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
'@esbuild/win32-ia32@0.25.4':
optional: true
@@ -11543,6 +12088,9 @@ snapshots:
'@esbuild/win32-x64@0.18.20':
optional: true
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
'@esbuild/win32-x64@0.25.4':
optional: true
@@ -11624,8 +12172,8 @@ snapshots:
'@modelcontextprotocol/sdk': 1.12.0
google-auth-library: 9.15.1
ws: 8.18.2
- zod: 3.25.61
- zod-to-json-schema: 3.24.5(zod@3.25.61)
+ zod: 3.25.62
+ zod-to-json-schema: 3.24.5(zod@3.25.62)
transitivePeerDependencies:
- bufferutil
- encoding
@@ -11740,6 +12288,8 @@ snapshots:
'@img/sharp-win32-x64@0.33.5':
optional: true
+ '@ioredis/commands@1.2.0': {}
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -12060,10 +12610,10 @@ snapshots:
dependencies:
exenv-es6: 1.1.1
- '@mistralai/mistralai@1.6.1(zod@3.25.61)':
+ '@mistralai/mistralai@1.6.1(zod@3.25.62)':
dependencies:
- zod: 3.25.61
- zod-to-json-schema: 3.24.5(zod@3.25.61)
+ zod: 3.25.62
+ zod-to-json-schema: 3.24.5(zod@3.25.62)
'@mixmark-io/domino@2.2.0': {}
@@ -12078,11 +12628,29 @@ snapshots:
express-rate-limit: 7.5.0(express@5.1.0)
pkce-challenge: 5.0.0
raw-body: 3.0.0
- zod: 3.25.61
- zod-to-json-schema: 3.24.5(zod@3.25.61)
+ zod: 3.25.62
+ zod-to-json-schema: 3.24.5(zod@3.25.62)
transitivePeerDependencies:
- supports-color
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
+ optional: true
+
+ '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
+ optional: true
+
'@mswjs/interceptors@0.38.6':
dependencies:
'@open-draft/deferred-promise': 2.2.0
@@ -13744,12 +14312,21 @@ snapshots:
dependencies:
'@babel/types': 7.27.1
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 22.15.29
+
'@types/chai@5.2.2':
dependencies:
'@types/deep-eql': 4.0.2
'@types/clone-deep@4.0.4': {}
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.15.29
+
'@types/d3-array@3.2.1': {}
'@types/d3-axis@3.0.6':
@@ -13885,6 +14462,19 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/express-serve-static-core@5.0.6':
+ dependencies:
+ '@types/node': 22.15.29
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 0.17.5
+
+ '@types/express@5.0.3':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 5.0.6
+ '@types/serve-static': 1.15.8
+
'@types/geojson@7946.0.16': {}
'@types/glob@8.1.0':
@@ -13900,6 +14490,8 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/http-errors@2.0.5': {}
+
'@types/istanbul-lib-coverage@2.0.6': {}
'@types/istanbul-lib-report@3.0.3':
@@ -13939,6 +14531,8 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/mime@1.3.5': {}
+
'@types/minimatch@5.1.2': {}
'@types/mocha@10.0.10': {}
@@ -13972,11 +14566,6 @@ snapshots:
dependencies:
undici-types: 6.19.8
- '@types/node@20.19.0':
- dependencies:
- undici-types: 6.21.0
- optional: true
-
'@types/node@22.15.29':
dependencies:
undici-types: 6.21.0
@@ -13988,6 +14577,10 @@ snapshots:
'@types/ps-tree@1.1.6': {}
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
+
'@types/react-dom@18.3.7(@types/react@18.3.23)':
dependencies:
'@types/react': 18.3.23
@@ -13997,6 +14590,17 @@ snapshots:
'@types/prop-types': 15.7.14
csstype: 3.1.3
+ '@types/send@0.17.5':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 22.15.29
+
+ '@types/serve-static@1.15.8':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 22.15.29
+ '@types/send': 0.17.5
+
'@types/shell-quote@1.7.5': {}
'@types/stack-utils@2.0.3': {}
@@ -14030,7 +14634,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 20.19.0
+ '@types/node': 22.15.29
optional: true
'@types/yargs-parser@21.0.3': {}
@@ -14041,7 +14645,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 20.17.57
+ '@types/node': 22.15.29
optional: true
'@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
@@ -14142,6 +14746,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@vitest/expect@2.1.9':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.2.0
+ tinyrainbow: 1.2.0
+
'@vitest/expect@3.2.3':
dependencies:
'@types/chai': 5.2.2
@@ -14150,6 +14761,14 @@ snapshots:
chai: 5.2.0
tinyrainbow: 2.0.0
+ '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@22.15.29)(lightningcss@1.30.1))':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.17
+ optionalDependencies:
+ vite: 5.4.19(@types/node@22.15.29)(lightningcss@1.30.1)
+
'@vitest/mocker@3.2.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))':
dependencies:
'@vitest/spy': 3.2.3
@@ -14174,26 +14793,51 @@ snapshots:
optionalDependencies:
vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)
+ '@vitest/pretty-format@2.1.9':
+ dependencies:
+ tinyrainbow: 1.2.0
+
'@vitest/pretty-format@3.2.3':
dependencies:
tinyrainbow: 2.0.0
+ '@vitest/runner@2.1.9':
+ dependencies:
+ '@vitest/utils': 2.1.9
+ pathe: 1.1.2
+
'@vitest/runner@3.2.3':
dependencies:
'@vitest/utils': 3.2.3
pathe: 2.0.3
strip-literal: 3.0.0
+ '@vitest/snapshot@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ magic-string: 0.30.17
+ pathe: 1.1.2
+
'@vitest/snapshot@3.2.3':
dependencies:
'@vitest/pretty-format': 3.2.3
magic-string: 0.30.17
pathe: 2.0.3
+ '@vitest/spy@2.1.9':
+ dependencies:
+ tinyspy: 3.0.2
+
'@vitest/spy@3.2.3':
dependencies:
tinyspy: 4.0.3
+ '@vitest/utils@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ loupe: 3.1.3
+ tinyrainbow: 1.2.0
+
'@vitest/utils@3.2.3':
dependencies:
'@vitest/pretty-format': 3.2.3
@@ -14692,6 +15336,18 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
+ bullmq@5.53.2:
+ dependencies:
+ cron-parser: 4.9.0
+ ioredis: 5.6.1
+ msgpackr: 1.11.4
+ node-abort-controller: 3.1.1
+ semver: 7.7.2
+ tslib: 2.8.1
+ uuid: 9.0.1
+ transitivePeerDependencies:
+ - supports-color
+
bundle-name@4.1.0:
dependencies:
run-applescript: 7.0.0
@@ -14987,6 +15643,16 @@ snapshots:
concat-map@0.0.1: {}
+ concurrently@9.1.2:
+ dependencies:
+ chalk: 4.1.2
+ lodash: 4.17.21
+ rxjs: 7.8.2
+ shell-quote: 1.8.3
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+
confbox@0.1.8: {}
confbox@0.2.2: {}
@@ -15062,6 +15728,10 @@ snapshots:
- supports-color
- ts-node
+ cron-parser@4.9.0:
+ dependencies:
+ luxon: 3.6.1
+
cross-fetch@4.0.0:
dependencies:
node-fetch: 2.7.0
@@ -15409,6 +16079,8 @@ snapshots:
delayed-stream@1.0.0: {}
+ denque@2.1.0: {}
+
depd@2.0.0: {}
dequal@2.0.3: {}
@@ -15740,6 +16412,32 @@ snapshots:
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
esbuild@0.25.4:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.4
@@ -16798,6 +17496,20 @@ snapshots:
internmap@2.0.3: {}
+ ioredis@5.6.1:
+ dependencies:
+ '@ioredis/commands': 1.2.0
+ cluster-key-slot: 1.1.2
+ debug: 4.4.1(supports-color@8.1.1)
+ denque: 2.1.0
+ lodash.defaults: 4.2.0
+ lodash.isarguments: 3.1.0
+ redis-errors: 1.2.0
+ redis-parser: 3.0.0
+ standard-as-callback: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+
ip-address@9.0.5:
dependencies:
jsbn: 1.1.0
@@ -17589,8 +18301,8 @@ snapshots:
smol-toml: 1.3.4
strip-json-comments: 5.0.2
typescript: 5.8.3
- zod: 3.25.61
- zod-validation-error: 3.4.1(zod@3.25.61)
+ zod: 3.25.62
+ zod-validation-error: 3.4.1(zod@3.25.62)
knuth-shuffle-seeded@1.0.6:
dependencies:
@@ -17781,8 +18493,12 @@ snapshots:
lodash.debounce@4.0.8: {}
+ lodash.defaults@4.2.0: {}
+
lodash.includes@4.3.0: {}
+ lodash.isarguments@3.1.0: {}
+
lodash.isboolean@3.0.3: {}
lodash.isinteger@4.0.4: {}
@@ -17861,6 +18577,8 @@ snapshots:
dependencies:
react: 18.3.1
+ luxon@3.6.1: {}
+
lz-string@1.5.0: {}
macos-release@3.3.0: {}
@@ -18437,6 +19155,22 @@ snapshots:
ms@2.1.3: {}
+ msgpackr-extract@3.0.3:
+ dependencies:
+ node-gyp-build-optional-packages: 5.2.2
+ optionalDependencies:
+ '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
+ '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
+ optional: true
+
+ msgpackr@1.11.4:
+ optionalDependencies:
+ msgpackr-extract: 3.0.3
+
mute-stream@0.0.8: {}
mz@2.7.0:
@@ -18512,6 +19246,8 @@ snapshots:
semver: 7.7.2
optional: true
+ node-abort-controller@3.1.1: {}
+
node-addon-api@4.3.0:
optional: true
@@ -18534,6 +19270,11 @@ snapshots:
formdata-polyfill: 4.0.10
optional: true
+ node-gyp-build-optional-packages@5.2.2:
+ dependencies:
+ detect-libc: 2.0.4
+ optional: true
+
node-int64@0.4.0: {}
node-ipc@12.0.0:
@@ -18667,7 +19408,7 @@ snapshots:
is-inside-container: 1.0.0
is-wsl: 3.1.0
- openai@4.103.0(ws@8.18.2)(zod@3.25.61):
+ openai@4.103.0(ws@8.18.2)(zod@3.25.62):
dependencies:
'@types/node': 18.19.100
'@types/node-fetch': 2.6.12
@@ -18678,7 +19419,7 @@ snapshots:
node-fetch: 2.7.0
optionalDependencies:
ws: 8.18.2
- zod: 3.25.61
+ zod: 3.25.62
transitivePeerDependencies:
- encoding
@@ -18899,6 +19640,8 @@ snapshots:
path-type@4.0.0: {}
+ pathe@1.1.2: {}
+
pathe@2.0.3: {}
pathval@2.0.0: {}
@@ -19429,6 +20172,16 @@ snapshots:
indent-string: 4.0.0
strip-indent: 3.0.0
+ redis-errors@1.2.0: {}
+
+ redis-info@3.1.0:
+ dependencies:
+ lodash: 4.17.21
+
+ redis-parser@3.0.0:
+ dependencies:
+ redis-errors: 1.2.0
+
redis@5.5.5:
dependencies:
'@redis/bloom': 5.5.5(@redis/client@5.5.5)
@@ -19627,6 +20380,10 @@ snapshots:
rw@1.3.3: {}
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
safe-array-concat@1.1.3:
dependencies:
call-bind: 1.0.8
@@ -19782,8 +20539,7 @@ snapshots:
shell-quote@1.8.2: {}
- shell-quote@1.8.3:
- optional: true
+ shell-quote@1.8.3: {}
shiki@3.4.1:
dependencies:
@@ -19955,6 +20711,8 @@ snapshots:
stack-generator: 2.0.10
stacktrace-gps: 3.1.2
+ standard-as-callback@2.1.0: {}
+
statuses@2.0.1: {}
std-env@3.9.0: {}
@@ -20287,8 +21045,12 @@ snapshots:
tinypool@1.1.0: {}
+ tinyrainbow@1.2.0: {}
+
tinyrainbow@2.0.0: {}
+ tinyspy@3.0.2: {}
+
tinyspy@4.0.3: {}
tmp@0.0.33:
@@ -20762,6 +21524,24 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
+ vite-node@2.1.9(@types/node@22.15.29)(lightningcss@1.30.1):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.1(supports-color@8.1.1)
+ es-module-lexer: 1.7.0
+ pathe: 1.1.2
+ vite: 5.4.19(@types/node@22.15.29)(lightningcss@1.30.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vite-node@3.2.3(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0):
dependencies:
cac: 6.7.14
@@ -20825,6 +21605,16 @@ snapshots:
- tsx
- yaml
+ vite@5.4.19(@types/node@22.15.29)(lightningcss@1.30.1):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.4
+ rollup: 4.40.2
+ optionalDependencies:
+ '@types/node': 22.15.29
+ fsevents: 2.3.3
+ lightningcss: 1.30.1
+
vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0):
dependencies:
esbuild: 0.25.5
@@ -20873,6 +21663,42 @@ snapshots:
tsx: 4.19.4
yaml: 2.8.0
+ vitest@2.1.9(@types/node@22.15.29)(jsdom@20.0.3)(lightningcss@1.30.1):
+ dependencies:
+ '@vitest/expect': 2.1.9
+ '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@22.15.29)(lightningcss@1.30.1))
+ '@vitest/pretty-format': 2.1.9
+ '@vitest/runner': 2.1.9
+ '@vitest/snapshot': 2.1.9
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.2.0
+ debug: 4.4.1(supports-color@8.1.1)
+ expect-type: 1.2.1
+ magic-string: 0.30.17
+ pathe: 1.1.2
+ std-env: 3.9.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinypool: 1.1.0
+ tinyrainbow: 1.2.0
+ vite: 5.4.19(@types/node@22.15.29)(lightningcss@1.30.1)
+ vite-node: 2.1.9(@types/node@22.15.29)(lightningcss@1.30.1)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.15.29
+ jsdom: 20.0.3
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vitest@3.2.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0):
dependencies:
'@types/chai': 5.2.2
@@ -21264,21 +22090,23 @@ snapshots:
yoctocolors@2.1.1: {}
- zod-to-json-schema@3.24.5(zod@3.25.61):
+ zod-to-json-schema@3.24.5(zod@3.25.62):
dependencies:
- zod: 3.25.61
+ zod: 3.25.62
- zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.61):
+ zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.62):
dependencies:
typescript: 5.8.3
- zod: 3.25.61
+ zod: 3.25.62
- zod-validation-error@3.4.1(zod@3.25.61):
+ zod-validation-error@3.4.1(zod@3.25.62):
dependencies:
- zod: 3.25.61
+ zod: 3.25.62
zod@3.23.8: {}
- zod@3.25.61: {}
+ zod@3.25.57: {}
+
+ zod@3.25.62: {}
zwitch@2.0.4: {}