pwn 0.5.718 → 0.5.720

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/etc/default_skills/pwn/ai/agent/engagement/SKILL.md +53 -0
  3. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +4 -0
  4. data/etc/default_skills/pwn/ai/agent/loop/SKILL.md +1 -0
  5. data/etc/default_skills/pwn/ai/agent/swarm/SKILL.md +1 -0
  6. data/etc/default_skills/pwn/ai/agent/tool_guard/SKILL.md +1 -0
  7. data/etc/default_skills/pwn/ai/agent/tools/debug_lane/SKILL.md +45 -0
  8. data/etc/default_skills/pwn/ai/agent/tools/engagement/SKILL.md +45 -0
  9. data/etc/default_skills/pwn/ai/agent/turn_finalizer/SKILL.md +2 -0
  10. data/etc/default_skills/pwn/plugins/bin_workspace/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +1 -0
  12. data/etc/default_skills/pwn/plugins/capability/SKILL.md +48 -0
  13. data/etc/default_skills/pwn/plugins/detonate/SKILL.md +47 -0
  14. data/etc/default_skills/pwn/plugins/emulator/SKILL.md +47 -0
  15. data/etc/default_skills/pwn/plugins/findings/SKILL.md +1 -0
  16. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +2 -0
  17. data/etc/default_skills/pwn/plugins/packet/SKILL.md +1 -0
  18. data/etc/default_skills/pwn/plugins/repl/SKILL.md +1 -0
  19. data/etc/default_skills/pwn/plugins/vault/SKILL.md +4 -0
  20. data/etc/default_skills/pwn/reports/engagement/SKILL.md +47 -0
  21. data/lib/pwn/ai/agent/dispatch.rb +67 -0
  22. data/lib/pwn/ai/agent/engagement.rb +167 -0
  23. data/lib/pwn/ai/agent/learning.rb +88 -4
  24. data/lib/pwn/ai/agent/loop.rb +20 -2
  25. data/lib/pwn/ai/agent/reward.rb +76 -12
  26. data/lib/pwn/ai/agent/swarm.rb +36 -0
  27. data/lib/pwn/ai/agent/tool_guard.rb +39 -0
  28. data/lib/pwn/ai/agent/tools/debug_lane.rb +160 -0
  29. data/lib/pwn/ai/agent/tools/engagement.rb +40 -0
  30. data/lib/pwn/ai/agent/turn_finalizer.rb +65 -0
  31. data/lib/pwn/ai/agent.rb +1 -0
  32. data/lib/pwn/config.rb +18 -2
  33. data/lib/pwn/plugins/bin_workspace.rb +81 -0
  34. data/lib/pwn/plugins/binary_parser.rb +27 -0
  35. data/lib/pwn/plugins/capability.rb +68 -0
  36. data/lib/pwn/plugins/detect_os.rb +1 -2
  37. data/lib/pwn/plugins/detonate.rb +62 -0
  38. data/lib/pwn/plugins/emulator.rb +64 -0
  39. data/lib/pwn/plugins/exploit_db.rb +33 -9
  40. data/lib/pwn/plugins/findings.rb +47 -0
  41. data/lib/pwn/plugins/gdb.rb +42 -0
  42. data/lib/pwn/plugins/packet.rb +26 -0
  43. data/lib/pwn/plugins/repl.rb +25 -2
  44. data/lib/pwn/plugins/vault.rb +116 -0
  45. data/lib/pwn/plugins.rb +4 -0
  46. data/lib/pwn/reports/engagement.rb +63 -0
  47. data/lib/pwn/reports.rb +1 -0
  48. data/lib/pwn/version.rb +1 -1
  49. data/spec/lib/pwn/ai/agent/engagement_spec.rb +27 -0
  50. data/spec/lib/pwn/ai/agent/learning_spec.rb +23 -0
  51. data/spec/lib/pwn/ai/agent/loop_spec.rb +1 -1
  52. data/spec/lib/pwn/ai/agent/reward_spec.rb +16 -0
  53. data/spec/lib/pwn/ai/agent/swarm_spec.rb +11 -0
  54. data/spec/lib/pwn/ai/agent/tools/debug_lane_spec.rb +16 -0
  55. data/spec/lib/pwn/ai/agent/tools/engagement_spec.rb +16 -0
  56. data/spec/lib/pwn/ai/agent/turn_finalizer_spec.rb +18 -0
  57. data/spec/lib/pwn/plugins/bin_workspace_spec.rb +26 -0
  58. data/spec/lib/pwn/plugins/capability_spec.rb +19 -0
  59. data/spec/lib/pwn/plugins/detect_os_spec.rb +0 -14
  60. data/spec/lib/pwn/plugins/detonate_spec.rb +24 -0
  61. data/spec/lib/pwn/plugins/emulator_spec.rb +18 -0
  62. data/spec/lib/pwn/plugins/exploit_db_spec.rb +38 -3
  63. data/spec/lib/pwn/plugins/findings_spec.rb +13 -0
  64. data/spec/lib/pwn/plugins/gdb_spec.rb +10 -0
  65. data/spec/lib/pwn/plugins/packet_spec.rb +6 -0
  66. data/spec/lib/pwn/plugins/repl_spec.rb +1 -1
  67. data/spec/lib/pwn/plugins/vault_spec.rb +11 -0
  68. data/spec/lib/pwn/reports/engagement_spec.rb +30 -0
  69. data/third_party/pwn_rdoc.jsonl +63 -0
  70. metadata +25 -1
@@ -103,4 +103,22 @@ describe PWN::AI::Agent::TurnFinalizer do
103
103
  described_class.leave_user_path! while described_class.user_path?
104
104
  end
105
105
  end
