@pensar/apex 0.0.29 → 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/pentest.js
CHANGED
|
@@ -39879,6 +39879,21 @@ function createSummarizationStream(messages, opts, model) {
|
|
|
39879
39879
|
}
|
|
39880
39880
|
};
|
|
39881
39881
|
}
|
|
39882
|
+
async function consumeStream2(stream, {
|
|
39883
|
+
onTextDelta,
|
|
39884
|
+
onToolCall,
|
|
39885
|
+
onToolResult
|
|
39886
|
+
}) {
|
|
39887
|
+
for await (const delta of stream.fullStream) {
|
|
39888
|
+
if (delta.type === "text-delta") {
|
|
39889
|
+
onTextDelta?.(delta);
|
|
39890
|
+
} else if (delta.type === "tool-call") {
|
|
39891
|
+
onToolCall?.(delta);
|
|
39892
|
+
} else if (delta.type === "tool-result") {
|
|
39893
|
+
onToolResult?.(delta);
|
|
39894
|
+
}
|
|
39895
|
+
}
|
|
39896
|
+
}
|
|
39882
39897
|
|
|
39883
39898
|
// src/core/ai/ai.ts
|
|
39884
39899
|
function wrapStreamWithErrorHandler(originalStream, messagesContainer, opts, model, silent) {
|
|
@@ -39942,7 +39957,8 @@ function streamResponse(opts) {
|
|
|
39942
39957
|
abortSignal,
|
|
39943
39958
|
activeTools,
|
|
39944
39959
|
silent,
|
|
39945
|
-
authConfig
|
|
39960
|
+
authConfig,
|
|
39961
|
+
onFinish
|
|
39946
39962
|
} = opts;
|
|
39947
39963
|
const messagesContainer = { current: messages || [] };
|
|
39948
39964
|
const providerModel = getProviderModel(model, authConfig);
|
|
@@ -39997,7 +40013,8 @@ function streamResponse(opts) {
|
|
|
39997
40013
|
}
|
|
39998
40014
|
throw repairError;
|
|
39999
40015
|
}
|
|
40000
|
-
}
|
|
40016
|
+
},
|
|
40017
|
+
onFinish
|
|
40001
40018
|
});
|
|
40002
40019
|
return wrapStreamWithErrorHandler(response, messagesContainer, opts, providerModel, silent);
|
|
40003
40020
|
} catch (error46) {
|
|
@@ -40713,7 +40730,14 @@ function getOffensiveHeaders(session) {
|
|
|
40713
40730
|
|
|
40714
40731
|
// src/core/agent/thoroughPentestAgent/agent.ts
|
|
40715
40732
|
import { join as join6 } from "path";
|
|
40716
|
-
import {
|
|
40733
|
+
import {
|
|
40734
|
+
readFileSync as readFileSync5,
|
|
40735
|
+
existsSync as existsSync8,
|
|
40736
|
+
writeFileSync as writeFileSync6,
|
|
40737
|
+
copyFileSync,
|
|
40738
|
+
readdirSync as readdirSync4,
|
|
40739
|
+
mkdirSync as mkdirSync6
|
|
40740
|
+
} from "fs";
|
|
40717
40741
|
|
|
40718
40742
|
// src/core/agent/attackSurfaceAgent/prompts.ts
|
|
40719
40743
|
var SYSTEM2 = `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.
|
|
@@ -44327,6 +44351,239 @@ Begin your analysis now.
|
|
|
44327
44351
|
};
|
|
44328
44352
|
}
|
|
44329
44353
|
|
|
44354
|
+
// src/core/messages/index.ts
|
|
44355
|
+
import fs from "fs";
|
|
44356
|
+
|
|
44357
|
+
// src/core/messages/types.ts
|
|
44358
|
+
var ToolMessageObject = exports_external.object({
|
|
44359
|
+
role: exports_external.literal("tool"),
|
|
44360
|
+
status: exports_external.enum(["pending", "completed"]),
|
|
44361
|
+
toolCallId: exports_external.string(),
|
|
44362
|
+
content: exports_external.string(),
|
|
44363
|
+
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
44364
|
+
toolName: exports_external.string(),
|
|
44365
|
+
createdAt: exports_external.coerce.date()
|
|
44366
|
+
});
|
|
44367
|
+
var SystemModelMessageObject = exports_external.object({
|
|
44368
|
+
role: exports_external.literal("system"),
|
|
44369
|
+
content: exports_external.string(),
|
|
44370
|
+
createdAt: exports_external.coerce.date(),
|
|
44371
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44372
|
+
});
|
|
44373
|
+
var TextPartObject = exports_external.object({
|
|
44374
|
+
type: exports_external.literal("text"),
|
|
44375
|
+
text: exports_external.string(),
|
|
44376
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44377
|
+
});
|
|
44378
|
+
var FilePartObject = exports_external.object({
|
|
44379
|
+
type: exports_external.literal("file"),
|
|
44380
|
+
data: exports_external.union([
|
|
44381
|
+
exports_external.string(),
|
|
44382
|
+
exports_external.instanceof(Uint8Array),
|
|
44383
|
+
exports_external.instanceof(ArrayBuffer),
|
|
44384
|
+
exports_external.instanceof(Buffer),
|
|
44385
|
+
exports_external.url()
|
|
44386
|
+
]),
|
|
44387
|
+
filename: exports_external.string().optional(),
|
|
44388
|
+
mediaType: exports_external.string(),
|
|
44389
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44390
|
+
});
|
|
44391
|
+
var ReasoningPartObject = exports_external.object({
|
|
44392
|
+
type: exports_external.literal("reasoning"),
|
|
44393
|
+
text: exports_external.string(),
|
|
44394
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44395
|
+
});
|
|
44396
|
+
var ToolCallPartObject = exports_external.object({
|
|
44397
|
+
type: exports_external.literal("tool-call"),
|
|
44398
|
+
toolCallId: exports_external.string(),
|
|
44399
|
+
toolName: exports_external.string(),
|
|
44400
|
+
input: exports_external.unknown(),
|
|
44401
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
44402
|
+
providerExecuted: exports_external.boolean().optional()
|
|
44403
|
+
});
|
|
44404
|
+
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
44405
|
+
exports_external.object({
|
|
44406
|
+
type: exports_external.literal("text"),
|
|
44407
|
+
value: exports_external.string()
|
|
44408
|
+
}),
|
|
44409
|
+
exports_external.object({
|
|
44410
|
+
type: exports_external.literal("json"),
|
|
44411
|
+
value: exports_external.any()
|
|
44412
|
+
}),
|
|
44413
|
+
exports_external.object({
|
|
44414
|
+
type: exports_external.literal("error-text"),
|
|
44415
|
+
value: exports_external.string()
|
|
44416
|
+
}),
|
|
44417
|
+
exports_external.object({
|
|
44418
|
+
type: exports_external.literal("error-json"),
|
|
44419
|
+
value: exports_external.any()
|
|
44420
|
+
}),
|
|
44421
|
+
exports_external.object({
|
|
44422
|
+
type: exports_external.literal("content"),
|
|
44423
|
+
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
44424
|
+
exports_external.object({
|
|
44425
|
+
type: exports_external.literal("text"),
|
|
44426
|
+
text: exports_external.string()
|
|
44427
|
+
}),
|
|
44428
|
+
exports_external.object({
|
|
44429
|
+
type: exports_external.literal("media"),
|
|
44430
|
+
data: exports_external.string(),
|
|
44431
|
+
mediaType: exports_external.string()
|
|
44432
|
+
})
|
|
44433
|
+
]))
|
|
44434
|
+
})
|
|
44435
|
+
]);
|
|
44436
|
+
var ToolResultPartObject = exports_external.object({
|
|
44437
|
+
type: exports_external.literal("tool-result"),
|
|
44438
|
+
toolCallId: exports_external.string(),
|
|
44439
|
+
toolName: exports_external.string(),
|
|
44440
|
+
output: ToolResultOutputObject,
|
|
44441
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44442
|
+
});
|
|
44443
|
+
var AssistantModelMessageObject = exports_external.object({
|
|
44444
|
+
role: exports_external.literal("assistant"),
|
|
44445
|
+
content: exports_external.union([
|
|
44446
|
+
exports_external.string(),
|
|
44447
|
+
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
44448
|
+
TextPartObject,
|
|
44449
|
+
FilePartObject,
|
|
44450
|
+
ReasoningPartObject,
|
|
44451
|
+
ToolCallPartObject,
|
|
44452
|
+
ToolResultPartObject
|
|
44453
|
+
]))
|
|
44454
|
+
]),
|
|
44455
|
+
createdAt: exports_external.coerce.date(),
|
|
44456
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44457
|
+
});
|
|
44458
|
+
var UserModelMessageObject = exports_external.object({
|
|
44459
|
+
role: exports_external.literal("user"),
|
|
44460
|
+
content: exports_external.union([
|
|
44461
|
+
exports_external.string(),
|
|
44462
|
+
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
44463
|
+
]),
|
|
44464
|
+
createdAt: exports_external.coerce.date(),
|
|
44465
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
44466
|
+
});
|
|
44467
|
+
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
44468
|
+
SystemModelMessageObject,
|
|
44469
|
+
UserModelMessageObject,
|
|
44470
|
+
AssistantModelMessageObject,
|
|
44471
|
+
ToolMessageObject
|
|
44472
|
+
]);
|
|
44473
|
+
|
|
44474
|
+
// src/core/messages/index.ts
|
|
44475
|
+
function saveMessages(session, messages) {
|
|
44476
|
+
fs.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
44477
|
+
}
|
|
44478
|
+
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
44479
|
+
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
44480
|
+
if (!fs.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
44481
|
+
fs.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
44482
|
+
recursive: true
|
|
44483
|
+
});
|
|
44484
|
+
}
|
|
44485
|
+
if (!fs.existsSync(subagentDir)) {
|
|
44486
|
+
fs.mkdirSync(subagentDir, { recursive: true });
|
|
44487
|
+
}
|
|
44488
|
+
fs.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
44489
|
+
}
|
|
44490
|
+
function mapMessages(messages) {
|
|
44491
|
+
const result = [];
|
|
44492
|
+
const toolResults = new Map;
|
|
44493
|
+
for (const message of messages) {
|
|
44494
|
+
if (message.role === "tool") {
|
|
44495
|
+
const content = message.content;
|
|
44496
|
+
if (Array.isArray(content)) {
|
|
44497
|
+
for (const part of content) {
|
|
44498
|
+
if (part.type === "tool-result") {
|
|
44499
|
+
toolResults.set(part.toolCallId, part.output);
|
|
44500
|
+
}
|
|
44501
|
+
}
|
|
44502
|
+
}
|
|
44503
|
+
}
|
|
44504
|
+
}
|
|
44505
|
+
for (const message of messages) {
|
|
44506
|
+
if (message.role === "system") {
|
|
44507
|
+
result.push({
|
|
44508
|
+
role: "system",
|
|
44509
|
+
content: message.content,
|
|
44510
|
+
createdAt: new Date,
|
|
44511
|
+
...message.providerOptions && {
|
|
44512
|
+
providerOptions: message.providerOptions
|
|
44513
|
+
}
|
|
44514
|
+
});
|
|
44515
|
+
continue;
|
|
44516
|
+
}
|
|
44517
|
+
if (message.role === "user") {
|
|
44518
|
+
const content = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
|
|
44519
|
+
result.push({
|
|
44520
|
+
role: "user",
|
|
44521
|
+
content,
|
|
44522
|
+
createdAt: new Date,
|
|
44523
|
+
...message.providerOptions && {
|
|
44524
|
+
providerOptions: message.providerOptions
|
|
44525
|
+
}
|
|
44526
|
+
});
|
|
44527
|
+
continue;
|
|
44528
|
+
}
|
|
44529
|
+
if (message.role === "tool") {
|
|
44530
|
+
continue;
|
|
44531
|
+
}
|
|
44532
|
+
if (message.role === "assistant") {
|
|
44533
|
+
const content = message.content;
|
|
44534
|
+
if (typeof content === "string") {
|
|
44535
|
+
result.push({
|
|
44536
|
+
role: "assistant",
|
|
44537
|
+
content,
|
|
44538
|
+
createdAt: new Date,
|
|
44539
|
+
...message.providerOptions && {
|
|
44540
|
+
providerOptions: message.providerOptions
|
|
44541
|
+
}
|
|
44542
|
+
});
|
|
44543
|
+
continue;
|
|
44544
|
+
}
|
|
44545
|
+
const textParts = [];
|
|
44546
|
+
const toolCalls = [];
|
|
44547
|
+
for (const part of content) {
|
|
44548
|
+
if (part.type === "text") {
|
|
44549
|
+
textParts.push(part.text);
|
|
44550
|
+
} else if (part.type === "tool-call") {
|
|
44551
|
+
toolCalls.push({
|
|
44552
|
+
toolCallId: part.toolCallId,
|
|
44553
|
+
toolName: part.toolName,
|
|
44554
|
+
input: part.input
|
|
44555
|
+
});
|
|
44556
|
+
}
|
|
44557
|
+
}
|
|
44558
|
+
if (textParts.length > 0) {
|
|
44559
|
+
result.push({
|
|
44560
|
+
role: "assistant",
|
|
44561
|
+
content: textParts.join(""),
|
|
44562
|
+
createdAt: new Date,
|
|
44563
|
+
...message.providerOptions && {
|
|
44564
|
+
providerOptions: message.providerOptions
|
|
44565
|
+
}
|
|
44566
|
+
});
|
|
44567
|
+
}
|
|
44568
|
+
for (const toolCall of toolCalls) {
|
|
44569
|
+
const input = toolCall.input;
|
|
44570
|
+
const toolCallDescription = input?.toolCallDescription || `Executing ${toolCall.toolName}`;
|
|
44571
|
+
const hasResult = toolResults.has(toolCall.toolCallId);
|
|
44572
|
+
result.push({
|
|
44573
|
+
role: "tool",
|
|
44574
|
+
status: hasResult ? "completed" : "pending",
|
|
44575
|
+
toolCallId: toolCall.toolCallId,
|
|
44576
|
+
content: hasResult ? `✓ ${toolCallDescription}` : toolCallDescription,
|
|
44577
|
+
args: input || {},
|
|
44578
|
+
toolName: toolCall.toolName,
|
|
44579
|
+
createdAt: new Date
|
|
44580
|
+
});
|
|
44581
|
+
}
|
|
44582
|
+
}
|
|
44583
|
+
}
|
|
44584
|
+
return result;
|
|
44585
|
+
}
|
|
44586
|
+
|
|
44330
44587
|
// src/core/agent/pentestAgent/agent.ts
|
|
44331
44588
|
var execAsync2 = promisify2(exec2);
|
|
44332
44589
|
function runAgent(opts) {
|
|
@@ -44343,6 +44600,7 @@ function runAgent(opts) {
|
|
|
44343
44600
|
sessionConfig
|
|
44344
44601
|
} = opts;
|
|
44345
44602
|
const session = opts.session || createSession(target, objective, undefined, sessionConfig);
|
|
44603
|
+
const subagentId = `pentest-${nanoid3(6)}`;
|
|
44346
44604
|
const pocsPath = join3(session.rootPath, "pocs");
|
|
44347
44605
|
if (!existsSync5(pocsPath)) {
|
|
44348
44606
|
mkdirSync4(pocsPath, { recursive: true });
|
|
@@ -44498,10 +44756,13 @@ You are only authorized to perform testing against the specific target endpoint
|
|
|
44498
44756
|
onStepFinish,
|
|
44499
44757
|
abortSignal,
|
|
44500
44758
|
silent,
|
|
44501
|
-
authConfig
|
|
44759
|
+
authConfig,
|
|
44760
|
+
onFinish: ({ response }) => {
|
|
44761
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
44762
|
+
}
|
|
44502
44763
|
});
|
|
44503
44764
|
streamResult.session = session;
|
|
44504
|
-
return { streamResult, session };
|
|
44765
|
+
return { streamResult, session, subagentId };
|
|
44505
44766
|
}
|
|
44506
44767
|
// src/core/agent/tools.ts
|
|
44507
44768
|
var execAsync3 = promisify3(exec3);
|
|
@@ -47050,6 +47311,7 @@ import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as
|
|
|
47050
47311
|
function runAgent2(opts) {
|
|
47051
47312
|
const { target, model, onStepFinish, abortSignal } = opts;
|
|
47052
47313
|
const session = opts.session || createSession(target);
|
|
47314
|
+
const subagentId = `attack-surface-${nanoid3(6)}`;
|
|
47053
47315
|
console.log(`Created attack surface session: ${session.id}`);
|
|
47054
47316
|
console.log(`Session path: ${session.rootPath}`);
|
|
47055
47317
|
const assetsPath = join5(session.rootPath, "assets");
|
|
@@ -47196,144 +47458,13 @@ You MUST provide the details final report using create_attack_surface_report too
|
|
|
47196
47458
|
stopWhen: stepCountIs(1e4),
|
|
47197
47459
|
toolChoice: "auto",
|
|
47198
47460
|
onStepFinish,
|
|
47199
|
-
abortSignal
|
|
47461
|
+
abortSignal,
|
|
47462
|
+
onFinish: ({ response }) => {
|
|
47463
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
47464
|
+
}
|
|
47200
47465
|
});
|
|
47201
47466
|
streamResult.session = session;
|
|
47202
|
-
return { streamResult, session };
|
|
47203
|
-
}
|
|
47204
|
-
|
|
47205
|
-
// src/core/messages/index.ts
|
|
47206
|
-
import fs from "fs";
|
|
47207
|
-
|
|
47208
|
-
// src/core/messages/types.ts
|
|
47209
|
-
var ToolMessageObject = exports_external.object({
|
|
47210
|
-
role: exports_external.literal("tool"),
|
|
47211
|
-
status: exports_external.enum(["pending", "completed"]),
|
|
47212
|
-
toolCallId: exports_external.string(),
|
|
47213
|
-
content: exports_external.string(),
|
|
47214
|
-
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
47215
|
-
toolName: exports_external.string(),
|
|
47216
|
-
createdAt: exports_external.coerce.date()
|
|
47217
|
-
});
|
|
47218
|
-
var SystemModelMessageObject = exports_external.object({
|
|
47219
|
-
role: exports_external.literal("system"),
|
|
47220
|
-
content: exports_external.string(),
|
|
47221
|
-
createdAt: exports_external.coerce.date(),
|
|
47222
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47223
|
-
});
|
|
47224
|
-
var TextPartObject = exports_external.object({
|
|
47225
|
-
type: exports_external.literal("text"),
|
|
47226
|
-
text: exports_external.string(),
|
|
47227
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47228
|
-
});
|
|
47229
|
-
var FilePartObject = exports_external.object({
|
|
47230
|
-
type: exports_external.literal("file"),
|
|
47231
|
-
data: exports_external.union([
|
|
47232
|
-
exports_external.string(),
|
|
47233
|
-
exports_external.instanceof(Uint8Array),
|
|
47234
|
-
exports_external.instanceof(ArrayBuffer),
|
|
47235
|
-
exports_external.instanceof(Buffer),
|
|
47236
|
-
exports_external.url()
|
|
47237
|
-
]),
|
|
47238
|
-
filename: exports_external.string().optional(),
|
|
47239
|
-
mediaType: exports_external.string(),
|
|
47240
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47241
|
-
});
|
|
47242
|
-
var ReasoningPartObject = exports_external.object({
|
|
47243
|
-
type: exports_external.literal("reasoning"),
|
|
47244
|
-
text: exports_external.string(),
|
|
47245
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47246
|
-
});
|
|
47247
|
-
var ToolCallPartObject = exports_external.object({
|
|
47248
|
-
type: exports_external.literal("tool-call"),
|
|
47249
|
-
toolCallId: exports_external.string(),
|
|
47250
|
-
toolName: exports_external.string(),
|
|
47251
|
-
input: exports_external.unknown(),
|
|
47252
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
47253
|
-
providerExecuted: exports_external.boolean().optional()
|
|
47254
|
-
});
|
|
47255
|
-
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
47256
|
-
exports_external.object({
|
|
47257
|
-
type: exports_external.literal("text"),
|
|
47258
|
-
value: exports_external.string()
|
|
47259
|
-
}),
|
|
47260
|
-
exports_external.object({
|
|
47261
|
-
type: exports_external.literal("json"),
|
|
47262
|
-
value: exports_external.any()
|
|
47263
|
-
}),
|
|
47264
|
-
exports_external.object({
|
|
47265
|
-
type: exports_external.literal("error-text"),
|
|
47266
|
-
value: exports_external.string()
|
|
47267
|
-
}),
|
|
47268
|
-
exports_external.object({
|
|
47269
|
-
type: exports_external.literal("error-json"),
|
|
47270
|
-
value: exports_external.any()
|
|
47271
|
-
}),
|
|
47272
|
-
exports_external.object({
|
|
47273
|
-
type: exports_external.literal("content"),
|
|
47274
|
-
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
47275
|
-
exports_external.object({
|
|
47276
|
-
type: exports_external.literal("text"),
|
|
47277
|
-
text: exports_external.string()
|
|
47278
|
-
}),
|
|
47279
|
-
exports_external.object({
|
|
47280
|
-
type: exports_external.literal("media"),
|
|
47281
|
-
data: exports_external.string(),
|
|
47282
|
-
mediaType: exports_external.string()
|
|
47283
|
-
})
|
|
47284
|
-
]))
|
|
47285
|
-
})
|
|
47286
|
-
]);
|
|
47287
|
-
var ToolResultPartObject = exports_external.object({
|
|
47288
|
-
type: exports_external.literal("tool-result"),
|
|
47289
|
-
toolCallId: exports_external.string(),
|
|
47290
|
-
toolName: exports_external.string(),
|
|
47291
|
-
output: ToolResultOutputObject,
|
|
47292
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47293
|
-
});
|
|
47294
|
-
var AssistantModelMessageObject = exports_external.object({
|
|
47295
|
-
role: exports_external.literal("assistant"),
|
|
47296
|
-
content: exports_external.union([
|
|
47297
|
-
exports_external.string(),
|
|
47298
|
-
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
47299
|
-
TextPartObject,
|
|
47300
|
-
FilePartObject,
|
|
47301
|
-
ReasoningPartObject,
|
|
47302
|
-
ToolCallPartObject,
|
|
47303
|
-
ToolResultPartObject
|
|
47304
|
-
]))
|
|
47305
|
-
]),
|
|
47306
|
-
createdAt: exports_external.coerce.date(),
|
|
47307
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47308
|
-
});
|
|
47309
|
-
var UserModelMessageObject = exports_external.object({
|
|
47310
|
-
role: exports_external.literal("user"),
|
|
47311
|
-
content: exports_external.union([
|
|
47312
|
-
exports_external.string(),
|
|
47313
|
-
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
47314
|
-
]),
|
|
47315
|
-
createdAt: exports_external.coerce.date(),
|
|
47316
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
47317
|
-
});
|
|
47318
|
-
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
47319
|
-
SystemModelMessageObject,
|
|
47320
|
-
UserModelMessageObject,
|
|
47321
|
-
AssistantModelMessageObject,
|
|
47322
|
-
ToolMessageObject
|
|
47323
|
-
]);
|
|
47324
|
-
|
|
47325
|
-
// src/core/messages/index.ts
|
|
47326
|
-
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
47327
|
-
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
47328
|
-
if (!fs.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
47329
|
-
fs.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
47330
|
-
recursive: true
|
|
47331
|
-
});
|
|
47332
|
-
}
|
|
47333
|
-
if (!fs.existsSync(subagentDir)) {
|
|
47334
|
-
fs.mkdirSync(subagentDir, { recursive: true });
|
|
47335
|
-
}
|
|
47336
|
-
fs.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
47467
|
+
return { streamResult, session, subagentId };
|
|
47337
47468
|
}
|
|
47338
47469
|
|
|
47339
47470
|
// node_modules/yocto-queue/index.js
|
|
@@ -47518,7 +47649,10 @@ Begin by using the get_attack_surface tool to map the complete attack surface of
|
|
|
47518
47649
|
stopWhen: stepCountIs(1e4),
|
|
47519
47650
|
toolChoice: "auto",
|
|
47520
47651
|
onStepFinish,
|
|
47521
|
-
abortSignal
|
|
47652
|
+
abortSignal,
|
|
47653
|
+
onFinish: ({ response }) => {
|
|
47654
|
+
saveMessages(session, mapMessages(response.messages));
|
|
47655
|
+
}
|
|
47522
47656
|
});
|
|
47523
47657
|
streamResult.session = session;
|
|
47524
47658
|
return { streamResult, session };
|
|
@@ -47550,14 +47684,13 @@ Use this as the FIRST step in your thorough penetration test.`,
|
|
|
47550
47684
|
execute: async ({ target, objective }) => {
|
|
47551
47685
|
try {
|
|
47552
47686
|
logger?.log(`[Orchestrator] Spawning attack surface agent for: ${target}`);
|
|
47553
|
-
const { streamResult: result } = runAgent2({
|
|
47687
|
+
const { streamResult: result, subagentId } = runAgent2({
|
|
47554
47688
|
session,
|
|
47555
47689
|
target,
|
|
47556
47690
|
objective,
|
|
47557
47691
|
model,
|
|
47558
47692
|
abortSignal
|
|
47559
47693
|
});
|
|
47560
|
-
const subagentId = `attack-surface-${result.session.id}`;
|
|
47561
47694
|
const allMessages = [];
|
|
47562
47695
|
let currentAssistantText = "";
|
|
47563
47696
|
if (onSubagentSpawn) {
|
|
@@ -47582,8 +47715,8 @@ Objective: ${objective}`,
|
|
|
47582
47715
|
if (onSubagentMessage) {
|
|
47583
47716
|
onSubagentMessage(subagentId, initialMessage);
|
|
47584
47717
|
}
|
|
47585
|
-
|
|
47586
|
-
|
|
47718
|
+
await consumeStream2(result, {
|
|
47719
|
+
onTextDelta: (delta) => {
|
|
47587
47720
|
currentAssistantText += delta.text;
|
|
47588
47721
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
47589
47722
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -47606,7 +47739,8 @@ Objective: ${objective}`,
|
|
|
47606
47739
|
onSubagentMessage(subagentId, newMessage);
|
|
47607
47740
|
}
|
|
47608
47741
|
}
|
|
47609
|
-
}
|
|
47742
|
+
},
|
|
47743
|
+
onToolCall: (delta) => {
|
|
47610
47744
|
if (currentAssistantText) {
|
|
47611
47745
|
currentAssistantText = "";
|
|
47612
47746
|
}
|
|
@@ -47623,7 +47757,8 @@ Objective: ${objective}`,
|
|
|
47623
47757
|
if (onSubagentMessage) {
|
|
47624
47758
|
onSubagentMessage(subagentId, toolMessage);
|
|
47625
47759
|
}
|
|
47626
|
-
}
|
|
47760
|
+
},
|
|
47761
|
+
onToolResult: (delta) => {
|
|
47627
47762
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
47628
47763
|
if (existingToolMessageIndex !== -1) {
|
|
47629
47764
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -47638,11 +47773,10 @@ Objective: ${objective}`,
|
|
|
47638
47773
|
}
|
|
47639
47774
|
}
|
|
47640
47775
|
}
|
|
47641
|
-
}
|
|
47776
|
+
});
|
|
47642
47777
|
if (onSubagentComplete) {
|
|
47643
47778
|
onSubagentComplete(subagentId, true);
|
|
47644
47779
|
}
|
|
47645
|
-
saveSubagentMessages(session, subagentId, allMessages);
|
|
47646
47780
|
const subagentMetadata = {
|
|
47647
47781
|
type: "attack-surface",
|
|
47648
47782
|
subagentId,
|
|
@@ -47725,14 +47859,13 @@ You can spawn multiple agents in parallel - they will run concurrently.`,
|
|
|
47725
47859
|
const limit = pLimit(5);
|
|
47726
47860
|
const promises = targets.map((targetInfo, index) => limit(async () => {
|
|
47727
47861
|
try {
|
|
47728
|
-
const { streamResult: result } = runAgent({
|
|
47862
|
+
const { streamResult: result, subagentId } = runAgent({
|
|
47729
47863
|
session,
|
|
47730
47864
|
target: targetInfo.target,
|
|
47731
47865
|
objective: targetInfo.objective,
|
|
47732
47866
|
model,
|
|
47733
47867
|
abortSignal
|
|
47734
47868
|
});
|
|
47735
|
-
const subagentId = `pentest-${index + 1}-${result.session.id}`;
|
|
47736
47869
|
const allMessages = [];
|
|
47737
47870
|
let currentAssistantText = "";
|
|
47738
47871
|
const startTime = new Date().toISOString();
|
|
@@ -47758,8 +47891,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
47758
47891
|
if (onSubagentMessage) {
|
|
47759
47892
|
onSubagentMessage(subagentId, initialMessage);
|
|
47760
47893
|
}
|
|
47761
|
-
|
|
47762
|
-
|
|
47894
|
+
await consumeStream2(result, {
|
|
47895
|
+
onTextDelta: (delta) => {
|
|
47763
47896
|
currentAssistantText += delta.text;
|
|
47764
47897
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
47765
47898
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -47782,7 +47915,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
47782
47915
|
onSubagentMessage(subagentId, newMessage);
|
|
47783
47916
|
}
|
|
47784
47917
|
}
|
|
47785
|
-
}
|
|
47918
|
+
},
|
|
47919
|
+
onToolCall: (delta) => {
|
|
47786
47920
|
if (currentAssistantText) {
|
|
47787
47921
|
currentAssistantText = "";
|
|
47788
47922
|
}
|
|
@@ -47799,7 +47933,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
47799
47933
|
if (onSubagentMessage) {
|
|
47800
47934
|
onSubagentMessage(subagentId, toolMessage);
|
|
47801
47935
|
}
|
|
47802
|
-
}
|
|
47936
|
+
},
|
|
47937
|
+
onToolResult: (delta) => {
|
|
47803
47938
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
47804
47939
|
if (existingToolMessageIndex !== -1) {
|
|
47805
47940
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -47814,12 +47949,11 @@ Objective: ${targetInfo.objective}`,
|
|
|
47814
47949
|
}
|
|
47815
47950
|
}
|
|
47816
47951
|
}
|
|
47817
|
-
}
|
|
47818
|
-
const endTime = new Date().toISOString();
|
|
47952
|
+
});
|
|
47819
47953
|
if (onSubagentComplete) {
|
|
47820
47954
|
onSubagentComplete(subagentId, true);
|
|
47821
47955
|
}
|
|
47822
|
-
|
|
47956
|
+
const endTime = new Date().toISOString();
|
|
47823
47957
|
const subagentMetadata = {
|
|
47824
47958
|
type: "pentest",
|
|
47825
47959
|
subagentId,
|