pentesting 0.7.49 β†’ 0.8.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.
Files changed (2) hide show
  1. package/README.md +291 -248
  2. package/package.json +5 -2
package/README.md CHANGED
@@ -1,348 +1,391 @@
1
- <div align="center">
1
+ # 🎯 Pentesting
2
2
 
3
- ```
4
- β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
5
- β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•
6
- β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ•—
7
- β–ˆβ–ˆβ•”β•β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘
8
- β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•
9
- β•šβ•β• β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•β• β•šβ•β• β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•šβ•β• β•šβ•β•β•šβ•β• β•šβ•β•β•β• β•šβ•β•β•β•β•β•
10
- ```
11
-
12
- **Autonomous AI Penetration Testing Agent**
3
+ <p align="center">
4
+ <img src="docs/assets/pentesting-logo.png" alt="Pentesting" width="400">
5
+ </p>
13
6
 
14
- [![npm version](https://badge.fury.io/js/pentesting.svg)](https://www.npmjs.com/package/pentesting)
15
- [![Docker](https://img.shields.io/badge/Docker-pentesting--tools-blue)](https://hub.docker.com/r/agnusdei1207/pentesting-tools)
7
+ <p align="center">
8
+ <strong>μΈκ°„μ²˜λŸΌ μƒκ°ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 자율 침투 ν…ŒμŠ€νŠΈ AI μ—μ΄μ „νŠΈ</strong>
9
+ </p>
16
10
 
17
- </div>
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>
18
16
 
19
17
  ---
20
18
 
21
- ## πŸš€ Quick Start
22
-
23
- ```bash
24
- # Install
25
- npm install -g pentesting
26
-
27
- # Configure
28
- export PENTEST_API_KEY=your_api_key
29
- export PENTEST_BASE_URL=https://your-api-endpoint.com/v1
30
- export PENTEST_MODEL=your-model-name
31
-
32
- # Run
33
- pentesting
34
- ```
19
+ ## πŸ’‘ μ² ν•™: μ™œ Pentesting인가?
35
20
 
36
- ---
21
+ ### 문제
37
22
 
38
- ## 🧠 Philosophy: Think Like a Hacker
23
+ κΈ°μ‘΄ 침투 ν…ŒμŠ€νŠΈλŠ” **도ꡬ 쀑심**μž…λ‹ˆλ‹€:
24
+ - nmap으둜 μŠ€μΊ”ν•˜κ³ , κ²°κ³Όλ₯Ό 보고
25
+ - sqlmap으둜 ν…ŒμŠ€νŠΈν•˜κ³ , λ‹€λ₯Έ λ„κ΅¬λ‘œ λ„˜μ–΄κ°€κ³ 
26
+ - 각 λ„κ΅¬μ˜ 좜λ ₯을 ν•΄μ„ν•˜κ³ , λ‹€μŒ 단계λ₯Ό κ²°μ •ν•˜κ³ 
39
27
 
40
- **Pentesting is not a brute-force tool.** It's an intelligent agent that thinks strategically.
28
+ 이것은 **반볡적이고, μ‹œκ°„ μ†Œλͺ¨μ μ΄λ©°, μ „λ¬Έκ°€ 지식이 ν•„μš”**ν•©λ‹ˆλ‹€.
41
29
 
42
- ### Strategic Decision Framework
30
+ ### ν•΄κ²°μ±…
43
31
 
44
- Every action is evaluated using:
32
+ Pentesting은 **사고 쀑심**μž…λ‹ˆλ‹€:
33
+ - "이 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μΉ¨νˆ¬ν•˜λΌ"
34
+ - μ—μ΄μ „νŠΈκ°€ 슀슀둜 도ꡬλ₯Ό μ„ νƒν•˜κ³ , κ²°κ³Όλ₯Ό λΆ„μ„ν•˜κ³ , λ‹€μŒ μ „λž΅μ„ κ²°μ •ν•©λ‹ˆλ‹€
45
35
 
46
36
  ```
47
- Value = (Probability Γ— CVSS Impact) / Time Cost
48
- ```
37
+ Before (도ꡬ 쀑심):
38
+ Human β†’ [κ²°μ •] β†’ nmap β†’ [뢄석] β†’ [κ²°μ •] β†’ sqlmap β†’ [뢄석] β†’ ...
49
39
 
50
- The agent only executes actions with **confidence >50%**. Below that, it finds a better approach.
51
-
52
- ### Self-Reflection Before Every Action
40
+ After (사고 쀑심):
41
+ Human β†’ "μΉ¨νˆ¬ν•˜λΌ" β†’ Pentesting Agent β†’ [μžλ™ν™”λœ 사고-행동 루프] β†’ λ³΄κ³ μ„œ
42
+ ```
53
43
 
54
- Before running any tool, the agent asks:
55
- - "What exactly am I trying to learn?"
56
- - "Is this the FASTEST way to get that information?"
57
- - "Have I already tried this? What happened?"
58
- - "Is there a simpler approach?"
44
+ ### 핡심 신념
59
45
 
60
- ### Mandatory Fallback Strategy
46
+ 1. **AIλŠ” 도ꡬ가 μ•„λ‹ˆλΌ λ™λ£Œμž…λ‹ˆλ‹€**
47
+ - λͺ…령을 μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•©λ‹ˆλ‹€
48
+ - μ‹€νŒ¨ν•˜λ©΄ 슀슀둜 λ‹€λ₯Έ 방법을 μ°ΎμŠ΅λ‹ˆλ‹€
61
49
 
62
- When a tool fails, the agent immediately tries alternatives:
50
+ 2. **μ‹ λ’°ν•  수 μžˆλŠ” 결과만 λ³΄κ³ ν•©λ‹ˆλ‹€**
51
+ - 80% 이상 μ‹ λ’°λ„μ˜ 발견만 보고
52
+ - κ±°μ§“ 양성을 적극적으둜 필터링
63
53
 
64
- | Task | Primary | Fallback 1 | Fallback 2 |
65
- |------|---------|------------|------------|
66
- | Subdomain | subfinder | ffuf | amass |
67
- | Directory | gobuster | ffuf | dirsearch |
68
- | Port Scan | rustscan | nmap | masscan |
54
+ 3. **인간 μ „λ¬Έκ°€μ˜ 사고 과정을 λͺ¨λ°©ν•©λ‹ˆλ‹€**
55
+ - "Think β†’ Act β†’ Observe β†’ Reflect" 루프
56
+ - 막닀λ₯Έ κΈΈμ—μ„œ μ‹œκ°„μ—¬ν–‰μœΌλ‘œ 볡ꡬ (D-Mail)
69
57
 
70
58
  ---
71
59
 
72
- ## πŸ”₯ Why Pentesting?
60
+ ## 🧠 ReAct: μƒκ°ν•˜κ³  ν–‰λ™ν•˜κΈ°
73
61
 
74
- | Feature | Traditional Tools | Pentesting Agent |
75
- |---------|-------------------|------------------|
76
- | Decision Making | Manual | AI-driven with confidence scoring |
77
- | Tool Selection | You choose | Auto-selects based on context |
78
- | Failure Handling | You retry | Auto-fallback to alternatives |
79
- | Attack Planning | Manual prioritization | CVSS-based priority matrix |
80
- | Context Awareness | None | Remembers all findings |
81
- | Reporting | Manual | Auto-generated findings |
62
+ Pentesting은 [ReAct νŒ¨ν„΄](https://arxiv.org/abs/2210.03629)을 ν•΅μ‹¬μœΌλ‘œ ν•©λ‹ˆλ‹€:
82
63
 
83
- ---
84
-
85
- ## ✨ Core Capabilities
86
-
87
- - **10-Phase Attack Workflow**: Recon β†’ Scan β†’ Enum β†’ Vuln Analysis β†’ Exploitation β†’ PrivEsc β†’ Pivot β†’ Persist β†’ Exfil β†’ Report
88
- - **Auto Docker Management**: Pulls and starts tool container automatically
89
- - **Multi-Target Attack**: Attack multiple targets sequentially
90
- - **Real-time Feedback**: See thinking process, tool calls, results live
91
- - **Session Persistence**: Save/resume attack sessions
92
- - **Context Compaction**: Automatic history summarization
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
+ ```
93
84
 
94
85
  ---
95
86
 
96
- ## πŸ“– CLI Commands
87
+ ## πŸš€ λΉ λ₯Έ μ‹œμž‘
97
88
 
98
- ### Target Management
99
- ```bash
100
- /target <domain|ip> Set primary target
101
- /target add <t> Add target to list
102
- /target list Show all targets (β˜… = primary)
103
- /target rm <t> Remove target from list
104
- /target set <t> Set as primary target
105
- /target clear Remove ALL targets
106
- ```
89
+ ### μ„€μΉ˜
107
90
 
108
- ### Attack Execution
109
91
  ```bash
110
- /start [objective] Start pentest on primary target
111
- /start all Attack ALL registered targets sequentially
112
- /stop Stop current operation
113
- /status Show status report
92
+ npm install -g pentesting
93
+ # λ˜λŠ”
94
+ npx pentesting
114
95
  ```
115
96
 
116
- ### Session Management
117
- ```bash
118
- /checkpoint [desc] Create checkpoint with optional description
119
- /checkpoints List all checkpoints
120
- /undo Undo to last checkpoint
121
- /revert <id> Revert to specific checkpoint
122
- /compact Compact context (keep last 3 messages)
123
- /sessions List saved sessions
124
- /resume [id] Resume a session
125
- /replay Show session recordings
126
- ```
97
+ ### API ν‚€ μ„€μ •
127
98
 
128
- ### Skills & Extras
129
99
  ```bash
130
- /skills List available skills
131
- /update Check for updates
132
- /update now Install update
100
+ export ANTHROPIC_API_KEY=sk-ant-xxx
133
101
  ```
134
102
 
135
- ### Findings & Reports
103
+ ### μ‹€ν–‰
104
+
136
105
  ```bash
137
- /findings Show discovered findings
138
- /report Generate pentest report
106
+ pentesting
139
107
  ```
140
108
 
141
- ### Utility
142
- ```bash
143
- /paste Paste from clipboard (text or image)
144
- /yolo Toggle auto-approve mode
145
- /clear Clear screen
146
- /exit Exit
147
- /y /n /ya Approve/Deny/Always approve (for pending tools)
109
+ ### 첫 번째 곡격
110
+
111
+ ```
112
+ 🎯 Pentesting > scan 192.168.1.1
148
113
  ```
149
114
 
150
- ---
115
+ μ—μ΄μ „νŠΈκ°€ μžλ™μœΌλ‘œ:
116
+ 1. 포트 μŠ€μΊ” μˆ˜ν–‰
117
+ 2. μ„œλΉ„μŠ€ 버전 확인
118
+ 3. 취약점 검색
119
+ 4. μ΅μŠ€ν”Œλ‘œμž‡ μ‹œλ„
120
+ 5. 결과 보고
151
121
 
152
- ## Multi-Target Workflow
122
+ ---
153
123
 
154
- ```bash
155
- # Start pentesting CLI
156
- pentesting
124
+ ## πŸ—οΈ μ•„ν‚€ν…μ²˜
157
125
 
158
- # Register multiple targets
159
- /target add example1.com
160
- /target add example2.com
161
- /target add 192.168.1.1
162
- /target add internal.corp
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
+ ```
163
155
 
164
- # View registered targets
165
- /target list
166
- Targets (4):
167
- 1. * example1.com (primary)
168
- 2. example2.com
169
- 3. 192.168.1.1
170
- 4. internal.corp
156
+ ### 핡심 μ»΄ν¬λ„ŒνŠΈ
171
157
 
172
- # Attack all targets sequentially
173
- /start all
158
+ | μ»΄ν¬λ„ŒνŠΈ | μ—­ν•  |
159
+ |---------|------|
160
+ | **PentestingSoul** | 메인 μ—μ΄μ „νŠΈ 루프, λͺ¨λ“  것을 쑰율 |
161
+ | **ReActLoop** | Think/Act/Observe/Reflect νŒ¨ν„΄ κ΅¬ν˜„ |
162
+ | **DMailSystem** | μ‹œκ°„μ—¬ν–‰ 디버깅, 체크포인트 λ‘€λ°± |
163
+ | **Planner** | 곡격 κ³„νš 생성 및 관리 |
164
+ | **LaborMarket** | μ „λ¬Έ μ„œλΈŒμ—μ΄μ „νŠΈ ν• λ‹Ή |
165
+ | **ContextManager** | λŒ€ν™” νžˆμŠ€ν† λ¦¬ μ••μΆ• |
166
+ | **ConfidenceFilter** | 80%+ 신뒰도 필터링 |
174
167
 
175
- Starting multi-target attack on 4 targets
168
+ ---
176
169
 
177
- --- [1/4] example1.com ---
178
- Session: session-1707325423
179
- ... reconnaissance & exploitation ...
170
+ ## ⏱️ D-Mail: μ‹œκ°„μ—¬ν–‰ 디버깅
180
171
 
181
- --- [2/4] example2.com ---
182
- ...
172
+ 막닀λ₯Έ 길에 λ„λ‹¬ν–ˆμ„ λ•Œ, μ—μ΄μ „νŠΈλŠ” 과거둜 λ©”μ‹œμ§€λ₯Ό 보내 λ‹€λ₯Έ 경둜λ₯Ό μ‹œλ„ν•©λ‹ˆλ‹€:
183
173
 
184
- # Press ESC to stop between targets
185
- Stopped at target 2/4
174
+ ```
175
+ ν˜„μž¬: SQLi μ‹œλ„ 5회 λͺ¨λ‘ μ‹€νŒ¨
176
+ ↓
177
+ D-Mail 전솑: "SQLi μ‹€νŒ¨ν•¨. XSS μ‹œλ„ν•  것"
178
+ ↓
179
+ 체크포인트둜 둀백
180
+ ↓
181
+ μƒˆλ‘œμš΄ μ „λž΅μœΌλ‘œ μž¬μ‹œλ„
182
+ ```
186
183
 
187
- Complete
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
+ }
188
194
  ```
189
195
 
190
196
  ---
191
197
 
192
- ## πŸ€– AI Agents
193
-
194
- Pentesting automatically switches between specialized AI agents based on the current attack phase:
195
-
196
- | Phase | Agent | What it does |
197
- |-------|-------|--------------|
198
- | Reconnaissance | **Recon Agent** | Discovers hosts, ports, services, subdomains |
199
- | Web Scanning | **Web Agent** | Tests for OWASP Top 10, SQLi, XSS, SSRF |
200
- | Exploitation | **Exploit Agent** | Researches CVEs, selects and runs exploits |
201
- | Privilege Escalation | **PrivEsc Agent** | Finds SUID, sudo misconfigs, kernel exploits |
202
- | Data Extraction | **Crypto Agent** | Cracks hashes, analyzes encryption |
198
+ ## πŸ‘₯ λ©€ν‹° μ—μ΄μ „νŠΈ μ‹œμŠ€ν…œ
203
199
 
204
- ### How it works
200
+ ### μ „λ¬Έ μ—μ΄μ „νŠΈ
205
201
 
206
- 1. **You set a target** β†’ Agent starts in Recon mode
207
- 2. **Finds web services** β†’ Automatically switches to Web Agent
208
- 3. **Discovers vulnerability** β†’ Switches to Exploit Agent
209
- 4. **Gets shell access** β†’ Switches to PrivEsc Agent
210
- 5. **Finds password hashes** β†’ Crypto Agent takes over
202
+ | μ—μ΄μ „νŠΈ | μ „λ¬Έ λΆ„μ•Ό | 도ꡬ |
203
+ |---------|-----------|------|
204
+ | **target-explorer** | μ •μ°°, 정보 μˆ˜μ§‘ | nmap, whois, dig |
205
+ | **exploit-researcher** | 취약점 연ꡬ | searchsploit, cve-search |
206
+ | **web-hacker** | μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ | sqlmap, nuclei |
207
+ | **crypto-analyst** | μ•”ν˜Έ 뢄석 | hashcat, john |
211
208
 
212
- > No manual agent switching needed. The system automatically picks the best agent for each situation.
209
+ ### μ—μ΄μ „νŠΈ μœ„μž„
213
210
 
214
- ---
211
+ ```
212
+ Main Agent: "μ›Ή μ„œλ²„μ—μ„œ SQLi κ°€λŠ₯μ„± 발견"
213
+ ↓
214
+ └──→ [web-hacker] "둜그인 νΌμ—μ„œ SQLi ν…ŒμŠ€νŠΈ"
215
+ ↓
216
+ └──→ κ²°κ³Ό λ°˜ν™˜: "SQLi 확인, λ°μ΄ν„°λ² μ΄μŠ€ 덀프 κ°€λŠ₯"
217
+ ```
215
218
 
216
- ## βš™οΈ Configuration
219
+ ### 병렬 Swarm μ‹€ν–‰
217
220
 
218
- ### Environment Variables
221
+ ```typescript
222
+ const swarm = new AgentSwarm(runtime);
219
223
 
220
- | Variable | Description | Default |
221
- |----------|-------------|---------|
222
- | `PENTEST_API_KEY` | LLM API key | Required |
223
- | `PENTEST_BASE_URL` | API endpoint URL | - |
224
- | `PENTEST_MODEL` | Model name | claude-sonnet-4-20250514 |
225
- | `PENTEST_MAX_TOKENS` | Max response tokens | 16384 |
226
- | `PENTESTING_DOCKER` | Force Docker execution | 0 |
227
- | `PENTESTING_CONTAINER` | Docker container name | pentesting-tools |
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
+ ```
228
230
 
229
- > **Note**: `ANTHROPIC_API_KEY` is also accepted as fallback for `PENTEST_API_KEY`.
231
+ ---
230
232
 
233
+ ## πŸ”’ 신뒰도 기반 필터링
231
234
 
232
- ---
235
+ **80% 이상 μ‹ λ’°λ„λ§Œ λ³΄κ³ ν•©λ‹ˆλ‹€.**
233
236
 
234
- ## πŸ’» For Developers
237
+ ```
238
+ 신뒰도 계산:
239
+ κΈ°λ³Έκ°’: 50%
240
+ + 증거 수 Γ— 10% (μ΅œλŒ€ 30%)
241
+ + μ΅μŠ€ν”Œλ‘œμž‡ κ°€λŠ₯: +15%
242
+ + 심각도 λ†’μŒ: +5-10%
243
+ + CVE μ°Έμ‘°: +10%
244
+ = μ΅œμ’… 신뒰도
245
+ ```
235
246
 
236
- Pentesting can be used as a library in your own projects. See [Architecture Docs](./docs/architecture.md) for:
237
- - API Reference
238
- - Event System
239
- - Custom Agent Integration
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
+ ```
240
259
 
241
260
  ---
242
261
 
243
- ## 🐳 Docker Toolkit (Auto-Managed)
262
+ ## πŸ“‹ λͺ…λ Ήμ–΄
244
263
 
245
- Pentesting automatically manages a Docker container with 50+ pre-installed tools.
264
+ | λͺ…λ Ήμ–΄ | μ„€λͺ… |
265
+ |--------|------|
266
+ | `scan <target>` | νƒ€κ²Ÿ μŠ€μΊ” 및 μ •μ°° |
267
+ | `exploit <target>` | 취약점 μ΅μŠ€ν”Œλ‘œμž‡ |
268
+ | `report` | 발견 사항 λ³΄κ³ μ„œ 생성 |
269
+ | `status` | ν˜„μž¬ μ§„ν–‰ 상황 |
270
+ | `plan` | 곡격 κ³„νš 쑰회 |
271
+ | `agents` | μ‚¬μš© κ°€λŠ₯ν•œ μ—μ΄μ „νŠΈ λͺ©λ‘ |
246
272
 
247
- ### Automatic Setup
273
+ ---
248
274
 
249
- **No manual Docker setup required!** When you run a command that needs tools like `nmap` or `rustscan`:
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
+ ```
250
296
 
251
- 1. Pentesting checks if tool exists locally
252
- 2. If not, it automatically pulls `agnusdei1207/pentesting-tools:latest`
253
- 3. Starts container `pentesting-tools` with host network
254
- 4. Executes command via `docker exec`
297
+ ---
255
298
 
256
- ### Manual Docker Control
299
+ ## πŸ§ͺ ν…ŒμŠ€νŠΈ
257
300
 
258
301
  ```bash
259
- # Force all commands through Docker
260
- export PENTESTING_DOCKER=1
261
-
262
- # Use custom container name
263
- export PENTESTING_CONTAINER=my-pentest-container
302
+ npm test
303
+ ```
264
304
 
265
- # Manual pull (optional - auto-pulled on first use)
266
- docker pull agnusdei1207/pentesting-tools:latest
305
+ ```
306
+ βœ“ tests/soul.test.ts (24 tests) 10ms
307
+ βœ“ Context
308
+ βœ“ AgentRegistry
309
+ βœ“ ConfidenceFilter
310
+ βœ“ ReActLoop
311
+ βœ“ DMailSystem
312
+ βœ“ MessageBus
313
+ βœ“ MemoryManager
314
+ βœ“ Integration Tests
267
315
  ```
268
316
 
269
- ### Included Tools (50+)
317
+ ---
270
318
 
271
- | Category | Tools |
272
- |----------|-------|
273
- | **Network** | nmap, rustscan, masscan, netcat, tcpdump |
274
- | **Web** | ffuf, nikto, sqlmap, httpx, whatweb |
275
- | **Discovery** | subfinder, amass, nuclei, dnsrecon |
276
- | **Bruteforce** | hydra, hashcat, john |
277
- | **AD/Windows** | impacket, crackmapexec, smbclient |
278
- | **Database** | mysql-client, postgresql-client, redis-tools |
279
- | **Utilities** | curl, wget, jq, python3, go |
319
+ ## πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰
320
+
321
+ ```
322
+ src/
323
+ β”œβ”€β”€ soul/ # 핡심 μ—μ΄μ „νŠΈ μ‹œμŠ€ν…œ
324
+ β”‚ β”œβ”€β”€ pentesting-soul.ts # 메인 μ—μ΄μ „νŠΈ 루프
325
+ β”‚ β”œβ”€β”€ react.ts # ReAct νŒ¨ν„΄
326
+ β”‚ β”œβ”€β”€ dmail.ts # μ‹œκ°„μ—¬ν–‰ μ‹œμŠ€ν…œ
327
+ β”‚ β”œβ”€β”€ planner.ts # κ³„νš μ‹œμŠ€ν…œ
328
+ β”‚ β”œβ”€β”€ swarm.ts # 병렬 μ—μ΄μ „νŠΈ
329
+ β”‚ β”œβ”€β”€ confidence.ts # 신뒰도 필터링
330
+ β”‚ └── ...
331
+ β”œβ”€β”€ tools/ # 도ꡬ μ •μ˜
332
+ β”œβ”€β”€ agents/ # μ—μ΄μ „νŠΈ μŠ€νŽ™
333
+ β”œβ”€β”€ experience/ # ν•™μŠ΅ μ‹œμŠ€ν…œ
334
+ └── prompts/ # ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ
335
+ ```
280
336
 
281
337
  ---
282
338
 
283
- ## πŸ”Œ MCP Integration
339
+ ## πŸ“– λ¬Έμ„œ
284
340
 
285
- Pentesting supports MCP (Model Context Protocol) for extending capabilities with additional tools and servers. See [Architecture Docs](./docs/architecture.md) for integration details.
341
+ - [μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜](docs/architecture.md) - 상세 기술 λ¬Έμ„œ
342
+ - [OpenClaw 뢄석](docs/OPENCLAW_ANALYSIS.md) - κ°œμ„  κ³„νš
343
+ - [API 레퍼런슀](docs/api-reference.md) - API λ¬Έμ„œ
344
+ - [κ΅¬ν˜„ μ§„ν–‰ 상황](docs/IMPLEMENTATION_PROGRESS.md) - 개발 μƒνƒœ
286
345
 
287
346
  ---
288
347
 
289
- ## πŸ—οΈ How It Works
348
+ ## πŸ›£οΈ λ‘œλ“œλ§΅
290
349
 
291
- ```
292
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
293
- β”‚ Your Terminal β”‚
294
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
295
- β”‚ β”‚ pentesting CLI (Interactive TUI) β”‚ β”‚
296
- β”‚ β”‚ - Target management β”‚ β”‚
297
- β”‚ β”‚ - Session recording β”‚ β”‚
298
- β”‚ β”‚ - Real-time output β”‚ β”‚
299
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
300
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
301
- β–Ό
302
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
303
- β”‚ AI Agent Core β”‚
304
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
305
- β”‚ β”‚ 5 Specialized Agents (auto-switching) β”‚ β”‚
306
- β”‚ β”‚ Recon β†’ Web β†’ Exploit β†’ PrivEsc β†’ Cryptoβ”‚
307
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
308
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
309
- β–Ό
310
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
311
- β”‚ Tool Execution β”‚
312
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
313
- β”‚ β”‚ Docker β”‚ β”‚ Local β”‚ β”‚ MCP β”‚ β”‚
314
- β”‚ β”‚ (50+ β”‚ β”‚ Tools β”‚ β”‚ Servers β”‚ β”‚
315
- β”‚ β”‚ tools) β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
316
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
317
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
318
- ```
350
+ ### v1.0 (ν˜„μž¬) βœ…
351
+ - [x] ReAct νŒ¨ν„΄ κ΅¬ν˜„
352
+ - [x] D-Mail μ‹œκ°„μ—¬ν–‰
353
+ - [x] λ©€ν‹° μ—μ΄μ „νŠΈ μ‹œμŠ€ν…œ
354
+ - [x] 신뒰도 필터링
355
+ - [x] μ»¨ν…μŠ€νŠΈ μ••μΆ•
319
356
 
320
- ---
357
+ ### v1.1 (λ‹€μŒ)
358
+ - [ ] 영ꡬ 벑터 λ©”λͺ¨λ¦¬
359
+ - [ ] μ„Έμ…˜ μ˜μ†μ„±
360
+ - [ ] κ°•ν™”λœ ν›… μ‹œμŠ€ν…œ
321
361
 
322
- ## πŸ› οΈ Development
362
+ ### v1.2 (κ³„νš)
363
+ - [ ] Docker μƒŒλ“œλ°•μŠ€
364
+ - [ ] μŠ€ν‚¬ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€
365
+ - [ ] 인증 ν”„λ‘œν•„ 관리
323
366
 
324
- ```bash
325
- # Clone
326
- git clone https://github.com/agnusdei1207/pentesting.git
327
- cd pentesting
367
+ ---
328
368
 
329
- # Install
330
- npm install
369
+ ## 🀝 κΈ°μ—¬
331
370
 
332
- # Build
333
- npm run build
371
+ κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€! [CONTRIBUTING.md](CONTRIBUTING.md)λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.
334
372
 
335
- # Dev mode
336
- npm run dev
337
- ```
373
+ ---
338
374
 
339
- ## Documentation
375
+ ## πŸ“œ λΌμ΄μ„ μŠ€
340
376
 
341
- - [Architecture](./docs/ARCHITECTURE.md) - System design and components
342
- - [Docker Image](https://hub.docker.com/r/agnusdei1207/pentesting-tools) - Pre-built security tools
377
+ MIT License - [LICENSE](LICENSE)
343
378
 
344
379
  ---
345
380
 
346
- ## πŸ“„ License
381
+ ## ⚠️ λ©΄μ±… μ‘°ν•­
382
+
383
+ 이 λ„κ΅¬λŠ” **합법적인 λ³΄μ•ˆ ν…ŒμŠ€νŠΈ λͺ©μ **으둜만 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
384
+ ν—ˆκ°€ 없이 μ‹œμŠ€ν…œμ„ ν…ŒμŠ€νŠΈν•˜λŠ” 것은 λΆˆλ²•μž…λ‹ˆλ‹€.
385
+ μ‚¬μš©μžλŠ” λͺ¨λ“  행동에 λŒ€ν•œ μ±…μž„μ„ μ§‘λ‹ˆλ‹€.
386
+
387
+ ---
347
388
 
348
- MIT
389
+ <p align="center">
390
+ <sub>Built with 🧠 by <a href="https://github.com/agnusdei1207">agnusdei1207</a></sub>
391
+ </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pentesting",
3
- "version": "0.7.49",
3
+ "version": "0.8.0",
4
4
  "description": "Autonomous Penetration Testing AI Agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,6 +18,8 @@
18
18
  "dev": "tsx src/index.tsx",
19
19
  "build": "tsup src/index.tsx --format esm --dts --clean",
20
20
  "start": "node dist/index.js",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
21
23
  "lint": "tsc --noEmit",
22
24
  "prepublishOnly": "npm run build",
23
25
  "release:patch": "npm version patch && npm run build && npm publish",
@@ -78,6 +80,7 @@
78
80
  "@types/react": "^18.3.18",
79
81
  "tsup": "^8.3.6",
80
82
  "tsx": "^4.19.2",
81
- "typescript": "^5.7.3"
83
+ "typescript": "^5.7.3",
84
+ "vitest": "^4.0.18"
82
85
  }
83
86
  }