106
+
107
+ it 'finalizes write-then-readback and names unmet without readback' do
108
+ Dir.mktmpdir do |dir|
109
+ path = File.join(dir, 'out.pdf')
110
+ File.write(path, 'pdf')
111
+ msgs = [
112
+ { role: 'tool', content: { success: true, result: { path: path }, effect: 'write' }.to_json },
113
+ { role: 'tool', content: { success: true, result: { stdout: path }, effect: 'read' }.to_json }
114
+ ]
115
+ row = described_class.arbitrate(request: "store #{path}", messages: msgs, paths: [path])
116
+ expect(row[:complete]).to eq(true)
117
+ expect(row[:unmet]).to eq([])
118
+ write_only = [{ role: 'tool', content: { success: true, result: { path: path }, effect: 'write' }.to_json }]
119
+ nag = described_class.arbitrate(request: "store #{path}", messages: write_only, paths: [path])
120
+ expect(nag[:complete]).to eq(false)
121
+ expect(nag[:unmet].map { |u| u[:criterion] }).to include('readback_missing')
122
+ end
123
+ end
106
124
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'tmpdir'
5
+
6
+ describe PWN::Plugins::BinWorkspace do
7
+ it 'should display information for authors' do
8
+ expect(described_class).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ expect(described_class).to respond_to :help
13
+ end
14
+
15
+ it 'persists annotations by sha256 across opens' do
16
+ Dir.mktmpdir do |dir|
17
+ allow(Dir).to receive(:home).and_return(dir)
18
+ stub_const('PWN::Plugins::BinWorkspace::ROOT', File.join(dir, '.pwn', 'binws'))
19
+ bin = File.join(dir, 'a.bin')
20
+ File.binwrite(bin, 'ELF')
21
+ described_class.annotate(path: bin, addr: '0x401000', kind: 'rename', name: 'win')
22
+ notes = described_class.notes(path: bin)
23
+ expect(notes[:'0x401000'][:name]).to eq('win')
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Plugins::Capability do
6
+ it 'should display information for authors' do
7
+ expect(described_class).to respond_to :authors
8
+ end
9
+
10
+ it 'should display information for existing help method' do
11
+ expect(described_class).to respond_to :help
12
+ end
13
+
14
+ it 'does not apply setcap without operator_ack' do
15
+ row = described_class.request(cap: 'cap_net_raw', reason: 'packet')
16
+ expect(row[:needs_ack]).to eq(true)
17
+ expect(row[:ok]).to eq(false)
18
+ end
19
+ end
@@ -76,8 +76,6 @@ describe PWN::Plugins::DetectOS do
76
76
  expect(row[:version]).to eq('2026.3')
77
77
  expect(row[:arch]).to be_a(String)
78
78
  expect(row[:endian]).to be_a(Symbol)
79
- expect(row[:native]).to include('jq', 'yara')
80
- expect(row[:native]).not_to include('gdb', 'r2', 'nuclei')
81
79
  expect(row).not_to have_key(:missing)
82
80
  expect(row[:summary]).to include('kali')
83
81
  expect(row[:summary]).not_to include('missing=')
@@ -94,17 +92,5 @@ describe PWN::Plugins::DetectOS do
94
92
  expect(row[:version]).to eq('3.20.0')
95
93
  expect(row[:native]).to eq([])
96
94
  end
97
-
98
- it 'does not treat plugin required_bins gaps as the inventory' do
99
- row = described_class.living_off_the_land(
100
- os_release: "ID=debian\nVERSION_ID=12\n",
101
- type: :linux,
102
- pwn_bins: %w[gdb r2],
103
- bins: %w[jq],
104
- which: { 'jq' => true, 'gdb' => false }
105
- )
106
- expect(row[:native]).to include('jq')
107
- expect(row[:native]).not_to include('gdb')
108
- end
109
95
  end
110
96
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'tmpdir'
5
+
6
+ describe PWN::Plugins::Detonate do
7
+ it 'should display information for authors' do
8
+ expect(described_class).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ expect(described_class).to respond_to :help
13
+ end
14
+
15
+ it 'refuses when isolation preconditions are unmet' do
16
+ Dir.mktmpdir do |dir|
17
+ sample = File.join(dir, 's.bin')
18
+ File.write(sample, 'MZ')
19
+ allow(PWN::Plugins::PreflightChecker).to receive(:bin?).with(name: 'podman').and_return(false)
20
+ row = described_class.detonate(path: sample)
21
+ expect(row[:error].to_s).to match(/isolation/)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Plugins::Emulator do
6
+ it 'should display information for authors' do
7
+ expect(described_class).to respond_to :authors
8
+ end
9
+
10
+ it 'should display information for existing help method' do
11
+ expect(described_class).to respond_to :help
12
+ end
13
+
14
+ it 'returns stub plaintext for a decode function' do
15
+ row = described_class.emulate(binary: '/bin/true', addr: '0x401000', backend: 'stub', plaintext: 'secret')
16
+ expect(row[:ret]).to eq('secret')
17
+ end
18
+ end
@@ -3,6 +3,9 @@
3
3
  require 'spec_helper'
4
4
  require 'tmpdir'
5
5
  require 'fileutils'
6
+ require 'stringio'
7
+ require 'zlib'
8
+ require 'rubygems/package'
6
9
 
7
10
  describe PWN::Plugins::ExploitDB do
8
11
  it 'should display information for authors' do
@@ -36,23 +39,55 @@ describe PWN::Plugins::ExploitDB do
36
39
  end
37
40
  end
38
41
 
42
+ def gtfobins_tarball(opts = {})
43
+ name = (opts[:name] || 'tar').to_s
44
+ md = (opts[:body] || "---\nfunctions:\n file-read:\n - code: tar xf -\n SUID:\n - code: tar\n").to_s
45
+ sio = StringIO.new
46
+ sio.binmode
47
+ gz = Zlib::GzipWriter.new(sio)
48
+ Gem::Package::TarWriter.new(gz) do |tar|
49
+ path = "GTFOBins.github.io-master/_gtfobins/#{name}"
50
+ tar.add_file_simple(path, 0o644, md.bytesize) { |io| io.write(md) }
51
+ end
52
+ gz.close
53
+ sio.string
54
+ end
55
+
39
56
  it 'sync fetches latest ExploitDB CSV and GTFOBins into ~/.pwn/intel' do
40
57
  Dir.mktmpdir do |dir|
41
58
  allow(Dir).to receive(:home).and_return(dir)
42
59
  csv = "id,file,description,cve\n1,e.rb,Apache Log4j RCE,CVE-2021-44228\n"
43
- json = '{"tar":{"binary":"tar","functions":["file-read"]}}'
60
+ tgz = gtfobins_tarball
44
61
  get = lambda do |url|
