@phenixstar/talon 1.0.2 → 1.1.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/.env.example CHANGED
@@ -13,7 +13,14 @@ ANTHROPIC_API_KEY=your-api-key-here
13
13
  # CLAUDE_CODE_OAUTH_TOKEN=your-oauth-token-here
14
14
 
15
15
  # =============================================================================
16
- # OPTION 2: Router Mode (use alternative providers)
16
+ # OPTION 2: Custom Base URL (compatible proxies, gateways, etc.)
17
+ # =============================================================================
18
+ # Point the SDK at an alternative Anthropic-compatible endpoint.
19
+ # ANTHROPIC_BASE_URL=https://your-proxy.example.com
20
+ # ANTHROPIC_AUTH_TOKEN=your-auth-token # Auth token for the custom endpoint
21
+
22
+ # =============================================================================
23
+ # OPTION 3: Router Mode (use alternative providers)
17
24
  # =============================================================================
18
25
  # Enable router mode by running: ./talon start ... ROUTER=true
19
26
  # Then configure ONE of the providers below:
@@ -27,15 +34,16 @@ ANTHROPIC_API_KEY=your-api-key-here
27
34
  # ROUTER_DEFAULT=openrouter,google/gemini-3-flash-preview
28
35
 
29
36
  # =============================================================================
30
- # Model Tier Overrides (Anthropic API / OAuth / Bedrock)
37
+ # Model Tier Overrides (Anthropic API / OAuth / Custom Base URL / Bedrock)
31
38
  # =============================================================================
32
39
  # Override which model is used for each tier. Defaults are used if not set.
40
+ # Optional for direct Anthropic and custom base URL modes. Required for Bedrock/Vertex.
33
41
  # ANTHROPIC_SMALL_MODEL=... # Small tier (default: claude-haiku-4-5-20251001)
34
42
  # ANTHROPIC_MEDIUM_MODEL=... # Medium tier (default: claude-sonnet-4-6)
35
43
  # ANTHROPIC_LARGE_MODEL=... # Large tier (default: claude-opus-4-6)
36
44
 
37
45
  # =============================================================================
38
- # OPTION 3: AWS Bedrock
46
+ # OPTION 4: AWS Bedrock
39
47
  # =============================================================================
40
48
  # https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/
41
49
  # Requires the model tier overrides above to be set with Bedrock-specific model IDs.
@@ -49,7 +57,7 @@ ANTHROPIC_API_KEY=your-api-key-here
49
57
  # AWS_BEARER_TOKEN_BEDROCK=your-bearer-token
50
58
 
51
59
  # =============================================================================
52
- # OPTION 4: Google Vertex AI
60
+ # OPTION 5: Google Vertex AI
53
61
  # =============================================================================
54
62
  # https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models
55
63
  # Requires a GCP service account with roles/aiplatform.user.
