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.
Files changed (2) hide show
  1. package/dist/index.js +132 -1
  2. 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.0";
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pentesting",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Autonomous Penetration Testing AI Agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",