@triedotdev/mcp 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/main.js CHANGED
@@ -10,15 +10,21 @@ import { fileURLToPath } from "url";
10
10
  var __filename = fileURLToPath(import.meta.url);
11
11
  var __dirname = dirname(__filename);
12
12
  var VERSION = "1.0.0";
13
- function showHelp() {
13
+ function showBanner() {
14
14
  console.log(`
15
- \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
16
- \u2551 \u2551
17
- \u2551 \u{1F53A} Trie Agent - Intelligent Code Review for AI-Generated Code \u2551
18
- \u2551 \u2551
19
- \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
20
-
21
- Version: ${VERSION}
15
+ \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
16
+ \u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D
17
+ \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557
18
+ \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D
19
+ \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
20
+ \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D
21
+
22
+ Customizable Agent Parallelization
23
+ `);
24
+ }
25
+ function showHelp() {
26
+ showBanner();
27
+ console.log(`Version: ${VERSION}
22
28
 
23
29
  USAGE:
24
30
  trie-agent <command> [options]
@@ -57,6 +63,7 @@ MCP TOOLS (use via Cursor/Claude Desktop):
57
63
  Individual Agents:
58
64
  trie_security Security vulnerabilities
59
65
  trie_privacy Privacy & GDPR compliance
66
+ trie_soc2 SOC 2 Type II compliance
60
67
  trie_legal Legal compliance
61
68
  trie_accessibility WCAG 2.1 accessibility
62
69
  trie_architecture Code organization & SOLID
@@ -173,7 +180,8 @@ to code reviews. Great for style guides, compliance docs, etc.
173
180
  `);
174
181
  }
175
182
  function showVersion() {
176
- console.log(`trie-agent v${VERSION}`);
183
+ showBanner();
184
+ console.log(`v${VERSION}`);
177
185
  }
178
186
  async function runScan(args) {
179
187
  const { spawn } = await import("child_process");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/main.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Trie Agent CLI\n * \n * Main command-line interface for Trie Agent.\n * Provides help, setup, and routes to specific tools.\n * \n * Usage:\n * trie-agent [command] [options]\n */\n\nimport { resolve, join, dirname } from 'path';\nimport { existsSync, readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\n\n// ES module __dirname equivalent\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst VERSION = '1.0.0';\n\n/**\n * Show the main help message\n */\nfunction showHelp(): void {\n console.log(`\n╔══════════════════════════════════════════════════════════════════╗\n║ ║\n║ 🔺 Trie Agent - Intelligent Code Review for AI-Generated Code ║\n║ ║\n╚══════════════════════════════════════════════════════════════════╝\n\nVersion: ${VERSION}\n\nUSAGE:\n trie-agent <command> [options]\n\nCOMMANDS:\n help Show this help message\n setup Configure API key and environment\n scan Scan codebase once and exit\n watch Watch for changes and scan continuously\n yolo 🔥 YOLO mode: auto-fix issues as they occur\n agents List all available agents\n version Show version information\n\nEXAMPLES:\n # First time setup\n trie-agent setup\n\n # Scan your project once\n trie-agent scan\n\n # Watch mode (scan on file changes)\n trie-agent watch\n\n # YOLO mode (auto-fix issues)\n trie-agent yolo\n\n # Scan specific directory\n trie-agent scan --dir ./src\n\nMCP TOOLS (use via Cursor/Claude Desktop):\n trie_scan Intelligent scan with agent selection\n trie_fix Apply high-confidence fixes\n trie_explain Explain code, issues, or changes\n trie_watch Watch mode with optional YOLO\n \n Individual Agents:\n trie_security Security vulnerabilities\n trie_privacy Privacy & GDPR compliance\n trie_legal Legal compliance\n trie_accessibility WCAG 2.1 accessibility\n trie_architecture Code organization & SOLID\n trie_bugs Bug finding & null safety\n trie_ux UX testing (happy path, edge cases)\n trie_types TypeScript type safety\n trie_devops DevOps & deployment\n trie_clean Clean up AI-generated code\n\n Custom Agents:\n trie_create_agent Create agent from PDF/TXT/MD document\n trie_list_agents List all registered agents\n\nNOTE: No API key required! Trie uses your AI tool's built-in Claude.\n\nFor more info: https://github.com/Trie-OS/Trie-Agent\n`);\n}\n\n/**\n * Show setup instructions\n */\nfunction showSetup(): void {\n console.log(`\n╔══════════════════════════════════════════════════════════════════╗\n║ 🔧 Trie Agent Setup ║\n╚══════════════════════════════════════════════════════════════════╝\n\nNo API key required! Trie uses your AI tool's built-in Claude.\n\nSTEP 1: Configure for your AI tool\n─────────────────────────────────────\n\nFor CLAUDE CODE:\n claude mcp add Trie -- npx @triedotdev/mcp\n\n Or add to ~/.claude/settings.json:\n {\n \"mcpServers\": {\n \"Trie\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/@triedotdev/mcp/dist/index.js\"]\n }\n }\n }\n\nFor CURSOR (~/.cursor/mcp.json):\n{\n \"mcpServers\": {\n \"Trie\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/@triedotdev/mcp/dist/index.js\"]\n }\n }\n}\n\nSTEP 2: Restart your AI tool\n─────────────────────────────────────\nRestart Claude Code or Cursor to load the MCP configuration.\n\nSTEP 3: Start scanning!\n─────────────────────────────────────\nAsk your AI assistant: \"Scan this with Trie\" or \"Use trie_scan\"\n\nNeed help? https://github.com/Trie-OS/Trie-Agent/issues\n`);\n}\n\n/**\n * List available agents\n */\nfunction listAgents(): void {\n console.log(`\n╔══════════════════════════════════════════════════════════════════╗\n║ 📋 Available Agents ║\n╚══════════════════════════════════════════════════════════════════╝\n\nBUILT-IN AGENTS:\n─────────────────────────────────────\n security Security vulnerabilities, injection risks, auth issues\n privacy GDPR, HIPAA, PII handling, data encryption\n legal GDPR, CCPA, consent patterns, data retention\n design-engineer WCAG 2.1 accessibility, UX best practices\n software-architect Code organization, SOLID principles, scalability\n bug-finding Null safety, edge cases, async issues\n user-testing Simulate users: happy path, security tester, confused user\n typecheck Type errors, missing annotations, null checks\n devops Config issues, logging, env vars, deployment\n trie_clean Clean up AI-generated code patterns\n\nCUSTOM AGENTS:\n─────────────────────────────────────`);\n\n // Check for custom agents\n const agentsDir = join(process.cwd(), '.trie', 'agents');\n if (existsSync(agentsDir)) {\n try {\n const { readdirSync } = require('fs');\n const files = readdirSync(agentsDir).filter((f: string) => f.endsWith('.json'));\n \n if (files.length > 0) {\n for (const file of files) {\n const config = JSON.parse(readFileSync(join(agentsDir, file), 'utf-8'));\n console.log(` ${config.name.padEnd(18)} ${config.description || 'Custom agent'}`);\n }\n } else {\n console.log(` (No custom agents found)`);\n }\n } catch {\n console.log(` (No custom agents found)`);\n }\n } else {\n console.log(` (No custom agents found)`);\n }\n\n console.log(`\nCREATE CUSTOM AGENTS:\n─────────────────────────────────────\nYou can create agents from PDF, TXT, or MD documents:\n\n Via MCP: Use trie_create_agent tool\n CLI: trie-create --file book.pdf --name my-agent\n\nThe agent will learn patterns from your document and apply them\nto code reviews. Great for style guides, compliance docs, etc.\n`);\n}\n\n/**\n * Show version\n */\nfunction showVersion(): void {\n console.log(`trie-agent v${VERSION}`);\n}\n\n/**\n * Run scan command\n */\nasync function runScan(args: string[]): Promise<void> {\n // Forward to yolo-daemon with --once flag\n const { spawn } = await import('child_process');\n \n // Determine daemon path - works for both source (tsx) and built (node) execution\n let daemonPath: string;\n if (__filename.endsWith('.ts')) {\n // Running from source with tsx\n daemonPath = resolve(__dirname, 'yolo-daemon.ts');\n } else {\n // Running from built dist\n daemonPath = resolve(__dirname, 'yolo-daemon.js');\n }\n \n const daemonArgs = ['--once', ...args];\n \n // Use tsx for .ts files, node for .js files\n const executor = daemonPath.endsWith('.ts') ? 'npx' : 'node';\n const execArgs = daemonPath.endsWith('.ts') \n ? ['tsx', daemonPath, ...daemonArgs]\n : [daemonPath, ...daemonArgs];\n \n const child = spawn(executor, execArgs, {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Run watch command\n */\nasync function runWatch(args: string[]): Promise<void> {\n const { spawn } = await import('child_process');\n \n // Determine daemon path - works for both source (tsx) and built (node) execution\n let daemonPath: string;\n if (__filename.endsWith('.ts')) {\n daemonPath = resolve(__dirname, 'yolo-daemon.ts');\n } else {\n daemonPath = resolve(__dirname, 'yolo-daemon.js');\n }\n \n // Use tsx for .ts files, node for .js files\n const executor = daemonPath.endsWith('.ts') ? 'npx' : 'node';\n const execArgs = daemonPath.endsWith('.ts') \n ? ['tsx', daemonPath, ...args]\n : [daemonPath, ...args];\n \n const child = spawn(executor, execArgs, {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Run YOLO mode\n */\nasync function runYolo(args: string[]): Promise<void> {\n const { spawn } = await import('child_process');\n const daemonPath = resolve(__dirname, 'yolo-daemon.js');\n \n const daemonArgs = ['--yolo', ...args];\n \n const child = spawn('node', [daemonPath, ...daemonArgs], {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Main entry point\n */\nfunction main(): void {\n const args = process.argv.slice(2);\n const command = args[0]?.toLowerCase();\n const restArgs = args.slice(1);\n\n // No command or help flag\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n showHelp();\n process.exit(0);\n }\n\n switch (command) {\n case 'setup':\n case 'config':\n case 'configure':\n case 'init':\n showSetup();\n break;\n\n case 'agents':\n case 'list':\n case 'list-agents':\n listAgents();\n break;\n\n case 'version':\n case '--version':\n case '-v':\n showVersion();\n break;\n\n case 'scan':\n runScan(restArgs);\n break;\n\n case 'watch':\n runWatch(restArgs);\n break;\n\n case 'yolo':\n runYolo(restArgs);\n break;\n\n default:\n // Check if it looks like a flag (pass to yolo daemon)\n if (command.startsWith('-')) {\n // Treat as yolo-daemon args\n const { spawn } = require('child_process');\n const daemonPath = resolve(__dirname, 'yolo-daemon.js');\n \n const child = spawn('node', [daemonPath, ...args], {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code: number) => {\n process.exit(code || 0);\n });\n } else {\n console.error(`Unknown command: ${command}`);\n console.error(`Run 'trie-agent help' for usage information.`);\n process.exit(1);\n }\n }\n}\n\nmain();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/main.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Trie Agent CLI\n * \n * Main command-line interface for Trie Agent.\n * Provides help, setup, and routes to specific tools.\n * \n * Usage:\n * trie-agent [command] [options]\n */\n\nimport { resolve, join, dirname } from 'path';\nimport { existsSync, readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\n\n// ES module __dirname equivalent\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst VERSION = '1.0.0';\n\n/**\n * Show TRIE ASCII art banner\n */\nfunction showBanner(): void {\n console.log(`\n ████████╗██████╗ ██╗███████╗\n ╚══██╔══╝██╔══██╗██║██╔════╝\n ██║ ██████╔╝██║█████╗ \n ██║ ██╔══██╗██║██╔══╝ \n ██║ ██║ ██║██║███████╗\n ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝\n \n Customizable Agent Parallelization\n`);\n}\n\n/**\n * Show the main help message\n */\nfunction showHelp(): void {\n showBanner();\n console.log(`Version: ${VERSION}\n\nUSAGE:\n trie-agent <command> [options]\n\nCOMMANDS:\n help Show this help message\n setup Configure API key and environment\n scan Scan codebase once and exit\n watch Watch for changes and scan continuously\n yolo 🔥 YOLO mode: auto-fix issues as they occur\n agents List all available agents\n version Show version information\n\nEXAMPLES:\n # First time setup\n trie-agent setup\n\n # Scan your project once\n trie-agent scan\n\n # Watch mode (scan on file changes)\n trie-agent watch\n\n # YOLO mode (auto-fix issues)\n trie-agent yolo\n\n # Scan specific directory\n trie-agent scan --dir ./src\n\nMCP TOOLS (use via Cursor/Claude Desktop):\n trie_scan Intelligent scan with agent selection\n trie_fix Apply high-confidence fixes\n trie_explain Explain code, issues, or changes\n trie_watch Watch mode with optional YOLO\n \n Individual Agents:\n trie_security Security vulnerabilities\n trie_privacy Privacy & GDPR compliance\n trie_soc2 SOC 2 Type II compliance\n trie_legal Legal compliance\n trie_accessibility WCAG 2.1 accessibility\n trie_architecture Code organization & SOLID\n trie_bugs Bug finding & null safety\n trie_ux UX testing (happy path, edge cases)\n trie_types TypeScript type safety\n trie_devops DevOps & deployment\n trie_clean Clean up AI-generated code\n\n Custom Agents:\n trie_create_agent Create agent from PDF/TXT/MD document\n trie_list_agents List all registered agents\n\nNOTE: No API key required! Trie uses your AI tool's built-in Claude.\n\nFor more info: https://github.com/Trie-OS/Trie-Agent\n`);\n}\n\n/**\n * Show setup instructions\n */\nfunction showSetup(): void {\n console.log(`\n╔══════════════════════════════════════════════════════════════════╗\n║ 🔧 Trie Agent Setup ║\n╚══════════════════════════════════════════════════════════════════╝\n\nNo API key required! Trie uses your AI tool's built-in Claude.\n\nSTEP 1: Configure for your AI tool\n─────────────────────────────────────\n\nFor CLAUDE CODE:\n claude mcp add Trie -- npx @triedotdev/mcp\n\n Or add to ~/.claude/settings.json:\n {\n \"mcpServers\": {\n \"Trie\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/@triedotdev/mcp/dist/index.js\"]\n }\n }\n }\n\nFor CURSOR (~/.cursor/mcp.json):\n{\n \"mcpServers\": {\n \"Trie\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/@triedotdev/mcp/dist/index.js\"]\n }\n }\n}\n\nSTEP 2: Restart your AI tool\n─────────────────────────────────────\nRestart Claude Code or Cursor to load the MCP configuration.\n\nSTEP 3: Start scanning!\n─────────────────────────────────────\nAsk your AI assistant: \"Scan this with Trie\" or \"Use trie_scan\"\n\nNeed help? https://github.com/Trie-OS/Trie-Agent/issues\n`);\n}\n\n/**\n * List available agents\n */\nfunction listAgents(): void {\n console.log(`\n╔══════════════════════════════════════════════════════════════════╗\n║ 📋 Available Agents ║\n╚══════════════════════════════════════════════════════════════════╝\n\nBUILT-IN AGENTS:\n─────────────────────────────────────\n security Security vulnerabilities, injection risks, auth issues\n privacy GDPR, HIPAA, PII handling, data encryption\n legal GDPR, CCPA, consent patterns, data retention\n design-engineer WCAG 2.1 accessibility, UX best practices\n software-architect Code organization, SOLID principles, scalability\n bug-finding Null safety, edge cases, async issues\n user-testing Simulate users: happy path, security tester, confused user\n typecheck Type errors, missing annotations, null checks\n devops Config issues, logging, env vars, deployment\n trie_clean Clean up AI-generated code patterns\n\nCUSTOM AGENTS:\n─────────────────────────────────────`);\n\n // Check for custom agents\n const agentsDir = join(process.cwd(), '.trie', 'agents');\n if (existsSync(agentsDir)) {\n try {\n const { readdirSync } = require('fs');\n const files = readdirSync(agentsDir).filter((f: string) => f.endsWith('.json'));\n \n if (files.length > 0) {\n for (const file of files) {\n const config = JSON.parse(readFileSync(join(agentsDir, file), 'utf-8'));\n console.log(` ${config.name.padEnd(18)} ${config.description || 'Custom agent'}`);\n }\n } else {\n console.log(` (No custom agents found)`);\n }\n } catch {\n console.log(` (No custom agents found)`);\n }\n } else {\n console.log(` (No custom agents found)`);\n }\n\n console.log(`\nCREATE CUSTOM AGENTS:\n─────────────────────────────────────\nYou can create agents from PDF, TXT, or MD documents:\n\n Via MCP: Use trie_create_agent tool\n CLI: trie-create --file book.pdf --name my-agent\n\nThe agent will learn patterns from your document and apply them\nto code reviews. Great for style guides, compliance docs, etc.\n`);\n}\n\n/**\n * Show version\n */\nfunction showVersion(): void {\n showBanner();\n console.log(`v${VERSION}`);\n}\n\n/**\n * Run scan command\n */\nasync function runScan(args: string[]): Promise<void> {\n // Forward to yolo-daemon with --once flag\n const { spawn } = await import('child_process');\n \n // Determine daemon path - works for both source (tsx) and built (node) execution\n let daemonPath: string;\n if (__filename.endsWith('.ts')) {\n // Running from source with tsx\n daemonPath = resolve(__dirname, 'yolo-daemon.ts');\n } else {\n // Running from built dist\n daemonPath = resolve(__dirname, 'yolo-daemon.js');\n }\n \n const daemonArgs = ['--once', ...args];\n \n // Use tsx for .ts files, node for .js files\n const executor = daemonPath.endsWith('.ts') ? 'npx' : 'node';\n const execArgs = daemonPath.endsWith('.ts') \n ? ['tsx', daemonPath, ...daemonArgs]\n : [daemonPath, ...daemonArgs];\n \n const child = spawn(executor, execArgs, {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Run watch command\n */\nasync function runWatch(args: string[]): Promise<void> {\n const { spawn } = await import('child_process');\n \n // Determine daemon path - works for both source (tsx) and built (node) execution\n let daemonPath: string;\n if (__filename.endsWith('.ts')) {\n daemonPath = resolve(__dirname, 'yolo-daemon.ts');\n } else {\n daemonPath = resolve(__dirname, 'yolo-daemon.js');\n }\n \n // Use tsx for .ts files, node for .js files\n const executor = daemonPath.endsWith('.ts') ? 'npx' : 'node';\n const execArgs = daemonPath.endsWith('.ts') \n ? ['tsx', daemonPath, ...args]\n : [daemonPath, ...args];\n \n const child = spawn(executor, execArgs, {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Run YOLO mode\n */\nasync function runYolo(args: string[]): Promise<void> {\n const { spawn } = await import('child_process');\n const daemonPath = resolve(__dirname, 'yolo-daemon.js');\n \n const daemonArgs = ['--yolo', ...args];\n \n const child = spawn('node', [daemonPath, ...daemonArgs], {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code) => {\n process.exit(code || 0);\n });\n}\n\n/**\n * Main entry point\n */\nfunction main(): void {\n const args = process.argv.slice(2);\n const command = args[0]?.toLowerCase();\n const restArgs = args.slice(1);\n\n // No command or help flag\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n showHelp();\n process.exit(0);\n }\n\n switch (command) {\n case 'setup':\n case 'config':\n case 'configure':\n case 'init':\n showSetup();\n break;\n\n case 'agents':\n case 'list':\n case 'list-agents':\n listAgents();\n break;\n\n case 'version':\n case '--version':\n case '-v':\n showVersion();\n break;\n\n case 'scan':\n runScan(restArgs);\n break;\n\n case 'watch':\n runWatch(restArgs);\n break;\n\n case 'yolo':\n runYolo(restArgs);\n break;\n\n default:\n // Check if it looks like a flag (pass to yolo daemon)\n if (command.startsWith('-')) {\n // Treat as yolo-daemon args\n const { spawn } = require('child_process');\n const daemonPath = resolve(__dirname, 'yolo-daemon.js');\n \n const child = spawn('node', [daemonPath, ...args], {\n stdio: 'inherit',\n env: process.env\n });\n\n child.on('close', (code: number) => {\n process.exit(code || 0);\n });\n } else {\n console.error(`Unknown command: ${command}`);\n console.error(`Run 'trie-agent help' for usage information.`);\n process.exit(1);\n }\n }\n}\n\nmain();\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  TrieFixTool,
4
4
  TrieScanTool
5
- } from "../chunk-E7CKHS3R.js";
5
+ } from "../chunk-77JFVVWF.js";
6
6
  import "../chunk-3CS6Z2SL.js";
7
7
  import "../chunk-MR755QGT.js";
8
8
  import "../chunk-6NLHFIYA.js";
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  TrieScanTool,
11
11
  getPrompt,
12
12
  getSystemPrompt
13
- } from "./chunk-E7CKHS3R.js";
13
+ } from "./chunk-77JFVVWF.js";
14
14
  import "./chunk-3CS6Z2SL.js";