45
- url.to_s.include?('files_exploits') ? csv : json
62
+ url.to_s.include?('files_exploits') ? csv : tgz
46
63
  end
47
64
  out = described_class.sync(get: get)
48
65
  intel = File.join(dir, '.pwn', 'intel')
49
66
  expect(out[:dest]).to eq(intel)
50
67
  expect(File.read(File.join(intel, 'files_exploits.csv'))).to include('CVE-2021-44228')
51
- expect(File.read(File.join(intel, 'gtfobins.json'))).to include('tar')
68
+ json = File.read(File.join(intel, 'gtfobins.json'))
69
+ expect(json).not_to eq('{}')
70
+ expect(json).to include('tar')
71
+ expect(json).to include('file-read')
52
72
  expect(out[:fetched]).to include('files_exploits.csv', 'gtfobins.json')
53
73
  end
54
74
  end
55
75
 
76
+ it 'refuses to write an empty gtfobins.json when the archive has no bins' do
77
+ Dir.mktmpdir do |dir|
78
+ allow(Dir).to receive(:home).and_return(dir)
79
+ sio = StringIO.new
80
+ sio.binmode
81
+ gz = Zlib::GzipWriter.new(sio)
82
+ Gem::Package::TarWriter.new(gz) { |tar| tar.mkdir('empty', 0o755) }
83
+ gz.close
84
+ get = lambda do |url|
85
+ url.to_s.include?('files_exploits') ? "id,file\n1,a\n" : sio.string
86
+ end
87
+ expect { described_class.sync(get: get) }.to raise_error(/GTFOBins/)
88
+ end
89
+ end
90
+
56
91
  it 'does not copy from a tree-bundled etc/intel directory' do
57
92
  src = File.read(described_class.method(:sync).source_location.first)
58
93
  expect(src).not_to include('etc/intel')
@@ -39,4 +39,17 @@ describe PWN::Plugins::Findings do
39
39
  expect(child[:composite_severity]).to eq('high')
40
40
  end
41
41
  end
42
+
43
+ it 'flags tampered evidence files' do
44
+ Dir.mktmpdir do |dir|
45
+ allow(Dir).to receive(:home).and_return(dir)
46
+ stub_const('PWN::Plugins::Findings::FILE', File.join(dir, 'findings.jsonl'))
47
+ poc = File.join(dir, 'poc.rb')
48
+ File.write(poc, 'puts 1')
49
+ described_class.record(title: 'xss', poc_artifacts: [poc], engagement_id: 'lab')
50
+ expect(described_class.evidence_verify(engagement_id: 'lab')[:ok]).to eq(true)
51
+ File.write(poc, 'tampered')
52
+ expect(described_class.evidence_verify(engagement_id: 'lab')[:ok]).to eq(false)
53
+ end
54
+ end
42
55
  end
@@ -25,4 +25,14 @@ describe PWN::Plugins::GDB do
25
25
  expect(joined).to include('break *0x401000')
26
26
  end
27
27
  end
28
+
29
+ it 'parses crash_info from gdb output' do
30
+ allow(Open3).to receive(:capture3).and_return(
31
+ ["Program received signal SIGSEGV\nrip 0x401000\n#0 0x401000 in foo ()\n", '', instance_double(Process::Status, exitstatus: 0)]
32
+ )
33
+ allow(PWN::Plugins::PreflightChecker).to receive(:require_bin!)
34
+ row = described_class.crash_info(binary: '/bin/true')
35
+ expect(row[:signal]).to include('SEGV')
36
+ expect(row[:exploitability_heuristic]).to eq('likely-exploitable')
37
+ end
28
38
  end
@@ -12,4 +12,10 @@ describe PWN::Plugins::Packet do
12
12
  help_response = PWN::Plugins::Packet
13
13
  expect(help_response).to respond_to :help
14
14
  end
15
+
16
+ it 'flags connect-scan results as degraded' do
17
+ row = described_class.tcp_connect_scan(hosts: ['127.0.0.1'], ports: [1], timeout: 0.05)
18
+ expect(row[:degraded]).to eq(true)
19
+ expect(row[:results]).to be_an(Array)
20
+ end
15
21
  end
@@ -82,7 +82,7 @@ describe PWN::Plugins::REPL do
82
82
  hits = described_class.pwn_ai_complete(target: '/sk', line: '/sk')
83
83
  expect(hits).to include('/skills')
84
84
  hits = described_class.pwn_ai_complete(target: '/', line: '/')
85
- %w[/cron /skills /sessions /memory /debug /trace /back /help /model].each do |cmd|
85
+ %w[/cron /skills /sessions /memory /debug /trace /back /help /model /learning].each do |cmd|
86
86
  expect(hits).to include(cmd)
87
87
  end
88
88
  hits = described_class.pwn_ai_complete(target: 'li', line: '/cron li')
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'spec_helper'
4
+ require 'tmpdir'
4
5
 
5
6
  describe PWN::Plugins::Vault do
6
7
  it 'should display information for authors' do
@@ -12,4 +13,14 @@ describe PWN::Plugins::Vault do
12
13
  help_response = PWN::Plugins::Vault
13
14
  expect(help_response).to respond_to :help
14
15
  end
