@integsec/agentic-pentest-proxy 0.4.0 → 0.4.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.
@@ -10,7 +10,7 @@
10
10
  "containers": [
11
11
  {
12
12
  "class_name": "PentestGatewayContainer",
13
- "image": "docker.io/integsec/agentic-pentest-mcp-proxy:0.4.0",
13
+ "image": "docker.io/integsec/agentic-pentest-mcp-proxy:0.4.1",
14
14
  "instance_type": "basic",
15
15
  "max_instances": 1
16
16
  }
@@ -12,9 +12,9 @@ const url = new URL(process.argv[2] ?? process.env.GATEWAY_URL ?? "http://127.0.
12
12
  if (!["127.0.0.1", "localhost", "[::1]"].includes(url.hostname) || url.protocol !== "http:") {
13
13
  throw new Error("The local bridge only accepts a loopback HTTP gateway URL");
14
14
  }
15
- const upstream = new Client({ name: "agentic-pentest-bridge", version: "0.4.0" });
15
+ const upstream = new Client({ name: "agentic-pentest-bridge", version: "0.4.1" });
16
16
  await upstream.connect(new StreamableHTTPClientTransport(url));
17
- const bridge = new Server({ name: "agentic-pentest-local", version: "0.4.0" }, { capabilities: { tools: {} } });
17
+ const bridge = new Server({ name: "agentic-pentest-local", version: "0.4.1" }, { capabilities: { tools: {} } });
18
18
  bridge.setRequestHandler(ListToolsRequestSchema, async (request) => upstream.listTools(request.params));
19
19
  bridge.setRequestHandler(CallToolRequestSchema, async (request) => upstream.callTool(request.params));
20
20
  await bridge.connect(new StdioServerTransport());
@@ -20,14 +20,16 @@ const tool = mode === "nmap" ? {
20
20
  name: "nuclei_scan", description: "Start a bounded HTTP Nuclei scan against one approved URL. Returns a scan ID immediately; use nuclei_scan_status for results. Disables OAST and automatic updates.",
21
21
  inputSchema: { type: "object", properties: {
22
22
  url: { type: "string", description: "One authorized HTTP or HTTPS URL." },
23
+ maxDurationMinutes: { type: "integer", minimum: 1, maximum: 240, description: "How long to scan, from 1 to 240 minutes. Defaults to 60 minutes and never exceeds the engagement window." },
23
24
  }, required: ["url"], additionalProperties: false },
24
25
  };
25
26
  const jobs = new NucleiJobs();
27
+ process.on("exit", () => jobs.close());
26
28
  const jobTool = (name, description) => ({ name, description, inputSchema: { type: "object", properties: {
27
29
  scanId: { type: "string", description: "Scan ID returned by nuclei_scan." },
28
30
  url: { type: "string", description: "The same authorized URL used to start the scan." },
29
31
  }, required: ["scanId", "url"], additionalProperties: false } });
30
- const server = new Server({ name: `integsec-${mode}-mcp`, version: "0.4.0" }, { capabilities: { tools: {} } });
32
+ const server = new Server({ name: `integsec-${mode}-mcp`, version: "0.4.1" }, { capabilities: { tools: {} } });
31
33
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: mode === "nuclei" ? [tool,
32
34
  jobTool("nuclei_scan_status", "Check progress and get results of a Nuclei scan for the same approved URL."),
33
35
  jobTool("nuclei_scan_cancel", "Stop a running Nuclei scan for the same approved URL.")] : [tool] }));
@@ -38,8 +40,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
38
40
  const input = request.params.arguments ?? {};
39
41
  if (mode === "nuclei") {
40
42
  const result = request.params.name === "nuclei_scan_status" ? jobs.status(input.scanId, input.url)
41
- : request.params.name === "nuclei_scan_cancel" ? jobs.cancel(input.scanId, input.url)
42
- : jobs.start(input.url, input._gatewayDeadline);
43
+ : request.params.name === "nuclei_scan_cancel" ? jobs.cancel(input.scanId, input.url, input._gatewayCancelReason === "Engagement or server changed." || input._gatewayCancelReason === "Gateway is shutting down."
44
+ ? input._gatewayCancelReason : undefined)
45
+ : jobs.start(input.url, input._gatewayDeadline, input.maxDurationMinutes);
43
46
  return { content: [{ type: "text", text: JSON.stringify(result) }] };
44
47
  }
45
48
  const args = nmapArgs(input);
