pwn 0.5.620 → 0.5.622
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/documentation/Agent-Tool-Registry.md +3 -3
- data/documentation/Configuration.md +292 -47
- data/documentation/Cron.md +14 -1
- data/documentation/Diagrams.md +1 -1
- data/documentation/Extrospection.md +71 -5
- data/documentation/Home.md +2 -2
- data/documentation/How-PWN-Works.md +1 -1
- data/documentation/Mistakes.md +2 -1
- data/documentation/Persistence.md +2 -1
- data/documentation/Skills-Memory-Learning.md +3 -2
- data/documentation/Transparent-Browser.md +18 -1
- data/documentation/diagrams/agent-tool-registry.svg +55 -54
- data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
- data/documentation/diagrams/aws-cloud-security.svg +25 -25
- data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
- data/documentation/diagrams/code-scanning-sast.svg +25 -25
- data/documentation/diagrams/cron-scheduling.svg +23 -23
- data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
- data/documentation/diagrams/dot/extrospection-world-awareness.dot +29 -8
- data/documentation/diagrams/dot/memory-skills-detailed.dot +4 -0
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +2 -2
- data/documentation/diagrams/dot/persistence-filesystem.dot +2 -1
- data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +11 -5
- data/documentation/diagrams/driver-framework.svg +13 -13
- data/documentation/diagrams/extrospection-world-awareness.svg +229 -99
- data/documentation/diagrams/fuzzing-workflow.svg +24 -24
- data/documentation/diagrams/hardware-hacking.svg +18 -18
- data/documentation/diagrams/history-to-drivers.svg +18 -18
- data/documentation/diagrams/memory-skills-detailed.svg +124 -101
- data/documentation/diagrams/mistakes-negative-feedback.svg +55 -55
- data/documentation/diagrams/network-infra-testing.svg +27 -27
- data/documentation/diagrams/overall-pwn-architecture.svg +85 -85
- data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
- data/documentation/diagrams/persistence-filesystem.svg +94 -85
- data/documentation/diagrams/plugin-ecosystem.svg +35 -35
- data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +226 -180
- data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
- data/documentation/diagrams/reporting-pipeline.svg +18 -18
- data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
- data/documentation/diagrams/sdr-radio-flow.svg +31 -31
- data/documentation/diagrams/sessions-cron-automation.svg +18 -18
- data/documentation/diagrams/swarm-multi-agent.svg +39 -39
- data/documentation/diagrams/web-application-testing.svg +26 -26
- data/documentation/diagrams/zero-day-research-flow.svg +25 -25
- data/documentation/pwn-ai-Agent.md +4 -4
- data/lib/pwn/ai/agent/assembly.rb +1 -1
- data/lib/pwn/ai/agent/btc.rb +1 -1
- data/lib/pwn/ai/agent/burp_suite.rb +1 -1
- data/lib/pwn/ai/agent/extrospection.rb +435 -6
- data/lib/pwn/ai/agent/gqrx.rb +2 -2
- data/lib/pwn/ai/agent/hacker_one.rb +1 -1
- data/lib/pwn/ai/agent/learning.rb +16 -16
- data/lib/pwn/ai/agent/loop.rb +1 -1
- data/lib/pwn/ai/agent/{introspection.rb → reflect.rb} +12 -12
- data/lib/pwn/ai/agent/sast.rb +1 -1
- data/lib/pwn/ai/agent/tools/extrospection.rb +89 -4
- data/lib/pwn/ai/agent/tools/learning.rb +7 -7
- data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
- data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
- data/lib/pwn/ai/agent.rb +1 -1
- data/lib/pwn/ai/open_ai.rb +10 -6
- data/lib/pwn/config.rb +5 -4
- data/lib/pwn/plugins/burp_suite.rb +2 -2
- data/lib/pwn/sast/pom_version.rb +2 -2
- data/lib/pwn/sast/test_case_engine.rb +1 -1
- data/lib/pwn/sdr/decoder/adsb.rb +14 -33
- data/lib/pwn/sdr/decoder/apt.rb +97 -36
- data/lib/pwn/sdr/decoder/base.rb +258 -171
- data/lib/pwn/sdr/decoder/bluetooth.rb +13 -20
- data/lib/pwn/sdr/decoder/dect.rb +13 -27
- data/lib/pwn/sdr/decoder/dsp.rb +396 -0
- data/lib/pwn/sdr/decoder/flex.rb +177 -210
- data/lib/pwn/sdr/decoder/gps.rb +12 -21
- data/lib/pwn/sdr/decoder/gsm.rb +21 -73
- data/lib/pwn/sdr/decoder/iridium.rb +11 -26
- data/lib/pwn/sdr/decoder/lora.rb +16 -23
- data/lib/pwn/sdr/decoder/lte.rb +11 -32
- data/lib/pwn/sdr/decoder/morse.rb +95 -21
- data/lib/pwn/sdr/decoder/p25.rb +19 -16
- data/lib/pwn/sdr/decoder/pager.rb +22 -38
- data/lib/pwn/sdr/decoder/pocsag.rb +175 -68
- data/lib/pwn/sdr/decoder/rfid.rb +24 -33
- data/lib/pwn/sdr/decoder/rtl433.rb +21 -30
- data/lib/pwn/sdr/decoder/rtty.rb +100 -27
- data/lib/pwn/sdr/decoder/wifi.rb +21 -42
- data/lib/pwn/sdr/decoder/zigbee.rb +18 -40
- data/lib/pwn/sdr/decoder.rb +8 -0
- data/lib/pwn/sdr/gqrx.rb +1 -1
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/ai/agent/{introspection_spec.rb → reflect_spec.rb} +3 -3
- data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +15 -0
- data/third_party/pwn_rdoc.jsonl +75 -19
- metadata +7 -5
data/lib/pwn/sdr/decoder/wifi.rb
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'shellwords'
|
|
4
|
-
|
|
5
3
|
module PWN
|
|
6
4
|
module SDR
|
|
7
5
|
module Decoder
|
|
8
|
-
# 802.11 (WiFi)
|
|
6
|
+
# Pure-Ruby 802.11 (WiFi) activity detector.
|
|
9
7
|
#
|
|
10
|
-
# 20+ MHz OFDM cannot be
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
8
|
+
# 20+ MHz OFDM cannot be demodulated in interpreted Ruby in real
|
|
9
|
+
# time. Native mode reports channel occupancy/duty and maps
|
|
10
|
+
# freq_obj to a WLAN channel number. `parse_line` retained for
|
|
11
|
+
# offline pipe-delimited tshark-fields analysis.
|
|
14
12
|
module WiFi
|
|
15
13
|
TSHARK_FIELDS = %w[
|
|
16
|
-
frame.time_relative
|
|
17
|
-
wlan.
|
|
18
|
-
wlan.bssid
|
|
19
|
-
wlan.sa
|
|
20
|
-
wlan.da
|
|
21
|
-
wlan_radio.channel
|
|
22
|
-
wlan_radio.signal_dbm
|
|
23
|
-
wlan.ssid
|
|
14
|
+
frame.time_relative wlan.fc.type_subtype wlan.bssid wlan.sa
|
|
15
|
+
wlan.da wlan_radio.channel wlan_radio.signal_dbm wlan.ssid
|
|
24
16
|
].freeze
|
|
25
17
|
|
|
26
18
|
# Supported Method Parameters::
|
|
@@ -30,28 +22,20 @@ module PWN
|
|
|
30
22
|
|
|
31
23
|
public_class_method def self.decode(opts = {})
|
|
32
24
|
freq_obj = opts[:freq_obj]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
TSHARK_FIELDS.each { |f| tshark.push('-e', f) }
|
|
43
|
-
|
|
44
|
-
inner = "iw dev #{Shellwords.escape(iface)} set freq #{mhz} 2>/dev/null; " \
|
|
45
|
-
"exec #{Shellwords.join(tshark)}"
|
|
46
|
-
direct_cmd = "bash -c #{Shellwords.escape(inner)}"
|
|
47
|
-
|
|
48
|
-
PWN::SDR::Decoder::Base.run_pipeline(
|
|
25
|
+
hz = PWN::SDR.hz_to_i(freq: freq_obj[:freq])
|
|
26
|
+
mhz = (hz / 1_000_000.0).round
|
|
27
|
+
ch = case mhz
|
|
28
|
+
when 2412..2472 then ((mhz - 2412) / 5) + 1
|
|
29
|
+
when 2484 then 14
|
|
30
|
+
when 5000..5900 then (mhz - 5000) / 5
|
|
31
|
+
else 0
|
|
32
|
+
end
|
|
33
|
+
PWN::SDR::Decoder::Base.run_detector(
|
|
49
34
|
freq_obj: freq_obj,
|
|
50
35
|
protocol: 'WiFi-802.11',
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
parser: proc { |line| parse_line(line: line) }
|
|
36
|
+
note: '20+ MHz OFDM — native mode reports channel occupancy/duty only.',
|
|
37
|
+
threshold: 6.0,
|
|
38
|
+
describe: proc { |b| { modulation: 'OFDM', channel: ch, mhz: mhz, airtime_ms: b[:duration_ms] } }
|
|
55
39
|
)
|
|
56
40
|
end
|
|
57
41
|
|
|
@@ -61,8 +45,7 @@ module PWN
|
|
|
61
45
|
public_class_method def self.parse_line(opts = {})
|
|
62
46
|
f = opts[:line].to_s.split('|', -1)
|
|
63
47
|
out = {
|
|
64
|
-
protocol: 'WiFi',
|
|
65
|
-
subtype: f[1], bssid: f[2], sa: f[3], da: f[4],
|
|
48
|
+
protocol: 'WiFi', subtype: f[1], bssid: f[2], sa: f[3], da: f[4],
|
|
66
49
|
channel: f[5], rssi_dbm: f[6], ssid: f[7]
|
|
67
50
|
}.reject { |_, v| v.to_s.empty? }
|
|
68
51
|
out[:summary] = "WiFi ch#{out[:channel]} #{out[:bssid]} '#{out[:ssid]}' #{out[:rssi_dbm]}dBm"
|
|
@@ -78,15 +61,11 @@ module PWN
|
|
|
78
61
|
# Display Usage for this Module
|
|
79
62
|
|
|
80
63
|
public_class_method def self.help
|
|
81
|
-
puts "USAGE:
|
|
64
|
+
puts "USAGE (ruby-native detector, no external binaries):
|
|
82
65
|
#{self}.decode(
|
|
83
66
|
freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
|
|
84
67
|
)
|
|
85
68
|
|
|
86
|
-
NOTE: Requires a monitor-mode WLAN interface (freq_obj[:mon_iface],
|
|
87
|
-
default 'wlan0mon'), `iw`, and `tshark`. General SDRs cannot
|
|
88
|
-
demodulate 802.11 OFDM in real time.
|
|
89
|
-
|
|
90
69
|
#{self}.parse_line(line: '0.1|8|aa:bb:..|aa:bb:..|ff:ff:..|6|-42|linksys')
|
|
91
70
|
|
|
92
71
|
#{self}.authors
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'shellwords'
|
|
4
|
-
|
|
5
3
|
module PWN
|
|
6
4
|
module SDR
|
|
7
5
|
module Decoder
|
|
8
|
-
# IEEE 802.15.4 / ZigBee
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
# for
|
|
6
|
+
# Pure-Ruby IEEE 802.15.4 / ZigBee activity detector.
|
|
7
|
+
#
|
|
8
|
+
# 250 kbit/s O-QPSK across 2 MHz channels — native mode reports
|
|
9
|
+
# per-channel packet bursts and derives channel 11–26 from
|
|
10
|
+
# freq_obj. `parse_line` retained for offline pipe-delimited
|
|
11
|
+
# analysis.
|
|
13
12
|
module ZigBee
|
|
14
13
|
TSHARK_FIELDS = %w[
|
|
15
|
-
frame.time_relative
|
|
16
|
-
wpan.
|
|
17
|
-
wpan.dst16
|
|
18
|
-
wpan.src64
|
|
19
|
-
wpan.dst64
|
|
20
|
-
wpan.dst_pan
|
|
21
|
-
wpan.frame_type
|
|
22
|
-
zbee_nwk.cmd.id
|
|
23
|
-
wpan.seq_no
|
|
14
|
+
frame.time_relative wpan.src16 wpan.dst16 wpan.src64 wpan.dst64
|
|
15
|
+
wpan.dst_pan wpan.frame_type zbee_nwk.cmd.id wpan.seq_no
|
|
24
16
|
].freeze
|
|
25
17
|
|
|
26
18
|
# Supported Method Parameters::
|
|
@@ -30,25 +22,17 @@ module PWN
|
|
|
30
22
|
|
|
31
23
|
public_class_method def self.decode(opts = {})
|
|
32
24
|
freq_obj = opts[:freq_obj]
|
|
33
|
-
raise 'ERROR: :freq_obj is required' unless freq_obj.is_a?(Hash)
|
|
34
|
-
|
|
35
25
|
hz = PWN::SDR.hz_to_i(freq: freq_obj[:freq])
|
|
36
|
-
# 802.15.4 ch11..26 → 2405 + 5*(ch-11) MHz
|
|
37
26
|
ch = (((hz - 2_405_000_000) / 5_000_000.0).round + 11).clamp(11, 26)
|
|
38
|
-
|
|
39
|
-
tshark = ['tshark', '-r', '-', '-l', '-T', 'fields', '-E', 'separator=|']
|
|
40
|
-
TSHARK_FIELDS.each { |f| tshark.push('-e', f) }
|
|
41
|
-
|
|
42
|
-
inner = "whsniff -c #{ch} 2>/dev/null | #{Shellwords.join(tshark)}"
|
|
43
|
-
direct_cmd = "bash -c #{Shellwords.escape(inner)}"
|
|
44
|
-
|
|
45
|
-
PWN::SDR::Decoder::Base.run_pipeline(
|
|
27
|
+
PWN::SDR::Decoder::Base.run_detector(
|
|
46
28
|
freq_obj: freq_obj,
|
|
47
29
|
protocol: 'ZigBee',
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
30
|
+
note: '250 kbit/s O-QPSK — native mode reports 802.15.4 packet bursts only.',
|
|
31
|
+
threshold: 8.0,
|
|
32
|
+
describe: proc { |b|
|
|
33
|
+
octets = (b[:duration_ms] * 250 / 8).round
|
|
34
|
+
{ modulation: 'O-QPSK', channel: ch, est_octets: octets, classification: octets < 20 ? 'ACK/beacon' : 'data-frame' }
|
|
35
|
+
}
|
|
52
36
|
)
|
|
53
37
|
end
|
|
54
38
|
|
|
@@ -58,11 +42,8 @@ module PWN
|
|
|
58
42
|
public_class_method def self.parse_line(opts = {})
|
|
59
43
|
f = opts[:line].to_s.split('|', -1)
|
|
60
44
|
out = {
|
|
61
|
-
protocol: 'ZigBee',
|
|
62
|
-
|
|
63
|
-
src64: f[3], dst64: f[4],
|
|
64
|
-
pan_id: f[5], frame_type: f[6],
|
|
65
|
-
nwk_cmd: f[7], seq: f[8]
|
|
45
|
+
protocol: 'ZigBee', src16: f[1], dst16: f[2], src64: f[3], dst64: f[4],
|
|
46
|
+
pan_id: f[5], frame_type: f[6], nwk_cmd: f[7], seq: f[8]
|
|
66
47
|
}.reject { |_, v| v.to_s.empty? }
|
|
67
48
|
out[:summary] = "ZigBee PAN=#{out[:pan_id]} #{out[:src16] || out[:src64]}→#{out[:dst16] || out[:dst64]} type=#{out[:frame_type]}"
|
|
68
49
|
out
|
|
@@ -77,14 +58,11 @@ module PWN
|
|
|
77
58
|
# Display Usage for this Module
|
|
78
59
|
|
|
79
60
|
public_class_method def self.help
|
|
80
|
-
puts "USAGE:
|
|
61
|
+
puts "USAGE (ruby-native detector, no external binaries):
|
|
81
62
|
#{self}.decode(
|
|
82
63
|
freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
|
|
83
64
|
)
|
|
84
65
|
|
|
85
|
-
NOTE: Requires `whsniff` (CC2531) or KillerBee, plus `tshark`.
|
|
86
|
-
Channel is derived from freq_obj[:freq] (11–26).
|
|
87
|
-
|
|
88
66
|
#{self}.parse_line(line: '0.1|0x0001|0xffff||||0x01||42')
|
|
89
67
|
|
|
90
68
|
#{self}.authors
|
data/lib/pwn/sdr/decoder.rb
CHANGED
|
@@ -9,12 +9,20 @@ module PWN
|
|
|
9
9
|
# uniform `.decode(freq_obj:)` entry point (see PWN::SDR::Decoder::Base)
|
|
10
10
|
# so PWN::SDR::GQRX can dispatch on a `decoder:` key from
|
|
11
11
|
# PWN::SDR::FrequencyAllocation.band_plans.
|
|
12
|
+
#
|
|
13
|
+
# 100 % ruby-native — no decoder in this namespace shells out to an
|
|
14
|
+
# external binary. Audio-rate protocols (POCSAG, FLEX, Morse, RTTY,
|
|
15
|
+
# APT, Pager) are fully demodulated in Ruby via PWN::SDR::Decoder::DSP;
|
|
16
|
+
# wideband/I/Q-only protocols (ADS-B, GSM, LTE, GPS, LoRa, WiFi, DECT,
|
|
17
|
+
# ZigBee, Bluetooth, Iridium, P25, RFID, RTL433) run a native
|
|
18
|
+
# burst/energy characteriser (see Base.run_detector).
|
|
12
19
|
module Decoder
|
|
13
20
|
autoload :ADSB, 'pwn/sdr/decoder/adsb'
|
|
14
21
|
autoload :APT, 'pwn/sdr/decoder/apt'
|
|
15
22
|
autoload :Base, 'pwn/sdr/decoder/base'
|
|
16
23
|
autoload :Bluetooth, 'pwn/sdr/decoder/bluetooth'
|
|
17
24
|
autoload :DECT, 'pwn/sdr/decoder/dect'
|
|
25
|
+
autoload :DSP, 'pwn/sdr/decoder/dsp'
|
|
18
26
|
autoload :Flex, 'pwn/sdr/decoder/flex'
|
|
19
27
|
autoload :GPS, 'pwn/sdr/decoder/gps'
|
|
20
28
|
autoload :GSM, 'pwn/sdr/decoder/gsm'
|
data/lib/pwn/sdr/gqrx.rb
CHANGED
|
@@ -809,7 +809,7 @@ module PWN
|
|
|
809
809
|
puts "\s\s- A lower `Input rate` value seems counter-intuitive but works well (e.g. ADALM PLUTO ~ 1000000)."
|
|
810
810
|
puts '2. Adjust the :strength_lock parameter.'
|
|
811
811
|
puts '3. Adjust the :precision parameter.'
|
|
812
|
-
puts '4. Disable AI
|
|
812
|
+
puts '4. Disable AI module_reflection in PWN::Env'
|
|
813
813
|
puts 'Happy scanning!'
|
|
814
814
|
puts '-' * 86
|
|
815
815
|
# print 'Pressing ENTER to begin scan...'
|
data/lib/pwn/version.rb
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
require 'spec_helper'
|
|
4
4
|
|
|
5
|
-
describe PWN::AI::Agent::
|
|
5
|
+
describe PWN::AI::Agent::Reflect do
|
|
6
6
|
it 'should display information for authors' do
|
|
7
|
-
authors_response = PWN::AI::Agent::
|
|
7
|
+
authors_response = PWN::AI::Agent::Reflect
|
|
8
8
|
expect(authors_response).to respond_to :authors
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it 'should display information for existing help method' do
|
|
12
|
-
help_response = PWN::AI::Agent::
|
|
12
|
+
help_response = PWN::AI::Agent::Reflect
|
|
13
13
|
expect(help_response).to respond_to :help
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe PWN::SDR::Decoder::DSP do
|
|
6
|
+
it 'should display information for authors' do
|
|
7
|
+
authors_response = PWN::SDR::Decoder::DSP
|
|
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::SDR::Decoder::DSP
|
|
13
|
+
expect(help_response).to respond_to :help
|
|
14
|
+
end
|
|
15
|
+
end
|
data/third_party/pwn_rdoc.jsonl
CHANGED
|
@@ -18,12 +18,18 @@
|
|
|
18
18
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.parse_args Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.parse_args`: "}]}
|
|
19
19
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Dispatch.symbolize Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Dispatch.symbolize`: "}]}
|
|
20
20
|
{"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"}]}
|
|
21
|
-
{"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.
|
|
21
|
+
{"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"}]}
|
|
22
22
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.auto_extrospect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.auto_extrospect_enabled?`: "}]}
|
|
23
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.capture_screenshot Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.capture_screenshot`: "}]}
|
|
24
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.commit_verdict Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.commit_verdict`: "}]}
|
|
23
25
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.compute_drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.compute_drift`: "}]}
|
|
24
26
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.correlate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.correlate`: Supported Method Parameters\n\nfindings = PWN::AI::Agent::Extrospection.correlate(\n\nlimit: 'optional - max findings returned (default 10)'\n\n)\n\nTHE join between introspection and extrospection. Cross-references:\n\n* Metrics tools with success_rate < 50 % vs toolchain drift / missing bins\n* Learning failures vs host / net drift on the same day\n* Observations tagged :vuln / :intel vs installed package versions\n\nEmits human-readable, actionable findings the model can reason on.\n"}]}
|
|
27
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.detect_claim_kind Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.detect_claim_kind`: "}]}
|
|
25
28
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.drift`: Supported Method Parameters\n\ndelta = PWN::AI::Agent::Extrospection.drift(\n\nlive: 'optional - probe host NOW and diff vs stored snapshot (default true). When false, diff stored :snapshot vs stored :previous.'\n\n)\n"}]}
|
|
29
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.extract_text Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.extract_text`: "}]}
|
|
30
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.fingerprint_page Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.fingerprint_page`: "}]}
|
|
26
31
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.flatten Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.flatten`: "}]}
|
|
32
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.fuzzy_overlap Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.fuzzy_overlap`: "}]}
|
|
27
33
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.help`: "}]}
|
|
28
34
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.http_get_json Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.http_get_json`: "}]}
|
|
29
35
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel`: Supported Method Parameters\n\nhits = PWN::AI::Agent::Extrospection.intel(\n\nquery: 'required - keyword / product / CVE id to search external threat-intel for',\nfeeds: 'optional - Array subset of [:nvd, :circl, :exploitdb] (default all)',\nlimit: 'optional - max results per feed (default 5)',\nrecord: 'optional - also persist each hit as an observation (default false)'\n\n)\n\nBest-effort external lookups. Network / API failures degrade to an empty result for that feed rather than raising, so learning never breaks the primary loop when offline.\n"}]}
|
|
@@ -32,35 +38,43 @@
|
|
|
32
38
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel_nvd Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel_nvd`: "}]}
|
|
33
39
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.load Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.load`: Supported Method Parameters\n\nstore = PWN::AI::Agent::Extrospection.load\n"}]}
|
|
34
40
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.observations Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.observations`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Extrospection.observations(\n\nlimit: 'optional - max entries newest-first (default 50)',\nsource: 'optional - filter by source substring',\ncategory: 'optional - filter by category',\ntarget: 'optional - filter by target substring',\ntag: 'optional - filter by tag substring',\nfresh_only: 'optional - drop entries whose ttl has expired (default false)'\n\n)\n"}]}
|
|
35
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.observe Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.observe`: Supported Method Parameters\n\nobs = PWN::AI::Agent::Extrospection.observe(\n\nsource: 'required - where the observation came from (nmap, shodan, burp, cve, human, ...)',\ndata: 'required - the observation payload (String or Hash)',\ncategory: 'optional - :recon, :vuln, :intel, :target, :network, :env, :rf, :misc (default :misc)',\ntarget: 'optional - host/ip/url/asset the observation is about',\ntags: 'optional - Array of String labels',\nttl: 'optional - seconds until this observation is considered stale (default nil = forever)'\n\n)\n\nRecords a fact about the OUTSIDE world (as opposed to Learning.note_outcome which records a fact about the agent’s own behaviour). Observations are re-injected via .to_context so recon findings and threat-intel persist across sessions.\n"}]}
|
|
41
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.observe Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.observe`: Supported Method Parameters\n\nobs = PWN::AI::Agent::Extrospection.observe(\n\nsource: 'required - where the observation came from (nmap, shodan, burp, cve, human, ...)',\ndata: 'required - the observation payload (String or Hash)',\ncategory: 'optional - :recon, :vuln, :intel, :target, :network, :env, :rf, :web, :misc (default :misc)',\ntarget: 'optional - host/ip/url/asset the observation is about',\ntags: 'optional - Array of String labels',\nttl: 'optional - seconds until this observation is considered stale (default nil = forever)'\n\n)\n\nRecords a fact about the OUTSIDE world (as opposed to Learning.note_outcome which records a fact about the agent’s own behaviour). Observations are re-injected via .to_context so recon findings and threat-intel persist across sessions.\n"}]}
|
|
36
42
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_env Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_env`: "}]}
|
|
37
43
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_host Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_host`: "}]}
|
|
38
44
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_net Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_net`: "}]}
|
|
39
45
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_repo Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_repo`: "}]}
|
|
40
46
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_rf Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_rf`: "}]}
|
|
41
47
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_toolchain Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_toolchain`: "}]}
|
|
48
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_web Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_web`: "}]}
|
|
42
49
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.reset`: Supported Method Parameters\n\nPWN::AI::Agent::Extrospection.reset\n"}]}
|
|
50
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.revalidate_memory Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.revalidate_memory`: Supported Method Parameters\n\nreport = PWN::AI::Agent::Extrospection.revalidate_memory(\n\nlimit: 'optional - max :fact entries to check (default 25)',\nproxy: 'optional - upstream proxy for TransparentBrowser'\n\n)\n\nThe browser as garbage-collector for PWN::Memory. Walks :fact entries containing a CVE id, version string or URL, runs verify() on each and prefixes stale ones with [UNVERIFIED yyyy-mm-dd] so the injected MEMORY block stops calcifying into confidently-wrong priors. Designed to be scheduled: cron_create(schedule:‘0 4 * * 0’,\n\nruby:'PWN::AI::Agent::Extrospection.revalidate_memory')\n"}]}
|
|
43
51
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_band_plan_keys Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_band_plan_keys`: "}]}
|
|
44
52
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_present? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_present?`: "}]}
|
|
53
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_attr Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_attr`: "}]}
|
|
54
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_host Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_host`: "}]}
|
|
55
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_meta Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_meta`: "}]}
|
|
45
56
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.save Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.save`: Supported Method Parameters\n\nPWN::AI::Agent::Extrospection.save(\n\nstore: 'required - Hash returned by .load / mutated in place'\n\n)\n"}]}
|
|
46
57
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.sh Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.sh`: "}]}
|
|
47
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.snapshot Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.snapshot`: Supported Method Parameters\n\nsnap = PWN::AI::Agent::Extrospection.snapshot(\n\npersist: 'optional - Boolean, write snapshot to disk & rotate previous (default true)',\nsections: 'optional - Array subset of [:host, :net, :toolchain, :repo, :env, :rf] (default all)'\n\n)\n\nCaptures a fingerprint of the OUTSIDE world. When persist:true the prior snapshot is rotated into :previous so .drift can diff them.\n"}]}
|
|
58
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.snapshot Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.snapshot`: Supported Method Parameters\n\nsnap = PWN::AI::Agent::Extrospection.snapshot(\n\npersist: 'optional - Boolean, write snapshot to disk & rotate previous (default true)',\nsections: 'optional - Array subset of [:host, :net, :toolchain, :repo, :env, :rf, :web] (default all except :web)'\n\n)\n\nCaptures a fingerprint of the OUTSIDE world. When persist:true the prior snapshot is rotated into :previous so .drift can diff them.\n"}]}
|
|
48
59
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.stats Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.stats`: Supported Method Parameters\n\nstats = PWN::AI::Agent::Extrospection.stats\n"}]}
|
|
49
60
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.summarise_drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.summarise_drift`: "}]}
|
|
50
61
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.tcp_open? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.tcp_open?`: "}]}
|
|
62
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.tls_fingerprint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.tls_fingerprint`: "}]}
|
|
51
63
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.to_context Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.to_context`: Supported Method Parameters\n\nctx = PWN::AI::Agent::Extrospection.to_context(\n\ndrift_limit: 'optional - max drift lines (default 4)',\nobs_limit: 'optional - max observation lines (default 4)'\n\n)\n"}]}
|
|
64
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.verify Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.verify`: Supported Method Parameters\n\nverdict = PWN::AI::Agent::Extrospection.verify(\n\nclaim: 'required - factual claim to fact-check against the live web',\nkind: 'optional - :cve | :version | :doc | :generic (default auto-detect)',\nurl: 'optional - explicit URL the claim cites (forces kind: :doc)',\ncommit: 'optional - write Mistakes/Memory/observe on refute/confirm (default true)',\nproxy: 'optional - upstream proxy for TransparentBrowser (e.g. \"tor\")'\n\n)\n\nBrowser-backed self fact-checking. Drives PWN::Plugins::TransparentBrowser in :headless mode against a canonical source for the claim class, renders the DOM (JS executed), and returns:\n\n{ claim:, kind:, verdict: :confirmed|:refuted|:unknown,\n confidence: 0.0..1.0,\n evidence: [{url:, title:, excerpt:, dom_sha:, screenshot:}],\n action_taken: :mistakes_record | :extro_observe | :learning_note | nil }\n\n\nOn :refuted -> Mistakes.record(tool:‘assumption’, error:claim) so the\n\nKNOWN MISTAKES block warns every future run.\n\nOn :confirmed-> observe(category::intel, ttl:30d) reinforces w/ freshness. On :unknown -> Learning.note_outcome(success:false, tags:).\n\nThis is the extrospective mirror of Mistakes: a PROACTIVE trigger that catches the model being wrong about the world before a human does.\n"}]}
|
|
65
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.watch Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.watch`: Supported Method Parameters\n\nobs = PWN::AI::Agent::Extrospection.watch(\n\nurl: 'required - URL to render and fingerprint',\nselector: 'optional - CSS selector whose innerText to hash (default full body)',\nttl: 'optional - seconds until stale (default 7 days)',\nproxy: 'optional - upstream proxy for TransparentBrowser'\n\n)\n\nPassive change-detection on an external artefact you care about (target /api/version, vendor changelog, bounty scope page). Renders headless, hashes the DOM text, screenshots, and persists as observe(category: :web). On subsequent snapshot(sections:) or watch of the same URL, a hash mismatch surfaces in drift() as ~web.<host>.dom_sha exactly like ~toolchain.nmap today.\n"}]}
|
|
66
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.web_anchors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.web_anchors`: "}]}
|
|
67
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.web_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.web_config`: "}]}
|
|
68
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.with_headless_browser Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.with_headless_browser`: "}]}
|
|
52
69
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::GQRX.analyze(\n\nrequest: 'required - A string containing the signal data captured by GQRX that you want to analyze. This data should be in a format that can be interpreted by the AI for analysis, such as raw signal data, frequency information, or any relevant metadata associated with the capture.',\nlocation: 'required - A string containing a city, state, country, or GPS coordinates where the signal data was captured. This information will be used to provide context for the analysis and to determine if the frequency is licensed or unlicensed based on FCC records.'\n\n)\n"}]}
|
|
53
70
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
54
71
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.help`: "}]}
|
|
55
72
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::HackerOne.analyze(\n\nrequest: 'required - dataset to analyze, such as bounty program details, scope details, or hacktivity details'\ntype: 'required - type of analysis to perform, such as :bounty_programs, :scope_details, or :hacktivity'\n\n)\n"}]}
|
|
56
73
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
57
74
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.help`: "}]}
|
|
58
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Introspection.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Introspection.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
59
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Introspection.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Introspection.help`: "}]}
|
|
60
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Introspection.reflect_on Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Introspection.reflect_on`: Supported Method Parameters\n\nresponse = PWN::AI::Agent::Introspection.reflect_on(\n\nrequest: 'required - String - What you want the AI to reflect on',\nsystem_role_content: 'optional - context to set up the model behavior for reflection',\nspinner: 'optional - Boolean - Display spinner during operation (default: false)',\nsuppress_pii_warning: 'optional - Boolean - Suppress PII Warnings (default: false)'\n\n)\n"}]}
|
|
61
75
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
62
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.
|
|
63
|
-
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.
|
|
76
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_introspect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_introspect`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.auto_introspect(\n\nsession_id: 'required - id of the just-completed session',\nrequest: 'optional - original user request (for outcome logging)',\nfinal: 'optional - final assistant answer (for outcome logging)'\n\n)\n\nCalled by Loop.run when PWN::Env[:agent] is truthy. Never raises — learning must not break the primary loop.\n"}]}
|
|
77
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_introspect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_introspect_enabled?`: "}]}
|
|
64
78
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.build_skill_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.build_skill_from_session`: "}]}
|
|
65
79
|
{"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"}]}
|
|
66
80
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.distill_skill Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.distill_skill`: Supported Method Parameters\n\nskill = PWN::AI::Agent::Learning.distill_skill(\n\nname: 'required - snake_case name for the new skill',\nsession_id: 'optional - PWN::Sessions id to mine (uses its transcript)',\ncontent: 'optional - explicit markdown body; overrides transcript mining',\nreferences: 'optional - Array of reference URLs / CWE / CVE / ATT&CK ids'\n\n)\n"}]}
|
|
@@ -71,7 +85,7 @@
|
|
|
71
85
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.introspective_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.introspective_lessons`: "}]}
|
|
72
86
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.note_outcome Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.note_outcome`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Learning.note_outcome(\n\ntask: 'required - short description of what was attempted',\nsuccess: 'required - Boolean, did the attempt achieve its goal',\ndetails: 'optional - free-form notes / error / evidence',\nsession_id: 'optional - PWN::Sessions id this outcome belongs to',\ntags: 'optional - Array of String labels for later retrieval'\n\n)\n"}]}
|
|
73
87
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.outcomes Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.outcomes`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Learning.outcomes(\n\nlimit: 'optional - max entries returned newest-first (default 50)',\nsuccess: 'optional - filter by Boolean outcome',\ntag: 'optional - filter by tag substring'\n\n)\n"}]}
|
|
74
|
-
{"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::
|
|
88
|
+
{"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"}]}
|
|
75
89
|
{"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"}]}
|
|
76
90
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.skills_dir Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.skills_dir`: "}]}
|
|
77
91
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.stats Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.stats`: Supported Method Parameters\n\nstats = PWN::AI::Agent::Learning.stats\n"}]}
|
|
@@ -125,6 +139,9 @@
|
|
|
125
139
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.mistakes_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.mistakes_block`: "}]}
|
|
126
140
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.pwn_version Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.pwn_version`: "}]}
|
|
127
141
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.skills_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.skills_block`: "}]}
|
|
142
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reflect.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reflect.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
143
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reflect.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reflect.help`: "}]}
|
|
144
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Reflect.on Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reflect.on`: Supported Method Parameters\n\nresponse = PWN::AI::Agent::Reflect.on(\n\nrequest: 'required - String - What you want the AI to reflect on',\nsystem_role_content: 'optional - context to set up the model behavior for reflection',\nspinner: 'optional - Boolean - Display spinner during operation (default: false)',\nsuppress_pii_warning: 'optional - Boolean - Suppress PII Warnings (default: false)'\n\n)\n"}]}
|
|
128
145
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Registry.all Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Registry.all`: Supported Method Parameters\n\nentries = PWN::AI::Agent::Registry.all\n"}]}
|
|
129
146
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Registry.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Registry.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
130
147
|
{"messages":[{"role":"user","content":"PWN::AI::Agent::Registry.definitions Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Registry.definitions`: Supported Method Parameters\n\ntools = PWN::AI::Agent::Registry.definitions(\n\nenabled: 'optional - Array of toolset names to include; nil = all whose check passes'\n\n)\n"}]}
|
|
@@ -1546,11 +1563,18 @@
|
|
|
1546
1563
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1547
1564
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::APT.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1548
1565
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT.help`: "}]}
|
|
1566
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT::Demod.new`: "}]}
|
|
1567
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT::Demod.feed`: "}]}
|
|
1549
1568
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1550
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.
|
|
1569
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.build_spinner Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.build_spinner`: Supported Method Parameters\n\nspinner, max_len = PWN::SDR::Decoder::Base.build_spinner(banner: ‘…’)\n"}]}
|
|
1551
1570
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.help`: "}]}
|
|
1571
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.log_path Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.log_path`: Supported Method Parameters\n\npath = PWN::SDR::Decoder::Base.log_path(protocol: ‘POCSAG’)\n"}]}
|
|
1552
1572
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.match_line? Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.match_line?`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.match_line?(line: str, matcher: Regexp|String|Array)\n"}]}
|
|
1553
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.
|
|
1573
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.read_level Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.read_level`: Supported Method Parameters\n\nlvl = PWN::SDR::Decoder::Base.read_level(gqrx_sock:, udp_listener:)\n"}]}
|
|
1574
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.run_detector Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.run_detector`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.run_detector(\n\nfreq_obj: 'required - freq_obj Hash from PWN::SDR::GQRX.init_freq',\nprotocol: 'required - short name for banner / log filename',\nnote: 'optional - one-line explanation shown once',\nthreshold: 'optional - dBFS above rolling floor to call a burst (default 8.0)',\ndescribe: 'optional - Proc.new { |burst_hash| Hash } extra fields'\n\n)\n"}]}
|
|
1575
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.run_native Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.run_native`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.run_native(\n\nfreq_obj: 'required - freq_obj Hash from PWN::SDR::GQRX.init_freq',\nprotocol: 'required - short name for banner / log filename',\ndemod: 'required - object responding to #feed(samples,&emit)',\nrate: 'optional - assumed UDP sample rate (default 48000)'\n\n)\n"}]}
|
|
1576
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.strip_freq_obj Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.strip_freq_obj`: Supported Method Parameters\n\nh = PWN::SDR::Decoder::Base.strip_freq_obj(freq_obj: {…})\n"}]}
|
|
1577
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.wait_for_enter Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.wait_for_enter`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.wait_for_enter(spinner:, title_ref:)\n"}]}
|
|
1554
1578
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1555
1579
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Bluetooth.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1556
1580
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.help`: "}]}
|
|
@@ -1559,13 +1583,36 @@
|
|
|
1559
1583
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::DECT.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1560
1584
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.help`: "}]}
|
|
1561
1585
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::DECT.parse_line(line: ‘RFPI: 01 23 45 67 89 slot 4 carrier 3 RSSI -55’)\n"}]}
|
|
1586
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1587
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.baudot_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.baudot_decode`: Supported Method Parameters\n\ntxt = PWN::SDR::Decoder::DSP.baudot_decode(bits: Array<0|1>) 5-bit ITA2 with LTRS(31)/FIGS(27) shift, LSB-first per character.\n"}]}
|
|
1588
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.bch_31_21_syndrome Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.bch_31_21_syndrome`: Supported Method Parameters\n\nsyn = PWN::SDR::Decoder::DSP.bch_31_21_syndrome(word: Integer)\n"}]}
|
|
1589
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.bits_to_int Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.bits_to_int`: Supported Method Parameters\n\nint = PWN::SDR::Decoder::DSP.bits_to_int(bits: [1,0,1,…])\n"}]}
|
|
1590
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.dc_block Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.dc_block`: Supported Method Parameters\n\ny = PWN::SDR::Decoder::DSP.dc_block(\n\nsamples: 'required - Array<Float>',\nalpha: 'optional - pole (default 0.995)'\n\n)\n"}]}
|
|
1591
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.envelope Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.envelope`: Supported Method Parameters\n\nenv = PWN::SDR::Decoder::DSP.envelope(\n\nsamples: 'required - Array<Float>',\nwindow: 'optional - moving-average window in samples (default 32)'\n\n)\n"}]}
|
|
1592
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.envelope_signed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.envelope_signed`: Supported Method Parameters\n\ny = PWN::SDR::Decoder::DSP.envelope_signed(samples:, window:)\n"}]}
|
|
1593
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.even_parity_ok? Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.even_parity_ok?`: Supported Method Parameters\n\nok = PWN::SDR::Decoder::DSP.even_parity_ok?(word: Integer, width: 32)\n"}]}
|
|
1594
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.find_sync Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.find_sync`: Supported Method Parameters\n\nidx = PWN::SDR::Decoder::DSP.find_sync(\n\nbits: 'required - Array<0|1>',\npattern: 'required - Array<0|1> or Integer (MSB-first)',\nwidth: 'optional - bit-width when pattern is Integer',\nmax_err: 'optional - allowed bit errors (default 0)',\nfrom: 'optional - start index (default 0)'\n\n)\n"}]}
|
|
1595
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.fsk_slice Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.fsk_slice`: Supported Method Parameters\n\nbits = PWN::SDR::Decoder::DSP.fsk_slice(\n\nsamples: 'required - Array<Float>',\nrate: 'required - sample rate (Hz)',\nbaud: 'required - symbol rate',\nmark_hz: 'required - mark tone (bit=1)',\nspace_hz:'required - space tone (bit=0)'\n\n) Non-coherent 2-FSK: per-symbol Goertzel on mark/space, pick the winner.\n"}]}
|
|
1596
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.goertzel Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.goertzel`: Supported Method Parameters\n\npower = PWN::SDR::Decoder::DSP.goertzel(\n\nsamples: 'required - Array<Float>',\nrate: 'required - sample rate (Hz)',\nfreq: 'required - target tone frequency (Hz)'\n\n)\n"}]}
|
|
1597
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.help`: "}]}
|
|
1598
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.nrz_slice Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.nrz_slice`: Supported Method Parameters\n\nbits = PWN::SDR::Decoder::DSP.nrz_slice(\n\nsamples: 'required - Array<Float> (post-FM-discriminator baseband)',\nrate: 'required - sample rate (Hz)',\nbaud: 'required - symbol rate',\ninvert: 'optional - flip bit polarity (default false)'\n\n) Simple mid-bit sampler with zero-crossing resync. Returns Array<0|1>.\n"}]}
|
|
1599
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.resample Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.resample`: Supported Method Parameters\n\nout = PWN::SDR::Decoder::DSP.resample(\n\nsamples: 'required - Array<Float>',\nsrc_rate: 'required - input sample rate (Hz)',\ndst_rate: 'required - output sample rate (Hz)'\n\n)\n"}]}
|
|
1600
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.rms_dbfs Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.rms_dbfs`: Supported Method Parameters\n\ndbfs = PWN::SDR::Decoder::DSP.rms_dbfs(samples: Array<Float>)\n"}]}
|
|
1601
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.unpack_s16le Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.unpack_s16le`: Supported Method Parameters\n\nsamples = PWN::SDR::Decoder::DSP.unpack_s16le(\n\ndata: 'required - raw String of little-endian signed 16-bit PCM'\n\n)\n"}]}
|
|
1602
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.alpha_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.alpha_decode`: Supported Method Parameters\n\nstr = PWN::SDR::Decoder::Flex.alpha_decode(words: [Integer, …])\n"}]}
|
|
1562
1603
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1563
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.decode`: Supported Method Parameters\n\
|
|
1604
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Flex.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1605
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.decode_bits Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.decode_bits`: Supported Method Parameters\n\ncarry = PWN::SDR::Decoder::Flex.decode_bits(bits: […]) { |msg| … }\n"}]}
|
|
1606
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.emit_frame Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.emit_frame`: Supported Method Parameters\n\nPWN::SDR::Decoder::Flex.emit_frame(words:, cycle:, frame:, speed:) { |msg| … }\n"}]}
|
|
1564
1607
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.help`: "}]}
|
|
1608
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.hex_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.hex_decode`: Supported Method Parameters\n\nstr = PWN::SDR::Decoder::Flex.hex_decode(words: [Integer, …])\n"}]}
|
|
1609
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.numeric_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.numeric_decode`: Supported Method Parameters\n\nstr = PWN::SDR::Decoder::Flex.numeric_decode(words: [Integer, …])\n"}]}
|
|
1610
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex::Demod.new`: "}]}
|
|
1611
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex::Demod.feed`: "}]}
|
|
1565
1612
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1566
1613
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::GPS.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1567
1614
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.help`: "}]}
|
|
1568
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::GPS.parse_line(line: ‘Position at … Lat = 32.7 [deg]
|
|
1615
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::GPS.parse_line(line: ‘Position at … Lat = 32.7 [deg] …’)\n"}]}
|
|
1569
1616
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1570
1617
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::GSM.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1571
1618
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.help`: "}]}
|
|
@@ -1577,27 +1624,35 @@
|
|
|
1577
1624
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1578
1625
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::LTE.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1579
1626
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.help`: "}]}
|
|
1580
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::LTE.parse_line(line: ‘Found CELL … PCI: 123
|
|
1627
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::LTE.parse_line(line: ‘Found CELL … PCI: 123 …’)\n"}]}
|
|
1581
1628
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1582
1629
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::LoRa.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1583
1630
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.help`: "}]}
|
|
1584
1631
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::LoRa.parse_line(line: ‘{“model”:“LoRa”,…}’)\n"}]}
|
|
1585
1632
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1586
1633
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Morse.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1634
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.decode_string Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.decode_string`: Supported Method Parameters\n\nh = PWN::SDR::Decoder::Morse.decode_string(pattern: ‘.- -…’)\n"}]}
|
|
1587
1635
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.help`: "}]}
|
|
1588
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.
|
|
1636
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse::Demod.new`: "}]}
|
|
1637
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse::Demod.feed`: "}]}
|
|
1589
1638
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1590
1639
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::P25.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1591
1640
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.help`: "}]}
|
|
1592
1641
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::P25.parse_line(line: ‘Sync: +P25p1 NAC: 293 src: 1234 tg: 5678’)\n"}]}
|
|
1642
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.alpha_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.alpha_decode`: Supported Method Parameters\n\nstr = PWN::SDR::Decoder::POCSAG.alpha_decode(words: [Integer, …])\n"}]}
|
|
1643
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.assemble Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.assemble`: Supported Method Parameters\n\nh = PWN::SDR::Decoder::POCSAG.assemble(pending: {ric:,func:,msg_words:}, baud: 1200)\n"}]}
|
|
1593
1644
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1594
1645
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::POCSAG.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1646
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.decode_bits Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.decode_bits`: Supported Method Parameters\n\ncarry = PWN::SDR::Decoder::POCSAG.decode_bits(bits: […], baud: 1200) { |msg| … } Returns the trailing (unconsumed) bits so the caller can prepend them to the next chunk for streaming continuity.\n"}]}
|
|
1595
1647
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.help`: "}]}
|
|
1596
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.
|
|
1648
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.numeric_decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.numeric_decode`: Supported Method Parameters\n\nstr = PWN::SDR::Decoder::POCSAG.numeric_decode(words: [Integer, …])\n"}]}
|
|
1649
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG::Demod.new`: "}]}
|
|
1650
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG::Demod.feed`: "}]}
|
|
1597
1651
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1598
1652
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Pager.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1599
1653
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.help`: "}]}
|
|
1600
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.
|
|
1654
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager::Demod.new`: "}]}
|
|
1655
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager::Demod.feed`: "}]}
|
|
1601
1656
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1602
1657
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.decode`: Supported Method Parameters\n\nrds_resp = PWN::SDR::Decoder::RDS.decode(\n\nfreq_obj: 'required - GQRX socket object returned from #connect method'\n\n)\n"}]}
|
|
1603
1658
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.help`: "}]}
|
|
@@ -1612,7 +1667,8 @@
|
|
|
1612
1667
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1613
1668
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::RTTY.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1614
1669
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.help`: "}]}
|
|
1615
|
-
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.
|
|
1670
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY::Demod.new`: "}]}
|
|
1671
|
+
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY::Demod.feed`: "}]}
|
|
1616
1672
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1617
1673
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::WiFi.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
|
|
1618
1674
|
{"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.help`: "}]}
|
|
@@ -1639,7 +1695,7 @@
|
|
|
1639
1695
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.disconnect_udp Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.disconnect_udp`: Supported Method Parameters\n\nPWN::SDR::GQRX.disconnect_udp(\n\nudp_listener: 'required - UDP socket object returned from #listen_udp method'\n\n)\n"}]}
|
|
1640
1696
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.duration_between Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.duration_between`: Supported Method Parameters\n\nduration = PWN::SDR::GQRX.duration_between(\n\ntimestamp_start: 'required - Start timestamp',\ntimestamp_end: 'required - End timestamp'\n\n)\n"}]}
|
|
1641
1697
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.edge_detection Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.edge_detection`: Supported Method Parameters\n\ncandidate_signals = PWN::SDR::GQRX.edge_detection(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nhz: 'required - Frequency to start edge detection from',\nprecision: 'required - Frequency step precision',\nstep_hz: 'required - Frequency step in Hz for edge detection',\nstrength_lock: 'required - Strength lock in dBFS to determine signal edges'\n\n)\n"}]}
|
|
1642
|
-
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.fast_scan_range Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.fast_scan_range`: Supported Method Parameters\n\nfast_resp = PWN::SDR::GQRX.fast_scan_range(\n\ngqrx_sock: 'required - GQRX socket object',\nranges: 'required - Array<Hash> of {start_freq:, target_freq: }',\nsample_rate: 'optional - Set this to GQRX visible input sample rate (the span width)',\nnfft: 'optional - FFT size',\navg: 'optional',\ncapture_secs: 'optional',\nstrength_lock: 'optional',\nmin_snr_db: 'optional - Minimum SNR in dB above per-chunk noise floor to report (defaults to 12.0)',\ndemodulator_mode: 'optional - Demodulator mode to attribute to detections (defaults to WFM)',\nbandwidth: 'optional - Passband bandwidth to attribute to detections (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level (defaults to strength_lock - 3.0)',\ndecoder: 'optional - Decoder key (e.g. :gsm) to attribute to detections',\nlocation: 'optional - Location string for AI analysis',\nkeep_spectrum: 'optional - if true return raw spectrum arrays too (large)'\n\n)\n\nUses chunk-wise retuning where chunk = sample_rate so that the *entire visible band* (waterfall width) is captured via a single FFT each time rather than point-by-point hops. This yields near real-time panoramic coverage. Update rate is roughly (retune + capture + fft) per chunk.\n\nPer-signal output shape is INTENTIONALLY IDENTICAL to scan_range / init_freq (:freq, :demodulator_mode, :bandwidth, :strength_db, :decoder, :squelch, :strength_lock, :iteration, :ai_analysis) so that analyze_scan / analyze_log and downstream decoders behave the same regardless of which scan mode produced the log. FFT-specific extras (:hz, :bw_hz, :snr_db, :prominence_db, :noise_floor_db, :chunk_center, :method) are appended for provenance.\n"}]}
|
|
1698
|
+
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.fast_scan_range Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.fast_scan_range`: Supported Method Parameters\n\nfast_resp = PWN::SDR::GQRX.fast_scan_range(\n\ngqrx_sock: 'required - GQRX socket object',\nranges: 'required - Array<Hash> of {start_freq:, target_freq: }',\nsample_rate: 'optional - Set this to GQRX visible input sample rate (the span width)',\nnfft: 'optional - FFT size',\navg: 'optional',\ncapture_secs: 'optional',\nstrength_lock: 'optional',\nmin_snr_db: 'optional - Minimum SNR in dB above per-chunk noise floor to report (defaults to 12.0)',\nprecision: 'optional - Band-plan channel raster; detections snapped to 10**(precision-1) Hz grid (defaults to 5)',\nmin_bw_ratio: 'optional - Reject FFT peaks narrower than min_bw_ratio * plan bandwidth as spurs (defaults to 0.30)',\ndemodulator_mode: 'optional - Demodulator mode to attribute to detections (defaults to WFM)',\nbandwidth: 'optional - Passband bandwidth to attribute to detections (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level (defaults to strength_lock - 3.0)',\ndecoder: 'optional - Decoder key (e.g. :gsm) to attribute to detections',\nlocation: 'optional - Location string for AI analysis',\nkeep_spectrum: 'optional - if true return raw spectrum arrays too (large)'\n\n)\n\nUses chunk-wise retuning where chunk = sample_rate so that the *entire visible band* (waterfall width) is captured via a single FFT each time rather than point-by-point hops. This yields near real-time panoramic coverage. Update rate is roughly (retune + capture + fft) per chunk.\n\nPer-signal output shape is INTENTIONALLY IDENTICAL to scan_range / init_freq (:freq, :demodulator_mode, :bandwidth, :strength_db, :decoder, :squelch, :strength_lock, :iteration, :ai_analysis) so that analyze_scan / analyze_log and downstream decoders behave the same regardless of which scan mode produced the log. FFT-specific extras (:hz, :bw_hz, :snr_db, :prominence_db, :noise_floor_db, :chunk_center, :method) are appended for provenance.\n"}]}
|
|
1643
1699
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.find_best_peak Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.find_best_peak`: Supported Method Parameters\n\nbest_peak = PWN::SDR::GQRX.find_best_peak(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\ncandidate_signals: 'required - Array of candidate signals from edge_detection',\nstep_hz: 'required - Frequency step in Hz for peak finding',\nstrength_lock: 'required - Strength lock in dBFS to determine signal edges'\n\n)\n"}]}
|
|
1644
1700
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.get_spectrum_snapshot Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.get_spectrum_snapshot`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1645
1701
|
{"messages":[{"role":"user","content":"PWN::SDR::GQRX.help Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.help`: "}]}
|