16
+
17
+ it 'expands vault tokens and redacts stored secrets' do
18
+ Dir.mktmpdir do |dir|
19
+ allow(Dir).to receive(:home).and_return(dir)
20
+ described_class.store(label: 'api', secret: 's3cret-value')
21
+ expect(described_class.fetch(label: 'api')).to eq('s3cret-value')
22
+ expect(described_class.expand(text: 'tok={{vault:api}}')).to include('s3cret-value')
23
+ expect(described_class.redact(text: 'tok=s3cret-value')).to include('{{vault:api}}')
24
+ end
25
+ end
15
26
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'tmpdir'
5
+
6
+ describe PWN::Reports::Engagement do
7
+ it 'should display information for authors' do
8
+ expect(described_class).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ expect(described_class).to respond_to :help
13
+ end
14
+
15
+ it 'writes html for two findings with poc paths' do
16
+ Dir.mktmpdir do |dir|
17
+ poc = File.join(dir, 'poc.rb')
18
+ File.write(poc, 'puts 1')
19
+ out = described_class.generate(
20
+ engagement: 'lab',
21
+ dir_path: dir,
22
+ findings: [
23
+ { title: 'a', severity: 'high', poc: poc },
24
+ { title: 'b', severity: 'low', poc: poc }
25
+ ]
26
+ )
27
+ expect(File.file?(out[:html])).to eq(true)
28
+ end
29
+ end
30
+ end
@@ -74,12 +74,25 @@
74
74
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
75
75
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.call Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.call`: Supported Method Parameters\n\njson_str = PWN::AI::Agent::Dispatch.call(\n\ntool_call: 'required - Hash { id:, type:, function: { name:, arguments: } }'\n\n)\n"}]}
76
76
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.effect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.effect`: "}]}
77
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.expand_vault_args Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.expand_vault_args`: "}]}
77
78
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.help`: "}]}
79
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.note_taint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.note_taint`: "}]}
78
80
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.parse_args Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.parse_args`: "}]}
79
81
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.parse_string_args Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.parse_string_args`: "}]}
80
82
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.repair_name Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.repair_name`: Supported Method Parameters\n\nfixed = PWN::AI::Agent::Dispatch.repair_name(\n\nname: 'required - possibly-wrong tool name emitted by the model'\n\n)\n\nReturns the closest registered tool name by Levenshtein distance (max distance = 1/3 of the emitted name, min 3) or nil when nothing is close enough. Every successful repair is fingerprinted into Mistakes so the negative-feedback loop trains the model’s output format via its own system prompt.\n"}]}
81
83
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.symbolize Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.symbolize`: "}]}
84
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.taint_blocked? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.taint_blocked?`: "}]}
85
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.taint_mode Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.taint_mode`: "}]}
82
86
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.tool_calls_from_text Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.tool_calls_from_text`: Supported Method Parameters\n\ncalls = PWN::AI::Agent::Dispatch.tool_calls_from_text(\n\ntext: 'required - assistant plain-text that may embed shell(...) / JSON tool forms'\n\n)\n\nLocal / abliterated models often print tool invocations as content instead of native message.tool_calls. Supported shapes include:\n\nshell(command=\"id\") / shell({\"command\":\"id\"}) / shell(\"id\")\n{\"name\":\"shell\",\"arguments\":{...}} / {\"function\":{\"name\":...}}\n{\"tool\":\"shell\",\"arguments\":{...}} / {\"call\":\"shell\",\"arguments\":{...}}\ncall:shell{command: \"uname -s\"} / tool:shell{\"command\":\"id\"}\n\nWhen structured tool_calls are empty, Loop coerces those strings into OpenAI-shaped tool_call hashes so Dispatch runs them instead of treating the string as a FINAL answer.\n"}]}
87
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.authors`: "}]}
88
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.close Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.close`: "}]}
89
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.current_name Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.current_name`: "}]}
90
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.deny_if_out_of_scope Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.deny_if_out_of_scope`: "}]}
91
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.engagement_enforce Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.engagement_enforce`: "}]}
92
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.help`: "}]}
93
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.in_scope? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.in_scope?`: "}]}
94
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.open Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.open`: "}]}
95
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Engagement.status Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Engagement.status`: "}]}
83
96
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
84
97
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.auto_extrospect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.auto_extrospect`: Supported Method Parameters\n\nPWN::AI::Agent::Extrospection.auto_extrospect(\n\nsession_id: 'optional - id of the just-completed session (for tagging)'\n\n)\n\nCalled by Learning.auto_introspect when PWN::Env[:agent] is truthy. Captures a fresh snapshot and, if drift is non-trivial, records it as an observation and a PWN::Memory :env fact so the NEXT session’s system prompt already knows the world moved. Never raises.\n"}]}
85
98
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.auto_extrospect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.auto_extrospect_enabled?`: "}]}
@@ -264,6 +277,7 @@
264
277
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.build_skill_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.build_skill_from_session`: "}]}
265
278
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.cause_crumb Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.cause_crumb`: "}]}
266
279
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.checkable_claim? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.checkable_claim?`: "}]}
280
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.compact! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.compact!`: "}]}
267
281
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.compress_exemplar Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.compress_exemplar`: "}]}
268
282
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.compress_finetune_trace Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.compress_finetune_trace`: "}]}
269
283
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.consolidate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.consolidate`: Supported Method Parameters\n\nremoved = PWN::AI::Agent::Learning.consolidate(\n\nmax_entries: 'optional - hard cap on PWN::Memory size (default MAX_MEMORY_ENTRIES)'\n\n)\n\nDeduplicates near-identical lesson values and prunes the oldest entries once the cap is exceeded so the injected MEMORY block stays high-signal.\n"}]}
@@ -281,11 +295,13 @@
281
295
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.infer_success Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.infer_success`: "}]}
282
296
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.introspective_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.introspective_lessons`: "}]}
283
297
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lean! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lean!`: "}]}
298
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.learning_max_baks Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.learning_max_baks`: "}]}
284
299
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lesson_observe Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lesson_observe`: "}]}
285
300
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lesson_prompt Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lesson_prompt`: "}]}
286
301
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lesson_record Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lesson_record`: "}]}
287
302
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lesson_save Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lesson_save`: "}]}
288
303
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.lesson_store Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.lesson_store`: "}]}
304
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.list_conflicted Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.list_conflicted`: "}]}
289
305
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.locate_skill_for_update Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.locate_skill_for_update`: "}]}
290
306
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.maybe_prune_outcomes! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.maybe_prune_outcomes!`: "}]}
291
307
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.merge_cluster Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.merge_cluster`: "}]}
@@ -299,6 +315,7 @@
299
315
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.reconcile_verdict_tags! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.reconcile_verdict_tags!`: "}]}
300
316
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.recover_predicted_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.recover_predicted_from_session`: "}]}
301
317
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.reflect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.reflect`: Supported Method Parameters\n\nreport = PWN::AI::Agent::Learning.reflect(\n\nsession_id: 'required - PWN::Sessions id to analyse',\ndry_run: 'optional - when true, do not write to Memory/Skills (default false)'\n\n)\n\nUses PWN::AI::Agent::Reflect (when available) to LLM-summarise the session into structured lessons. Falls back to a heuristic extractor when module_reflection is disabled so learning never stops.\n"}]}
318
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.requeue_conflicted Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.requeue_conflicted`: "}]}
302
319
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.reset`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.reset\n"}]}
303
320
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.rl_skill_notes Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.rl_skill_notes`: "}]}
304
321
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.semantic_merge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.semantic_merge`: "}]}
@@ -327,6 +344,7 @@
327
344
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.bounce_incomplete_nudge Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.bounce_incomplete_nudge`: "}]}
328
345
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.budget_exhaustion_hot? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.budget_exhaustion_hot?`: "}]}
329
346
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.budget_hit? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.budget_hit?`: "}]}
347
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.budget_status Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.budget_status`: "}]}
330
348
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.calibration_state Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.calibration_state`: "}]}
331
349
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.call_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.call_engine`: Supported Method Parameters\n\nmsg = PWN::AI::Agent::Loop.call_engine(\n\nmessages: 'required - OpenAI-format messages array',\ntools: 'optional - OpenAI tools array'\n\n)\n\nReturns a normalised assistant message hash:\n\n{ role: 'assistant', content: String|nil,\n tool_calls: [ {id:, type:'function', function:{name:, arguments:}} ],\n _native_content: <provider raw> (when adapter needs round-trip) }\n"}]}
332
350
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.catalog_lookup? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.catalog_lookup?`: "}]}
@@ -647,10 +665,13 @@
647
665
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.semantic_ok Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.semantic_ok`: Supported Method Parameters\n\nh = PWN::AI::Agent::Reward.semantic_ok(\n\nname: 'required - tool name',\nraw: 'required - JSON string returned by Dispatch.call',\nargs: 'optional - the tool call arguments (used for BENIGN_EXIT)'\n\n)\n\nReturns { ok:, semantic_ok:, exit:, err:, benign: }. :ok is the old proxy (handler didn’t raise); :semantic_ok additionally knows that grep/diff/find exit≠0 with empty stderr is not a failure. Loop.run records Metrics on :ok but only records Mistakes on !semantic_ok.\n"}]}
648
666
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.sentinel`: Supported Method Parameters\n\nr = PWN::AI::Agent::Reward.sentinel\n"}]}
649
667
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.set_proxy_distrust Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.set_proxy_distrust`: "}]}
668
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.taxonomy_class Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.taxonomy_class`: "}]}
669
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.taxonomy_hint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.taxonomy_hint`: "}]}
650
670
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.timeout_error? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.timeout_error?`: "}]}
651
671
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.timeout_result? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.timeout_result?`: "}]}
652
672
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.usable_preference? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.usable_preference?`: "}]}
653
673
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.user_correction_rate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.user_correction_rate`: "}]}
674
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.verifier_precedence? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.verifier_precedence?`: "}]}
654
675
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.verify_as_reward Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.verify_as_reward`: Supported Method Parameters\n\ng = PWN::AI::Agent::Reward.verify_as_reward(final: text)\n"}]}
655
676
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.warm_sentinel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.warm_sentinel`: "}]}
656
677
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Reward.window_means Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reward.window_means`: "}]}
@@ -666,6 +687,7 @@
666
687
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.bus_path Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.bus_path`: "}]}
667
688
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.bus_tail Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.bus_tail`: Supported Method Parameters\n\nmsgs = PWN::AI::Agent::Swarm.bus_tail(swarm_id: ‘required’, limit: 12)\n"}]}
668
689
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.caller_label Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.caller_label`: "}]}
690
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.claim Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.claim`: "}]}
669
691
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.create Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.create`: Supported Method Parameters\n\nswarm = PWN::AI::Agent::Swarm.create(topic: ‘optional’)\n"}]}
670
692
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.debate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.debate`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Swarm.debate(\n\nnames: 'required - Array of persona names, order = speaking order',\ntopic: 'required - opening question / claim',\nrounds: 'optional - full passes over names (default 2)',\nswarm_id: 'optional - join an existing swarm',\non_tool: 'optional - ->(name, args, result) live-UI callback'\n\n)\n"}]}
671
693
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.deep_stringify Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.deep_stringify`: "}]}
@@ -774,6 +796,7 @@
774
796
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.payload_key Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.payload_key`: "}]}
775
797
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.payload_spent Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.payload_spent`: "}]}
776
798
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.placeholder? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.placeholder?`: "}]}
799
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.policy_decision Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.policy_decision`: "}]}
777
800
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.predicted_timeout Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.predicted_timeout`: "}]}
778
801
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.present? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.present?`: "}]}
779
802
  {"messages":[{"role":"user","content":"PWN::AI::Agent::ToolGuard.protect_core_constants! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::ToolGuard.protect_core_constants!`: "}]}
