pentesting 0.8.0 → 0.8.2
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 +45 -354
- package/dist/{auto-update-FWXZGK5Z.js → auto-update-NUVK35LG.js} +2 -2
- package/dist/{chunk-5QWIIPHH.js → chunk-IYELGZKK.js} +10 -1
- package/dist/{chunk-AIBIXGJI.js → chunk-N27ISRFF.js} +1 -1
- package/dist/index.js +6 -5
- package/dist/{update-OD3N757W.js → update-VGGUNUWQ.js} +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,391 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
4
|
-
<img src="docs/assets/pentesting-logo.png" alt="Pentesting" width="400">
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<strong>인간처럼 생각하고 실행하는 자율 침투 테스트 AI 에이전트</strong>
|
|
9
|
-
</p>
|
|
10
|
-
|
|
11
|
-
<p align="center">
|
|
12
|
-
<a href="https://www.npmjs.com/package/pentesting"><img src="https://img.shields.io/npm/v/pentesting.svg?style=for-the-badge" alt="npm version"></a>
|
|
13
|
-
<a href="https://github.com/agnusdei1207/pentesting/actions"><img src="https://img.shields.io/github/actions/workflow/status/agnusdei1207/pentesting/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
|
|
14
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="MIT License"></a>
|
|
15
|
-
</p>
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 💡 철학: 왜 Pentesting인가?
|
|
20
|
-
|
|
21
|
-
### 문제
|
|
22
|
-
|
|
23
|
-
기존 침투 테스트는 **도구 중심**입니다:
|
|
24
|
-
- nmap으로 스캔하고, 결과를 보고
|
|
25
|
-
- sqlmap으로 테스트하고, 다른 도구로 넘어가고
|
|
26
|
-
- 각 도구의 출력을 해석하고, 다음 단계를 결정하고
|
|
27
|
-
|
|
28
|
-
이것은 **반복적이고, 시간 소모적이며, 전문가 지식이 필요**합니다.
|
|
29
|
-
|
|
30
|
-
### 해결책
|
|
31
|
-
|
|
32
|
-
Pentesting은 **사고 중심**입니다:
|
|
33
|
-
- "이 웹 애플리케이션을 침투하라"
|
|
34
|
-
- 에이전트가 스스로 도구를 선택하고, 결과를 분석하고, 다음 전략을 결정합니다
|
|
1
|
+
<div align="center">
|
|
35
2
|
|
|
36
3
|
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
4
|
+
██████╗ ███████╗███╗ ██╗████████╗███████╗███████╗████████╗██╗███╗ ██╗ ██████╗
|
|
5
|
+
██╔══██╗██╔════╝████╗ ██║╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██║████╗ ██║██╔════╝
|
|
6
|
+
██████╔╝█████╗ ██╔██╗ ██║ ██║ █████╗ ███████╗ ██║ ██║██╔██╗ ██║██║ ███╗
|
|
7
|
+
██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██╔══╝ ╚════██║ ██║ ██║██║╚██╗██║██║ ██║
|
|
8
|
+
██║ ███████╗██║ ╚████║ ██║ ███████╗███████║ ██║ ██║██║ ╚████║╚██████╔╝
|
|
9
|
+
╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝
|
|
42
10
|
```
|
|
43
11
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
1. **AI는 도구가 아니라 동료입니다**
|
|
47
|
-
- 명령을 실행하는 것이 아니라 목표를 달성합니다
|
|
48
|
-
- 실패하면 스스로 다른 방법을 찾습니다
|
|
12
|
+
**Autonomous AI Penetration Testing Agent**
|
|
49
13
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- 거짓 양성을 적극적으로 필터링
|
|
14
|
+
[](https://www.npmjs.com/package/pentesting)
|
|
15
|
+
[](https://opensource.org/licenses/MIT)
|
|
53
16
|
|
|
54
|
-
|
|
55
|
-
- "Think → Act → Observe → Reflect" 루프
|
|
56
|
-
- 막다른 길에서 시간여행으로 복구 (D-Mail)
|
|
17
|
+
</div>
|
|
57
18
|
|
|
58
19
|
---
|
|
59
20
|
|
|
60
|
-
##
|
|
61
|
-
|
|
62
|
-
Pentesting은 [ReAct 패턴](https://arxiv.org/abs/2210.03629)을 핵심으로 합니다:
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
66
|
-
│ │
|
|
67
|
-
│ 🤔 THINK │
|
|
68
|
-
│ "타겟이 Apache 2.4.49를 실행 중이다. │
|
|
69
|
-
│ Path Traversal 취약점(CVE-2021-41773)이 있을 수 있다." │
|
|
70
|
-
│ │
|
|
71
|
-
│ ⚡ ACT │
|
|
72
|
-
│ [nmap_scan] target=192.168.1.1 ports=80,443 │
|
|
73
|
-
│ │
|
|
74
|
-
│ 👁️ OBSERVE │
|
|
75
|
-
│ "포트 80에서 Apache/2.4.49 확인. │
|
|
76
|
-
│ mod_cgi 활성화됨." │
|
|
77
|
-
│ │
|
|
78
|
-
│ 💭 REFLECT │
|
|
79
|
-
│ "CVE-2021-41773 가능성 높음. 익스플로잇 시도해야 함. │
|
|
80
|
-
│ 신뢰도: 85%. 다음: exploit-researcher에게 위임." │
|
|
81
|
-
│ │
|
|
82
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 🚀 빠른 시작
|
|
88
|
-
|
|
89
|
-
### 설치
|
|
21
|
+
## Quick Start
|
|
90
22
|
|
|
91
23
|
```bash
|
|
92
24
|
npm install -g pentesting
|
|
93
|
-
# 또는
|
|
94
|
-
npx pentesting
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### API 키 설정
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
export ANTHROPIC_API_KEY=sk-ant-xxx
|
|
101
|
-
```
|
|
102
25
|
|
|
103
|
-
|
|
26
|
+
# GLM example
|
|
27
|
+
export PENTEST_API_KEY="your_api_key"
|
|
28
|
+
export PENTEST_BASE_URL="https://api.z.ai/api/anthropic"
|
|
29
|
+
export PENTEST_MODEL="glm-4.7"
|
|
104
30
|
|
|
105
|
-
```bash
|
|
106
31
|
pentesting
|
|
107
32
|
```
|
|
108
33
|
|
|
109
|
-
### 첫 번째 공격
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
🎯 Pentesting > scan 192.168.1.1
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
에이전트가 자동으로:
|
|
116
|
-
1. 포트 스캔 수행
|
|
117
|
-
2. 서비스 버전 확인
|
|
118
|
-
3. 취약점 검색
|
|
119
|
-
4. 익스플로잇 시도
|
|
120
|
-
5. 결과 보고
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 🏗️ 아키텍처
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
128
|
-
│ PENTESTING SOUL │
|
|
129
|
-
│ │
|
|
130
|
-
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
|
|
131
|
-
│ │ ReAct Loop │ │ D-Mail │ │ Planner │ │
|
|
132
|
-
│ │ │ │ System │ │ │ │
|
|
133
|
-
│ │ Think/Act/ │ │ Time Travel │ │ Attack Plan │ │
|
|
134
|
-
│ │ Observe/ │ │ Checkpoint │ │ Generation │ │
|
|
135
|
-
│ │ Reflect │ │ Rollback │ │ │ │
|
|
136
|
-
│ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ │
|
|
137
|
-
│ │ │ │ │
|
|
138
|
-
│ └──────────────────┼──────────────────┘ │
|
|
139
|
-
│ │ │
|
|
140
|
-
│ ┌──────────────────────────▼──────────────────────────────────┐ │
|
|
141
|
-
│ │ RUNTIME │ │
|
|
142
|
-
│ │ Context │ Toolset │ Memory │ Approval │ │
|
|
143
|
-
│ └──────────────────────────────────────────────────────────────┘ │
|
|
144
|
-
└──────────────────────────────┬──────────────────────────────────────┘
|
|
145
|
-
│
|
|
146
|
-
▼
|
|
147
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
148
|
-
│ LABOR MARKET │
|
|
149
|
-
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
150
|
-
│ │ Recon │ │ Exploit │ │ Web │ │
|
|
151
|
-
│ │ Agent │ │ Agent │ │ Agent │ │
|
|
152
|
-
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
|
153
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### 핵심 컴포넌트
|
|
157
|
-
|
|
158
|
-
| 컴포넌트 | 역할 |
|
|
159
|
-
|---------|------|
|
|
160
|
-
| **PentestingSoul** | 메인 에이전트 루프, 모든 것을 조율 |
|
|
161
|
-
| **ReActLoop** | Think/Act/Observe/Reflect 패턴 구현 |
|
|
162
|
-
| **DMailSystem** | 시간여행 디버깅, 체크포인트 롤백 |
|
|
163
|
-
| **Planner** | 공격 계획 생성 및 관리 |
|
|
164
|
-
| **LaborMarket** | 전문 서브에이전트 할당 |
|
|
165
|
-
| **ContextManager** | 대화 히스토리 압축 |
|
|
166
|
-
| **ConfidenceFilter** | 80%+ 신뢰도 필터링 |
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## ⏱️ D-Mail: 시간여행 디버깅
|
|
171
|
-
|
|
172
|
-
막다른 길에 도달했을 때, 에이전트는 과거로 메시지를 보내 다른 경로를 시도합니다:
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
현재: SQLi 시도 5회 모두 실패
|
|
176
|
-
↓
|
|
177
|
-
D-Mail 전송: "SQLi 실패함. XSS 시도할 것"
|
|
178
|
-
↓
|
|
179
|
-
체크포인트로 롤백
|
|
180
|
-
↓
|
|
181
|
-
새로운 전략으로 재시도
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
// 에이전트 내부 동작
|
|
186
|
-
if (isStuck) {
|
|
187
|
-
dmailSystem.sendDMail(
|
|
188
|
-
'SQLi approach failed. Try XSS instead.',
|
|
189
|
-
lastCheckpoint,
|
|
190
|
-
'Stuck after 5 SQLi attempts'
|
|
191
|
-
);
|
|
192
|
-
throw new BackToTheFuture('Time travel initiated', lastCheckpoint);
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 👥 멀티 에이전트 시스템
|
|
199
|
-
|
|
200
|
-
### 전문 에이전트
|
|
201
|
-
|
|
202
|
-
| 에이전트 | 전문 분야 | 도구 |
|
|
203
|
-
|---------|-----------|------|
|
|
204
|
-
| **target-explorer** | 정찰, 정보 수집 | nmap, whois, dig |
|
|
205
|
-
| **exploit-researcher** | 취약점 연구 | searchsploit, cve-search |
|
|
206
|
-
| **web-hacker** | 웹 애플리케이션 | sqlmap, nuclei |
|
|
207
|
-
| **crypto-analyst** | 암호 분석 | hashcat, john |
|
|
208
|
-
|
|
209
|
-
### 에이전트 위임
|
|
210
|
-
|
|
211
|
-
```
|
|
212
|
-
Main Agent: "웹 서버에서 SQLi 가능성 발견"
|
|
213
|
-
↓
|
|
214
|
-
└──→ [web-hacker] "로그인 폼에서 SQLi 테스트"
|
|
215
|
-
↓
|
|
216
|
-
└──→ 결과 반환: "SQLi 확인, 데이터베이스 덤프 가능"
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### 병렬 Swarm 실행
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
const swarm = new AgentSwarm(runtime);
|
|
223
|
-
|
|
224
|
-
const results = await swarm.executeParallel([
|
|
225
|
-
{ agentName: 'web-hacker', task: 'Test SQLi on login' },
|
|
226
|
-
{ agentName: 'web-hacker', task: 'Test XSS on search' },
|
|
227
|
-
{ agentName: 'target-explorer', task: 'Find hidden endpoints' },
|
|
228
|
-
]);
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 🔒 신뢰도 기반 필터링
|
|
234
|
-
|
|
235
|
-
**80% 이상 신뢰도만 보고합니다.**
|
|
236
|
-
|
|
237
|
-
```
|
|
238
|
-
신뢰도 계산:
|
|
239
|
-
기본값: 50%
|
|
240
|
-
+ 증거 수 × 10% (최대 30%)
|
|
241
|
-
+ 익스플로잇 가능: +15%
|
|
242
|
-
+ 심각도 높음: +5-10%
|
|
243
|
-
+ CVE 참조: +10%
|
|
244
|
-
= 최종 신뢰도
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
```typescript
|
|
248
|
-
const finding = createFinding({
|
|
249
|
-
title: 'SQL Injection in login',
|
|
250
|
-
description: 'Time-based blind SQLi',
|
|
251
|
-
severity: 'critical',
|
|
252
|
-
evidence: ['sqlmap output', 'response time analysis', 'CVE-2021-xxxx'],
|
|
253
|
-
exploitable: true,
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
// 신뢰도: 50 + 30 + 15 + 10 + 10 = 115% → 100%
|
|
257
|
-
// → 보고됨 ✅
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## 📋 명령어
|
|
263
|
-
|
|
264
|
-
| 명령어 | 설명 |
|
|
265
|
-
|--------|------|
|
|
266
|
-
| `scan <target>` | 타겟 스캔 및 정찰 |
|
|
267
|
-
| `exploit <target>` | 취약점 익스플로잇 |
|
|
268
|
-
| `report` | 발견 사항 보고서 생성 |
|
|
269
|
-
| `status` | 현재 진행 상황 |
|
|
270
|
-
| `plan` | 공격 계획 조회 |
|
|
271
|
-
| `agents` | 사용 가능한 에이전트 목록 |
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## ⚙️ 설정
|
|
276
|
-
|
|
277
|
-
```typescript
|
|
278
|
-
// pentesting.config.ts
|
|
279
|
-
export default {
|
|
280
|
-
// LLM 설정
|
|
281
|
-
model: 'claude-opus-4-0',
|
|
282
|
-
maxTokens: 8096,
|
|
283
|
-
|
|
284
|
-
// 에이전트 설정
|
|
285
|
-
maxStepsPerTurn: 50,
|
|
286
|
-
confidenceThreshold: 80,
|
|
287
|
-
|
|
288
|
-
// 컨텍스트 설정
|
|
289
|
-
maxContextTokens: 150000,
|
|
290
|
-
compactionThreshold: 0.8,
|
|
291
|
-
|
|
292
|
-
// 승인 설정
|
|
293
|
-
yoloMode: false, // true면 모든 도구 자동 승인
|
|
294
|
-
};
|
|
295
|
-
```
|
|
296
|
-
|
|
297
34
|
---
|
|
298
35
|
|
|
299
|
-
##
|
|
36
|
+
## Environment Variables
|
|
300
37
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
✓ Context
|
|
308
|
-
✓ AgentRegistry
|
|
309
|
-
✓ ConfidenceFilter
|
|
310
|
-
✓ ReActLoop
|
|
311
|
-
✓ DMailSystem
|
|
312
|
-
✓ MessageBus
|
|
313
|
-
✓ MemoryManager
|
|
314
|
-
✓ Integration Tests
|
|
315
|
-
```
|
|
38
|
+
| Variable | Required | Default | Description |
|
|
39
|
+
|----------|----------|---------|-------------|
|
|
40
|
+
| `PENTEST_API_KEY` | ✅ | - | API key (`ANTHROPIC_API_KEY` also works) |
|
|
41
|
+
| `PENTEST_BASE_URL` | | - | Custom API endpoint URL |
|
|
42
|
+
| `PENTEST_MODEL` | | `claude-sonnet-4-20250514` | LLM model name |
|
|
43
|
+
| `PENTEST_MAX_TOKENS` | | `16384` | Max response tokens |
|
|
316
44
|
|
|
317
45
|
---
|
|
318
46
|
|
|
319
|
-
##
|
|
47
|
+
## Features
|
|
320
48
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
│ ├── dmail.ts # 시간여행 시스템
|
|
327
|
-
│ ├── planner.ts # 계획 시스템
|
|
328
|
-
│ ├── swarm.ts # 병렬 에이전트
|
|
329
|
-
│ ├── confidence.ts # 신뢰도 필터링
|
|
330
|
-
│ └── ...
|
|
331
|
-
├── tools/ # 도구 정의
|
|
332
|
-
├── agents/ # 에이전트 스펙
|
|
333
|
-
├── experience/ # 학습 시스템
|
|
334
|
-
└── prompts/ # 프롬프트 템플릿
|
|
335
|
-
```
|
|
49
|
+
- **Soul Architecture** - ReAct pattern: Think → Act → Observe → Reflect
|
|
50
|
+
- **9 Specialized Agents** - Recon, Exploit, PrivEsc, Web, Crypto...
|
|
51
|
+
- **80%+ Confidence Filter** - Only high-confidence findings
|
|
52
|
+
- **D-Mail Time Travel** - Auto-recovery from dead ends
|
|
53
|
+
- **50+ Security Tools** - nmap, sqlmap, gobuster, hydra...
|
|
336
54
|
|
|
337
55
|
---
|
|
338
56
|
|
|
339
|
-
##
|
|
57
|
+
## Commands
|
|
340
58
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
59
|
+
| Command | Description |
|
|
60
|
+
|---------|-------------|
|
|
61
|
+
| `/target <ip>` | Set target |
|
|
62
|
+
| `/start [objective]` | Start autonomous pentest |
|
|
63
|
+
| `/findings` | Show findings |
|
|
64
|
+
| `/status` | Status |
|
|
65
|
+
| `/yolo` | Toggle auto-approve |
|
|
66
|
+
| `/help` | Help |
|
|
345
67
|
|
|
346
68
|
---
|
|
347
69
|
|
|
348
|
-
##
|
|
70
|
+
## Documentation
|
|
349
71
|
|
|
350
|
-
|
|
351
|
-
- [
|
|
352
|
-
- [
|
|
353
|
-
- [x] 멀티 에이전트 시스템
|
|
354
|
-
- [x] 신뢰도 필터링
|
|
355
|
-
- [x] 컨텍스트 압축
|
|
356
|
-
|
|
357
|
-
### v1.1 (다음)
|
|
358
|
-
- [ ] 영구 벡터 메모리
|
|
359
|
-
- [ ] 세션 영속성
|
|
360
|
-
- [ ] 강화된 훅 시스템
|
|
361
|
-
|
|
362
|
-
### v1.2 (계획)
|
|
363
|
-
- [ ] Docker 샌드박스
|
|
364
|
-
- [ ] 스킬 마켓플레이스
|
|
365
|
-
- [ ] 인증 프로필 관리
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## 🤝 기여
|
|
370
|
-
|
|
371
|
-
기여를 환영합니다! [CONTRIBUTING.md](CONTRIBUTING.md)를 참고하세요.
|
|
72
|
+
- [Architecture](docs/architecture.md)
|
|
73
|
+
- [API Reference](docs/api-reference.md)
|
|
74
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
372
75
|
|
|
373
76
|
---
|
|
374
77
|
|
|
375
|
-
##
|
|
78
|
+
## License
|
|
376
79
|
|
|
377
|
-
MIT
|
|
378
|
-
|
|
379
|
-
---
|
|
380
|
-
|
|
381
|
-
## ⚠️ 면책 조항
|
|
382
|
-
|
|
383
|
-
이 도구는 **합법적인 보안 테스트 목적**으로만 사용해야 합니다.
|
|
384
|
-
허가 없이 시스템을 테스트하는 것은 불법입니다.
|
|
385
|
-
사용자는 모든 행동에 대한 책임을 집니다.
|
|
386
|
-
|
|
387
|
-
---
|
|
80
|
+
MIT
|
|
388
81
|
|
|
389
|
-
|
|
390
|
-
<sub>Built with 🧠 by <a href="https://github.com/agnusdei1207">agnusdei1207</a></sub>
|
|
391
|
-
</p>
|
|
82
|
+
⚠️ **For authorized security testing only.**
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
readVersionCache,
|
|
9
9
|
semverTuple,
|
|
10
10
|
writeVersionCache
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-N27ISRFF.js";
|
|
12
|
+
import "./chunk-IYELGZKK.js";
|
|
13
13
|
import "./chunk-3RG5ZIWI.js";
|
|
14
14
|
export {
|
|
15
15
|
checkForUpdate,
|
|
@@ -186,7 +186,7 @@ var SENSITIVE_TOOLS = [
|
|
|
186
186
|
|
|
187
187
|
// src/config/constants.ts
|
|
188
188
|
import { createRequire } from "module";
|
|
189
|
-
var pkgVersion = "0.
|
|
189
|
+
var pkgVersion = "0.8.0";
|
|
190
190
|
try {
|
|
191
191
|
const require2 = createRequire(import.meta.url);
|
|
192
192
|
const pkg = require2("../../package.json");
|
|
@@ -200,6 +200,14 @@ var LLM_API_KEY = process.env.PENTEST_API_KEY || process.env.ANTHROPIC_API_KEY |
|
|
|
200
200
|
var LLM_BASE_URL = process.env.PENTEST_BASE_URL || void 0;
|
|
201
201
|
var LLM_MODEL = process.env.PENTEST_MODEL || "claude-sonnet-4-20250514";
|
|
202
202
|
var LLM_MAX_TOKENS = parseInt(process.env.PENTEST_MAX_TOKENS || "16384", 10);
|
|
203
|
+
var CONTEXT_WINDOW = {
|
|
204
|
+
maxTokens: 2e5,
|
|
205
|
+
// Claude's context window size
|
|
206
|
+
compactionThreshold: 15e4,
|
|
207
|
+
// Trigger compaction at 75% usage
|
|
208
|
+
reservedTokens: 4e3
|
|
209
|
+
// Reserved for system prompt
|
|
210
|
+
};
|
|
203
211
|
var AGENT_CONFIG = {
|
|
204
212
|
maxIterations: 200,
|
|
205
213
|
maxToolCallsPerIteration: 10,
|
|
@@ -240,5 +248,6 @@ export {
|
|
|
240
248
|
LLM_BASE_URL,
|
|
241
249
|
LLM_MODEL,
|
|
242
250
|
LLM_MAX_TOKENS,
|
|
251
|
+
CONTEXT_WINDOW,
|
|
243
252
|
AGENT_CONFIG
|
|
244
253
|
};
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
APP_DESCRIPTION,
|
|
7
7
|
APP_VERSION,
|
|
8
8
|
CLI_COMMAND,
|
|
9
|
+
CONTEXT_WINDOW,
|
|
9
10
|
LLM_API_KEY,
|
|
10
11
|
LLM_BASE_URL,
|
|
11
12
|
LLM_MAX_TOKENS,
|
|
@@ -15,7 +16,7 @@ import {
|
|
|
15
16
|
PHASE_STATUS,
|
|
16
17
|
THOUGHT_TYPE,
|
|
17
18
|
TOOL_NAME
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-IYELGZKK.js";
|
|
19
20
|
import {
|
|
20
21
|
__require
|
|
21
22
|
} from "./chunk-3RG5ZIWI.js";
|
|
@@ -3162,7 +3163,7 @@ function getHistoryTokens(messages) {
|
|
|
3162
3163
|
return total + estimateTokens(content);
|
|
3163
3164
|
}, 0);
|
|
3164
3165
|
}
|
|
3165
|
-
function needsCompaction(messages, maxTokens =
|
|
3166
|
+
function needsCompaction(messages, maxTokens = CONTEXT_WINDOW.compactionThreshold, minMessages = 10) {
|
|
3166
3167
|
if (messages.length < minMessages) return false;
|
|
3167
3168
|
return getHistoryTokens(messages) > maxTokens;
|
|
3168
3169
|
}
|
|
@@ -3218,7 +3219,7 @@ var ContextManager = class {
|
|
|
3218
3219
|
client;
|
|
3219
3220
|
constructor(client, options) {
|
|
3220
3221
|
this.client = client;
|
|
3221
|
-
this.maxTokens = options?.maxTokens ??
|
|
3222
|
+
this.maxTokens = options?.maxTokens ?? CONTEXT_WINDOW.compactionThreshold;
|
|
3222
3223
|
this.warningThreshold = options?.warningThreshold ?? 12e4;
|
|
3223
3224
|
}
|
|
3224
3225
|
/**
|
|
@@ -6983,7 +6984,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6983
6984
|
setCheckpointCount(contextManagerRef.current?.getCheckpoints().length || 0);
|
|
6984
6985
|
}
|
|
6985
6986
|
});
|
|
6986
|
-
import("./auto-update-
|
|
6987
|
+
import("./auto-update-NUVK35LG.js").then(({ checkForUpdateAsync, formatUpdateNotification }) => {
|
|
6987
6988
|
checkForUpdateAsync().then((result) => {
|
|
6988
6989
|
if (result.hasUpdate) {
|
|
6989
6990
|
const notification = formatUpdateNotification(result);
|
|
@@ -7686,7 +7687,7 @@ ${list}`);
|
|
|
7686
7687
|
return;
|
|
7687
7688
|
case "update":
|
|
7688
7689
|
try {
|
|
7689
|
-
const { checkForUpdate, formatUpdateNotification, doUpdate } = await import("./update-
|
|
7690
|
+
const { checkForUpdate, formatUpdateNotification, doUpdate } = await import("./update-VGGUNUWQ.js");
|
|
7690
7691
|
const result = checkForUpdate(true);
|
|
7691
7692
|
if (result.hasUpdate) {
|
|
7692
7693
|
const notification = formatUpdateNotification(result);
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
readVersionCache,
|
|
9
9
|
semverTuple,
|
|
10
10
|
writeVersionCache
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-N27ISRFF.js";
|
|
12
|
+
import "./chunk-IYELGZKK.js";
|
|
13
13
|
import "./chunk-3RG5ZIWI.js";
|
|
14
14
|
export {
|
|
15
15
|
checkForUpdate,
|