@pensar/apex 0.0.113 → 0.0.114-canary.28a10efa
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/README.md +36 -36
- package/build/{agent-k1n19b3w.js → agent-tvfx07q6.js} +8 -8
- package/build/agent-y8ysvqeg.js +16 -0
- package/build/{auth-a0ftn8cb.js → auth-8emg998z.js} +4 -4
- package/build/{authentication-vjefzf37.js → authentication-s40c921z.js} +7 -7
- package/build/blackboxAgent-xt01ns0b.js +17 -0
- package/build/{blackboxPentest-26japf1w.js → blackboxPentest-dzj8adnk.js} +12 -12
- package/build/{cli-4sxvxwcb.js → cli-0xfq6e8r.js} +1 -1
- package/build/{cli-mnqb1xvt.js → cli-31v5wzk1.js} +1 -1
- package/build/{cli-yc2cs5cs.js → cli-4thpxq5q.js} +1 -1
- package/build/{cli-0v3p48tt.js → cli-65bp1912.js} +2 -2
- package/build/{cli-tat7hrek.js → cli-6967baew.js} +6 -6
- package/build/{cli-065mgjsh.js → cli-8n882axc.js} +2 -2
- package/build/{cli-7kpzf8kz.js → cli-gqy49b6s.js} +2 -2
- package/build/{cli-6nhtpv4g.js → cli-jzbdczka.js} +1 -1
- package/build/{cli-wqh6md2n.js → cli-kjgm60cg.js} +1 -1
- package/build/{cli-t7dpdkd6.js → cli-mynp9mm4.js} +10 -10
- package/build/{cli-j6qdxby9.js → cli-x8806nck.js} +2 -2
- package/build/{cli-qeg15dzj.js → cli-z0a48qhb.js} +1 -1
- package/build/{cli-g0r410cd.js → cli-z19gths3.js} +1 -1
- package/build/cli.js +20 -20
- package/build/{fixes-szq7tb0p.js → fixes-8tgqe03t.js} +4 -4
- package/build/{index-8dgs0erz.js → index-5s63xrwe.js} +2 -2
- package/build/{index-4ds7eh13.js → index-sse0bgp1.js} +6 -6
- package/build/{index-sr5w8v3d.js → index-vp8hh8jn.js} +21 -23
- package/build/{issues-7yvjwc2j.js → issues-ff820n76.js} +4 -4
- package/build/{logs-22ks7j0v.js → logs-m6gck8s8.js} +4 -4
- package/build/pentest-as63y0ej.js +25 -0
- package/build/{pentests-7a8s43nj.js → pentests-v8za91se.js} +4 -4
- package/build/{projects-0a1zfjgm.js → projects-cd8aa6g1.js} +4 -4
- package/build/{targetedPentest-qrcrtpzg.js → targetedPentest-m8mayqrk.js} +8 -8
- package/build/{uninstall-hp43qwmn.js → uninstall-qwf8es4w.js} +1 -1
- package/package.json +1 -1
- package/build/agent-cff8va32.js +0 -16
- package/build/blackboxAgent-dq8eany1.js +0 -17
- package/build/pentest-agm6pqh1.js +0 -25
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<h1 align="center">Pensar Apex</h1>
|
|
2
2
|
|
|
3
|
-
<p align="center">
|
|
3
|
+
<p align="center">
|
|
4
|
+
AI-powered penetration testing using autonomous agents — directly in your terminal. Run blackbox and whitebox pentests that explore, reason, and surface real vulnerabilities.
|
|
5
|
+
|
|
4
6
|
</p>
|
|
5
7
|
|
|
6
8
|
<p align="center">
|
|
@@ -20,52 +22,50 @@ Want to run from the cloud or integrate it with your CI/CD? See <a href="https:/
|
|
|
20
22
|
<img src="screenshot.png" alt="Pensar Apex Screenshot" width="800">
|
|
21
23
|
</p> -->
|
|
22
24
|
|
|
23
|
-
##
|
|
25
|
+
## What is Apex?
|
|
24
26
|
|
|
25
|
-
Apex
|
|
27
|
+
Apex is an autonomous penetration testing agent that runs directly in your terminal.
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
It doesn't wrap existing scanners or chain shell scripts. Apex deploys a **swarm of specialized AI agents** — each with domain expertise in reconnaissance, authentication analysis, exploitation, and code review — that coordinate a real penetration test against your application. Every finding comes with CVSS 4.0 scoring, CWE classification, evidence, and a validated proof-of-concept.
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
The result is a pentest that runs like `npm test` — but thinks like a red team.
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
## Why Apex?
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
Traditional scanners execute signatures. Apex executes a methodology.
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
- **Swarm architecture** - Specialized agents run in parallel across your attack surface, the same way a real red team divides and conquers. Up to 10 concurrent agents, each scoped to a specific objective.
|
|
38
|
+
- **Structured, auditable output** - Every vulnerability is automatically scored (CVSS 4.0), classified (CWE), and documented with evidence and remediation steps. No raw tool dumps.
|
|
39
|
+
- **Real exploitation, not guesswork** - Apex writes, runs, and validates proof-of-concept scripts. If the PoC doesn't succeed, it pivots to a different technique.
|
|
40
|
+
- **Blackbox and whitebox** - Test a live target with no source access, or analyze your codebase to map endpoints and test them against a running instance.
|
|
41
|
+
- **30+ built-in tools** - Browser automation, shell execution, HTTP requests, file analysis, web search for CVE lookups, authenticated crawling, and more. Optional Kali Linux container adds 25+ offensive security tools (nmap, sqlmap, hydra, hashcat, gobuster, and others).
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
## Two Modes
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
- Scan a newly launched domain or API
|
|
43
|
-
- Run quick security checks during development
|
|
44
|
-
- Identify exposed services or misconfigurations
|
|
45
|
+
### `/pentest` — Autonomous
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
Fire and forget. Apex runs a full engagement end-to-end: attack surface discovery, parallel swarm testing, and a structured report with findings in Markdown and JSON. No security expertise required.
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
### `/operator` — Interactive
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
Full control. Steer the agent step by step, approve each action, chain exploits manually, and dig deep into specific targets. Every tool is available. The approval gate holds until you say go.
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
Start with `/pentest` to get coverage, then reopen the session in `/operator` to investigate specific findings — all context carries over.
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
## Use Cases
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
/operator
|
|
58
|
-
```
|
|
57
|
+
### Developers
|
|
59
58
|
|
|
60
|
-
|
|
59
|
+
- Run `/pentest` before merging a PR — catch vulnerabilities as naturally as running tests
|
|
60
|
+
- Get actionable findings with severity scores, evidence, and suggested fixes — no security background needed
|
|
61
|
+
- Integrate into CI/CD via headless CLI commands or Pensar Console
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
- Manual exploitation of discovered vulnerabilities
|
|
64
|
-
- Tool orchestration across recon and exploitation phases
|
|
65
|
-
- Validation and reproduction of vulnerabilities
|
|
66
|
-
- Open-source security research / testing
|
|
63
|
+
### Security Engineers
|
|
67
64
|
|
|
68
|
-
|
|
65
|
+
- Deploy agent-driven swarm testing across large attack surfaces
|
|
66
|
+
- Use `/operator` mode for manual investigation, exploit chaining, and validation
|
|
67
|
+
- Automate repetitive testing workflows with persistent memory that accumulates across engagements
|
|
68
|
+
- Scale across teams and projects through Pensar Console
|
|
69
69
|
|
|
70
70
|
## Installation
|
|
71
71
|
|
|
@@ -82,18 +82,18 @@ brew tap pensarai/tap
|
|
|
82
82
|
brew install apex
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
#### Windows (PowerShell)
|
|
86
|
-
|
|
87
|
-
```powershell
|
|
88
|
-
irm https://www.pensarai.com/apex.ps1 | iex
|
|
89
|
-
```
|
|
90
|
-
|
|
91
85
|
#### npm
|
|
92
86
|
|
|
93
87
|
```bash
|
|
94
88
|
npm install -g @pensar/apex
|
|
95
89
|
```
|
|
96
90
|
|
|
91
|
+
#### Windows (PowerShell)
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
irm https://www.pensarai.com/apex.ps1 | iex
|
|
95
|
+
```
|
|
96
|
+
|
|
97
97
|
## Usage
|
|
98
98
|
|
|
99
99
|
Open the Apex TUI:
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
WhiteboxAttackSurfaceResultSchema
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-0xfq6e8r.js";
|
|
4
4
|
import {
|
|
5
5
|
OffensiveSecurityAgent
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
6
|
+
} from "./cli-mynp9mm4.js";
|
|
7
|
+
import"./cli-kjgm60cg.js";
|
|
8
8
|
import {
|
|
9
9
|
hasToolCall,
|
|
10
10
|
tool
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
11
|
+
} from "./cli-x8806nck.js";
|
|
12
|
+
import"./cli-4thpxq5q.js";
|
|
13
|
+
import"./cli-z0a48qhb.js";
|
|
14
|
+
import"./cli-jzbdczka.js";
|
|
15
|
+
import"./cli-31v5wzk1.js";
|
|
16
16
|
import"./cli-0tpx8khk.js";
|
|
17
17
|
import"./cli-7ckctq7a.js";
|
|
18
18
|
import"./cli-8rxa073f.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CodeAgent
|
|
3
|
+
} from "./cli-gqy49b6s.js";
|
|
4
|
+
import"./cli-mynp9mm4.js";
|
|
5
|
+
import"./cli-kjgm60cg.js";
|
|
6
|
+
import"./cli-x8806nck.js";
|
|
7
|
+
import"./cli-4thpxq5q.js";
|
|
8
|
+
import"./cli-z0a48qhb.js";
|
|
9
|
+
import"./cli-jzbdczka.js";
|
|
10
|
+
import"./cli-31v5wzk1.js";
|
|
11
|
+
import"./cli-0tpx8khk.js";
|
|
12
|
+
import"./cli-7ckctq7a.js";
|
|
13
|
+
import"./cli-8rxa073f.js";
|
|
14
|
+
export {
|
|
15
|
+
CodeAgent
|
|
16
|
+
};
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
pollWorkOSToken,
|
|
9
9
|
selectWorkspace,
|
|
10
10
|
startDeviceFlow
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-4thpxq5q.js";
|
|
12
12
|
import {
|
|
13
13
|
config,
|
|
14
14
|
getPensarApiUrl,
|
|
15
15
|
getPensarConsoleUrl
|
|
16
|
-
} from "./cli-
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
16
|
+
} from "./cli-z0a48qhb.js";
|
|
17
|
+
import"./cli-jzbdczka.js";
|
|
18
|
+
import"./cli-31v5wzk1.js";
|
|
19
19
|
import {
|
|
20
20
|
__require
|
|
21
21
|
} from "./cli-8rxa073f.js";
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
} from "./cli-6gtnyaqf.js";
|
|
4
4
|
import {
|
|
5
5
|
OffensiveSecurityAgent
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
6
|
+
} from "./cli-mynp9mm4.js";
|
|
7
|
+
import"./cli-kjgm60cg.js";
|
|
8
8
|
import {
|
|
9
9
|
hasToolCall
|
|
10
|
-
} from "./cli-
|
|
11
|
-
import"./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
10
|
+
} from "./cli-x8806nck.js";
|
|
11
|
+
import"./cli-4thpxq5q.js";
|
|
12
|
+
import"./cli-z0a48qhb.js";
|
|
13
|
+
import"./cli-jzbdczka.js";
|
|
14
|
+
import"./cli-31v5wzk1.js";
|
|
15
15
|
import"./cli-0tpx8khk.js";
|
|
16
16
|
import"./cli-7ckctq7a.js";
|
|
17
17
|
import"./cli-8rxa073f.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BlackboxAttackSurfaceAgent
|
|
3
|
+
} from "./cli-8n882axc.js";
|
|
4
|
+
import"./cli-6gtnyaqf.js";
|
|
5
|
+
import"./cli-mynp9mm4.js";
|
|
6
|
+
import"./cli-kjgm60cg.js";
|
|
7
|
+
import"./cli-x8806nck.js";
|
|
8
|
+
import"./cli-4thpxq5q.js";
|
|
9
|
+
import"./cli-z0a48qhb.js";
|
|
10
|
+
import"./cli-jzbdczka.js";
|
|
11
|
+
import"./cli-31v5wzk1.js";
|
|
12
|
+
import"./cli-0tpx8khk.js";
|
|
13
|
+
import"./cli-7ckctq7a.js";
|
|
14
|
+
import"./cli-8rxa073f.js";
|
|
15
|
+
export {
|
|
16
|
+
BlackboxAttackSurfaceAgent
|
|
17
|
+
};
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runPentestWorkflow
|
|
3
|
-
} from "./cli-
|
|
4
|
-
import"./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
3
|
+
} from "./cli-6967baew.js";
|
|
4
|
+
import"./cli-65bp1912.js";
|
|
5
|
+
import"./cli-gqy49b6s.js";
|
|
6
|
+
import"./cli-0xfq6e8r.js";
|
|
7
|
+
import"./cli-8n882axc.js";
|
|
8
8
|
import"./cli-6gtnyaqf.js";
|
|
9
|
-
import"./cli-
|
|
10
|
-
import"./cli-
|
|
11
|
-
import"./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
9
|
+
import"./cli-mynp9mm4.js";
|
|
10
|
+
import"./cli-kjgm60cg.js";
|
|
11
|
+
import"./cli-x8806nck.js";
|
|
12
|
+
import"./cli-4thpxq5q.js";
|
|
13
|
+
import"./cli-z0a48qhb.js";
|
|
14
|
+
import"./cli-jzbdczka.js";
|
|
15
|
+
import"./cli-31v5wzk1.js";
|
|
16
16
|
import"./cli-0tpx8khk.js";
|
|
17
17
|
import"./cli-7ckctq7a.js";
|
|
18
18
|
import"./cli-8rxa073f.js";
|
|
@@ -3,7 +3,7 @@ import { spawnSync } from "child_process";
|
|
|
3
3
|
// package.json
|
|
4
4
|
var package_default = {
|
|
5
5
|
name: "@pensar/apex",
|
|
6
|
-
version: "0.0.
|
|
6
|
+
version: "0.0.114-canary.28a10efa",
|
|
7
7
|
description: "AI-powered penetration testing CLI tool with terminal UI",
|
|
8
8
|
module: "src/tui/index.tsx",
|
|
9
9
|
main: "build/cli.js",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OffensiveSecurityAgent
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-mynp9mm4.js";
|
|
4
4
|
import {
|
|
5
5
|
exports_external,
|
|
6
6
|
init_zod
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-x8806nck.js";
|
|
8
8
|
|
|
9
9
|
// src/core/agents/specialized/pentest/agent.ts
|
|
10
10
|
init_zod();
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TargetedPentestAgent
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-65bp1912.js";
|
|
4
4
|
import {
|
|
5
5
|
CodeAgent
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-gqy49b6s.js";
|
|
7
7
|
import {
|
|
8
8
|
EndpointSchema
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-0xfq6e8r.js";
|
|
10
10
|
import {
|
|
11
11
|
BlackboxAttackSurfaceAgent
|
|
12
|
-
} from "./cli-
|
|
12
|
+
} from "./cli-8n882axc.js";
|
|
13
13
|
import {
|
|
14
14
|
CweEntrySchema,
|
|
15
15
|
FindingsRegistry
|
|
16
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-mynp9mm4.js";
|
|
17
17
|
import {
|
|
18
18
|
exports_external,
|
|
19
19
|
init_zod
|
|
20
|
-
} from "./cli-
|
|
20
|
+
} from "./cli-x8806nck.js";
|
|
21
21
|
|
|
22
22
|
// src/core/workflows/pentest.ts
|
|
23
23
|
import { existsSync as existsSync4, readdirSync as readdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "fs";
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./cli-6gtnyaqf.js";
|
|
4
4
|
import {
|
|
5
5
|
OffensiveSecurityAgent
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-mynp9mm4.js";
|
|
7
7
|
import {
|
|
8
8
|
hasToolCall,
|
|
9
9
|
stepCountIs
|
|
10
|
-
} from "./cli-
|
|
10
|
+
} from "./cli-x8806nck.js";
|
|
11
11
|
|
|
12
12
|
// src/core/agents/specialized/attackSurface/blackboxAgent.ts
|
|
13
13
|
import { join } from "path";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OffensiveSecurityAgent
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-mynp9mm4.js";
|
|
4
4
|
import {
|
|
5
5
|
stepCountIs
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-x8806nck.js";
|
|
7
7
|
|
|
8
8
|
// src/core/agents/specialized/codeAgent/prompts.ts
|
|
9
9
|
var CODE_AGENT_SYSTEM_PROMPT = `You are an expert coding agent with direct filesystem access. You will be given a specific objective — focus exclusively on completing it.
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
update,
|
|
18
18
|
write,
|
|
19
19
|
writeRaw
|
|
20
|
-
} from "./cli-
|
|
20
|
+
} from "./cli-kjgm60cg.js";
|
|
21
21
|
import {
|
|
22
22
|
_enum,
|
|
23
23
|
_null,
|
|
@@ -46,18 +46,18 @@ import {
|
|
|
46
46
|
union,
|
|
47
47
|
unknown,
|
|
48
48
|
zod_default
|
|
49
|
-
} from "./cli-
|
|
49
|
+
} from "./cli-x8806nck.js";
|
|
50
50
|
import {
|
|
51
51
|
signGatewayRequest
|
|
52
|
-
} from "./cli-
|
|
52
|
+
} from "./cli-4thpxq5q.js";
|
|
53
53
|
import {
|
|
54
54
|
config,
|
|
55
55
|
ensureValidToken,
|
|
56
56
|
getPensarApiUrl
|
|
57
|
-
} from "./cli-
|
|
57
|
+
} from "./cli-z0a48qhb.js";
|
|
58
58
|
import {
|
|
59
59
|
getCurrentVersion
|
|
60
|
-
} from "./cli-
|
|
60
|
+
} from "./cli-31v5wzk1.js";
|
|
61
61
|
import {
|
|
62
62
|
__commonJS,
|
|
63
63
|
__require,
|
|
@@ -90666,7 +90666,7 @@ When to use delegate_to_auth_subagent vs authenticate_session:
|
|
|
90666
90666
|
if (credentials) {
|
|
90667
90667
|
ctx.session.credentialManager.addFromAuthCredentials(credentials);
|
|
90668
90668
|
}
|
|
90669
|
-
const { runAuthenticationAgent } = await import("./authentication-
|
|
90669
|
+
const { runAuthenticationAgent } = await import("./authentication-s40c921z.js");
|
|
90670
90670
|
const subagentCallbacks = cbs ? {
|
|
90671
90671
|
onTextDelta: (d) => cbs.onTextDelta?.({ ...d, subagentId }),
|
|
90672
90672
|
onToolCall: (d) => cbs.onToolCall?.({ ...d, subagentId }),
|
|
@@ -91568,7 +91568,7 @@ should be passed directly to spawn_pentest_swarm for deep testing.`,
|
|
|
91568
91568
|
});
|
|
91569
91569
|
if (cwd) {
|
|
91570
91570
|
try {
|
|
91571
|
-
const { WhiteboxAttackSurfaceAgent } = await import("./agent-
|
|
91571
|
+
const { WhiteboxAttackSurfaceAgent } = await import("./agent-tvfx07q6.js");
|
|
91572
91572
|
const agent = new WhiteboxAttackSurfaceAgent({
|
|
91573
91573
|
codebasePath: cwd,
|
|
91574
91574
|
model: ctx.model,
|
|
@@ -91620,7 +91620,7 @@ should be passed directly to spawn_pentest_swarm for deep testing.`,
|
|
|
91620
91620
|
}
|
|
91621
91621
|
}
|
|
91622
91622
|
try {
|
|
91623
|
-
const { BlackboxAttackSurfaceAgent } = await import("./blackboxAgent-
|
|
91623
|
+
const { BlackboxAttackSurfaceAgent } = await import("./blackboxAgent-xt01ns0b.js");
|
|
91624
91624
|
const agent = new BlackboxAttackSurfaceAgent({
|
|
91625
91625
|
target,
|
|
91626
91626
|
model: ctx.model,
|
|
@@ -91699,7 +91699,7 @@ Pass every target you want tested — the swarm handles concurrency automaticall
|
|
|
91699
91699
|
toolCallDescription: exports_external.string().describe("A concise, human-readable description of what this tool call is doing")
|
|
91700
91700
|
}),
|
|
91701
91701
|
execute: async ({ targets }) => {
|
|
91702
|
-
const { runPentestSwarm, DEFAULT_CONCURRENCY } = await import("./pentest-
|
|
91702
|
+
const { runPentestSwarm, DEFAULT_CONCURRENCY } = await import("./pentest-as63y0ej.js");
|
|
91703
91703
|
if (!ctx.model) {
|
|
91704
91704
|
return {
|
|
91705
91705
|
success: false,
|
|
@@ -91826,7 +91826,7 @@ Returns an array of results with the text output from each agent.`,
|
|
|
91826
91826
|
});
|
|
91827
91827
|
}
|
|
91828
91828
|
async function runSingleCodingAgent(ctx, codebasePath, objective, agentIndex, name) {
|
|
91829
|
-
const { CodeAgent } = await import("./agent-
|
|
91829
|
+
const { CodeAgent } = await import("./agent-y8ysvqeg.js");
|
|
91830
91830
|
const subagentId = `coding-agent-${agentIndex}`;
|
|
91831
91831
|
ctx.subagentCallbacks?.onSubagentSpawn?.({
|
|
91832
91832
|
subagentId,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
signGatewayRequest
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-4thpxq5q.js";
|
|
4
4
|
import {
|
|
5
5
|
config,
|
|
6
6
|
ensureValidToken,
|
|
7
7
|
getPensarGatewayUrl
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-z0a48qhb.js";
|
|
9
9
|
import {
|
|
10
10
|
getModelInfo
|
|
11
11
|
} from "./cli-0tpx8khk.js";
|
package/build/cli.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import"./cli-
|
|
4
|
-
import"./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
3
|
+
import"./cli-x8806nck.js";
|
|
4
|
+
import"./cli-4thpxq5q.js";
|
|
5
|
+
import"./cli-z0a48qhb.js";
|
|
6
|
+
import"./cli-jzbdczka.js";
|
|
7
7
|
import {
|
|
8
8
|
package_default
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-31v5wzk1.js";
|
|
10
10
|
import"./cli-0tpx8khk.js";
|
|
11
11
|
import"./cli-7ckctq7a.js";
|
|
12
12
|
import {
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
// package.json
|
|
17
17
|
var package_default2 = {
|
|
18
18
|
name: "@pensar/apex",
|
|
19
|
-
version: "0.0.
|
|
19
|
+
version: "0.0.114-canary.28a10efa",
|
|
20
20
|
description: "AI-powered penetration testing CLI tool with terminal UI",
|
|
21
21
|
module: "src/tui/index.tsx",
|
|
22
22
|
main: "build/cli.js",
|
|
@@ -351,9 +351,9 @@ Global options:
|
|
|
351
351
|
async function runPentest() {
|
|
352
352
|
const { config: config2 } = await import("./main-2483qzbq.js").then((m)=>__toESM(m.default,1));
|
|
353
353
|
config2();
|
|
354
|
-
const { runPentestAgent } = await import("./blackboxPentest-
|
|
355
|
-
const { sessions } = await import("./index-
|
|
356
|
-
const { config: appConfig } = await import("./index-
|
|
354
|
+
const { runPentestAgent } = await import("./blackboxPentest-dzj8adnk.js");
|
|
355
|
+
const { sessions } = await import("./index-sse0bgp1.js");
|
|
356
|
+
const { config: appConfig } = await import("./index-5s63xrwe.js");
|
|
357
357
|
const { getDefaultModelForConfig } = await import("./utils-9fhmzzzh.js");
|
|
358
358
|
const target = getArgRequired("--target");
|
|
359
359
|
const cwd = getArg("--cwd");
|
|
@@ -408,9 +408,9 @@ Report: ${reportPath}` : ""}`);
|
|
|
408
408
|
async function runTargetedPentest() {
|
|
409
409
|
const { config: config2 } = await import("./main-2483qzbq.js").then((m)=>__toESM(m.default,1));
|
|
410
410
|
config2();
|
|
411
|
-
const { runTargetedPentestAgent } = await import("./targetedPentest-
|
|
412
|
-
const { sessions } = await import("./index-
|
|
413
|
-
const { config: appConfig } = await import("./index-
|
|
411
|
+
const { runTargetedPentestAgent } = await import("./targetedPentest-m8mayqrk.js");
|
|
412
|
+
const { sessions } = await import("./index-sse0bgp1.js");
|
|
413
|
+
const { config: appConfig } = await import("./index-5s63xrwe.js");
|
|
414
414
|
const { getDefaultModelForConfig } = await import("./utils-9fhmzzzh.js");
|
|
415
415
|
const target = getArgRequired("--target");
|
|
416
416
|
const objectives = getAllArgs("--objective");
|
|
@@ -472,25 +472,25 @@ if (command === "version" || command === "--version" || command === "-v") {
|
|
|
472
472
|
await runTargetedPentest();
|
|
473
473
|
} else if (command === "auth") {
|
|
474
474
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
475
|
-
await import("./auth-
|
|
475
|
+
await import("./auth-8emg998z.js");
|
|
476
476
|
} else if (command === "uninstall") {
|
|
477
477
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
478
|
-
await import("./uninstall-
|
|
478
|
+
await import("./uninstall-qwf8es4w.js");
|
|
479
479
|
} else if (command === "projects") {
|
|
480
480
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
481
|
-
await import("./projects-
|
|
481
|
+
await import("./projects-cd8aa6g1.js");
|
|
482
482
|
} else if (command === "pentests") {
|
|
483
483
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
484
|
-
await import("./pentests-
|
|
484
|
+
await import("./pentests-v8za91se.js");
|
|
485
485
|
} else if (command === "issues") {
|
|
486
486
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
487
|
-
await import("./issues-
|
|
487
|
+
await import("./issues-ff820n76.js");
|
|
488
488
|
} else if (command === "fixes") {
|
|
489
489
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
490
|
-
await import("./fixes-
|
|
490
|
+
await import("./fixes-8tgqe03t.js");
|
|
491
491
|
} else if (command === "logs") {
|
|
492
492
|
process.argv = [process.argv[0], process.argv[1], ...args.slice(1)];
|
|
493
|
-
await import("./logs-
|
|
493
|
+
await import("./logs-m6gck8s8.js");
|
|
494
494
|
} else if (command === "doctor") {
|
|
495
495
|
const { runDoctor } = await import("./doctor-b7612pzw.js");
|
|
496
496
|
await runDoctor();
|
|
@@ -500,7 +500,7 @@ if (command === "version" || command === "--version" || command === "-v") {
|
|
|
500
500
|
console.error("All other commands work with Node \u2014 run 'pensar --help'.");
|
|
501
501
|
process.exit(1);
|
|
502
502
|
}
|
|
503
|
-
await import("./index-
|
|
503
|
+
await import("./index-vp8hh8jn.js");
|
|
504
504
|
} else {
|
|
505
505
|
console.error(`Error: Unknown command '${command}'`);
|
|
506
506
|
console.error();
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getFix,
|
|
4
4
|
listFixes
|
|
5
|
-
} from "./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
5
|
+
} from "./cli-z19gths3.js";
|
|
6
|
+
import"./cli-z0a48qhb.js";
|
|
7
|
+
import"./cli-jzbdczka.js";
|
|
8
|
+
import"./cli-31v5wzk1.js";
|
|
9
9
|
import"./cli-8rxa073f.js";
|
|
10
10
|
|
|
11
11
|
// src/cli/fixes.ts
|
|
@@ -17,17 +17,17 @@ import {
|
|
|
17
17
|
update,
|
|
18
18
|
write,
|
|
19
19
|
writeRaw
|
|
20
|
-
} from "./cli-
|
|
20
|
+
} from "./cli-kjgm60cg.js";
|
|
21
21
|
import {
|
|
22
22
|
init_zod,
|
|
23
23
|
zod_default
|
|
24
|
-
} from "./cli-
|
|
25
|
-
import"./cli-
|
|
26
|
-
import"./cli-
|
|
27
|
-
import"./cli-
|
|
24
|
+
} from "./cli-x8806nck.js";
|
|
25
|
+
import"./cli-4thpxq5q.js";
|
|
26
|
+
import"./cli-z0a48qhb.js";
|
|
27
|
+
import"./cli-jzbdczka.js";
|
|
28
28
|
import {
|
|
29
29
|
getCurrentVersion
|
|
30
|
-
} from "./cli-
|
|
30
|
+
} from "./cli-31v5wzk1.js";
|
|
31
31
|
import"./cli-0tpx8khk.js";
|
|
32
32
|
import"./cli-7ckctq7a.js";
|
|
33
33
|
import {
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
readExecutionMetrics,
|
|
9
9
|
runPentestWorkflow,
|
|
10
10
|
writeExecutionMetrics
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
11
|
+
} from "./cli-6967baew.js";
|
|
12
|
+
import"./cli-65bp1912.js";
|
|
13
|
+
import"./cli-gqy49b6s.js";
|
|
14
|
+
import"./cli-0xfq6e8r.js";
|
|
15
|
+
import"./cli-8n882axc.js";
|
|
16
16
|
import"./cli-6gtnyaqf.js";
|
|
17
17
|
import {
|
|
18
18
|
ALL_TOOL_NAMES,
|
|
@@ -23,17 +23,17 @@ import {
|
|
|
23
23
|
createInitialOperatorState,
|
|
24
24
|
normalizeMessages,
|
|
25
25
|
sessions
|
|
26
|
-
} from "./cli-
|
|
26
|
+
} from "./cli-mynp9mm4.js";
|
|
27
27
|
import {
|
|
28
28
|
createToolsetState,
|
|
29
29
|
init_toolset,
|
|
30
30
|
read,
|
|
31
31
|
write
|
|
32
|
-
} from "./cli-
|
|
32
|
+
} from "./cli-kjgm60cg.js";
|
|
33
33
|
import {
|
|
34
34
|
buildAuthConfig,
|
|
35
35
|
stepCountIs
|
|
36
|
-
} from "./cli-
|
|
36
|
+
} from "./cli-x8806nck.js";
|
|
37
37
|
import {
|
|
38
38
|
disconnect,
|
|
39
39
|
fetchWorkspaces,
|
|
@@ -44,18 +44,18 @@ import {
|
|
|
44
44
|
selectWorkspace,
|
|
45
45
|
startDeviceFlow,
|
|
46
46
|
validateGateway
|
|
47
|
-
} from "./cli-
|
|
47
|
+
} from "./cli-4thpxq5q.js";
|
|
48
48
|
import {
|
|
49
49
|
config,
|
|
50
50
|
getPensarApiUrl,
|
|
51
51
|
getPensarConsoleUrl
|
|
52
|
-
} from "./cli-
|
|
52
|
+
} from "./cli-z0a48qhb.js";
|
|
53
53
|
import {
|
|
54
54
|
update
|
|
55
|
-
} from "./cli-
|
|
55
|
+
} from "./cli-jzbdczka.js";
|
|
56
56
|
import {
|
|
57
57
|
checkForUpdate
|
|
58
|
-
} from "./cli-
|
|
58
|
+
} from "./cli-31v5wzk1.js";
|
|
59
59
|
import {
|
|
60
60
|
AVAILABLE_MODELS
|
|
61
61
|
} from "./cli-0tpx8khk.js";
|
|
@@ -59551,25 +59551,17 @@ function markdownToStyledText(content, colors2) {
|
|
|
59551
59551
|
]);
|
|
59552
59552
|
}
|
|
59553
59553
|
}
|
|
59554
|
-
// src/tui/components/shared/message-utils.ts
|
|
59555
|
-
import { createHash } from "crypto";
|
|
59556
|
-
|
|
59557
59554
|
// src/tui/components/shared/type-guards.ts
|
|
59558
59555
|
function isToolMessage(msg) {
|
|
59559
59556
|
return msg.role === "tool" && typeof msg.toolCallId === "string" && typeof msg.toolName === "string" && typeof msg.status === "string";
|
|
59560
59557
|
}
|
|
59561
59558
|
|
|
59562
59559
|
// src/tui/components/shared/message-utils.ts
|
|
59563
|
-
function hashContent(content) {
|
|
59564
|
-
return createHash("sha256").update(content).digest("hex").slice(0, 8);
|
|
59565
|
-
}
|
|
59566
59560
|
function getStableMessageKey(item, contextId = "root") {
|
|
59567
59561
|
if (isToolMessage(item)) {
|
|
59568
59562
|
return `${contextId}-tool-${item.toolCallId}`;
|
|
59569
59563
|
}
|
|
59570
|
-
|
|
59571
|
-
const contentHash = hashContent(content);
|
|
59572
|
-
return `${contextId}-${item.role}-${item.createdAt.getTime()}-${contentHash}`;
|
|
59564
|
+
return `${contextId}-${item.role}-${item.createdAt.getTime()}`;
|
|
59573
59565
|
}
|
|
59574
59566
|
function extractStreamableContent(args) {
|
|
59575
59567
|
if (typeof args.content === "string")
|
|
@@ -62403,11 +62395,17 @@ function AgentCardGrid({
|
|
|
62403
62395
|
}) {
|
|
62404
62396
|
const { colors: colors2 } = useTheme();
|
|
62405
62397
|
const scrollRef = useRef11(null);
|
|
62398
|
+
const agentsRef = useRef11(agents);
|
|
62399
|
+
agentsRef.current = agents;
|
|
62400
|
+
const prevFocusedIndexRef = useRef11(focusedIndex);
|
|
62406
62401
|
useEffect20(() => {
|
|
62407
|
-
|
|
62402
|
+
if (prevFocusedIndexRef.current === focusedIndex)
|
|
62403
|
+
return;
|
|
62404
|
+
prevFocusedIndexRef.current = focusedIndex;
|
|
62405
|
+
const agent = agentsRef.current[focusedIndex];
|
|
62408
62406
|
if (agent)
|
|
62409
62407
|
scrollToChild(scrollRef.current, agent.id);
|
|
62410
|
-
}, [focusedIndex
|
|
62408
|
+
}, [focusedIndex]);
|
|
62411
62409
|
const rows = useMemo18(() => {
|
|
62412
62410
|
const result = [];
|
|
62413
62411
|
for (let i = 0;i < agents.length; i += gridColumns) {
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
getIssue,
|
|
4
4
|
listIssues,
|
|
5
5
|
updateIssue
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
9
|
-
import"./cli-
|
|
6
|
+
} from "./cli-z19gths3.js";
|
|
7
|
+
import"./cli-z0a48qhb.js";
|
|
8
|
+
import"./cli-jzbdczka.js";
|
|
9
|
+
import"./cli-31v5wzk1.js";
|
|
10
10
|
import"./cli-8rxa073f.js";
|
|
11
11
|
|
|
12
12
|
// src/cli/issues.ts
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
listAgentLogs,
|
|
4
4
|
searchAgentLogs
|
|
5
|
-
} from "./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
5
|
+
} from "./cli-z19gths3.js";
|
|
6
|
+
import"./cli-z0a48qhb.js";
|
|
7
|
+
import"./cli-jzbdczka.js";
|
|
8
|
+
import"./cli-31v5wzk1.js";
|
|
9
9
|
import"./cli-8rxa073f.js";
|
|
10
10
|
|
|
11
11
|
// src/cli/logs.ts
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_CONCURRENCY,
|
|
3
|
+
runPentestSwarm,
|
|
4
|
+
runPentestWorkflow
|
|
5
|
+
} from "./cli-6967baew.js";
|
|
6
|
+
import"./cli-65bp1912.js";
|
|
7
|
+
import"./cli-gqy49b6s.js";
|
|
8
|
+
import"./cli-0xfq6e8r.js";
|
|
9
|
+
import"./cli-8n882axc.js";
|
|
10
|
+
import"./cli-6gtnyaqf.js";
|
|
11
|
+
import"./cli-mynp9mm4.js";
|
|
12
|
+
import"./cli-kjgm60cg.js";
|
|
13
|
+
import"./cli-x8806nck.js";
|
|
14
|
+
import"./cli-4thpxq5q.js";
|
|
15
|
+
import"./cli-z0a48qhb.js";
|
|
16
|
+
import"./cli-jzbdczka.js";
|
|
17
|
+
import"./cli-31v5wzk1.js";
|
|
18
|
+
import"./cli-0tpx8khk.js";
|
|
19
|
+
import"./cli-7ckctq7a.js";
|
|
20
|
+
import"./cli-8rxa073f.js";
|
|
21
|
+
export {
|
|
22
|
+
runPentestWorkflow,
|
|
23
|
+
runPentestSwarm,
|
|
24
|
+
DEFAULT_CONCURRENCY
|
|
25
|
+
};
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
dispatchPentest,
|
|
4
4
|
getScan,
|
|
5
5
|
listScans
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
9
|
-
import"./cli-
|
|
6
|
+
} from "./cli-z19gths3.js";
|
|
7
|
+
import"./cli-z0a48qhb.js";
|
|
8
|
+
import"./cli-jzbdczka.js";
|
|
9
|
+
import"./cli-31v5wzk1.js";
|
|
10
10
|
import"./cli-8rxa073f.js";
|
|
11
11
|
|
|
12
12
|
// src/cli/pentests.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import {
|
|
3
3
|
listProjects
|
|
4
|
-
} from "./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
4
|
+
} from "./cli-z19gths3.js";
|
|
5
|
+
import"./cli-z0a48qhb.js";
|
|
6
|
+
import"./cli-jzbdczka.js";
|
|
7
|
+
import"./cli-31v5wzk1.js";
|
|
8
8
|
import"./cli-8rxa073f.js";
|
|
9
9
|
|
|
10
10
|
// src/cli/projects.ts
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TargetedPentestAgent
|
|
3
|
-
} from "./cli-
|
|
4
|
-
import"./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
9
|
-
import"./cli-
|
|
10
|
-
import"./cli-
|
|
3
|
+
} from "./cli-65bp1912.js";
|
|
4
|
+
import"./cli-mynp9mm4.js";
|
|
5
|
+
import"./cli-kjgm60cg.js";
|
|
6
|
+
import"./cli-x8806nck.js";
|
|
7
|
+
import"./cli-4thpxq5q.js";
|
|
8
|
+
import"./cli-z0a48qhb.js";
|
|
9
|
+
import"./cli-jzbdczka.js";
|
|
10
|
+
import"./cli-31v5wzk1.js";
|
|
11
11
|
import"./cli-0tpx8khk.js";
|
|
12
12
|
import"./cli-7ckctq7a.js";
|
|
13
13
|
import"./cli-8rxa073f.js";
|
package/package.json
CHANGED
package/build/agent-cff8va32.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CodeAgent
|
|
3
|
-
} from "./cli-7kpzf8kz.js";
|
|
4
|
-
import"./cli-t7dpdkd6.js";
|
|
5
|
-
import"./cli-wqh6md2n.js";
|
|
6
|
-
import"./cli-j6qdxby9.js";
|
|
7
|
-
import"./cli-yc2cs5cs.js";
|
|
8
|
-
import"./cli-qeg15dzj.js";
|
|
9
|
-
import"./cli-6nhtpv4g.js";
|
|
10
|
-
import"./cli-mnqb1xvt.js";
|
|
11
|
-
import"./cli-0tpx8khk.js";
|
|
12
|
-
import"./cli-7ckctq7a.js";
|
|
13
|
-
import"./cli-8rxa073f.js";
|
|
14
|
-
export {
|
|
15
|
-
CodeAgent
|
|
16
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
BlackboxAttackSurfaceAgent
|
|
3
|
-
} from "./cli-065mgjsh.js";
|
|
4
|
-
import"./cli-6gtnyaqf.js";
|
|
5
|
-
import"./cli-t7dpdkd6.js";
|
|
6
|
-
import"./cli-wqh6md2n.js";
|
|
7
|
-
import"./cli-j6qdxby9.js";
|
|
8
|
-
import"./cli-yc2cs5cs.js";
|
|
9
|
-
import"./cli-qeg15dzj.js";
|
|
10
|
-
import"./cli-6nhtpv4g.js";
|
|
11
|
-
import"./cli-mnqb1xvt.js";
|
|
12
|
-
import"./cli-0tpx8khk.js";
|
|
13
|
-
import"./cli-7ckctq7a.js";
|
|
14
|
-
import"./cli-8rxa073f.js";
|
|
15
|
-
export {
|
|
16
|
-
BlackboxAttackSurfaceAgent
|
|
17
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DEFAULT_CONCURRENCY,
|
|
3
|
-
runPentestSwarm,
|
|
4
|
-
runPentestWorkflow
|
|
5
|
-
} from "./cli-tat7hrek.js";
|
|
6
|
-
import"./cli-0v3p48tt.js";
|
|
7
|
-
import"./cli-7kpzf8kz.js";
|
|
8
|
-
import"./cli-4sxvxwcb.js";
|
|
9
|
-
import"./cli-065mgjsh.js";
|
|
10
|
-
import"./cli-6gtnyaqf.js";
|
|
11
|
-
import"./cli-t7dpdkd6.js";
|
|
12
|
-
import"./cli-wqh6md2n.js";
|
|
13
|
-
import"./cli-j6qdxby9.js";
|
|
14
|
-
import"./cli-yc2cs5cs.js";
|
|
15
|
-
import"./cli-qeg15dzj.js";
|
|
16
|
-
import"./cli-6nhtpv4g.js";
|
|
17
|
-
import"./cli-mnqb1xvt.js";
|
|
18
|
-
import"./cli-0tpx8khk.js";
|
|
19
|
-
import"./cli-7ckctq7a.js";
|
|
20
|
-
import"./cli-8rxa073f.js";
|
|
21
|
-
export {
|
|
22
|
-
runPentestWorkflow,
|
|
23
|
-
runPentestSwarm,
|
|
24
|
-
DEFAULT_CONCURRENCY
|
|
25
|
-
};
|