pwn 0.5.562 → 0.5.587

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.
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'fileutils'
5
+ require 'time'
6
+ require 'securerandom'
7
+
8
+ module PWN
9
+ # PWN::Sessions provides session management for pwn-ai (and other drivers)
10
+ # equivalent to Hermes sessions (list, resume, transcripts, stats).
11
+ # Sessions are stored as JSONL transcripts in ~/.pwn/sessions/ for durability
12
+ # and easy search/append. pwn-ai agent mode auto-creates and appends to a
13
+ # session on each activation.
14
+ module Sessions
15
+ SESSIONS_DIR = File.join(Dir.home, '.pwn', 'sessions')
16
+
17
+ # Supported Method Parameters::
18
+ # dir = PWN::Sessions.sessions_dir
19
+ public_class_method def self.sessions_dir
20
+ FileUtils.mkdir_p(SESSIONS_DIR)
21
+ SESSIONS_DIR
22
+ end
23
+
24
+ # Supported Method Parameters::
25
+ # sessions = PWN::Sessions.list
26
+ public_class_method def self.list
27
+ dir = sessions_dir
28
+ Dir.glob(File.join(dir, '*.jsonl')).reverse.map do |f|
29
+ {
30
+ id: File.basename(f, '.jsonl'),
31
+ path: f,
32
+ size: File.size(f),
33
+ mtime: File.mtime(f).utc.iso8601,
34
+ lines: File.readlines(f).count
35
+ }
36
+ end
37
+ end
38
+
39
+ # Supported Method Parameters::
40
+ # session = PWN::Sessions.create(
41
+ # title: 'optional - human title',
42
+ # source: 'optional - e.g. pwn-ai-repl'
43
+ # )
44
+ public_class_method def self.create(opts = {})
45
+ dir = sessions_dir
46
+ ts = Time.now.utc.strftime('%Y%m%d_%H%M%S')
47
+ rand = SecureRandom.hex(4)
48
+ id = "#{ts}_#{rand}"
49
+ path = File.join(dir, "#{id}.jsonl")
50
+
51
+ meta = {
52
+ id: id,
53
+ title: opts[:title] || "pwn-ai session #{id}",
54
+ source: opts[:source] || 'pwn-ai',
55
+ created_at: Time.now.utc.iso8601
56
+ }
57
+
58
+ File.open(path, 'w') do |f|
59
+ f.puts(JSON.dump(role: 'system', content: "Session started: #{meta[:title]}", timestamp: meta[:created_at]))
60
+ end
61
+ { id: id, path: path, meta: meta }
62
+ end
63
+
64
+ # Supported Method Parameters::
65
+ # PWN::Sessions.append(
66
+ # session_id: 'required',
67
+ # role: 'user|assistant|system|observation',
68
+ # content: 'the message or obs'
69
+ # )
70
+ public_class_method def self.append(opts = {})
71
+ sid = opts[:session_id]
72
+ raise 'ERROR: session_id required' unless sid
73
+
74
+ path = File.join(sessions_dir, "#{sid}.jsonl")
75
+ raise "Session #{sid} not found" unless File.exist?(path)
76
+
77
+ entry = {
78
+ role: opts[:role] || 'user',
79
+ content: opts[:content],
80
+ timestamp: Time.now.utc.iso8601
81
+ }
82
+ File.open(path, 'a') { |f| f.puts(JSON.dump(entry)) }
83
+ entry
84
+ end
85
+
86
+ # Supported Method Parameters::
87
+ # transcript = PWN::Sessions.load(session_id: 'required')
88
+ public_class_method def self.load(opts = {})
89
+ sid = opts[:session_id]
90
+ path = File.join(sessions_dir, "#{sid}.jsonl")
91
+ return [] unless File.exist?(path)
92
+
93
+ File.readlines(path).map { |l| JSON.parse(l, symbolize_names: true) }
94
+ end
95
+
96
+ # Supported Method Parameters::
97
+ # history_for_ai = PWN::Sessions.to_response_history(session_id:)
98
+ # (converts transcript to the response_history format used by PWN::AI::* .chat)
99
+ public_class_method def self.to_response_history(opts = {})
100
+ transcript = load(session_id: opts[:session_id])
101
+ choices = transcript.map do |e|
102
+ {
103
+ role: e[:role],
104
+ content: e[:content]
105
+ }
106
+ end
107
+
108
+ {
109
+ id: opts[:session_id],
110
+ object: 'session.transcript',
111
+ model: 'pwn-ai',
112
+ usage: {},
113
+ choices: choices
114
+ }
115
+ end
116
+
117
+ # Supported Method Parameters::
118
+ # PWN::Sessions.delete(session_id:)
119
+ public_class_method def self.delete(opts = {}) # rubocop:disable Naming/PredicateMethod
120
+ sid = opts[:session_id]
121
+ path = File.join(sessions_dir, "#{sid}.jsonl")
122
+ FileUtils.rm_f(path)
123
+ true
124
+ end
125
+
126
+ # Supported Method Parameters::
127
+ # stats = PWN::Sessions.stats
128
+ public_class_method def self.stats
129
+ sessions = list
130
+ {
131
+ total_sessions: sessions.size,
132
+ total_lines: sessions.sum { |s| s[:lines] },
133
+ oldest: sessions.last ? sessions.last[:mtime] : nil,
134
+ newest: sessions.first ? sessions.first[:mtime] : nil
135
+ }
136
+ end
137
+
138
+ # Author(s):: 0day Inc. <support@0dayinc.com>
139
+
140
+ public_class_method def self.authors
141
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
142
+ end
143
+
144
+ # Display Usage for this Module
145
+ public_class_method def self.help
146
+ puts <<~USAGE
147
+ USAGE:
148
+ sess = PWN::Sessions.create(title: 'recon on target.com')
149
+ PWN::Sessions.append(session_id: sess[:id], role: 'user', content: 'Run NmapIt...')
150
+ transcript = PWN::Sessions.load(session_id: sess[:id])
151
+ hist = PWN::Sessions.to_response_history(session_id: sess[:id])
152
+ PWN::Sessions.list
153
+ PWN::Sessions.stats
154
+ PWN::Sessions.delete(session_id: sess[:id])
155
+
156
+ #{self}.authors
157
+ USAGE
158
+ end
159
+ end
160
+ end
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.5.562'
4
+ VERSION = '0.5.587'
5
5
  end