15
15
  import "./chunk-MR755QGT.js";
16
16
  import "./chunk-6NLHFIYA.js";
@@ -2078,11 +2078,22 @@ var AGENT_TO_AI_TYPE = {
2078
2078
  };
2079
2079
  var TrieAgentTool = class {
2080
2080
  agentRegistry = new AgentRegistry();
2081
+ customAgentsLoaded = false;
2082
+ /**
2083
+ * Ensure custom agents are loaded before using the registry
2084
+ */
2085
+ async ensureCustomAgentsLoaded() {
2086
+ if (!this.customAgentsLoaded) {
2087
+ await this.agentRegistry.loadCustomAgents();
2088
+ this.customAgentsLoaded = true;
2089
+ }
2090
+ }
2081
2091
  async execute(args) {
2082
2092
  const { agent, files, directory, depth = "standard", lookup, output = "full" } = args;
2083
2093
  if (lookup) {
2084
2094
  return this.handleKnowledgeLookup(lookup);
2085
2095
  }
2096
+ await this.ensureCustomAgentsLoaded();
2086
2097
  if (!agent) {
2087
2098
  return this.listAgents();
2088
2099
  }
@@ -2998,17 +3009,17 @@ var TrieListAgentsTool = class {
2998
3009
 
2999
3010
  // src/utils/ai-tool-detector.ts
3000
3011
  function detectAITool() {
3001
- if (process.env.CLAUDE_CODE_VERSION) {
3012
+ if (process.env.CLAUDE_CODE_VERSION || process.env.CLAUDE_CODE) {
3002
3013
  return {
3003
- name: "claude-code",
3014
+ name: "Claude Code",
3004
3015
  preferredOutputFormat: "markdown",
3005
3016
  supportsDiffs: true,
3006
3017
  supportsInlineActions: true
3007
3018
  };
3008
3019
  }
3009
- if (process.env.CURSOR_IDE) {
3020
+ if (process.env.CURSOR_IDE || process.env.CURSOR_TRACE_ID) {
3010
3021
  return {
3011
- name: "cursor",
3022
+ name: "Cursor",
3012
3023
  preferredOutputFormat: "rich-text",
3013
3024
  supportsDiffs: true,
3014
3025
  supportsInlineActions: false
@@ -3016,39 +3027,47 @@ function detectAITool() {
3016
3027
  }
3017
3028
  if (process.env.OPENCODE_INSTANCE) {
3018
3029
  return {
3019
- name: "opencode",
3030
+ name: "OpenCode",
3020
3031
  preferredOutputFormat: "plain-text",
3021
3032
  supportsDiffs: false,
3022
3033
  supportsInlineActions: false
3023
3034
  };
3024
3035
  }
3025
- const parentProcess = process.env.PARENT_PROCESS_NAME;
3026
- if (parentProcess?.toLowerCase().includes("claude")) {
3036
+ if (process.env.VSCODE_PID || process.env.VSCODE_IPC_HOOK) {
3027
3037
  return {
3028
- name: "claude-code",
3038
+ name: "VS Code",
3039
+ preferredOutputFormat: "markdown",
3040
+ supportsDiffs: true,
3041
+ supportsInlineActions: false
3042
+ };
3043
+ }
3044
+ const parentProcess = process.env.PARENT_PROCESS_NAME || process.env._ || "";
3045
+ if (parentProcess.toLowerCase().includes("claude")) {
3046
+ return {
3047
+ name: "Claude Code",
3029
3048
  preferredOutputFormat: "markdown",
3030
3049
  supportsDiffs: true,
3031
3050
  supportsInlineActions: true
3032
3051
  };
3033
3052
  }
3034
- if (parentProcess?.toLowerCase().includes("cursor")) {
3053
+ if (parentProcess.toLowerCase().includes("cursor")) {
3035
3054
  return {
3036
- name: "cursor",
3055
+ name: "Cursor",
3037
3056
  preferredOutputFormat: "rich-text",
3038
3057
  supportsDiffs: true,
3039
3058
  supportsInlineActions: false
3040
3059
  };
3041
3060
  }
3042
- if (parentProcess?.toLowerCase().includes("opencode")) {
3061
+ if (process.env.npm_execpath || process.argv[1]?.includes("npx")) {
3043
3062
  return {
3044
- name: "opencode",
3045
- preferredOutputFormat: "plain-text",
3046
- supportsDiffs: false,
3063
+ name: "MCP Client",
3064
+ preferredOutputFormat: "markdown",
3065
+ supportsDiffs: true,
3047
3066
  supportsInlineActions: false
3048
3067
  };
3049
3068
  }
3050
3069
  return {
3051
- name: "unknown",
3070
+ name: "MCP Client",
3052
3071
  preferredOutputFormat: "markdown",
3053
3072
  supportsDiffs: true,
3054
3073
  supportsInlineActions: false
@@ -3084,7 +3103,8 @@ var DEFAULT_CONFIG = {
3084
3103
  typecheck: { enabled: true },
3085
3104
  test: { enabled: true },
3086
3105
  "user-testing": { enabled: true },
3087
- "bug-finding": { enabled: true }
3106
+ "bug-finding": { enabled: true },
3107
+ "soc2": { enabled: true }
3088
3108
  },
3089
3109
  custom: []
3090
3110
  },
@@ -3101,7 +3121,8 @@ var DEFAULT_CONFIG = {
3101
3121
  includeAgentReasonings: false
3102
3122
  },
3103
3123
  compliance: {
3104
- standards: ["GDPR", "HIPAA", "SOC2"],
3124
+ standards: ["GDPR", "CCPA", "SOC2"],
3125
+ // HIPAA is opt-in for healthcare apps
3105
3126
  generateDocumentation: true,
3106
3127
  auditTrail: true
3107
3128
  }
@@ -3497,6 +3518,22 @@ var tools = [
3497
3518
  }
3498
3519
  }
3499
3520
  },
3521
+ {
3522
+ name: "soc2",
3523
+ description: "Run SOC 2 compliance agent: access controls, secrets management, encryption, logging, change management",
3524
+ inputSchema: {
3525
+ type: "object",
3526
+ properties: {
3527
+ files: { type: "array", items: { type: "string" }, description: "Files to scan" },
3528
+ directory: { type: "string", description: "Directory to scan" },
3529
+ output: {
3530
+ type: "string",
3531
+ enum: ["summary", "full"],
3532
+ description: "summary = concise (default), full = includes AI prompt/code (large output)"
3533
+ }
3534
+ }
3535
+ }
3536
+ },
3500
3537
  // Custom agent creation tools (two-step process - no API key needed!)
3501
3538
  {
3502
3539
  name: "create_agent",
@@ -3661,6 +3698,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
3661
3698
  return await agentTool.execute({ ...args, agent: "devops" });
3662
3699
  case "clean":
3663
3700
  return await agentTool.execute({ ...args, agent: "trie_clean" });
3701
+ case "soc2":
3702
+ return await agentTool.execute({ ...args, agent: "soc2" });
3664
3703
  // Custom agent creation tools (two-step process)
3665
3704
  case "create_agent":
3666
3705
  return await createAgentTool.execute(args);
@@ -3864,14 +3903,35 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
3864
3903
  const { uri } = request.params;
3865
3904
  return await readResourceContent(uri);
3866
3905
  });
3906
+ function showStartupBanner(agentCount, aiTool) {
3907
+ console.error(`
3908
+ \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
3909
+ \u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D
3910
+ \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557
3911
+ \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D
3912
+ \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
3913
+ \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D
3914
+ Customizable Agent Parallelization
3915
+
3916
+ ${agentCount} agents ready | ${aiTool}
3917
+
3918
+ Quick Start:
3919
+ \u2022 "Scan this code" - Run all relevant agents
3920
+ \u2022 "Run trie_security" - Security scan only
3921
+ \u2022 "Run trie_soc2" - SOC 2 compliance check
3922
+ \u2022 "Use trie_list_agents" - See all agents
3923
+ \u2022 "Use trie_create_agent" - Make custom agent
3924
+
3925
+ Ready.
3926
+ `);
3927
+ }
3867
3928
  async function main() {
3868
3929
  const aiTool = detectAITool();
3869
- console.error(`Detected AI Tool: ${aiTool.name}`);
3870
3930
  const config = await loadConfig();
3871
- console.error(`Loaded config for ${config.agents.builtin ? Object.keys(config.agents.builtin).length : 0} built-in agents`);
3931
+ const agentCount = config.agents.builtin ? Object.keys(config.agents.builtin).length : 0;
3932
+ showStartupBanner(agentCount, aiTool.name);
3872
3933
  const transport = new StdioServerTransport();
3873
3934
  await server.connect(transport);
3874
- console.error("Trie Agent MCP Server running...");
3875
3935
  }
3876
3936
  main().catch((error) => {
3877
3937
  console.error("Fatal error:", error);