github TypeScript analyzed cb268b9 unconfirmed MCP

echoVic/blade-code

github

AI-powered CLI coding agent with 20+ built-in tools, MCP support, and multi-model providers

maintainer
echoVic
license
MIT
first seen
2026-07-30
last seen
2026-08-01
releases · 30d
36
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit cb268b9 · analyzer v28 · 1d ago

skills & prompt files 5

danger signals4

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 559

filesystem 57

  • fs echoVic-blade-code-cb268b9/packages/cli/src/agent/subagents/AgentSessionStore.ts :10 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/agent/subagents/SubagentRegistry.ts :1 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/agent/teams/TeamStore.ts :1 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/bootstrap/state.ts :10 import { realpathSync } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/commands/headlessBenchmark.ts :1 import { mkdir, readFile, writeFile } from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/config/ConfigManager.ts :19 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/config/ConfigService.ts :15 import { promises as fs } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/context/CompactionService.ts :6 import { promises as fs } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/context/FileAnalyzer.ts :6 import { readFile } from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/context/ToolResultBudget.ts :8 import * as fs from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/context/storage/JSONLStore.ts :1 import * as fsSync from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/context/storage/PersistentStore.ts :2 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/hooks/HookManager.ts :197 const content = await fs.readFile(localSettingsPath, 'utf-8');
  • fs echoVic-blade-code-cb268b9/packages/cli/src/logging/Logger.ts :16 import { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/logging/StreamDebugLogger.ts :8 import { appendFileSync, mkdirSync, writeFileSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/mcp/auth/OAuthTokenStorage.ts :6 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/mcp/loadMcpConfig.ts :10 import fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/memory/AutoMemoryManager.ts :14 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/plugins/PluginInstaller.ts :9 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/plugins/PluginLoader.ts :8 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/plugins/PluginManifest.ts :8 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/prompts/builder.ts :20 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/prompts/processors/AttachmentCollector.ts :8 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/server/routes/skills.ts :2 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/server/routes/suggestions.ts :4 import { readdir } from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/server/server.ts :3 import { existsSync, readFileSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/services/FileSystemService.ts :8 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/services/SessionService.ts :6 import { readdir, readFile, rm } from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/services/VersionChecker.ts :7 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/skills/SkillInstaller.ts :9 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/skills/SkillLoader.ts :8 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/skills/SkillRegistry.ts :8 import * as fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/builtinCommands.ts :5 import fs from 'node:fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/custom/CustomCommandExecutor.ts :11 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/custom/CustomCommandLoader.ts :7 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/custom/CustomCommandParser.ts :7 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/ide.ts :11 import { existsSync, readFileSync } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/init.ts :6 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/file/FileAccessTracker.ts :1 import { promises as fs } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/file/SnapshotManager.ts :2 import { promises as fs } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/file/write.ts :1 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/notebook/notebookEdit.ts :1 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/plan/ExitPlanModeTool.ts :1 import { promises as fs } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/search/glob.ts :3 import type { Stats } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/search/grep.ts :2 import { existsSync } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/task/TaskListManager.ts :1 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/tools/execution/VerifyQueue.ts :19 import { existsSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/ui/components/AgentCreationWizard.tsx :16 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/ui/components/AgentsManager.tsx :7 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/ui/components/HooksManager.tsx :315 await fs.mkdir(pathModule.dirname(settingsPath), { recursive: true });
  • fs echoVic-blade-code-cb268b9/packages/cli/src/ui/components/PermissionsManager.tsx :2 import { promises as fs } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/ui/utils/imagePaste.ts :11 import { existsSync, readFileSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/utils/at.ts :1 import fs from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/utils/environment.ts :2 import { existsSync, realpathSync } from 'fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/utils/filePatterns.ts :1 import { existsSync, readFileSync } from 'node:fs';
  • fs echoVic-blade-code-cb268b9/packages/cli/src/utils/pathSecurity.ts :7 import * as fs from 'fs/promises';
  • fs echoVic-blade-code-cb268b9/packages/vscode/src/extension.ts :9 import * as fs from 'fs';

shell / exec 25

  • shell echoVic-blade-code-cb268b9/packages/cli/src/acp/AcpServiceContext.ts :15 import { spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/commands/update.ts :5 import { execSync } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/context/storage/pathUtils.ts :1 import { execSync } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/hooks/SecureProcessExecutor.ts :7 import { spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/ide/detectIde.ts :7 import { exec } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/ide/ideInstaller.ts :7 import { exec } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/mcp/auth/OAuthProvider.ts :6 import { spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/plugins/PluginInstaller.ts :8 import { execSync } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/server/routes/suggestions.ts :3 import { execSync } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/server/routes/terminal.ts :46 const ptyProcess = spawn(command, args, {
  • shell echoVic-blade-code-cb268b9/packages/cli/src/services/VersionChecker.ts :239 const { spawn } = await import('child_process');
  • shell echoVic-blade-code-cb268b9/packages/cli/src/skills/SkillInstaller.ts :8 import { exec } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/custom/CustomCommandExecutor.ts :10 import { execSync } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/slash-commands/memory.ts :5 import { spawn } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/search/grep.ts :1 import { execSync, spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/shell/BackgroundShellManager.ts :1 import { type ChildProcess, spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/shell/bash.ts :1 import { spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/tools/execution/VerifyQueue.ts :18 import { execFile } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/tools/validation/SensitiveFileDetector.ts :341 return new RegExp(`^${regexPattern}$`, 'i').test(text);
  • shell echoVic-blade-code-cb268b9/packages/cli/src/ui/utils/imagePaste.ts :10 import { execSync } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/utils/backgroundTaskManager.ts :1 import { spawn } from 'node:child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/utils/environment.ts :1 import { execSync } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/utils/git.ts :12 import { type ExecFileException, execFile, spawn } from 'child_process';
  • shell echoVic-blade-code-cb268b9/packages/cli/src/utils/shell/commandNormalizer.ts :459 if (next && '$`"\\'.includes(next)) {
  • shell echoVic-blade-code-cb268b9/packages/cli/src/utils/shell/readOnlyValidation.ts :883 return new RegExp(`^${escaped}(?:\\s|$)[^<>()$\`|{}&;\\n\\r]*$`);

network 21

  • net echoVic-blade-code-cb268b9/packages/cli/src/hooks/HookExecutor.ts :1001 const response = await fetch(hook.url, {
  • net echoVic-blade-code-cb268b9/packages/cli/src/mcp/auth/OAuthProvider.ts :8 import * as http from 'http';
  • net echoVic-blade-code-cb268b9/packages/cli/src/server/routes/skills.ts :65 const response = await fetch(
  • net echoVic-blade-code-cb268b9/packages/cli/src/server/server.ts :4 import { createServer, type Server as NodeServer } from 'node:http';
  • net echoVic-blade-code-cb268b9/packages/cli/src/services/ModelsDevService.ts :36 const response = await fetch(MODELS_DEV_API, {
  • net echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/web/searchProviders.ts :373 const response = await fetch(
  • net echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/web/webFetch.ts :450 return await fetch(url, { ...options, signal: controller.signal });
  • net echoVic-blade-code-cb268b9/packages/cli/src/tools/builtin/web/webSearch.ts :1 import { type Dispatcher, ProxyAgent, fetch as undiciFetch } from 'undici';
  • net echoVic-blade-code-cb268b9/packages/cli/src/ui/utils/security.ts :15 * await fetch('api', { headers: { 'Authorization': 'sk-abc123...' } });
  • net echoVic-blade-code-cb268b9/packages/cli/src/utils/proxyFetch.ts :12 import { type Dispatcher, ProxyAgent, fetch as undiciFetch } from 'undici';
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/layout/Sidebar.tsx :106 await fetch(`/sessions/${sessionId}`, {
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/mcp/McpModal.tsx :58 const response = await fetch('/mcp')
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/preview/FilePreview.tsx :80 const response = await fetch(url);
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/settings/AddModelModal.tsx :62 fetch('/providers')
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/settings/SettingsModal.tsx :71 const response = await fetch('/models', {
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/components/skills/SkillsModal.tsx :28 const response = await fetch('/skills')
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/hooks/useAtMention.ts :89 const response = await fetch(
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/hooks/useSlashCommand.ts :76 const response = await fetch(`/suggestions/commands?q=${encodeURIComponent(match.query)}`)
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/services/sessionService.ts :72 const res = await fetch(`${API_BASE}/sessions`);
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/store/ConfigStore.ts :32 const response = await fetch('/models')
  • net echoVic-blade-code-cb268b9/packages/cli/web/src/store/SettingsStore.ts :49 const response = await fetch('/configs')

secrets 4

  • secrets echoVic-blade-code-cb268b9/packages/cli/src/commands/serve.ts :22 if (!process.env.BLADE_SERVER_PASSWORD) {
  • secrets echoVic-blade-code-cb268b9/packages/cli/src/commands/web.ts :32 if (!process.env.BLADE_SERVER_PASSWORD) {
  • secrets echoVic-blade-code-cb268b9/packages/cli/src/context/CompactionService.ts :279 apiKey: options.apiKey || process.env.BLADE_API_KEY || '',
  • secrets echoVic-blade-code-cb268b9/packages/cli/src/server/server.ts :81 const password = process.env.BLADE_SERVER_PASSWORD;

declared dependencies 4

  • @biomejs/biome@^2.2.4
  • @types/node@^25.5.0
  • knip@^5.80.0
  • typescript@^5.9.2

clipboard 1

  • clipboard shell call echoVic-blade-code-cb268b9/packages/cli/src/ui/utils/imagePaste.ts :81 'xclip -selection clipboard -t TARGETS -o | grep -E "image/(png|jpeg|jpg|gif|webp)"',