@pensar/apex 2.1.3-canary.fde9cfe4 → 2.2.0-canary.1ae41959

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.
Files changed (55) hide show
  1. package/build/agent-54gr8249.js +19 -0
  2. package/build/{agent-jnxzjsc4.js → agent-mbtfcpky.js} +7 -7
  3. package/build/{agent-zsx42kpx.js → agent-me43tz5h.js} +9 -9
  4. package/build/{apps-mz3tb1z1.js → apps-dp34j8n5.js} +16 -16
  5. package/build/{auth-9xfhgqx5.js → auth-j5azkmn5.js} +16 -16
  6. package/build/authentication-6vtagz1j.js +19 -0
  7. package/build/blackboxAgent-2aa6hx1y.js +19 -0
  8. package/build/{blackboxPentest-93te1j1w.js → blackboxPentest-hs8dj0a2.js} +14 -14
  9. package/build/{cli-102g5mnd.js → cli-0127pcvj.js} +2 -2
  10. package/build/{cli-jk8wkkhn.js → cli-221r604x.js} +1 -1
  11. package/build/{cli-hhh6f02f.js → cli-3b4thz7t.js} +59 -8
  12. package/build/{cli-3r0m9ee1.js → cli-4z24gndv.js} +54 -9
  13. package/build/{cli-7xrww2qg.js → cli-6sd5m21c.js} +55 -26
  14. package/build/{cli-bhj09mhe.js → cli-8178m9nm.js} +1 -1
  15. package/build/{cli-ycz3005y.js → cli-98mvjf5z.js} +3 -3
  16. package/build/{cli-s5c6p1ys.js → cli-b8sa1p9c.js} +1061 -122
  17. package/build/{cli-3spypd58.js → cli-k0phtdvs.js} +11 -5
  18. package/build/{cli-7dez82r2.js → cli-mp5rfvv0.js} +1 -1
  19. package/build/{cli-9gr8h1nv.js → cli-nqkhs46w.js} +5 -3
  20. package/build/{cli-pd7vxk53.js → cli-raphm7yk.js} +4 -2
  21. package/build/{cli-5wgfrsqt.js → cli-rzdd876e.js} +2 -2
  22. package/build/{cli-ed3v8kz3.js → cli-tcm18x3m.js} +1 -1
  23. package/build/{cli-gg8y5mn7.js → cli-vstb489r.js} +1 -1
  24. package/build/{cli-de5j66pm.js → cli-xvgsycgz.js} +4465 -73
  25. package/build/{cli-f4659etd.js → cli-yh8j4ryf.js} +2 -2
  26. package/build/cli.js +34 -34
  27. package/build/{config-3j16f78q.js → config-4bqv9s5g.js} +3 -3
  28. package/build/{doctor-nb18tg1f.js → doctor-nh8r74tn.js} +6 -6
  29. package/build/{fastStrike-sqmxckhc.js → fastStrike-f0vygej3.js} +9 -9
  30. package/build/{fixes-5ekkwhm6.js → fixes-c2gs2qw2.js} +16 -16
  31. package/build/{index-t6981tw0.js → index-1gnn6wsw.js} +3 -3
  32. package/build/{index-kh7ccsqg.js → index-ek7qjwfp.js} +8 -8
  33. package/build/{index-f980n8hh.js → index-qk4e8612.js} +9 -9
  34. package/build/{index-rnanzgpa.js → index-sa49fawb.js} +4 -4
  35. package/build/{index-6qy8cnfb.js → index-sancv4mm.js} +1084 -901
  36. package/build/{index-f58bzqtb.js → index-w1hwf046.js} +2 -2
  37. package/build/{index-bdxw5hk7.js → index-yt1gxptr.js} +22 -8
  38. package/build/{issues-1t2zwzkz.js → issues-jcbq66jw.js} +27 -16
  39. package/build/{logs-h0p1nqk3.js → logs-7t0ctq36.js} +16 -16
  40. package/build/{offesecAgent-43q0r18t.js → offesecAgent-mtn4d5fs.js} +8 -8
  41. package/build/pentest-wxv9dm62.js +29 -0
  42. package/build/{pentests-mw1w7w4w.js → pentests-wspa4bs1.js} +16 -16
  43. package/build/targetedPentest-mn6nh23q.js +56 -0
  44. package/build/{targets-e7v614mj.js → targets-kapv1ana.js} +16 -16
  45. package/build/threatModel-j8q9ybn7.js +27 -0
  46. package/build/{uninstall-htshkqsk.js → uninstall-7emzqpsj.js} +1 -1
  47. package/build/{upload-sg2sfms8.js → upload-fgp8jbd8.js} +6 -6
  48. package/build/{utils-2drgcp5f.js → utils-kgmwqjjv.js} +6 -6
  49. package/package.json +2 -2
  50. package/build/agent-nyxs29jb.js +0 -19
  51. package/build/authentication-fjzbzdhk.js +0 -19
  52. package/build/blackboxAgent-42h9bp3q.js +0 -19
  53. package/build/pentest-g6a7dm23.js +0 -29
  54. package/build/targetedPentest-31m8rbbm.js +0 -44
  55. package/build/threatModel-v4xahzfh.js +0 -27