data/lib/pwn.rb CHANGED
@@ -13,8 +13,12 @@ module PWN
13
13
  autoload :AI, 'pwn/ai'
14
14
  autoload :AWS, 'pwn/aws'
15
15
  autoload :Banner, 'pwn/banner'
16
+ autoload :Bounty, 'pwn/bounty'
16
17
  autoload :Blockchain, 'pwn/blockchain'
17
18
  autoload :Config, 'pwn/config'
19
+ autoload :Cron, 'pwn/cron'
20
+ autoload :Memory, 'pwn/memory'
21
+ autoload :Sessions, 'pwn/sessions'
18
22
  autoload :Driver, 'pwn/driver'
19
23
  autoload :FFI, 'pwn/ffi'
20
24
  autoload :Plugins, 'pwn/plugins'
data/pwn.gemspec CHANGED
@@ -53,11 +53,13 @@ Gem::Specification.new do |spec|
53
53
  ]
54
54
 
55
55
  File.readlines('./Gemfile').each do |line|
56
- columns = line.chomp.split
57
- next unless columns.first == 'gem'
56
+ # Robust parser: extract name and version using regex to handle quotes, operators (>=, <), and avoid empty/invalid versions.
57
+ # Anchor with ^\\s* to only match active (non-commented) gem declarations at start of line.
58
+ match = line.match(/^\s*gem\s+['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]/)
59
+ next unless match
58
60
 
59
- gem_name = columns[1].delete("'").delete(',')
60
- gem_version = columns.last.delete("'")
61
+ gem_name = match[1]
62
+ gem_version = match[2]
61
63
 
62
64
  # Good for debugging issues in Gemfile
63
65
  # puts "pwn.gemspec: Adding dependency: #{gem_name} #{gem_version}"
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::AI::Anthropic do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::AI::Anthropic
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::AI::Anthropic
13
+ expect(help_response).to respond_to :help
14
+ end
15
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'tmpdir'
5
+
6
+ RSpec.describe PWN::Bounty::LifecycleAuthzReplay do
7
+ it 'builds a normalized evidence bundle and flags stale access' do
8
+ Dir.mktmpdir('lifecycle-authz-replay-spec-') do |tmp_dir|
9
+ run_obj = described_class.start_run(
10
+ plan: {
11
+ campaign: {
12
+ id: 'acme-revoke-collaborator',
13
+ target: 'https://example.test',
14
+ change_event: 'remove_collaborator'
15
+ },
16
+ actors: %w[owner revoked_user],
17
+ surfaces: ['repo_settings_page'],
18
+ checkpoints: %w[pre_change post_change_t0],
19
+ expected_denied_after: ['post_change_t0']
20
+ },
21
+ output_dir: tmp_dir,
22
+ run_id: 'rspec-run'
23
+ )
24
+
25
+ described_class.record_observation(
26
+ run_obj: run_obj,
27
+ checkpoint: 'pre_change',
28
+ actor: 'owner',
29
+ surface: 'repo_settings_page',
30
+ status: :accessible,
31
+ response: { http_status: 200 }
32
+ )
33
+
34
+ described_class.record_observation(
35
+ run_obj: run_obj,
36
+ checkpoint: 'post_change_t0',
37
+ actor: 'revoked_user',
38
+ surface: 'repo_settings_page',
39
+ status: :accessible,
40
+ response: { http_status: 200 },
41
+ notes: 'Still accessible after collaborator removal'
42
+ )
43
+
44
+ summary = described_class.finalize_run(run_obj: run_obj)
45
+
46
+ expect(summary[:totals][:stale_access_findings]).to eq(1)
47
+ expect(File).to exist(File.join(tmp_dir, 'rspec-run', 'RUNBOOK.md'))
48
+ expect(File).to exist(File.join(tmp_dir, 'rspec-run', 'coverage_matrix.json'))
49
+ expect(File).to exist(File.join(tmp_dir, 'rspec-run', 'SUMMARY.json'))
50
+ expect(File).to exist(File.join(tmp_dir, 'rspec-run', 'REPORT.md'))
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Bounty do
6
+ it 'should return data for help method' do
7
+ help_response = PWN::Bounty.help
8
+ expect(help_response).not_to be_nil
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Cron do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::Cron
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::Cron
13
+ expect(help_response).to respond_to :help
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Memory do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::Memory
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::Memory
13
+ expect(help_response).to respond_to :help
14
+ end
15
+
16
+ it 'should support remember/recall/forget/clear' do
17
+ PWN::Memory.clear
18
+ PWN::Memory.remember(key: :test_fact, value: 'pwn-ai test memory', category: :fact)
19
+ res = PWN::Memory.recall(query: 'test')
20
+ expect(res.keys).to include(:test_fact)
21
+ PWN::Memory.forget(:test_fact)
22
+ expect(PWN::Memory.recall(query: 'test').keys).to be_empty
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::Sessions do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::Sessions
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::Sessions
13
+ expect(help_response).to respond_to :help
14
+ end
15
+
16
+ it 'should support create/list/append/load/delete' do
17
+ s = PWN::Sessions.create(title: 'spec test session')
18
+ expect(s[:id]).not_to be_nil
19
+ PWN::Sessions.append(session_id: s[:id], role: 'user', content: 'test input')
20
+ t = PWN::Sessions.load(session_id: s[:id])
21
+ expect(t.size).to be >= 2
22
+ PWN::Sessions.delete(session_id: s[:id])
23
+ expect(PWN::Sessions.list.any? { |x| x[:id] == s[:id] }).to be false
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'tmpdir'
5
+ require 'pwn'
6
+
7
+ # Smoke test for lifecycle authz replay (minitest, not rspec). Docs in main spec.
8
+ class LifecycleAuthzReplaySmokeTest < Minitest::Test
9
+ def test_builds_evidence_bundle_and_flags_stale_access
10
+ Dir.mktmpdir('lifecycle-authz-replay-smoke-') do |tmp_dir|
11
+ plan = {
12
+ campaign: {
13
+ id: 'acme-revoke-collaborator',
14
+ target: 'https://example.test',
15
+ change_event: 'remove_collaborator'
16
+ },
17
+ actors: %w[owner revoked_user],
18
+ surfaces: ['repo_settings_page'],
19
+ checkpoints: %w[pre_change post_change_t0],
20
+ expected_denied_after: ['post_change_t0']
21
+ }
22
+
23
+ run_obj = PWN::Bounty::LifecycleAuthzReplay.start_run(
24
+ plan: plan,
25
+ output_dir: tmp_dir,
26
+ run_id: 'smoke-run'
27
+ )
28
+
29
+ PWN::Bounty::LifecycleAuthzReplay.record_observation(
30
+ run_obj: run_obj,
31
+ checkpoint: 'pre_change',
32
+ actor: 'owner',
33
+ surface: 'repo_settings_page',
34
+ status: :accessible,
35
+ response: { http_status: 200 }
36
+ )
37
+
38
+ PWN::Bounty::LifecycleAuthzReplay.record_observation(
39
+ run_obj: run_obj,
40
+ checkpoint: 'post_change_t0',
41
+ actor: 'revoked_user',
42
+ surface: 'repo_settings_page',
43
+ status: :accessible,
44
+ response: { http_status: 200 },
45
+ notes: 'Still accessible after collaborator removal'
46
+ )
47
+
48
+ summary = PWN::Bounty::LifecycleAuthzReplay.finalize_run(
49
+ run_obj: run_obj
50
+ )
51
+
52
+ assert_equal(1, summary[:totals][:stale_access_findings])
53
+ assert(File.exist?(File.join(tmp_dir, 'smoke-run', 'RUNBOOK.md')))
54
+ assert(File.exist?(File.join(tmp_dir, 'smoke-run', 'coverage_matrix.json')))
55
+ assert(File.exist?(File.join(tmp_dir, 'smoke-run', 'SUMMARY.json')))
56
+ assert(File.exist?(File.join(tmp_dir, 'smoke-run', 'REPORT.md')))
57
+ end
58
+ end
59
+ end
@@ -22,9 +22,14 @@
22
22
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::TransparentBrowser.analyze(\n\nrequest: 'required - current step in the JavaScript debugging session to analyze',\nsource_to_review: 'required - the block of JavaScript code in which the current step resides'\n\n)\n"}]}
23
23
  {"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"}]}
