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.
Files changed (2) hide show
  1. package/dist/index.js +36 -31
  2. 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, "\u26A0\uFE0F YOLO Mode: Auto-approving all tool executions");
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, `\u{1F3AF} Target: ${target}`);
6641
+ addMessage(MESSAGE_TYPE.SYSTEM, `Target: ${target}`);
6642
6642
  }
6643
6643
  onTargetChange((newTarget) => {
6644
6644
  agent.setTarget(newTarget);
6645
- addMessage(MESSAGE_TYPE.SYSTEM, `\u{1F3AF} Target \u2192 ${newTarget}`);
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
- setCurrentStatus(`Running ${data.name}...`);
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, `\u{1F3AF} [${finding.severity.toUpperCase()}] ${finding.title}`);
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, `\u{1F4CD} Phase: ${data.phaseId}`);
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, `\u26A0\uFE0F APPROVAL NEEDED: ${data.toolName} (${data.riskLevel} risk)`);
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, `\u26A0\uFE0F APPROVAL NEEDED: ${req.toolName} (${req.riskLevel} risk)`);
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
- \u{1F3AF} No targets set
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, `\u{1F3AF} Targets:
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, `\u{1F3AF} Targets (${targets.length}):
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, `\u{1F3AF} Target \u2192 ${subCmd}`);
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, `\u{1F680} Starting multi-target attack on ${allTargets.length} targets`);
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, `\u{1F4C1} Session: ${session.id}`);
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, `\u{1F680} Starting: ${objective}`);
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, `\u{1F4C1} Session: ${session.id}`);
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 ? "\u26A0\uFE0F YOLO mode ON - Auto-approving all tools" : "\u{1F512} YOLO mode OFF - Manual approval required");
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, `\u{1F4CD} Checkpoint #${cp.id} created${description ? `: ${description}` : ""}`);
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, `\u{1F4CD} ${cps.length} Checkpoints:`);
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
- "\u26A0\uFE0F APPROVAL NEEDED: ",
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: THEME.status.running, children: /* @__PURE__ */ jsx2(Spinner, { type: "dots" }) }),
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__ */ jsxs2(Text2, { color: THEME.text.accent, children: [
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" ? "\u2728 " : "$ " }),
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__ */ jsx2(Text2, { dimColor: true, children: isProcessing && "ESC" })
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pentesting",
3
- "version": "0.7.11",
3
+ "version": "0.7.13",
4
4
  "description": "Autonomous Penetration Testing AI Agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",