@@ -0,0 +1,19 @@
1
+ import {
2
+ CodeAgent
3
+ } from "./cli-rzdd876e.js";
4
+ import"./cli-9fsre5pt.js";
5
+ import"./cli-tcm18x3m.js";
6
+ import"./cli-xvgsycgz.js";
7
+ import"./cli-221r604x.js";
8
+ import"./cli-c8131c4q.js";
9
+ import"./cli-4z24gndv.js";
10
+ import"./cli-8178m9nm.js";
11
+ import"./cli-3k1x5rn3.js";
12
+ import"./cli-gpnb45ck.js";
13
+ import"./cli-mp5rfvv0.js";
14
+ import"./cli-raphm7yk.js";
15
+ import"./cli-yh8j4ryf.js";
16
+ import"./cli-8rxa073f.js";
17
+ export {
18
+ CodeAgent
19
+ };
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  OffensiveSecurityAgent
3
- } from "./cli-de5j66pm.js";
3
+ } from "./cli-xvgsycgz.js";
4
4
  import {
5
5
  detectOSAndEnhancePrompt
6
- } from "./cli-jk8wkkhn.js";
6
+ } from "./cli-221r604x.js";
7
7
  import"./cli-c8131c4q.js";
8
8
  import {
9
9
  init_dist,
10
10
  stepCountIs
11
- } from "./cli-3r0m9ee1.js";
12
- import"./cli-bhj09mhe.js";
11
+ } from "./cli-4z24gndv.js";
12
+ import"./cli-8178m9nm.js";
13
13
  import {
14
14
  exports_external,
15
15
  init_zod
16
16
  } from "./cli-3k1x5rn3.js";
17
17
  import"./cli-gpnb45ck.js";
18
- import"./cli-7dez82r2.js";
19
- import"./cli-pd7vxk53.js";
20
- import"./cli-f4659etd.js";
18
+ import"./cli-mp5rfvv0.js";
19
+ import"./cli-raphm7yk.js";
20
+ import"./cli-yh8j4ryf.js";
21
21
  import"./cli-8rxa073f.js";
22
22
 
23
23
  // src/core/agents/specialized/findingJudge/agent.ts
@@ -4,19 +4,19 @@ import {
4
4
  buildPentestActiveTools,
5
5
  buildPentestPrompt,
6
6
  buildPentestSystemPrompt
7
- } from "./cli-hhh6f02f.js";
7
+ } from "./cli-3b4thz7t.js";
8
8
  import"./cli-9fsre5pt.js";
9
- import"./cli-ed3v8kz3.js";
10
- import"./cli-de5j66pm.js";
11
- import"./cli-jk8wkkhn.js";
9
+ import"./cli-tcm18x3m.js";
10
+ import"./cli-xvgsycgz.js";
11
+ import"./cli-221r604x.js";
12
12
  import"./cli-c8131c4q.js";
13
- import"./cli-3r0m9ee1.js";
14
- import"./cli-bhj09mhe.js";
13
+ import"./cli-4z24gndv.js";
14
+ import"./cli-8178m9nm.js";
15
15
  import"./cli-3k1x5rn3.js";
16
16
  import"./cli-gpnb45ck.js";
17
- import"./cli-7dez82r2.js";
18
- import"./cli-pd7vxk53.js";
19
- import"./cli-f4659etd.js";
17
+ import"./cli-mp5rfvv0.js";
18
+ import"./cli-raphm7yk.js";
19
+ import"./cli-yh8j4ryf.js";
20
20
  import"./cli-8rxa073f.js";
21
21
  export {
22
22
  buildPentestSystemPrompt,
@@ -12,27 +12,27 @@ import {
12
12
  searchEndpoints,
13
13
  updateApp,
14
14
  updateEndpoint
15
- } from "./cli-7xrww2qg.js";
16
- import"./cli-s5c6p1ys.js";
17
- import"./cli-ycz3005y.js";
18
- import"./cli-102g5mnd.js";
19
- import"./cli-hhh6f02f.js";
20
- import"./cli-9gr8h1nv.js";
21
- import"./cli-5wgfrsqt.js";
22
- import"./cli-3spypd58.js";
15
+ } from "./cli-6sd5m21c.js";
16
+ import"./cli-b8sa1p9c.js";
17
+ import"./cli-98mvjf5z.js";
18
+ import"./cli-0127pcvj.js";
19
+ import"./cli-3b4thz7t.js";
20
+ import"./cli-nqkhs46w.js";
21
+ import"./cli-rzdd876e.js";
22
+ import"./cli-k0phtdvs.js";
23
23
  import"./cli-9fsre5pt.js";
24
- import"./cli-ed3v8kz3.js";
25
- import"./cli-de5j66pm.js";
26
- import"./cli-jk8wkkhn.js";
24
+ import"./cli-tcm18x3m.js";
25
+ import"./cli-xvgsycgz.js";
26
+ import"./cli-221r604x.js";
27
27
  import"./cli-fw5r7pfj.js";
