pentesting 0.100.3 → 0.100.5
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/ARCHITECTURE.md +43 -19
- package/README.md +90 -51
- package/lib/runtime.mjs +6 -12
- package/package.json +5 -4
package/ARCHITECTURE.md
CHANGED
|
@@ -27,6 +27,9 @@ stays intentionally short and usage-focused.
|
|
|
27
27
|
access (policy-based today; OS sandboxing is roadmap).
|
|
28
28
|
- **Intelligent Queuing** — Queued inputs are deduplicated and prioritized live;
|
|
29
29
|
obsolete tasks are preempted, not FIFO-replayed.
|
|
30
|
+
- **Prompt Ownership** — Prompt mode owns Enter submission. Buffered replay may
|
|
31
|
+
preserve typed-ahead input, but live terminal control responses, redraws, and
|
|
32
|
+
resize noise are not allowed to turn a normal Enter into a pasted newline.
|
|
30
33
|
- **Lab Session Multiplexing** — `shell-listener` runs multiple authorized TCP
|
|
31
34
|
sessions with per-session routing, identity tags, verified PTY upgrade state,
|
|
32
35
|
transcripts, command ledgers, replay, and orphaned evidence recovery.
|
|
@@ -66,6 +69,7 @@ Plain view:
|
|
|
66
69
|
```text
|
|
67
70
|
user input
|
|
68
71
|
-> CLI / interactive prompt loop
|
|
72
|
+
-> terminal-session prompt ownership + buffered replay boundary
|
|
69
73
|
-> BuilderAPI facade
|
|
70
74
|
-> BuilderApp classification and strategy
|
|
71
75
|
-> active agent or delegated subagent
|
|
@@ -85,6 +89,27 @@ There is no fixed persona. The runtime derives a profile per request, optionally
|
|
|
85
89
|
overlays a named autonomy profile, then reuses tool scope, phase, and memory
|
|
86
90
|
weighting.
|
|
87
91
|
|
|
92
|
+
CTF frontier exploration keeps the global `[exploration]` default off, then
|
|
93
|
+
enables the effective CTF profile when `engagement.kind = "ctf"` or a
|
|
94
|
+
`flag_format` is configured. That profile selects `ctf-competition` autonomy,
|
|
95
|
+
turns on exploration, requires verified `flag_check` evidence before completion,
|
|
96
|
+
and auto-continues the TUI loop after `/goal`. See `docs/config/ctf.toml`,
|
|
97
|
+
`docs/plans/2026/07/08/PLAN_CtfFrontierExploration_2026-07-08.md`, and the
|
|
98
|
+
decision record beside it.
|
|
99
|
+
|
|
100
|
+
The shipped design is advisor-guided, not scheduler-owned: `decide_next` is a
|
|
101
|
+
pure traversal recommendation over `EvidenceKind::Lead` events, while dispatch
|
|
102
|
+
uses the existing delegated-task fan-out. There is no detached task registry or
|
|
103
|
+
second runtime scheduler in the default implementation. Phase 10 is pinned by
|
|
104
|
+
`orch_spec::exploration_e2e`, which exercises the flag-off path and the
|
|
105
|
+
breadth/depth/pivot/reseed/merge flow without launching real subagents.
|
|
106
|
+
|
|
107
|
+
Reliability guards sit below the profile layer. Provider protocol capabilities
|
|
108
|
+
default native tool support for OpenAI/Anthropic-compatible responses on
|
|
109
|
+
registry misses, unparsed tool-shaped markup becomes retryable instead of a
|
|
110
|
+
false completion, raw control markup is scrubbed from the stream, and the
|
|
111
|
+
markdown renderer bounds very large no-newline buffers.
|
|
112
|
+
|
|
88
113
|
```mermaid
|
|
89
114
|
flowchart LR
|
|
90
115
|
R[Request] --> GEN["Derive<br/>dynamic profile"]
|
|
@@ -145,8 +170,9 @@ definition under `crates/builder_repo/src/agents/`.
|
|
|
145
170
|
## Named Autonomy Profiles
|
|
146
171
|
|
|
147
172
|
Optionally pin the top-level profile (`autonomy_profile = "ctf-competition"`);
|
|
148
|
-
leave unset for classifier-driven defaults.
|
|
149
|
-
|
|
173
|
+
leave unset for classifier-driven defaults. CTF engagement config auto-selects
|
|
174
|
+
the CTF profile when no explicit profile is set. Delegated subagent contracts
|
|
175
|
+
stay intact. Defined in `crates/builder_domain/src/autonomy_profile.rs`.
|
|
150
176
|
|
|
151
177
|
| Profile | Purpose |
|
|
152
178
|
| --- | --- |
|
|
@@ -157,9 +183,10 @@ intact. Defined in `crates/builder_domain/src/autonomy_profile.rs`.
|
|
|
157
183
|
|
|
158
184
|
## Engagement Metadata
|
|
159
185
|
|
|
160
|
-
Runs can attach typed engagement context — scope, phase, tags,
|
|
161
|
-
(PTES, MITRE ATT&CK, OWASP,
|
|
162
|
-
|
|
186
|
+
Runs can attach typed engagement context — scope, phase, tags, flag format,
|
|
187
|
+
flag-evidence requirement, and standard refs (PTES, MITRE ATT&CK, OWASP,
|
|
188
|
+
CWE/CAPEC, NIST CSF, CIS Controls) — to workflow metadata. `/workflow report`
|
|
189
|
+
exports it as a Markdown handoff.
|
|
163
190
|
|
|
164
191
|
## Memory & Knowledge
|
|
165
192
|
|
|
@@ -316,14 +343,14 @@ npm install -g pentesting
|
|
|
316
343
|
|
|
317
344
|
## Supported Runtime Targets
|
|
318
345
|
|
|
319
|
-
The npm launcher currently resolves managed native release
|
|
320
|
-
|
|
346
|
+
The npm launcher currently resolves a managed native release asset for Linux
|
|
347
|
+
x64. Other operating systems, including Apple Silicon Macs, Linux arm64,
|
|
348
|
+
Windows, and Android, can run the multi-architecture Docker image or use
|
|
321
349
|
`PENTESTING_BIN` to point at a locally built compatible binary.
|
|
322
350
|
|
|
323
351
|
| OS | CPU | Release asset |
|
|
324
352
|
| --- | --- | --- |
|
|
325
353
|
| Linux | x64 | `pentesting-x86_64-unknown-linux-musl` |
|
|
326
|
-
| Android | arm64 | `pentesting-aarch64-linux-android` |
|
|
327
354
|
|
|
328
355
|
`/update` (and the npm postinstall) resolves the matching asset for the current
|
|
329
356
|
supported OS/CPU target from `agnusdei1207/pentesting-public`.
|
|
@@ -332,22 +359,19 @@ supported OS/CPU target from `agnusdei1207/pentesting-public`.
|
|
|
332
359
|
|
|
333
360
|
Pentesting reads a user-global config from `~/.pentesting/.pentesting.toml`,
|
|
334
361
|
overridden by project-local `.pentesting.toml` files discovered by walking up
|
|
335
|
-
from the working directory.
|
|
336
|
-
|
|
337
|
-
```toml
|
|
338
|
-
[storage]
|
|
339
|
-
backend = "local" # Local md/fs runtime state
|
|
340
|
-
```
|
|
362
|
+
from the working directory. Local storage is the default; normal setup only
|
|
363
|
+
needs the public model endpoint environment.
|
|
341
364
|
|
|
342
365
|
The same shape is represented in `builder.schema.json`, `.pentesting.toml`, and
|
|
343
|
-
the interactive `/config` UI.
|
|
344
|
-
|
|
345
|
-
Environment variables use the `PENTESTING_` prefix, with `__` for nested keys —
|
|
346
|
-
e.g. `PENTESTING_SESSION__MODEL_ID=...`. Set `PENTESTING_CONFIG` to override the
|
|
347
|
-
global config directory.
|
|
366
|
+
the interactive `/config` UI. Set `PENTESTING_CONFIG` to override the global
|
|
367
|
+
config directory.
|
|
348
368
|
|
|
349
369
|
| Variable | Description |
|
|
350
370
|
| --- | --- |
|
|
371
|
+
| `OPENAI_API_KEY` | API key or gateway token for OpenAI-compatible providers. |
|
|
372
|
+
| `OPENAI_BASE_URL` | OpenAI-compatible base URL, for example `https://api.openai.com/v1` or a self-hosted gateway. |
|
|
373
|
+
| `OPENAI_MODEL` | Default model id. |
|
|
374
|
+
| `OPENAI_MAX_TOKENS` | Optional output-token override; accepts values like `4096`, `32k`, or `1M`. |
|
|
351
375
|
| `PENTESTING_BIN` | Use an already-installed Builder binary instead of the managed download. |
|
|
352
376
|
| `PENTESTING_PRODUCT_NAME` | Runtime banner label. The `pentesting` launcher sets this to `pentesting` automatically. |
|
|
353
377
|
| `PENTESTING_REPO` | Override the public release repo used for binary downloads. Defaults to `agnusdei1207/pentesting-public`. |
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ The runtime—not the model—owns routing, tool sandboxing, verification, compl
|
|
|
17
17
|
|
|
18
18
|
## ✅ Capabilities
|
|
19
19
|
|
|
20
|
-
Agent-loop essentials
|
|
20
|
+
Agent-loop essentials plus a security-focused runtime layer.
|
|
21
21
|
|
|
22
22
|
| Area | What it does |
|
|
23
23
|
| --- | --- |
|
|
@@ -25,62 +25,63 @@ Agent-loop essentials at parity with leading coding agents, plus a security-focu
|
|
|
25
25
|
| Tool guardrails | Read-before-edit enforcement, repeat-call guard, policy-gated file/shell/network |
|
|
26
26
|
| Permissions | Allow / Deny / Confirm, with once/always decisions persisted |
|
|
27
27
|
| Context compaction | Automatic micro-pruning + model-triggered summarization, pre/post hooks |
|
|
28
|
-
| Interrupt & steering | ESC to interrupt mid-turn, queue follow-ups while it works |
|
|
28
|
+
| Interrupt & steering | ESC to interrupt mid-turn, queue follow-ups while it works, and keep Enter submissions deterministic across PTY redraw/control-response noise |
|
|
29
29
|
| Reverse-shell control plane | Accept and track multiple authorized callbacks, tag/probe sessions, send/observe/run commands, verify PTY upgrades, and keep transcript/ledger/evidence records |
|
|
30
30
|
| PTY session control | Treat upgraded shells as managed PTY sessions with resize gating, transcript capture, FD accounting, and deterministic close/revoke/gc reclamation |
|
|
31
|
-
|
|
|
31
|
+
| Frontier-guided exploration | Persistent, deduplicated lead frontier: the runtime enforces pivots and caps, and recommends breadth-first enumeration vs depth-first exploitation while the model drives |
|
|
32
|
+
| Subagents | Broad-clone delegates with category focus overlays; independent deep-specialist leads (crypto/rev/pwn) run in the same parallel batch so the main line keeps moving |
|
|
32
33
|
| MCP & skills | Dynamic MCP tool discovery, layered markdown skills |
|
|
33
34
|
| Memory | Ebbinghaus-style decaying notes + hybrid lexical/semantic/graph retrieval |
|
|
34
35
|
|
|
35
|
-
**Beyond the baseline:** evidence-gated completion adjudication (Complete / Replan / Blocked), a CTF-oriented reverse-shell/PTY control plane (multi-session tracking, helper-only `pty_upgrade` plus verified `upgrade`, transcript/history/replay, lifecycle/FD management), and CTF-grade verification tools (flag check, best-of-N verify, findings ledger).
|
|
36
|
-
|
|
37
36
|
---
|
|
38
37
|
|
|
39
38
|
## 🚀 Quick Start
|
|
40
39
|
|
|
41
|
-
Install globally, or run
|
|
40
|
+
Install globally, or run once with a Node package runner:
|
|
42
41
|
|
|
43
42
|
```bash
|
|
44
43
|
npm install -g pentesting && pentesting # install
|
|
45
44
|
npx pentesting # or run once, no install
|
|
46
45
|
pnpm dlx pentesting
|
|
47
46
|
yarn dlx pentesting
|
|
48
|
-
bunx pentesting
|
|
49
|
-
deno run npm:pentesting
|
|
50
47
|
```
|
|
51
48
|
|
|
49
|
+
Requires Node.js 18.18+. Use npm/npx/pnpm/yarn; Bun and Deno runners are not supported.
|
|
50
|
+
|
|
52
51
|
### 🐳 Run with Docker
|
|
53
52
|
|
|
54
|
-
No local Rust toolchain
|
|
55
|
-
runtime plus the offensive testing toolchain:
|
|
53
|
+
No local Rust toolchain needed:
|
|
56
54
|
|
|
57
55
|
```bash
|
|
58
|
-
export
|
|
59
|
-
export
|
|
60
|
-
export
|
|
61
|
-
export
|
|
62
|
-
export PENTESTING_SESSION__MODEL_ID="$ANTHROPIC_MODEL"
|
|
56
|
+
export OPENAI_API_KEY="sk-..." # provider API key or gateway token
|
|
57
|
+
export OPENAI_BASE_URL="https://api.openai.com/v1"
|
|
58
|
+
export OPENAI_MODEL="gpt-4o"
|
|
59
|
+
export OPENAI_MAX_TOKENS="4096"
|
|
63
60
|
|
|
64
61
|
docker run -it --rm \
|
|
65
|
-
-v "$(pwd):/workspace"
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-e
|
|
69
|
-
-e
|
|
70
|
-
-e
|
|
62
|
+
-v "$(pwd):/workspace" \
|
|
63
|
+
-v pentesting-config:/root/.pentesting \
|
|
64
|
+
-w /workspace \
|
|
65
|
+
-e OPENAI_API_KEY \
|
|
66
|
+
-e OPENAI_BASE_URL \
|
|
67
|
+
-e OPENAI_MODEL \
|
|
68
|
+
-e OPENAI_MAX_TOKENS \
|
|
71
69
|
agnusdei1207/pentesting:latest
|
|
72
70
|
```
|
|
73
71
|
|
|
72
|
+
Provider environment variables are optional for startup. If they are omitted,
|
|
73
|
+
the interactive TUI still launches and lets you configure/login inside the
|
|
74
|
+
persistent `pentesting-config` volume.
|
|
75
|
+
|
|
74
76
|
Or via Docker Compose:
|
|
75
77
|
|
|
76
78
|
```bash
|
|
77
79
|
PENTESTING_PROJECT_DIR=/path/to/project \
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
docker compose run pentesting
|
|
80
|
+
OPENAI_API_KEY=sk-... \
|
|
81
|
+
OPENAI_BASE_URL=https://api.openai.com/v1 \
|
|
82
|
+
OPENAI_MODEL=gpt-4o \
|
|
83
|
+
OPENAI_MAX_TOKENS=4096 \
|
|
84
|
+
docker compose run --rm pentesting
|
|
84
85
|
```
|
|
85
86
|
|
|
86
87
|
### Common commands
|
|
@@ -92,7 +93,7 @@ pentesting shell-listener --bind 127.0.0.1 --port 4444 # Authorized reverse-sh
|
|
|
92
93
|
pentesting --version
|
|
93
94
|
```
|
|
94
95
|
|
|
95
|
-
Use `shell-listener` in authorized CTF/lab work to accept
|
|
96
|
+
Use `shell-listener` in authorized CTF/lab work to accept callbacks, tag sessions, run sentinel-tracked commands, verify PTY upgrades, and retain transcripts/evidence.
|
|
96
97
|
|
|
97
98
|
Short version: the agent can catch a dumb reverse shell, upgrade it to a verified PTY, pivot to a second callback, and reclaim both sessions cleanly with `close` / `revoke` / `gc`.
|
|
98
99
|
|
|
@@ -100,7 +101,7 @@ Inside a session, `/help` lists every command and `/update` pulls the latest rel
|
|
|
100
101
|
|
|
101
102
|
### 🔌 Reverse-shell & PTY sessions
|
|
102
103
|
|
|
103
|
-
Catch and manage authorized shell callbacks
|
|
104
|
+
Catch and manage authorized shell callbacks: one listener, many targets, audited cleanup.
|
|
104
105
|
|
|
105
106
|
```bash
|
|
106
107
|
pentesting shell-listener --port 4444 # 1. Catch callbacks (tracks many at once)
|
|
@@ -120,45 +121,82 @@ pentesting shell-session revoke --session 1 # 5. Hard-close: reclaim FDs +
|
|
|
120
121
|
|
|
121
122
|
## ⚙️ Configuration
|
|
122
123
|
|
|
123
|
-
Pentesting
|
|
124
|
-
|
|
125
|
-
```toml
|
|
126
|
-
[storage]
|
|
127
|
-
backend = "local" # Local md/fs runtime state
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Environment variables use the `PENTESTING_` prefix (`__` for nested keys, e.g. `PENTESTING_SESSION__MODEL_ID=...`). Full variable list and the legacy `BUILDER_*` aliases are documented in [`ARCHITECTURE.md`](ARCHITECTURE.md#configuration).
|
|
124
|
+
Pentesting uses local storage by default. For normal use, configure only the model endpoint:
|
|
131
125
|
|
|
132
126
|
### Example `.env` / shell setup
|
|
133
127
|
|
|
134
128
|
```bash
|
|
135
|
-
#
|
|
136
|
-
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
137
|
-
export ANTHROPIC_AUTH_TOKEN="$ANTHROPIC_API_KEY" # token used by Anthropic-compatible providers
|
|
138
|
-
export ANTHROPIC_BASE_URL="https://api.minimax.io/anthropic"
|
|
139
|
-
export ANTHROPIC_MODEL="MiniMax-M2.7"
|
|
129
|
+
# OpenAI-compatible provider or gateway
|
|
140
130
|
export OPENAI_API_KEY="sk-..."
|
|
141
|
-
export
|
|
131
|
+
export OPENAI_BASE_URL="https://api.openai.com/v1"
|
|
132
|
+
export OPENAI_MODEL="gpt-4o"
|
|
133
|
+
export OPENAI_MAX_TOKENS="4096"
|
|
142
134
|
|
|
143
135
|
# Runtime overrides (optional)
|
|
144
|
-
export PENTESTING_SESSION__MODEL_ID="$ANTHROPIC_MODEL" # default model for new sessions
|
|
145
136
|
export PENTESTING_CONFIG="$HOME/.config/pentesting" # move the global config dir
|
|
146
137
|
export PENTESTING_SKIP_DOWNLOAD=1 # skip postinstall binary download (CI)
|
|
147
138
|
```
|
|
148
139
|
|
|
149
|
-
|
|
140
|
+
The TUI pre-fills output max tokens from known model names/provider metadata. `OPENAI_MAX_TOKENS` and the TUI field are explicit overrides for custom/self-hosted models.
|
|
141
|
+
|
|
142
|
+
### Frontier-guided CTF exploration
|
|
143
|
+
|
|
144
|
+
The global frontier engine default stays off, but CTF-shaped engagement config
|
|
145
|
+
auto-applies the CTF runtime profile: `ctf-competition` autonomy, runtime
|
|
146
|
+
exploration, autonomous continuation, and a completion gate that requires
|
|
147
|
+
verified `flag_check` evidence. A ready-to-copy profile lives at
|
|
148
|
+
`docs/config/ctf.toml`:
|
|
149
|
+
|
|
150
|
+
```toml
|
|
151
|
+
[engagement]
|
|
152
|
+
kind = "ctf"
|
|
153
|
+
flag_format = "flag\\{[^}]+\\}"
|
|
154
|
+
require_flag_evidence = true
|
|
155
|
+
|
|
156
|
+
[exploration]
|
|
157
|
+
enabled = true
|
|
158
|
+
max_frontier_nodes = 256
|
|
159
|
+
max_breadth = 4
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
With the profile active, the runtime stores `explore` leads as
|
|
163
|
+
`EvidenceKind::Lead` events, carries prior-run frontier/findings/verified flags
|
|
164
|
+
forward, deduplicates leads, auto-pivots dead probes, enforces graph/cap limits,
|
|
165
|
+
and injects a breadth/depth recommendation into mission control. The model still
|
|
166
|
+
drives the work through `explore` and `task`; heavy independent leads such as
|
|
167
|
+
crypto/rev/pwn ride the same parallel delegation batch rather than a detached
|
|
168
|
+
background scheduler. Operators can inspect the current graph with `/frontier`,
|
|
169
|
+
and the status row shows compact frontier progress during dispatch.
|
|
170
|
+
|
|
171
|
+
Malformed tool-call output is fail-loud: unparsed tool-shaped markup is retried
|
|
172
|
+
instead of accepted as a final answer, the TUI suppresses raw control markup, and
|
|
173
|
+
large no-newline streams are bounded so rendering cannot hang behind usage-only
|
|
174
|
+
progress ticks.
|
|
175
|
+
|
|
176
|
+
The shipped contract is covered by
|
|
177
|
+
`cargo test -p builder_app orch_spec::exploration_e2e`: it verifies the
|
|
178
|
+
flag-off regression path plus breadth enumeration, depth descent, sibling
|
|
179
|
+
breadth, dead-probe pivot, global reseed, seed digest, broad-clone overlay, and
|
|
180
|
+
child result promotion.
|
|
181
|
+
|
|
182
|
+
With Docker, mount both your project and the persistent runtime config volume, then pass the same variables through with `-e`:
|
|
150
183
|
|
|
151
184
|
```bash
|
|
152
185
|
docker run -it --rm \
|
|
153
|
-
-v "$(pwd):/workspace"
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-e
|
|
157
|
-
-e
|
|
158
|
-
-e
|
|
186
|
+
-v "$(pwd):/workspace" \
|
|
187
|
+
-v pentesting-config:/root/.pentesting \
|
|
188
|
+
-w /workspace \
|
|
189
|
+
-e OPENAI_API_KEY \
|
|
190
|
+
-e OPENAI_BASE_URL \
|
|
191
|
+
-e OPENAI_MODEL \
|
|
192
|
+
-e OPENAI_MAX_TOKENS \
|
|
159
193
|
agnusdei1207/pentesting:latest
|
|
160
194
|
```
|
|
161
195
|
|
|
196
|
+
Those variables only pre-fill provider settings. Leaving them unset must not
|
|
197
|
+
block the container from launching the TUI; configure the provider interactively
|
|
198
|
+
inside the container instead.
|
|
199
|
+
|
|
162
200
|
> **Note:** The command you run is always **`pentesting`**. The internal engine is **`builder`** — `pentesting` downloads and runs it under the hood; the engine name never surfaces in normal use.
|
|
163
201
|
|
|
164
202
|
---
|
|
@@ -166,6 +204,7 @@ docker run -it --rm \
|
|
|
166
204
|
## 📖 Documentation
|
|
167
205
|
|
|
168
206
|
* [`ARCHITECTURE.md`](ARCHITECTURE.md) — Runtime flow, agent team, memory model, crate map, tool surface, and supported targets.
|
|
207
|
+
* Internal layout: service traits are split under `builder_app/src/services/*`; OpenAI request conversion is isolated under `dto/openai/request/*`.
|
|
169
208
|
* [Public site](https://agnusdei1207.github.io/pentesting-public/) — Landing page and public runtime entry surface.
|
|
170
209
|
* [`compose.yaml`](https://github.com/agnusdei1207/pentesting-public) — Docker Compose facade for pentesting sessions.
|
|
171
210
|
|
package/lib/runtime.mjs
CHANGED
|
@@ -14,15 +14,9 @@ const MANAGED_BINARY_DIR = path.join(PACKAGE_ROOT, "vendor");
|
|
|
14
14
|
const MANAGED_BINARY_MANIFEST = path.join(MANAGED_BINARY_DIR, "pentesting-manifest.json");
|
|
15
15
|
|
|
16
16
|
const RELEASE_TARGETS = {
|
|
17
|
-
// Native binaries published as release assets. Linux uses musl (static
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// Docker image (see the Unsupported-platform error below).
|
|
21
|
-
"android:arm64": {
|
|
22
|
-
assetName: "pentesting-aarch64-linux-android",
|
|
23
|
-
binaryFileName: "builder",
|
|
24
|
-
label: "android-arm64",
|
|
25
|
-
},
|
|
17
|
+
// Native binaries published as release assets. Linux x64 uses musl (static).
|
|
18
|
+
// macOS, Windows, Linux arm64, and Android are served by the multi-arch Docker
|
|
19
|
+
// image (see the unsupported-platform error below).
|
|
26
20
|
"linux:x64": {
|
|
27
21
|
assetName: "pentesting-x86_64-unknown-linux-musl",
|
|
28
22
|
binaryFileName: "builder",
|
|
@@ -58,10 +52,10 @@ export function resolveReleaseAsset(platform = process.platform, arch = process.
|
|
|
58
52
|
if (!target) {
|
|
59
53
|
const supported = Object.keys(RELEASE_TARGETS).join(", ");
|
|
60
54
|
throw new Error(
|
|
61
|
-
|
|
55
|
+
`No native pentesting binary for '${platform}/${arch}'. ` +
|
|
62
56
|
`Native targets: ${supported}. ` +
|
|
63
|
-
`On macOS/Windows run it via Docker instead: ` +
|
|
64
|
-
`docker run -it --rm -v "$(pwd):/workspace" agnusdei1207/pentesting`,
|
|
57
|
+
`On macOS/Windows/Linux arm64/Android run it via Docker instead: ` +
|
|
58
|
+
`docker run -it --rm -v "$(pwd):/workspace" -v pentesting-config:/root/.pentesting -w /workspace -e OPENAI_API_KEY -e OPENAI_BASE_URL -e OPENAI_MODEL -e OPENAI_MAX_TOKENS agnusdei1207/pentesting`,
|
|
65
59
|
);
|
|
66
60
|
}
|
|
67
61
|
return target;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pentesting",
|
|
3
|
-
"version": "0.100.
|
|
4
|
-
"builderReleaseTag": "v0.100.
|
|
3
|
+
"version": "0.100.5",
|
|
4
|
+
"builderReleaseTag": "v0.100.5",
|
|
5
5
|
"description": "pentesting — coding agent runtime with audited reverse-shell capture, verified PTY session upgrades, pivot control, evidence transcripts, and safe session reclamation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "agnusdei1207",
|
|
@@ -52,8 +52,9 @@
|
|
|
52
52
|
"audit": "bash scripts/audit-project.sh",
|
|
53
53
|
"test": "node --test tests/*.test.mjs",
|
|
54
54
|
"preflight:local": "bash scripts/preflight-local.sh",
|
|
55
|
+
"refactor:stability": "bash scripts/refactor-stability.sh",
|
|
55
56
|
"verify": "npm run consistency && npm run test",
|
|
56
|
-
"check": "npm run
|
|
57
|
+
"check": "npm run check:docker",
|
|
57
58
|
"pentesting:help": "bash scripts/pentesting-release-help.sh",
|
|
58
59
|
"pentesting:status": "bash scripts/pentesting-release-status.sh",
|
|
59
60
|
"pentesting:test": "npm run test",
|
|
@@ -71,7 +72,7 @@
|
|
|
71
72
|
"public:sync": "bash scripts/sync-public-repo.sh",
|
|
72
73
|
"public:mirror-release": "bash scripts/mirror-public-release.sh",
|
|
73
74
|
"release:backfill": "bash scripts/backfill-release-local.sh",
|
|
74
|
-
"check:docker": "
|
|
75
|
+
"check:docker": "npm run docker:build && docker run -it --rm -v builder-workspace:/workspace -v pentesting-config:/root/.pentesting -e OPENAI_API_KEY -e OPENAI_BASE_URL -e OPENAI_MODEL -e OPENAI_MAX_TOKENS agnusdei1207/pentesting:latest",
|
|
75
76
|
"docker:build": "(docker image inspect agnusdei1207/pentesting-build-base:1.96 >/dev/null 2>&1 && docker image inspect agnusdei1207/pentesting-runtime-base:26.04 >/dev/null 2>&1 || npm run docker:base:build) && docker build --build-arg APP_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo dev) -t agnusdei1207/pentesting:latest .",
|
|
76
77
|
"docker:base:build": "docker build -t agnusdei1207/pentesting-build-base:1.96 -f docker/build-base.Dockerfile . && docker build -t agnusdei1207/pentesting-runtime-base:26.04 -f docker/runtime-base.Dockerfile .",
|
|
77
78
|
"release:patch": "./scripts/release-all.sh patch",
|