package/README.md CHANGED
@@ -123,6 +123,7 @@ Talon Pro supports a self-hosted runner model (similar to GitHub Actions self-ho
123
123
  - [Configuration (Optional)](#configuration-optional)
124
124
  - [AWS Bedrock](#aws-bedrock)
125
125
  - [Google Vertex AI](#google-vertex-ai)
126
+ - [Custom Base URL](#custom-base-url)
126
127
  - [[EXPERIMENTAL - UNSUPPORTED] Router Mode (Alternative Providers)](#experimental---unsupported-router-mode-alternative-providers)
127
128
  - [Output and Results](#output-and-results)
128
129
  - [Sample Reports](#-sample-reports)
@@ -451,6 +452,33 @@ ANTHROPIC_LARGE_MODEL=claude-opus-4-6
451
452
 
452
453
  Set `CLOUD_ML_REGION=global` for global endpoints, or a specific region like `us-east5`. Some models may not be available on global endpoints — see the [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) for region availability.
453
454
 
455
+ ### Custom Base URL
456
+
457
+ Shannon supports pointing the SDK at any Anthropic-compatible endpoint (proxies, gateways, etc.) via `ANTHROPIC_BASE_URL`.
458
+
459
+ #### Quick Setup
460
+
461
+ 1. Add your endpoint and auth token to `.env`:
462
+
463
+ ```bash
464
+ ANTHROPIC_BASE_URL=https://your-proxy.example.com
465
+ ANTHROPIC_AUTH_TOKEN=your-auth-token
466
+ ```
467
+
468
+ 2. Optionally override model tiers (defaults are used if not set):
469
+
470
+ ```bash
471
+ ANTHROPIC_SMALL_MODEL=claude-haiku-4-5-20251001
472
+ ANTHROPIC_MEDIUM_MODEL=claude-sonnet-4-6
473
+ ANTHROPIC_LARGE_MODEL=claude-opus-4-6
474
+ ```
475
+
476
+ 3. Run Shannon as usual:
477
+
478
+ ```bash
479
+ ./shannon start URL=https://example.com REPO=repo-name
480
+ ```
481
+
454
482
  ### [EXPERIMENTAL - UNSUPPORTED] Router Mode (Alternative Providers)
455
483
 
456
484
  Talon can experimentally route requests through alternative AI providers using claude-code-router. This mode is not officially supported and is intended primarily for:
package/bin/talon.js CHANGED
@@ -18,6 +18,8 @@ const [,, command, ...args] = process.argv;
18
18
  const COMMANDS = {
19
19
  setup: 'dist/cli/setup.js',
20
20
  doctor: 'dist/cli/doctor.js',
21
+ repo: 'dist/cli/repo-commands.js',
22
+ tui: 'dist/tui/tui-entry.js',
21
23
  help: null,
22
24
  start: null,
23
25
  stop: null,
@@ -34,22 +36,28 @@ Talon — AI Penetration Testing Framework
34
36
  Usage:
35
37
  talon setup Interactive setup wizard
36
38
  talon doctor Validate configuration and dependencies
39
+ talon repo add <url> [name] Clone a target repo to ~/.talon/repos/
40
+ talon repo list List available repos
41
+ talon repo remove <name> Remove a repo
37
42
  talon start URL=<url> REPO=<name> Start a pentest workflow
38
43
  talon stop Stop all containers
39
44
  talon stop CLEAN=true Stop + remove volumes
40
45
  talon workspaces List all workspaces
46
+ talon tui <workflow-id> Real-time TUI dashboard
47
+ talon tui --list Show past scan history
41
48
  talon logs ID=<workflow-id> Tail workflow logs
42
49
  talon benchmark TARGET=<name> Run benchmark metrics
43
50
  talon evolve GENERATIONS=<n> Run evolution generations
44
51
  talon help Show this help
45
52
 
46
53
  Options for 'start':
47
- REPO=<name> Folder under ./repos/
54
+ REPO=<name> Repo name (checks ./repos/ then ~/.talon/repos/)
48
55
  CONFIG=<path> YAML config file
49
56
  OUTPUT=<path> Output directory (default: ./audit-logs/)
50
57
  WORKSPACE=<name> Named workspace (auto-resume)
51
58
  PIPELINE_TESTING=true Fast testing mode
52
59
  ROUTER=true Multi-model routing
60
+ TUI=true Launch TUI dashboard during scan
53
61
 
54
62
  Examples:
55
63
  talon setup
@@ -2,16 +2,29 @@
2
2
  # Each pipeline phase routes to the optimal model based on task requirements.
3
3
  #
4
4
  # Format: primary model attempted first; fallback used on provider failure.
5
- # Model IDs must match provider catalog in router-config.json.
6
- # Providers: OpenRouter, OpenAI/Codex, Groq, xAI, Kimi, MiniMax (2 plans), Z-AI
5
+ # Provider prefixes: groq:, xai:, minimax-highspeed:, minimax-max:, kimi:,
6
+ # z-ai:, gemini-pro:, gemini-flash:, openrouter:, ollama:, openai-compat:
7
+ #
8
+ # Provider profiles (set LLM_PROVIDER or use prefix in model name):
9
+ # claude — Anthropic API (default, hasAgenticLoop=true)
10
+ # groq — Groq LPU, ~935 tok/s (speed)
11
+ # minimax-highspeed — M2.7-highspeed, ~100 TPS, 2000 prompts/5h (speed)
12
+ # minimax-max — M2.7, 1000 prompts/5h (balanced)
13
+ # xai — Grok-3/Mini, 1M context (reasoning)
14
+ # z-ai — GLM-5 DevPack (reasoning)
15
+ # gemini-pro — Gemini 2.5 Pro, 1M context (reasoning)
16
+ # gemini-flash — Gemini 2.5 Flash, cheap + fast (cost)
17
+ # kimi — Moonshot 128K context (context)
18
+ # openrouter — 300+ models, single key (balanced)
19
+ # ollama — Local models, no API key (local)
7
20
 
8
21
  routes:
9
- # Pre-recon: code analysis needs deep reasoning
22
+ # Pre-recon: code analysis needs deep reasoning → strongest models
10
23
  pre-recon:
11
24
  primary: claude-opus-4-6
12
25
  fallback: claude-sonnet-4-6
13
26
 
14
- # Recon: tool-heavy scanning, moderate reasoning
27
+ # Recon: tool-heavy scanning, speed matters → fast inference
15
28
  recon:
16
29
  primary: claude-sonnet-4-6
17
30
  fallback: claude-haiku-4-5-20251001
@@ -31,6 +44,64 @@ routes:
31
44
  primary: claude-sonnet-4-6
32
45
  fallback: claude-haiku-4-5-20251001
33
46
 
47
+ # === Alternative routing profiles ===
48
+ # Uncomment ONE block below to override the default Claude-only routing.
49
+ # Each profile uses the right provider for each phase's requirements.
50
+
51
+ # --- Cost-optimized (use subscriptions first, Claude as fallback) ---
52
+ #routes:
53
+ # pre-recon:
54
+ # primary: "gemini-pro:gemini-2.5-pro" # 1M context, deep reasoning
55
+ # fallback: claude-sonnet-4-6
56
+ # recon:
57
+ # primary: "groq:qwen-qwq-32b" # Fastest inference for scanning
58
+ # fallback: "minimax-highspeed:MiniMax-M2.7-highspeed"
59
+ # vulnerability-analysis:
60
+ # primary: "xai:grok-3" # 1M context for large codebases
61
+ # fallback: "z-ai:GLM-5"
62
+ # exploitation:
63
+ # primary: claude-opus-4-6 # Best reasoning for exploits
64
+ # fallback: "xai:grok-3"
65
+ # reporting:
66
+ # primary: "gemini-flash:gemini-2.5-flash" # Cheapest for structured output
67
+ # fallback: "minimax-max:MiniMax-M2.7"
68
+
69
+ # --- Speed-optimized (fastest possible pipeline) ---
70
+ #routes:
71
+ # pre-recon:
72
+ # primary: "groq:qwen-qwq-32b" # 935 tok/s
73
+ # fallback: "minimax-highspeed:MiniMax-M2.7-highspeed"
74
+ # recon:
75
+ # primary: "groq:qwen-qwq-32b"
76
+ # fallback: "minimax-highspeed:MiniMax-M2.7-highspeed"
77
+ # vulnerability-analysis:
78
+ # primary: "minimax-highspeed:MiniMax-M2.7-highspeed" # 100 TPS sustained
79
+ # fallback: "groq:llama-4-maverick"
80
+ # exploitation:
81
+ # primary: "groq:qwen-qwq-32b"
82
+ # fallback: claude-sonnet-4-6
83
+ # reporting:
84
+ # primary: "minimax-highspeed:MiniMax-M2.7-highspeed"
85
+ # fallback: "gemini-flash:gemini-2.5-flash"
86
+
87
+ # --- Zero-cost local (Ollama only) ---
88
+ #routes:
89
+ # pre-recon:
90
+ # primary: "ollama:qwen2.5:32b"
91
+ # fallback: "ollama:llama3.2:8b"
92
+ # recon:
93
+ # primary: "ollama:qwen2.5:32b"
94
+ # fallback: "ollama:llama3.2:8b"
95
+ # vulnerability-analysis:
96
+ # primary: "ollama:qwen2.5:32b"
97
+ # fallback: "ollama:llama3.2:8b"
98
+ # exploitation:
99
+ # primary: "ollama:qwen2.5:32b"
100
+ # fallback: "ollama:llama3.2:8b"
101
+ # reporting:
102
+ # primary: "ollama:qwen2.5:32b"
103
+ # fallback: "ollama:llama3.2:8b"
104
+
34
105
  # Budget guard: halt execution if cumulative cost exceeds this threshold (USD)
35
106
  spending_cap_per_run: 10.00
36
107
 
@@ -16,13 +16,17 @@ import { execSync } from 'node:child_process';
16
16
  import { showBanner, showDependencyTable } from './setup-renderer.js';
17
17
  import { readEnvFile } from './env-configurator.js';
18
18
  import { checkAllDependencies, isDockerRunning, checkDiskSpaceGb } from './dependency-checker.js';
19
+ import { getTalonHome, resolveEnvPath, listRepos, commandPrefix, isProjectMode, } from './talon-home.js';
20
+ import { OllamaProvider } from '../ai/providers/ollama-provider.js';
19
21
  function checkEnvFile() {
20
- if (!fs.existsSync('.env')) {
21
- return { name: '.env file', ok: false, message: 'Not found — run talon setup' };
22
+ const envPath = resolveEnvPath();
23
+ const cmd = commandPrefix();
24
+ if (!fs.existsSync(envPath)) {
25
+ return { name: '.env file', ok: false, message: `Not found — run ${cmd} setup` };
22
26
  }
23
- const env = readEnvFile('.env');
27
+ const env = readEnvFile(envPath);
24
28
  if (env.size === 0) {
25
- return { name: '.env file', ok: false, message: 'Empty — run talon setup' };
29
+ return { name: '.env file', ok: false, message: `Empty — run ${cmd} setup` };
26
30
  }
27
31
  const hasAuth = env.has('ANTHROPIC_API_KEY')
28
32
  || env.has('CLAUDE_CODE_OAUTH_TOKEN')
@@ -30,9 +34,10 @@ function checkEnvFile() {
30
34
  || env.get('CLAUDE_CODE_USE_VERTEX') === '1'
31
35
  || env.get('ROUTER') === 'true';
32
36
  if (!hasAuth) {
33
- return { name: '.env file', ok: false, message: 'No auth credentials configured — run talon setup' };
37
+ return { name: '.env file', ok: false, message: `No auth credentials configured — run ${cmd} setup` };
34
38
  }
35
- return { name: '.env file', ok: true, message: `${env.size} variables configured` };
39
+ const location = isProjectMode() ? '.env' : envPath;
40
+ return { name: '.env file', ok: true, message: `${env.size} variables configured (${location})` };
36
41
  }
37
42
  function checkDockerDaemon() {
38
43
  if (!isDockerRunning()) {
@@ -41,6 +46,7 @@ function checkDockerDaemon() {
41
46
  return { name: 'Docker daemon', ok: true, message: 'Running' };
42
47
  }
43
48
  function checkDockerImages() {
49
+ const cmd = commandPrefix();
44
50
  try {
45
51
  const output = execSync('docker compose images 2>/dev/null', {
46
52
  encoding: 'utf-8',
@@ -48,34 +54,27 @@ function checkDockerImages() {
48
54
  timeout: 10_000,
49
55
  });
50
56
  const lines = output.trim().split('\n').filter(l => l.trim().length > 0);
51
- // First line is header
52
57
  const imageCount = Math.max(0, lines.length - 1);
53
58
  if (imageCount === 0) {
54
- return { name: 'Docker images', ok: false, message: 'Not built — will build on first talon start' };
59
+ return { name: 'Docker images', ok: false, message: `Not built — will build on first ${cmd} start` };
55
60
  }
56
61
  return { name: 'Docker images', ok: true, message: `${imageCount} images built` };
57
62
  }
58
63
  catch {
59
- return { name: 'Docker images', ok: false, message: 'Not built — will build on first talon start' };
64
+ return { name: 'Docker images', ok: false, message: `Not built — will build on first ${cmd} start` };
60
65
  }
61
66
  }
62
67
  function checkReposDir() {
63
- if (!fs.existsSync('repos')) {
64
- return { name: 'repos/ directory', ok: false, message: 'Not found — create it and clone a target repo' };
65
- }
66
- try {
67
- const entries = fs.readdirSync('repos').filter(e => {
68
- const stat = fs.statSync(`repos/${e}`);
69
- return stat.isDirectory();
70
- });
71
- if (entries.length === 0) {
72
- return { name: 'repos/ directory', ok: false, message: 'Empty — clone a target repo into repos/' };
73
- }
74
- return { name: 'repos/ directory', ok: true, message: `${entries.length} repo(s): ${entries.join(', ')}` };
75
- }
76
- catch {
77
- return { name: 'repos/ directory', ok: false, message: 'Cannot read — check permissions' };
68
+ const repos = listRepos();
69
+ if (repos.length === 0) {
70
+ const cmd = commandPrefix();
71
+ return { name: 'repos', ok: false, message: `No repos found — run ${cmd} repo add <url> or clone into repos/` };
78
72
  }
73
+ const labels = repos.map(r => {
74
+ const tag = r.source === 'home' ? chalk.dim(' (~/.talon)') : '';
75
+ return `${r.name}${tag}`;
76
+ });
77
+ return { name: 'repos', ok: true, message: `${repos.length} repo(s): ${labels.join(', ')}` };
79
78
  }
80
79
  function checkDiskSpace() {
81
80
  const gb = checkDiskSpaceGb();
@@ -87,7 +86,19 @@ function checkDiskSpace() {
87
86
  }
88
87
  return { name: 'Disk space', ok: true, message: `${gb}GB available` };
89
88
  }
90
- function main() {
89
+ async function checkOllamaHealth() {
90
+ const llmProvider = process.env.LLM_PROVIDER;
91
+ if (llmProvider !== 'ollama')
92
+ return null;
93
+ const ollama = new OllamaProvider();
94
+ const healthy = await ollama.checkHealth();
95
+ const baseUrl = process.env.OLLAMA_BASE_URL ?? 'http://localhost:11434';
96
+ if (healthy) {
97
+ return { name: 'Ollama', ok: true, message: `Reachable at ${baseUrl}` };
98
+ }
99
+ return { name: 'Ollama', ok: false, message: `Not reachable at ${baseUrl} — is Ollama running?` };
100
+ }
101
+ async function main() {
91
102
  showBanner();
92
103
  console.log(chalk.bold(' Running diagnostics...\n'));
93
104
  // 1. Dependency check
@@ -101,6 +112,10 @@ function main() {
101
112
  checkReposDir(),
102
113
  checkDiskSpace(),
103
114
  ];
115
+ // Conditional provider health checks
116
+ const ollamaCheck = await checkOllamaHealth();
117
+ if (ollamaCheck)
118
+ checks.push(ollamaCheck);
104
119
  console.log(chalk.bold(' System Checks:\n'));
105
120
  let hasFailure = false;
106
121
  for (const check of checks) {
@@ -113,13 +128,18 @@ function main() {
113
128
  // 3. Summary
114
129
  const depFailures = deps.filter(d => d.required && (!d.installed || !d.versionOk));
115
130
  const totalIssues = depFailures.length + checks.filter(c => !c.ok).length;
131
+ // 4. Talon home info
132
+ const home = getTalonHome();
133
+ const homeExists = fs.existsSync(home);
134
+ console.log(chalk.dim(`\n Talon home: ${home} ${homeExists ? '(exists)' : '(not created yet)'}`));
135
+ const cmd = commandPrefix();
116
136
  console.log();
117
137
  if (totalIssues === 0) {
118
138
  console.log(chalk.green(' All checks passed. Ready to run:\n'));
119
- console.log(chalk.cyan(' talon start URL=<url> REPO=<name>\n'));
139
+ console.log(chalk.cyan(` ${cmd} start URL=<url> REPO=<name>\n`));
120
140
  }
121
141
  else {
122
- console.log(chalk.yellow(` ${totalIssues} issue(s) found. Fix them and run talon doctor again.\n`));
142
+ console.log(chalk.yellow(` ${totalIssues} issue(s) found. Fix them and run ${cmd} doctor again.\n`));
123
143
  }
124
144
  process.exit(hasFailure || depFailures.length > 0 ? 1 : 0);
125
145
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repo-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-commands.d.ts","sourceRoot":"","sources":["../../src/cli/repo-commands.ts"],"names":[],"mappings":""}
@@ -0,0 +1,151 @@
1
+ // Copyright (C) 2025 PhenixStar (Alaa Qweider)
2
+ //
3
+ // This program is free software: you can redistribute it and/or modify
4
+ // it under the terms of the GNU Affero General Public License version 3
5
+ // as published by the Free Software Foundation.
6
+ /**
7
+ * Talon Repo Commands — manage target repositories in ~/.talon/repos/.
8
+ *
9
+ * Commands: add, list, remove.
10
+ * Invoked via `talon repo <subcommand>`.
11
+ */
12
+ import { execSync, spawnSync } from 'node:child_process';
13
+ import fs from 'node:fs';
14
+ import path from 'node:path';
15
+ import chalk from 'chalk';
16
+ import { getTalonHome, ensureHome, listRepos } from './talon-home.js';
17
+ function inferRepoName(url) {
18
+ const cleaned = url.replace(/\.git$/, '').replace(/\/$/, '');
19
+ const lastSegment = cleaned.split('/').pop();
20
+ return lastSegment || 'repo';
21
+ }
22
+ function validateName(name) {
23
+ if (name.includes('..') || name.includes('/') || name.includes('\\'))
24
+ return false;
25
+ if (name.startsWith('.') || name.length === 0)
26
+ return false;
27
+ return /^[a-zA-Z0-9._-]+$/.test(name);
28
+ }
29
+ function repoAdd(url, name) {
30
+ ensureHome();
31
+ const repoName = name || inferRepoName(url);
32
+ if (!validateName(repoName)) {
33
+ console.error(chalk.red(` ✗ Invalid repo name: ${repoName}`));
34
+ process.exit(1);
35
+ }
36
+ const reposDir = path.join(getTalonHome(), 'repos');
37
+ const targetPath = path.join(reposDir, repoName);
38
+ if (fs.existsSync(targetPath)) {
39
+ console.error(chalk.red(` ✗ Repo already exists: ${targetPath}`));
40
+ process.exit(1);
41
+ }
42
+ // Verify git is installed
43
+ try {
44
+ execSync('git --version', { stdio: 'pipe' });
45
+ }
46
+ catch {
47
+ console.error(chalk.red(' ✗ git is not installed. Install git and try again.'));
48
+ process.exit(1);
49
+ }
50
+ console.log(chalk.cyan(` Cloning ${url} → ${targetPath}\n`));
51
+ const result = spawnSync('git', ['clone', url, targetPath], { stdio: 'inherit' });
52
+ if (result.status !== 0) {
53
+ console.error(chalk.red('\n ✗ Clone failed.'));
54
+ process.exit(1);
55
+ }
56
+ // Create deliverables dir for the repo
57
+ const delivDir = path.join(targetPath, 'deliverables');
58
+ if (!fs.existsSync(delivDir)) {
59
+ fs.mkdirSync(delivDir, { recursive: true });
60
+ }
61
+ console.log(chalk.green(`\n ✓ Repo added: ${repoName}`));
62
+ console.log(chalk.dim(` Path: ${targetPath}`));
63
+ console.log(chalk.dim(` Use: talon start URL=<url> REPO=${repoName}\n`));
64
+ }
65
+ function repoList() {
66
+ const repos = listRepos();
67
+ if (repos.length === 0) {
68
+ console.log(chalk.yellow(' No repos found.\n'));
69
+ console.log(chalk.dim(' Add one with: talon repo add <git-url>\n'));
70
+ return;
71
+ }
72
+ console.log(chalk.bold('\n Repositories:\n'));
73
+ for (const repo of repos) {
74
+ const source = repo.source === 'home'
75
+ ? chalk.dim(' (home)')
76
+ : chalk.dim(' (local)');
77
+ console.log(` ${chalk.green('•')} ${chalk.bold(repo.name)}${source}`);
78
+ console.log(chalk.dim(` ${repo.path}`));
79
+ }
80
+ console.log();
81
+ }
82
+ function repoRemove(name) {
83
+ if (!validateName(name)) {
84
+ console.error(chalk.red(` ✗ Invalid repo name: ${name}`));
85
+ process.exit(1);
86
+ }
87
+ const repoPath = path.join(getTalonHome(), 'repos', name);
88
+ if (!fs.existsSync(repoPath)) {
89
+ console.error(chalk.red(` ✗ Repo not found in ~/.talon/repos/: ${name}`));
90
+ process.exit(1);
91
+ }
92
+ // Simple confirmation via stdin
93
+ process.stdout.write(chalk.yellow(` Remove ${repoPath}? [y/N] `));
94
+ // NOTE: Using sync readline for simplicity — this is a destructive CLI command
95
+ const fd = fs.openSync('/dev/stdin', 'rs');
96
+ const buf = Buffer.alloc(256);
97
+ const bytesRead = fs.readSync(fd, buf, 0, 256, null);
98
+ fs.closeSync(fd);
99
+ const answer = buf.subarray(0, bytesRead).toString().trim().toLowerCase();
100
+ if (answer !== 'y' && answer !== 'yes') {
101
+ console.log(chalk.dim(' Cancelled.\n'));
102
+ return;
103
+ }
104
+ fs.rmSync(repoPath, { recursive: true, force: true });
105
+ console.log(chalk.green(` ✓ Removed: ${name}\n`));
106
+ }
107
+ function showHelp() {
108
+ console.log(`
109
+ Usage: talon repo <command> [args]
110
+
111
+ Commands:
112
+ add <url> [name] Clone a repo to ~/.talon/repos/
113
+ list List all available repos
114
+ remove <name> Remove a repo from ~/.talon/repos/
115
+
116
+ Examples:
117
+ talon repo add https://github.com/org/app.git
118
+ talon repo add https://github.com/org/app.git my-app
119
+ talon repo list
120
+ talon repo remove my-app
121
+ `);
122
+ }
123
+ // === CLI Entry ===
124
+ const [subcommand, ...args] = process.argv.slice(2);
125
+ switch (subcommand) {
126
+ case 'add': {
127
+ if (args.length === 0) {
128
+ console.error(chalk.red(' ✗ URL required: talon repo add <url> [name]'));
129
+ process.exit(1);
130
+ }
131
+ repoAdd(args[0], args[1]);
132
+ break;
133
+ }
134
+ case 'list':
135
+ case 'ls':
136
+ repoList();
137
+ break;
138
+ case 'remove':
139
+ case 'rm': {
140
+ if (args.length === 0) {
141
+ console.error(chalk.red(' ✗ Name required: talon repo remove <name>'));
142
+ process.exit(1);
143
+ }
144
+ repoRemove(args[0]);
145
+ break;
146
+ }
147
+ default:
148
+ showHelp();
149
+ break;
150
+ }
151
+ //# sourceMappingURL=repo-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-commands.js","sourceRoot":"","sources":["../../src/cli/repo-commands.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export interface SummaryConfig {
10
10
  }>;
11
11
  }
12
12
  export declare function showSummary(config: SummaryConfig): void;
13
- export declare function showSuccess(envPath: string): void;
13
+ export declare function showSuccess(envPath: string, cmd?: string): void;
14
14
  export declare function showError(message: string): void;
15
15
  export interface DepStatus {
16
16
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"setup-renderer.d.ts","sourceRoot":"","sources":["../../src/cli/setup-renderer.ts"],"names":[],"mappings":"AAaA,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBvD;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CASjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAqBpE"}
1
+ {"version":3,"file":"setup-renderer.d.ts","sourceRoot":"","sources":["../../src/cli/setup-renderer.ts"],"names":[],"mappings":"AAaA,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBvD;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAU,GAAG,IAAI,CAShE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAqBpE"}
@@ -36,13 +36,13 @@ function maskValue(value) {
36
36
  return '••••••••';
37
37
  return value.slice(0, 4) + '••••' + value.slice(-4);
38
38
  }
39
- export function showSuccess(envPath) {
39
+ export function showSuccess(envPath, cmd = 'talon') {
40
40
  console.log();
41
41
  console.log(chalk.green(' ✓ Configuration saved to ') + chalk.bold(envPath));
42
42
  console.log();
43
43
  console.log(chalk.bold(' Next steps:'));
44
- console.log(chalk.dim(' 1.') + ' Clone a target repo: ' + chalk.cyan('git clone <url> ./repos/<name>'));
45
- console.log(chalk.dim(' 2.') + ' Run a pentest: ' + chalk.cyan('talon start URL=<url> REPO=<name>'));
44
+ console.log(chalk.dim(' 1.') + ' Add a target repo: ' + chalk.cyan(`${cmd} repo add <url>`));
45
+ console.log(chalk.dim(' 2.') + ' Run a pentest: ' + chalk.cyan(`${cmd} start URL=<url> REPO=<name>`));
46
46
  console.log(chalk.dim(' 3.') + ' Monitor progress: ' + chalk.cyan('http://localhost:8233'));
47
47
  console.log();
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-renderer.js","sourceRoot":"","sources":["../../src/cli/setup-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-renderer.js","sourceRoot":"","sources":["../../src/cli/setup-renderer.ts"],"names":[],"mappings":"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"}