@@ -799,9 +822,11 @@
799
822
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
800
823
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.help`: "}]}
801
824
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.agent_flag Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.agent_flag`: "}]}
825
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.arbitrate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.arbitrate`: "}]}
802
826
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.authors`: "}]}
803
827
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.defer Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.defer`: Supported Method Parameters\n\nresult = PWN::AI::Agent::TurnFinalizer.defer(\n\nsession_id: 'required - PWN::Sessions id',\nrequest: 'optional - original user request',\nfinal: 'optional - user-visible final answer',\npredicted: 'optional - W3 predicted score',\nplan: 'optional - tangible-task plan',\nts_state: 'optional - TaskSummarizer state'\n\n)\n\nSnapshots the live Policy episode onto this thread, clears it so Loop.maybe_finish_policy is a no-op, and runs Learning.auto_introspect on a daemon thread with the episode re-attached.\n"}]}
804
828
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.enter_user_path! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.enter_user_path!`: Supported Method Parameters\n\nPWN::AI::Agent::TurnFinalizer.enter_user_path!\n"}]}
829
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.evidence_ledger Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.evidence_ledger`: "}]}
805
830
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.finalize Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.finalize`: Supported Method Parameters\n\nresult = PWN::AI::Agent::TurnFinalizer.finalize(\n\nsession_id:, request:, final:, predicted:, plan:, ts_state:,\nshould: true|false\n\n)\n\nSingle entry used when a caller wants the Hermes split without going through Learning.auto_introspect‘s gate.\n"}]}
806
831
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.help`: "}]}
807
832
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TurnFinalizer.join_all! Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TurnFinalizer.join_all!`: Supported Method Parameters\n\nn = PWN::AI::Agent::TurnFinalizer.join_all!(timeout: 15)\n"}]}
@@ -1817,7 +1842,13 @@
1817
1842
  {"messages":[{"role":"user","content":"PWN::Plugins::BeEF.logs Usage"},{"role":"assistant","content":"`PWN::Plugins::BeEF.logs`: Supported Method Parameters\n\nlogs = PWN::Plugins::BeEF.logs(\n\nbeef_obj: 'required beef_obj returned from #login method'\n\n)\n"}]}
