pentesting 0.7.11 → 0.7.13
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/dist/index.js +36 -31
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6512,6 +6512,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6512
6512
|
const [checkpointCount, setCheckpointCount] = useState(0);
|
|
6513
6513
|
const [preInputBuffer, setPreInputBuffer] = useState("");
|
|
6514
6514
|
const [wasInterrupted, setWasInterrupted] = useState(false);
|
|
6515
|
+
const [spinnerHue, setSpinnerHue] = useState(0);
|
|
6515
6516
|
const [, forceUpdate] = useState(0);
|
|
6516
6517
|
const [agent] = useState(() => new AutonomousHackingAgent(void 0, { autoApprove }));
|
|
6517
6518
|
const sessionManager2 = getSessionManager();
|
|
@@ -6564,6 +6565,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6564
6565
|
startTimeRef.current = Date.now();
|
|
6565
6566
|
timerRef.current = setInterval(() => {
|
|
6566
6567
|
setElapsedTime(Math.floor((Date.now() - startTimeRef.current) / 100) / 10);
|
|
6568
|
+
setSpinnerHue((h) => (h + 5) % 360);
|
|
6567
6569
|
}, 100);
|
|
6568
6570
|
}, []);
|
|
6569
6571
|
const stopTimer = useCallback(() => {
|
|
@@ -6630,19 +6632,17 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6630
6632
|
};
|
|
6631
6633
|
}, []);
|
|
6632
6634
|
useEffect(() => {
|
|
6633
|
-
addMessage(MESSAGE_TYPE.SYSTEM, `
|
|
6634
|
-
\u{1F680} /target <ip> \u2192 /start [goal] | /help for commands
|
|
6635
|
-
\u26A0\uFE0F For authorized penetration testing only. Unauthorized use is illegal.`);
|
|
6635
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `/target <ip> \u2192 /start [goal] | /help for commands`);
|
|
6636
6636
|
if (autoApprove) {
|
|
6637
|
-
addMessage(MESSAGE_TYPE.SYSTEM, "
|
|
6637
|
+
addMessage(MESSAGE_TYPE.SYSTEM, "YOLO Mode: Auto-approving all tool executions");
|
|
6638
6638
|
}
|
|
6639
6639
|
if (target) {
|
|
6640
6640
|
agent.setTarget(target);
|
|
6641
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6641
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Target: ${target}`);
|
|
6642
6642
|
}
|
|
6643
6643
|
onTargetChange((newTarget) => {
|
|
6644
6644
|
agent.setTarget(newTarget);
|
|
6645
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6645
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Target \u2192 ${newTarget}`);
|
|
6646
6646
|
forceUpdate((n) => n + 1);
|
|
6647
6647
|
});
|
|
6648
6648
|
agent.on(AGENT_EVENT.TARGET_SET, () => {
|
|
@@ -6650,11 +6650,15 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6650
6650
|
});
|
|
6651
6651
|
agent.on(AGENT_EVENT.THOUGHT, (thought) => {
|
|
6652
6652
|
setCurrentStatus(thought.content.slice(0, 60));
|
|
6653
|
+
if (thought.type === "thinking" || thought.type === "reasoning") {
|
|
6654
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `[${thought.type}] ${thought.content.slice(0, 200)}`);
|
|
6655
|
+
}
|
|
6653
6656
|
wireLoggerRef.current?.contentPart(thought.content, thought.type === "thinking");
|
|
6654
6657
|
});
|
|
6655
6658
|
agent.on(AGENT_EVENT.TOOL_CALL, (data) => {
|
|
6656
6659
|
const args = Object.entries(data.input).slice(0, 2).map(([k, v]) => `${k}=${typeof v === "string" ? v.slice(0, 30) : "..."}`).join(" ");
|
|
6657
|
-
|
|
6660
|
+
const cmdPreview = data.name === "bash" && data.input.command ? String(data.input.command).slice(0, 50).replace(/\n/g, " ") : data.name;
|
|
6661
|
+
setCurrentStatus(`\u25B6 ${cmdPreview}`);
|
|
6658
6662
|
addMessage(MESSAGE_TYPE.TOOL, `\u25B6 ${data.name} ${args}`);
|
|
6659
6663
|
wireLoggerRef.current?.toolCall(data.id, data.name, data.input);
|
|
6660
6664
|
});
|
|
@@ -6669,12 +6673,12 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6669
6673
|
wireLoggerRef.current?.stepBegin(data.current);
|
|
6670
6674
|
});
|
|
6671
6675
|
agent.on(AGENT_EVENT.FINDING, (finding) => {
|
|
6672
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6676
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `[${finding.severity.toUpperCase()}] ${finding.title}`);
|
|
6673
6677
|
wireLoggerRef.current?.statusUpdate({ event: "finding", ...finding });
|
|
6674
6678
|
forceUpdate((n) => n + 1);
|
|
6675
6679
|
});
|
|
6676
6680
|
agent.on(AGENT_EVENT.PHASE_CHANGE, (data) => {
|
|
6677
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6681
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Phase: ${data.phaseId}`);
|
|
6678
6682
|
wireLoggerRef.current?.statusUpdate({ event: "phase_change", phase: data.phaseId });
|
|
6679
6683
|
forceUpdate((n) => n + 1);
|
|
6680
6684
|
});
|
|
@@ -6696,7 +6700,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6696
6700
|
toolInput: data.toolInput,
|
|
6697
6701
|
riskLevel: data.riskLevel
|
|
6698
6702
|
});
|
|
6699
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6703
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `APPROVAL NEEDED: ${data.toolName} (${data.riskLevel} risk)`);
|
|
6700
6704
|
const inputPreview = Object.entries(data.toolInput).slice(0, 2).map(([k, v]) => `${k}=${typeof v === "string" ? v.slice(0, 40) : JSON.stringify(v).slice(0, 40)}`).join(", ");
|
|
6701
6705
|
if (inputPreview) {
|
|
6702
6706
|
addMessage(MESSAGE_TYPE.SYSTEM, ` Args: ${inputPreview}`);
|
|
@@ -6721,7 +6725,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
6721
6725
|
toolInput: req.toolInput,
|
|
6722
6726
|
riskLevel: req.riskLevel
|
|
6723
6727
|
});
|
|
6724
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6728
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `APPROVAL NEEDED: ${req.toolName} (${req.riskLevel} risk)`);
|
|
6725
6729
|
addMessage(MESSAGE_TYPE.SYSTEM, ` ${req.reason}`);
|
|
6726
6730
|
addMessage(MESSAGE_TYPE.SYSTEM, " /y = approve, /n = deny, /ya = always approve");
|
|
6727
6731
|
});
|
|
@@ -6813,7 +6817,7 @@ pentesting v${APP_VERSION}`
|
|
|
6813
6817
|
const allTargets = agent.getAllTargets();
|
|
6814
6818
|
if (allTargets.length === 0) {
|
|
6815
6819
|
addMessage(MESSAGE_TYPE.SYSTEM, `
|
|
6816
|
-
|
|
6820
|
+
No targets set
|
|
6817
6821
|
|
|
6818
6822
|
Usage:
|
|
6819
6823
|
/target <domain|ip> Set primary target
|
|
@@ -6826,7 +6830,7 @@ Usage:
|
|
|
6826
6830
|
const targetList = allTargets.map(
|
|
6827
6831
|
(t) => t === primary ? ` \u2605 ${t} (primary)` : ` ${t}`
|
|
6828
6832
|
).join("\n");
|
|
6829
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6833
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Targets:
|
|
6830
6834
|
${targetList}`);
|
|
6831
6835
|
}
|
|
6832
6836
|
return;
|
|
@@ -6851,7 +6855,7 @@ ${targetList}`);
|
|
|
6851
6855
|
const list = targets.map(
|
|
6852
6856
|
(t, i) => t === primary ? ` ${i + 1}. \u2605 ${t}` : ` ${i + 1}. ${t}`
|
|
6853
6857
|
).join("\n");
|
|
6854
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6858
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Targets (${targets.length}):
|
|
6855
6859
|
${list}`);
|
|
6856
6860
|
}
|
|
6857
6861
|
break;
|
|
@@ -6883,7 +6887,7 @@ ${list}`);
|
|
|
6883
6887
|
break;
|
|
6884
6888
|
default:
|
|
6885
6889
|
agent.setTarget(subCmd);
|
|
6886
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6890
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Target \u2192 ${subCmd}`);
|
|
6887
6891
|
}
|
|
6888
6892
|
return;
|
|
6889
6893
|
case CLI_COMMAND.START:
|
|
@@ -6897,7 +6901,7 @@ ${list}`);
|
|
|
6897
6901
|
setIsProcessing(true);
|
|
6898
6902
|
startTimer();
|
|
6899
6903
|
const allObjective = args.slice(1).join(" ") || "Perform comprehensive penetration testing";
|
|
6900
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6904
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Starting multi-target attack on ${allTargets.length} targets`);
|
|
6901
6905
|
for (let i = 0; i < allTargets.length; i++) {
|
|
6902
6906
|
const currentTarget = allTargets[i];
|
|
6903
6907
|
if (agent.shouldStop()) {
|
|
@@ -6910,7 +6914,7 @@ ${list}`);
|
|
|
6910
6914
|
forceUpdate((n) => n + 1);
|
|
6911
6915
|
try {
|
|
6912
6916
|
const session = await sessionManager2.createSession(allObjective, currentTarget);
|
|
6913
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6917
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Session: ${session.id}`);
|
|
6914
6918
|
agent.resume();
|
|
6915
6919
|
await agent.runAutonomous(allObjective);
|
|
6916
6920
|
} catch (e) {
|
|
@@ -6938,10 +6942,10 @@ ${list}`);
|
|
|
6938
6942
|
startTimer();
|
|
6939
6943
|
const objective = startObjective || "Perform comprehensive penetration testing";
|
|
6940
6944
|
setCurrentStatus("Initializing...");
|
|
6941
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6945
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Starting: ${objective}`);
|
|
6942
6946
|
try {
|
|
6943
6947
|
const session = await sessionManager2.createSession(objective, agent.getState().target.primary);
|
|
6944
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
6948
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Session: ${session.id}`);
|
|
6945
6949
|
await agent.runAutonomous(objective);
|
|
6946
6950
|
} catch (e) {
|
|
6947
6951
|
addMessage(MESSAGE_TYPE.ERROR, e instanceof Error ? e.message : String(e));
|
|
@@ -6999,7 +7003,7 @@ ${list}`);
|
|
|
6999
7003
|
case "yolo":
|
|
7000
7004
|
const newYoloState = !approvalManager2.getAutoApprovedTools().length;
|
|
7001
7005
|
approvalManager2.setYoloMode(newYoloState);
|
|
7002
|
-
addMessage(MESSAGE_TYPE.SYSTEM, newYoloState ? "
|
|
7006
|
+
addMessage(MESSAGE_TYPE.SYSTEM, newYoloState ? "YOLO mode ON - Auto-approving all tools" : "\u{1F512} YOLO mode OFF - Manual approval required");
|
|
7003
7007
|
return;
|
|
7004
7008
|
case CLI_COMMAND.CLEAR:
|
|
7005
7009
|
case "c":
|
|
@@ -7053,7 +7057,7 @@ ${list}`);
|
|
|
7053
7057
|
const cp = await contextManagerRef.current.checkpoint(description);
|
|
7054
7058
|
setCheckpointCount((prev) => prev + 1);
|
|
7055
7059
|
wireLoggerRef.current?.statusUpdate({ action: "checkpoint", id: cp.id });
|
|
7056
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
7060
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `Checkpoint #${cp.id} created${description ? `: ${description}` : ""}`);
|
|
7057
7061
|
} else {
|
|
7058
7062
|
addMessage(MESSAGE_TYPE.ERROR, "Context manager not initialized");
|
|
7059
7063
|
}
|
|
@@ -7129,7 +7133,7 @@ ${list}`);
|
|
|
7129
7133
|
if (cps.length === 0) {
|
|
7130
7134
|
addMessage(MESSAGE_TYPE.SYSTEM, "No checkpoints");
|
|
7131
7135
|
} else {
|
|
7132
|
-
addMessage(MESSAGE_TYPE.SYSTEM,
|
|
7136
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `${cps.length} Checkpoints:`);
|
|
7133
7137
|
cps.forEach((cp) => {
|
|
7134
7138
|
const time = new Date(cp.timestamp).toLocaleTimeString();
|
|
7135
7139
|
addMessage(MESSAGE_TYPE.SYSTEM, ` #${cp.id} @ ${time} (${cp.messageCount} msgs)${cp.description ? ` - ${cp.description}` : ""}`);
|
|
@@ -7337,7 +7341,7 @@ ${list}`);
|
|
|
7337
7341
|
} }) }),
|
|
7338
7342
|
pendingApproval && /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, marginBottom: 1, children: [
|
|
7339
7343
|
/* @__PURE__ */ jsxs2(Text2, { color: "yellow", bold: true, children: [
|
|
7340
|
-
"
|
|
7344
|
+
"APPROVAL NEEDED: ",
|
|
7341
7345
|
pendingApproval.toolName,
|
|
7342
7346
|
" (",
|
|
7343
7347
|
pendingApproval.riskLevel,
|
|
@@ -7352,7 +7356,7 @@ ${list}`);
|
|
|
7352
7356
|
] }),
|
|
7353
7357
|
isProcessing ? /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
|
|
7354
7358
|
/* @__PURE__ */ jsxs2(Box2, { children: [
|
|
7355
|
-
/* @__PURE__ */ jsx2(Text2, { color:
|
|
7359
|
+
/* @__PURE__ */ jsx2(Text2, { color: `hsl(${spinnerHue}, 70%, 60%)`, children: /* @__PURE__ */ jsx2(Spinner, { type: "dots" }) }),
|
|
7356
7360
|
/* @__PURE__ */ jsxs2(Text2, { color: THEME.text.muted, children: [
|
|
7357
7361
|
" ",
|
|
7358
7362
|
currentStatus,
|
|
@@ -7364,10 +7368,7 @@ ${list}`);
|
|
|
7364
7368
|
] })
|
|
7365
7369
|
] }),
|
|
7366
7370
|
preInputBuffer && /* @__PURE__ */ jsxs2(Box2, { marginTop: 1, children: [
|
|
7367
|
-
/* @__PURE__ */
|
|
7368
|
-
"\u2728 ",
|
|
7369
|
-
preInputBuffer
|
|
7370
|
-
] }),
|
|
7371
|
+
/* @__PURE__ */ jsx2(Text2, { color: THEME.text.accent, children: preInputBuffer }),
|
|
7371
7372
|
/* @__PURE__ */ jsx2(Text2, { color: THEME.text.muted, children: "\u258C" })
|
|
7372
7373
|
] }),
|
|
7373
7374
|
/* @__PURE__ */ jsx2(Box2, { marginTop: 1, children: /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: "ESC to interrupt \u2502 Type ahead to queue input" }) })
|
|
@@ -7384,7 +7385,7 @@ ${list}`);
|
|
|
7384
7385
|
pendingApproval ? "/y /n /ya" : ""
|
|
7385
7386
|
].filter((cmd) => cmd && cmd.toLowerCase().includes(input.toLowerCase().slice(1))).slice(0, 5).join(" \u2502 ") }) }),
|
|
7386
7387
|
/* @__PURE__ */ jsxs2(Box2, { children: [
|
|
7387
|
-
/* @__PURE__ */ jsx2(Text2, { color: mode === "agent" ? THEME.status.success : "yellow", children: mode === "agent" ? "
|
|
7388
|
+
/* @__PURE__ */ jsx2(Text2, { color: mode === "agent" ? THEME.status.success : "yellow", children: mode === "agent" ? "" : "$ " }),
|
|
7388
7389
|
/* @__PURE__ */ jsx2(
|
|
7389
7390
|
TextInput,
|
|
7390
7391
|
{
|
|
@@ -7404,9 +7405,13 @@ ${list}`);
|
|
|
7404
7405
|
state.target.primary || "No target",
|
|
7405
7406
|
state.target.discovered.length > 1 && ` (+${state.target.discovered.length - 1})`,
|
|
7406
7407
|
state.findings.length > 0 && ` \u2502 ${state.findings.length} findings`,
|
|
7407
|
-
state.credentials.length > 0 && ` \u2502 ${state.credentials.length} creds
|
|
7408
|
+
state.credentials.length > 0 && ` \u2502 ${state.credentials.length} creds`,
|
|
7409
|
+
tokenUsage.total > 0 && ` \u2502 ${(tokenUsage.total / 1e3).toFixed(0)}k`
|
|
7408
7410
|
] }),
|
|
7409
|
-
/* @__PURE__ */
|
|
7411
|
+
/* @__PURE__ */ jsxs2(Text2, { dimColor: true, children: [
|
|
7412
|
+
isProcessing && currentStatus && `${currentStatus.slice(0, 40)} \u2502 `,
|
|
7413
|
+
isProcessing && "ESC"
|
|
7414
|
+
] })
|
|
7410
7415
|
] })
|
|
7411
7416
|
] });
|
|
7412
7417
|
};
|