28
28
  import"./cli-c8131c4q.js";
29
- import"./cli-3r0m9ee1.js";
30
- import"./cli-bhj09mhe.js";
29
+ import"./cli-4z24gndv.js";
30
+ import"./cli-8178m9nm.js";
31
31
  import"./cli-3k1x5rn3.js";
32
32
  import"./cli-gpnb45ck.js";
33
- import"./cli-7dez82r2.js";
34
- import"./cli-pd7vxk53.js";
35
- import"./cli-f4659etd.js";
33
+ import"./cli-mp5rfvv0.js";
34
+ import"./cli-raphm7yk.js";
35
+ import"./cli-yh8j4ryf.js";
36
36
  import"./cli-8rxa073f.js";
37
37
 
38
38
  // src/cli/apps.ts
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env bun
2
- import"./cli-7xrww2qg.js";
3
- import"./cli-s5c6p1ys.js";
4
- import"./cli-ycz3005y.js";
5
- import"./cli-102g5mnd.js";
6
- import"./cli-hhh6f02f.js";
7
- import"./cli-9gr8h1nv.js";
8
- import"./cli-5wgfrsqt.js";
9
- import"./cli-3spypd58.js";
2
+ import"./cli-6sd5m21c.js";
3
+ import"./cli-b8sa1p9c.js";
4
+ import"./cli-98mvjf5z.js";
5
+ import"./cli-0127pcvj.js";
6
+ import"./cli-3b4thz7t.js";
7
+ import"./cli-nqkhs46w.js";
8
+ import"./cli-rzdd876e.js";
9
+ import"./cli-k0phtdvs.js";
10
10
  import"./cli-9fsre5pt.js";
11
- import"./cli-ed3v8kz3.js";
12
- import"./cli-de5j66pm.js";
13
- import"./cli-jk8wkkhn.js";
11
+ import"./cli-tcm18x3m.js";
12
+ import"./cli-xvgsycgz.js";
13
+ import"./cli-221r604x.js";
14
14
  import"./cli-fw5r7pfj.js";
15
15
  import"./cli-c8131c4q.js";
16
- import"./cli-3r0m9ee1.js";
16
+ import"./cli-4z24gndv.js";
17
17
  import {
18
18
  disconnect,
19
19
  fetchWorkspaces,
@@ -26,15 +26,15 @@ import {
26
26
  pollWorkOSToken,
27
27
  selectWorkspace,
28
28
  startDeviceFlow
29
- } from "./cli-bhj09mhe.js";
29
+ } from "./cli-8178m9nm.js";
30
30
  import"./cli-3k1x5rn3.js";
31
31
  import"./cli-gpnb45ck.js";
32
32
  import {
33
33
  config,
34
34
  init_config
35
- } from "./cli-7dez82r2.js";
36
- import"./cli-pd7vxk53.js";
37
- import"./cli-f4659etd.js";
35
+ } from "./cli-mp5rfvv0.js";
36
+ import"./cli-raphm7yk.js";
37
+ import"./cli-yh8j4ryf.js";
38
38
  import {
39
39
  __require
40
40
  } from "./cli-8rxa073f.js";
@@ -0,0 +1,19 @@
1
+ import {
2
+ runAuthenticationAgent
3
+ } from "./cli-nqkhs46w.js";
4
+ import"./cli-9fsre5pt.js";
5
+ import"./cli-tcm18x3m.js";
6
+ import"./cli-xvgsycgz.js";
7
+ import"./cli-221r604x.js";
8
+ import"./cli-c8131c4q.js";
9
+ import"./cli-4z24gndv.js";
10
+ import"./cli-8178m9nm.js";
11
+ import"./cli-3k1x5rn3.js";
12
+ import"./cli-gpnb45ck.js";
13
+ import"./cli-mp5rfvv0.js";
14
+ import"./cli-raphm7yk.js";
15
+ import"./cli-yh8j4ryf.js";
16
+ import"./cli-8rxa073f.js";
17
+ export {
18
+ runAuthenticationAgent
19
+ };
@@ -0,0 +1,19 @@
1
+ import {
2
+ BlackboxAttackSurfaceAgent
3
+ } from "./cli-98mvjf5z.js";
4
+ import"./cli-9fsre5pt.js";
5
+ import"./cli-tcm18x3m.js";
6
+ import"./cli-xvgsycgz.js";
7
+ import"./cli-221r604x.js";
8
+ import"./cli-c8131c4q.js";
9
+ import"./cli-4z24gndv.js";
10
+ import"./cli-8178m9nm.js";
11
+ import"./cli-3k1x5rn3.js";
12
+ import"./cli-gpnb45ck.js";
13
+ import"./cli-mp5rfvv0.js";
14
+ import"./cli-raphm7yk.js";
15
+ import"./cli-yh8j4ryf.js";
16
+ import"./cli-8rxa073f.js";
17
+ export {
18
+ BlackboxAttackSurfaceAgent
19
+ };
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  runPentestWorkflow
3
- } from "./cli-s5c6p1ys.js";
4
- import"./cli-ycz3005y.js";
5
- import"./cli-102g5mnd.js";
6
- import"./cli-hhh6f02f.js";
7
- import"./cli-5wgfrsqt.js";
8
- import"./cli-3spypd58.js";
3
+ } from "./cli-b8sa1p9c.js";
4
+ import"./cli-98mvjf5z.js";
5
+ import"./cli-0127pcvj.js";
6
+ import"./cli-3b4thz7t.js";
7
+ import"./cli-rzdd876e.js";
8
+ import"./cli-k0phtdvs.js";
9
9
  import"./cli-9fsre5pt.js";
