contextwise 0.1.0 → 0.2.0

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.js CHANGED
@@ -1,6 +1,4 @@
1
1
  import {
2
- ConfigLoader,
3
- ContextWiseConfigSchema,
4
2
  ContextWiseProxy,
5
3
  KnownServerRegistry,
6
4
  LLM_PRICING,
@@ -9,12 +7,18 @@ import {
9
7
  UnifiedRegistryClient,
10
8
  UpstreamMultiplexer,
11
9
  VaultAuditor,
12
- cloudClient,
13
- logger,
14
10
  metricsCollector,
15
- secretVault,
11
+ secretVault
12
+ } from "./chunk-5ZMX5TEM.js";
13
+ import {
14
+ ConfigLoader,
15
+ ContextWiseConfigSchema,
16
16
  syncManager
17
- } from "./chunk-P7JW7EPW.js";
17
+ } from "./chunk-OYCA37PJ.js";
18
+ import {
19
+ cloudClient,
20
+ logger
21
+ } from "./chunk-WP7RH2Z2.js";
18
22
 
19
23
  // src/cli/index.ts
20
24
  import { resolve as resolve2 } from "path";
@@ -530,17 +534,7 @@ async function listCommand(options) {
530
534
  }
531
535
 
532
536
  // src/cli/commands/cloud.ts
533
- import { exec } from "child_process";
534
537
  import chalk6 from "chalk";
