@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/index.js
CHANGED
|
@@ -64848,6 +64848,21 @@ function createSummarizationStream(messages, opts, model) {
|
|
|
64848
64848
|
}
|
|
64849
64849
|
};
|
|
64850
64850
|
}
|
|
64851
|
+
async function consumeStream2(stream, {
|
|
64852
|
+
onTextDelta,
|
|
64853
|
+
onToolCall,
|
|
64854
|
+
onToolResult
|
|
64855
|
+
}) {
|
|
64856
|
+
for await (const delta of stream.fullStream) {
|
|
64857
|
+
if (delta.type === "text-delta") {
|
|
64858
|
+
onTextDelta?.(delta);
|
|
64859
|
+
} else if (delta.type === "tool-call") {
|
|
64860
|
+
onToolCall?.(delta);
|
|
64861
|
+
} else if (delta.type === "tool-result") {
|
|
64862
|
+
onToolResult?.(delta);
|
|
64863
|
+
}
|
|
64864
|
+
}
|
|
64865
|
+
}
|
|
64851
64866
|
|
|
64852
64867
|
// src/core/ai/ai.ts
|
|
64853
64868
|
function wrapStreamWithErrorHandler(originalStream, messagesContainer, opts, model, silent) {
|
|
@@ -64911,7 +64926,8 @@ function streamResponse(opts) {
|
|
|
64911
64926
|
abortSignal,
|
|
64912
64927
|
activeTools,
|
|
64913
64928
|
silent,
|
|
64914
|
-
authConfig
|
|
64929
|
+
authConfig,
|
|
64930
|
+
onFinish
|
|
64915
64931
|
} = opts;
|
|
64916
64932
|
const messagesContainer = { current: messages || [] };
|
|
64917
64933
|
const providerModel = getProviderModel(model, authConfig);
|
|
@@ -64966,7 +64982,8 @@ function streamResponse(opts) {
|
|
|
64966
64982
|
}
|
|
64967
64983
|
throw repairError;
|
|
64968
64984
|
}
|
|
64969
|
-
}
|
|
64985
|
+
},
|
|
64986
|
+
onFinish
|
|
64970
64987
|
});
|
|
64971
64988
|
return wrapStreamWithErrorHandler(response, messagesContainer, opts, providerModel, silent);
|
|
64972
64989
|
} catch (error46) {
|
|
@@ -70040,6 +70057,243 @@ Begin your analysis now.
|
|
|
70040
70057
|
};
|
|
70041
70058
|
}
|
|
70042
70059
|
|
|
70060
|
+
// src/core/messages/index.ts
|
|
70061
|
+
import fs3 from "fs";
|
|
70062
|
+
|
|
70063
|
+
// src/core/messages/types.ts
|
|
70064
|
+
var ToolMessageObject = exports_external.object({
|
|
70065
|
+
role: exports_external.literal("tool"),
|
|
70066
|
+
status: exports_external.enum(["pending", "completed"]),
|
|
70067
|
+
toolCallId: exports_external.string(),
|
|
70068
|
+
content: exports_external.string(),
|
|
70069
|
+
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
70070
|
+
toolName: exports_external.string(),
|
|
70071
|
+
createdAt: exports_external.coerce.date()
|
|
70072
|
+
});
|
|
70073
|
+
var SystemModelMessageObject = exports_external.object({
|
|
70074
|
+
role: exports_external.literal("system"),
|
|
70075
|
+
content: exports_external.string(),
|
|
70076
|
+
createdAt: exports_external.coerce.date(),
|
|
70077
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70078
|
+
});
|
|
70079
|
+
var TextPartObject = exports_external.object({
|
|
70080
|
+
type: exports_external.literal("text"),
|
|
70081
|
+
text: exports_external.string(),
|
|
70082
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70083
|
+
});
|
|
70084
|
+
var FilePartObject = exports_external.object({
|
|
70085
|
+
type: exports_external.literal("file"),
|
|
70086
|
+
data: exports_external.union([
|
|
70087
|
+
exports_external.string(),
|
|
70088
|
+
exports_external.instanceof(Uint8Array),
|
|
70089
|
+
exports_external.instanceof(ArrayBuffer),
|
|
70090
|
+
exports_external.instanceof(Buffer),
|
|
70091
|
+
exports_external.url()
|
|
70092
|
+
]),
|
|
70093
|
+
filename: exports_external.string().optional(),
|
|
70094
|
+
mediaType: exports_external.string(),
|
|
70095
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70096
|
+
});
|
|
70097
|
+
var ReasoningPartObject = exports_external.object({
|
|
70098
|
+
type: exports_external.literal("reasoning"),
|
|
70099
|
+
text: exports_external.string(),
|
|
70100
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70101
|
+
});
|
|
70102
|
+
var ToolCallPartObject = exports_external.object({
|
|
70103
|
+
type: exports_external.literal("tool-call"),
|
|
70104
|
+
toolCallId: exports_external.string(),
|
|
70105
|
+
toolName: exports_external.string(),
|
|
70106
|
+
input: exports_external.unknown(),
|
|
70107
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
70108
|
+
providerExecuted: exports_external.boolean().optional()
|
|
70109
|
+
});
|
|
70110
|
+
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
70111
|
+
exports_external.object({
|
|
70112
|
+
type: exports_external.literal("text"),
|
|
70113
|
+
value: exports_external.string()
|
|
70114
|
+
}),
|
|
70115
|
+
exports_external.object({
|
|
70116
|
+
type: exports_external.literal("json"),
|
|
70117
|
+
value: exports_external.any()
|
|
70118
|
+
}),
|
|
70119
|
+
exports_external.object({
|
|
70120
|
+
type: exports_external.literal("error-text"),
|
|
70121
|
+
value: exports_external.string()
|
|
70122
|
+
}),
|
|
70123
|
+
exports_external.object({
|
|
70124
|
+
type: exports_external.literal("error-json"),
|
|
70125
|
+
value: exports_external.any()
|
|
70126
|
+
}),
|
|
70127
|
+
exports_external.object({
|
|
70128
|
+
type: exports_external.literal("content"),
|
|
70129
|
+
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
70130
|
+
exports_external.object({
|
|
70131
|
+
type: exports_external.literal("text"),
|
|
70132
|
+
text: exports_external.string()
|
|
70133
|
+
}),
|
|
70134
|
+
exports_external.object({
|
|
70135
|
+
type: exports_external.literal("media"),
|
|
70136
|
+
data: exports_external.string(),
|
|
70137
|
+
mediaType: exports_external.string()
|
|
70138
|
+
})
|
|
70139
|
+
]))
|
|
70140
|
+
})
|
|
70141
|
+
]);
|
|
70142
|
+
var ToolResultPartObject = exports_external.object({
|
|
70143
|
+
type: exports_external.literal("tool-result"),
|
|
70144
|
+
toolCallId: exports_external.string(),
|
|
70145
|
+
toolName: exports_external.string(),
|
|
70146
|
+
output: ToolResultOutputObject,
|
|
70147
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70148
|
+
});
|
|
70149
|
+
var AssistantModelMessageObject = exports_external.object({
|
|
70150
|
+
role: exports_external.literal("assistant"),
|
|
70151
|
+
content: exports_external.union([
|
|
70152
|
+
exports_external.string(),
|
|
70153
|
+
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
70154
|
+
TextPartObject,
|
|
70155
|
+
FilePartObject,
|
|
70156
|
+
ReasoningPartObject,
|
|
70157
|
+
ToolCallPartObject,
|
|
70158
|
+
ToolResultPartObject
|
|
70159
|
+
]))
|
|
70160
|
+
]),
|
|
70161
|
+
createdAt: exports_external.coerce.date(),
|
|
70162
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70163
|
+
});
|
|
70164
|
+
var UserModelMessageObject = exports_external.object({
|
|
70165
|
+
role: exports_external.literal("user"),
|
|
70166
|
+
content: exports_external.union([
|
|
70167
|
+
exports_external.string(),
|
|
70168
|
+
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
70169
|
+
]),
|
|
70170
|
+
createdAt: exports_external.coerce.date(),
|
|
70171
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70172
|
+
});
|
|
70173
|
+
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
70174
|
+
SystemModelMessageObject,
|
|
70175
|
+
UserModelMessageObject,
|
|
70176
|
+
AssistantModelMessageObject,
|
|
70177
|
+
ToolMessageObject
|
|
70178
|
+
]);
|
|
70179
|
+
|
|
70180
|
+
// src/core/messages/index.ts
|
|
70181
|
+
function getMessages(session) {
|
|
70182
|
+
const messages = fs3.readFileSync(session.rootPath + "/messages.json", "utf8");
|
|
70183
|
+
return ModelMessageObject.array().parse(JSON.parse(messages));
|
|
70184
|
+
}
|
|
70185
|
+
function saveMessages(session, messages) {
|
|
70186
|
+
fs3.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
70187
|
+
}
|
|
70188
|
+
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
70189
|
+
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
70190
|
+
if (!fs3.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
70191
|
+
fs3.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
70192
|
+
recursive: true
|
|
70193
|
+
});
|
|
70194
|
+
}
|
|
70195
|
+
if (!fs3.existsSync(subagentDir)) {
|
|
70196
|
+
fs3.mkdirSync(subagentDir, { recursive: true });
|
|
70197
|
+
}
|
|
70198
|
+
fs3.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
70199
|
+
}
|
|
70200
|
+
function mapMessages(messages) {
|
|
70201
|
+
const result = [];
|
|
70202
|
+
const toolResults = new Map;
|
|
70203
|
+
for (const message of messages) {
|
|
70204
|
+
if (message.role === "tool") {
|
|
70205
|
+
const content = message.content;
|
|
70206
|
+
if (Array.isArray(content)) {
|
|
70207
|
+
for (const part of content) {
|
|
70208
|
+
if (part.type === "tool-result") {
|
|
70209
|
+
toolResults.set(part.toolCallId, part.output);
|
|
70210
|
+
}
|
|
70211
|
+
}
|
|
70212
|
+
}
|
|
70213
|
+
}
|
|
70214
|
+
}
|
|
70215
|
+
for (const message of messages) {
|
|
70216
|
+
if (message.role === "system") {
|
|
70217
|
+
result.push({
|
|
70218
|
+
role: "system",
|
|
70219
|
+
content: message.content,
|
|
70220
|
+
createdAt: new Date,
|
|
70221
|
+
...message.providerOptions && {
|
|
70222
|
+
providerOptions: message.providerOptions
|
|
70223
|
+
}
|
|
70224
|
+
});
|
|
70225
|
+
continue;
|
|
70226
|
+
}
|
|
70227
|
+
if (message.role === "user") {
|
|
70228
|
+
const content = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
|
|
70229
|
+
result.push({
|
|
70230
|
+
role: "user",
|
|
70231
|
+
content,
|
|
70232
|
+
createdAt: new Date,
|
|
70233
|
+
...message.providerOptions && {
|
|
70234
|
+
providerOptions: message.providerOptions
|
|
70235
|
+
}
|
|
70236
|
+
});
|
|
70237
|
+
continue;
|
|
70238
|
+
}
|
|
70239
|
+
if (message.role === "tool") {
|
|
70240
|
+
continue;
|
|
70241
|
+
}
|
|
70242
|
+
if (message.role === "assistant") {
|
|
70243
|
+
const content = message.content;
|
|
70244
|
+
if (typeof content === "string") {
|
|
70245
|
+
result.push({
|
|
70246
|
+
role: "assistant",
|
|
70247
|
+
content,
|
|
70248
|
+
createdAt: new Date,
|
|
70249
|
+
...message.providerOptions && {
|
|
70250
|
+
providerOptions: message.providerOptions
|
|
70251
|
+
}
|
|
70252
|
+
});
|
|
70253
|
+
continue;
|
|
70254
|
+
}
|
|
70255
|
+
const textParts = [];
|
|
70256
|
+
const toolCalls = [];
|
|
70257
|
+
for (const part of content) {
|
|
70258
|
+
if (part.type === "text") {
|
|
70259
|
+
textParts.push(part.text);
|
|
70260
|
+
} else if (part.type === "tool-call") {
|
|
70261
|
+
toolCalls.push({
|
|
70262
|
+
toolCallId: part.toolCallId,
|
|
70263
|
+
toolName: part.toolName,
|
|
70264
|
+
input: part.input
|
|
70265
|
+
});
|
|
70266
|
+
}
|
|
70267
|
+
}
|
|
70268
|
+
if (textParts.length > 0) {
|
|
70269
|
+
result.push({
|
|
70270
|
+
role: "assistant",
|
|
70271
|
+
content: textParts.join(""),
|
|
70272
|
+
createdAt: new Date,
|
|
70273
|
+
...message.providerOptions && {
|
|
70274
|
+
providerOptions: message.providerOptions
|
|
70275
|
+
}
|
|
70276
|
+
});
|
|
70277
|
+
}
|
|
70278
|
+
for (const toolCall of toolCalls) {
|
|
70279
|
+
const input = toolCall.input;
|
|
70280
|
+
const toolCallDescription = input?.toolCallDescription || `Executing ${toolCall.toolName}`;
|
|
70281
|
+
const hasResult = toolResults.has(toolCall.toolCallId);
|
|
70282
|
+
result.push({
|
|
70283
|
+
role: "tool",
|
|
70284
|
+
status: hasResult ? "completed" : "pending",
|
|
70285
|
+
toolCallId: toolCall.toolCallId,
|
|
70286
|
+
content: hasResult ? `✓ ${toolCallDescription}` : toolCallDescription,
|
|
70287
|
+
args: input || {},
|
|
70288
|
+
toolName: toolCall.toolName,
|
|
70289
|
+
createdAt: new Date
|
|
70290
|
+
});
|
|
70291
|
+
}
|
|
70292
|
+
}
|
|
70293
|
+
}
|
|
70294
|
+
return result;
|
|
70295
|
+
}
|
|
70296
|
+
|
|
70043
70297
|
// src/core/agent/pentestAgent/agent.ts
|
|
70044
70298
|
var execAsync3 = promisify3(exec3);
|
|
70045
70299
|
function runAgent(opts) {
|
|
@@ -70056,6 +70310,7 @@ function runAgent(opts) {
|
|
|
70056
70310
|
sessionConfig
|
|
70057
70311
|
} = opts;
|
|
70058
70312
|
const session = opts.session || createSession(target, objective, undefined, sessionConfig);
|
|
70313
|
+
const subagentId = `pentest-${nanoid3(6)}`;
|
|
70059
70314
|
const pocsPath = join4(session.rootPath, "pocs");
|
|
70060
70315
|
if (!existsSync9(pocsPath)) {
|
|
70061
70316
|
mkdirSync4(pocsPath, { recursive: true });
|
|
@@ -70211,10 +70466,13 @@ You are only authorized to perform testing against the specific target endpoint
|
|
|
70211
70466
|
onStepFinish,
|
|
70212
70467
|
abortSignal,
|
|
70213
70468
|
silent,
|
|
70214
|
-
authConfig
|
|
70469
|
+
authConfig,
|
|
70470
|
+
onFinish: ({ response }) => {
|
|
70471
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
70472
|
+
}
|
|
70215
70473
|
});
|
|
70216
70474
|
streamResult.session = session;
|
|
70217
|
-
return { streamResult, session };
|
|
70475
|
+
return { streamResult, session, subagentId };
|
|
70218
70476
|
}
|
|
70219
70477
|
|
|
70220
70478
|
// src/tui/components/agent-display.tsx
|
|
@@ -71459,13 +71717,13 @@ var Qt = b.parse;
|
|
|
71459
71717
|
var Ut = x.lex;
|
|
71460
71718
|
|
|
71461
71719
|
// src/tui/components/agent-display.tsx
|
|
71462
|
-
import
|
|
71720
|
+
import fs4 from "fs";
|
|
71463
71721
|
var LOG_FILE = "/tmp/apex-debug.log";
|
|
71464
71722
|
function logToFile(message, data) {
|
|
71465
71723
|
const timestamp = new Date().toISOString();
|
|
71466
71724
|
const logLine = `[${timestamp}] ${message} ${data ? JSON.stringify(data, null, 2) : ""}
|
|
71467
71725
|
`;
|
|
71468
|
-
|
|
71726
|
+
fs4.appendFileSync(LOG_FILE, logLine);
|
|
71469
71727
|
}
|
|
71470
71728
|
function getStableKey(item, contextId = "root") {
|
|
71471
71729
|
if ("messages" in item) {
|
|
@@ -71808,149 +72066,6 @@ function ToolArgs({ message }) {
|
|
|
71808
72066
|
|
|
71809
72067
|
// src/tui/components/commands/pentest-agent-display.tsx
|
|
71810
72068
|
import fs5 from "fs";
|
|
71811
|
-
|
|
71812
|
-
// src/core/messages/index.ts
|
|
71813
|
-
import fs4 from "fs";
|
|
71814
|
-
|
|
71815
|
-
// src/core/messages/types.ts
|
|
71816
|
-
var ToolMessageObject = exports_external.object({
|
|
71817
|
-
role: exports_external.literal("tool"),
|
|
71818
|
-
status: exports_external.enum(["pending", "completed"]),
|
|
71819
|
-
toolCallId: exports_external.string(),
|
|
71820
|
-
content: exports_external.string(),
|
|
71821
|
-
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
71822
|
-
toolName: exports_external.string(),
|
|
71823
|
-
createdAt: exports_external.coerce.date()
|
|
71824
|
-
});
|
|
71825
|
-
var SystemModelMessageObject = exports_external.object({
|
|
71826
|
-
role: exports_external.literal("system"),
|
|
71827
|
-
content: exports_external.string(),
|
|
71828
|
-
createdAt: exports_external.coerce.date(),
|
|
71829
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71830
|
-
});
|
|
71831
|
-
var TextPartObject = exports_external.object({
|
|
71832
|
-
type: exports_external.literal("text"),
|
|
71833
|
-
text: exports_external.string(),
|
|
71834
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71835
|
-
});
|
|
71836
|
-
var FilePartObject = exports_external.object({
|
|
71837
|
-
type: exports_external.literal("file"),
|
|
71838
|
-
data: exports_external.union([
|
|
71839
|
-
exports_external.string(),
|
|
71840
|
-
exports_external.instanceof(Uint8Array),
|
|
71841
|
-
exports_external.instanceof(ArrayBuffer),
|
|
71842
|
-
exports_external.instanceof(Buffer),
|
|
71843
|
-
exports_external.url()
|
|
71844
|
-
]),
|
|
71845
|
-
filename: exports_external.string().optional(),
|
|
71846
|
-
mediaType: exports_external.string(),
|
|
71847
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71848
|
-
});
|
|
71849
|
-
var ReasoningPartObject = exports_external.object({
|
|
71850
|
-
type: exports_external.literal("reasoning"),
|
|
71851
|
-
text: exports_external.string(),
|
|
71852
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71853
|
-
});
|
|
71854
|
-
var ToolCallPartObject = exports_external.object({
|
|
71855
|
-
type: exports_external.literal("tool-call"),
|
|
71856
|
-
toolCallId: exports_external.string(),
|
|
71857
|
-
toolName: exports_external.string(),
|
|
71858
|
-
input: exports_external.unknown(),
|
|
71859
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
71860
|
-
providerExecuted: exports_external.boolean().optional()
|
|
71861
|
-
});
|
|
71862
|
-
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
71863
|
-
exports_external.object({
|
|
71864
|
-
type: exports_external.literal("text"),
|
|
71865
|
-
value: exports_external.string()
|
|
71866
|
-
}),
|
|
71867
|
-
exports_external.object({
|
|
71868
|
-
type: exports_external.literal("json"),
|
|
71869
|
-
value: exports_external.any()
|
|
71870
|
-
}),
|
|
71871
|
-
exports_external.object({
|
|
71872
|
-
type: exports_external.literal("error-text"),
|
|
71873
|
-
value: exports_external.string()
|
|
71874
|
-
}),
|
|
71875
|
-
exports_external.object({
|
|
71876
|
-
type: exports_external.literal("error-json"),
|
|
71877
|
-
value: exports_external.any()
|
|
71878
|
-
}),
|
|
71879
|
-
exports_external.object({
|
|
71880
|
-
type: exports_external.literal("content"),
|
|
71881
|
-
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
71882
|
-
exports_external.object({
|
|
71883
|
-
type: exports_external.literal("text"),
|
|
71884
|
-
text: exports_external.string()
|
|
71885
|
-
}),
|
|
71886
|
-
exports_external.object({
|
|
71887
|
-
type: exports_external.literal("media"),
|
|
71888
|
-
data: exports_external.string(),
|
|
71889
|
-
mediaType: exports_external.string()
|
|
71890
|
-
})
|
|
71891
|
-
]))
|
|
71892
|
-
})
|
|
71893
|
-
]);
|
|
71894
|
-
var ToolResultPartObject = exports_external.object({
|
|
71895
|
-
type: exports_external.literal("tool-result"),
|
|
71896
|
-
toolCallId: exports_external.string(),
|
|
71897
|
-
toolName: exports_external.string(),
|
|
71898
|
-
output: ToolResultOutputObject,
|
|
71899
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71900
|
-
});
|
|
71901
|
-
var AssistantModelMessageObject = exports_external.object({
|
|
71902
|
-
role: exports_external.literal("assistant"),
|
|
71903
|
-
content: exports_external.union([
|
|
71904
|
-
exports_external.string(),
|
|
71905
|
-
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
71906
|
-
TextPartObject,
|
|
71907
|
-
FilePartObject,
|
|
71908
|
-
ReasoningPartObject,
|
|
71909
|
-
ToolCallPartObject,
|
|
71910
|
-
ToolResultPartObject
|
|
71911
|
-
]))
|
|
71912
|
-
]),
|
|
71913
|
-
createdAt: exports_external.coerce.date(),
|
|
71914
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71915
|
-
});
|
|
71916
|
-
var UserModelMessageObject = exports_external.object({
|
|
71917
|
-
role: exports_external.literal("user"),
|
|
71918
|
-
content: exports_external.union([
|
|
71919
|
-
exports_external.string(),
|
|
71920
|
-
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
71921
|
-
]),
|
|
71922
|
-
createdAt: exports_external.coerce.date(),
|
|
71923
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71924
|
-
});
|
|
71925
|
-
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
71926
|
-
SystemModelMessageObject,
|
|
71927
|
-
UserModelMessageObject,
|
|
71928
|
-
AssistantModelMessageObject,
|
|
71929
|
-
ToolMessageObject
|
|
71930
|
-
]);
|
|
71931
|
-
|
|
71932
|
-
// src/core/messages/index.ts
|
|
71933
|
-
function getMessages(session) {
|
|
71934
|
-
const messages = fs4.readFileSync(session.rootPath + "/messages.json", "utf8");
|
|
71935
|
-
return ModelMessageObject.array().parse(JSON.parse(messages));
|
|
71936
|
-
}
|
|
71937
|
-
function saveMessages(session, messages) {
|
|
71938
|
-
fs4.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
71939
|
-
}
|
|
71940
|
-
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
71941
|
-
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
71942
|
-
if (!fs4.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
71943
|
-
fs4.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
71944
|
-
recursive: true
|
|
71945
|
-
});
|
|
71946
|
-
}
|
|
71947
|
-
if (!fs4.existsSync(subagentDir)) {
|
|
71948
|
-
fs4.mkdirSync(subagentDir, { recursive: true });
|
|
71949
|
-
}
|
|
71950
|
-
fs4.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
71951
|
-
}
|
|
71952
|
-
|
|
71953
|
-
// src/tui/components/commands/pentest-agent-display.tsx
|
|
71954
72069
|
function PentestAgentDisplay() {
|
|
71955
72070
|
const [focusedIndex, setFocusedIndex] = import_react20.useState(0);
|
|
71956
72071
|
const [target, setTarget] = import_react20.useState("");
|
|
@@ -73152,7 +73267,14 @@ Remember: You are the orchestrator, not a testing agent. Your value is in strate
|
|
|
73152
73267
|
|
|
73153
73268
|
// src/core/agent/thoroughPentestAgent/agent.ts
|
|
73154
73269
|
import { join as join6 } from "path";
|
|
73155
|
-
import {
|
|
73270
|
+
import {
|
|
73271
|
+
readFileSync as readFileSync5,
|
|
73272
|
+
existsSync as existsSync11,
|
|
73273
|
+
writeFileSync as writeFileSync6,
|
|
73274
|
+
copyFileSync,
|
|
73275
|
+
readdirSync as readdirSync4,
|
|
73276
|
+
mkdirSync as mkdirSync6
|
|
73277
|
+
} from "fs";
|
|
73156
73278
|
|
|
73157
73279
|
// src/core/agent/attackSurfaceAgent/prompts.ts
|
|
73158
73280
|
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.
|
|
@@ -74454,6 +74576,7 @@ import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as
|
|
|
74454
74576
|
function runAgent2(opts) {
|
|
74455
74577
|
const { target, model, onStepFinish, abortSignal } = opts;
|
|
74456
74578
|
const session = opts.session || createSession(target);
|
|
74579
|
+
const subagentId = `attack-surface-${nanoid3(6)}`;
|
|
74457
74580
|
console.log(`Created attack surface session: ${session.id}`);
|
|
74458
74581
|
console.log(`Session path: ${session.rootPath}`);
|
|
74459
74582
|
const assetsPath = join5(session.rootPath, "assets");
|
|
@@ -74600,10 +74723,13 @@ You MUST provide the details final report using create_attack_surface_report too
|
|
|
74600
74723
|
stopWhen: stepCountIs(1e4),
|
|
74601
74724
|
toolChoice: "auto",
|
|
74602
74725
|
onStepFinish,
|
|
74603
|
-
abortSignal
|
|
74726
|
+
abortSignal,
|
|
74727
|
+
onFinish: ({ response }) => {
|
|
74728
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
74729
|
+
}
|
|
74604
74730
|
});
|
|
74605
74731
|
streamResult.session = session;
|
|
74606
|
-
return { streamResult, session };
|
|
74732
|
+
return { streamResult, session, subagentId };
|
|
74607
74733
|
}
|
|
74608
74734
|
|
|
74609
74735
|
// node_modules/yocto-queue/index.js
|
|
@@ -74788,7 +74914,10 @@ Begin by using the get_attack_surface tool to map the complete attack surface of
|
|
|
74788
74914
|
stopWhen: stepCountIs(1e4),
|
|
74789
74915
|
toolChoice: "auto",
|
|
74790
74916
|
onStepFinish,
|
|
74791
|
-
abortSignal
|
|
74917
|
+
abortSignal,
|
|
74918
|
+
onFinish: ({ response }) => {
|
|
74919
|
+
saveMessages(session, mapMessages(response.messages));
|
|
74920
|
+
}
|
|
74792
74921
|
});
|
|
74793
74922
|
streamResult.session = session;
|
|
74794
74923
|
return { streamResult, session };
|
|
@@ -74820,14 +74949,13 @@ Use this as the FIRST step in your thorough penetration test.`,
|
|
|
74820
74949
|
execute: async ({ target, objective }) => {
|
|
74821
74950
|
try {
|
|
74822
74951
|
logger?.log(`[Orchestrator] Spawning attack surface agent for: ${target}`);
|
|
74823
|
-
const { streamResult: result } = runAgent2({
|
|
74952
|
+
const { streamResult: result, subagentId } = runAgent2({
|
|
74824
74953
|
session,
|
|
74825
74954
|
target,
|
|
74826
74955
|
objective,
|
|
74827
74956
|
model,
|
|
74828
74957
|
abortSignal
|
|
74829
74958
|
});
|
|
74830
|
-
const subagentId = `attack-surface-${result.session.id}`;
|
|
74831
74959
|
const allMessages = [];
|
|
74832
74960
|
let currentAssistantText = "";
|
|
74833
74961
|
if (onSubagentSpawn) {
|
|
@@ -74852,8 +74980,8 @@ Objective: ${objective}`,
|
|
|
74852
74980
|
if (onSubagentMessage) {
|
|
74853
74981
|
onSubagentMessage(subagentId, initialMessage);
|
|
74854
74982
|
}
|
|
74855
|
-
|
|
74856
|
-
|
|
74983
|
+
await consumeStream2(result, {
|
|
74984
|
+
onTextDelta: (delta) => {
|
|
74857
74985
|
currentAssistantText += delta.text;
|
|
74858
74986
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
74859
74987
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -74876,7 +75004,8 @@ Objective: ${objective}`,
|
|
|
74876
75004
|
onSubagentMessage(subagentId, newMessage);
|
|
74877
75005
|
}
|
|
74878
75006
|
}
|
|
74879
|
-
}
|
|
75007
|
+
},
|
|
75008
|
+
onToolCall: (delta) => {
|
|
74880
75009
|
if (currentAssistantText) {
|
|
74881
75010
|
currentAssistantText = "";
|
|
74882
75011
|
}
|
|
@@ -74893,7 +75022,8 @@ Objective: ${objective}`,
|
|
|
74893
75022
|
if (onSubagentMessage) {
|
|
74894
75023
|
onSubagentMessage(subagentId, toolMessage);
|
|
74895
75024
|
}
|
|
74896
|
-
}
|
|
75025
|
+
},
|
|
75026
|
+
onToolResult: (delta) => {
|
|
74897
75027
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
74898
75028
|
if (existingToolMessageIndex !== -1) {
|
|
74899
75029
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -74908,11 +75038,10 @@ Objective: ${objective}`,
|
|
|
74908
75038
|
}
|
|
74909
75039
|
}
|
|
74910
75040
|
}
|
|
74911
|
-
}
|
|
75041
|
+
});
|
|
74912
75042
|
if (onSubagentComplete) {
|
|
74913
75043
|
onSubagentComplete(subagentId, true);
|
|
74914
75044
|
}
|
|
74915
|
-
saveSubagentMessages(session, subagentId, allMessages);
|
|
74916
75045
|
const subagentMetadata = {
|
|
74917
75046
|
type: "attack-surface",
|
|
74918
75047
|
subagentId,
|
|
@@ -74995,14 +75124,13 @@ You can spawn multiple agents in parallel - they will run concurrently.`,
|
|
|
74995
75124
|
const limit = pLimit(5);
|
|
74996
75125
|
const promises = targets.map((targetInfo, index) => limit(async () => {
|
|
74997
75126
|
try {
|
|
74998
|
-
const { streamResult: result } = runAgent({
|
|
75127
|
+
const { streamResult: result, subagentId } = runAgent({
|
|
74999
75128
|
session,
|
|
75000
75129
|
target: targetInfo.target,
|
|
75001
75130
|
objective: targetInfo.objective,
|
|
75002
75131
|
model,
|
|
75003
75132
|
abortSignal
|
|
75004
75133
|
});
|
|
75005
|
-
const subagentId = `pentest-${index + 1}-${result.session.id}`;
|
|
75006
75134
|
const allMessages = [];
|
|
75007
75135
|
let currentAssistantText = "";
|
|
75008
75136
|
const startTime = new Date().toISOString();
|
|
@@ -75028,8 +75156,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75028
75156
|
if (onSubagentMessage) {
|
|
75029
75157
|
onSubagentMessage(subagentId, initialMessage);
|
|
75030
75158
|
}
|
|
75031
|
-
|
|
75032
|
-
|
|
75159
|
+
await consumeStream2(result, {
|
|
75160
|
+
onTextDelta: (delta) => {
|
|
75033
75161
|
currentAssistantText += delta.text;
|
|
75034
75162
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
75035
75163
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -75052,7 +75180,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75052
75180
|
onSubagentMessage(subagentId, newMessage);
|
|
75053
75181
|
}
|
|
75054
75182
|
}
|
|
75055
|
-
}
|
|
75183
|
+
},
|
|
75184
|
+
onToolCall: (delta) => {
|
|
75056
75185
|
if (currentAssistantText) {
|
|
75057
75186
|
currentAssistantText = "";
|
|
75058
75187
|
}
|
|
@@ -75069,7 +75198,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75069
75198
|
if (onSubagentMessage) {
|
|
75070
75199
|
onSubagentMessage(subagentId, toolMessage);
|
|
75071
75200
|
}
|
|
75072
|
-
}
|
|
75201
|
+
},
|
|
75202
|
+
onToolResult: (delta) => {
|
|
75073
75203
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
75074
75204
|
if (existingToolMessageIndex !== -1) {
|
|
75075
75205
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -75084,12 +75214,11 @@ Objective: ${targetInfo.objective}`,
|
|
|
75084
75214
|
}
|
|
75085
75215
|
}
|
|
75086
75216
|
}
|
|
75087
|
-
}
|
|
75088
|
-
const endTime = new Date().toISOString();
|
|
75217
|
+
});
|
|
75089
75218
|
if (onSubagentComplete) {
|
|
75090
75219
|
onSubagentComplete(subagentId, true);
|
|
75091
75220
|
}
|
|
75092
|
-
|
|
75221
|
+
const endTime = new Date().toISOString();
|
|
75093
75222
|
const subagentMetadata = {
|
|
75094
75223
|
type: "pentest",
|
|
75095
75224
|
subagentId,
|
|
@@ -75474,8 +75603,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75474
75603
|
};
|
|
75475
75604
|
const allMessages = [userMessage];
|
|
75476
75605
|
let currentAssistantText = "";
|
|
75477
|
-
|
|
75478
|
-
|
|
75606
|
+
await consumeStream2(result, {
|
|
75607
|
+
onTextDelta: (delta) => {
|
|
75479
75608
|
currentAssistantText += delta.text;
|
|
75480
75609
|
addTokens(1);
|
|
75481
75610
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
@@ -75489,7 +75618,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75489
75618
|
});
|
|
75490
75619
|
}
|
|
75491
75620
|
setMessages([...allMessages]);
|
|
75492
|
-
}
|
|
75621
|
+
},
|
|
75622
|
+
onToolCall: (delta) => {
|
|
75493
75623
|
if (currentAssistantText) {
|
|
75494
75624
|
currentAssistantText = "";
|
|
75495
75625
|
}
|
|
@@ -75505,7 +75635,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75505
75635
|
createdAt: new Date
|
|
75506
75636
|
});
|
|
75507
75637
|
setMessages([...allMessages]);
|
|
75508
|
-
}
|
|
75638
|
+
},
|
|
75639
|
+
onToolResult: (delta) => {
|
|
75509
75640
|
setThinking(true);
|
|
75510
75641
|
const toolName = delta.toolName;
|
|
75511
75642
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
@@ -75519,8 +75650,7 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75519
75650
|
}
|
|
75520
75651
|
setMessages([...allMessages]);
|
|
75521
75652
|
}
|
|
75522
|
-
|
|
75523
|
-
}
|
|
75653
|
+
});
|
|
75524
75654
|
if (fs6.existsSync(result.session.rootPath + "/comprehensive-pentest-report.md")) {
|
|
75525
75655
|
setIsCompleted(true);
|
|
75526
75656
|
}
|