@@ -1 +1 @@
1
- {"version":3,"file":"integsec-agentic-pentest-scanners-mcp.js","sourceRoot":"","sources":["../../bin/integsec-agentic-pentest-scanners-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integsec-agentic-pentest-scanners-mcp.js","sourceRoot":"","sources":["../../bin/integsec-agentic-pentest-scanners-mcp.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ export function loadConfig() {
50
50
  techniqueMapPath: process.env.TECHNIQUE_MAP_PATH,
51
51
  dnsCacheTtl: parseInt(process.env.DNS_CACHE_TTL || "60", 10),
52
52
  logLevel: process.env.LOG_LEVEL || "INFO",
53
- proxyVersion: process.env.PROXY_VERSION || "0.4.0",
53
+ proxyVersion: process.env.PROXY_VERSION || "0.4.1",
54
54
  };
55
55
  }
56
56
  //# sourceMappingURL=config.js.map
@@ -55,7 +55,7 @@ export async function runCommand(upstream, target, signal, maxDurationMs = MAX_D
55
55
  child.kill();
56
56
  reject(new Error(message));
57
57
  };
58
- const duration = Math.min(Math.max(maxDurationMs, 1000), 30 * 60_000);
58
+ const duration = Math.min(Math.max(maxDurationMs, 1000), 240 * 60_000);
59
59
  const timer = setTimeout(() => fail(`Command exceeded the ${Math.round(duration / 60_000)}-minute limit.`), duration);
60
60
  const collect = (chunk) => {
61
61
  size += chunk.length;
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/gateway/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7B,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO;QACL,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE;QAC5C,WAAW,EAAE,oCAAoC,QAAQ,CAAC,IAAI,iCAAiC,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,sGAAsG;QAC9P,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE;gBAClD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,wCAAwC,EAAE;aACxJ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,KAA8B;IAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;QACpF,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5G,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,CAAC,yFAAyF,CAAC,IAAI,CAAC,MAAM,CAAC;YACzG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAClC,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAAC,CAAC;QACzF,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;YACxH,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAkB,EAAE,MAAc,EAAE,MAAoB,EAAE,aAAa,GAAG,YAAY;IACrH,IAAI,QAAQ,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;QACrH,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7H,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE;YAC/B,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtH,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;YAChC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,UAAU;gBAAE,OAAO,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC1F,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,sEAAsE,CAAC,CAAC,CAAC,4FAA4F,CAAC,CAAC,CAAC;QACvN,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAC3F,OAAO,CAAC,MAAM,IAAI,mCAAmC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/gateway/command.ts"],"names":[],"mappings":"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"}
@@ -5,15 +5,20 @@ export interface GatewayJob {
5
5
  scopeUpdatedAt: string;
6
6
  tool: string;
7
7
  startedAt: string;
8
+ deadlineAt: string;
9
+ maxDurationMinutes: number;
8
10
  finishedAt?: string;
9
- status: "running" | "completed" | "failed" | "canceled";
11
+ status: "running" | "completed" | "failed" | "canceled" | "timed_out";
10
12
  result?: unknown;
11
13
  error?: string;
12
14
  }
13
- export declare const MAX_JOB_MS: number;
15
+ export declare const MAX_LOCAL_JOB_MINUTES = 240;
16
+ export declare const MAX_HOSTED_JOB_MINUTES = 30;
14
17
  export declare class GatewayJobs {
18
+ readonly maxMinutes: number;
15
19
  private jobs;
16
- start(user: string, scopeId: string, scopeUpdatedAt: string, scopeEnd: string, tool: string, execute: (signal: AbortSignal) => Promise<unknown>): GatewayJob;
20
+ constructor(maxMinutes?: number);
21
+ start(user: string, scopeId: string, scopeUpdatedAt: string, scopeEnd: string, tool: string, execute: (signal: AbortSignal) => Promise<unknown>, maxDurationMinutes?: unknown): GatewayJob;
17
22
  list(user: string, scopeId: string): GatewayJob[];
18
23
  get(user: string, scopeId: string, id: string): GatewayJob;
19
24
  cancel(user: string, scopeId: string, id: string): GatewayJob;
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,eAAO,MAAM,UAAU,QAAc,CAAC;AAEtC,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAiC;IAE7C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACzF,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU;IA0BjE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAOjD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAM1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAO7D,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI;IAI1D,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,KAAK;CASd"}
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,qBAAa,WAAW;IAEV,QAAQ,CAAC,UAAU;IAD/B,OAAO,CAAC,IAAI,CAAiC;gBACxB,UAAU,SAAwB;IAEvD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACzF,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAE,OAAuC,GAAG,UAAU;IAgC9H,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAOjD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAM1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAO7D,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI;IAI1D,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,KAAK;CASd"}
@@ -1,20 +1,31 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  const MAX_RUNNING = 32;
3
3
  const MAX_PER_USER = 4;
4
- export const MAX_JOB_MS = 30 * 60_000;
4
+ export const MAX_LOCAL_JOB_MINUTES = 240;
5
+ export const MAX_HOSTED_JOB_MINUTES = 30;
5
6
  export class GatewayJobs {
7
+ maxMinutes;
6
8
  jobs = new Map();
7
- start(user, scopeId, scopeUpdatedAt, scopeEnd, tool, execute) {
9
+ constructor(maxMinutes = MAX_LOCAL_JOB_MINUTES) {
10
+ this.maxMinutes = maxMinutes;
11
+ }
12
+ start(user, scopeId, scopeUpdatedAt, scopeEnd, tool, execute, maxDurationMinutes = Math.min(60, this.maxMinutes)) {
13
+ if (typeof maxDurationMinutes !== "number" || !Number.isInteger(maxDurationMinutes) || maxDurationMinutes < 1 || maxDurationMinutes > this.maxMinutes)
14
+ throw new Error(`maxDurationMinutes must be a whole number from 1 to ${this.maxMinutes}.`);
8
15
  const running = [...this.jobs.values()].filter((job) => job.status === "running");
9
16
  if (running.length >= MAX_RUNNING || running.filter((job) => job.user === user).length >= MAX_PER_USER)
10
17
  throw new Error("Too many background jobs are running; wait or cancel one.");
11
- const remaining = Math.min(MAX_JOB_MS, Date.parse(scopeEnd) - Date.now());
18
+ const now = Date.now();
19
+ const scopeDeadline = Date.parse(scopeEnd);
20
+ const selectedDeadline = now + maxDurationMinutes * 60_000;
21
+ const remaining = Math.min(selectedDeadline, scopeDeadline) - now;
12
22
  if (!Number.isFinite(remaining) || remaining < 1000)
13
23
  throw new Error("Engagement window ends too soon to start a job.");
14
24
  const controller = new AbortController();
15
25
  const job = { id: randomUUID(), user, scopeId, scopeUpdatedAt, tool,
16
- startedAt: new Date().toISOString(), status: "running", controller,
17
- timer: setTimeout(() => this.cancelInternal(job, "Time limit or engagement window reached."), remaining) };
26
+ startedAt: new Date(now).toISOString(), deadlineAt: new Date(now + remaining).toISOString(), maxDurationMinutes,
27
+ status: "running", controller, timer: setTimeout(() => this.cancelInternal(job, scopeDeadline <= selectedDeadline
28
+ ? "Engagement window ended before the selected job duration." : `Selected ${maxDurationMinutes}-minute job limit reached.`, "timed_out"), remaining) };
18
29
  this.jobs.set(job.id, job);
19
30
  this.prune();
20
31
  void Promise.resolve().then(() => execute(controller.signal)).then((result) => {
@@ -68,10 +79,10 @@ export class GatewayJobs {
68
79
  close() { for (const job of this.jobs.values())
69
80
  if (job.status === "running")
70
81
  this.cancelInternal(job, "Gateway is shutting down."); }
71
- cancelInternal(job, reason) {
82
+ cancelInternal(job, reason, status = "canceled") {
72
83
  if (job.status !== "running")
73
84
  return;
74
- job.status = "canceled";
85
+ job.status = status;
75
86
  job.error = reason;
76
87
  job.finishedAt = new Date().toISOString();
77
88
  clearTimeout(job.timer);
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/gateway/jobs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiE,MAAM,YAAY,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAc,MAAM,WAAW,CAAC;AAUpD,qBAAa,cAAc;IAUb,QAAQ,CAAC,KAAK,EAAE,YAAY;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAW,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAAwC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IATvL,QAAQ,CAAC,SAAS,YAAmB;IACrC,QAAQ,CAAC,IAAI,cAAqB;IAClC,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAA+G;IAC/H,OAAO,CAAC,eAAe,CAA8E;IACrG,OAAO,CAAC,UAAU,CAAiH;gBAE9G,KAAK,EAAE,YAAY,EAAmB,MAAM,EAAE,OAAO,EAAmB,iBAAiB,CAAC,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,aAAA,EAAmB,cAAc,CAAC,GAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,aAAA;IAE9M,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9J,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9C,OAAO,CAAC,UAAU;YAYJ,SAAS;IA2BvB,OAAO,CAAC,SAAS;IAOjB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAiO9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiE,MAAM,YAAY,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAiD,MAAM,WAAW,CAAC;AAUvF,qBAAa,cAAc;IAUb,QAAQ,CAAC,KAAK,EAAE,YAAY;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAW,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAAwC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IATvL,QAAQ,CAAC,SAAS,YAAmB;IACrC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAA+G;IAC/H,OAAO,CAAC,eAAe,CAA8E;IACrG,OAAO,CAAC,UAAU,CAAiH;gBAE9G,KAAK,EAAE,YAAY,EAAmB,MAAM,EAAE,OAAO,EAAmB,iBAAiB,CAAC,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,aAAA,EAAmB,cAAc,CAAC,GAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,aAAA;IAI9M,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9J,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9C,OAAO,CAAC,UAAU;YAYJ,SAAS;IA2BvB,OAAO,CAAC,SAAS;IAOjB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAwO9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
@@ -10,7 +10,7 @@ import { TechniqueChecker, loadTechniqueMappings } from "../technique-checker.js
10
10
  import { activeScope, permitsUpstream } from "./state.js";
11
11
  import { commandTarget, commandTool, commandToolName, runCommand } from "./command.js";
12
12
  import { Workbench } from "./workbench.js";
13
- import { GatewayJobs, MAX_JOB_MS } from "./jobs.js";
13
+ import { GatewayJobs, MAX_HOSTED_JOB_MINUTES, MAX_LOCAL_JOB_MINUTES } from "./jobs.js";
14
14
  const toolError = (message) => ({ content: [{ type: "text", text: message }], isError: true });
15
15
  const ACTIVE_SCOPE_URI = "pentest://engagement/active";
16
16
  const PROMPTS = [
@@ -24,7 +24,7 @@ export class GatewayRuntime {
24
24
  requiredAuditSink;
25
25
  isActorAllowed;
26
26
  workbench = new Workbench();
27
- jobs = new GatewayJobs();
27
+ jobs;
28
28
  clients = new Map();
29
29
  pending = new Map();
30
30
  proxies = new Map();
@@ -36,6 +36,7 @@ export class GatewayRuntime {
36
36
  this.hosted = hosted;
37
37
  this.requiredAuditSink = requiredAuditSink;
38
38
  this.isActorAllowed = isActorAllowed;
39
+ this.jobs = new GatewayJobs(hosted ? MAX_HOSTED_JOB_MINUTES : MAX_LOCAL_JOB_MINUTES);
39
40
  }
40
41
  async sync() {
41
42
  const state = this.store.snapshot();
@@ -55,7 +56,7 @@ export class GatewayRuntime {
55
56
  this.nucleiJobs.delete(id);
56
57
  const client = this.clients.get(job.upstreamId)?.client;
57
58
  if (client)
58
- await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url } }, undefined, { timeout: 10_000 }).catch(() => undefined);
59
+ await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url, _gatewayCancelReason: "Engagement or server changed." } }, undefined, { timeout: 10_000 }).catch(() => undefined);
59
60
  }
60
61
  for (const [id, running] of this.runningCommands) {
61
62
  const current = state.upstreams.find((item) => item.id === id);
@@ -129,7 +130,7 @@ export class GatewayRuntime {
129
130
  const connection = (async () => {
130
131
  if (cached)
131
132
  await cached.client.close().catch(() => undefined);
132
- const client = new Client({ name: "agentic-pentest-gateway", version: "0.4.0" });
133
+ const client = new Client({ name: "agentic-pentest-gateway", version: "0.4.1" });
133
134
  const transport = upstream.transport === "stdio"
134
135
  ? new StdioClientTransport({ command: upstream.command, args: upstream.args, stderr: "pipe" })
135
136
  : upstream.transport === "sse"
@@ -161,7 +162,7 @@ export class GatewayRuntime {
161
162
  });
162
163
  }
163
164
  createServer(actor, email) {
164
- const server = new Server({ name: "agentic-pentest-gateway", version: "0.4.0" }, {
165
+ const server = new Server({ name: "agentic-pentest-gateway", version: "0.4.1" }, {
165
166
  capabilities: { tools: {}, resources: {}, prompts: {} }, instructions: INSTRUCTIONS,
166
167
  });
167
168
  const config = loadConfig();
@@ -240,8 +241,11 @@ export class GatewayRuntime {
240
241
  }));
241
242
  return { tools: [
242
243
  ...groups.flat(),
243
- { name: "gateway__start_long_call", description: "Run an enabled MCP tool as a background job. Returns a job ID immediately. Scope rules still apply; use gateway__job_status or the workbench to get the result.", inputSchema: {
244
- type: "object", properties: { tool: { type: "string", description: "Full tool name, such as burp__start_scan." }, arguments: { type: "object", description: "Arguments for that tool." } }, required: ["tool", "arguments"], additionalProperties: false,
244
+ { name: "gateway__start_long_call", description: `Run an enabled MCP tool as a background job. Returns a job ID immediately. Select 1–${this.jobs.maxMinutes} minutes; the engagement window can end it sooner. Scope rules still apply; use gateway__job_status or the workbench for results.`, inputSchema: {
245
+ type: "object", properties: { tool: { type: "string", description: "Full tool name, such as burp__start_scan." },
246
+ arguments: { type: "object", description: "Arguments for that tool." },
247
+ maxDurationMinutes: { type: "integer", minimum: 1, maximum: this.jobs.maxMinutes, description: `Optional duration from 1 to ${this.jobs.maxMinutes} minutes. Defaults to ${Math.min(60, this.jobs.maxMinutes)} minutes.` } },
248
+ required: ["tool", "arguments"], additionalProperties: false,
245
249
  } },
246
250
  { name: "gateway__job_status", description: "Get a background job result by ID. Only your jobs for the current engagement are visible.", inputSchema: {
247
251
  type: "object", properties: { jobId: { type: "string" } }, required: ["jobId"], additionalProperties: false,
@@ -268,8 +272,11 @@ export class GatewayRuntime {
268
272
  if (typeof input.tool !== "string" || input.tool.startsWith("gateway__") || !input.tool.includes("__") ||
269
273
  !input.arguments || typeof input.arguments !== "object" || Array.isArray(input.arguments))
270
274
  return toolError("Specify an enabled upstream tool and a JSON arguments object.");
271
- const job = this.jobs.start(user, scope.id, scope.updatedAt, scope.manifest.engagement_window.end, input.tool, (jobSignal) => handleCall({ ...request, params: { name: input.tool, arguments: input.arguments } }, jobSignal));
272
- return { content: [{ type: "text", text: JSON.stringify({ jobId: job.id, status: job.status, tool: job.tool, maxMinutes: MAX_JOB_MS / 60_000 }) }] };
275
+ if (Object.keys(input).some((key) => !["tool", "arguments", "maxDurationMinutes"].includes(key)))
276
+ return toolError("Unknown background job option.");
277
+ const job = this.jobs.start(user, scope.id, scope.updatedAt, scope.manifest.engagement_window.end, input.tool, (jobSignal) => handleCall({ ...request, params: { name: input.tool, arguments: input.arguments } }, jobSignal), input.maxDurationMinutes);
278
+ return { content: [{ type: "text", text: JSON.stringify({ jobId: job.id, status: job.status, tool: job.tool,
279
+ deadlineAt: job.deadlineAt, maxDurationMinutes: job.maxDurationMinutes }) }] };
273
280
  }
274
281
  if (request.params.name === "gateway__job_list")
275
282
  return { content: [{ type: "text", text: JSON.stringify(this.jobs.list(user, scope.id)) }] };
@@ -318,9 +325,11 @@ export class GatewayRuntime {
318
325
  input = interception.args;
319
326
  if (signal?.aborted)
320
327
  return toolError("Background job was canceled before dispatch.");
321
- if (bundledNuclei && toolName === "nuclei_scan" && Object.keys(input).some((key) => key !== "url"))
322
- return toolError("Nuclei scan accepts only the URL argument.");
328
+ if (bundledNuclei && toolName === "nuclei_scan" && Object.keys(input).some((key) => !["url", "maxDurationMinutes"].includes(key)))
329
+ return toolError("Nuclei scan accepts only the URL and maxDurationMinutes arguments.");
323
330
  if (bundledNuclei && ["nuclei_scan_status", "nuclei_scan_cancel"].includes(toolName)) {
331
+ if (Object.keys(input).some((key) => !["url", "scanId"].includes(key)))
332
+ return toolError("Nuclei job controls accept only URL and scanId.");
324
333
  const job = typeof input.scanId === "string" ? this.nucleiJobs.get(input.scanId) : undefined;
325
334
  if (!job || job.user !== user || job.scopeId !== scope.id || job.scopeUpdatedAt !== scope.updatedAt || job.upstreamId !== upstream.id || job.url !== input.url)
326
335
  return toolError("Nuclei scan not found for this user and engagement.");
@@ -353,7 +362,7 @@ export class GatewayRuntime {
353
362
  running.add(call);
354
363
  this.runningCommands.set(upstream.id, running);
355
364
  try {
356
- return { content: [{ type: "text", text: await runCommand(upstream, target, call.controller.signal, signal ? MAX_JOB_MS : undefined) }] };
365
+ return { content: [{ type: "text", text: await runCommand(upstream, target, call.controller.signal, signal ? this.jobs.maxMinutes * 60_000 : undefined) }] };
357
366
  }
358
367
  catch (error) {
359
368
  return toolError(error instanceof Error ? error.message : "Command failed.");
@@ -385,7 +394,7 @@ export class GatewayRuntime {
385
394
  return toolError("User access was revoked before dispatch.");
386
395
  const upstreamInput = bundledNuclei && toolName === "nuclei_scan"
387
396
  ? { ...input, _gatewayDeadline: Date.parse(scope.manifest.engagement_window.end) } : input;
388
- const result = await client.callTool({ name: toolName, arguments: upstreamInput }, undefined, { timeout: signal ? MAX_JOB_MS + 10_000 : 300_000, signal });
397
+ const result = await client.callTool({ name: toolName, arguments: upstreamInput }, undefined, { timeout: signal ? this.jobs.maxMinutes * 60_000 + 10_000 : 300_000, signal });
389
398
  if (bundledNuclei && toolName === "nuclei_scan" && !result.isError) {
390
399
  const first = Array.isArray(result.content) ? result.content[0] : undefined;
391
400
  if (first?.type === "text") {
@@ -439,7 +448,7 @@ export class GatewayRuntime {
439
448
  for (const [id, job] of this.nucleiJobs) {
440
449
  const client = this.clients.get(job.upstreamId)?.client;
441
450
  if (client)
442
- await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url } }, undefined, { timeout: 10_000 }).catch(() => undefined);
451
+ await client.callTool({ name: "nuclei_scan_cancel", arguments: { scanId: id, url: job.url, _gatewayCancelReason: "Gateway is shutting down." } }, undefined, { timeout: 10_000 }).catch(() => undefined);
443
452
  }
444
453
  this.nucleiJobs.clear();
445
454
  for (const running of this.runningCommands.values())
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/gateway/runtime.ts"],"names":[],"mappings":"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"}
@@ -76,7 +76,7 @@ function renderJobs() {
76
76
  const row = document.createElement('div'); row.className = `job-item ${job.status}`;
77
77
  const info = document.createElement('div');
78
78
  const title = document.createElement('strong'); title.textContent = `${job.tool} · ${job.status}`;
79
- const detail = document.createElement('small'); detail.textContent = `${formatTime(job.startedAt)} · ${job.id}`;
79
+ const detail = document.createElement('small'); detail.textContent = `${formatTime(job.startedAt)} · deadline ${formatTime(job.deadlineAt)} · ${job.id}`;
80
80
  info.append(title, detail);
81
81
  const actions = document.createElement('div'); actions.className = 'job-actions';
82
82
  const view = document.createElement('button'); view.className = 'small secondary'; view.textContent = selectedJobId === job.id ? 'Hide' : 'View';
@@ -1,3 +1,4 @@
1
1
  :root{font:14px system-ui,sans-serif;color:#e9f3f4;background:#0a131b}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button{border:0;border-radius:8px;background:#28c3a8;color:#06231e;padding:10px 14px;font-weight:700;cursor:pointer}button:hover{filter:brightness(1.1)}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:#294456;color:#dcebf0}button.danger{background:#773640;color:#fff}button.small{padding:5px 9px;font-size:12px}.topbar{min-height:72px;background:#101f29;border-bottom:1px solid #244050;padding:12px max(20px,3vw);display:flex;align-items:center;gap:24px;justify-content:space-between}.brand{display:flex;align-items:center;gap:10px}.brand strong,.brand small{display:block}.brand strong{font-size:16px}.brand small{color:#9eb7c2;font-size:11px}.mark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#27c6aa;color:#07251e;font-size:12px;font-weight:900}.topbar nav{display:flex;gap:18px}.topbar a{color:#9feadd;text-decoration:none}.topbar a:hover{text-decoration:underline}.identity{color:#a4bdc7;font-size:12px}main{max-width:1600px;margin:auto;padding:24px max(20px,3vw) 32px}.intro{display:flex;justify-content:space-between;gap:24px;align-items:center;margin-bottom:18px}.intro h1{font-size:29px;line-height:1.15;margin:3px 0 7px}.intro p{color:#a9bfca;margin:0;line-height:1.45}.intro>div:first-child{max-width:720px}.eyebrow{color:#49d8bd!important;letter-spacing:.13em;font-size:10px;font-weight:800;margin:0}.switchbox{background:#142731;border:1px solid #2b4d5b;border-radius:12px;padding:14px 17px;min-width:280px}.switchbox small{display:block;color:#a6bec8;margin:5px 0 8px}.switchbox p{font-size:12px}.toggle{display:flex;align-items:center;gap:10px;font-weight:800;font-size:15px;cursor:pointer}.toggle input{appearance:none;width:37px;height:22px;margin:0;border-radius:20px;background:#395361;position:relative;cursor:pointer}.toggle input:before{content:"";display:block;position:absolute;top:3px;left:3px;width:16px;height:16px;background:#ecf5f6;border-radius:50%;transition:transform .15s}.toggle input:checked{background:#23bda3}.toggle input:checked:before{transform:translateX(15px)}.token-card{border:1px solid #42647a;background:#172b37;border-radius:10px;padding:16px;margin:14px 0}.token-card label{display:block;margin-bottom:7px;font-weight:700}.token-card div{display:flex;gap:8px}.token-card input{flex:1}.token-card p{color:#a5bdc8;font-size:12px}.token-card a{color:#92e8d8}input:not([type=checkbox]),textarea,select{background:#0c1b25;border:1px solid #3e5c6b;border-radius:8px;color:#eef6f7;padding:9px 10px;min-width:0}input:focus,textarea:focus,select:focus,button:focus-visible{outline:2px solid #55d8c0;outline-offset:2px}.status{color:#8de9d7;min-height:18px;margin:7px 0 14px;font-size:12px}.status.error{color:#ff9f9f}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metrics div{background:#14242f;border:1px solid #2a4756;border-radius:10px;padding:14px 17px}.metrics strong{display:block;font-size:24px;line-height:1.1}.metrics span{display:block;color:#a4bbc6;font-size:11px;margin-top:4px}.metrics div:nth-child(2) strong{color:#59dca0}.metrics div:nth-child(3) strong{color:#ff9494}.metrics div:nth-child(4) strong{color:#ffd27a}.workspace{display:grid;grid-template-columns:minmax(360px,.95fr) minmax(420px,1.25fr);gap:15px;min-height:580px}.feed-panel,.detail-panel{background:#13232e;border:1px solid #2b4858;border-radius:12px;overflow:hidden}.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:16px 18px;border-bottom:1px solid #294655}.panel-heading h2{margin:2px 0 0;font-size:17px}.filters{display:grid;grid-template-columns:1fr 120px;gap:9px;padding:13px 16px;border-bottom:1px solid #294655}.filters label{display:block;color:#aebfc8;font-size:11px;font-weight:700}.filters input,.filters select{display:block;width:100%;margin-top:4px}.feed{max-height:690px;overflow:auto}.feed-item{display:grid;grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;text-align:left;border-radius:0;border-bottom:1px solid #25414e;background:transparent;color:#eaf3f5;padding:12px 15px;font-weight:400}.feed-item:hover,.feed-item.selected{background:#1d3742;filter:none}.feed-item .stripe{height:36px;border-radius:4px;background:#69808a}.feed-item.allowed .stripe{background:#3dd295}.feed-item.blocked .stripe,.feed-item.dropped .stripe{background:#ef777a}.feed-item.failed .stripe{background:#f5ad5a}.feed-item.pending .stripe{background:#ffd27a}.feed-item strong{display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-item small{display:block;color:#a6bbc5;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-item time{color:#9eafba;font-size:11px;align-self:start}.empty,.empty-detail{color:#a3b8c1;padding:22px;line-height:1.5}.badge{border-radius:20px;background:#334754;color:#d7e5e9;padding:5px 10px;font-size:11px;font-weight:800;text-transform:uppercase}.badge.allowed{background:#174e40;color:#8eebbd}.badge.blocked,.badge.dropped{background:#592c34;color:#ffb2b4}.badge.failed{background:#634629;color:#ffd098}.badge.pending{background:#554823;color:#ffe09a}#detail-body{padding:15px 18px 22px}.facts{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:0 0 15px}.facts div{background:#0f202a;padding:9px;border-radius:7px;min-width:0}.facts dt{color:#9bb1bb;font-size:10px;text-transform:uppercase;letter-spacing:.08em}.facts dd{margin:4px 0 0;word-break:break-word;font-size:12px}.section-heading{display:flex;justify-content:space-between;align-items:center}.section-heading h3,#edited-section h3,.pending-actions h3{font-size:13px;margin:9px 0}.detail-panel pre{background:#0b1923;border:1px solid #2d4958;border-radius:8px;margin:5px 0 16px;padding:12px;color:#afe9db;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow:auto;font:12px/1.55 ui-monospace,Consolas,monospace}.notice{background:#302b21;border-left:3px solid #e6bd69;padding:10px;margin:0 0 12px;color:#f2dcae}.pending-actions{border:1px solid #846a37;border-radius:9px;padding:12px;margin:10px 0 17px;background:#2a281f}.pending-actions p{color:#ddd3b9;font-size:12px;line-height:1.4;margin:2px 0 9px}.pending-actions textarea{display:block;width:100%;min-height:155px;font:12px/1.5 ui-monospace,Consolas,monospace}.action-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.footer-note{font-size:11px;color:#8da5af;margin:18px 2px}[hidden]{display:none!important}@media(max-width:900px){.workspace{grid-template-columns:1fr}.feed{max-height:350px}.intro{display:block}.switchbox{margin-top:14px}.topbar{flex-wrap:wrap}.topbar nav{order:3;width:100%}}@media(max-width:530px){.metrics{grid-template-columns:repeat(2,1fr)}.facts{grid-template-columns:1fr}.filters{grid-template-columns:1fr 105px}.intro h1{font-size:24px}}
2
2
  .jobs-panel{background:#13232e;border:1px solid #2b4858;border-radius:12px;margin-bottom:16px;overflow:hidden}.jobs-help{color:#a9bfca;margin:0;padding:13px 18px;font-size:12px;line-height:1.5}.jobs-help code{color:#a9f1df}.jobs{padding:0 16px 12px}.job-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;border-top:1px solid #2b4858;padding:12px 2px}.job-item strong,.job-item small{display:block}.job-item strong{font-size:13px}.job-item small{color:#a4bbc6;margin-top:4px}.job-actions{display:flex;gap:7px}.job-result{grid-column:1/-1;margin:0!important;max-height:250px!important}.job-item.running strong{color:#ffe09a}.job-item.completed strong{color:#8eebbd}.job-item.failed strong,.job-item.canceled strong{color:#ffb2b4}@media(max-width:530px){.job-item{grid-template-columns:1fr}.job-actions{justify-content:flex-start}}
3
3
  .intro .scope-label{margin-top:10px;color:#79e4cb;font-size:12px;font-weight:700}
4
+ .job-item.timed_out strong{color:#ffb2b4}
@@ -4,5 +4,5 @@ export { loadManifest } from "./manifest.js";
4
4
  export { loadConfig } from "./config.js";
5
5
  export { AuditLogger } from "./audit/index.js";
6
6
  export type { ScopeManifest, AuditEntry, ValidationResult, Decision } from "./types.js";
7
- export declare const VERSION = "0.4.0";
7
+ export declare const VERSION = "0.4.1";
8
8
  //# sourceMappingURL=index.d.ts.map
package/dist/src/index.js CHANGED
@@ -3,5 +3,5 @@ export { ScopeValidator } from "./validator.js";
3
3
  export { loadManifest } from "./manifest.js";
4
4
  export { loadConfig } from "./config.js";
5
5
  export { AuditLogger } from "./audit/index.js";
6
- export const VERSION = "0.4.0";
6
+ export const VERSION = "0.4.1";
7
7
  //# sourceMappingURL=index.js.map
@@ -1,24 +1,39 @@
1
1
  import { runScanner } from "./runner.js";
2
+ export type ScanStatus = "running" | "completed" | "failed" | "canceled" | "timed_out";
2
3
  export declare class NucleiJobs {
3
4
  private readonly execute;
4
5
  private jobs;
5
6
  constructor(execute?: typeof runScanner);
6
- start(url: unknown, deadline?: unknown): {
7
+ start(url: unknown, deadline?: unknown, maxDurationMinutes?: unknown): {
7
8
  scanId: string;
8
- status: string;
9
+ status: ScanStatus;
10
+ deadlineAt: string;
11
+ maxDurationMinutes: number;
9
12
  message: string;
10
13
  };
11
14
  status(scanId: unknown, url: unknown): {
12
15
  scanId: string;
13
- status: string;
16
+ status: ScanStatus;
14
17
  startedAt: string;
15
18
  finishedAt?: string;
19
+ deadlineAt: string;
20
+ maxDurationMinutes: number;
21
+ findingCount: number;
22
+ partialFindings: string;
23
+ diagnostics: string;
24
+ outputTruncated: boolean;
25
+ lastOutputAt?: string;
16
26
  result?: string;
27
+ reason?: string;
17
28
  };
18
- cancel(scanId: unknown, url: unknown): {
29
+ cancel(scanId: unknown, url: unknown, reason?: string): {
19
30
  scanId: string;
20
- status: string;
31
+ status: ScanStatus;
32
+ reason?: string;
21
33
  };
34
+ close(): void;
35
+ private stop;
36
+ private capture;
22
37
  private get;
23
38
  private prune;
24
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAarD,qBAAa,UAAU;IAET,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,IAAI,CAA8B;gBACb,OAAO,GAAE,OAAO,UAAuB;IAEpE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAoB5F,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAKlI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAMzE,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,KAAK;CASd"}
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAoE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3G,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAsBvF,qBAAa,UAAU;IAET,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,IAAI,CAA8B;gBACb,OAAO,GAAE,OAAO,UAAuB;IAEpE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAE,OAAqC,GAC/F;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAoCzG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAClH,UAAU,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QACnH,eAAe,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAQrF,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAsB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAM5H,KAAK,IAAI,IAAI;IAEb,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,OAAO;IAqBf,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,KAAK;CASd"}
@@ -1,47 +1,108 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { nucleiArgs, runScanner } from "./runner.js";
2
+ import { DEFAULT_NUCLEI_SCAN_MINUTES, MAX_NUCLEI_SCAN_MINUTES, nucleiArgs, runScanner } from "./runner.js";
3
3
  export class NucleiJobs {
4
4
  execute;
5
5
  jobs = new Map();
6
6
  constructor(execute = runScanner) {
7
7
  this.execute = execute;
8
8
  }
9
- start(url, deadline) {
9
+ start(url, deadline, maxDurationMinutes = DEFAULT_NUCLEI_SCAN_MINUTES) {
10
10
  const args = nucleiArgs({ url });
11
+ if (typeof maxDurationMinutes !== "number" || !Number.isInteger(maxDurationMinutes) || maxDurationMinutes < 1 || maxDurationMinutes > MAX_NUCLEI_SCAN_MINUTES)
12
+ throw new Error(`maxDurationMinutes must be a whole number from 1 to ${MAX_NUCLEI_SCAN_MINUTES}.`);
11
13
  if ([...this.jobs.values()].filter((job) => job.state === "running").length >= 2)
12
14
  throw new Error("Two Nuclei scans are already running; wait for one to finish.");
13
- const scanId = randomUUID();
14
- const job = { id: scanId, url: url, state: "running", startedAt: new Date().toISOString(), controller: new AbortController() };
15
- const requestedDeadline = typeof deadline === "number" && Number.isFinite(deadline) ? deadline : Date.now() + 15 * 60_000;
16
- const remaining = Math.max(0, Math.min(15 * 60_000, requestedDeadline - Date.now()));
15
+ const now = Date.now();
16
+ const scopeDeadline = typeof deadline === "number" && Number.isFinite(deadline) ? deadline : Infinity;
17
+ const selectedDeadline = now + maxDurationMinutes * 60_000;
18
+ const stopAt = Math.min(selectedDeadline, scopeDeadline);
19
+ const remaining = stopAt - now;
17
20
  if (remaining < 1000)
18
21
  throw new Error("The engagement window ends too soon to start a scan.");
19
- job.timer = setTimeout(() => job.controller.abort(), remaining);
22
+ const scanId = randomUUID();
23
+ const job = { id: scanId, url: url, state: "running", startedAt: new Date(now).toISOString(),
24
+ deadlineAt: new Date(stopAt).toISOString(), maxDurationMinutes, findingCount: 0, partialFindings: "", diagnostics: "",
25
+ outputTruncated: false, stdoutRemainder: "", controller: new AbortController() };
26
+ const limitReason = scopeDeadline <= selectedDeadline ? "Engagement window ended before the selected scan duration." :
27
+ `Selected ${maxDurationMinutes}-minute Nuclei scan limit reached.`;
28
+ job.timer = setTimeout(() => this.stop(job, "timed_out", limitReason), remaining);
20
29
  this.jobs.set(scanId, job);
21
30
  this.prune();
22
- void this.execute("nuclei", args, job.controller.signal).then((output) => {
31
+ void Promise.resolve().then(() => {
32
+ if (job.controller.signal.aborted)
33
+ throw new Error("Scan canceled before launch.");
34
+ return this.execute("nuclei", args, job.controller.signal, { timeoutMs: remaining + 5000,
35
+ onOutput: (text, stream) => this.capture(job, text, stream) });
36
+ }).then((output) => {
37
+ if (job.state !== "running")
38
+ return;
23
39
  job.state = "completed";
24
40
  job.result = output;
25
41
  job.finishedAt = new Date().toISOString();
26
42
  }, (error) => {
43
+ if (job.state !== "running")
44
+ return;
27
45
  job.state = job.controller.signal.aborted ? "canceled" : "failed";
28
- job.result = error instanceof Error ? error.message : String(error);
46
+ job.reason = error instanceof Error ? error.message : String(error);
29
47
  job.finishedAt = new Date().toISOString();
30
48
  }).finally(() => { if (job.timer)
31
49
  clearTimeout(job.timer); });
32
- return { scanId, status: "running", message: "Scan started. Call nuclei_scan_status with this scanId and the same URL to get results." };
50
+ return { scanId, status: "running", deadlineAt: job.deadlineAt, maxDurationMinutes,
51
+ message: "Scan started. Call nuclei_scan_status with this scanId and the same URL to get progress and findings." };
33
52
  }
34
53
  status(scanId, url) {
35
54
  const job = this.get(scanId, url);
36
- return { scanId: job.id, status: job.state, startedAt: job.startedAt, finishedAt: job.finishedAt, result: job.result };
55
+ return { scanId: job.id, status: job.state, startedAt: job.startedAt, finishedAt: job.finishedAt,
56
+ deadlineAt: job.deadlineAt, maxDurationMinutes: job.maxDurationMinutes, findingCount: job.findingCount,
57
+ partialFindings: job.partialFindings, diagnostics: job.diagnostics, outputTruncated: job.outputTruncated,
58
+ lastOutputAt: job.lastOutputAt, result: job.result, reason: job.reason };
37
59
  }
38
- cancel(scanId, url) {
60
+ cancel(scanId, url, reason = "Canceled by user.") {
39
61
  const job = this.get(scanId, url);
40
- if (job.state === "running") {
41
- job.state = "canceled";
42
- job.controller.abort();
62
+ this.stop(job, "canceled", reason);
63
+ return { scanId: job.id, status: job.state, reason: job.reason };
64
+ }
65
+ close() { for (const job of this.jobs.values())
66
+ this.stop(job, "canceled", "Nuclei adapter is shutting down."); }
67
+ stop(job, status, reason) {
68
+ if (job.state !== "running")
69
+ return;
70
+ job.state = status;
71
+ job.reason = reason;
72
+ job.finishedAt = new Date().toISOString();
73
+ if (job.timer)
74
+ clearTimeout(job.timer);
75
+ job.controller.abort();
76
+ }
77
+ capture(job, text, stream) {
78
+ if (job.state !== "running")
79
+ return;
80
+ job.lastOutputAt = new Date().toISOString();
81
+ if (stream === "stderr") {
82
+ job.diagnostics = `${job.diagnostics}${text}`.slice(-16 * 1024);
83
+ return;
84
+ }
85
+ const combined = `${job.partialFindings}${text}`;
86
+ if (combined.length > 128 * 1024)
87
+ job.outputTruncated = true;
88
+ job.partialFindings = combined.slice(-128 * 1024);
89
+ job.stdoutRemainder += text;
90
+ if (job.stdoutRemainder.length > 256 * 1024) {
91
+ job.stdoutRemainder = job.stdoutRemainder.slice(-256 * 1024);
92
+ job.outputTruncated = true;
93
+ }
94
+ const lines = job.stdoutRemainder.split(/\r?\n/);
95
+ job.stdoutRemainder = lines.pop() ?? "";
96
+ for (const line of lines) {
97
+ if (!line.trim())
98
+ continue;
99
+ try {
100
+ const finding = JSON.parse(line);
101
+ if (finding && typeof finding === "object")
102
+ job.findingCount++;
103
+ }
104
+ catch { /* Scanner diagnostics may appear on stdout. */ }
43
105
  }
44
- return { scanId: job.id, status: job.state };
45
106
  }
46
107
  get(scanId, url) {
47
108
  const job = typeof scanId === "string" ? this.jobs.get(scanId) : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/scanners/jobs.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
- export declare const NUCLEI_SCAN_MS: number;
1
+ export declare const DEFAULT_NUCLEI_SCAN_MINUTES = 60;
2
+ export declare const MAX_NUCLEI_SCAN_MINUTES = 240;
3
+ export interface ScannerRunOptions {
4
+ timeoutMs?: number;
5
+ onOutput?: (text: string, stream: "stdout" | "stderr") => void;
6
+ }
2
7
  export declare function nmapArgs(input: Record<string, unknown>): string[];
3
8
  export declare function nucleiArgs(input: Record<string, unknown>): string[];
4
- export declare function runScanner(binary: "nmap" | "nuclei", args: string[], signal?: AbortSignal): Promise<string>;
9
+ export declare function runScanner(binary: "nmap" | "nuclei", args: string[], signal?: AbortSignal, options?: ScannerRunOptions): Promise<string>;
5
10
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,QAAc,CAAC;AA4B1C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAOjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAYnE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBjH"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;CAChE;AA4BD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAOjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAYnE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B9I"}
@@ -2,7 +2,8 @@ import { spawn } from "node:child_process";
2
2
  import { isIP } from "node:net";
3
3
  const MAX_OUTPUT_BYTES = 256 * 1024;
4
4
  const NMAP_SCAN_MS = 120_000;
5
- export const NUCLEI_SCAN_MS = 15 * 60_000;
5
+ export const DEFAULT_NUCLEI_SCAN_MINUTES = 60;
6
+ export const MAX_NUCLEI_SCAN_MINUTES = 240;
6
7
  function singleHost(value) {
7
8
  if (typeof value !== "string" || value.length > 253 || value !== value.trim() || !value) {
8
9
  throw new Error("Enter one hostname or IP address.");
@@ -60,28 +61,35 @@ export function nucleiArgs(input) {
60
61
  return ["-u", url.href, "-pt", "http", "-rl", "5", "-c", "1", "-timeout", "5", "-retries", "0", "-ni", "-duc",
61
62
  "-etags", "dos,bruteforce,fuzz,headless,code", "-j"];
62
63
  }
63
- export async function runScanner(binary, args, signal) {
64
+ export async function runScanner(binary, args, signal, options) {
64
65
  return new Promise((resolve, reject) => {
65
66
  const child = spawn(binary, args, { shell: false, windowsHide: true, stdio: ["ignore", "pipe", "pipe"], signal });
66
67
  let output = "";
67
68
  let size = 0;
68
69
  let finished = false;
70
+ let truncated = false;
69
71
  const fail = (error) => { if (!finished) {
70
72
  finished = true;
71
73
  clearTimeout(timer);
72
74
  child.kill();
73
75
  reject(error);
74
76
  } };
75
- const limit = binary === "nuclei" ? NUCLEI_SCAN_MS : NMAP_SCAN_MS;
77
+ const limit = Math.max(1000, Math.min(options?.timeoutMs ?? (binary === "nuclei" ? DEFAULT_NUCLEI_SCAN_MINUTES * 60_000 : NMAP_SCAN_MS), binary === "nuclei" ? MAX_NUCLEI_SCAN_MINUTES * 60_000 + 5000 : NMAP_SCAN_MS));
76
78
  const timer = setTimeout(() => fail(new Error(`${binary} exceeded the ${Math.round(limit / 60_000)}-minute scan limit.`)), limit);
77
- const collect = (data) => {
79
+ const collect = (data, stream) => {
80
+ const text = data.toString("utf8");
81
+ options?.onOutput?.(text, stream);
78
82
  size += data.length;
79
- if (size > MAX_OUTPUT_BYTES)
83
+ const maxOutput = binary === "nuclei" ? 1024 * 1024 : MAX_OUTPUT_BYTES;
84
+ if (size > maxOutput && binary !== "nuclei")
80
85
  return fail(new Error(`${binary} output exceeded 256 KiB; narrow the scan.`));
81
- output += data.toString("utf8");
86
+ if (size > maxOutput)
87
+ truncated = true;
88
+ if (output.length < maxOutput)
89
+ output += text.slice(0, maxOutput - output.length);
82
90
  };
83
- child.stdout.on("data", collect);
84
- child.stderr.on("data", collect);
91
+ child.stdout.on("data", (data) => collect(data, "stdout"));
92
+ child.stderr.on("data", (data) => collect(data, "stderr"));
85
93
  child.on("error", (error) => fail(new Error(signal?.aborted ? `${binary} scan was canceled.` : `${binary} could not start. Install it on this computer and check that it is on PATH. ${error.message}`)));
86
94
  child.on("close", (code) => {
87
95
  clearTimeout(timer);
@@ -91,7 +99,7 @@ export async function runScanner(binary, args, signal) {
91
99
  if (code !== 0)
92
100
  reject(new Error(`${binary} exited with code ${code}. ${output.slice(0, 2000)}`));
93
101
  else
94
- resolve(output || `${binary} completed with no findings.`);
102
+ resolve(`${output || `${binary} completed with no findings.`}${truncated ? "\n[Output exceeded 1 MiB; the result is truncated.]" : ""}`);
95
103
  });
96
104
  });
97
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/scanners/runner.ts"],"names":[],"mappings":"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"}
@@ -21,9 +21,9 @@ The gateway starts in the background and prints a temporary admin token in your
21
21
 
22
22
  **Live server controls:** The dashboard's **Turn on** and **Turn off** buttons update the running gateway immediately; neither the gateway nor Burp needs to restart. **On** means the server is enabled. **Connected** means the gateway reached the upstream and listed its tools at the shown check time. **Connection failed** means the upstream is unavailable; install/start it and click **Check connection**. A local command tool shows **Runs on demand** because it has no persistent MCP connection. A connected MCP client can request its tool list again to see changes, but some clients cache the list and require a manual tool refresh. The gateway rejects new calls after a server is turned off and stops in-flight local command tools.
23
23
 
24
- **Local command tools:** An administrator can add an installed CLI as a local MCP tool even when that CLI has no MCP server. Enter one executable, fixed arguments with `{target}` on exactly one argument line, a target type (host/IP or HTTP URL), and a technique category. The gateway exposes `<name>__run_local_command` with one `target` input, checks the current engagement scope, then launches the executable directly without a shell. The AI cannot choose flags. Direct calls have a two-minute and 64 KiB output limit. A [background job](workbench.md) can run for up to 30 minutes or until the engagement window ends, with the same output limit. This is for administrator-reviewed single-target commands; a CLI's own configuration or fixed flags can still have effects beyond the supplied target. Review them before enabling the tool. Local command tools cannot run in the hosted gateway. The bundled Nmap and Nuclei presets remain the recommended adapters because they enforce additional rate and option limits.
24
+ **Local command tools:** An administrator can add an installed CLI as a local MCP tool even when that CLI has no MCP server. Enter one executable, fixed arguments with `{target}` on exactly one argument line, a target type (host/IP or HTTP URL), and a technique category. The gateway exposes `<name>__run_local_command` with one `target` input, checks the current engagement scope, then launches the executable directly without a shell. The AI cannot choose flags. Direct calls have a two-minute and 64 KiB output limit. A [background job](workbench.md) can run for 1 to 240 minutes or until the engagement window ends, with the same output limit. This is for administrator-reviewed single-target commands; a CLI's own configuration or fixed flags can still have effects beyond the supplied target. Review them before enabling the tool. Local command tools cannot run in the hosted gateway. The bundled Nmap and Nuclei presets remain the recommended adapters because they enforce additional rate and option limits.
25
25
 
26
- **Nmap and Nuclei:** Install the [Nmap CLI](https://nmap.org/download.html) and [ProjectDiscovery Nuclei CLI](https://github.com/projectdiscovery/nuclei) on the tester's computer. Confirm `nmap --version` and `nuclei -version` work in the same terminal that starts the gateway. The npm package includes the MCP adapter; the CLI programs themselves are separate. Add each preset, turn it on, and refresh your MCP client's tool list. Nmap offers a single-host TCP scan of up to 100 ports with a two-minute limit. Nuclei offers a single HTTP URL with low concurrency and rate limits; OAST and automatic updates are disabled. A Nuclei call now returns a scan ID immediately. Use its status and cancel tools to manage a scan for up to 15 minutes or until the engagement window ends. Review the locally installed Nuclei templates and scanner configuration before team use. Target traffic leaves the tester's computer or VPN exit.
26
+ **Nmap and Nuclei:** Install the [Nmap CLI](https://nmap.org/download.html) and [ProjectDiscovery Nuclei CLI](https://github.com/projectdiscovery/nuclei) on the tester's computer. Confirm `nmap --version` and `nuclei -version` work in the same terminal that starts the gateway. The npm package includes the MCP adapter; the CLI programs themselves are separate. Add each preset, turn it on, and refresh your MCP client's tool list. Nmap offers a single-host TCP scan of up to 100 ports with a two-minute limit. Nuclei offers a single HTTP URL with low concurrency and rate limits; OAST and automatic updates are disabled. A Nuclei call returns a scan ID immediately. Its default scan limit is 60 minutes; `maxDurationMinutes` can be set from 1 to 240, and the engagement window always caps it. Status reports progress, partial findings, and the reason for a timeout or cancellation. Review the locally installed Nuclei templates and scanner configuration before team use. Target traffic leaves the tester's computer or VPN exit.
27
27
 
28
28
  **Semgrep source files:** An administrator must list approved absolute code folders under **Approved local code folders** in the engagement draft, then save and approve it. Use `semgrep_scan` with absolute file paths inside those folders. A file outside them, an inaccessible file, or a scope without approved folders is blocked. `semgrep_findings` queries the Semgrep cloud account and remains blocked because its repository selection is not yet tied to an approved engagement. Unknown tools remain blocked; there is no blanket unclassified-tool bypass.
29
29
 
package/docs/workbench.md CHANGED
@@ -21,8 +21,8 @@ Use `gateway__start_long_call` in your MCP client when a tool may take several m
21
21
 
22
22
  Replace the example target and tool arguments with the approved engagement values. The gateway returns a `jobId` immediately. Use `gateway__job_status` with that ID to read the final result, `gateway__job_list` to find recent jobs, or `gateway__job_cancel` to cancel one. The workbench also lists jobs and provides **View** and **Cancel** controls. Calls still pass through intercept, scope validation, and the audit log before dispatch. The job belongs to the user and engagement that started it; another user cannot read or cancel it.
23
23
 
24
- At most four background jobs per user and 32 per gateway can run at once. A job runs for at most 30 minutes or until its engagement window ends, whichever comes first. Changing engagement, removing access, disabling the upstream server, or stopping the gateway cancels active jobs. The gateway sends cancellation to an MCP upstream, but a third-party server may continue work if it does not honor MCP cancellation. Local command tools are stopped by the gateway. Results are held in memory for one hour and capped at 256 KiB; use a narrower tool request if the result is too large. Normal direct calls still have a five-minute upstream wait; use a background job for longer operations.
24
+ At most four background jobs per user and 32 per gateway can run at once. Local jobs default to 60 minutes and accept `maxDurationMinutes` from 1 to 240; hosted jobs default to 30 minutes and accept 1 to 30. The engagement window always ends a job sooner. A duration or window stop reports `timed_out` with a reason. Changing engagement, removing access, disabling the upstream server, or stopping the gateway cancels active jobs. The gateway sends cancellation to an MCP upstream, but a third-party server may continue work if it does not honor MCP cancellation. Local command tools are stopped by the gateway. Results are held in memory for one hour and capped at 256 KiB; use a narrower tool request if the result is too large. Normal direct calls still have a five-minute upstream wait; use a background job for longer operations.
25
25
 
26
26
  ## Nuclei scans
27
27
 
28
- The bundled Nuclei adapter starts a scan and immediately returns a `scanId`. Call `nuclei__nuclei_scan_status` with the same approved `url` and that ID to check progress and get findings. Use `nuclei__nuclei_scan_cancel` to stop it. A scan is limited to 15 minutes or the end of the engagement window. Nuclei's concurrency, rate, template, OAST, and update restrictions still apply. Scan IDs are only accessible to the same gateway user and engagement. You do not need `gateway__start_long_call` around `nuclei__nuclei_scan`; the adapter already runs it as a job. Refresh your MCP client's tool list after upgrading to see the new status and cancel tools.
28
+ The bundled Nuclei adapter starts a scan and immediately returns a `scanId` and deadline. It runs for up to 60 minutes by default. Set `maxDurationMinutes` from 1 to 240 when an approved scan needs more or less time; the engagement window always ends the scan sooner if necessary. Call `nuclei__nuclei_scan_status` with the same approved `url` and scan ID to see its deadline, finding count, partial findings, diagnostics, and final result. A configured limit or engagement-window stop reports `timed_out` with the exact reason; **Cancel** reports `canceled`. Earlier findings stay visible after either stop. Use `nuclei__nuclei_scan_cancel` to stop it yourself. Nuclei's concurrency, rate, template, OAST, and update restrictions still apply. Scan IDs are only accessible to the same gateway user and engagement. You do not need `gateway__start_long_call` around `nuclei__nuclei_scan`; the adapter already runs it as a job. Refresh your MCP client's tool list after upgrading to see the updated argument and status fields.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integsec/agentic-pentest-proxy",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "IntegSec Agentic Pentest MCP Proxy — enforce penetration testing engagement scope for AI agents",
5
5
  "repository": {
6
6
  "type": "git",