24
24
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.help`: "}]}
25
- {"messages":[{"role":"user","content":"PWN::AI::Agent::VulnGen.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::VulnGen.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::VulnGen.analyze(\n\nrequest: 'required - high level description of vulnerability discovered (e.g. \"Discovered a SQLi vulnerability in /login\"',\nmarkup_type: 'optional - specify the type of markup to generate :jira|:markdown|:html|:confluence|:xml (default: :jira)'\n\n)\n"}]}
25
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::VulnGen.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::VulnGen.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::VulnGen.analyze(\n\nrequest: 'required - high level description of vulnerability discovered (e.g. \"Discovered a SQLi vulnerability in /login\"',\nmarkup_type: 'optional - specify the type of markup to generate :jira|:markdown|:html|:confluence|:xml (default: :jira)',\noutput_path: 'optional - path to save the generated markdown report'\n\n)\n"}]}
26
26
  {"messages":[{"role":"user","content":"PWN::AI::Agent::VulnGen.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::VulnGen.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
27
27
  {"messages":[{"role":"user","content":"PWN::AI::Agent::VulnGen.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::VulnGen.help`: "}]}
28
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.anthropic_rest_call Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.anthropic_rest_call`: Supported Method Parameters\n\nanthropic_rest_call(\n\ntoken: 'required - anthropic api key',\nhttp_method: 'optional HTTP method (defaults to GET)',\nbase_uri: 'optional base anthropic api URI (defaults to https://api.anthropic.com/v1)',\nrest_call: 'required rest call to make per the schema',\nparams: 'optional params passed in the URI or HTTP Headers',\nhttp_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST',\ntimeout: 'optional timeout in seconds (defaults to 300)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
29
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.authors Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
30
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.chat Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Anthropic.chat(\n\nrequest: 'required - message to Anthropic',\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:anthropic][:model])',\ntemp: 'optional - creative response float (defaults to PWN::Env[:ai][:anthropic][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:anthropic][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 300)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
31
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.get_models Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.get_models`: Supported Method Parameters\n\nmodels = PWN::AI::Anthropic.get_models\n"}]}
32
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.help Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.help`: "}]}
28
33
  {"messages":[{"role":"user","content":"PWN::AI::Grok.authors Usage"},{"role":"assistant","content":"`PWN::AI::Grok.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