1818
1843
  {"messages":[{"role":"user","content":"PWN::Plugins::BeEF.module_info Usage"},{"role":"assistant","content":"`PWN::Plugins::BeEF.module_info`: Supported Method Parameters\n\nmodule_info = PWN::Plugins::BeEF.module_info(\n\nbeef_obj: 'required beef_obj returned from #login method',\nmodule_id: 'required - module id returned from #modules method'\n\n)\n"}]}
1819
1844
  {"messages":[{"role":"user","content":"PWN::Plugins::BeEF.modules Usage"},{"role":"assistant","content":"`PWN::Plugins::BeEF.modules`: Supported Method Parameters\n\nmodules = PWN::Plugins::BeEF.modules(\n\nbeef_obj: 'required beef_obj returned from #login method'\n\n)\n"}]}
1845
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinWorkspace.annotate Usage"},{"role":"assistant","content":"`PWN::Plugins::BinWorkspace.annotate`: "}]}
1846
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinWorkspace.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::BinWorkspace.authors`: "}]}
1847
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinWorkspace.for Usage"},{"role":"assistant","content":"`PWN::Plugins::BinWorkspace.for`: "}]}
1848
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinWorkspace.help Usage"},{"role":"assistant","content":"`PWN::Plugins::BinWorkspace.help`: "}]}
1849
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinWorkspace.notes Usage"},{"role":"assistant","content":"`PWN::Plugins::BinWorkspace.notes`: "}]}
1820
1850
  {"messages":[{"role":"user","content":"PWN::Plugins::BinaryParser.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::BinaryParser.authors`: "}]}
1851
+ {"messages":[{"role":"user","content":"PWN::Plugins::BinaryParser.diff Usage"},{"role":"assistant","content":"`PWN::Plugins::BinaryParser.diff`: "}]}
1821
1852
  {"messages":[{"role":"user","content":"PWN::Plugins::BinaryParser.exports Usage"},{"role":"assistant","content":"`PWN::Plugins::BinaryParser.exports`: "}]}
1822
1853
  {"messages":[{"role":"user","content":"PWN::Plugins::BinaryParser.format_name Usage"},{"role":"assistant","content":"`PWN::Plugins::BinaryParser.format_name`: "}]}
1823
1854
  {"messages":[{"role":"user","content":"PWN::Plugins::BinaryParser.help Usage"},{"role":"assistant","content":"`PWN::Plugins::BinaryParser.help`: "}]}
@@ -1893,6 +1924,10 @@
1893
1924
  {"messages":[{"role":"user","content":"PWN::Plugins::BusPirate.disconnect Usage"},{"role":"assistant","content":"`PWN::Plugins::BusPirate.disconnect`: Supported Method Parameters\n\nPWN::Plugins::BusPirate.disconnect(\n\nbus_pirate_obj: 'required - bus_pirate_obj returned from #connect method'\n\n)\n"}]}
1894
1925
  {"messages":[{"role":"user","content":"PWN::Plugins::BusPirate.help Usage"},{"role":"assistant","content":"`PWN::Plugins::BusPirate.help`: "}]}
1895
1926
  {"messages":[{"role":"user","content":"PWN::Plugins::BusPirate.init_mode Usage"},{"role":"assistant","content":"`PWN::Plugins::BusPirate.init_mode`: Supported Method Parameters\n\nPWN::Plugins::BusPirate.init_mode(\n\nbus_pirate_obj: 'required - bus_pirate_obj returned from #connect method'\nmode: 'required - bus pirate mode to invoke'\n"}]}
1927
+ {"messages":[{"role":"user","content":"PWN::Plugins::Capability.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Capability.authors`: "}]}
1928
+ {"messages":[{"role":"user","content":"PWN::Plugins::Capability.grantable_caps Usage"},{"role":"assistant","content":"`PWN::Plugins::Capability.grantable_caps`: "}]}
1929
+ {"messages":[{"role":"user","content":"PWN::Plugins::Capability.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Capability.help`: "}]}
1930
+ {"messages":[{"role":"user","content":"PWN::Plugins::Capability.request Usage"},{"role":"assistant","content":"`PWN::Plugins::Capability.request`: "}]}
1896
1931
  {"messages":[{"role":"user","content":"PWN::Plugins::Char.arrows Usage"},{"role":"assistant","content":"`PWN::Plugins::Char.arrows`: Supported Method Parameters\n\nPWN::Plugins::Char.arrows\n"}]}
