@pensar/apex 0.0.29-canary.0 → 0.0.30-canary.0
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/build/benchmark.js +293 -159
- package/build/index.js +306 -176
- package/build/pentest.js +293 -159
- package/build/quicktest.js +240 -4
- package/build/swarm.js +240 -4
- package/package.json +1 -1
package/build/benchmark.js
CHANGED
|
@@ -121560,6 +121560,21 @@ function createSummarizationStream(messages, opts, model) {
|
|
|
121560
121560
|
}
|
|
121561
121561
|
};
|
|
121562
121562
|
}
|
|
121563
|
+
async function consumeStream2(stream, {
|
|
121564
|
+
onTextDelta,
|
|
121565
|
+
onToolCall,
|
|
121566
|
+
onToolResult
|
|
121567
|
+
}) {
|
|
121568
|
+
for await (const delta of stream.fullStream) {
|
|
121569
|
+
if (delta.type === "text-delta") {
|
|
121570
|
+
onTextDelta?.(delta);
|
|
121571
|
+
} else if (delta.type === "tool-call") {
|
|
121572
|
+
onToolCall?.(delta);
|
|
121573
|
+
} else if (delta.type === "tool-result") {
|
|
121574
|
+
onToolResult?.(delta);
|
|
121575
|
+
}
|
|
121576
|
+
}
|
|
121577
|
+
}
|
|
121563
121578
|
|
|
121564
121579
|
// src/core/ai/ai.ts
|
|
121565
121580
|
function wrapStreamWithErrorHandler(originalStream, messagesContainer, opts, model, silent) {
|
|
@@ -121623,7 +121638,8 @@ function streamResponse(opts) {
|
|
|
121623
121638
|
abortSignal,
|
|
121624
121639
|
activeTools,
|
|
121625
121640
|
silent,
|
|
121626
|
-
authConfig
|
|
121641
|
+
authConfig,
|
|
121642
|
+
onFinish
|
|
121627
121643
|
} = opts;
|
|
121628
121644
|
const messagesContainer = { current: messages || [] };
|
|
121629
121645
|
const providerModel = getProviderModel(model, authConfig);
|
|
@@ -121678,7 +121694,8 @@ function streamResponse(opts) {
|
|
|
121678
121694
|
}
|
|
121679
121695
|
throw repairError;
|
|
121680
121696
|
}
|
|
121681
|
-
}
|
|
121697
|
+
},
|
|
121698
|
+
onFinish
|
|
121682
121699
|
});
|
|
121683
121700
|
return wrapStreamWithErrorHandler(response, messagesContainer, opts, providerModel, silent);
|
|
121684
121701
|
} catch (error46) {
|
|
@@ -122657,7 +122674,14 @@ Remember: You are the orchestrator, not a testing agent. Your value is in strate
|
|
|
122657
122674
|
|
|
122658
122675
|
// src/core/agent/thoroughPentestAgent/agent.ts
|
|
122659
122676
|
import { join as join6 } from "path";
|
|
122660
|
-
import {
|
|
122677
|
+
import {
|
|
122678
|
+
readFileSync as readFileSync5,
|
|
122679
|
+
existsSync as existsSync8,
|
|
122680
|
+
writeFileSync as writeFileSync6,
|
|
122681
|
+
copyFileSync,
|
|
122682
|
+
readdirSync as readdirSync4,
|
|
122683
|
+
mkdirSync as mkdirSync6
|
|
122684
|
+
} from "fs";
|
|
122661
122685
|
|
|
122662
122686
|
// src/core/agent/attackSurfaceAgent/prompts.ts
|
|
122663
122687
|
var SYSTEM3 = `You are an expert attack surface analysis agent specializing in comprehensive reconnaissance and asset discovery. Your role is to AUTONOMOUSLY map the entire attack surface of a target and identify specific targets for deeper penetration testing.
|
|
@@ -126271,6 +126295,239 @@ Begin your analysis now.
|
|
|
126271
126295
|
};
|
|
126272
126296
|
}
|
|
126273
126297
|
|
|
126298
|
+
// src/core/messages/index.ts
|
|
126299
|
+
import fs from "fs";
|
|
126300
|
+
|
|
126301
|
+
// src/core/messages/types.ts
|
|
126302
|
+
var ToolMessageObject = exports_external.object({
|
|
126303
|
+
role: exports_external.literal("tool"),
|
|
126304
|
+
status: exports_external.enum(["pending", "completed"]),
|
|
126305
|
+
toolCallId: exports_external.string(),
|
|
126306
|
+
content: exports_external.string(),
|
|
126307
|
+
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
126308
|
+
toolName: exports_external.string(),
|
|
126309
|
+
createdAt: exports_external.coerce.date()
|
|
126310
|
+
});
|
|
126311
|
+
var SystemModelMessageObject = exports_external.object({
|
|
126312
|
+
role: exports_external.literal("system"),
|
|
126313
|
+
content: exports_external.string(),
|
|
126314
|
+
createdAt: exports_external.coerce.date(),
|
|
126315
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126316
|
+
});
|
|
126317
|
+
var TextPartObject = exports_external.object({
|
|
126318
|
+
type: exports_external.literal("text"),
|
|
126319
|
+
text: exports_external.string(),
|
|
126320
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126321
|
+
});
|
|
126322
|
+
var FilePartObject = exports_external.object({
|
|
126323
|
+
type: exports_external.literal("file"),
|
|
126324
|
+
data: exports_external.union([
|
|
126325
|
+
exports_external.string(),
|
|
126326
|
+
exports_external.instanceof(Uint8Array),
|
|
126327
|
+
exports_external.instanceof(ArrayBuffer),
|
|
126328
|
+
exports_external.instanceof(Buffer),
|
|
126329
|
+
exports_external.url()
|
|
126330
|
+
]),
|
|
126331
|
+
filename: exports_external.string().optional(),
|
|
126332
|
+
mediaType: exports_external.string(),
|
|
126333
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126334
|
+
});
|
|
126335
|
+
var ReasoningPartObject = exports_external.object({
|
|
126336
|
+
type: exports_external.literal("reasoning"),
|
|
126337
|
+
text: exports_external.string(),
|
|
126338
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126339
|
+
});
|
|
126340
|
+
var ToolCallPartObject = exports_external.object({
|
|
126341
|
+
type: exports_external.literal("tool-call"),
|
|
126342
|
+
toolCallId: exports_external.string(),
|
|
126343
|
+
toolName: exports_external.string(),
|
|
126344
|
+
input: exports_external.unknown(),
|
|
126345
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
126346
|
+
providerExecuted: exports_external.boolean().optional()
|
|
126347
|
+
});
|
|
126348
|
+
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
126349
|
+
exports_external.object({
|
|
126350
|
+
type: exports_external.literal("text"),
|
|
126351
|
+
value: exports_external.string()
|
|
126352
|
+
}),
|
|
126353
|
+
exports_external.object({
|
|
126354
|
+
type: exports_external.literal("json"),
|
|
126355
|
+
value: exports_external.any()
|
|
126356
|
+
}),
|
|
126357
|
+
exports_external.object({
|
|
126358
|
+
type: exports_external.literal("error-text"),
|
|
126359
|
+
value: exports_external.string()
|
|
126360
|
+
}),
|
|
126361
|
+
exports_external.object({
|
|
126362
|
+
type: exports_external.literal("error-json"),
|
|
126363
|
+
value: exports_external.any()
|
|
126364
|
+
}),
|
|
126365
|
+
exports_external.object({
|
|
126366
|
+
type: exports_external.literal("content"),
|
|
126367
|
+
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
126368
|
+
exports_external.object({
|
|
126369
|
+
type: exports_external.literal("text"),
|
|
126370
|
+
text: exports_external.string()
|
|
126371
|
+
}),
|
|
126372
|
+
exports_external.object({
|
|
126373
|
+
type: exports_external.literal("media"),
|
|
126374
|
+
data: exports_external.string(),
|
|
126375
|
+
mediaType: exports_external.string()
|
|
126376
|
+
})
|
|
126377
|
+
]))
|
|
126378
|
+
})
|
|
126379
|
+
]);
|
|
126380
|
+
var ToolResultPartObject = exports_external.object({
|
|
126381
|
+
type: exports_external.literal("tool-result"),
|
|
126382
|
+
toolCallId: exports_external.string(),
|
|
126383
|
+
toolName: exports_external.string(),
|
|
126384
|
+
output: ToolResultOutputObject,
|
|
126385
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126386
|
+
});
|
|
126387
|
+
var AssistantModelMessageObject = exports_external.object({
|
|
126388
|
+
role: exports_external.literal("assistant"),
|
|
126389
|
+
content: exports_external.union([
|
|
126390
|
+
exports_external.string(),
|
|
126391
|
+
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
126392
|
+
TextPartObject,
|
|
126393
|
+
FilePartObject,
|
|
126394
|
+
ReasoningPartObject,
|
|
126395
|
+
ToolCallPartObject,
|
|
126396
|
+
ToolResultPartObject
|
|
126397
|
+
]))
|
|
126398
|
+
]),
|
|
126399
|
+
createdAt: exports_external.coerce.date(),
|
|
126400
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126401
|
+
});
|
|
126402
|
+
var UserModelMessageObject = exports_external.object({
|
|
126403
|
+
role: exports_external.literal("user"),
|
|
126404
|
+
content: exports_external.union([
|
|
126405
|
+
exports_external.string(),
|
|
126406
|
+
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
126407
|
+
]),
|
|
126408
|
+
createdAt: exports_external.coerce.date(),
|
|
126409
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
126410
|
+
});
|
|
126411
|
+
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
126412
|
+
SystemModelMessageObject,
|
|
126413
|
+
UserModelMessageObject,
|
|
126414
|
+
AssistantModelMessageObject,
|
|
126415
|
+
ToolMessageObject
|
|
126416
|
+
]);
|
|
126417
|
+
|
|
126418
|
+
// src/core/messages/index.ts
|
|
126419
|
+
function saveMessages(session, messages) {
|
|
126420
|
+
fs.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
126421
|
+
}
|
|
126422
|
+
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
126423
|
+
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
126424
|
+
if (!fs.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
126425
|
+
fs.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
126426
|
+
recursive: true
|
|
126427
|
+
});
|
|
126428
|
+
}
|
|
126429
|
+
if (!fs.existsSync(subagentDir)) {
|
|
126430
|
+
fs.mkdirSync(subagentDir, { recursive: true });
|
|
126431
|
+
}
|
|
126432
|
+
fs.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
126433
|
+
}
|
|
126434
|
+
function mapMessages(messages) {
|
|
126435
|
+
const result = [];
|
|
126436
|
+
const toolResults = new Map;
|
|
126437
|
+
for (const message of messages) {
|
|
126438
|
+
if (message.role === "tool") {
|
|
126439
|
+
const content = message.content;
|
|
126440
|
+
if (Array.isArray(content)) {
|
|
126441
|
+
for (const part of content) {
|
|
126442
|
+
if (part.type === "tool-result") {
|
|
126443
|
+
toolResults.set(part.toolCallId, part.output);
|
|
126444
|
+
}
|
|
126445
|
+
}
|
|
126446
|
+
}
|
|
126447
|
+
}
|
|
126448
|
+
}
|
|
126449
|
+
for (const message of messages) {
|
|
126450
|
+
if (message.role === "system") {
|
|
126451
|
+
result.push({
|
|
126452
|
+
role: "system",
|
|
126453
|
+
content: message.content,
|
|
126454
|
+
createdAt: new Date,
|
|
126455
|
+
...message.providerOptions && {
|
|
126456
|
+
providerOptions: message.providerOptions
|
|
126457
|
+
}
|
|
126458
|
+
});
|
|
126459
|
+
continue;
|
|
126460
|
+
}
|
|
126461
|
+
if (message.role === "user") {
|
|
126462
|
+
const content = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
|
|
126463
|
+
result.push({
|
|
126464
|
+
role: "user",
|
|
126465
|
+
content,
|
|
126466
|
+
createdAt: new Date,
|
|
126467
|
+
...message.providerOptions && {
|
|
126468
|
+
providerOptions: message.providerOptions
|
|
126469
|
+
}
|
|
126470
|
+
});
|
|
126471
|
+
continue;
|
|
126472
|
+
}
|
|
126473
|
+
if (message.role === "tool") {
|
|
126474
|
+
continue;
|
|
126475
|
+
}
|
|
126476
|
+
if (message.role === "assistant") {
|
|
126477
|
+
const content = message.content;
|
|
126478
|
+
if (typeof content === "string") {
|
|
126479
|
+
result.push({
|
|
126480
|
+
role: "assistant",
|
|
126481
|
+
content,
|
|
126482
|
+
createdAt: new Date,
|
|
126483
|
+
...message.providerOptions && {
|
|
126484
|
+
providerOptions: message.providerOptions
|
|
126485
|
+
}
|
|
126486
|
+
});
|
|
126487
|
+
continue;
|
|
126488
|
+
}
|
|
126489
|
+
const textParts = [];
|
|
126490
|
+
const toolCalls = [];
|
|
126491
|
+
for (const part of content) {
|
|
126492
|
+
if (part.type === "text") {
|
|
126493
|
+
textParts.push(part.text);
|
|
126494
|
+
} else if (part.type === "tool-call") {
|
|
126495
|
+
toolCalls.push({
|
|
126496
|
+
toolCallId: part.toolCallId,
|
|
126497
|
+
toolName: part.toolName,
|
|
126498
|
+
input: part.input
|
|
126499
|
+
});
|
|
126500
|
+
}
|
|
126501
|
+
}
|
|
126502
|
+
if (textParts.length > 0) {
|
|
126503
|
+
result.push({
|
|
126504
|
+
role: "assistant",
|
|
126505
|
+
content: textParts.join(""),
|
|
126506
|
+
createdAt: new Date,
|
|
126507
|
+
...message.providerOptions && {
|
|
126508
|
+
providerOptions: message.providerOptions
|
|
126509
|
+
}
|
|
126510
|
+
});
|
|
126511
|
+
}
|
|
126512
|
+
for (const toolCall of toolCalls) {
|
|
126513
|
+
const input = toolCall.input;
|
|
126514
|
+
const toolCallDescription = input?.toolCallDescription || `Executing ${toolCall.toolName}`;
|
|
126515
|
+
const hasResult = toolResults.has(toolCall.toolCallId);
|
|
126516
|
+
result.push({
|
|
126517
|
+
role: "tool",
|
|
126518
|
+
status: hasResult ? "completed" : "pending",
|
|
126519
|
+
toolCallId: toolCall.toolCallId,
|
|
126520
|
+
content: hasResult ? `✓ ${toolCallDescription}` : toolCallDescription,
|
|
126521
|
+
args: input || {},
|
|
126522
|
+
toolName: toolCall.toolName,
|
|
126523
|
+
createdAt: new Date
|
|
126524
|
+
});
|
|
126525
|
+
}
|
|
126526
|
+
}
|
|
126527
|
+
}
|
|
126528
|
+
return result;
|
|
126529
|
+
}
|
|
126530
|
+
|
|
126274
126531
|
// src/core/agent/pentestAgent/agent.ts
|
|
126275
126532
|
var execAsync2 = promisify2(exec2);
|
|
126276
126533
|
function runAgent(opts) {
|
|
@@ -126287,6 +126544,7 @@ function runAgent(opts) {
|
|
|
126287
126544
|
sessionConfig
|
|
126288
126545
|
} = opts;
|
|
126289
126546
|
const session = opts.session || createSession(target, objective, undefined, sessionConfig);
|
|
126547
|
+
const subagentId = `pentest-${nanoid3(6)}`;
|
|
126290
126548
|
const pocsPath = join3(session.rootPath, "pocs");
|
|
126291
126549
|
if (!existsSync5(pocsPath)) {
|
|
126292
126550
|
mkdirSync4(pocsPath, { recursive: true });
|
|
@@ -126442,10 +126700,13 @@ You are only authorized to perform testing against the specific target endpoint
|
|
|
126442
126700
|
onStepFinish,
|
|
126443
126701
|
abortSignal,
|
|
126444
126702
|
silent,
|
|
126445
|
-
authConfig
|
|
126703
|
+
authConfig,
|
|
126704
|
+
onFinish: ({ response }) => {
|
|
126705
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
126706
|
+
}
|
|
126446
126707
|
});
|
|
126447
126708
|
streamResult.session = session;
|
|
126448
|
-
return { streamResult, session };
|
|
126709
|
+
return { streamResult, session, subagentId };
|
|
126449
126710
|
}
|
|
126450
126711
|
// src/core/agent/tools.ts
|
|
126451
126712
|
var execAsync3 = promisify3(exec3);
|
|
@@ -128994,6 +129255,7 @@ import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as
|
|
|
128994
129255
|
function runAgent2(opts) {
|
|
128995
129256
|
const { target, model, onStepFinish, abortSignal } = opts;
|
|
128996
129257
|
const session = opts.session || createSession(target);
|
|
129258
|
+
const subagentId = `attack-surface-${nanoid3(6)}`;
|
|
128997
129259
|
console.log(`Created attack surface session: ${session.id}`);
|
|
128998
129260
|
console.log(`Session path: ${session.rootPath}`);
|
|
128999
129261
|
const assetsPath = join5(session.rootPath, "assets");
|
|
@@ -129140,144 +129402,13 @@ You MUST provide the details final report using create_attack_surface_report too
|
|
|
129140
129402
|
stopWhen: stepCountIs(1e4),
|
|
129141
129403
|
toolChoice: "auto",
|
|
129142
129404
|
onStepFinish,
|
|
129143
|
-
abortSignal
|
|
129405
|
+
abortSignal,
|
|
129406
|
+
onFinish: ({ response }) => {
|
|
129407
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
129408
|
+
}
|
|
129144
129409
|
});
|
|
129145
129410
|
streamResult.session = session;
|
|
129146
|
-
return { streamResult, session };
|
|
129147
|
-
}
|
|
129148
|
-
|
|
129149
|
-
// src/core/messages/index.ts
|
|
129150
|
-
import fs from "fs";
|
|
129151
|
-
|
|
129152
|
-
// src/core/messages/types.ts
|
|
129153
|
-
var ToolMessageObject = exports_external.object({
|
|
129154
|
-
role: exports_external.literal("tool"),
|
|
129155
|
-
status: exports_external.enum(["pending", "completed"]),
|
|
129156
|
-
toolCallId: exports_external.string(),
|
|
129157
|
-
content: exports_external.string(),
|
|
129158
|
-
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
129159
|
-
toolName: exports_external.string(),
|
|
129160
|
-
createdAt: exports_external.coerce.date()
|
|
129161
|
-
});
|
|
129162
|
-
var SystemModelMessageObject = exports_external.object({
|
|
129163
|
-
role: exports_external.literal("system"),
|
|
129164
|
-
content: exports_external.string(),
|
|
129165
|
-
createdAt: exports_external.coerce.date(),
|
|
129166
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129167
|
-
});
|
|
129168
|
-
var TextPartObject = exports_external.object({
|
|
129169
|
-
type: exports_external.literal("text"),
|
|
129170
|
-
text: exports_external.string(),
|
|
129171
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129172
|
-
});
|
|
129173
|
-
var FilePartObject = exports_external.object({
|
|
129174
|
-
type: exports_external.literal("file"),
|
|
129175
|
-
data: exports_external.union([
|
|
129176
|
-
exports_external.string(),
|
|
129177
|
-
exports_external.instanceof(Uint8Array),
|
|
129178
|
-
exports_external.instanceof(ArrayBuffer),
|
|
129179
|
-
exports_external.instanceof(Buffer),
|
|
129180
|
-
exports_external.url()
|
|
129181
|
-
]),
|
|
129182
|
-
filename: exports_external.string().optional(),
|
|
129183
|
-
mediaType: exports_external.string(),
|
|
129184
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129185
|
-
});
|
|
129186
|
-
var ReasoningPartObject = exports_external.object({
|
|
129187
|
-
type: exports_external.literal("reasoning"),
|
|
129188
|
-
text: exports_external.string(),
|
|
129189
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129190
|
-
});
|
|
129191
|
-
var ToolCallPartObject = exports_external.object({
|
|
129192
|
-
type: exports_external.literal("tool-call"),
|
|
129193
|
-
toolCallId: exports_external.string(),
|
|
129194
|
-
toolName: exports_external.string(),
|
|
129195
|
-
input: exports_external.unknown(),
|
|
129196
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
129197
|
-
providerExecuted: exports_external.boolean().optional()
|
|
129198
|
-
});
|
|
129199
|
-
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
129200
|
-
exports_external.object({
|
|
129201
|
-
type: exports_external.literal("text"),
|
|
129202
|
-
value: exports_external.string()
|
|
129203
|
-
}),
|
|
129204
|
-
exports_external.object({
|
|
129205
|
-
type: exports_external.literal("json"),
|
|
129206
|
-
value: exports_external.any()
|
|
129207
|
-
}),
|
|
129208
|
-
exports_external.object({
|
|
129209
|
-
type: exports_external.literal("error-text"),
|
|
129210
|
-
value: exports_external.string()
|
|
129211
|
-
}),
|
|
129212
|
-
exports_external.object({
|
|
129213
|
-
type: exports_external.literal("error-json"),
|
|
129214
|
-
value: exports_external.any()
|
|
129215
|
-
}),
|
|
129216
|
-
exports_external.object({
|
|
129217
|
-
type: exports_external.literal("content"),
|
|
129218
|
-
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
129219
|
-
exports_external.object({
|
|
129220
|
-
type: exports_external.literal("text"),
|
|
129221
|
-
text: exports_external.string()
|
|
129222
|
-
}),
|
|
129223
|
-
exports_external.object({
|
|
129224
|
-
type: exports_external.literal("media"),
|
|
129225
|
-
data: exports_external.string(),
|
|
129226
|
-
mediaType: exports_external.string()
|
|
129227
|
-
})
|
|
129228
|
-
]))
|
|
129229
|
-
})
|
|
129230
|
-
]);
|
|
129231
|
-
var ToolResultPartObject = exports_external.object({
|
|
129232
|
-
type: exports_external.literal("tool-result"),
|
|
129233
|
-
toolCallId: exports_external.string(),
|
|
129234
|
-
toolName: exports_external.string(),
|
|
129235
|
-
output: ToolResultOutputObject,
|
|
129236
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129237
|
-
});
|
|
129238
|
-
var AssistantModelMessageObject = exports_external.object({
|
|
129239
|
-
role: exports_external.literal("assistant"),
|
|
129240
|
-
content: exports_external.union([
|
|
129241
|
-
exports_external.string(),
|
|
129242
|
-
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
129243
|
-
TextPartObject,
|
|
129244
|
-
FilePartObject,
|
|
129245
|
-
ReasoningPartObject,
|
|
129246
|
-
ToolCallPartObject,
|
|
129247
|
-
ToolResultPartObject
|
|
129248
|
-
]))
|
|
129249
|
-
]),
|
|
129250
|
-
createdAt: exports_external.coerce.date(),
|
|
129251
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129252
|
-
});
|
|
129253
|
-
var UserModelMessageObject = exports_external.object({
|
|
129254
|
-
role: exports_external.literal("user"),
|
|
129255
|
-
content: exports_external.union([
|
|
129256
|
-
exports_external.string(),
|
|
129257
|
-
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
129258
|
-
]),
|
|
129259
|
-
createdAt: exports_external.coerce.date(),
|
|
129260
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
129261
|
-
});
|
|
129262
|
-
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
129263
|
-
SystemModelMessageObject,
|
|
129264
|
-
UserModelMessageObject,
|
|
129265
|
-
AssistantModelMessageObject,
|
|
129266
|
-
ToolMessageObject
|
|
129267
|
-
]);
|
|
129268
|
-
|
|
129269
|
-
// src/core/messages/index.ts
|
|
129270
|
-
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
129271
|
-
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
129272
|
-
if (!fs.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
129273
|
-
fs.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
129274
|
-
recursive: true
|
|
129275
|
-
});
|
|
129276
|
-
}
|
|
129277
|
-
if (!fs.existsSync(subagentDir)) {
|
|
129278
|
-
fs.mkdirSync(subagentDir, { recursive: true });
|
|
129279
|
-
}
|
|
129280
|
-
fs.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
129411
|
+
return { streamResult, session, subagentId };
|
|
129281
129412
|
}
|
|
129282
129413
|
|
|
129283
129414
|
// src/core/agent/thoroughPentestAgent/agent.ts
|
|
@@ -129326,7 +129457,10 @@ Begin by using the get_attack_surface tool to map the complete attack surface of
|
|
|
129326
129457
|
stopWhen: stepCountIs(1e4),
|
|
129327
129458
|
toolChoice: "auto",
|
|
129328
129459
|
onStepFinish,
|
|
129329
|
-
abortSignal
|
|
129460
|
+
abortSignal,
|
|
129461
|
+
onFinish: ({ response }) => {
|
|
129462
|
+
saveMessages(session, mapMessages(response.messages));
|
|
129463
|
+
}
|
|
129330
129464
|
});
|
|
129331
129465
|
streamResult.session = session;
|
|
129332
129466
|
return { streamResult, session };
|
|
@@ -129358,14 +129492,13 @@ Use this as the FIRST step in your thorough penetration test.`,
|
|
|
129358
129492
|
execute: async ({ target, objective }) => {
|
|
129359
129493
|
try {
|
|
129360
129494
|
logger?.log(`[Orchestrator] Spawning attack surface agent for: ${target}`);
|
|
129361
|
-
const { streamResult: result } = runAgent2({
|
|
129495
|
+
const { streamResult: result, subagentId } = runAgent2({
|
|
129362
129496
|
session,
|
|
129363
129497
|
target,
|
|
129364
129498
|
objective,
|
|
129365
129499
|
model,
|
|
129366
129500
|
abortSignal
|
|
129367
129501
|
});
|
|
129368
|
-
const subagentId = `attack-surface-${result.session.id}`;
|
|
129369
129502
|
const allMessages = [];
|
|
129370
129503
|
let currentAssistantText = "";
|
|
129371
129504
|
if (onSubagentSpawn) {
|
|
@@ -129390,8 +129523,8 @@ Objective: ${objective}`,
|
|
|
129390
129523
|
if (onSubagentMessage) {
|
|
129391
129524
|
onSubagentMessage(subagentId, initialMessage);
|
|
129392
129525
|
}
|
|
129393
|
-
|
|
129394
|
-
|
|
129526
|
+
await consumeStream2(result, {
|
|
129527
|
+
onTextDelta: (delta) => {
|
|
129395
129528
|
currentAssistantText += delta.text;
|
|
129396
129529
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
129397
129530
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -129414,7 +129547,8 @@ Objective: ${objective}`,
|
|
|
129414
129547
|
onSubagentMessage(subagentId, newMessage);
|
|
129415
129548
|
}
|
|
129416
129549
|
}
|
|
129417
|
-
}
|
|
129550
|
+
},
|
|
129551
|
+
onToolCall: (delta) => {
|
|
129418
129552
|
if (currentAssistantText) {
|
|
129419
129553
|
currentAssistantText = "";
|
|
129420
129554
|
}
|
|
@@ -129431,7 +129565,8 @@ Objective: ${objective}`,
|
|
|
129431
129565
|
if (onSubagentMessage) {
|
|
129432
129566
|
onSubagentMessage(subagentId, toolMessage);
|
|
129433
129567
|
}
|
|
129434
|
-
}
|
|
129568
|
+
},
|
|
129569
|
+
onToolResult: (delta) => {
|
|
129435
129570
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
129436
129571
|
if (existingToolMessageIndex !== -1) {
|
|
129437
129572
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -129446,11 +129581,10 @@ Objective: ${objective}`,
|
|
|
129446
129581
|
}
|
|
129447
129582
|
}
|
|
129448
129583
|
}
|
|
129449
|
-
}
|
|
129584
|
+
});
|
|
129450
129585
|
if (onSubagentComplete) {
|
|
129451
129586
|
onSubagentComplete(subagentId, true);
|
|
129452
129587
|
}
|
|
129453
|
-
saveSubagentMessages(session, subagentId, allMessages);
|
|
129454
129588
|
const subagentMetadata = {
|
|
129455
129589
|
type: "attack-surface",
|
|
129456
129590
|
subagentId,
|
|
@@ -129533,14 +129667,13 @@ You can spawn multiple agents in parallel - they will run concurrently.`,
|
|
|
129533
129667
|
const limit = pLimit(5);
|
|
129534
129668
|
const promises = targets.map((targetInfo, index) => limit(async () => {
|
|
129535
129669
|
try {
|
|
129536
|
-
const { streamResult: result } = runAgent({
|
|
129670
|
+
const { streamResult: result, subagentId } = runAgent({
|
|
129537
129671
|
session,
|
|
129538
129672
|
target: targetInfo.target,
|
|
129539
129673
|
objective: targetInfo.objective,
|
|
129540
129674
|
model,
|
|
129541
129675
|
abortSignal
|
|
129542
129676
|
});
|
|
129543
|
-
const subagentId = `pentest-${index + 1}-${result.session.id}`;
|
|
129544
129677
|
const allMessages = [];
|
|
129545
129678
|
let currentAssistantText = "";
|
|
129546
129679
|
const startTime = new Date().toISOString();
|
|
@@ -129566,8 +129699,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
129566
129699
|
if (onSubagentMessage) {
|
|
129567
129700
|
onSubagentMessage(subagentId, initialMessage);
|
|
129568
129701
|
}
|
|
129569
|
-
|
|
129570
|
-
|
|
129702
|
+
await consumeStream2(result, {
|
|
129703
|
+
onTextDelta: (delta) => {
|
|
129571
129704
|
currentAssistantText += delta.text;
|
|
129572
129705
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
129573
129706
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -129590,7 +129723,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
129590
129723
|
onSubagentMessage(subagentId, newMessage);
|
|
129591
129724
|
}
|
|
129592
129725
|
}
|
|
129593
|
-
}
|
|
129726
|
+
},
|
|
129727
|
+
onToolCall: (delta) => {
|
|
129594
129728
|
if (currentAssistantText) {
|
|
129595
129729
|
currentAssistantText = "";
|
|
129596
129730
|
}
|
|
@@ -129607,7 +129741,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
129607
129741
|
if (onSubagentMessage) {
|
|
129608
129742
|
onSubagentMessage(subagentId, toolMessage);
|
|
129609
129743
|
}
|
|
129610
|
-
}
|
|
129744
|
+
},
|
|
129745
|
+
onToolResult: (delta) => {
|
|
129611
129746
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
129612
129747
|
if (existingToolMessageIndex !== -1) {
|
|
129613
129748
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -129622,12 +129757,11 @@ Objective: ${targetInfo.objective}`,
|
|
|
129622
129757
|
}
|
|
129623
129758
|
}
|
|
129624
129759
|
}
|
|
129625
|
-
}
|
|
129626
|
-
const endTime = new Date().toISOString();
|
|
129760
|
+
});
|
|
129627
129761
|
if (onSubagentComplete) {
|
|
129628
129762
|
onSubagentComplete(subagentId, true);
|
|
129629
129763
|
}
|
|
129630
|
-
|
|
129764
|
+
const endTime = new Date().toISOString();
|
|
129631
129765
|
const subagentMetadata = {
|
|
129632
129766
|
type: "pentest",
|
|
129633
129767
|
subagentId,
|