@pensar/apex 0.0.28 → 0.0.29

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.
@@ -62994,7 +62994,7 @@ var require_dist_cjs77 = __commonJS((exports) => {
62994
62994
 
62995
62995
  // node_modules/@smithy/util-waiter/dist-cjs/index.js
62996
62996
  var require_dist_cjs78 = __commonJS((exports) => {
62997
- var sleep = (seconds) => {
62997
+ var sleep2 = (seconds) => {
62998
62998
  return new Promise((resolve3) => setTimeout(resolve3, seconds * 1000));
62999
62999
  };
63000
63000
  var waiterServiceDefaults = {
@@ -63061,7 +63061,7 @@ var require_dist_cjs78 = __commonJS((exports) => {
63061
63061
  if (Date.now() + delay2 * 1000 > waitUntil) {
63062
63062
  return { state: exports.WaiterState.TIMEOUT, observedResponses };
63063
63063
  }
63064
- await sleep(delay2);
63064
+ await sleep2(delay2);
63065
63065
  const { state: state2, reason: reason2 } = await acceptorChecks(client, input);
63066
63066
  if (reason2) {
63067
63067
  const message = createMessageFromResponse(reason2);
@@ -121014,8 +121014,8 @@ function createAnthropic(options = {}) {
121014
121014
  }
121015
121015
  var anthropic = createAnthropic();
121016
121016
 
121017
- // src/core/ai/models.ts
121018
- var AVAILABLE_MODELS = [
121017
+ // src/core/ai/models/anthropic.ts
121018
+ var ANTHROPIC_MODELS = [
121019
121019
  {
121020
121020
  id: "claude-haiku-4-5",
121021
121021
  name: "Claude Haiku 4.5",
@@ -121099,55 +121099,11 @@ var AVAILABLE_MODELS = [
121099
121099
  name: "Claude 3 Haiku (2024-03-07)",
121100
121100
  provider: "anthropic",
121101
121101
  contextLength: 200000
121102
- },
121103
- {
121104
- id: "gpt-4.5-turbo",
121105
- name: "GPT-4.5 Turbo",
121106
- provider: "openai",
121107
- contextLength: 128000
121108
- },
121109
- {
121110
- id: "gpt-4o",
121111
- name: "GPT-4o",
121112
- provider: "openai",
121113
- contextLength: 128000
121114
- },
121115
- {
121116
- id: "gpt-4o-mini",
121117
- name: "GPT-4o Mini",
121118
- provider: "openai",
121119
- contextLength: 128000
121120
- },
121121
- {
121122
- id: "gpt-4-turbo",
121123
- name: "GPT-4 Turbo",
121124
- provider: "openai",
121125
- contextLength: 128000
121126
- },
121127
- {
121128
- id: "gpt-4",
121129
- name: "GPT-4",
121130
- provider: "openai",
121131
- contextLength: 8192
121132
- },
121133
- {
121134
- id: "gpt-3.5-turbo",
121135
- name: "GPT-3.5 Turbo",
121136
- provider: "openai",
121137
- contextLength: 16385
121138
- },
121139
- {
121140
- id: "o1",
121141
- name: "O1",
121142
- provider: "openai",
121143
- contextLength: 200000
121144
- },
121145
- {
121146
- id: "o1-mini",
121147
- name: "O1 Mini",
121148
- provider: "openai",
121149
- contextLength: 128000
121150
- },
121102
+ }
121103
+ ];
121104
+
121105
+ // src/core/ai/models/openrouter.ts
121106
+ var OPENROUTER_MODELS = [
121151
121107
  {
121152
121108
  id: "anthropic/claude-haiku-4.5",
121153
121109
  name: "Claude Haiku 4.5 (OpenRouter)",
@@ -121267,28 +121223,62 @@ var AVAILABLE_MODELS = [
121267
121223
  name: "Qwen 3 32B Instruct",
121268
121224
  provider: "openrouter",
121269
121225
  contextLength: 256000
121226
+ }
121227
+ ];
121228
+
121229
+ // src/core/ai/models/bedrock.ts
121230
+ var BEDROCK_MODELS = [
121231
+ {
121232
+ id: "anthropic.claude-3-haiku-20240307-v1:0",
121233
+ name: "Claude 3 Haiku (Bedrock)",
121234
+ provider: "bedrock",
121235
+ contextLength: 200000
121270
121236
  },
121271
121237
  {
121272
- id: "anthropic.claude-3-5-sonnet-20240620-v1:0",
121273
- name: "Claude 3.5 Sonnet (Bedrock)",
121238
+ id: "anthropic.claude-3-5-haiku-20241022-v1:0",
121239
+ name: "Claude 3.5 Haiku (Bedrock)",
121274
121240
  provider: "bedrock",
121275
121241
  contextLength: 200000
121276
121242
  },
121277
121243
  {
121278
- id: "anthropic.claude-3-opus-20240229-v1:0",
121279
- name: "Claude 3 Opus (Bedrock)",
121244
+ id: "anthropic.claude-3-7-sonnet-20250219-v1:0",
121245
+ name: "Claude 3.7 Sonnet (Bedrock)",
121280
121246
  provider: "bedrock",
121281
121247
  contextLength: 200000
121282
121248
  },
121283
121249
  {
121284
- id: "anthropic.claude-3-sonnet-20240229-v1:0",
121285
- name: "Claude 3 Sonnet (Bedrock)",
121250
+ id: "anthropic.claude-haiku-4-5-20251001-v1:0",
121251
+ name: "Claude Haiku 4.5 (Bedrock)",
121286
121252
  provider: "bedrock",
121287
121253
  contextLength: 200000
121288
121254
  },
121289
121255
  {
121290
- id: "anthropic.claude-3-haiku-20240307-v1:0",
121291
- name: "Claude 3 Haiku (Bedrock)",
121256
+ id: "anthropic.claude-opus-4-1-20250805-v1:0",
121257
+ name: "Claude Opus 4.1 (Bedrock)",
121258
+ provider: "bedrock",
121259
+ contextLength: 200000
121260
+ },
121261
+ {
121262
+ id: "anthropic.claude-opus-4-5-20251101-v1:0",
121263
+ name: "Claude Opus 4.5 (Bedrock)",
121264
+ provider: "bedrock",
121265
+ contextLength: 200000
121266
+ },
121267
+ {
121268
+ id: "anthropic.claude-opus-4-20250514-v1:0",
121269
+ name: "Claude Opus 4 (Bedrock)",
121270
+ provider: "bedrock",
121271
+ contextLength: 200000
121272
+ },
121273
+ {
121274
+ id: "anthropic.claude-sonnet-4-5-20250929-v1:0",
121275
+ name: "Claude Sonnet 4.5 (Bedrock)",
121276
+ provider: "bedrock",
121277
+ contextLength: 200000
121278
+ },
121279
+ {
121280
+ id: "anthropic.claude-sonnet-4-20250514-v1:0",
121281
+ name: "Claude Sonnet 4 (Bedrock)",
121292
121282
  provider: "bedrock",
121293
121283
  contextLength: 200000
121294
121284
  },
@@ -121329,6 +121319,66 @@ var AVAILABLE_MODELS = [
121329
121319
  contextLength: 128000
121330
121320
  }
121331
121321
  ];
121322
+
121323
+ // src/core/ai/models/openai.ts
121324
+ var OPENAI_MODELS = [
121325
+ {
121326
+ id: "gpt-4.5-turbo",
121327
+ name: "GPT-4.5 Turbo",
121328
+ provider: "openai",
121329
+ contextLength: 128000
121330
+ },
121331
+ {
121332
+ id: "gpt-4o",
121333
+ name: "GPT-4o",
121334
+ provider: "openai",
121335
+ contextLength: 128000
121336
+ },
121337
+ {
121338
+ id: "gpt-4o-mini",
121339
+ name: "GPT-4o Mini",
121340
+ provider: "openai",
121341
+ contextLength: 128000
121342
+ },
121343
+ {
121344
+ id: "gpt-4-turbo",
121345
+ name: "GPT-4 Turbo",
121346
+ provider: "openai",
121347
+ contextLength: 128000
121348
+ },
121349
+ {
121350
+ id: "gpt-4",
121351
+ name: "GPT-4",
121352
+ provider: "openai",
121353
+ contextLength: 8192
121354
+ },
121355
+ {
121356
+ id: "gpt-3.5-turbo",
121357
+ name: "GPT-3.5 Turbo",
121358
+ provider: "openai",
121359
+ contextLength: 16385
121360
+ },
121361
+ {
121362
+ id: "o1",
121363
+ name: "O1",
121364
+ provider: "openai",
121365
+ contextLength: 200000
121366
+ },
121367
+ {
121368
+ id: "o1-mini",
121369
+ name: "O1 Mini",
121370
+ provider: "openai",
121371
+ contextLength: 128000
121372
+ }
121373
+ ];
121374
+
121375
+ // src/core/ai/models/index.ts
121376
+ var AVAILABLE_MODELS = [
121377
+ ...ANTHROPIC_MODELS,
121378
+ ...OPENROUTER_MODELS,
121379
+ ...BEDROCK_MODELS,
121380
+ ...OPENAI_MODELS
121381
+ ];
121332
121382
  function getModelInfo(model) {
121333
121383
  return AVAILABLE_MODELS.find((m) => m.id === model) ?? {
121334
121384
  id: model,
@@ -121345,7 +121395,7 @@ function getProviderModel(model, authConfig) {
121345
121395
  const openRouterAPIKey = authConfig?.openRouterAPIKey || process.env.OPENROUTER_API_KEY;
121346
121396
  const bedrockAccessKeyId = authConfig?.bedrock?.accessKeyId || process.env.AWS_ACCESS_KEY_ID;
121347
121397
  const bedrockSecretAccessKey = authConfig?.bedrock?.secretAccessKey || process.env.AWS_SECRET_ACCESS_KEY;
121348
- const bedrockRegion = authConfig?.bedrock?.region || process.env.AWS_REGION || "us-east-1";
121398
+ const bedrockRegion = authConfig?.bedrock?.region || process.env.AWS_REGION;
121349
121399
  const localBaseURL = authConfig?.local?.baseURL || process.env.LOCAL_MODEL_URL || "http://127.0.0.1:1234/v1";
121350
121400
  let providerModel;
121351
121401
  switch (provider) {
@@ -121929,6 +121979,66 @@ import {
121929
121979
  } from "fs";
121930
121980
  import { join } from "path";
121931
121981
  import { homedir } from "os";
121982
+
121983
+ // src/core/services/rateLimiter/index.ts
121984
+ function sleep(ms) {
121985
+ return new Promise((resolve2) => setTimeout(resolve2, ms));
121986
+ }
121987
+
121988
+ class RateLimiter {
121989
+ tokens;
121990
+ lastRefillTime;
121991
+ rps;
121992
+ bucketSize;
121993
+ msPerToken;
121994
+ queue;
121995
+ constructor(config2) {
121996
+ this.rps = config2?.requestsPerSecond;
121997
+ this.bucketSize = this.rps ? 1 : 0;
121998
+ this.tokens = this.bucketSize;
121999
+ this.lastRefillTime = performance.now();
122000
+ this.msPerToken = this.rps ? 1000 / this.rps : undefined;
122001
+ this.queue = Promise.resolve();
122002
+ }
122003
+ async acquireSlot() {
122004
+ if (!this.rps || !this.msPerToken)
122005
+ return;
122006
+ const previousPromise = this.queue;
122007
+ let resolveCurrentRequest;
122008
+ this.queue = new Promise((resolve2) => {
122009
+ resolveCurrentRequest = resolve2;
122010
+ });
122011
+ await previousPromise;
122012
+ try {
122013
+ const now2 = performance.now();
122014
+ this.refill(now2);
122015
+ if (this.tokens < 1) {
122016
+ const waitTime = (1 - this.tokens) * this.msPerToken;
122017
+ await sleep(waitTime);
122018
+ const nowAfterSleep = performance.now();
122019
+ this.refill(nowAfterSleep);
122020
+ }
122021
+ this.tokens -= 1;
122022
+ } finally {
122023
+ resolveCurrentRequest();
122024
+ }
122025
+ }
122026
+ refill(now2) {
122027
+ if (this.tokens >= this.bucketSize) {
122028
+ this.lastRefillTime = now2;
122029
+ return;
122030
+ }
122031
+ const elapsed = now2 - this.lastRefillTime;
122032
+ const tokensToAdd = elapsed / this.msPerToken;
122033
+ this.tokens = Math.min(this.bucketSize, this.tokens + tokensToAdd);
122034
+ this.lastRefillTime = now2;
122035
+ }
122036
+ isEnabled() {
122037
+ return this.rps !== undefined;
122038
+ }
122039
+ }
122040
+
122041
+ // src/core/agent/sessions/index.ts
121932
122042
  var DEFAULT_OFFENSIVE_HEADERS = {
121933
122043
  "User-Agent": "pensar-apex"
121934
122044
  };
@@ -121963,6 +122073,9 @@ function createSession(target, objective, prefix, config2) {
121963
122073
  startTime: new Date().toISOString(),
121964
122074
  config: config2
121965
122075
  };
122076
+ if (config2?.rateLimiter) {
122077
+ session._rateLimiter = new RateLimiter(config2.rateLimiter);
122078
+ }
121966
122079
  const metadataPath = join(rootPath, "session.json");
121967
122080
  writeFileSync(metadataPath, JSON.stringify(session, null, 2));
121968
122081
  const readmePath = join(rootPath, "README.md");
@@ -128691,6 +128804,7 @@ function wrapCommandWithHeaders(command, headers) {
128691
128804
  }
128692
128805
  function createPentestTools(session, model, toolOverride) {
128693
128806
  const offensiveHeaders = getOffensiveHeaders(session);
128807
+ const rateLimiter = session._rateLimiter;
128694
128808
  const executeCommand = tool({
128695
128809
  name: "execute_command",
128696
128810
  description: `Execute a shell command for penetration testing activities.
@@ -128735,6 +128849,9 @@ IMPORTANT: Always analyze results and adjust your approach based on findings.`,
128735
128849
  inputSchema: ExecuteCommandInput,
128736
128850
  execute: async ({ command, timeout = 30000, toolCallDescription }) => {
128737
128851
  try {
128852
+ if (rateLimiter) {
128853
+ await rateLimiter.acquireSlot();
128854
+ }
128738
128855
  if (toolOverride?.execute_command) {
128739
128856
  return toolOverride.execute_command({
128740
128857
  command,
@@ -128791,6 +128908,9 @@ COMMON TESTING PATTERNS:
128791
128908
  inputSchema: HttpRequestInput,
128792
128909
  execute: async ({ url: url2, method, headers, body, followRedirects, timeout, toolCallDescription }) => {
128793
128910
  try {
128911
+ if (rateLimiter) {
128912
+ await rateLimiter.acquireSlot();
128913
+ }
128794
128914
  if (toolOverride?.http_request) {
128795
128915
  return toolOverride.http_request({
128796
128916
  url: url2,
@@ -129028,6 +129148,125 @@ You MUST provide the details final report using create_attack_surface_report too
129028
129148
 
129029
129149
  // src/core/messages/index.ts
129030
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
129031
129270
  function saveSubagentMessages(orchestratorSession, subagentId, messages) {
129032
129271
  const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
129033
129272
  if (!fs.existsSync(`${orchestratorSession.rootPath}/subagents`)) {