10
- import"./cli-ed3v8kz3.js";
11
- import"./cli-de5j66pm.js";
12
- import"./cli-jk8wkkhn.js";
10
+ import"./cli-tcm18x3m.js";
11
+ import"./cli-xvgsycgz.js";
12
+ import"./cli-221r604x.js";
13
13
  import"./cli-fw5r7pfj.js";
14
14
  import"./cli-c8131c4q.js";
15
- import"./cli-3r0m9ee1.js";
16
- import"./cli-bhj09mhe.js";
15
+ import"./cli-4z24gndv.js";
16
+ import"./cli-8178m9nm.js";
17
17
  import"./cli-3k1x5rn3.js";
18
18
  import"./cli-gpnb45ck.js";
19
- import"./cli-7dez82r2.js";
20
- import"./cli-pd7vxk53.js";
21
- import"./cli-f4659etd.js";
19
+ import"./cli-mp5rfvv0.js";
20
+ import"./cli-raphm7yk.js";
21
+ import"./cli-yh8j4ryf.js";
22
22
  import"./cli-8rxa073f.js";
23
23
 
24
24
  // src/core/api/blackboxPentest.ts
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  EvidenceFileEntrySchema
3
- } from "./cli-ed3v8kz3.js";
3
+ } from "./cli-tcm18x3m.js";
4
4
  import {
5
5
  CweEntrySchema,
6
6
  ValidatedCweEntrySchema,
7
7
  hasCanonicalName
8
- } from "./cli-de5j66pm.js";
8
+ } from "./cli-xvgsycgz.js";
9
9
  import {
10
10
  exports_external,
11
11
  init_zod
@@ -3,7 +3,7 @@ import {
3
3
  init_lazyLogger,
4
4
  init_structured,
5
5
  scopedLogger
6
- } from "./cli-3r0m9ee1.js";
6
+ } from "./cli-4z24gndv.js";
7
7
 
8
8
  // src/core/agents/specialized/utils.ts
9
9
  import { execSync } from "node:child_process";