29
34
  {"messages":[{"role":"user","content":"PWN::AI::Grok.chat Usage"},{"role":"assistant","content":"`PWN::AI::Grok.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Grok.chat(\n\nrequest: 'required - message to Grok'\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:grok][:model])',\ntemp: 'optional - creative response float (deafults to PWN::Env[:ai][:grok][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:grok][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 300)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
30
35
  {"messages":[{"role":"user","content":"PWN::AI::Grok.get_models Usage"},{"role":"assistant","content":"`PWN::AI::Grok.get_models`: Supported Method Parameters\n\nmodels = PWN::AI::Grok.get_models\n"}]}
@@ -482,12 +487,50 @@
482
487
  {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.get_block_details Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.get_block_details`: Supported Method Parameters\n\nPWN::Blockchain::ETH.get_block_details(\n\nheight: 'required - block height number',\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
483
488
  {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.get_latest_block Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.get_latest_block`: Supported Method Parameters\n\nlatest_block = PWN::Blockchain::ETH.get_latest_block(\n\ntoken: 'optional - API token for higher rate limits'\n\n)\n"}]}
484
489
  {"messages":[{"role":"user","content":"PWN::Blockchain::ETH.help Usage"},{"role":"assistant","content":"`PWN::Blockchain::ETH.help`: "}]}
490
+ {"messages":[{"role":"user","content":"PWN::Bounty.help Usage"},{"role":"assistant","content":"`PWN::Bounty.help`: "}]}
491
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.authors Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
492
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.build_coverage_matrix Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.build_coverage_matrix`: "}]}
493
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.finalize_run Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.finalize_run`: Supported Method Parameters\n\nsummary = PWN::Bounty::LifecycleAuthzReplay.finalize_run(\n\nrun_obj: run_obj\n\n)\n"}]}
494
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.find_coverage_cell Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.find_coverage_cell`: "}]}
495
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.find_stale_access_findings Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.find_stale_access_findings`: "}]}
496
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.help Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.help`: "}]}
497
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.load_plan Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.load_plan`: Supported Method Parameters\n\nplan = PWN::Bounty::LifecycleAuthzReplay.load_plan(\n\nyaml_path: '/path/to/lifecycle_authz_replay.yaml'\n\n)\n"}]}
498
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.normalize_named_records Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.normalize_named_records`: "}]}
499
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.normalize_plan Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.normalize_plan`: Supported Method Parameters\n\nplan = PWN::Bounty::LifecycleAuthzReplay.normalize_plan(\n\nplan: {\n campaign: { id: 'acme-revoke' },\n actors: ['owner', 'revoked_user'],\n surfaces: ['repo_settings'],\n checkpoints: ['pre_change', 'post_change_t0']\n}\n\n)\n"}]}
500
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.normalize_token Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.normalize_token`: "}]}
501
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.record_observation Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.record_observation`: Supported Method Parameters\n\nPWN::Bounty::LifecycleAuthzReplay.record_observation(\n\nrun_obj: run_obj,\ncheckpoint: 'post_change_t0',\nactor: 'revoked_user',\nsurface: 'repo_settings_page',\nstatus: :accessible,\nrequest: { method: 'GET', path: '/org/repo/settings' },\nresponse: { http_status: 200 },\nnotes: 'Still reachable after collaborator removal',\nartifact_paths: ['/tmp/screen.png']\n\n)\n"}]}
502
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.start_run Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.start_run`: Supported Method Parameters\n\nrun_obj = PWN::Bounty::LifecycleAuthzReplay.start_run(\n\nyaml_path: '/path/to/lifecycle_authz_replay.yaml',\noutput_dir: '/tmp/evidence_bundle'\n\n)\n\nOR run_obj = PWN::Bounty::LifecycleAuthzReplay.start_run(\n\nplan: normalized_plan_hash,\noutput_dir: '/tmp/evidence_bundle'\n\n)\n"}]}
503
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.symbolize_obj Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.symbolize_obj`: "}]}
504
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.write_coverage_markdown Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.write_coverage_markdown`: "}]}
505
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.write_json Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.write_json`: "}]}
506
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.write_report Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.write_report`: "}]}
507
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.write_runbook Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.write_runbook`: "}]}
508
+ {"messages":[{"role":"user","content":"PWN::Bounty::LifecycleAuthzReplay.write_yaml Usage"},{"role":"assistant","content":"`PWN::Bounty::LifecycleAuthzReplay.write_yaml`: "}]}
485
509
  {"messages":[{"role":"user","content":"PWN::Config.authors Usage"},{"role":"assistant","content":"`PWN::Config.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
486
510
  {"messages":[{"role":"user","content":"PWN::Config.default_env Usage"},{"role":"assistant","content":"`PWN::Config.default_env`: Supported Method Parameters\n\nenv = PWN::Config.default_env(\n\npwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml'\n\n)\n"}]}
487
511
  {"messages":[{"role":"user","content":"PWN::Config.help Usage"},{"role":"assistant","content":"`PWN::Config.help`: "}]}
488
512
  {"messages":[{"role":"user","content":"PWN::Config.init_driver_options Usage"},{"role":"assistant","content":"`PWN::Config.init_driver_options`: Supported Method Parameters\n\nenv = PWN::Config.init_driver_options\n"}]}
513
+ {"messages":[{"role":"user","content":"PWN::Config.load_memory Usage"},{"role":"assistant","content":"`PWN::Config.load_memory`: Supported Method Parameters\n\nPWN::Config.load_memory\n"}]}
514
+ {"messages":[{"role":"user","content":"PWN::Config.load_skills Usage"},{"role":"assistant","content":"`PWN::Config.load_skills`: Supported Method Parameters\n\nskills = PWN::Config.load_skills(\n\npwn_skills_path: 'optional - Path to skills folder. Defaults to ~/.pwn/skills'\n\n)\n\nLoads instruction-based skills (.md, .txt, .skill, .yaml) and executable Ruby skills (.rb) into PWN::Skills constant (hash of basename => {type, path, content, loaded?}). The pwn-ai command (REPL driver) loads and is aware of this folder to expand autonomous agent capabilities (equivalent to Hermes agent TUI skills for task execution).\n"}]}
515
+ {"messages":[{"role":"user","content":"PWN::Config.pwn_cron_path Usage"},{"role":"assistant","content":"`PWN::Config.pwn_cron_path`: Supported Method Parameters\n\npath = PWN::Config.pwn_cron_path\n"}]}
516
+ {"messages":[{"role":"user","content":"PWN::Config.pwn_memory_path Usage"},{"role":"assistant","content":"`PWN::Config.pwn_memory_path`: Supported Method Parameters\n\npath = PWN::Config.pwn_memory_path\n"}]}
517
+ {"messages":[{"role":"user","content":"PWN::Config.pwn_sessions_path Usage"},{"role":"assistant","content":"`PWN::Config.pwn_sessions_path`: Supported Method Parameters\n\npath = PWN::Config.pwn_sessions_path\n"}]}
518
+ {"messages":[{"role":"user","content":"PWN::Config.pwn_skills_path Usage"},{"role":"assistant","content":"`PWN::Config.pwn_skills_path`: Supported Method Parameters\n\npwn_skills_path = PWN::Config.pwn_skills_path(\n\npwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml'\n\n)\n"}]}
489
519
  {"messages":[{"role":"user","content":"PWN::Config.redact_sensitive_artifacts Usage"},{"role":"assistant","content":"`PWN::Config.redact_sensitive_artifacts`: Supported Method Parameters\n\nPWN::Config.redact_sensitive_artifacts(\n\nconfig: 'optional - Hash to redact sensitive artifacts from. Defaults to PWN::Env'\n\n)\n"}]}
490
520
  {"messages":[{"role":"user","content":"PWN::Config.refresh_env Usage"},{"role":"assistant","content":"`PWN::Config.refresh_env`: Supported Method Parameters\n\nPWN::Config.refresh_env(\n\npwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml',\npwn_dec_path: 'optional - Path to pwn.yaml.decryptor file. Defaults to ~/.pwn/pwn.yaml.decryptor'\n\n)\n"}]}
521
+ {"messages":[{"role":"user","content":"PWN::Cron.authors Usage"},{"role":"assistant","content":"`PWN::Cron.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
522
+ {"messages":[{"role":"user","content":"PWN::Cron.create Usage"},{"role":"assistant","content":"`PWN::Cron.create`: Supported Method Parameters\n\njob = PWN::Cron.create(\n\nname: 'optional',\nschedule: 'required e.g. \"0 * * * *\" or \"30m\" or \"every 2h\"',\nprompt: 'optional - pwn-ai prompt to run',\nruby: 'optional - ruby snippet to eval',\nscript: 'optional - path to external script',\ndelivery: 'log|stdout (default log)',\nenabled: true\n\n)\n"}]}
523
+ {"messages":[{"role":"user","content":"PWN::Cron.cron_dir Usage"},{"role":"assistant","content":"`PWN::Cron.cron_dir`: Supported Method Parameters\n\ndir = PWN::Cron.cron_dir\n"}]}
524
+ {"messages":[{"role":"user","content":"PWN::Cron.disable Usage"},{"role":"assistant","content":"`PWN::Cron.disable`: "}]}
525
+ {"messages":[{"role":"user","content":"PWN::Cron.enable Usage"},{"role":"assistant","content":"`PWN::Cron.enable`: Supported Method Parameters\n\nPWN::Cron.enable/disable(id:)\n"}]}
526
+ {"messages":[{"role":"user","content":"PWN::Cron.help Usage"},{"role":"assistant","content":"`PWN::Cron.help`: "}]}
527
+ {"messages":[{"role":"user","content":"PWN::Cron.install_crontab_entry Usage"},{"role":"assistant","content":"`PWN::Cron.install_crontab_entry`: "}]}
528
+ {"messages":[{"role":"user","content":"PWN::Cron.list Usage"},{"role":"assistant","content":"`PWN::Cron.list`: Supported Method Parameters\n\njobs = PWN::Cron.list\n"}]}
529
+ {"messages":[{"role":"user","content":"PWN::Cron.load_jobs Usage"},{"role":"assistant","content":"`PWN::Cron.load_jobs`: "}]}
530
+ {"messages":[{"role":"user","content":"PWN::Cron.remove Usage"},{"role":"assistant","content":"`PWN::Cron.remove`: Supported Method Parameters\n\nPWN::Cron.remove(id:)\n"}]}
531
+ {"messages":[{"role":"user","content":"PWN::Cron.run Usage"},{"role":"assistant","content":"`PWN::Cron.run`: Supported Method Parameters\n\nPWN::Cron.run(id: ‘required or name’) Executes the job (for pwn-ai prompt it will use current active AI engine via PWN::AI::* but without full REPL hook unless in pwn-ai).\n"}]}
532
+ {"messages":[{"role":"user","content":"PWN::Cron.save_jobs Usage"},{"role":"assistant","content":"`PWN::Cron.save_jobs`: "}]}
533
+ {"messages":[{"role":"user","content":"PWN::Cron.toggle Usage"},{"role":"assistant","content":"`PWN::Cron.toggle`: "}]}
491
534
  {"messages":[{"role":"user","content":"PWN::Driver.authors Usage"},{"role":"assistant","content":"`PWN::Driver.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
492
535
  {"messages":[{"role":"user","content":"PWN::Driver.help Usage"},{"role":"assistant","content":"`PWN::Driver.help`: "}]}
493
536
  {"messages":[{"role":"user","content":"PWN::Driver::Parser.new Usage"},{"role":"assistant","content":"`PWN::Driver::Parser.new`: "}]}
@@ -495,6 +538,15 @@
495
538
  {"messages":[{"role":"user","content":"PWN::FFI.help Usage"},{"role":"assistant","content":"`PWN::FFI.help`: "}]}
496
539
  {"messages":[{"role":"user","content":"PWN::FFI::Stdio.authors Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
497
540
  {"messages":[{"role":"user","content":"PWN::FFI::Stdio.help Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.help`: "}]}
541
+ {"messages":[{"role":"user","content":"PWN::Memory.authors Usage"},{"role":"assistant","content":"`PWN::Memory.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
542
+ {"messages":[{"role":"user","content":"PWN::Memory.clear Usage"},{"role":"assistant","content":"`PWN::Memory.clear`: Supported Method Parameters\n\nPWN::Memory.clear\n"}]}
543
+ {"messages":[{"role":"user","content":"PWN::Memory.forget Usage"},{"role":"assistant","content":"`PWN::Memory.forget`: Supported Method Parameters\n\nPWN::Memory.forget(key)\n"}]}
544
+ {"messages":[{"role":"user","content":"PWN::Memory.help Usage"},{"role":"assistant","content":"`PWN::Memory.help`: "}]}
545
+ {"messages":[{"role":"user","content":"PWN::Memory.load Usage"},{"role":"assistant","content":"`PWN::Memory.load`: Supported Method Parameters\n\nmemory = PWN::Memory.load\n"}]}
546
+ {"messages":[{"role":"user","content":"PWN::Memory.recall Usage"},{"role":"assistant","content":"`PWN::Memory.recall`: Supported Method Parameters\n\nresults = PWN::Memory.recall(\n\nquery: 'optional - string to search keys/values/categories (simple match)',\ncategory: 'optional - filter by category',\nlimit: 'optional - max results (default 50)'\n\n)\n"}]}
547
+ {"messages":[{"role":"user","content":"PWN::Memory.remember Usage"},{"role":"assistant","content":"`PWN::Memory.remember`: Supported Method Parameters\n\nPWN::Memory.remember(\n\nkey: 'required - Symbol or String key for the memory fact',\nvalue: 'required - The value (any JSON serializable)',\ncategory: 'optional - e.g. :fact, :preference, :lesson, :env (default: :fact)'\n\n)\n"}]}
548
+ {"messages":[{"role":"user","content":"PWN::Memory.save Usage"},{"role":"assistant","content":"`PWN::Memory.save`: Supported Method Parameters\n\nPWN::Memory.save(memory_hash)\n"}]}
549
+ {"messages":[{"role":"user","content":"PWN::Memory.to_context Usage"},{"role":"assistant","content":"`PWN::Memory.to_context`: Supported Method Parameters\n\ncontext = PWN::Memory.to_context(limit: 20) (used internally by pwn-ai hook to inject into system prompt)\n"}]}
498
550
  {"messages":[{"role":"user","content":"PWN::Plugins.help Usage"},{"role":"assistant","content":"`PWN::Plugins.help`: "}]}
499
551
  {"messages":[{"role":"user","content":"PWN::Plugins::Android.adb_net_connect Usage"},{"role":"assistant","content":"`PWN::Plugins::Android.adb_net_connect`: Supported Method Parameters\n\nPWN::Plugins::Android.adb_net_connect(\n\nadb_path: 'required - path to adb binary',\ntarget: 'required - target host or IP to connect',\nport: 'optional - defaults to tcp 5555'\n\n)\n"}]}
500
552
  {"messages":[{"role":"user","content":"PWN::Plugins::Android.adb_net_disconnect Usage"},{"role":"assistant","content":"`PWN::Plugins::Android.adb_net_disconnect`: Supported Method Parameters\n\nPWN::Plugins::Android.adb_net_disconnect(\n\nadb_path: 'required - path to adb binary',\ntarget: 'required - target host or IP to disconnect',\nport: 'optional - defaults to tcp 5555'\n\n)\n"}]}
@@ -928,10 +980,14 @@
928
980
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.add_hooks Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.add_hooks`: Supported Method Parameters\n\nPWN::Plugins::REPL.add_hooks\n"}]}
929
981
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
930
982
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.help`: "}]}
931
- {"messages":[{"role":"user","content":"PWN::Plugins::REPL.refresh_ps1_proc Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.refresh_ps1_proc`: Supported Method Parameters\n\nPWN::Plugins::REPL.refresh_ps1_proc(\n\nmode: 'required - :splat or nil'\n\n)\n"}]}
983
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL.refresh_ps1_proc Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.refresh_ps1_proc`: "}]}
932
984
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.start Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.start`: Supported Method Parameters\n\nPWN::Plugins::REPL.start\n"}]}
933
985
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.process`: "}]}
934
986
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.top_h1_program_scope Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.top_h1_program_scope`: "}]}
987
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PwnAIInput.new Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PwnAIInput.new`: "}]}
988
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PwnAIInput.readline Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PwnAIInput.readline`: "}]}
989
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PwnAIInput.tty? Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PwnAIInput.tty?`: "}]}
990
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PwnAIInput.winsize Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PwnAIInput.winsize`: "}]}
935
991
  {"messages":[{"role":"user","content":"PWN::Plugins::RabbitMQ.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::RabbitMQ.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
936
992
  {"messages":[{"role":"user","content":"PWN::Plugins::RabbitMQ.close Usage"},{"role":"assistant","content":"`PWN::Plugins::RabbitMQ.close`: Supported Method Parameters\n\nPWN::Plugins::RabbitMQ.close(\n\namqp_oject: amqp_conn1\n\n)\n"}]}
937
993
  {"messages":[{"role":"user","content":"PWN::Plugins::RabbitMQ.help Usage"},{"role":"assistant","content":"`PWN::Plugins::RabbitMQ.help`: "}]}
@@ -1072,6 +1128,7 @@
1072
1128
  {"messages":[{"role":"user","content":"PWN::Plugins::XXD.fill_range_w_byte Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.fill_range_w_byte`: Supported Method Parameters\n\nhexdump = PWN::Plugins::XXD.fill_range_w_byte(\n\nhexdump: 'required - hexdump returned from #dump method',\nstart_addr: 'required - start address to fill with byte',\nend_addr: 'required - end address to fill with byte',\nbyte: 'required - byte to fill range with'\n\n)\n"}]}
1073
1129
  {"messages":[{"role":"user","content":"PWN::Plugins::XXD.help Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.help`: "}]}
1074
1130
  {"messages":[{"role":"user","content":"PWN::Plugins::XXD.reverse_dump Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.reverse_dump`: Supported Method Parameters\n\nPWN::Plugins::XXD.reverse_dump(\n\nhexdump: 'required - hexdump returned from #dump method',\nfile: 'required - path to binary file to dump',\nbyte_chunks: 'optional - if set, will write n byte chunks of hexdump to multiple files'\n\n)\n"}]}
1131
+ {"messages":[{"role":"user","content":"PWN::Plugins::XXD.reverse_hex_string Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.reverse_hex_string`: Supported Method Parameters\n\nPWN::Plugins::XXD.reverse_dump(\n\nstring: 'required - continuous hex string to reverse (i.e. \"68656c6c6f\")',\nfile: 'required - path to binary file to dump'\n\n)\n"}]}
1075
1132
  {"messages":[{"role":"user","content":"PWN::Plugins::Zaproxy.active_scan Usage"},{"role":"assistant","content":"`PWN::Plugins::Zaproxy.active_scan`: Supported Method Parameters\n\nPWN::Plugins::Zaproxy.active_scan(\n\nzap_obj: 'required - zap_obj returned from #open method',\ntarget_url: 'required - url to scan',\nexclude_paths: 'optional - array of paths to exclude from scan (default: [])',\nscan_policy: 'optional - scan policy to use (defaults to Default Policy)'\n\n)\n"}]}
1076
1133
  {"messages":[{"role":"user","content":"PWN::Plugins::Zaproxy.add_to_scope Usage"},{"role":"assistant","content":"`PWN::Plugins::Zaproxy.add_to_scope`: Supported Method Parameters\n\nPWN::Plugins::Zaproxy.add_to_scope(\n\nzap_obj: 'required - zap_obj returned from #open method',\ntarget_regex: 'required - url regex to add to scope (e.g. https://test.domain.local.*)',\ncontext_name: 'optional - context name to add target_regex to (defaults to Default Context)'\n\n)\n"}]}
1077
1134
  {"messages":[{"role":"user","content":"PWN::Plugins::Zaproxy.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::Zaproxy.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
@@ -1363,6 +1420,16 @@
1363
1420
  {"messages":[{"role":"user","content":"PWN::SDR::SonMicroRFID.read_tag Usage"},{"role":"assistant","content":"`PWN::SDR::SonMicroRFID.read_tag`: Supported Method Parameters\n\nPWN::SDR::SonMicroRFID.read_tag(\n\nson_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method',\nauthn: 'optional - authentication flag (default: false)',\nkey: 'optional - key for authentication (default: [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])'\n\n)\n"}]}
1364
1421
  {"messages":[{"role":"user","content":"PWN::SDR::SonMicroRFID.update_tag Usage"},{"role":"assistant","content":"`PWN::SDR::SonMicroRFID.update_tag`: Supported Method Parameters\n\nPWN::SDR::SonMicroRFID.update_tag(\n\nson_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'\n\n)\n"}]}
1365
1422
  {"messages":[{"role":"user","content":"PWN::SDR::SonMicroRFID.write_tag Usage"},{"role":"assistant","content":"`PWN::SDR::SonMicroRFID.write_tag`: Supported Method Parameters\n\nPWN::SDR::SonMicroRFID.write_tag(\n\nson_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method',\nrfid_data: 'required - RFID data to write (see #read_tag for structure)',\nauthn: 'optional - authentication flag (default: false)',\nkey: 'optional - key for authentication (default: [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])'\n\n)\n"}]}
1423
+ {"messages":[{"role":"user","content":"PWN::Sessions.append Usage"},{"role":"assistant","content":"`PWN::Sessions.append`: Supported Method Parameters\n\nPWN::Sessions.append(\n\nsession_id: 'required',\nrole: 'user|assistant|system|observation',\ncontent: 'the message or obs'\n\n)\n"}]}
1424
+ {"messages":[{"role":"user","content":"PWN::Sessions.authors Usage"},{"role":"assistant","content":"`PWN::Sessions.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1425
+ {"messages":[{"role":"user","content":"PWN::Sessions.create Usage"},{"role":"assistant","content":"`PWN::Sessions.create`: Supported Method Parameters\n\nsession = PWN::Sessions.create(\n\ntitle: 'optional - human title',\nsource: 'optional - e.g. pwn-ai-repl'\n\n)\n"}]}
1426
+ {"messages":[{"role":"user","content":"PWN::Sessions.delete Usage"},{"role":"assistant","content":"`PWN::Sessions.delete`: Supported Method Parameters\n\nPWN::Sessions.delete(session_id:)\n"}]}
1427
+ {"messages":[{"role":"user","content":"PWN::Sessions.help Usage"},{"role":"assistant","content":"`PWN::Sessions.help`: "}]}
1428
+ {"messages":[{"role":"user","content":"PWN::Sessions.list Usage"},{"role":"assistant","content":"`PWN::Sessions.list`: Supported Method Parameters\n\nsessions = PWN::Sessions.list\n"}]}
1429
+ {"messages":[{"role":"user","content":"PWN::Sessions.load Usage"},{"role":"assistant","content":"`PWN::Sessions.load`: Supported Method Parameters\n\ntranscript = PWN::Sessions.load(session_id: ‘required’)\n"}]}
1430
+ {"messages":[{"role":"user","content":"PWN::Sessions.sessions_dir Usage"},{"role":"assistant","content":"`PWN::Sessions.sessions_dir`: Supported Method Parameters\n\ndir = PWN::Sessions.sessions_dir\n"}]}
1431
+ {"messages":[{"role":"user","content":"PWN::Sessions.stats Usage"},{"role":"assistant","content":"`PWN::Sessions.stats`: Supported Method Parameters\n\nstats = PWN::Sessions.stats\n"}]}
1432
+ {"messages":[{"role":"user","content":"PWN::Sessions.to_response_history Usage"},{"role":"assistant","content":"`PWN::Sessions.to_response_history`: Supported Method Parameters\n\nhistory_for_ai = PWN::Sessions.to_response_history(session_id:) (converts transcript to the response_history format used by PWN::AI::* .chat)\n"}]}
1366
1433
  {"messages":[{"role":"user","content":"PWN::WWW.help Usage"},{"role":"assistant","content":"`PWN::WWW.help`: "}]}
1367
1434
  {"messages":[{"role":"user","content":"PWN::WWW::AppCobaltIO.authors Usage"},{"role":"assistant","content":"`PWN::WWW::AppCobaltIO.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1368
1435
  {"messages":[{"role":"user","content":"PWN::WWW::AppCobaltIO.close Usage"},{"role":"assistant","content":"`PWN::WWW::AppCobaltIO.close`: Supported Method Parameters\n\nbrowser_obj = PWN::WWW::AppCobaltIO.close(\n\nbrowser_obj: 'required - browser_obj returned from #open method'\n\n)\n"}]}
data/upgrade_pwn.sh CHANGED
@@ -6,4 +6,4 @@ else
6
6
  fi
7
7
 
8
8
  export rvmsudo_secure_path=1
9
- rvmsudo /bin/bash --login -c "cd ${pwn_root} && ./build_gem.sh"
9
+ /bin/bash --login -c "cd ${pwn_root} && ./build_gem.sh"
@@ -10,4 +10,4 @@ else
10
10
  fi
11
11
 
12
12
  export rvmsudo_secure_path=1
13
- rvmsudo /bin/bash --login -c "cd ${pwn_root} && git config --global --add safe.directory ${pwn_root} && ./build_gem.sh"
13
+ /bin/bash --login -c "cd ${pwn_root} && git config --global --add safe.directory ${pwn_root} && ./build_gem.sh"