1897
1932
  {"messages":[{"role":"user","content":"PWN::Plugins::Char.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Char.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1898
1933
  {"messages":[{"role":"user","content":"PWN::Plugins::Char.block_elements Usage"},{"role":"assistant","content":"`PWN::Plugins::Char.block_elements`: Supported Method Parameters\n\nPWN::Plugins::Char.block_elements\n"}]}
@@ -1996,12 +2031,19 @@
1996
2031
  {"messages":[{"role":"user","content":"PWN::Plugins::DetectOS.scan_path_executables Usage"},{"role":"assistant","content":"`PWN::Plugins::DetectOS.scan_path_executables`: "}]}
1997
2032
  {"messages":[{"role":"user","content":"PWN::Plugins::DetectOS.type Usage"},{"role":"assistant","content":"`PWN::Plugins::DetectOS.type`: "}]}
1998
2033
  {"messages":[{"role":"user","content":"PWN::Plugins::DetectOS.version Usage"},{"role":"assistant","content":"`PWN::Plugins::DetectOS.version`: Supported Method Parameters\n\nPWN::Plugins::DetectOS.version(\n\nos_release: 'optional - /etc/os-release body',\nlsb_release: 'optional - /etc/lsb-release body',\nbuild_prop: 'optional - Android build.prop body',\nsw_vers: 'optional - macOS/iOS product version',\nwin_ver: 'optional - Windows ver output',\nuname_r: 'optional - uname -r string',\ntype: 'optional - OS family from #type'\n\n)\n"}]}
2034
+ {"messages":[{"role":"user","content":"PWN::Plugins::Detonate.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Detonate.authors`: "}]}
2035
+ {"messages":[{"role":"user","content":"PWN::Plugins::Detonate.detonate Usage"},{"role":"assistant","content":"`PWN::Plugins::Detonate.detonate`: "}]}
2036
+ {"messages":[{"role":"user","content":"PWN::Plugins::Detonate.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Detonate.help`: "}]}
1999
2037
  {"messages":[{"role":"user","content":"PWN::Plugins::EIN.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::EIN.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
2000
2038
  {"messages":[{"role":"user","content":"PWN::Plugins::EIN.generate Usage"},{"role":"assistant","content":"`PWN::Plugins::EIN.generate`: Supported Method Parameters\n\nPWN::Plugins::EIN.generate(\n\ncount: 'required - number of EIN numbers to generate'\n\n)\n"}]}
2001
2039
  {"messages":[{"role":"user","content":"PWN::Plugins::EIN.help Usage"},{"role":"assistant","content":"`PWN::Plugins::EIN.help`: "}]}
2040
+ {"messages":[{"role":"user","content":"PWN::Plugins::Emulator.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Emulator.authors`: "}]}
2041
+ {"messages":[{"role":"user","content":"PWN::Plugins::Emulator.emulate Usage"},{"role":"assistant","content":"`PWN::Plugins::Emulator.emulate`: "}]}
2042
+ {"messages":[{"role":"user","content":"PWN::Plugins::Emulator.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Emulator.help`: "}]}
2002
2043
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.authors`: "}]}
2003
2044
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.cve_for_cpe Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.cve_for_cpe`: "}]}
2004
2045
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.gtfobins Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.gtfobins`: "}]}
2046
+ {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.gtfobins_functions Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.gtfobins_functions`: "}]}
2005
2047
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.gtfobins_json Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.gtfobins_json`: "}]}
2006
2048
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.help Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.help`: "}]}
2007
2049
  {"messages":[{"role":"user","content":"PWN::Plugins::ExploitDB.http_get Usage"},{"role":"assistant","content":"`PWN::Plugins::ExploitDB.http_get`: "}]}
@@ -2043,6 +2085,8 @@
2043
2085
  {"messages":[{"role":"user","content":"PWN::Plugins::FileFu.untar_gz_file Usage"},{"role":"assistant","content":"`PWN::Plugins::FileFu.untar_gz_file`: Supported Method Parameters\n\nPWN::Plugins::FileFu.untar_gz_file(\n\ntar_gz_file: 'required - path to .tar.gz file',\ndestination: 'required - destination folder to save extracted contents'\n\n)\n"}]}
2044
2086
  {"messages":[{"role":"user","content":"PWN::Plugins::Findings.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.authors`: "}]}
2045
2087
  {"messages":[{"role":"user","content":"PWN::Plugins::Findings.chain Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.chain`: "}]}
2088
+ {"messages":[{"role":"user","content":"PWN::Plugins::Findings.evidence_anchor Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.evidence_anchor`: "}]}
2089
+ {"messages":[{"role":"user","content":"PWN::Plugins::Findings.evidence_verify Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.evidence_verify`: "}]}
2046
2090
  {"messages":[{"role":"user","content":"PWN::Plugins::Findings.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.help`: "}]}
2047
2091
  {"messages":[{"role":"user","content":"PWN::Plugins::Findings.query Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.query`: "}]}
2048
2092
  {"messages":[{"role":"user","content":"PWN::Plugins::Findings.record Usage"},{"role":"assistant","content":"`PWN::Plugins::Findings.record`: "}]}
@@ -2065,6 +2109,8 @@
2065
2109
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.batch Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.batch`: "}]}
2066
2110
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.breakpoints Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.breakpoints`: "}]}
2067
2111
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.core Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.core`: "}]}
2112
+ {"messages":[{"role":"user","content":"PWN::Plugins::GDB.crash_info Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.crash_info`: "}]}
2113
+ {"messages":[{"role":"user","content":"PWN::Plugins::GDB.debug_session Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.debug_session`: "}]}
2068
2114
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.help Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.help`: "}]}
2069
2115
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.mitigations Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.mitigations`: "}]}
2070
2116
  {"messages":[{"role":"user","content":"PWN::Plugins::GDB.registers Usage"},{"role":"assistant","content":"`PWN::Plugins::GDB.registers`: "}]}
@@ -2445,6 +2491,7 @@
2445
2491
  {"messages":[{"role":"user","content":"PWN::Plugins::Packet.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Packet.help`: "}]}
2446
2492
  {"messages":[{"role":"user","content":"PWN::Plugins::Packet.open_pcap_file Usage"},{"role":"assistant","content":"`PWN::Plugins::Packet.open_pcap_file`: Supported Method Parameters\n\npcap = PWN::Plugins::Packet.open_pcap_file(\n\npath: 'required - path to packet capture file'\n\n)\n"}]}
2447
2493
  {"messages":[{"role":"user","content":"PWN::Plugins::Packet.send Usage"},{"role":"assistant","content":"`PWN::Plugins::Packet.send`: Supported Method Parameters\n\nPWN::Plugins::Packet.send(\n\npkt: 'required - pkt returned from other #construct_<type> methods',\niface: 'optional - interface to send packet (defaults to eth0)',\n\n)\n"}]}
2494
+ {"messages":[{"role":"user","content":"PWN::Plugins::Packet.tcp_connect_scan Usage"},{"role":"assistant","content":"`PWN::Plugins::Packet.tcp_connect_scan`: "}]}
2448
2495
  {"messages":[{"role":"user","content":"PWN::Plugins::Pony.add_attachments Usage"},{"role":"assistant","content":"`PWN::Plugins::Pony.add_attachments`: "}]}
2449
2496
  {"messages":[{"role":"user","content":"PWN::Plugins::Pony.append_inputs Usage"},{"role":"assistant","content":"`PWN::Plugins::Pony.append_inputs`: "}]}
2450
2497
  {"messages":[{"role":"user","content":"PWN::Plugins::Pony.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Pony.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
@@ -2510,6 +2557,7 @@
2510
2557
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_model_ids Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_model_ids`: "}]}
2511
2558
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_provider_class Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_provider_class`: "}]}
2512
2559
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_run_cron Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_run_cron`: "}]}
2560
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_run_learning Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_run_learning`: "}]}
2513
2561
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_run_memory Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_run_memory`: "}]}
2514
2562
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_run_model Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_run_model`: "}]}
2515
2563
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.pwn_ai_run_sessions Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.pwn_ai_run_sessions`: "}]}
@@ -2695,14 +2743,25 @@
2695
2743
  {"messages":[{"role":"user","content":"PWN::Plugins::VIN.help Usage"},{"role":"assistant","content":"`PWN::Plugins::VIN.help`: "}]}
2696
2744
  {"messages":[{"role":"user","content":"PWN::Plugins::VIN.vin_rest_call Usage"},{"role":"assistant","content":"`PWN::Plugins::VIN.vin_rest_call`: "}]}
2697
2745
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
2746
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.box_path Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.box_path`: "}]}
2698
2747
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.create Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.create`: Supported Method Parameters\n\nPWN::Plugins::Vault.create(\n\nfile: 'required - encrypted file to create',\ndecryptor_file: 'optional - file to save the key && iv values'\n\n)\n"}]}
2699
2748
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.decrypt Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.decrypt`: Supported Method Parameters\n\nPWN::Plugins::Vault.decrypt(\n\nfile: 'required - file to decrypt',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt'\n\n)\n"}]}
2749
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.decrypt_secret Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.decrypt_secret`: "}]}
2700
2750
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.dump Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.dump`: Supported Method Parameters\n\nvault = PWN::Plugins::Vault.dump(\n\nfile: 'required - file to dump',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt',\nyaml: 'optional - dump as parsed yaml hash (default: true)'\n\n)\n"}]}
2701
2751
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.edit Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.edit`: Supported Method Parameters\n\nPWN::Plugins::Vault.edit(\n\nfile: 'required - file to edit',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt',\neditor: 'optional - editor to use (default: \"/usr/bin/vim\")'\n\n)\n"}]}
2702
2752
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.encrypt Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.encrypt`: Supported Method Parameters\n\nPWN::Plugins::Vault.encrypt(\n\nfile: 'required - file to encrypt',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt'\n\n)\n"}]}
2753
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.encrypt_secret Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.encrypt_secret`: "}]}
2754
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.expand Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.expand`: "}]}
2755
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.fetch Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.fetch`: "}]}
2703
2756
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.file_encrypted? Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.file_encrypted?`: Supported Method Parameters\n\nPWN::Plugins::Vault.file_encrypted?(\n\nfile: 'required - file to check if encrypted'\n\n)\n"}]}
2704
2757
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.help`: "}]}
2758
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.key_path Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.key_path`: "}]}
2759
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.load_box Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.load_box`: "}]}
2760
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.master_key Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.master_key`: "}]}
2761
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.redact Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.redact`: "}]}
2705
2762
  {"messages":[{"role":"user","content":"PWN::Plugins::Vault.refresh_encryption_secrets Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.refresh_encryption_secrets`: Supported Method Parameters\n\nPWN::Plugins::Vault.refresh_encryption_secrets(\n\nfile: 'required - file to encrypt with new key and iv',\nkey: 'required - key to decrypt',\niv: 'required - iv to decrypt'\n\n)\n"}]}
2763
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.save_box Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.save_box`: "}]}
2764
+ {"messages":[{"role":"user","content":"PWN::Plugins::Vault.store Usage"},{"role":"assistant","content":"`PWN::Plugins::Vault.store`: "}]}
2706
2765
  {"messages":[{"role":"user","content":"PWN::Plugins::Voice.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Voice.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
2707
2766
  {"messages":[{"role":"user","content":"PWN::Plugins::Voice.help Usage"},{"role":"assistant","content":"`PWN::Plugins::Voice.help`: "}]}
2708
2767
  {"messages":[{"role":"user","content":"PWN::Plugins::Voice.mutate Usage"},{"role":"assistant","content":"`PWN::Plugins::Voice.mutate`: Supported Method Parameters\n\nresponse = PWN::Plugins::Voice.mutate(\n\nsox_path: 'optional - path to sox application (defaults to /usr/bin/sox)',\npitch: 'optional - integer to alter voice input (defaults to -300)'\n\n)\n"}]}
@@ -2751,6 +2810,10 @@
2751
2810
  {"messages":[{"role":"user","content":"PWN::Reports::CSV.authors Usage"},{"role":"assistant","content":"`PWN::Reports::CSV.authors`: "}]}
2752
2811
  {"messages":[{"role":"user","content":"PWN::Reports::CSV.generate Usage"},{"role":"assistant","content":"`PWN::Reports::CSV.generate`: "}]}
2753
2812
  {"messages":[{"role":"user","content":"PWN::Reports::CSV.help Usage"},{"role":"assistant","content":"`PWN::Reports::CSV.help`: "}]}
2813
+ {"messages":[{"role":"user","content":"PWN::Reports::Engagement.authors Usage"},{"role":"assistant","content":"`PWN::Reports::Engagement.authors`: "}]}
2814
+ {"messages":[{"role":"user","content":"PWN::Reports::Engagement.generate Usage"},{"role":"assistant","content":"`PWN::Reports::Engagement.generate`: "}]}
2815
+ {"messages":[{"role":"user","content":"PWN::Reports::Engagement.help Usage"},{"role":"assistant","content":"`PWN::Reports::Engagement.help`: "}]}
2816
+ {"messages":[{"role":"user","content":"PWN::Reports::Engagement.severity_rank Usage"},{"role":"assistant","content":"`PWN::Reports::Engagement.severity_rank`: "}]}
2754
2817
  {"messages":[{"role":"user","content":"PWN::Reports::Fuzz.authors Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
2755
2818
  {"messages":[{"role":"user","content":"PWN::Reports::Fuzz.generate Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.generate`: Supported Method Parameters\n\nPWN::Reports::Fuzz.generate(\n\ndir_path: dir_path,\nresults_hash: results_hash,\nchar_encoding: 'optional - character encoding returned by PWN::Plugins::Char.list_encoders (defaults to UTF-8)'\n\n)\n"}]}
2756
2819
  {"messages":[{"role":"user","content":"PWN::Reports::Fuzz.help Usage"},{"role":"assistant","content":"`PWN::Reports::Fuzz.help`: "}]}