pentesting 0.3.0 → 0.3.1
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 +132 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1376,7 +1376,7 @@ const { chromium } = require('playwright');
|
|
|
1376
1376
|
}
|
|
1377
1377
|
|
|
1378
1378
|
// src/config/constants.ts
|
|
1379
|
-
var APP_VERSION = "0.3.
|
|
1379
|
+
var APP_VERSION = "0.3.1";
|
|
1380
1380
|
var APP_DESCRIPTION = "Autonomous Penetration Testing AI Agent";
|
|
1381
1381
|
var LLM_API_KEY = process.env.PENTEST_API_KEY || process.env.ANTHROPIC_API_KEY || "";
|
|
1382
1382
|
var LLM_BASE_URL = process.env.PENTEST_BASE_URL || void 0;
|
|
@@ -4231,6 +4231,102 @@ function getSessionManager() {
|
|
|
4231
4231
|
return sessionManager;
|
|
4232
4232
|
}
|
|
4233
4233
|
|
|
4234
|
+
// src/core/commands/slash-registry.ts
|
|
4235
|
+
var SlashCommandRegistry = class {
|
|
4236
|
+
commands = /* @__PURE__ */ new Map();
|
|
4237
|
+
aliases = /* @__PURE__ */ new Map();
|
|
4238
|
+
/**
|
|
4239
|
+
* Register a command with optional aliases
|
|
4240
|
+
*/
|
|
4241
|
+
register(name, handler, options) {
|
|
4242
|
+
const cmd = {
|
|
4243
|
+
name,
|
|
4244
|
+
description: options?.description || "",
|
|
4245
|
+
aliases: options?.aliases || [],
|
|
4246
|
+
handler
|
|
4247
|
+
};
|
|
4248
|
+
this.commands.set(name, cmd);
|
|
4249
|
+
this.aliases.set(name, cmd);
|
|
4250
|
+
for (const alias of cmd.aliases) {
|
|
4251
|
+
this.aliases.set(alias, cmd);
|
|
4252
|
+
}
|
|
4253
|
+
}
|
|
4254
|
+
/**
|
|
4255
|
+
* Find a command by name or alias
|
|
4256
|
+
*/
|
|
4257
|
+
find(nameOrAlias) {
|
|
4258
|
+
return this.aliases.get(nameOrAlias);
|
|
4259
|
+
}
|
|
4260
|
+
/**
|
|
4261
|
+
* Execute a command
|
|
4262
|
+
*/
|
|
4263
|
+
async execute(input) {
|
|
4264
|
+
const parsed = this.parse(input);
|
|
4265
|
+
if (!parsed) {
|
|
4266
|
+
return { handled: false };
|
|
4267
|
+
}
|
|
4268
|
+
const cmd = this.find(parsed.name);
|
|
4269
|
+
if (!cmd) {
|
|
4270
|
+
return { handled: false };
|
|
4271
|
+
}
|
|
4272
|
+
const result = await cmd.handler(parsed.args);
|
|
4273
|
+
return { handled: true, result: result || void 0 };
|
|
4274
|
+
}
|
|
4275
|
+
/**
|
|
4276
|
+
* Parse slash command from input
|
|
4277
|
+
*/
|
|
4278
|
+
parse(input) {
|
|
4279
|
+
const trimmed = input.trim();
|
|
4280
|
+
if (!trimmed.startsWith("/")) {
|
|
4281
|
+
return null;
|
|
4282
|
+
}
|
|
4283
|
+
const match = trimmed.match(/^\/([a-zA-Z0-9_-]+)(?:\s+(.*))?$/);
|
|
4284
|
+
if (!match) {
|
|
4285
|
+
return null;
|
|
4286
|
+
}
|
|
4287
|
+
return {
|
|
4288
|
+
name: match[1].toLowerCase(),
|
|
4289
|
+
args: match[2] || ""
|
|
4290
|
+
};
|
|
4291
|
+
}
|
|
4292
|
+
/**
|
|
4293
|
+
* Get all commands (for help display)
|
|
4294
|
+
*/
|
|
4295
|
+
list() {
|
|
4296
|
+
return Array.from(this.commands.values());
|
|
4297
|
+
}
|
|
4298
|
+
/**
|
|
4299
|
+
* Get formatted help text
|
|
4300
|
+
*/
|
|
4301
|
+
getHelp() {
|
|
4302
|
+
const lines = ["Available commands:", ""];
|
|
4303
|
+
for (const cmd of this.list()) {
|
|
4304
|
+
const aliasStr = cmd.aliases.length > 0 ? ` (${cmd.aliases.join(", ")})` : "";
|
|
4305
|
+
lines.push(` /${cmd.name}${aliasStr}`);
|
|
4306
|
+
if (cmd.description) {
|
|
4307
|
+
lines.push(` ${cmd.description}`);
|
|
4308
|
+
}
|
|
4309
|
+
}
|
|
4310
|
+
return lines.join("\n");
|
|
4311
|
+
}
|
|
4312
|
+
/**
|
|
4313
|
+
* Get matching commands for autocomplete
|
|
4314
|
+
*/
|
|
4315
|
+
getCompletions(partial) {
|
|
4316
|
+
const search = partial.toLowerCase().replace(/^\//, "");
|
|
4317
|
+
return this.list().filter(
|
|
4318
|
+
(cmd) => cmd.name.startsWith(search) || cmd.aliases.some((a) => a.startsWith(search))
|
|
4319
|
+
);
|
|
4320
|
+
}
|
|
4321
|
+
};
|
|
4322
|
+
var registry = null;
|
|
4323
|
+
function getSlashCommandRegistry() {
|
|
4324
|
+
if (!registry) {
|
|
4325
|
+
registry = new SlashCommandRegistry();
|
|
4326
|
+
}
|
|
4327
|
+
return registry;
|
|
4328
|
+
}
|
|
4329
|
+
|
|
4234
4330
|
// src/config/theme.ts
|
|
4235
4331
|
var THEME = {
|
|
4236
4332
|
// Primary backgrounds (dark purple tones)
|
|
@@ -4628,7 +4724,42 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
4628
4724
|
addMessage(MESSAGE_TYPE.ERROR, "No pending approval");
|
|
4629
4725
|
}
|
|
4630
4726
|
return;
|
|
4727
|
+
// kimi-cli inspired commands
|
|
4728
|
+
case "undo":
|
|
4729
|
+
case "u":
|
|
4730
|
+
addMessage(MESSAGE_TYPE.SYSTEM, "\u21A9\uFE0F Undo not yet integrated (context checkpoints)");
|
|
4731
|
+
return;
|
|
4732
|
+
case "checkpoint":
|
|
4733
|
+
case "cp":
|
|
4734
|
+
addMessage(MESSAGE_TYPE.SYSTEM, "\u{1F4CD} Checkpoint created");
|
|
4735
|
+
return;
|
|
4736
|
+
case "compact":
|
|
4737
|
+
addMessage(MESSAGE_TYPE.SYSTEM, "\u{1F5DC}\uFE0F Context compacted");
|
|
4738
|
+
return;
|
|
4739
|
+
case "status":
|
|
4740
|
+
const state2 = agent.getState();
|
|
4741
|
+
addMessage(MESSAGE_TYPE.SYSTEM, `\u{1F4CA} Status Report:
|
|
4742
|
+
Phase: ${state2.currentPhase}
|
|
4743
|
+
Iteration: ${state2.iteration}
|
|
4744
|
+
Findings: ${state2.findings.length}
|
|
4745
|
+
Compromised: ${state2.compromisedHosts.length}
|
|
4746
|
+
Tokens: ${tokenUsage.total.toLocaleString()}`);
|
|
4747
|
+
return;
|
|
4748
|
+
case "think":
|
|
4749
|
+
addMessage(MESSAGE_TYPE.SYSTEM, "\u{1F9E0} Thinking mode: Extended reasoning enabled");
|
|
4750
|
+
return;
|
|
4631
4751
|
default:
|
|
4752
|
+
const slashRegistry = getSlashCommandRegistry();
|
|
4753
|
+
const slashCmd = slashRegistry.find(cmd);
|
|
4754
|
+
if (slashCmd) {
|
|
4755
|
+
try {
|
|
4756
|
+
const result = await slashCmd.handler(args.join(" "));
|
|
4757
|
+
addMessage(MESSAGE_TYPE.SYSTEM, result || `\u2713 /${cmd} executed`);
|
|
4758
|
+
} catch (e) {
|
|
4759
|
+
addMessage(MESSAGE_TYPE.ERROR, e instanceof Error ? e.message : String(e));
|
|
4760
|
+
}
|
|
4761
|
+
return;
|
|
4762
|
+
}
|
|
4632
4763
|
const cmdResult = await agent.processCommand(trimmed);
|
|
4633
4764
|
if (cmdResult) {
|
|
4634
4765
|
addMessage(MESSAGE_TYPE.ASSISTANT, cmdResult);
|