Self-hosted AI coding agent control room for Claude Code, Cursor CLI, OpenAI Codex, Gemini CLI, Qwen Code, and OpenCode with chat, files, shell, Git, orchestration, API keys, Telegram, MCP, plugins, themes, and desktop/server deployment.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
no tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v1.53.9 · analyzer v18 · 10h ago
danger signals2
- suspicious endpointapi.telegram.orgpackage/dist-server/server/services/telegram/telegram-http-client.js:17
const API_BASE = 'https://api.telegram.org/bot'; - suspicious endpointapi.telegram.orgpackage/server/services/telegram/telegram-http-client.js:19
const API_BASE = 'https://api.telegram.org/bot';
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 115
- fs package/dist-server/server/claude-sdk.js :15
import { existsSync, readFileSync, promises as fs } from 'fs'; - fs package/dist-server/server/cli.js :16
import fs from 'fs'; - fs package/dist-server/server/daemon-manager.js :1
import fs from 'fs'; - fs package/dist-server/server/daemon/manager.js :1
import fs from 'fs'; - fs package/dist-server/server/database/db.js :2
import fs from 'node:fs'; - fs package/dist-server/server/database/json-store.js :1
import fs from 'node:fs'; - fs package/dist-server/server/gemini-cli.js :2
import { promises as fs } from 'fs'; - fs package/dist-server/server/index.js :5
import fs, { promises as fsPromises } from 'fs'; - fs package/dist-server/server/load-env.js :2
import fs from 'fs'; - fs package/dist-server/server/modules/orchestration/a2a/agent-card.js :4
import { readFileSync } from 'node:fs'; - fs package/dist-server/server/modules/orchestration/workflows/workflow-store.js :1
import fs from 'node:fs'; - fs package/dist-server/server/modules/orchestration/workflows/workspace-target.js :1
import { readFileSync } from 'node:fs'; - fs package/dist-server/server/modules/orchestration/workspace/path-safety.js :1
import fs from 'node:fs'; - fs package/dist-server/server/modules/orchestration/workspace/workspace-manager.js :1
import fs from 'node:fs'; - fs package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js :2
import fs from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js :2
import { readFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/codex/codex-auth.provider.js :2
import { readFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/codex/codex-mcp.provider.js :1
import { mkdir, readFile, writeFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js :2
import { readFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js :2
import { readFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/list/qwen/qwen-auth.provider.js :2
import { readFile } from 'node:fs/promises'; - fs package/dist-server/server/modules/providers/provider.routes.js :16
import fs from 'node:fs/promises'; - fs package/dist-server/server/openai-codex.js :15
import { accessSync, constants } from 'node:fs'; - fs package/dist-server/server/opencode-cli.js :23
import { promises as fs } from 'fs'; - fs package/dist-server/server/projects.js :59
import fsSync, { promises as fs } from 'fs'; - fs package/dist-server/server/qwen-code-cli.js :12
import { promises as fs } from 'fs'; - fs package/dist-server/server/routes/agent.js :4
import { promises as fs } from 'fs'; - fs package/dist-server/server/routes/commands.js :1
import { promises as fs } from 'fs'; - fs package/dist-server/server/routes/cursor.js :1
import { promises as fs } from 'fs'; - fs package/dist-server/server/routes/git.js :3
import { promises as fs } from 'fs'; - fs package/dist-server/server/routes/live-view.js :1
import { promises as fs } from 'node:fs'; - fs package/dist-server/server/routes/plugins.js :3
import fs from 'fs'; - fs package/dist-server/server/routes/projects.js :1
import { promises as fs } from 'fs'; - fs package/dist-server/server/services/external-access.js :2
import fs from 'node:fs/promises'; - fs package/dist-server/server/services/install-jobs.js :36
import fs from 'node:fs'; - fs package/dist-server/server/services/live-view.js :3
import { promises as fs } from 'node:fs'; - fs package/dist-server/server/services/managed-runtimes.js :2
import { promises as fs } from 'node:fs'; - fs package/dist-server/server/services/provider-credentials.js :1
import { promises as fs } from 'node:fs'; - fs package/dist-server/server/services/provider-models.js :18
import { promises as fs } from 'node:fs'; - fs package/dist-server/server/services/runtime-manager.js :2
import fs from 'node:fs'; - fs package/dist-server/server/services/startup-update.js :1
import fs from 'node:fs'; - fs package/dist-server/server/sessionManager.js :1
import { promises as fs } from 'fs'; - fs package/dist-server/server/shared/utils.js :2
import { mkdir, readFile, writeFile } from 'node:fs/promises'; - fs package/dist-server/server/utils/commandParser.js :1
import { promises as fs } from 'fs'; - fs package/dist-server/server/utils/plugin-loader.js :1
import fs from 'fs'; - fs package/dist-server/server/utils/port-access.js :2
import fs from 'fs'; - fs package/dist/generate-icons.js :1
const fs = require('fs'); - fs package/scripts/fix-node-pty.js :12
import { promises as fs } from 'fs'; - fs package/scripts/github/create-v1.38-issues.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/changes-panel-layout.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/chat-composer-fixed-layout.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/chat-realtime-hydration.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/chat-session-provider-pools.mjs :2
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/chat-session-state.mjs :3
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/code-editor-theme.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/code-editor-vscode-engine.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/command-center-agent-writes.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/command-center-non-git.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/context-packet.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/control-room-ux-redesign.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/default-landing-routing.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/desktop-native-notifications.mjs :1
import fs from 'node:fs'; - fs package/scripts/smoke/desktop-tray-icon.mjs :2
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/discord-release-workflow.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/git-install-update.mjs :3
import fs from 'node:fs'; - fs package/scripts/smoke/handoff-artifact-protocol.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/live-view-environment.mjs :4
import { mkdir, mkdtemp, writeFile } from 'node:fs/promises'; - fs package/scripts/smoke/live-view-integration.mjs :1
import { access, chmod, mkdtemp, readFile, writeFile } from 'node:fs/promises'; - fs package/scripts/smoke/mac-desktop-runtime.mjs :2
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/mobile-tunnel-guidance.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/multi-project-ui.mjs :2
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/multi-worker-slots.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/notification-center.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/notification-inapp-preference.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-execution-dashboard.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-mobile-scroll.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-model-sync.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-permission-fallback.mjs :2
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-runtime-guards.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/orchestration-user-facing-output.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/permission-policy.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/pixcode-workbench-1-48.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/provider-models-opencode-live.mjs :4
import { mkdtemp } from 'node:fs/promises'; - fs package/scripts/smoke/provider-selection-status.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/run-state-refresh.mjs :4
import { existsSync, readFileSync } from 'node:fs'; - fs package/scripts/smoke/runtime-manager.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/shell-manual-disconnect.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/side-panel-editor-layout.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/static-root-routing.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/strict-handoff-compact.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/taskmaster-config.mjs :4
import { existsSync, readFileSync } from 'node:fs'; - fs package/scripts/smoke/telegram-control.mjs :4
import { mkdirSync, readFileSync, rmSync } from 'node:fs'; - fs package/scripts/smoke/tunnel-persistence.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/update-issue-progress.mjs :4
import { existsSync, readFileSync } from 'node:fs'; - fs package/scripts/smoke/update-ux.mjs :3
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/v138-completion.mjs :4
import { mkdirSync, readFileSync, rmSync } from 'node:fs'; - fs package/scripts/smoke/v138-desktop-release-hardening.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/v143-remote-control.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/v144-production-loop.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/v145-platformization.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/v146-control-room-ui.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/version-modal-autoshow.mjs :4
import { readFileSync } from 'node:fs'; - fs package/scripts/smoke/vscode-workbench-layout.mjs :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/scripts/smoke/vscode-workbench-polish.mjs :2
import fs from 'node:fs'; - fs package/scripts/smoke/workflow-fallback-replay.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/workflow-templates.mjs :4
import fs from 'node:fs'; - fs package/scripts/smoke/workflow-trace-timeline.mjs :3
import fs from 'node:fs'; - fs package/scripts/update-git-install.mjs :3
import fs from 'node:fs'; - fs package/server/claude-sdk.js :16
import { existsSync, readFileSync, promises as fs } from 'fs'; - fs package/server/cli.js :17
import fs from 'fs'; - fs package/server/daemon-manager.js :1
import fs from 'fs'; - fs package/server/daemon/manager.js :1
import fs from 'fs'; - fs package/server/database/db.js :2
import fs from 'node:fs'; - fs package/server/database/json-store.js :1
import fs from 'node:fs'; - fs package/server/gemini-cli.js :2
import { promises as fs } from 'fs';
shell / exec 41
- shell package/dist-server/server/claude-sdk.js :172
// `child_process.spawn(command, args)` with no shell — and its own - shell package/dist-server/server/cli.js :20
import { spawn } from 'node:child_process'; - shell package/dist-server/server/cursor-cli.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/daemon-manager.js :4
import { spawnSync } from 'child_process'; - shell package/dist-server/server/daemon/manager.js :5
import { execFileSync, spawn } from 'child_process'; - shell package/dist-server/server/gemini-cli.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/index.js :12
import { spawn } from 'child_process'; - shell package/dist-server/server/modules/orchestration/preview/port-watcher.js :1
import { execFile } from 'node:child_process'; - shell package/dist-server/server/modules/orchestration/workspace/docker-workspace.js :4
const { execFile } = await import('node:child_process'); - shell package/dist-server/server/modules/orchestration/workspace/workspace-manager.js :18
async exec(command, args = []) { - shell package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js :1
import { execFile } from 'node:child_process'; - shell package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js :63
childProcess = spawn(this.cliPath(), ['status']); - shell package/dist-server/server/opencode-cli.js :22
import { spawn } from 'child_process'; - shell package/dist-server/server/qwen-code-cli.js :11
import { spawn } from 'child_process'; - shell package/dist-server/server/routes/agent.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/routes/git.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/routes/projects.js :3
import { spawn } from 'child_process'; - shell package/dist-server/server/routes/user.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/services/external-access.js :1
import { spawn } from 'node:child_process'; - shell package/dist-server/server/services/install-jobs.js :20
* to `process.env.PATH`. Every existing `cross-spawn(binary)` call - shell package/dist-server/server/services/live-view.js :1
import { spawn } from 'node:child_process'; - shell package/dist-server/server/services/managed-runtimes.js :1
import { spawn } from 'node:child_process'; - shell package/dist-server/server/services/platformization.js :4
import { execFile, spawn } from 'node:child_process'; - shell package/dist-server/server/services/provider-cli-versions.js :1
import { execFile } from 'node:child_process'; - shell package/dist-server/server/services/runtime-manager.js :1
import { spawn } from 'node:child_process'; - shell package/dist-server/server/services/startup-update.js :3
import { spawn, spawnSync } from 'node:child_process'; - shell package/dist-server/server/utils/commandParser.js :3
import { execFile } from 'child_process'; - shell package/dist-server/server/utils/gitConfig.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/utils/plugin-loader.js :4
import { spawn } from 'child_process'; - shell package/dist-server/server/utils/plugin-process-manager.js :1
import { spawn } from 'child_process'; - shell package/dist-server/server/utils/port-access.js :5
import { execSync } from 'child_process'; - shell package/dist/assets/vendor-codemirror-CIYNS698.js :9
*/var Ra;function em(){if(Ra)return Bi;Ra=1;var n=Jp(),e=Symbol.for("react.element"),t=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,r=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_F - shell package/scripts/github/create-vscode-workbench-issues.mjs :2
import { spawnSync } from 'node:child_process'; - shell package/scripts/smoke/git-install-update.mjs :2
import { spawnSync } from 'node:child_process'; - shell package/scripts/update-git-install.mjs :2
import { spawn } from 'node:child_process'; - shell package/server/claude-sdk.js :210
// `child_process.spawn(command, args)` with no shell — and its own - shell package/server/cli.js :21
import { spawn } from 'node:child_process'; - shell package/server/cursor-cli.js :1
import { spawn } from 'child_process'; - shell package/server/daemon-manager.js :4
import { spawnSync } from 'child_process'; - shell package/server/daemon/manager.js :5
import { execFileSync, spawn } from 'child_process'; - shell package/server/gemini-cli.js :1
import { spawn } from 'child_process';
network 28
- net package/dist-server/server/cli.js :19
import net from 'node:net'; - net package/dist-server/server/daemon-manager.js :5
import { request } from 'node:http'; - net package/dist-server/server/daemon/manager.js :2
import http from 'http'; - net package/dist-server/server/index.js :8
import http from 'http'; - net package/dist-server/server/modules/orchestration/preview/preview-proxy.js :25
const upstream = await fetch(target, { - net package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js :117
const tokenRes = await fetch(`https://oauth2.googleapis.com/tokeninfo?access_token=${accessToken}`, { - net package/dist-server/server/modules/providers/provider.routes.js :17
import http from 'node:http'; - net package/dist-server/server/routes/live-view.js :336
const upstream = await fetch(targetUrl, { - net package/dist-server/server/routes/plugins.js :2
import http from 'http'; - net package/dist-server/server/services/live-view.js :4
import net from 'node:net'; - net package/dist-server/server/services/managed-runtimes.js :102
const response = await fetch(url, { headers }); - net package/dist-server/server/services/platformization.js :974
const response = await fetch(`${url}/api/auth/status`, { signal: controller.signal }); - net package/dist-server/server/services/provider-models.js :101
const response = await fetch(endpoint, { - net package/dist-server/server/services/public-api-manifest.js :72
const response = await fetch(new URL(path, this.baseUrl), { - net package/dist-server/server/services/remote-connection.js :92
const response = await fetch(`${normalized.remoteUrl}/api/auth/status`, { - net package/dist-server/server/services/startup-update.js :60
const response = await fetch(registryUrl, { headers: { accept: 'application/json' } }); - net package/dist-server/server/services/telegram/control-center.js :221
const res = await fetch(`${localApiBase()}${path}`, { - net package/dist-server/server/services/telegram/telegram-http-client.js :37
const res = await fetch(url, { - net package/dist-server/server/services/webhooks.js :140
const response = await fetch(webhook.url, { - net package/dist/sw.js :38
fetch(event.request).catch(() => caches.match('/manifest.json').then(() => - net package/scripts/github/create-v1.38-issues.mjs :3
import https from 'node:https'; - net package/scripts/smoke/live-view-integration.mjs :2
import net from 'node:net'; - net package/scripts/smoke/orchestration-api.mjs :12
const response = await fetch(`${baseUrl}${path}`, { - net package/scripts/smoke/orchestration-live-run.mjs :45
const response = await fetch(`${baseUrl}${path}`, { - net package/scripts/smoke/provider-rest-api.mjs :41
const response = await fetch(`${apiUrl}/api/agent`, { - net package/server/cli.js :20
import net from 'node:net'; - net package/server/daemon-manager.js :5
import { request } from 'node:http'; - net package/server/daemon/manager.js :2
import http from 'http';
secrets 13
- secrets package/dist-server/server/gemini-cli.js :35
const apiKey = process.env.GEMINI_API_KEY; - secrets package/dist-server/server/middleware/auth.js :5
const JWT_SECRET = process.env.JWT_SECRET || appConfigDb.getOrCreateJwtSecret(); - secrets package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js :90
if (process.env.ANTHROPIC_API_KEY?.trim()) { - secrets package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js :62
if (process.env.GEMINI_API_KEY?.trim()) { - secrets package/dist-server/server/modules/providers/list/qwen/qwen-auth.provider.js :73
if (process.env.QWEN_API_KEY?.trim()) { - secrets package/dist-server/server/services/platformization.js :257
const material = process.env.PIXCODE_SECRET_KEY || process.env.JWT_SECRET || appConfigDb.getOrCreateJwtSecret(); - secrets package/dist-server/server/services/provider-models.js :332
claude: process.env.ANTHROPIC_API_KEY, - secrets package/scripts/github/create-v1.38-issues.mjs :246
const token = process.env.GITHUB_TOKEN; - secrets package/scripts/github/create-vscode-workbench-issues.mjs :113
GH_TOKEN: process.env.GITHUB_TOKEN || process.env.GH_TOKEN || '', - secrets package/scripts/smoke/orchestration-api.mjs :4
const apiKey = process.env.PIXCODE_API_KEY; - secrets package/scripts/smoke/orchestration-live-run.mjs :4
const apiKey = process.env.PIXCODE_API_KEY; - secrets package/scripts/smoke/provider-rest-api.mjs :6
const apiKey = process.env.PIXCODE_API_KEY || process.env.PIXCODE_AGENT_API_KEY || ''; - secrets package/server/gemini-cli.js :40
const apiKey = process.env.GEMINI_API_KEY;
database 3
- db package/dist-server/server/database/db.js :70
const mod = require('better-sqlite3'); - db package/dist-server/server/projects.js :64
import Database from 'better-sqlite3'; - db package/server/database/db.js :77
const mod = require('better-sqlite3');
install hooks 1
- postinstall package/package.json :62
node scripts/fix-node-pty.js
declared dependencies 98
- @anthropic-ai/claude-agent-sdk@^0.2.116
- @iarna/toml@^2.2.5
- @octokit/rest@^22.0.0
- @openai/codex-sdk@^0.101.0
- bcryptjs@^3.0.3
- better-sqlite3@^12.6.2
- chokidar@^4.0.3
- cors@^2.8.5
- cross-spawn@^7.0.3
- express@^4.18.2
- gray-matter@^4.0.3
- jsonwebtoken@^9.0.2
- mime-types@^3.0.1
- monaco-editor@^0.55.1
- multer@^2.0.1
- node-fetch@^2.7.0
- node-pty@^1.2.0-beta.12
- tar@^7.5.13
- web-push@^3.6.7
- ws@^8.14.2
- @codemirror/lang-css@^6.3.1
- @codemirror/lang-html@^6.4.9
- @codemirror/lang-javascript@^6.2.4
- @codemirror/lang-json@^6.0.1
- @codemirror/lang-markdown@^6.3.3
- @codemirror/lang-python@^6.2.1
- @codemirror/merge@^6.11.1
- @codemirror/theme-one-dark@^6.1.2
- @commitlint/cli@^20.5.0
- @commitlint/config-conventional@^20.5.0
- @eslint/js@^9.39.3
- @heroicons/react@^2.2.0
- @monaco-editor/react@^4.7.0
- @release-it/conventional-changelog@^10.0.5
- @replit/codemirror-minimap@^0.5.2
- @tailwindcss/typography@^0.5.16
- @types/better-sqlite3@^7.6.13
- @types/cross-spawn@^6.0.6
- @types/express@^5.0.6
- @types/node@^22.19.7
- @types/qrcode@^1.5.6
- @types/react@^18.2.43
- @types/react-dom@^18.2.17
- @uiw/react-codemirror@^4.23.13
- @vitejs/plugin-react@^4.6.0
- @xterm/addon-clipboard@^0.1.0
- @xterm/addon-fit@^0.10.0
- @xterm/addon-web-links@^0.11.0
- @xterm/addon-webgl@^0.18.0
- @xterm/xterm@^5.5.0
- auto-changelog@^2.5.0
- autoprefixer@^10.4.16
- class-variance-authority@^0.7.1
- clsx@^2.1.1
- concurrently@^8.2.2
- eslint@^9.39.3
- eslint-import-resolver-typescript@^4.4.4
- eslint-plugin-boundaries@^6.0.2
- eslint-plugin-import-x@^4.16.1
- eslint-plugin-react@^7.37.5
- eslint-plugin-react-hooks@^7.0.1
- eslint-plugin-react-refresh@^0.5.2
- eslint-plugin-tailwindcss@^3.18.2
- eslint-plugin-unused-imports@^4.4.1
- fuse.js@^7.0.0
- globals@^17.4.0
- gsap@^3.12.5
- husky@^9.1.7
- i18next@^25.7.4
- i18next-browser-languagedetector@^8.2.0
- jszip@^3.10.1
- katex@^0.16.25
- lint-staged@^16.3.2
- lucide-react@^0.515.0
- node-gyp@^12.0.0
- postcss@^8.4.32
- qrcode@^1.5.4
- react@^18.2.0
- react-dom@^18.2.0
- react-dropzone@^14.2.3
- react-error-boundary@^4.1.2
- react-i18next@^16.5.3
- react-markdown@^10.1.0
- react-router-dom@^6.8.1
- react-syntax-highlighter@^16.1.1
- rehype-katex@^7.0.1
- rehype-raw@^7.0.0
- release-it@^19.0.5
- remark-gfm@^4.0.0
- remark-math@^6.0.0
- sharp@^0.34.2
- tailwind-merge@^3.3.1
- tailwindcss@^3.4.0
- tsc-alias@^1.8.16
- tsx@^4.21.0
- typescript@^5.9.3
- typescript-eslint@^8.56.1
- vite@^7.0.4