@@ -5,7 +5,7 @@ import {
5
5
  createReportErrorTool,
6
6
  isMemoryEnabled,
7
7
  readPlan
8
- } from "./cli-de5j66pm.js";
8
+ } from "./cli-xvgsycgz.js";
9
9
  import {
10
10
  createLogger,
11
11
  hasToolCall,
@@ -13,7 +13,7 @@ import {
13
13
  init_lazyLogger,
14
14
  init_structured,
15
15
  scopedLogger
16
- } from "./cli-3r0m9ee1.js";
16
+ } from "./cli-4z24gndv.js";
17
17
  import {
18
18
  exports_external,
19
19
  init_zod
@@ -46,6 +46,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
46
46
  const {
47
47
  model,
48
48
  target,
49
+ grpc,
49
50
  objectives,
50
51
  session,
51
52
  authConfig,
@@ -59,6 +60,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
59
60
  messages,
60
61
  context,
61
62
  environmentVariables,
63
+ secretValues,
62
64
  enableThinking,
63
65
  thinkingEffort,
64
66
  openAIReasoningEffort,
@@ -69,10 +71,11 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
69
71
  let reportedError = null;
70
72
  super({
71
73
  system: buildPentestSystemPrompt(session, role),
72
- prompt: buildPentestPrompt(target, objectives, session, findingsRegistry, context, environmentVariables ? Object.keys(environmentVariables) : undefined, subagentId, role, session.credentialManager?.formatForPrompt()),
74
+ prompt: buildPentestPrompt(target, objectives, session, findingsRegistry, context, environmentVariables ? Object.keys(environmentVariables) : undefined, subagentId, role, session.credentialManager?.formatForPrompt(), grpc),
73
75
  model,
74
76
  session,
75
77
  target,
78
+ grpc,
76
79
  authConfig,
77
80
  onStepFinish,
78
81
  onCacheMetrics,
@@ -84,6 +87,7 @@ class TargetedPentestAgent extends OffensiveSecurityAgent {
84
87
  findingsRegistry,
85
88
  messages,
86
89
  environmentVariables,
90
+ secretValues,
87
91
  enableThinking,
88
92
  thinkingEffort,
89
93
  openAIReasoningEffort,
@@ -196,6 +200,13 @@ var SECTION_AUTHENTICATION = `Authentication:
196
200
  1. Prove a broken-authorization / privileged-role / IDOR boundary with a READ, or with a benign, reversible write to a low-impact field (e.g. your own display name). That a privileged call is accepted against an object you should not be able to reach is usually the finding — prefer this over disabling security controls, changing quotas/limits, or mutating another user.
197
201
  2. If a reversible state-changing write is the only convincing proof, capture the current value, make the change, capture evidence (response/screenshot), then immediately restore the original value — and prefer your own account or a throwaway account you registered for this test over a shared or provided account. Do NOT rely on end-of-run cleanup alone; a crash mid-run can strip it before it runs.
198
202
  3. NEVER complete an irreversible or security-weakening mutation against a shared or provided account, against any other user's account reached via broken authorization / IDOR, or against an org- or tenant-wide security setting (e.g. disabling MFA for an entire team): overwriting/resetting, disabling, or otherwise weakening an MFA/TOTP device or any second factor / security control, consuming a single-use reset token, changing the account email, rotating the password, or deleting the account. This hard ban is not limited to the identity you authenticated as — an IDOR or org-level authz flaw does not make it acceptable to actually disable or weaken another user's or the whole team's protections; prove the boundary is crossed without completing the weakening step. Irreversible changes cannot be undone (you never hold the original TOTP secret to restore), and locking an account out, disabling protections for other users, or weakening an org-wide control invalidates or endangers the credentials for every other agent — even a "reversible" toggle like disabling MFA leaves the account or team exposed if a crash strips the restore step. Demonstrate reachability/authorization instead, or perform the destructive step only against a throwaway account you registered for this test.`;
203
+ var SECTION_DESTRUCTIVE_ALLOWED = `Destructive Testing (AUTHORIZED):
204
+ - The client has authorized destructive testing for this engagement. You MAY perform DB deletes/drops/truncates, API write-deletes (HTTP DELETE), and other destructive operations when they are necessary to prove impact.
205
+ - Still prefer the least-invasive proof that convincingly demonstrates the flaw, and follow the blast-radius rungs in the Authentication section — authorization to be destructive is not license to be reckless with shared or provided accounts.`;
206
+ var SECTION_DESTRUCTIVE_BLOCKED = `Destructive Testing (OUT OF SCOPE):
207
+ - The client has NOT authorized destructive testing for this engagement. Destructive operations are BLOCKED at the tool boundary and will return an error, so do not attempt them — they only waste turns.
208
+ - Blocked operations include: destructive SQL (DROP / TRUNCATE / DELETE FROM / ALTER … DROP), destructive NoSQL/cache operations (collection/database drops, deleteMany, FLUSHALL/FLUSHDB), API write-deletes (HTTP DELETE, or writes overriding to DELETE / targeting a delete/destroy/purge route), and catastrophic host operations (rm -rf of a root/home, mkfs, dd to a device, fork bombs, power-state changes).
209
+ - Prove destructive-class flaws WITHOUT completing the destructive step: demonstrate that the authorization boundary is crossed (e.g. the DELETE endpoint accepts your request / returns a pre-flight that would delete) with a read or a benign, reversible action, and describe the impact rather than actually deleting or dropping data.`;
199
210
  var SECTION_CREDENTIAL_DISCOVERY = `Credential & Secret Discovery:
200
211
  - When you find exposed configuration in client-side code (JS bundles, HTML source, config files), distinguish between:
201
212
  - SENSITIVE SECRETS (API keys granting backend access, database credentials, JWT signing keys, private keys, service account tokens) — document as a HIGH/CRITICAL finding
@@ -433,16 +444,25 @@ ${SECTION_SECURITY_HEADERS_CORS}
433
444
  ${SECTION_FINDING_QUALITY}
434
445
 
435
446
  ${SECTION_STATE_CHECKPOINTING}`;
447
+ function destructiveSection(allow) {
448
+ return allow ? SECTION_DESTRUCTIVE_ALLOWED : SECTION_DESTRUCTIVE_BLOCKED;
449
+ }
436
450
  function buildPentestSystemPrompt(session, role = "orchestrator") {
451
+ const destructive = destructiveSection(session.config?.allowDestructiveActions);
437
452
  if (role === "orchestrator") {
438
- return PENTEST_SYSTEM_PROMPT_ORCHESTRATOR;
453
+ return `${PENTEST_SYSTEM_PROMPT_ORCHESTRATOR}
454
+
455
+ ${destructive}`;
439
456
  }
440
457
  const taskDriven = session.config?.taskDriven ?? false;
441
458
  const exfilMode = session.config?.exfilMode ?? false;
442
459
  const base = taskDriven ? exfilMode ? PENTEST_SYSTEM_PROMPT_TASK_DRIVEN_EXFIL : PENTEST_SYSTEM_PROMPT_TASK_DRIVEN : exfilMode ? PENTEST_SYSTEM_PROMPT_EXFIL : PENTEST_SYSTEM_PROMPT_BASE;
443
- return session.config?.promptInjectionLibrarySource ? `${base}
460
+ const withDestructive = `${base}
444
461
 
445
- ${SECTION_PROMPT_INJECTION}` : base;
462
+ ${destructive}`;
463
+ return session.config?.promptInjectionLibrarySource ? `${withDestructive}
464
+
465
+ ${SECTION_PROMPT_INJECTION}` : withDestructive;
446
466
  }
447
467
  var SECTION_ORCHESTRATOR_DELEGATION = `Sub-Agent Delegation Rules:
448
468
  - You DO NOT call document_vulnerability directly. Findings are documented by the workers you spawn.
@@ -489,7 +509,7 @@ ${SECTION_MATERIALITY_GUIDANCE}
489
509
  ${SECTION_BROWSER_INTERACTION}
490
510
 
491
511
  ${SECTION_STATE_CHECKPOINTING}`;
492
- function buildPentestPrompt(target, objectives, session, findingsRegistry, context, envVarNames, subagentId, role = "orchestrator", credentialContext) {
512
+ function buildPentestPrompt(target, objectives, session, findingsRegistry, context, envVarNames, subagentId, role = "orchestrator", credentialContext, grpc) {
493
513
  const sessionRootPath = session.rootPath;
494
514
  const exfilMode = session.config?.exfilMode ?? false;
495
515
  const taskDriven = role === "orchestrator" ? false : session.config?.taskDriven ?? false;
@@ -656,6 +676,37 @@ The following is context specific to the application under test. If it contains
656
676
 
657
677
  ${context}
658
678
  ` : "";
679
+ let grpcSection = "";
680
+ if (grpc) {
681
+ const lines = [
682
+ `
683
+ ## gRPC Target`,
684
+ `This target is a gRPC method, not a plain HTTP endpoint. It rides HTTP/2 with binary protobuf and uses the path \`/package.Service/Method\`.`,
685
+ `- **Transport:** ${grpc.transport}`,
686
+ `- **Service:** ${grpc.serviceFqn}`,
687
+ `- **Method:** ${grpc.method}`
688
+ ];
689
+ if (grpc.host)
690
+ lines.push(`- **Authority (host):** \`${grpc.host}\` — the method's gRPC authority; it differs from the app domain, so use this host directly as \`<authority>\` in the commands below.`);
691
+ if (grpc.streamingType)
692
+ lines.push(`- **Streaming:** ${grpc.streamingType}`);
693
+ if (grpc.schemaSource)
694
+ lines.push(`- **Schema source:** ${grpc.schemaSource}`);
695
+ if (grpc.reflectionAvailable !== undefined) {
696
+ lines.push(`- **Reflection available:** ${grpc.reflectionAvailable}`);
697
+ }
698
+ if (grpc.frontingGatewayOperation) {
699
+ lines.push(`- **Fronting gateway:** ${grpc.frontingGatewayOperation.gatewayType} operation \`${grpc.frontingGatewayOperation.operation}\` — if the direct gRPC authority is unreachable, test through this gateway operation instead.`);
700
+ } else {
701
+ lines.push(`- **Fronting gateway:** none — this method is reachable directly but is NOT exposed through the REST/GraphQL gateway. Treat it as a PRIME missing-authorization target: gateway-fronted methods usually get their authz enforced at the gateway, so a shadow method that bypasses the gateway may bypass that authz entirely.`);
702
+ }
703
+ lines.push(`
704
+ ### gRPC Test Battery (OWASP gRPC Security Cheat Sheet)`, `Use \`grpcurl\`, \`buf\`, and \`protoc\` via \`execute_command\`. Work through this battery for the method above:`, `1. **Schema recovery.** Try reflection first: \`grpcurl -plaintext <authority> list\` / \`describe <service>\`. If reflection is disabled, recover the schema from a \`.proto\` file or protoset (e.g. via \`buf\` or \`protoc\`) before giving up on schema-dependent tests.`, `2. **Transport/content-type fallback.** Native gRPC, grpc-web, and Connect use different content-types over the same or adjacent paths. If one transport looks dead, retry as grpc-web (\`application/grpc-web\`) and Connect (\`application/connect+...\` or JSON) before declaring the endpoint unreachable.`, `3. **Status-code oracle.** Treat gRPC status codes as signal, not noise: 16 UNAUTHENTICATED, 7 PERMISSION_DENIED, 3 INVALID_ARGUMENT, 12 UNIMPLEMENTED. A flip from UNAUTHENTICATED to a data response after adding/removing metadata is a finding.`, `4. **Missing auth per method.** Call the method with valid credentials/metadata, then again with none and with garbage metadata. A successful response without auth is a critical finding.`, `5. **BOLA / IDOR.** Manipulate ID fields inside the request message (account/user/resource IDs) to access another principal's data.`, `6. **Metadata trust.** Test whether the service trusts client-supplied metadata it shouldn't (e.g. \`x-user-id\`, forwarded auth headers) instead of deriving identity server-side.`, `7. **Non-canonical \`:path\` authz bypass.** If authz is enforced by a proxy matching on \`:path\`, try case variants, trailing slashes, or alternate casing of the service/method path to see if the gRPC path parsing bypasses it.`, `8. **Protobuf/message fuzzing.** Send malformed, truncated, and type-mismatched field values; unknown field numbers; and deeply nested/repeated fields to probe deserialization handling.`, `9. **Streaming IDOR.** For client/server/bidi streaming methods, probe whether a stream opened for one principal's resource can be redirected mid-stream to another's.`, `10. **Decompression / size DoS.** Send oversized or highly compressible payloads to check for missing message-size limits or decompression bombs.`, `11. **Transport security.** Confirm whether the channel is plaintext or TLS/mTLS-enforced; plaintext gRPC in production is a finding on its own.`, `
705
+ If the method is unreachable from your network position (common for internal/in-cluster services), a finding is still valid via whitebox reasoning — schema plus routing/config evidence — even without an executed POC.`);
706
+ grpcSection = `${lines.join(`
707
+ `)}
708
+ `;
709
+ }
659
710
  const envVarSection = envVarNames && envVarNames.length > 0 ? `
660
711
  ## Environment Variables
661
712
  The following environment variables are pre-loaded in your shell and available in every \`execute_command\` call. Use them in scripts or commands (e.g. \`$${envVarNames[0]}\`) — do NOT hardcode their values.
@@ -666,7 +717,7 @@ ${envVarNames.map((n) => `- \`${n}\``).join(`
666
717
 
667
718
  ## Target
668
719
  - **URL:** ${target}
669
- ${authSection}${credentialSection}
720
+ ${grpcSection}${authSection}${credentialSection}
670
721
  ${knownFindingsSection}
671
722
  ${knowledgeBaseSection}
672
723
  ${planSection}${contextSection}${envVarSection}
@@ -4,7 +4,7 @@ import {
4
4
  init_auth,
5
5
  init_constants,
6
6
  signGatewayRequest
7
- } from "./cli-bhj09mhe.js";
7
+ } from "./cli-8178m9nm.js";
8
8
  import {
9
9
  AISDKError,
10
10
  APICallError,
@@ -87,11 +87,11 @@ import {
87
87
  import {
88
88
  config,
89
89
  init_config
90
- } from "./cli-7dez82r2.js";
90
+ } from "./cli-mp5rfvv0.js";
91
91
  import {
92
92
  getCurrentVersion,
93
93
  init_installation
94
- } from "./cli-f4659etd.js";
94
+ } from "./cli-yh8j4ryf.js";
95
95
  import {
96
96
  __callDispose,
97
97
  __commonJS,
@@ -8583,6 +8583,24 @@ var init_mantle2 = __esm(() => {
8583
8583
  var OPENAI_MODELS;
8584
8584
  var init_openai = __esm(() => {
8585
8585
  OPENAI_MODELS = [
8586
+ {
8587
+ id: "gpt-5.6-sol",
8588
+ name: "GPT-5.6-sol",
8589
+ provider: "openai",
8590
+ contextLength: 1050000
8591
+ },
8592
+ {
8593
+ id: "gpt-5.6-terra",
8594
+ name: "GPT-5.6-terra",
8595
+ provider: "openai",
8596
+ contextLength: 1050000
8597
+ },
8598
+ {
8599
+ id: "gpt-5.6-luna",
8600
+ name: "GPT-5.6-luna",
8601
+ provider: "openai",
8602
+ contextLength: 1050000
8603
+ },
8586
8604
  {
8587
8605
  id: "gpt-5.5",
8588
8606
  name: "GPT-5.5",
@@ -9034,6 +9052,12 @@ var init_openrouter = __esm(() => {
9034
9052
  provider: "openrouter",
9035
9053
  contextLength: 262144
9036
9054
  },
9055
+ {
9056
+ id: "moonshotai/kimi-k3",
9057
+ name: "Kimi K3",
9058
+ provider: "openrouter",
9059
+ contextLength: 1e6
9060
+ },
9037
9061
  {
9038
9062
  id: "moonshot/kimi-k2-turbo",
9039
9063
  name: "Kimi K2 Turbo",
@@ -45853,6 +45877,9 @@ function modelSupportsOpenAIReasoning(modelId) {
45853
45877
  function getOpenAIReasoningEfforts(modelId) {
45854
45878
  if (!modelSupportsOpenAIReasoning(modelId))
45855
45879
  return [];
45880
+ if (/^gpt-5\.6(?:\b|-)/.test(modelId)) {
45881
+ return ["low", "medium", "high", "xhigh", "max", "ultra"];
45882
+ }
45856
45883
  if (/^gpt-5\.5(?:\b|-)/.test(modelId)) {
45857
45884
  return ["none", "low", "medium", "high", "xhigh"];
45858
45885
  }
@@ -45862,8 +45889,9 @@ function normalizeOpenAIReasoningEffort(modelId, effort) {
45862
45889
  const efforts = getOpenAIReasoningEfforts(modelId);
45863
45890
  if (efforts.length === 0)
45864
45891
  return;
45865
- if (effort && efforts.includes(effort))
45866
- return effort;
45892
+ if (effort && efforts.includes(effort)) {
45893
+ return effort === "ultra" ? "max" : effort;
45894
+ }
45867
45895
  return DEFAULT_OPENAI_REASONING_EFFORT;
45868
45896
  }
45869
45897
  function buildReasoningProviderOptions(model, opts) {
@@ -46243,7 +46271,10 @@ var init_ai = __esm(() => {
46243
46271
  "gpt-5.4-pro",
46244
46272
  "gpt-5.4-pro-2026-03-05",
46245
46273
  "gpt-5.5",
46246
- "gpt-5.5-2026-04-23"
46274
+ "gpt-5.5-2026-04-23",
46275
+ "gpt-5.6-sol",
46276
+ "gpt-5.6-terra",
46277
+ "gpt-5.6-luna"
46247
46278
  ]);
46248
46279
  stepContextStore = new AsyncLocalStorage;
46249
46280
  SEQUENTIAL_TOOL_CALL_INSTRUCTION = "CRITICAL TOOL-CALLING RULE: Emit EXACTLY ONE tool call per response. " + "Never emit more than one tool call in a single turn. After each tool call, " + "wait for its result before making the next one. Emitting multiple tool " + "calls in one turn corrupts their arguments.";
@@ -47096,7 +47127,7 @@ async function create2(input) {
47096
47127
  if (normalizedConfig?.headers !== undefined) {
47097
47128
  snapshotHeaders = { ...normalizedConfig.headers };
47098
47129
  } else {
47099
- const { config: appConfig } = await import("./index-t6981tw0.js");
47130
+ const { config: appConfig } = await import("./index-1gnn6wsw.js");
47100
47131
  const cfg = await appConfig.get();
47101
47132
  snapshotHeaders = cfg.defaultHeaders ? { ...cfg.defaultHeaders } : { ...DEFAULT_HEADER_RECORD };
47102
47133
  }
@@ -47272,7 +47303,8 @@ async function updateOperatorSettings(sessionId, settings) {
47272
47303
  session.config.operatorSettings = {
47273
47304
  initialMode: "manual",
47274
47305
  requireApproval: true,
47275
- enableSuggestions: true
47306
+ enableSuggestions: true,
47307
+ strikeMode: false
47276
47308
  };
47277
47309
  }
47278
47310
  if (settings.initialMode !== undefined) {
@@ -47284,6 +47316,9 @@ async function updateOperatorSettings(sessionId, settings) {
47284
47316
  if (settings.enableSuggestions !== undefined) {
47285
47317
  session.config.operatorSettings.enableSuggestions = settings.enableSuggestions;
47286
47318
  }
47319
+ if (settings.strikeMode !== undefined) {
47320
+ session.config.operatorSettings.strikeMode = settings.strikeMode;
47321
+ }
47287
47322
  });
47288
47323
  }
47289
47324
  async function updateSessionHeaders(sessionId, headers) {
@@ -47356,7 +47391,8 @@ var init_session = __esm(() => {
47356
47391
  OperatorSettingsObject = zod_default.object({
47357
47392
  initialMode: zod_default.enum(["plan", "manual", "auto"]).default("manual"),
47358
47393
  requireApproval: zod_default.boolean().default(true),
47359
- enableSuggestions: zod_default.boolean().default(true)
47394
+ enableSuggestions: zod_default.boolean().default(true),
47395
+ strikeMode: zod_default.boolean().optional()
47360
47396
  });
47361
47397
  EmailInboxConfigObject = zod_default.discriminatedUnion("provider", [
47362
47398
  zod_default.object({
@@ -47391,6 +47427,14 @@ var init_session = __esm(() => {
47391
47427
  username: zod_default.string(),
47392
47428
  password: zod_default.string(),
47393
47429
  tls: zod_default.boolean()
47430
+ }),
47431
+ zod_default.object({
47432
+ provider: zod_default.literal("http"),
47433
+ id: zod_default.string(),
47434
+ name: zod_default.string(),
47435
+ emailAddress: zod_default.string(),
47436
+ endpoint: zod_default.string(),
47437
+ token: zod_default.string()
47394
47438
  })
47395
47439
  ]);
47396
47440
  EmailIntegrationConfigObject = zod_default.object({
@@ -47414,6 +47458,7 @@ var init_session = __esm(() => {
47414
47458
  authCredentials: zod_default.union([AuthCredentialsObject, zod_default.array(AuthCredentialsObject)]).optional(),
47415
47459
  authenticationInstructions: zod_default.string().optional(),
47416
47460
  requestsPerSecond: zod_default.number().optional(),
47461
+ allowDestructiveActions: zod_default.boolean().optional(),
47417
47462
  operatorSettings: OperatorSettingsObject.optional(),
47418
47463
  toolsetState: ToolsetStateSchema.optional(),
47419
47464
  enumerateSubdomains: zod_default.boolean().optional(),