535
- function openBrowser(url) {
536
- const startCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
537
- exec(`${startCmd} "${url}"`, (err) => {
538
- if (err) {
539
- console.log(chalk6.gray(`Could not open browser automatically. Please visit:
540
- ${url}`));
541
- }
542
- });
543
- }
544
538
  async function loginCommand(apiKey) {
545
539
  const key = apiKey?.trim();
546
540
  if (key) {
@@ -619,64 +613,6 @@ async function whoamiCommand() {
619
613
  process.exit(1);
620
614
  }
621
615
  }
622
- async function upgradeCommand(options) {
623
- if (!cloudClient.isAuthenticated()) {
624
- console.log(chalk6.yellow("\nYou must be logged in to upgrade your subscription."));
625
- console.log(
626
- chalk6.cyan(
627
- 'Run "contextwise login" first, or visit https://contextwise.dev/#pricing in your browser.\n'
628
- )
629
- );
630
- return;
631
- }
632
- const plan = options.team ? "team" : "pro";
633
- const interval = options.annual ? "year" : "month";
634
- console.log(
635
- chalk6.cyan(
636
- `
637
- Initiating Stripe Checkout for ContextWise ${chalk6.bold(plan.toUpperCase())} (${interval}ly)...`
638
- )
639
- );
640
- try {
641
- const session = await cloudClient.createCheckoutSession(plan, interval);
642
- console.log(chalk6.green("\n\u2714 Checkout session created."));
643
- console.log(`Opening your browser to complete payment via Stripe:
644
- `);
645
- console.log(` ${chalk6.bold.underline.blue(session.checkoutUrl)}
646
- `);
647
- openBrowser(session.checkoutUrl);
648
- console.log(chalk6.gray("Once payment is confirmed, your subscription will be instantly unlocked."));
649
- console.log(chalk6.gray('Run "contextwise whoami" to confirm your subscription status.\n'));
650
- } catch (err) {
651
- console.error(
652
- chalk6.red(`
653
- \u2716 Unable to initiate checkout: ${err instanceof Error ? err.message : err}
654
- `)
655
- );
656
- }
657
- }
658
- async function billingCommand() {
659
- if (!cloudClient.isAuthenticated()) {
660
- console.log(chalk6.yellow("\nYou must be logged in to access the billing portal."));
661
- console.log(chalk6.cyan('Run "contextwise login" first.\n'));
662
- return;
663
- }
664
- console.log(chalk6.cyan("\nOpening Stripe Customer Billing Portal..."));
665
- try {
666
- const session = await cloudClient.createPortalSession();
667
- console.log(`Opening your browser to manage payment methods, invoices, and subscriptions:
668
- `);
669
- console.log(` ${chalk6.bold.underline.blue(session.portalUrl)}
670
- `);
671
- openBrowser(session.portalUrl);
672
- } catch (err) {
673
- console.error(
674
- chalk6.red(`
675
- \u2716 Unable to open billing portal: ${err instanceof Error ? err.message : err}
676
- `)
677
- );
678
- }
679
- }
680
616
  async function pushCommand(workspaceId) {
681
617
  if (!cloudClient.isAuthenticated()) {
682
618
  console.log(chalk6.yellow("\nNot logged in to ContextWise Cloud."));
@@ -695,20 +631,9 @@ async function pushCommand(workspaceId) {
695
631
  }
696
632
  } catch (err) {
697
633
  const msg = err instanceof Error ? err.message : String(err);
698
- if (msg.includes("requires an upgraded subscription") || msg.includes("Cloud Sync requires")) {
699
- console.log(
700
- chalk6.yellow("\n\u26A0 Multi-device Cloud Sync requires a ContextWise Pro or Team subscription.")
701
- );
702
- console.log(
703
- chalk6.cyan(
704
- 'Run "contextwise upgrade" to subscribe via Stripe, or visit https://contextwise.dev/#pricing\n'
705
- )
706
- );
707
- } else {
708
- console.error(chalk6.red(`
634
+ console.error(chalk6.red(`
709
635
  \u2716 Cloud push failed: ${msg}
710
636
  `));
711
- }
712
637
  }
713
638
  }
714
639
  async function pullCommand(workspaceId) {
@@ -916,6 +841,17 @@ async function startCommand(options) {
916
841
  };
917
842
  process.on("SIGINT", cleanup);
918
843
  process.on("SIGTERM", cleanup);
844
+ if (options.http) {
845
+ const port = options.port ? parseInt(options.port, 10) : 3e3;
846
+ const mcpPath = options.path || "/mcp";
847
+ await proxy.startHttp(config, { port, path: mcpPath });
848
+ console.log(`
849
+ ContextWise HTTP endpoint ready for MCPaid publishing:`);
850
+ console.log(` Upstream URL: http://127.0.0.1:${port}${mcpPath}`);
851
+ console.log(` Publish via: npx @mcpaid/sdk publish --upstream http://127.0.0.1:${port}${mcpPath}
852
+ `);
853
+ return;
854
+ }
919
855
  await proxy.start(config);
920
856
  process.stdin.resume();
921
857
  } catch (err) {
@@ -1063,7 +999,10 @@ function createCli() {
1063
999
  ).option(
1064
1000
  "--passthrough",
1065
1001
  "Run in raw passthrough mode without dynamic tool routing"
1066
- ).action(startCommand);
1002
+ ).option(
1003
+ "--http",
1004
+ "Expose a Streamable HTTP endpoint instead of stdio (for MCPaid publishing)"
1005
+ ).option("--port <port>", "HTTP listen port (with --http)", "3000").option("--path <path>", "HTTP MCP path (with --http)", "/mcp").action(startCommand);
1067
1006
  program.command("init").description("Initialize contextwise.json by scanning existing MCP configurations").option("-f, --force", "Overwrite existing configuration file").action(initCommand);
1068
1007
  program.command("browse [category]").description("Browse MCP servers across Official Registry, Smithery, and Curated Presets").option("-q, --query <query>", "Filter by search keyword").option("-s, --source <source>", "Filter by registry source (all, official, smithery, curated)", "all").option("--offline", "Only show local curated presets without querying remote registries").option("-i, --interactive", "Launch interactive keyboard-navigable terminal UI").action(
1069
1008
  (category, opts) => browseCommand({
@@ -1090,8 +1029,6 @@ function createCli() {
1090
1029
  program.command("push [workspaceId]").description("Push local workspace configuration and encrypted secrets to ContextWise Cloud").action(pushCommand);
1091
1030
  program.command("pull [workspaceId]").description("Pull latest workspace configuration and secrets from ContextWise Cloud").action(pullCommand);
1092
1031
  program.command("sync").description("Display status of ContextWise Cloud synchronization").action(syncStatusCommand);
1093
- program.command("upgrade").description("Upgrade your subscription to ContextWise Pro or Team via Stripe").option("--team", "Upgrade to Team subscription").option("--annual", "Select annual billing cycle for discounted pricing").action((opts) => upgradeCommand({ team: opts.team, annual: opts.annual }));
1094
- program.command("billing").description("Manage your Stripe subscription, invoices, and payment methods in Customer Portal").action(billingCommand);
1095
1032
  program.command("stats").description("Display metrics on token savings, cost ROI, and cache efficiency").option("--reset", "Reset all recorded lifetime metrics").option("--json", "Output stats in raw JSON format").action((opts) => statsCommand({ reset: opts.reset, json: opts.json }));
1096
1033
  return program;
1097
1034
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts","../src/cli/commands/add.ts","../src/cli/commands/browse.ts","../src/cli/ui/navigator.ts","../src/cli/commands/init.ts","../src/cli/commands/list.ts","../src/cli/commands/cloud.ts","../src/cli/commands/secret.ts","../src/cli/commands/start.ts","../src/cli/commands/stats.ts"],"sourcesContent":["import { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport { addCommand } from './commands/add.js';\nimport { browseCommand } from './commands/browse.js';\nimport { initCommand } from './commands/init.js';\nimport { listCommand } from './commands/list.js';\nimport {\n billingCommand,\n loginCommand,\n logoutCommand,\n pullCommand,\n pushCommand,\n syncStatusCommand,\n upgradeCommand,\n whoamiCommand,\n} from './commands/cloud.js';\nimport {\n secretAuditCommand,\n secretDeleteCommand,\n secretGetCommand,\n secretListCommand,\n secretSetCommand,\n} from './commands/secret.js';\nimport { startCommand } from './commands/start.js';\nimport { statsCommand } from './commands/stats.js';\n\nexport function createCli(): Command {\n const program = new Command();\n\n program\n .name('contextwise')\n .description(\n 'ContextWise: Dynamic MCP Tool Routing, Schema Compression & Execution Gateway'\n )\n .version('0.1.0');\n\n program\n .command('start')\n .description('Start the ContextWise MCP proxy gateway')\n .option('-c, --config <path>', 'Path to contextwise.json config file')\n .option(\n '-l, --log-level <level>',\n 'Logging level (debug, info, warn, error, silent)',\n 'info'\n )\n .option(\n '--passthrough',\n 'Run in raw passthrough mode without dynamic tool routing'\n )\n .action(startCommand);\n\n program\n .command('init')\n .description('Initialize contextwise.json by scanning existing MCP configurations')\n .option('-f, --force', 'Overwrite existing configuration file')\n .action(initCommand);\n\n program\n .command('browse [category]')\n .description('Browse MCP servers across Official Registry, Smithery, and Curated Presets')\n .option('-q, --query <query>', 'Filter by search keyword')\n .option('-s, --source <source>', 'Filter by registry source (all, official, smithery, curated)', 'all')\n .option('--offline', 'Only show local curated presets without querying remote registries')\n .option('-i, --interactive', 'Launch interactive keyboard-navigable terminal UI')\n .action((category, opts) =>\n browseCommand({\n category,\n query: opts.query,\n source: opts.source,\n offline: opts.offline,\n interactive: opts.interactive,\n })\n );\n\n program\n .command('add <name> [extraArg]')\n .description(\n 'Add and configure an upstream MCP server in contextwise.json (e.g. contextwise add postgres postgresql://...)'\n )\n .option('-s, --smithery [package]', 'Install and run via Smithery CLI (@smithery/cli)')\n .option('-c, --command <cmd>', 'Executable command for local stdio server')\n .option('-a, --args <args...>', 'Command-line arguments')\n .option('-e, --env <env...>', 'Environment variables in KEY=VALUE format')\n .option('-u, --url <url>', 'Remote SSE endpoint URL')\n .option('--no-test', 'Skip testing connection before saving')\n .action(addCommand);\n\n program\n .command('list')\n .description('Inspect configured upstreams and list all aggregated tools')\n .option('-c, --config <path>', 'Path to contextwise.json config file')\n .action(listCommand);\n\n const secret = program\n .command('secret')\n .description('Manage encrypted secrets, credentials, and run security audits');\n\n secret\n .command('set <key> [value]')\n .description('Store an encrypted secret in the vault (prompts securely if value omitted)')\n .option('-s, --scope <scope>', 'Secret scope (personal, workspace, team)', 'personal')\n .action((key, value, opts) => secretSetCommand(key, value, { scope: opts.scope }));\n\n secret\n .command('get <key>')\n .description('Retrieve secret metadata and preview value')\n .option('--reveal', 'Print full unmasked secret value in plaintext')\n .action((key, opts) => secretGetCommand(key, { reveal: opts.reveal }));\n\n secret\n .command('list')\n .description('List all secrets stored in the ContextWise vault')\n .action(secretListCommand);\n\n secret\n .command('delete <key>')\n .alias('rm')\n .description('Delete a secret from the vault')\n .action(secretDeleteCommand);\n\n secret\n .command('audit')\n .description('Scan configuration for exposed plaintext API keys and credentials')\n .action(secretAuditCommand);\n\n // Cloud Sync commands\n program\n .command('login [apiKey]')\n .description('Log in to ContextWise Cloud for end-to-end encrypted synchronization')\n .action(loginCommand);\n\n program\n .command('logout')\n .description('Log out of ContextWise Cloud on this device')\n .action(logoutCommand);\n\n program\n .command('whoami')\n .description('Display currently authenticated ContextWise Cloud account and workspaces')\n .action(whoamiCommand);\n\n program\n .command('push [workspaceId]')\n .description('Push local workspace configuration and encrypted secrets to ContextWise Cloud')\n .action(pushCommand);\n\n program\n .command('pull [workspaceId]')\n .description('Pull latest workspace configuration and secrets from ContextWise Cloud')\n .action(pullCommand);\n\n program\n .command('sync')\n .description('Display status of ContextWise Cloud synchronization')\n .action(syncStatusCommand);\n\n program\n .command('upgrade')\n .description('Upgrade your subscription to ContextWise Pro or Team via Stripe')\n .option('--team', 'Upgrade to Team subscription')\n .option('--annual', 'Select annual billing cycle for discounted pricing')\n .action((opts) => upgradeCommand({ team: opts.team, annual: opts.annual }));\n\n program\n .command('billing')\n .description('Manage your Stripe subscription, invoices, and payment methods in Customer Portal')\n .action(billingCommand);\n\n program\n .command('stats')\n .description('Display metrics on token savings, cost ROI, and cache efficiency')\n .option('--reset', 'Reset all recorded lifetime metrics')\n .option('--json', 'Output stats in raw JSON format')\n .action((opts) => statsCommand({ reset: opts.reset, json: opts.json }));\n\n return program;\n}\n\nexport async function runCli(): Promise<void> {\n const program = createCli();\n await program.parseAsync(process.argv);\n}\n\n// If executed directly\nif (process.argv[1]) {\n try {\n const executed = resolve(process.argv[1]);\n const current = fileURLToPath(import.meta.url);\n if (executed === current) {\n runCli();\n }\n } catch {}\n}\n","import chalk from 'chalk';\nimport type { UpstreamServerConfig } from '../../config/schema.js';\nimport { UpstreamMultiplexer } from '../../core/multiplexer.js';\nimport { KnownServerRegistry } from '../../registry/known_servers.js';\nimport { ServerManager } from '../../registry/manager.js';\nimport { SmitheryClient } from '../../registry/smithery_client.js';\n\nexport interface AddCommandOptions {\n command?: string;\n args?: string[];\n env?: string[];\n url?: string;\n config?: string;\n smithery?: boolean | string;\n test?: boolean;\n}\n\nexport async function addCommand(\n serverName: string,\n extraArg: string | undefined,\n options: AddCommandOptions\n): Promise<void> {\n const rawName = serverName.trim();\n const name = rawName.replace(/^@/, '').replace(/[^a-zA-Z0-9_-]/g, '_');\n console.log(chalk.bold.cyan(`\\n⚡ ContextWise Server Configuration: \"${name}\"\\n`));\n\n let serverConfig: UpstreamServerConfig;\n\n // Parse any passed --env KEY=VAL flags\n const envMap: Record<string, string> = {};\n if (options.env) {\n for (const item of options.env) {\n const idx = item.indexOf('=');\n if (idx > 0) {\n const k = item.slice(0, idx).trim();\n let v = item.slice(idx + 1).trim();\n if ((v.startsWith('\"') && v.endsWith('\"')) || (v.startsWith(\"'\") && v.endsWith(\"'\"))) {\n v = v.slice(1, -1);\n }\n envMap[k] = v;\n }\n }\n }\n\n // Case 1: Remote SSE endpoint\n if (options.url) {\n serverConfig = {\n url: options.url,\n headers: {},\n transport: 'auto',\n autoReconnect: true,\n };\n }\n // Case 2: Smithery package requested via --smithery or smithery: prefix\n else if (options.smithery || name.startsWith('smithery:') || name.startsWith('ai.smithery/')) {\n const pkg =\n typeof options.smithery === 'string'\n ? options.smithery\n : name.replace(/^smithery:/, '').replace(/^ai\\.smithery\\//, '');\n\n console.log(chalk.magenta(`✓ Configuring Smithery package: ${chalk.bold(pkg)}`));\n serverConfig = SmitheryClient.buildServerConfig(pkg, { env: envMap });\n }\n // Case 3: Matching known local preset\n else {\n const knownPreset = KnownServerRegistry.find(name);\n\n if (knownPreset) {\n console.log(\n chalk.green(`✓ Recognized preset for ${chalk.bold(knownPreset.displayName)}`)\n );\n\n const passedArgs = options.args ?? [];\n if (extraArg && !passedArgs.includes(extraArg)) {\n passedArgs.push(extraArg);\n }\n\n // Check if required params are missing and warn\n for (const param of knownPreset.requiredParams) {\n if (param.type === 'env' && !envMap[param.name] && !process.env[param.name]) {\n console.log(\n chalk.yellow(\n `⚠ Note: ${param.name} not set. Specify with --env ${param.name}=<value>`\n )\n );\n }\n }\n\n serverConfig = KnownServerRegistry.buildConfig(knownPreset, {\n args: passedArgs,\n env: envMap,\n });\n } else if (options.command) {\n serverConfig = {\n command: options.command,\n args: options.args ?? (extraArg ? [extraArg] : []),\n env: envMap,\n autoRestart: true,\n };\n } else {\n console.log(\n chalk.red(`Error: \"${name}\" is not a recognized preset.`)\n );\n console.log(\n `Please specify --command <cmd>, use --smithery, or check available presets with ${chalk.cyan('contextwise browse')}.\\n`\n );\n process.exit(1);\n }\n }\n\n // Optional: test connection to server before persisting\n if (options.test !== false) {\n console.log(chalk.gray(`Testing connection to \"${name}\"...`));\n const multiplexer = new UpstreamMultiplexer();\n\n try {\n await multiplexer.connectServer(name, serverConfig);\n const status = multiplexer.getStatus().find((s) => s.name === name);\n\n if (status && status.status === 'connected') {\n const tools = multiplexer.getAllTools();\n console.log(\n chalk.green(\n `✓ Connected successfully! Discovered ${tools.length} tools.`\n )\n );\n for (const t of tools.slice(0, 5)) {\n console.log(` • ${chalk.gray(t.namespacedName)}`);\n }\n if (tools.length > 5) {\n console.log(` ... and ${tools.length - 5} more`);\n }\n } else {\n console.log(\n chalk.yellow(\n `⚠ Warning: Server could not connect (${status?.error || 'unknown error'}). Saving configuration anyway.`\n )\n );\n }\n } catch (testErr) {\n console.log(\n chalk.yellow(\n `⚠ Warning: Connection test encountered error: ${testErr}. Saving configuration anyway.`\n )\n );\n } finally {\n await multiplexer.closeAll();\n }\n }\n\n // Persist to contextwise.json\n const savedPath = ServerManager.saveUpstream(name, serverConfig, options.config);\n console.log(chalk.green(`\\n✓ Server \"${name}\" successfully saved to ${savedPath}!`));\n console.log(\n chalk.gray(\n `ContextWise will now automatically index \"${name}\" on startup and make its tools available.\\n`\n )\n );\n}\n","import chalk from 'chalk';\nimport { UnifiedRegistryClient } from '../../registry/remote_registry.js';\nimport type { RegistrySource } from '../../registry/types.js';\nimport { launchNavigator } from '../ui/navigator.js';\n\nexport interface BrowseCommandOptions {\n category?: string;\n query?: string;\n source?: string;\n offline?: boolean;\n interactive?: boolean;\n}\n\nexport async function browseCommand(options: BrowseCommandOptions): Promise<void> {\n if (options.interactive) {\n await launchNavigator({\n query: options.query,\n category: options.category,\n source: options.source as RegistrySource | 'all',\n });\n return;\n }\n\n const source = (options.offline ? 'curated' : (options.source as RegistrySource | 'all')) || 'all';\n\n console.log(chalk.bold.cyan('\\n🌐 ContextWise Multi-Registry MCP Browser'));\n console.log(\n chalk.gray(\n `Searching sources: ${source === 'all' ? 'Official MCP Registry + Smithery + Curated Presets' : source}\\n`\n )\n );\n\n const servers = await UnifiedRegistryClient.search({\n query: options.query,\n category: options.category,\n source,\n limit: 20,\n });\n\n if (servers.length === 0) {\n console.log(chalk.yellow('No matching MCP servers found across registries.'));\n console.log(\n chalk.gray(\n 'Try broadening your query, or install any custom server using \"contextwise add <name> --command <cmd>\"\\n'\n )\n );\n return;\n }\n\n // Format source badge with colors\n const getSourceBadge = (src: RegistrySource) => {\n switch (src) {\n case 'curated':\n return chalk.bgGreen.black(' CURATED / VERIFIED ');\n case 'official':\n return chalk.bgCyan.black(' OFFICIAL MCP REGISTRY ');\n case 'smithery':\n return chalk.bgMagenta.black(' SMITHERY ');\n }\n };\n\n console.log(chalk.bold(`Found ${servers.length} MCP Servers:\\n`));\n\n for (const s of servers) {\n const verifiedIcon = s.verified ? chalk.green(' ✓') : '';\n console.log(\n `${getSourceBadge(s.source)} ${chalk.bold.white(s.displayName)} (${chalk.gray(s.id)})${verifiedIcon}`\n );\n console.log(` ${chalk.white(s.description)}`);\n\n if (s.requiredParams && s.requiredParams.length > 0) {\n const paramStr = s.requiredParams\n .map((p) => `${p.name} (${p.type})`)\n .join(', ');\n console.log(` ${chalk.yellow('Required parameters:')} ${chalk.gray(paramStr)}`);\n }\n\n const docsUrl =\n s.homepage ||\n (s.source === 'smithery'\n ? `https://smithery.ai/servers/${s.id}`\n : s.source === 'curated'\n ? `https://github.com/modelcontextprotocol/servers/tree/main/src/${s.id}`\n : `https://registry.modelcontextprotocol.io`);\n\n console.log(` ${chalk.cyan('Docs:')} ${chalk.underline.white(docsUrl)}`);\n\n let installCmd = `contextwise add ${s.id}`;\n if (s.source === 'smithery') {\n installCmd = `contextwise add ${s.id} --smithery`;\n }\n console.log(` ${chalk.cyan('Install:')} ${chalk.bold(installCmd)}\\n`);\n }\n\n console.log(\n chalk.gray(\n 'To install any server: ' +\n chalk.white('contextwise add <id>') +\n ' or hot-load in chat with ' +\n chalk.white('contextwise_add_server\\n')\n )\n );\n}\n","import readline from 'node:readline';\nimport chalk from 'chalk';\nimport { UnifiedRegistryClient } from '../../registry/remote_registry.js';\nimport { ServerManager } from '../../registry/manager.js';\nimport { KnownServerRegistry } from '../../registry/known_servers.js';\nimport { SmitheryClient } from '../../registry/smithery_client.js';\nimport type { RegistryServerItem, RegistrySource } from '../../registry/types.js';\n\nexport interface NavigatorOptions {\n query?: string;\n category?: string;\n source?: RegistrySource | 'all';\n}\n\nexport async function launchNavigator(options: NavigatorOptions = {}): Promise<void> {\n // Check if TTY is available\n if (!process.stdin.isTTY) {\n console.log(chalk.yellow('Interactive navigator requires an interactive TTY terminal.'));\n return;\n }\n\n let searchQuery = options.query || options.category || '';\n let selectedIndex = 0;\n let allServers: RegistryServerItem[] = [];\n let isFetching = true;\n\n // Initial fetch\n allServers = await UnifiedRegistryClient.search({\n query: searchQuery || undefined,\n category: options.category,\n source: options.source || 'all',\n limit: 40,\n });\n isFetching = false;\n\n // Setup readline for keypress\n readline.emitKeypressEvents(process.stdin);\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n // Hide cursor during navigation\n process.stdout.write('\\u001B[?25l');\n\n const cleanup = () => {\n process.stdout.write('\\u001B[?25h'); // Show cursor\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n process.stdin.pause();\n console.clear();\n };\n\n const getSourceBadge = (src: RegistrySource) => {\n switch (src) {\n case 'curated':\n return chalk.bgGreen.black(' CURATED ');\n case 'official':\n return chalk.bgCyan.black(' OFFICIAL ');\n case 'smithery':\n return chalk.bgMagenta.black(' SMITHERY ');\n }\n };\n\n const render = () => {\n // Filter servers based on searchQuery\n const q = searchQuery.toLowerCase().trim();\n const filtered = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q) ||\n (s.tags && s.tags.some((t) => t.toLowerCase().includes(q)))\n );\n\n if (selectedIndex >= filtered.length) {\n selectedIndex = Math.max(0, filtered.length - 1);\n }\n\n const termHeight = process.stdout.rows || 25;\n const termWidth = process.stdout.columns || 80;\n const pageSize = Math.max(5, Math.min(10, termHeight - 14));\n\n // Calculate window slice\n const startIdx = Math.max(\n 0,\n Math.min(\n selectedIndex - Math.floor(pageSize / 2),\n Math.max(0, filtered.length - pageSize)\n )\n );\n const visibleServers = filtered.slice(startIdx, startIdx + pageSize);\n\n // Build output buffer\n console.clear();\n\n console.log(\n chalk.bold.cyan('🌐 ContextWise Interactive MCP Navigator') +\n chalk.gray(' | ') +\n chalk.white('Search, browse, and hot-load MCP servers')\n );\n console.log(\n chalk.gray('Controls: ') +\n chalk.yellow('↑/↓') +\n chalk.gray(' Navigate ') +\n chalk.yellow('[a] / [Enter]') +\n chalk.gray(' Add Server ') +\n chalk.yellow('[Esc] / [q]') +\n chalk.gray(' Exit ') +\n chalk.yellow('Type') +\n chalk.gray(' to filter\\n')\n );\n\n console.log(\n chalk.bold('Filter: ') +\n chalk.cyan(searchQuery ? searchQuery : chalk.gray('(Type to filter...)')) +\n chalk.gray(` [${filtered.length} matching / ${allServers.length} total]`)\n );\n console.log(chalk.gray('─'.repeat(Math.min(termWidth, 76))));\n\n if (isFetching) {\n console.log(chalk.yellow('\\n Loading servers from registries...\\n'));\n } else if (filtered.length === 0) {\n console.log(chalk.yellow(`\\n No servers matching \"${searchQuery}\".`));\n console.log(chalk.gray(' Press Backspace to broaden search or Esc to exit.\\n'));\n } else {\n for (let i = 0; i < visibleServers.length; i++) {\n const item = visibleServers[i];\n const actualIndex = startIdx + i;\n const isSelected = actualIndex === selectedIndex;\n\n const cursor = isSelected ? chalk.bold.green('▸ ') : ' ';\n const badge = getSourceBadge(item.source);\n const nameStr = isSelected\n ? chalk.bold.underline.white(item.displayName)\n : chalk.white(item.displayName);\n const idStr = chalk.gray(`(${item.id})`);\n\n console.log(`${cursor}${badge} ${nameStr} ${idStr}`);\n }\n }\n\n console.log(chalk.gray('─'.repeat(Math.min(termWidth, 76))));\n\n // Selected item detail box\n const selectedItem = filtered[selectedIndex];\n if (selectedItem) {\n console.log(\n chalk.bold('Selected: ') +\n chalk.green(selectedItem.displayName) +\n chalk.gray(` [${selectedItem.sourceLabel}]`)\n );\n console.log(chalk.white(`Description: ${selectedItem.description}`));\n\n if (selectedItem.requiredParams && selectedItem.requiredParams.length > 0) {\n const params = selectedItem.requiredParams\n .map((p) => `${p.name} (${p.type}: ${p.description})`)\n .join(', ');\n console.log(chalk.yellow(`Required Params: ${params}`));\n }\n\n const docsUrl =\n selectedItem.homepage ||\n (selectedItem.source === 'smithery'\n ? `https://smithery.ai/servers/${selectedItem.id}`\n : selectedItem.source === 'curated'\n ? `https://github.com/modelcontextprotocol/servers/tree/main/src/${selectedItem.id}`\n : `https://registry.modelcontextprotocol.io`);\n\n console.log(chalk.cyan('Docs: ') + chalk.underline.white(docsUrl));\n\n console.log(\n chalk.cyan(`Quick Action: `) +\n chalk.white(`Press `) +\n chalk.bold.yellow(`[a]`) +\n chalk.white(` or `) +\n chalk.bold.yellow(`[Enter]`) +\n chalk.white(` to install `) +\n chalk.bold(selectedItem.id)\n );\n } else {\n console.log(chalk.gray('Select a server above to view configuration and details.'));\n }\n };\n\n render();\n\n // Handle interactive input\n return new Promise<void>((resolve) => {\n process.stdin.on('keypress', async (str, key) => {\n if (!key) {\n if (str && str.length === 1 && str >= ' ') {\n searchQuery += str;\n selectedIndex = 0;\n render();\n }\n return;\n }\n\n // Exit controls: Esc, Ctrl+C, or 'q' (when search query is empty)\n if (\n key.name === 'escape' ||\n (key.ctrl && key.name === 'c') ||\n (key.name === 'q' && searchQuery === '')\n ) {\n cleanup();\n console.log(chalk.gray('Exited ContextWise Navigator.\\n'));\n resolve();\n return;\n }\n\n // Arrow navigation\n if (key.name === 'up') {\n selectedIndex = Math.max(0, selectedIndex - 1);\n render();\n return;\n }\n\n if (key.name === 'down') {\n const q = searchQuery.toLowerCase().trim();\n const filteredCount = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n ).length;\n selectedIndex = Math.min(Math.max(0, filteredCount - 1), selectedIndex + 1);\n render();\n return;\n }\n\n // Backspace in search\n if (key.name === 'backspace') {\n if (searchQuery.length > 0) {\n searchQuery = searchQuery.slice(0, -1);\n selectedIndex = 0;\n render();\n }\n return;\n }\n\n // Add selected server: Enter or 'a'\n if (key.name === 'return' || key.name === 'a') {\n const q = searchQuery.toLowerCase().trim();\n const filtered = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n );\n const target = filtered[selectedIndex];\n if (target) {\n cleanup();\n console.log(chalk.bold.green(`\\n✓ Selected MCP Server: \"${target.displayName}\" (${target.id})\\n`));\n\n try {\n let config = target.suggestedConfig;\n if (!config) {\n if (target.source === 'smithery') {\n config = SmitheryClient.buildServerConfig(target.id);\n } else {\n const preset = KnownServerRegistry.find(target.id);\n if (preset) {\n config = KnownServerRegistry.buildConfig(preset);\n } else {\n config = {\n command: 'npx',\n args: ['-y', target.id],\n env: {},\n autoRestart: true,\n };\n }\n }\n }\n\n const savedPath = ServerManager.saveUpstream(target.id, config);\n console.log(\n chalk.green(\n `✓ Successfully added \"${target.id}\" into ${chalk.bold(savedPath)}!`\n )\n );\n console.log(\n chalk.cyan(\n `The server is now configured and will be loaded automatically on next session or when ContextWise starts.\\n`\n )\n );\n } catch (err) {\n console.log(chalk.red(`Failed to add server: ${err}\\n`));\n }\n\n resolve();\n return;\n }\n }\n\n // Alphanumeric search input\n if (str && str.length === 1 && !key.ctrl && !key.meta && str >= ' ') {\n searchQuery += str;\n selectedIndex = 0;\n render();\n }\n });\n });\n}\n","import { existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { ContextWiseConfig, ContextWiseConfigSchema } from '../../config/schema.js';\n\nexport interface InitCommandOptions {\n force?: boolean;\n cwd?: string;\n}\n\nexport async function initCommand(options: InitCommandOptions): Promise<void> {\n const cwd = options.cwd ?? process.cwd();\n const targetPath = resolve(cwd, 'contextwise.json');\n\n console.log(chalk.bold.cyan('\\n🚀 ContextWise Setup Wizard\\n'));\n\n if (existsSync(targetPath) && !options.force) {\n console.log(\n chalk.yellow(`Configuration file already exists at ${targetPath}.`)\n );\n console.log('Use --force to overwrite.\\n');\n return;\n }\n\n // Try auto-importing from existing clients\n const imported = ConfigLoader.autoImportClientConfigs(cwd);\n let initialConfig: ContextWiseConfig;\n\n if (imported && Object.keys(imported.upstreams).length > 0) {\n console.log(\n chalk.green(\n `✓ Found existing MCP servers from AI client configuration:`\n )\n );\n for (const name of Object.keys(imported.upstreams)) {\n console.log(` - ${chalk.bold(name)}`);\n }\n initialConfig = imported;\n } else {\n console.log(chalk.blue('ℹ No existing MCP clients detected. Generating template configuration.'));\n initialConfig = ContextWiseConfigSchema.parse({\n version: '1.0.0',\n proxy: {\n transport: 'stdio',\n port: 3456,\n logLevel: 'info',\n },\n routing: {\n strategy: 'hybrid',\n topK: 5,\n similarityThreshold: 0.45,\n pinnedTools: [],\n },\n guardrails: {\n enableCache: true,\n cacheTtlSeconds: 120,\n maxCallsPerMinute: 60,\n loopBreakerThreshold: 3,\n },\n upstreams: {},\n });\n }\n\n writeFileSync(targetPath, JSON.stringify(initialConfig, null, 2), 'utf-8');\n console.log(chalk.green(`\\n✓ Successfully created ${targetPath}`));\n console.log(\n chalk.gray(\n '\\nNext step: Connect your AI client (Cursor, Claude Desktop, Windsurf) by adding ContextWise to its MCP configuration:\\n'\n )\n );\n\n console.log(chalk.white('{\\n \"mcpServers\": {\\n \"contextwise\": {\\n \"command\": \"npx\",\\n \"args\": [\"-y\", \"contextwise\", \"start\"]\\n }\\n }\\n}\\n'));\n}\n","import chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { UpstreamMultiplexer } from '../../core/multiplexer.js';\n\nexport interface ListCommandOptions {\n config?: string;\n}\n\nexport async function listCommand(options: ListCommandOptions): Promise<void> {\n const config = ConfigLoader.load({ configPath: options.config });\n const upstreamCount = Object.keys(config.upstreams).length;\n\n console.log(chalk.bold.cyan('\\n🔍 ContextWise Catalog Overview\\n'));\n console.log(`Configured Upstreams: ${chalk.bold(upstreamCount)}`);\n\n if (upstreamCount === 0) {\n console.log(\n chalk.yellow('No upstream MCP servers defined. Run \"contextwise init\" to add servers.\\n')\n );\n return;\n }\n\n const multiplexer = new UpstreamMultiplexer();\n try {\n await multiplexer.connectAll(config.upstreams);\n const statuses = multiplexer.getStatus();\n const tools = multiplexer.getAllTools();\n\n console.log(chalk.bold('\\n--- Upstream Servers ---'));\n for (const s of statuses) {\n const statusColor = s.status === 'connected' ? chalk.green : chalk.red;\n console.log(\n `• ${chalk.bold(s.name)} [${s.transportType}] - ${statusColor(s.status.toUpperCase())} (${s.toolsCount} tools)`\n );\n if (s.error) {\n console.log(` ${chalk.red('Error:')} ${s.error}`);\n }\n }\n\n console.log(chalk.bold(`\\n--- Aggregated Tools (${tools.length} total) ---`));\n for (const tool of tools) {\n const hint = tool.readOnlyHint ? chalk.gray(' [read-only]') : '';\n console.log(`• ${chalk.green(tool.namespacedName)}${hint}`);\n if (tool.description) {\n console.log(` ${chalk.gray(tool.description.slice(0, 100))}`);\n }\n }\n console.log('');\n } finally {\n await multiplexer.closeAll();\n }\n}\n","import { exec } from 'node:child_process';\nimport { createInterface } from 'node:readline/promises';\nimport chalk from 'chalk';\nimport { cloudClient } from '../../cloud/client.js';\nimport { syncManager } from '../../cloud/sync_manager.js';\n\nfunction openBrowser(url: string): void {\n const startCmd =\n process.platform === 'darwin'\n ? 'open'\n : process.platform === 'win32'\n ? 'start'\n : 'xdg-open';\n exec(`${startCmd} \"${url}\"`, (err) => {\n if (err) {\n console.log(chalk.gray(`Could not open browser automatically. Please visit:\\n${url}`));\n }\n });\n}\n\nexport async function loginCommand(apiKey?: string): Promise<void> {\n const key = apiKey?.trim();\n\n if (key) {\n try {\n const token = await cloudClient.loginWithKey(key);\n console.log(chalk.green(`\\n✔ Logged in successfully as ${chalk.bold(token.email)}\\n`));\n console.log(chalk.gray(`User ID: ${token.userId}`));\n console.log(chalk.gray(`Session valid until: ${new Date(token.expiresAt).toLocaleDateString()}\\n`));\n return;\n } catch (err) {\n console.error(chalk.red(`\\n✖ Login failed: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n }\n\n // Interactive Browser Authorization Flow (RFC 8628)\n try {\n console.log(chalk.cyan('\\nInitiating ContextWise Cloud authorization...'));\n const flow = await cloudClient.startDeviceFlow();\n\n console.log(chalk.bold('\\nTo authorize this device, follow these steps:'));\n console.log(`1. Open this URL in your browser:`);\n console.log(` ${chalk.bold.underline.blue(flow.verification_uri)}`);\n console.log(`2. Verify the confirmation code:`);\n console.log(` ${chalk.bold.yellow(flow.user_code)}\\n`);\n console.log(chalk.gray('Waiting for browser approval... (press Ctrl+C to cancel)'));\n\n const token = await cloudClient.pollDeviceToken(flow.device_code, flow.interval);\n console.log(chalk.green(`\\n✔ Logged in successfully as ${chalk.bold(token.email)}\\n`));\n console.log(chalk.gray(`User ID: ${token.userId}`));\n console.log(chalk.gray(`Session valid until: ${new Date(token.expiresAt).toLocaleDateString()}\\n`));\n } catch (err) {\n console.error(chalk.red(`\\n✖ Login failed: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n cloudClient.clearToken();\n console.log(chalk.green('\\n✔ Logged out of ContextWise Cloud.\\n'));\n}\n\nexport async function whoamiCommand(): Promise<void> {\n try {\n const info = await cloudClient.whoami();\n console.log(chalk.bold.cyan('\\n👤 ContextWise Cloud Identity\\n'));\n console.log(`User Email: ${chalk.bold(info.email)}`);\n console.log(`User ID: ${chalk.gray(info.userId)}`);\n\n const planDisplay =\n info.plan === 'pro'\n ? chalk.bold.green('PRO')\n : info.plan === 'team'\n ? chalk.bold.blue('TEAM')\n : info.plan === 'enterprise'\n ? chalk.bold.magenta('ENTERPRISE')\n : chalk.bold.gray('COMMUNITY (Free)');\n\n const statusDisplay =\n info.subscriptionStatus === 'active'\n ? chalk.green('Active')\n : chalk.yellow(info.subscriptionStatus || 'Inactive');\n\n console.log(`Plan: ${planDisplay} (${statusDisplay})`);\n if (info.currentPeriodEnd) {\n console.log(\n `Next Renewal: ${chalk.gray(\n new Date(info.currentPeriodEnd).toISOString().replace('T', ' ').slice(0, 10)\n )}`\n );\n }\n console.log('');\n\n if (info.workspaces && info.workspaces.length > 0) {\n console.log(chalk.bold('Workspaces:'));\n for (const w of info.workspaces) {\n console.log(`• ${chalk.green(w.name)} (${w.id}) - Role: ${w.role}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\\n✖ Failed to retrieve identity: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n}\n\nexport async function upgradeCommand(options: {\n team?: boolean;\n annual?: boolean;\n}): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nYou must be logged in to upgrade your subscription.'));\n console.log(\n chalk.cyan(\n 'Run \"contextwise login\" first, or visit https://contextwise.dev/#pricing in your browser.\\n'\n )\n );\n return;\n }\n\n const plan = options.team ? 'team' : 'pro';\n const interval = options.annual ? 'year' : 'month';\n\n console.log(\n chalk.cyan(\n `\\nInitiating Stripe Checkout for ContextWise ${chalk.bold(plan.toUpperCase())} (${interval}ly)...`\n )\n );\n\n try {\n const session = await cloudClient.createCheckoutSession(plan, interval);\n console.log(chalk.green('\\n✔ Checkout session created.'));\n console.log(`Opening your browser to complete payment via Stripe:\\n`);\n console.log(` ${chalk.bold.underline.blue(session.checkoutUrl)}\\n`);\n openBrowser(session.checkoutUrl);\n console.log(chalk.gray('Once payment is confirmed, your subscription will be instantly unlocked.'));\n console.log(chalk.gray('Run \"contextwise whoami\" to confirm your subscription status.\\n'));\n } catch (err) {\n console.error(\n chalk.red(`\\n✖ Unable to initiate checkout: ${err instanceof Error ? err.message : err}\\n`)\n );\n }\n}\n\nexport async function billingCommand(): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nYou must be logged in to access the billing portal.'));\n console.log(chalk.cyan('Run \"contextwise login\" first.\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\nOpening Stripe Customer Billing Portal...'));\n\n try {\n const session = await cloudClient.createPortalSession();\n console.log(`Opening your browser to manage payment methods, invoices, and subscriptions:\\n`);\n console.log(` ${chalk.bold.underline.blue(session.portalUrl)}\\n`);\n openBrowser(session.portalUrl);\n } catch (err) {\n console.error(\n chalk.red(`\\n✖ Unable to open billing portal: ${err instanceof Error ? err.message : err}\\n`)\n );\n }\n}\n\nexport async function pushCommand(workspaceId?: string): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nNot logged in to ContextWise Cloud.'));\n console.log(chalk.cyan('Run \"contextwise login\" first.\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\n☁ Pushing local workspace to ContextWise Cloud...'));\n try {\n const res = await syncManager.push(workspaceId);\n if (res.status === 'committed') {\n console.log(chalk.green(`✔ Successfully pushed revision #${chalk.bold(res.revision)} to Cloud.\\n`));\n } else {\n console.log(chalk.yellow(`⚠ Push conflict: Server has revision #${res.serverRevision}. Pull changes first.\\n`));\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (\n msg.includes('requires an upgraded subscription') ||\n msg.includes('Cloud Sync requires')\n ) {\n console.log(\n chalk.yellow('\\n⚠ Multi-device Cloud Sync requires a ContextWise Pro or Team subscription.')\n );\n console.log(\n chalk.cyan(\n 'Run \"contextwise upgrade\" to subscribe via Stripe, or visit https://contextwise.dev/#pricing\\n'\n )\n );\n } else {\n console.error(chalk.red(`\\n✖ Cloud push failed: ${msg}\\n`));\n }\n }\n}\n\nexport async function pullCommand(workspaceId?: string): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nNot logged in to ContextWise Cloud.'));\n console.log(chalk.cyan('Run \"contextwise login\" first.\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\n☁ Pulling latest workspace snapshot from ContextWise Cloud...'));\n try {\n const res = await syncManager.pull(workspaceId);\n if (res) {\n console.log(chalk.green(`✔ Applied cloud revision #${chalk.bold(res.revision)} to local workspace.\\n`));\n } else {\n console.log(chalk.gray('✔ Local workspace is already up to date.\\n'));\n }\n } catch (err) {\n console.error(chalk.red(`\\n✖ Cloud pull failed: ${err instanceof Error ? err.message : err}\\n`));\n }\n}\n\nexport async function syncStatusCommand(): Promise<void> {\n const status = syncManager.getStatus();\n\n console.log(chalk.bold.cyan('\\n🔄 ContextWise Cloud Sync Status\\n'));\n console.log(`Logged In: ${status.isLoggedIn ? chalk.green('YES') : chalk.gray('NO')}`);\n if (status.userEmail) {\n console.log(`Account: ${chalk.bold(status.userEmail)}`);\n }\n console.log(`Device ID: ${chalk.gray(status.deviceId)}`);\n console.log(`Workspace ID: ${status.workspaceId}`);\n console.log(`Local Revision: ${chalk.bold(status.revision)}`);\n console.log(\n `Last Synced: ${\n status.lastSyncedAt > 0\n ? new Date(status.lastSyncedAt).toISOString().replace('T', ' ').slice(0, 19)\n : chalk.gray('Never')\n }\\n`\n );\n}\n","import { createInterface } from 'node:readline/promises';\nimport chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { VaultAuditor } from '../../vault/audit.js';\nimport { secretVault } from '../../vault/vault.js';\n\nexport interface SecretSetOptions {\n scope?: 'personal' | 'workspace' | 'team';\n}\n\nexport interface SecretGetOptions {\n reveal?: boolean;\n}\n\nexport async function secretSetCommand(\n key: string,\n value?: string,\n options: SecretSetOptions = {}\n): Promise<void> {\n if (!key || typeof key !== 'string') {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n let secretValue = value;\n\n if (!secretValue) {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n secretValue = await rl.question(chalk.cyan(`Enter secret value for \"${key}\": `));\n } finally {\n rl.close();\n }\n }\n\n secretValue = secretValue?.trim();\n if (!secretValue) {\n console.error(chalk.red('Error: Secret value cannot be empty.'));\n process.exit(1);\n }\n\n const scope = options.scope || 'personal';\n await secretVault.set(key, secretValue, scope);\n\n console.log(\n chalk.green(\n `\\n✔ Secret \"${chalk.bold(key)}\" stored successfully in vault [${secretVault.getActiveDriverName()}] (scope: ${scope})\\n`\n )\n );\n console.log(\n chalk.gray(\n `Tip: Reference this secret in contextwise.json with: \"vault://${key}\"\\n`\n )\n );\n}\n\nexport async function secretGetCommand(\n key: string,\n options: SecretGetOptions = {}\n): Promise<void> {\n if (!key) {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n const value = await secretVault.get(key);\n if (value === null || value === undefined) {\n console.log(chalk.red(`\\n✖ Secret \"${key}\" not found in ContextWise vault.\\n`));\n process.exit(1);\n }\n\n if (options.reveal) {\n console.log(`\\n${chalk.bold(key)}: ${chalk.yellow(value)}\\n`);\n } else {\n const masked =\n value.length > 8\n ? `${value.slice(0, 4)}••••••••${value.slice(-4)}`\n : '••••••••';\n console.log(\n `\\n${chalk.bold(key)}: ${chalk.yellow(masked)} ${chalk.gray(\n `(${value.length} chars, pass --reveal to view plaintext)`\n )}\\n`\n );\n }\n}\n\nexport async function secretListCommand(): Promise<void> {\n const secrets = await secretVault.list();\n\n console.log(chalk.bold.cyan('\\n🔐 ContextWise Secret Vault\\n'));\n console.log(`Active Storage Driver: ${chalk.bold(secretVault.getActiveDriverName())}`);\n console.log(`Total Stored Secrets: ${chalk.bold(secrets.length)}\\n`);\n\n if (secrets.length === 0) {\n console.log(chalk.yellow('No secrets currently stored in vault.'));\n console.log(\n chalk.gray('Store a secret with: contextwise secret set <key> <value>\\n')\n );\n return;\n }\n\n console.log(\n chalk.bold(\n `${'KEY'.padEnd(30)} ${'SCOPE'.padEnd(14)} ${'BACKEND'.padEnd(18)} ${'UPDATED'}`\n )\n );\n console.log(chalk.gray('─'.repeat(75)));\n\n for (const s of secrets) {\n const dateStr = new Date(s.updatedAt).toISOString().replace('T', ' ').slice(0, 19);\n console.log(\n `${chalk.cyan(s.key.padEnd(30))} ${s.scope.padEnd(14)} ${s.backend.padEnd(18)} ${chalk.gray(dateStr)}`\n );\n }\n console.log('');\n}\n\nexport async function secretDeleteCommand(key: string): Promise<void> {\n if (!key) {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n const deleted = await secretVault.delete(key);\n if (deleted) {\n console.log(chalk.green(`\\n✔ Secret \"${chalk.bold(key)}\" was successfully deleted from vault.\\n`));\n } else {\n console.log(chalk.yellow(`\\n✖ Secret \"${key}\" was not found in vault.\\n`));\n }\n}\n\nexport async function secretAuditCommand(): Promise<void> {\n const config = ConfigLoader.load();\n const report = await VaultAuditor.audit(config);\n\n console.log(chalk.bold.cyan('\\n🛡️ ContextWise Secret Security Audit\\n'));\n console.log(`Upstream Servers Inspected: ${chalk.bold(report.totalUpstreams)}`);\n console.log(`Vault References in Config: ${chalk.bold(report.vaultReferencedCount)}`);\n console.log(`Active Vault Driver: ${chalk.bold(report.activeDriver)}`);\n console.log(`Redacted Secrets in Memory: ${chalk.bold(report.registeredSecretCount)}\\n`);\n\n if (report.plaintextWarnings.length === 0) {\n console.log(\n chalk.green(\n '✔ Vault Audit Passed: No exposed plaintext credentials detected in configuration.\\n'\n )\n );\n return;\n }\n\n console.log(\n chalk.red(\n `⚠ Found ${report.plaintextWarnings.length} potential credential risk(s) in configuration:\\n`\n )\n );\n\n for (const warning of report.plaintextWarnings) {\n const badge =\n warning.severity === 'critical'\n ? chalk.bgRed.bold(' CRITICAL ')\n : chalk.bgYellow.black.bold(' WARNING ');\n\n console.log(`${badge} [${warning.serverName}] ${chalk.bold(warning.envVar)}`);\n console.log(` ${chalk.gray('Issue:')} ${warning.reason}`);\n console.log(` ${chalk.cyan('Action:')} ${warning.suggestion}\\n`);\n }\n}\n","import { ConfigLoader } from '../../config/loader.js';\nimport { ContextWiseProxy } from '../../core/proxy.js';\nimport { logger } from '../../utils/logger.js';\n\nexport interface StartCommandOptions {\n config?: string;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';\n passthrough?: boolean;\n}\n\nexport async function startCommand(options: StartCommandOptions): Promise<void> {\n try {\n const config = ConfigLoader.load({\n configPath: options.config,\n });\n\n if (options.logLevel) {\n config.proxy.logLevel = options.logLevel;\n }\n\n if (options.passthrough) {\n config.routing.strategy = 'passthrough';\n }\n\n const proxy = new ContextWiseProxy();\n let isShuttingDown = false;\n\n const cleanup = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n // Unref'd fallback timer to guarantee exit if upstream stop hangs\n setTimeout(() => process.exit(0), 3000).unref();\n\n try {\n await proxy.stop();\n } catch (err) {\n logger.error(`Error stopping ContextWise proxy: ${err}`);\n } finally {\n process.exit(0);\n }\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n\n await proxy.start(config);\n\n // Keep process alive for stdio transport\n process.stdin.resume();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.error(`ContextWise proxy failed to start: ${msg}`);\n process.exit(1);\n }\n}\n","import chalk from 'chalk';\nimport { metricsCollector, LLM_PRICING } from '../../metrics/collector.js';\n\nexport interface StatsCommandOptions {\n reset?: boolean;\n json?: boolean;\n}\n\nfunction col(text: string, width: number, colorFn?: (s: string) => string): string {\n const truncated = text.length > width ? text.slice(0, width) : text;\n const padded = truncated.padEnd(width);\n return colorFn ? colorFn(padded) : padded;\n}\n\nfunction makeSeparator(cLeft: string, cMid: string, cRight: string, widths: number[]): string {\n const parts = widths.map((w) => '─'.repeat(w + 2));\n return ` ${cLeft}${parts.join(cMid)}${cRight}`;\n}\n\nfunction makeHeader(title: string, widths: number[]): string {\n const totalWidth = widths.reduce((acc, w) => acc + w + 2, 0) + widths.length - 1;\n const banner = ` ┌── ${title} `;\n const remaining = Math.max(0, totalWidth + 3 - banner.length);\n return `${banner}${'─'.repeat(remaining)}┐`;\n}\n\nexport async function statsCommand(options: StatsCommandOptions = {}): Promise<void> {\n if (options.reset) {\n metricsCollector.reset();\n console.log(\n chalk.green.bold('\\n✔ All ContextWise lifetime metrics and token analytics have been reset to zero.\\n')\n );\n return;\n }\n\n // Reload fresh persistent values from disk\n metricsCollector.reload();\n const summary = metricsCollector.getSummary();\n\n if (options.json) {\n console.log(JSON.stringify(summary, null, 2));\n return;\n }\n\n const doubleDivider = chalk.bold.cyan('═'.repeat(74));\n\n console.log(`\\n${doubleDivider}`);\n console.log(\n chalk.bold.cyan(' 💰 ContextWise Performance, Token & Cost Analytics')\n );\n console.log(`${doubleDivider}\\n`);\n\n // Prominent Dollar Savings Banner\n const baselineSavings = summary.dollarSavings.claudeSonnet.toFixed(2);\n const totalTokens = summary.estimatedTotalTokensSaved.toLocaleString();\n\n if (summary.estimatedTotalTokensSaved > 0) {\n console.log(\n chalk.bgGreen.black.bold(` SAVINGS `) +\n chalk.green.bold(\n ` ContextWise has saved you ~$${baselineSavings} in LLM API costs!`\n )\n );\n console.log(\n chalk.dim(` ${totalTokens} total tokens avoided across all sessions\\n`)\n );\n } else {\n console.log(\n chalk.bgBlue.black.bold(` STANDBY `) +\n chalk.cyan.bold(\n ` Ready to route! Connect Claude Code, Cursor, or Antigravity to track savings.`\n )\n );\n console.log(\n chalk.dim(` 0 tokens saved so far (start a session to begin tracking)\\n`)\n );\n }\n\n // Section 1: Estimated Dollar Savings by Model\n const modelCols = [30, 18, 16];\n console.log(chalk.bold.yellow(makeHeader('💡 ESTIMATED SAVINGS BY MODEL', modelCols)));\n console.log(\n ` │ ${col('Model Family', 30, chalk.bold)} │ ${col('Benchmark Rate', 18, chalk.bold)} │ ${col('Dollar Saved', 16, chalk.bold)} │`\n );\n console.log(makeSeparator('├', '┼', '┤', modelCols));\n console.log(\n ` │ ${col('Claude 3.5 / 3.7 Sonnet (def)', 30, chalk.cyan)} │ ${col(`$${LLM_PRICING.CLAUDE_SONNET.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.claudeSonnet.toFixed(2)}`, 16, chalk.green.bold)} │`\n );\n console.log(\n ` │ ${col('OpenAI GPT-4o', 30)} │ ${col(`$${LLM_PRICING.GPT_4O.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.gpt4o.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(\n ` │ ${col('Claude 3 Opus', 30)} │ ${col(`$${LLM_PRICING.CLAUDE_OPUS.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.claudeOpus.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(\n ` │ ${col('Haiku / GPT-4o mini', 30)} │ ${col(`$${LLM_PRICING.HAIKU_OR_MINI.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.haikuOrMini.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(makeSeparator('└', '┴', '┘', modelCols) + '\\n');\n\n // Section 2: Token Reduction Breakdown\n const tokenCols = [24, 18, 24];\n console.log(chalk.bold.yellow(makeHeader('📊 TOKEN REDUCTION BREAKDOWN', tokenCols)));\n console.log(\n ` │ ${col('Source', 24, chalk.bold)} │ ${col('Tokens Saved', 18, chalk.bold)} │ ${col('Details', 24, chalk.bold)} │`\n );\n console.log(makeSeparator('├', '┼', '┤', tokenCols));\n console.log(\n ` │ ${col('Schema Pruning', 24)} │ ${col(summary.schemaPruningTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${Math.max(0, summary.totalCatalogToolsCount - summary.exposedToolsCount)} tools hidden/turn`, 24, chalk.dim)} │`\n );\n console.log(\n ` │ ${col('Response Cache', 24)} │ ${col(summary.cacheTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${summary.cachedCalls} read calls cached`, 24, chalk.dim)} │`\n );\n console.log(\n ` │ ${col('Loop Prevention', 24)} │ ${col(summary.loopPreventionTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${summary.loopsPrevented} runaway loops stopped`, 24, chalk.dim)} │`\n );\n console.log(makeSeparator('└', '┴', '┘', tokenCols) + '\\n');\n\n // Section 3: Performance & Reliability\n const trackingSince = summary.firstRecordedAt > 0\n ? new Date(summary.firstRecordedAt).toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n : 'Session start';\n\n const perfCols = [26, 43];\n console.log(chalk.bold.yellow(makeHeader('⚡ PROXY PERFORMANCE & RELIABILITY', perfCols)));\n console.log(` │ ${col('Total Proxied Calls:', 26)} │ ${col(String(summary.totalCalls), 43, chalk.bold)} │`);\n console.log(\n ` │ ${col('Cache Hit Efficiency:', 26)} │ ${col(`${summary.cacheHitRatePct}% (${summary.cachedCalls} cached / ${summary.totalCalls} calls)`, 43, chalk.bold)} │`\n );\n console.log(` │ ${col('Avg Execution Latency:', 26)} │ ${col(`${summary.averageLatencyMs} ms`, 43, chalk.bold)} │`);\n console.log(\n ` │ ${col('Tripped Loops / Errors:', 26)} │ ${col(\n summary.loopsPrevented > 0 || summary.errorCalls > 0\n ? `${summary.loopsPrevented} loops / ${summary.errorCalls} errors`\n : '0 loops / 0 errors',\n 43,\n summary.loopsPrevented > 0 || summary.errorCalls > 0 ? chalk.red : chalk.green\n )} │`\n );\n console.log(` │ ${col('Metrics Tracking Since:', 26)} │ ${col(trackingSince, 43, chalk.dim)} │`);\n console.log(makeSeparator('└', '┴', '┘', perfCols) + '\\n');\n\n console.log(\n chalk.dim(\n ' Tip: Run \"contextwise stats --reset\" to clear counters or \"--json\" for raw exports.\\n'\n )\n );\n}\n"],"mappings":"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","names":["resolve","chalk","chalk","chalk","resolve","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","resolve"]}
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/commands/add.ts","../src/cli/commands/browse.ts","../src/cli/ui/navigator.ts","../src/cli/commands/init.ts","../src/cli/commands/list.ts","../src/cli/commands/cloud.ts","../src/cli/commands/secret.ts","../src/cli/commands/start.ts","../src/cli/commands/stats.ts"],"sourcesContent":["import { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport { addCommand } from './commands/add.js';\nimport { browseCommand } from './commands/browse.js';\nimport { initCommand } from './commands/init.js';\nimport { listCommand } from './commands/list.js';\nimport {\n loginCommand,\n logoutCommand,\n pullCommand,\n pushCommand,\n syncStatusCommand,\n whoamiCommand,\n} from './commands/cloud.js';\nimport {\n secretAuditCommand,\n secretDeleteCommand,\n secretGetCommand,\n secretListCommand,\n secretSetCommand,\n} from './commands/secret.js';\nimport { startCommand } from './commands/start.js';\nimport { statsCommand } from './commands/stats.js';\n\nexport function createCli(): Command {\n const program = new Command();\n\n program\n .name('contextwise')\n .description(\n 'ContextWise: Dynamic MCP Tool Routing, Schema Compression & Execution Gateway'\n )\n .version('0.1.0');\n\n program\n .command('start')\n .description('Start the ContextWise MCP proxy gateway')\n .option('-c, --config <path>', 'Path to contextwise.json config file')\n .option(\n '-l, --log-level <level>',\n 'Logging level (debug, info, warn, error, silent)',\n 'info'\n )\n .option(\n '--passthrough',\n 'Run in raw passthrough mode without dynamic tool routing'\n )\n .option(\n '--http',\n 'Expose a Streamable HTTP endpoint instead of stdio (for MCPaid publishing)'\n )\n .option('--port <port>', 'HTTP listen port (with --http)', '3000')\n .option('--path <path>', 'HTTP MCP path (with --http)', '/mcp')\n .action(startCommand);\n\n program\n .command('init')\n .description('Initialize contextwise.json by scanning existing MCP configurations')\n .option('-f, --force', 'Overwrite existing configuration file')\n .action(initCommand);\n\n program\n .command('browse [category]')\n .description('Browse MCP servers across Official Registry, Smithery, and Curated Presets')\n .option('-q, --query <query>', 'Filter by search keyword')\n .option('-s, --source <source>', 'Filter by registry source (all, official, smithery, curated)', 'all')\n .option('--offline', 'Only show local curated presets without querying remote registries')\n .option('-i, --interactive', 'Launch interactive keyboard-navigable terminal UI')\n .action((category, opts) =>\n browseCommand({\n category,\n query: opts.query,\n source: opts.source,\n offline: opts.offline,\n interactive: opts.interactive,\n })\n );\n\n program\n .command('add <name> [extraArg]')\n .description(\n 'Add and configure an upstream MCP server in contextwise.json (e.g. contextwise add postgres postgresql://...)'\n )\n .option('-s, --smithery [package]', 'Install and run via Smithery CLI (@smithery/cli)')\n .option('-c, --command <cmd>', 'Executable command for local stdio server')\n .option('-a, --args <args...>', 'Command-line arguments')\n .option('-e, --env <env...>', 'Environment variables in KEY=VALUE format')\n .option('-u, --url <url>', 'Remote SSE endpoint URL')\n .option('--no-test', 'Skip testing connection before saving')\n .action(addCommand);\n\n program\n .command('list')\n .description('Inspect configured upstreams and list all aggregated tools')\n .option('-c, --config <path>', 'Path to contextwise.json config file')\n .action(listCommand);\n\n const secret = program\n .command('secret')\n .description('Manage encrypted secrets, credentials, and run security audits');\n\n secret\n .command('set <key> [value]')\n .description('Store an encrypted secret in the vault (prompts securely if value omitted)')\n .option('-s, --scope <scope>', 'Secret scope (personal, workspace, team)', 'personal')\n .action((key, value, opts) => secretSetCommand(key, value, { scope: opts.scope }));\n\n secret\n .command('get <key>')\n .description('Retrieve secret metadata and preview value')\n .option('--reveal', 'Print full unmasked secret value in plaintext')\n .action((key, opts) => secretGetCommand(key, { reveal: opts.reveal }));\n\n secret\n .command('list')\n .description('List all secrets stored in the ContextWise vault')\n .action(secretListCommand);\n\n secret\n .command('delete <key>')\n .alias('rm')\n .description('Delete a secret from the vault')\n .action(secretDeleteCommand);\n\n secret\n .command('audit')\n .description('Scan configuration for exposed plaintext API keys and credentials')\n .action(secretAuditCommand);\n\n // Cloud Sync commands\n program\n .command('login [apiKey]')\n .description('Log in to ContextWise Cloud for end-to-end encrypted synchronization')\n .action(loginCommand);\n\n program\n .command('logout')\n .description('Log out of ContextWise Cloud on this device')\n .action(logoutCommand);\n\n program\n .command('whoami')\n .description('Display currently authenticated ContextWise Cloud account and workspaces')\n .action(whoamiCommand);\n\n program\n .command('push [workspaceId]')\n .description('Push local workspace configuration and encrypted secrets to ContextWise Cloud')\n .action(pushCommand);\n\n program\n .command('pull [workspaceId]')\n .description('Pull latest workspace configuration and secrets from ContextWise Cloud')\n .action(pullCommand);\n\n program\n .command('sync')\n .description('Display status of ContextWise Cloud synchronization')\n .action(syncStatusCommand);\n\n program\n .command('stats')\n .description('Display metrics on token savings, cost ROI, and cache efficiency')\n .option('--reset', 'Reset all recorded lifetime metrics')\n .option('--json', 'Output stats in raw JSON format')\n .action((opts) => statsCommand({ reset: opts.reset, json: opts.json }));\n\n return program;\n}\n\nexport async function runCli(): Promise<void> {\n const program = createCli();\n await program.parseAsync(process.argv);\n}\n\n// If executed directly\nif (process.argv[1]) {\n try {\n const executed = resolve(process.argv[1]);\n const current = fileURLToPath(import.meta.url);\n if (executed === current) {\n runCli();\n }\n } catch {}\n}\n","import chalk from 'chalk';\nimport type { UpstreamServerConfig } from '../../config/schema.js';\nimport { UpstreamMultiplexer } from '../../core/multiplexer.js';\nimport { KnownServerRegistry } from '../../registry/known_servers.js';\nimport { ServerManager } from '../../registry/manager.js';\nimport { SmitheryClient } from '../../registry/smithery_client.js';\n\nexport interface AddCommandOptions {\n command?: string;\n args?: string[];\n env?: string[];\n url?: string;\n config?: string;\n smithery?: boolean | string;\n test?: boolean;\n}\n\nexport async function addCommand(\n serverName: string,\n extraArg: string | undefined,\n options: AddCommandOptions\n): Promise<void> {\n const rawName = serverName.trim();\n const name = rawName.replace(/^@/, '').replace(/[^a-zA-Z0-9_-]/g, '_');\n console.log(chalk.bold.cyan(`\\n⚡ ContextWise Server Configuration: \"${name}\"\\n`));\n\n let serverConfig: UpstreamServerConfig;\n\n // Parse any passed --env KEY=VAL flags\n const envMap: Record<string, string> = {};\n if (options.env) {\n for (const item of options.env) {\n const idx = item.indexOf('=');\n if (idx > 0) {\n const k = item.slice(0, idx).trim();\n let v = item.slice(idx + 1).trim();\n if ((v.startsWith('\"') && v.endsWith('\"')) || (v.startsWith(\"'\") && v.endsWith(\"'\"))) {\n v = v.slice(1, -1);\n }\n envMap[k] = v;\n }\n }\n }\n\n // Case 1: Remote SSE endpoint\n if (options.url) {\n serverConfig = {\n url: options.url,\n headers: {},\n transport: 'auto',\n autoReconnect: true,\n };\n }\n // Case 2: Smithery package requested via --smithery or smithery: prefix\n else if (options.smithery || name.startsWith('smithery:') || name.startsWith('ai.smithery/')) {\n const pkg =\n typeof options.smithery === 'string'\n ? options.smithery\n : name.replace(/^smithery:/, '').replace(/^ai\\.smithery\\//, '');\n\n console.log(chalk.magenta(`✓ Configuring Smithery package: ${chalk.bold(pkg)}`));\n serverConfig = SmitheryClient.buildServerConfig(pkg, { env: envMap });\n }\n // Case 3: Matching known local preset\n else {\n const knownPreset = KnownServerRegistry.find(name);\n\n if (knownPreset) {\n console.log(\n chalk.green(`✓ Recognized preset for ${chalk.bold(knownPreset.displayName)}`)\n );\n\n const passedArgs = options.args ?? [];\n if (extraArg && !passedArgs.includes(extraArg)) {\n passedArgs.push(extraArg);\n }\n\n // Check if required params are missing and warn\n for (const param of knownPreset.requiredParams) {\n if (param.type === 'env' && !envMap[param.name] && !process.env[param.name]) {\n console.log(\n chalk.yellow(\n `⚠ Note: ${param.name} not set. Specify with --env ${param.name}=<value>`\n )\n );\n }\n }\n\n serverConfig = KnownServerRegistry.buildConfig(knownPreset, {\n args: passedArgs,\n env: envMap,\n });\n } else if (options.command) {\n serverConfig = {\n command: options.command,\n args: options.args ?? (extraArg ? [extraArg] : []),\n env: envMap,\n autoRestart: true,\n };\n } else {\n console.log(\n chalk.red(`Error: \"${name}\" is not a recognized preset.`)\n );\n console.log(\n `Please specify --command <cmd>, use --smithery, or check available presets with ${chalk.cyan('contextwise browse')}.\\n`\n );\n process.exit(1);\n }\n }\n\n // Optional: test connection to server before persisting\n if (options.test !== false) {\n console.log(chalk.gray(`Testing connection to \"${name}\"...`));\n const multiplexer = new UpstreamMultiplexer();\n\n try {\n await multiplexer.connectServer(name, serverConfig);\n const status = multiplexer.getStatus().find((s) => s.name === name);\n\n if (status && status.status === 'connected') {\n const tools = multiplexer.getAllTools();\n console.log(\n chalk.green(\n `✓ Connected successfully! Discovered ${tools.length} tools.`\n )\n );\n for (const t of tools.slice(0, 5)) {\n console.log(` • ${chalk.gray(t.namespacedName)}`);\n }\n if (tools.length > 5) {\n console.log(` ... and ${tools.length - 5} more`);\n }\n } else {\n console.log(\n chalk.yellow(\n `⚠ Warning: Server could not connect (${status?.error || 'unknown error'}). Saving configuration anyway.`\n )\n );\n }\n } catch (testErr) {\n console.log(\n chalk.yellow(\n `⚠ Warning: Connection test encountered error: ${testErr}. Saving configuration anyway.`\n )\n );\n } finally {\n await multiplexer.closeAll();\n }\n }\n\n // Persist to contextwise.json\n const savedPath = ServerManager.saveUpstream(name, serverConfig, options.config);\n console.log(chalk.green(`\\n✓ Server \"${name}\" successfully saved to ${savedPath}!`));\n console.log(\n chalk.gray(\n `ContextWise will now automatically index \"${name}\" on startup and make its tools available.\\n`\n )\n );\n}\n","import chalk from 'chalk';\nimport { UnifiedRegistryClient } from '../../registry/remote_registry.js';\nimport type { RegistrySource } from '../../registry/types.js';\nimport { launchNavigator } from '../ui/navigator.js';\n\nexport interface BrowseCommandOptions {\n category?: string;\n query?: string;\n source?: string;\n offline?: boolean;\n interactive?: boolean;\n}\n\nexport async function browseCommand(options: BrowseCommandOptions): Promise<void> {\n if (options.interactive) {\n await launchNavigator({\n query: options.query,\n category: options.category,\n source: options.source as RegistrySource | 'all',\n });\n return;\n }\n\n const source = (options.offline ? 'curated' : (options.source as RegistrySource | 'all')) || 'all';\n\n console.log(chalk.bold.cyan('\\n🌐 ContextWise Multi-Registry MCP Browser'));\n console.log(\n chalk.gray(\n `Searching sources: ${source === 'all' ? 'Official MCP Registry + Smithery + Curated Presets' : source}\\n`\n )\n );\n\n const servers = await UnifiedRegistryClient.search({\n query: options.query,\n category: options.category,\n source,\n limit: 20,\n });\n\n if (servers.length === 0) {\n console.log(chalk.yellow('No matching MCP servers found across registries.'));\n console.log(\n chalk.gray(\n 'Try broadening your query, or install any custom server using \"contextwise add <name> --command <cmd>\"\\n'\n )\n );\n return;\n }\n\n // Format source badge with colors\n const getSourceBadge = (src: RegistrySource) => {\n switch (src) {\n case 'curated':\n return chalk.bgGreen.black(' CURATED / VERIFIED ');\n case 'official':\n return chalk.bgCyan.black(' OFFICIAL MCP REGISTRY ');\n case 'smithery':\n return chalk.bgMagenta.black(' SMITHERY ');\n }\n };\n\n console.log(chalk.bold(`Found ${servers.length} MCP Servers:\\n`));\n\n for (const s of servers) {\n const verifiedIcon = s.verified ? chalk.green(' ✓') : '';\n console.log(\n `${getSourceBadge(s.source)} ${chalk.bold.white(s.displayName)} (${chalk.gray(s.id)})${verifiedIcon}`\n );\n console.log(` ${chalk.white(s.description)}`);\n\n if (s.requiredParams && s.requiredParams.length > 0) {\n const paramStr = s.requiredParams\n .map((p) => `${p.name} (${p.type})`)\n .join(', ');\n console.log(` ${chalk.yellow('Required parameters:')} ${chalk.gray(paramStr)}`);\n }\n\n const docsUrl =\n s.homepage ||\n (s.source === 'smithery'\n ? `https://smithery.ai/servers/${s.id}`\n : s.source === 'curated'\n ? `https://github.com/modelcontextprotocol/servers/tree/main/src/${s.id}`\n : `https://registry.modelcontextprotocol.io`);\n\n console.log(` ${chalk.cyan('Docs:')} ${chalk.underline.white(docsUrl)}`);\n\n let installCmd = `contextwise add ${s.id}`;\n if (s.source === 'smithery') {\n installCmd = `contextwise add ${s.id} --smithery`;\n }\n console.log(` ${chalk.cyan('Install:')} ${chalk.bold(installCmd)}\\n`);\n }\n\n console.log(\n chalk.gray(\n 'To install any server: ' +\n chalk.white('contextwise add <id>') +\n ' or hot-load in chat with ' +\n chalk.white('contextwise_add_server\\n')\n )\n );\n}\n","import readline from 'node:readline';\nimport chalk from 'chalk';\nimport { UnifiedRegistryClient } from '../../registry/remote_registry.js';\nimport { ServerManager } from '../../registry/manager.js';\nimport { KnownServerRegistry } from '../../registry/known_servers.js';\nimport { SmitheryClient } from '../../registry/smithery_client.js';\nimport type { RegistryServerItem, RegistrySource } from '../../registry/types.js';\n\nexport interface NavigatorOptions {\n query?: string;\n category?: string;\n source?: RegistrySource | 'all';\n}\n\nexport async function launchNavigator(options: NavigatorOptions = {}): Promise<void> {\n // Check if TTY is available\n if (!process.stdin.isTTY) {\n console.log(chalk.yellow('Interactive navigator requires an interactive TTY terminal.'));\n return;\n }\n\n let searchQuery = options.query || options.category || '';\n let selectedIndex = 0;\n let allServers: RegistryServerItem[] = [];\n let isFetching = true;\n\n // Initial fetch\n allServers = await UnifiedRegistryClient.search({\n query: searchQuery || undefined,\n category: options.category,\n source: options.source || 'all',\n limit: 40,\n });\n isFetching = false;\n\n // Setup readline for keypress\n readline.emitKeypressEvents(process.stdin);\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n // Hide cursor during navigation\n process.stdout.write('\\u001B[?25l');\n\n const cleanup = () => {\n process.stdout.write('\\u001B[?25h'); // Show cursor\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n process.stdin.pause();\n console.clear();\n };\n\n const getSourceBadge = (src: RegistrySource) => {\n switch (src) {\n case 'curated':\n return chalk.bgGreen.black(' CURATED ');\n case 'official':\n return chalk.bgCyan.black(' OFFICIAL ');\n case 'smithery':\n return chalk.bgMagenta.black(' SMITHERY ');\n }\n };\n\n const render = () => {\n // Filter servers based on searchQuery\n const q = searchQuery.toLowerCase().trim();\n const filtered = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q) ||\n (s.tags && s.tags.some((t) => t.toLowerCase().includes(q)))\n );\n\n if (selectedIndex >= filtered.length) {\n selectedIndex = Math.max(0, filtered.length - 1);\n }\n\n const termHeight = process.stdout.rows || 25;\n const termWidth = process.stdout.columns || 80;\n const pageSize = Math.max(5, Math.min(10, termHeight - 14));\n\n // Calculate window slice\n const startIdx = Math.max(\n 0,\n Math.min(\n selectedIndex - Math.floor(pageSize / 2),\n Math.max(0, filtered.length - pageSize)\n )\n );\n const visibleServers = filtered.slice(startIdx, startIdx + pageSize);\n\n // Build output buffer\n console.clear();\n\n console.log(\n chalk.bold.cyan('🌐 ContextWise Interactive MCP Navigator') +\n chalk.gray(' | ') +\n chalk.white('Search, browse, and hot-load MCP servers')\n );\n console.log(\n chalk.gray('Controls: ') +\n chalk.yellow('↑/↓') +\n chalk.gray(' Navigate ') +\n chalk.yellow('[a] / [Enter]') +\n chalk.gray(' Add Server ') +\n chalk.yellow('[Esc] / [q]') +\n chalk.gray(' Exit ') +\n chalk.yellow('Type') +\n chalk.gray(' to filter\\n')\n );\n\n console.log(\n chalk.bold('Filter: ') +\n chalk.cyan(searchQuery ? searchQuery : chalk.gray('(Type to filter...)')) +\n chalk.gray(` [${filtered.length} matching / ${allServers.length} total]`)\n );\n console.log(chalk.gray('─'.repeat(Math.min(termWidth, 76))));\n\n if (isFetching) {\n console.log(chalk.yellow('\\n Loading servers from registries...\\n'));\n } else if (filtered.length === 0) {\n console.log(chalk.yellow(`\\n No servers matching \"${searchQuery}\".`));\n console.log(chalk.gray(' Press Backspace to broaden search or Esc to exit.\\n'));\n } else {\n for (let i = 0; i < visibleServers.length; i++) {\n const item = visibleServers[i];\n const actualIndex = startIdx + i;\n const isSelected = actualIndex === selectedIndex;\n\n const cursor = isSelected ? chalk.bold.green('▸ ') : ' ';\n const badge = getSourceBadge(item.source);\n const nameStr = isSelected\n ? chalk.bold.underline.white(item.displayName)\n : chalk.white(item.displayName);\n const idStr = chalk.gray(`(${item.id})`);\n\n console.log(`${cursor}${badge} ${nameStr} ${idStr}`);\n }\n }\n\n console.log(chalk.gray('─'.repeat(Math.min(termWidth, 76))));\n\n // Selected item detail box\n const selectedItem = filtered[selectedIndex];\n if (selectedItem) {\n console.log(\n chalk.bold('Selected: ') +\n chalk.green(selectedItem.displayName) +\n chalk.gray(` [${selectedItem.sourceLabel}]`)\n );\n console.log(chalk.white(`Description: ${selectedItem.description}`));\n\n if (selectedItem.requiredParams && selectedItem.requiredParams.length > 0) {\n const params = selectedItem.requiredParams\n .map((p) => `${p.name} (${p.type}: ${p.description})`)\n .join(', ');\n console.log(chalk.yellow(`Required Params: ${params}`));\n }\n\n const docsUrl =\n selectedItem.homepage ||\n (selectedItem.source === 'smithery'\n ? `https://smithery.ai/servers/${selectedItem.id}`\n : selectedItem.source === 'curated'\n ? `https://github.com/modelcontextprotocol/servers/tree/main/src/${selectedItem.id}`\n : `https://registry.modelcontextprotocol.io`);\n\n console.log(chalk.cyan('Docs: ') + chalk.underline.white(docsUrl));\n\n console.log(\n chalk.cyan(`Quick Action: `) +\n chalk.white(`Press `) +\n chalk.bold.yellow(`[a]`) +\n chalk.white(` or `) +\n chalk.bold.yellow(`[Enter]`) +\n chalk.white(` to install `) +\n chalk.bold(selectedItem.id)\n );\n } else {\n console.log(chalk.gray('Select a server above to view configuration and details.'));\n }\n };\n\n render();\n\n // Handle interactive input\n return new Promise<void>((resolve) => {\n process.stdin.on('keypress', async (str, key) => {\n if (!key) {\n if (str && str.length === 1 && str >= ' ') {\n searchQuery += str;\n selectedIndex = 0;\n render();\n }\n return;\n }\n\n // Exit controls: Esc, Ctrl+C, or 'q' (when search query is empty)\n if (\n key.name === 'escape' ||\n (key.ctrl && key.name === 'c') ||\n (key.name === 'q' && searchQuery === '')\n ) {\n cleanup();\n console.log(chalk.gray('Exited ContextWise Navigator.\\n'));\n resolve();\n return;\n }\n\n // Arrow navigation\n if (key.name === 'up') {\n selectedIndex = Math.max(0, selectedIndex - 1);\n render();\n return;\n }\n\n if (key.name === 'down') {\n const q = searchQuery.toLowerCase().trim();\n const filteredCount = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n ).length;\n selectedIndex = Math.min(Math.max(0, filteredCount - 1), selectedIndex + 1);\n render();\n return;\n }\n\n // Backspace in search\n if (key.name === 'backspace') {\n if (searchQuery.length > 0) {\n searchQuery = searchQuery.slice(0, -1);\n selectedIndex = 0;\n render();\n }\n return;\n }\n\n // Add selected server: Enter or 'a'\n if (key.name === 'return' || key.name === 'a') {\n const q = searchQuery.toLowerCase().trim();\n const filtered = allServers.filter(\n (s) =>\n !q ||\n s.displayName.toLowerCase().includes(q) ||\n s.id.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n );\n const target = filtered[selectedIndex];\n if (target) {\n cleanup();\n console.log(chalk.bold.green(`\\n✓ Selected MCP Server: \"${target.displayName}\" (${target.id})\\n`));\n\n try {\n let config = target.suggestedConfig;\n if (!config) {\n if (target.source === 'smithery') {\n config = SmitheryClient.buildServerConfig(target.id);\n } else {\n const preset = KnownServerRegistry.find(target.id);\n if (preset) {\n config = KnownServerRegistry.buildConfig(preset);\n } else {\n config = {\n command: 'npx',\n args: ['-y', target.id],\n env: {},\n autoRestart: true,\n };\n }\n }\n }\n\n const savedPath = ServerManager.saveUpstream(target.id, config);\n console.log(\n chalk.green(\n `✓ Successfully added \"${target.id}\" into ${chalk.bold(savedPath)}!`\n )\n );\n console.log(\n chalk.cyan(\n `The server is now configured and will be loaded automatically on next session or when ContextWise starts.\\n`\n )\n );\n } catch (err) {\n console.log(chalk.red(`Failed to add server: ${err}\\n`));\n }\n\n resolve();\n return;\n }\n }\n\n // Alphanumeric search input\n if (str && str.length === 1 && !key.ctrl && !key.meta && str >= ' ') {\n searchQuery += str;\n selectedIndex = 0;\n render();\n }\n });\n });\n}\n","import { existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { ContextWiseConfig, ContextWiseConfigSchema } from '../../config/schema.js';\n\nexport interface InitCommandOptions {\n force?: boolean;\n cwd?: string;\n}\n\nexport async function initCommand(options: InitCommandOptions): Promise<void> {\n const cwd = options.cwd ?? process.cwd();\n const targetPath = resolve(cwd, 'contextwise.json');\n\n console.log(chalk.bold.cyan('\\n🚀 ContextWise Setup Wizard\\n'));\n\n if (existsSync(targetPath) && !options.force) {\n console.log(\n chalk.yellow(`Configuration file already exists at ${targetPath}.`)\n );\n console.log('Use --force to overwrite.\\n');\n return;\n }\n\n // Try auto-importing from existing clients\n const imported = ConfigLoader.autoImportClientConfigs(cwd);\n let initialConfig: ContextWiseConfig;\n\n if (imported && Object.keys(imported.upstreams).length > 0) {\n console.log(\n chalk.green(\n `✓ Found existing MCP servers from AI client configuration:`\n )\n );\n for (const name of Object.keys(imported.upstreams)) {\n console.log(` - ${chalk.bold(name)}`);\n }\n initialConfig = imported;\n } else {\n console.log(chalk.blue('ℹ No existing MCP clients detected. Generating template configuration.'));\n initialConfig = ContextWiseConfigSchema.parse({\n version: '1.0.0',\n proxy: {\n transport: 'stdio',\n port: 3456,\n logLevel: 'info',\n },\n routing: {\n strategy: 'hybrid',\n topK: 5,\n similarityThreshold: 0.45,\n pinnedTools: [],\n },\n guardrails: {\n enableCache: true,\n cacheTtlSeconds: 120,\n maxCallsPerMinute: 60,\n loopBreakerThreshold: 3,\n },\n upstreams: {},\n });\n }\n\n writeFileSync(targetPath, JSON.stringify(initialConfig, null, 2), 'utf-8');\n console.log(chalk.green(`\\n✓ Successfully created ${targetPath}`));\n console.log(\n chalk.gray(\n '\\nNext step: Connect your AI client (Cursor, Claude Desktop, Windsurf) by adding ContextWise to its MCP configuration:\\n'\n )\n );\n\n console.log(chalk.white('{\\n \"mcpServers\": {\\n \"contextwise\": {\\n \"command\": \"npx\",\\n \"args\": [\"-y\", \"contextwise\", \"start\"]\\n }\\n }\\n}\\n'));\n}\n","import chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { UpstreamMultiplexer } from '../../core/multiplexer.js';\n\nexport interface ListCommandOptions {\n config?: string;\n}\n\nexport async function listCommand(options: ListCommandOptions): Promise<void> {\n const config = ConfigLoader.load({ configPath: options.config });\n const upstreamCount = Object.keys(config.upstreams).length;\n\n console.log(chalk.bold.cyan('\\n🔍 ContextWise Catalog Overview\\n'));\n console.log(`Configured Upstreams: ${chalk.bold(upstreamCount)}`);\n\n if (upstreamCount === 0) {\n console.log(\n chalk.yellow('No upstream MCP servers defined. Run \"contextwise init\" to add servers.\\n')\n );\n return;\n }\n\n const multiplexer = new UpstreamMultiplexer();\n try {\n await multiplexer.connectAll(config.upstreams);\n const statuses = multiplexer.getStatus();\n const tools = multiplexer.getAllTools();\n\n console.log(chalk.bold('\\n--- Upstream Servers ---'));\n for (const s of statuses) {\n const statusColor = s.status === 'connected' ? chalk.green : chalk.red;\n console.log(\n `• ${chalk.bold(s.name)} [${s.transportType}] - ${statusColor(s.status.toUpperCase())} (${s.toolsCount} tools)`\n );\n if (s.error) {\n console.log(` ${chalk.red('Error:')} ${s.error}`);\n }\n }\n\n console.log(chalk.bold(`\\n--- Aggregated Tools (${tools.length} total) ---`));\n for (const tool of tools) {\n const hint = tool.readOnlyHint ? chalk.gray(' [read-only]') : '';\n console.log(`• ${chalk.green(tool.namespacedName)}${hint}`);\n if (tool.description) {\n console.log(` ${chalk.gray(tool.description.slice(0, 100))}`);\n }\n }\n console.log('');\n } finally {\n await multiplexer.closeAll();\n }\n}\n","import chalk from 'chalk';\nimport { cloudClient } from '../../cloud/client.js';\nimport { syncManager } from '../../cloud/sync_manager.js';\n\nexport async function loginCommand(apiKey?: string): Promise<void> {\n const key = apiKey?.trim();\n\n if (key) {\n try {\n const token = await cloudClient.loginWithKey(key);\n console.log(chalk.green(`\\n✔ Logged in successfully as ${chalk.bold(token.email)}\\n`));\n console.log(chalk.gray(`User ID: ${token.userId}`));\n console.log(chalk.gray(`Session valid until: ${new Date(token.expiresAt).toLocaleDateString()}\\n`));\n return;\n } catch (err) {\n console.error(chalk.red(`\\n✖ Login failed: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n }\n\n // Interactive Browser Authorization Flow (RFC 8628)\n try {\n console.log(chalk.cyan('\\nInitiating ContextWise Cloud authorization...'));\n const flow = await cloudClient.startDeviceFlow();\n\n console.log(chalk.bold('\\nTo authorize this device, follow these steps:'));\n console.log(`1. Open this URL in your browser:`);\n console.log(` ${chalk.bold.underline.blue(flow.verification_uri)}`);\n console.log(`2. Verify the confirmation code:`);\n console.log(` ${chalk.bold.yellow(flow.user_code)}\\n`);\n console.log(chalk.gray('Waiting for browser approval... (press Ctrl+C to cancel)'));\n\n const token = await cloudClient.pollDeviceToken(flow.device_code, flow.interval);\n console.log(chalk.green(`\\n✔ Logged in successfully as ${chalk.bold(token.email)}\\n`));\n console.log(chalk.gray(`User ID: ${token.userId}`));\n console.log(chalk.gray(`Session valid until: ${new Date(token.expiresAt).toLocaleDateString()}\\n`));\n } catch (err) {\n console.error(chalk.red(`\\n✖ Login failed: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n cloudClient.clearToken();\n console.log(chalk.green('\\n✔ Logged out of ContextWise Cloud.\\n'));\n}\n\nexport async function whoamiCommand(): Promise<void> {\n try {\n const info = await cloudClient.whoami();\n console.log(chalk.bold.cyan('\\n👤 ContextWise Cloud Identity\\n'));\n console.log(`User Email: ${chalk.bold(info.email)}`);\n console.log(`User ID: ${chalk.gray(info.userId)}`);\n\n const planDisplay =\n info.plan === 'pro'\n ? chalk.bold.green('PRO')\n : info.plan === 'team'\n ? chalk.bold.blue('TEAM')\n : info.plan === 'enterprise'\n ? chalk.bold.magenta('ENTERPRISE')\n : chalk.bold.gray('COMMUNITY (Free)');\n\n const statusDisplay =\n info.subscriptionStatus === 'active'\n ? chalk.green('Active')\n : chalk.yellow(info.subscriptionStatus || 'Inactive');\n\n console.log(`Plan: ${planDisplay} (${statusDisplay})`);\n if (info.currentPeriodEnd) {\n console.log(\n `Next Renewal: ${chalk.gray(\n new Date(info.currentPeriodEnd).toISOString().replace('T', ' ').slice(0, 10)\n )}`\n );\n }\n console.log('');\n\n if (info.workspaces && info.workspaces.length > 0) {\n console.log(chalk.bold('Workspaces:'));\n for (const w of info.workspaces) {\n console.log(`• ${chalk.green(w.name)} (${w.id}) - Role: ${w.role}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\\n✖ Failed to retrieve identity: ${err instanceof Error ? err.message : err}\\n`));\n process.exit(1);\n }\n}\n\nexport async function pushCommand(workspaceId?: string): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nNot logged in to ContextWise Cloud.'));\n console.log(chalk.cyan('Run \"contextwise login\" first.\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\n☁ Pushing local workspace to ContextWise Cloud...'));\n try {\n const res = await syncManager.push(workspaceId);\n if (res.status === 'committed') {\n console.log(chalk.green(`✔ Successfully pushed revision #${chalk.bold(res.revision)} to Cloud.\\n`));\n } else {\n console.log(chalk.yellow(`⚠ Push conflict: Server has revision #${res.serverRevision}. Pull changes first.\\n`));\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(chalk.red(`\\n✖ Cloud push failed: ${msg}\\n`));\n }\n}\n\nexport async function pullCommand(workspaceId?: string): Promise<void> {\n if (!cloudClient.isAuthenticated()) {\n console.log(chalk.yellow('\\nNot logged in to ContextWise Cloud.'));\n console.log(chalk.cyan('Run \"contextwise login\" first.\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\n☁ Pulling latest workspace snapshot from ContextWise Cloud...'));\n try {\n const res = await syncManager.pull(workspaceId);\n if (res) {\n console.log(chalk.green(`✔ Applied cloud revision #${chalk.bold(res.revision)} to local workspace.\\n`));\n } else {\n console.log(chalk.gray('✔ Local workspace is already up to date.\\n'));\n }\n } catch (err) {\n console.error(chalk.red(`\\n✖ Cloud pull failed: ${err instanceof Error ? err.message : err}\\n`));\n }\n}\n\nexport async function syncStatusCommand(): Promise<void> {\n const status = syncManager.getStatus();\n\n console.log(chalk.bold.cyan('\\n🔄 ContextWise Cloud Sync Status\\n'));\n console.log(`Logged In: ${status.isLoggedIn ? chalk.green('YES') : chalk.gray('NO')}`);\n if (status.userEmail) {\n console.log(`Account: ${chalk.bold(status.userEmail)}`);\n }\n console.log(`Device ID: ${chalk.gray(status.deviceId)}`);\n console.log(`Workspace ID: ${status.workspaceId}`);\n console.log(`Local Revision: ${chalk.bold(status.revision)}`);\n console.log(\n `Last Synced: ${\n status.lastSyncedAt > 0\n ? new Date(status.lastSyncedAt).toISOString().replace('T', ' ').slice(0, 19)\n : chalk.gray('Never')\n }\\n`\n );\n}\n","import { createInterface } from 'node:readline/promises';\nimport chalk from 'chalk';\nimport { ConfigLoader } from '../../config/loader.js';\nimport { VaultAuditor } from '../../vault/audit.js';\nimport { secretVault } from '../../vault/vault.js';\n\nexport interface SecretSetOptions {\n scope?: 'personal' | 'workspace' | 'team';\n}\n\nexport interface SecretGetOptions {\n reveal?: boolean;\n}\n\nexport async function secretSetCommand(\n key: string,\n value?: string,\n options: SecretSetOptions = {}\n): Promise<void> {\n if (!key || typeof key !== 'string') {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n let secretValue = value;\n\n if (!secretValue) {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n secretValue = await rl.question(chalk.cyan(`Enter secret value for \"${key}\": `));\n } finally {\n rl.close();\n }\n }\n\n secretValue = secretValue?.trim();\n if (!secretValue) {\n console.error(chalk.red('Error: Secret value cannot be empty.'));\n process.exit(1);\n }\n\n const scope = options.scope || 'personal';\n await secretVault.set(key, secretValue, scope);\n\n console.log(\n chalk.green(\n `\\n✔ Secret \"${chalk.bold(key)}\" stored successfully in vault [${secretVault.getActiveDriverName()}] (scope: ${scope})\\n`\n )\n );\n console.log(\n chalk.gray(\n `Tip: Reference this secret in contextwise.json with: \"vault://${key}\"\\n`\n )\n );\n}\n\nexport async function secretGetCommand(\n key: string,\n options: SecretGetOptions = {}\n): Promise<void> {\n if (!key) {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n const value = await secretVault.get(key);\n if (value === null || value === undefined) {\n console.log(chalk.red(`\\n✖ Secret \"${key}\" not found in ContextWise vault.\\n`));\n process.exit(1);\n }\n\n if (options.reveal) {\n console.log(`\\n${chalk.bold(key)}: ${chalk.yellow(value)}\\n`);\n } else {\n const masked =\n value.length > 8\n ? `${value.slice(0, 4)}••••••••${value.slice(-4)}`\n : '••••••••';\n console.log(\n `\\n${chalk.bold(key)}: ${chalk.yellow(masked)} ${chalk.gray(\n `(${value.length} chars, pass --reveal to view plaintext)`\n )}\\n`\n );\n }\n}\n\nexport async function secretListCommand(): Promise<void> {\n const secrets = await secretVault.list();\n\n console.log(chalk.bold.cyan('\\n🔐 ContextWise Secret Vault\\n'));\n console.log(`Active Storage Driver: ${chalk.bold(secretVault.getActiveDriverName())}`);\n console.log(`Total Stored Secrets: ${chalk.bold(secrets.length)}\\n`);\n\n if (secrets.length === 0) {\n console.log(chalk.yellow('No secrets currently stored in vault.'));\n console.log(\n chalk.gray('Store a secret with: contextwise secret set <key> <value>\\n')\n );\n return;\n }\n\n console.log(\n chalk.bold(\n `${'KEY'.padEnd(30)} ${'SCOPE'.padEnd(14)} ${'BACKEND'.padEnd(18)} ${'UPDATED'}`\n )\n );\n console.log(chalk.gray('─'.repeat(75)));\n\n for (const s of secrets) {\n const dateStr = new Date(s.updatedAt).toISOString().replace('T', ' ').slice(0, 19);\n console.log(\n `${chalk.cyan(s.key.padEnd(30))} ${s.scope.padEnd(14)} ${s.backend.padEnd(18)} ${chalk.gray(dateStr)}`\n );\n }\n console.log('');\n}\n\nexport async function secretDeleteCommand(key: string): Promise<void> {\n if (!key) {\n console.error(chalk.red('Error: Secret key must be specified.'));\n process.exit(1);\n }\n\n const deleted = await secretVault.delete(key);\n if (deleted) {\n console.log(chalk.green(`\\n✔ Secret \"${chalk.bold(key)}\" was successfully deleted from vault.\\n`));\n } else {\n console.log(chalk.yellow(`\\n✖ Secret \"${key}\" was not found in vault.\\n`));\n }\n}\n\nexport async function secretAuditCommand(): Promise<void> {\n const config = ConfigLoader.load();\n const report = await VaultAuditor.audit(config);\n\n console.log(chalk.bold.cyan('\\n🛡️ ContextWise Secret Security Audit\\n'));\n console.log(`Upstream Servers Inspected: ${chalk.bold(report.totalUpstreams)}`);\n console.log(`Vault References in Config: ${chalk.bold(report.vaultReferencedCount)}`);\n console.log(`Active Vault Driver: ${chalk.bold(report.activeDriver)}`);\n console.log(`Redacted Secrets in Memory: ${chalk.bold(report.registeredSecretCount)}\\n`);\n\n if (report.plaintextWarnings.length === 0) {\n console.log(\n chalk.green(\n '✔ Vault Audit Passed: No exposed plaintext credentials detected in configuration.\\n'\n )\n );\n return;\n }\n\n console.log(\n chalk.red(\n `⚠ Found ${report.plaintextWarnings.length} potential credential risk(s) in configuration:\\n`\n )\n );\n\n for (const warning of report.plaintextWarnings) {\n const badge =\n warning.severity === 'critical'\n ? chalk.bgRed.bold(' CRITICAL ')\n : chalk.bgYellow.black.bold(' WARNING ');\n\n console.log(`${badge} [${warning.serverName}] ${chalk.bold(warning.envVar)}`);\n console.log(` ${chalk.gray('Issue:')} ${warning.reason}`);\n console.log(` ${chalk.cyan('Action:')} ${warning.suggestion}\\n`);\n }\n}\n","import { ConfigLoader } from '../../config/loader.js';\nimport { ContextWiseProxy } from '../../core/proxy.js';\nimport { logger } from '../../utils/logger.js';\n\nexport interface StartCommandOptions {\n config?: string;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';\n passthrough?: boolean;\n http?: boolean;\n port?: string;\n path?: string;\n}\n\nexport async function startCommand(options: StartCommandOptions): Promise<void> {\n try {\n const config = ConfigLoader.load({\n configPath: options.config,\n });\n\n if (options.logLevel) {\n config.proxy.logLevel = options.logLevel;\n }\n\n if (options.passthrough) {\n config.routing.strategy = 'passthrough';\n }\n\n const proxy = new ContextWiseProxy();\n let isShuttingDown = false;\n\n const cleanup = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n // Unref'd fallback timer to guarantee exit if upstream stop hangs\n setTimeout(() => process.exit(0), 3000).unref();\n\n try {\n await proxy.stop();\n } catch (err) {\n logger.error(`Error stopping ContextWise proxy: ${err}`);\n } finally {\n process.exit(0);\n }\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n\n if (options.http) {\n const port = options.port ? parseInt(options.port, 10) : 3000;\n const mcpPath = options.path || '/mcp';\n await proxy.startHttp(config, { port, path: mcpPath });\n console.log(`\\nContextWise HTTP endpoint ready for MCPaid publishing:`);\n console.log(` Upstream URL: http://127.0.0.1:${port}${mcpPath}`);\n console.log(` Publish via: npx @mcpaid/sdk publish --upstream http://127.0.0.1:${port}${mcpPath}\\n`);\n return; // HTTP server keeps the process alive\n }\n\n await proxy.start(config);\n\n // Keep process alive for stdio transport\n process.stdin.resume();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.error(`ContextWise proxy failed to start: ${msg}`);\n process.exit(1);\n }\n}\n","import chalk from 'chalk';\nimport { metricsCollector, LLM_PRICING } from '../../metrics/collector.js';\n\nexport interface StatsCommandOptions {\n reset?: boolean;\n json?: boolean;\n}\n\nfunction col(text: string, width: number, colorFn?: (s: string) => string): string {\n const truncated = text.length > width ? text.slice(0, width) : text;\n const padded = truncated.padEnd(width);\n return colorFn ? colorFn(padded) : padded;\n}\n\nfunction makeSeparator(cLeft: string, cMid: string, cRight: string, widths: number[]): string {\n const parts = widths.map((w) => '─'.repeat(w + 2));\n return ` ${cLeft}${parts.join(cMid)}${cRight}`;\n}\n\nfunction makeHeader(title: string, widths: number[]): string {\n const totalWidth = widths.reduce((acc, w) => acc + w + 2, 0) + widths.length - 1;\n const banner = ` ┌── ${title} `;\n const remaining = Math.max(0, totalWidth + 3 - banner.length);\n return `${banner}${'─'.repeat(remaining)}┐`;\n}\n\nexport async function statsCommand(options: StatsCommandOptions = {}): Promise<void> {\n if (options.reset) {\n metricsCollector.reset();\n console.log(\n chalk.green.bold('\\n✔ All ContextWise lifetime metrics and token analytics have been reset to zero.\\n')\n );\n return;\n }\n\n // Reload fresh persistent values from disk\n metricsCollector.reload();\n const summary = metricsCollector.getSummary();\n\n if (options.json) {\n console.log(JSON.stringify(summary, null, 2));\n return;\n }\n\n const doubleDivider = chalk.bold.cyan('═'.repeat(74));\n\n console.log(`\\n${doubleDivider}`);\n console.log(\n chalk.bold.cyan(' 💰 ContextWise Performance, Token & Cost Analytics')\n );\n console.log(`${doubleDivider}\\n`);\n\n // Prominent Dollar Savings Banner\n const baselineSavings = summary.dollarSavings.claudeSonnet.toFixed(2);\n const totalTokens = summary.estimatedTotalTokensSaved.toLocaleString();\n\n if (summary.estimatedTotalTokensSaved > 0) {\n console.log(\n chalk.bgGreen.black.bold(` SAVINGS `) +\n chalk.green.bold(\n ` ContextWise has saved you ~$${baselineSavings} in LLM API costs!`\n )\n );\n console.log(\n chalk.dim(` ${totalTokens} total tokens avoided across all sessions\\n`)\n );\n } else {\n console.log(\n chalk.bgBlue.black.bold(` STANDBY `) +\n chalk.cyan.bold(\n ` Ready to route! Connect Claude Code, Cursor, or Antigravity to track savings.`\n )\n );\n console.log(\n chalk.dim(` 0 tokens saved so far (start a session to begin tracking)\\n`)\n );\n }\n\n // Section 1: Estimated Dollar Savings by Model\n const modelCols = [30, 18, 16];\n console.log(chalk.bold.yellow(makeHeader('💡 ESTIMATED SAVINGS BY MODEL', modelCols)));\n console.log(\n ` │ ${col('Model Family', 30, chalk.bold)} │ ${col('Benchmark Rate', 18, chalk.bold)} │ ${col('Dollar Saved', 16, chalk.bold)} │`\n );\n console.log(makeSeparator('├', '┼', '┤', modelCols));\n console.log(\n ` │ ${col('Claude 3.5 / 3.7 Sonnet (def)', 30, chalk.cyan)} │ ${col(`$${LLM_PRICING.CLAUDE_SONNET.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.claudeSonnet.toFixed(2)}`, 16, chalk.green.bold)} │`\n );\n console.log(\n ` │ ${col('OpenAI GPT-4o', 30)} │ ${col(`$${LLM_PRICING.GPT_4O.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.gpt4o.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(\n ` │ ${col('Claude 3 Opus', 30)} │ ${col(`$${LLM_PRICING.CLAUDE_OPUS.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.claudeOpus.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(\n ` │ ${col('Haiku / GPT-4o mini', 30)} │ ${col(`$${LLM_PRICING.HAIKU_OR_MINI.toFixed(2)} / 1M`, 18)} │ ${col(`$${summary.dollarSavings.haikuOrMini.toFixed(2)}`, 16, chalk.green)} │`\n );\n console.log(makeSeparator('└', '┴', '┘', modelCols) + '\\n');\n\n // Section 2: Token Reduction Breakdown\n const tokenCols = [24, 18, 24];\n console.log(chalk.bold.yellow(makeHeader('📊 TOKEN REDUCTION BREAKDOWN', tokenCols)));\n console.log(\n ` │ ${col('Source', 24, chalk.bold)} │ ${col('Tokens Saved', 18, chalk.bold)} │ ${col('Details', 24, chalk.bold)} │`\n );\n console.log(makeSeparator('├', '┼', '┤', tokenCols));\n console.log(\n ` │ ${col('Schema Pruning', 24)} │ ${col(summary.schemaPruningTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${Math.max(0, summary.totalCatalogToolsCount - summary.exposedToolsCount)} tools hidden/turn`, 24, chalk.dim)} │`\n );\n console.log(\n ` │ ${col('Response Cache', 24)} │ ${col(summary.cacheTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${summary.cachedCalls} read calls cached`, 24, chalk.dim)} │`\n );\n console.log(\n ` │ ${col('Loop Prevention', 24)} │ ${col(summary.loopPreventionTokensSaved.toLocaleString(), 18, chalk.green)} │ ${col(`${summary.loopsPrevented} runaway loops stopped`, 24, chalk.dim)} │`\n );\n console.log(makeSeparator('└', '┴', '┘', tokenCols) + '\\n');\n\n // Section 3: Performance & Reliability\n const trackingSince = summary.firstRecordedAt > 0\n ? new Date(summary.firstRecordedAt).toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n : 'Session start';\n\n const perfCols = [26, 43];\n console.log(chalk.bold.yellow(makeHeader('⚡ PROXY PERFORMANCE & RELIABILITY', perfCols)));\n console.log(` │ ${col('Total Proxied Calls:', 26)} │ ${col(String(summary.totalCalls), 43, chalk.bold)} │`);\n console.log(\n ` │ ${col('Cache Hit Efficiency:', 26)} │ ${col(`${summary.cacheHitRatePct}% (${summary.cachedCalls} cached / ${summary.totalCalls} calls)`, 43, chalk.bold)} │`\n );\n console.log(` │ ${col('Avg Execution Latency:', 26)} │ ${col(`${summary.averageLatencyMs} ms`, 43, chalk.bold)} │`);\n console.log(\n ` │ ${col('Tripped Loops / Errors:', 26)} │ ${col(\n summary.loopsPrevented > 0 || summary.errorCalls > 0\n ? `${summary.loopsPrevented} loops / ${summary.errorCalls} errors`\n : '0 loops / 0 errors',\n 43,\n summary.loopsPrevented > 0 || summary.errorCalls > 0 ? chalk.red : chalk.green\n )} │`\n );\n console.log(` │ ${col('Metrics Tracking Since:', 26)} │ ${col(trackingSince, 43, chalk.dim)} │`);\n console.log(makeSeparator('└', '┴', '┘', perfCols) + '\\n');\n\n console.log(\n chalk.dim(\n ' Tip: Run \"contextwise stats --reset\" to clear counters or \"--json\" for raw exports.\\n'\n )\n );\n}\n"],"mappings":"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","names":["resolve","chalk","chalk","chalk","resolve","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","resolve"]}
@@ -0,0 +1,9 @@
1
+ import {
2
+ ContextWiseCloudClient,
3
+ cloudClient
4
+ } from "./chunk-WP7RH2Z2.js";
5
+ export {
6
+ ContextWiseCloudClient,
7
+ cloudClient
8
+ };
9
+ //# sourceMappingURL=client-3GQWPGI3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}