pwn 0.5.621 → 0.5.626

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/Gemfile +1 -1
  4. data/README.md +7 -1
  5. data/bin/pwn_gqrx_scanner +78 -9
  6. data/documentation/Agent-Tool-Registry.md +3 -3
  7. data/documentation/Configuration.md +301 -47
  8. data/documentation/Cron.md +5 -3
  9. data/documentation/Diagrams.md +1 -1
  10. data/documentation/Extrospection.md +472 -26
  11. data/documentation/FFI.md +72 -8
  12. data/documentation/Home.md +4 -4
  13. data/documentation/How-PWN-Works.md +7 -3
  14. data/documentation/Mistakes.md +9 -0
  15. data/documentation/SDR.md +83 -10
  16. data/documentation/Skills-Memory-Learning.md +101 -11
  17. data/documentation/diagrams/agent-tool-registry.svg +56 -55
  18. data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
  19. data/documentation/diagrams/aws-cloud-security.svg +25 -25
  20. data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
  21. data/documentation/diagrams/code-scanning-sast.svg +25 -25
  22. data/documentation/diagrams/cron-scheduling.svg +23 -23
  23. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -6
  25. data/documentation/diagrams/dot/hardware-hacking.dot +3 -1
  26. data/documentation/diagrams/dot/memory-skills-detailed.dot +4 -2
  27. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +4 -2
  28. data/documentation/diagrams/dot/overall-pwn-architecture.dot +3 -3
  29. data/documentation/diagrams/dot/persistence-filesystem.dot +3 -3
  30. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +10 -4
  31. data/documentation/diagrams/dot/sdr-radio-flow.dot +39 -16
  32. data/documentation/diagrams/driver-framework.svg +13 -13
  33. data/documentation/diagrams/extrospection-world-awareness.svg +383 -177
  34. data/documentation/diagrams/fuzzing-workflow.svg +24 -24
  35. data/documentation/diagrams/hardware-hacking.svg +84 -69
  36. data/documentation/diagrams/history-to-drivers.svg +18 -18
  37. data/documentation/diagrams/memory-skills-detailed.svg +137 -120
  38. data/documentation/diagrams/mistakes-negative-feedback.svg +152 -137
  39. data/documentation/diagrams/network-infra-testing.svg +27 -27
  40. data/documentation/diagrams/overall-pwn-architecture.svg +97 -97
  41. data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
  42. data/documentation/diagrams/persistence-filesystem.svg +100 -94
  43. data/documentation/diagrams/plugin-ecosystem.svg +35 -35
  44. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +254 -207
  45. data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
  46. data/documentation/diagrams/reporting-pipeline.svg +18 -18
  47. data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
  48. data/documentation/diagrams/sdr-radio-flow.svg +223 -91
  49. data/documentation/diagrams/sessions-cron-automation.svg +18 -18
  50. data/documentation/diagrams/swarm-multi-agent.svg +39 -39
  51. data/documentation/diagrams/web-application-testing.svg +26 -26
  52. data/documentation/diagrams/zero-day-research-flow.svg +25 -25
  53. data/documentation/pwn-ai-Agent.md +16 -10
  54. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  55. data/lib/pwn/ai/agent/assembly.rb +1 -1
  56. data/lib/pwn/ai/agent/btc.rb +1 -1
  57. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  58. data/lib/pwn/ai/agent/extrospection.rb +2562 -57
  59. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  60. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  61. data/lib/pwn/ai/agent/learning.rb +16 -16
  62. data/lib/pwn/ai/agent/loop.rb +1 -1
  63. data/lib/pwn/ai/agent/{introspection.rb → reflect.rb} +12 -12
  64. data/lib/pwn/ai/agent/sast.rb +1 -1
  65. data/lib/pwn/ai/agent/tools/extrospection.rb +311 -8
  66. data/lib/pwn/ai/agent/tools/learning.rb +7 -7
  67. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  68. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  69. data/lib/pwn/ai/agent.rb +1 -1
  70. data/lib/pwn/ai/open_ai.rb +10 -6
  71. data/lib/pwn/config.rb +5 -4
  72. data/lib/pwn/ffi/adalm_pluto.rb +498 -0
  73. data/lib/pwn/ffi/fftw.rb +192 -0
  74. data/lib/pwn/ffi/hack_rf.rb +193 -0
  75. data/lib/pwn/ffi/liquid.rb +244 -0
  76. data/lib/pwn/ffi/rtl_sdr.rb +210 -0
  77. data/lib/pwn/ffi/soapy_sdr.rb +177 -0
  78. data/lib/pwn/ffi/stdio.rb +9 -1
  79. data/lib/pwn/ffi/volk.rb +241 -0
  80. data/lib/pwn/ffi.rb +45 -2
  81. data/lib/pwn/plugins/burp_suite.rb +2 -2
  82. data/lib/pwn/sast/pom_version.rb +2 -2
  83. data/lib/pwn/sast/test_case_engine.rb +1 -1
  84. data/lib/pwn/sdr/decoder/adsb.rb +201 -12
  85. data/lib/pwn/sdr/decoder/apt.rb +19 -5
  86. data/lib/pwn/sdr/decoder/base.rb +314 -1
  87. data/lib/pwn/sdr/decoder/bluetooth.rb +91 -18
  88. data/lib/pwn/sdr/decoder/dect.rb +81 -23
  89. data/lib/pwn/sdr/decoder/dsp.rb +229 -15
  90. data/lib/pwn/sdr/decoder/flex.rb +23 -6
  91. data/lib/pwn/sdr/decoder/gps.rb +80 -18
  92. data/lib/pwn/sdr/decoder/gsm.rb +83 -28
  93. data/lib/pwn/sdr/decoder/iridium.rb +80 -18
  94. data/lib/pwn/sdr/decoder/lora.rb +84 -28
  95. data/lib/pwn/sdr/decoder/lte.rb +80 -18
  96. data/lib/pwn/sdr/decoder/morse.rb +23 -6
  97. data/lib/pwn/sdr/decoder/p25.rb +90 -31
  98. data/lib/pwn/sdr/decoder/pager.rb +23 -6
  99. data/lib/pwn/sdr/decoder/pocsag.rb +23 -6
  100. data/lib/pwn/sdr/decoder/rds.rb +219 -52
  101. data/lib/pwn/sdr/decoder/rfid.rb +81 -27
  102. data/lib/pwn/sdr/decoder/rtl433.rb +85 -27
  103. data/lib/pwn/sdr/decoder/rtty.rb +23 -6
  104. data/lib/pwn/sdr/decoder/wifi.rb +86 -32
  105. data/lib/pwn/sdr/decoder/zigbee.rb +88 -35
  106. data/lib/pwn/sdr/decoder.rb +6 -5
  107. data/lib/pwn/sdr/frequency_allocation.rb +124 -81
  108. data/lib/pwn/sdr/gqrx.rb +1513 -165
  109. data/lib/pwn/version.rb +1 -1
  110. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +96 -0
  111. data/spec/lib/pwn/ai/agent/{introspection_spec.rb → reflect_spec.rb} +3 -3
  112. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +8 -24
  113. data/spec/lib/pwn/ffi/adalm_pluto_spec.rb +37 -0
  114. data/spec/lib/pwn/ffi/fftw_spec.rb +26 -0
  115. data/spec/lib/pwn/ffi/hack_rf_spec.rb +25 -0
  116. data/spec/lib/pwn/ffi/liquid_spec.rb +42 -0
  117. data/spec/lib/pwn/ffi/rtl_sdr_spec.rb +24 -0
  118. data/spec/lib/pwn/ffi/soapy_sdr_spec.rb +25 -0
  119. data/spec/lib/pwn/ffi/volk_spec.rb +36 -0
  120. data/spec/lib/pwn/sdr/decoder/base_iq_spec.rb +65 -0
  121. data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +50 -4
  122. data/spec/lib/pwn/sdr/decoder/rds_spec.rb +45 -4
  123. data/third_party/pwn_rdoc.jsonl +279 -30
  124. metadata +21 -5
@@ -18,49 +18,155 @@
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.auto_reflect 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"}]}
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.build_osint_summary Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.build_osint_summary`: "}]}
24
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.build_rf_summary Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.build_rf_summary`: "}]}
25
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.capture_screenshot Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.capture_screenshot`: "}]}
26
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.commit_verdict Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.commit_verdict`: "}]}
23
27
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.compute_drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.compute_drift`: "}]}
24
28
  {"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"}]}
29
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.default_capture_iface Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.default_capture_iface`: "}]}
30
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.default_rf_bandwidth Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.default_rf_bandwidth`: "}]}
31
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.default_rf_demod Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.default_rf_demod`: "}]}
32
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.detect_claim_kind Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.detect_claim_kind`: "}]}
33
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.detect_osint_kind Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.detect_osint_kind`: "}]}
25
34
  {"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"}]}
35
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.extract_text Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.extract_text`: "}]}
36
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.fingerprint_page Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.fingerprint_page`: "}]}
37
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.first_serial_dev Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.first_serial_dev`: "}]}
26
38
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.flatten Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.flatten`: "}]}
39
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.fuzzy_overlap Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.fuzzy_overlap`: "}]}
27
40
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.help`: "}]}
28
41
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.http_get_json Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.http_get_json`: "}]}
42
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.human_rf_label Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.human_rf_label`: "}]}
29
43
  {"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"}]}
30
44
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel_circl Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel_circl`: "}]}
31
45
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel_exploitdb Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel_exploitdb`: "}]}
32
46
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel_nvd Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel_nvd`: "}]}
33
47
  {"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"}]}
48
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.match_rf_band_plan Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.match_rf_band_plan`: "}]}
49
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.normalize_rf_freq Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.normalize_rf_freq`: "}]}
34
50
  {"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"}]}
51
+ {"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, :osint, :serial, :telecomm, :packet, :vision, :voice, :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"}]}
52
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.osint(\n\nquery: 'required - phone, IP, domain, email, person name, FCC ID, patent #, username, VIN, MAC, callsign, …',\nkind: 'optional - auto|:ip|:geo|:dns|:whois|:rdap|:crtsh|:bgp|:shodan|:hunter|:phone|:fcc_id|:patent|:person|:username|:github|:wayback|:url|:company|:cik|:openfda|:vital_records|:threat|:vin|:mac|:callsign|:npi|:cve (default :auto)',\nfeeds: 'optional - Array subset of DEFAULT_OSINT_FEEDS (default: auto-selected from kind)',\nlimit: 'optional - max hits per feed (default 5)',\nrecord: 'optional - also observe(category: :osint) (default true)',\nttl: 'optional - observation TTL seconds (default 86400)',\napi_keys: 'optional - Hash of {shodan:, hunter:, abuseipdb:, virustotal:, greynoise:, haveibeenpwned:, securitytrails:} overriding PWN::Env / ENV'\n\n)\n\nAggregates as many *public / free* OSINT APIs as possible (sourced in part from public-api-lists/public-api-lists), with optional keyed feeds (Shodan / Hunter / AbuseIPDB / VirusTotal / GreyNoise / HaveIBeenPwned / SecurityTrails) when keys exist in PWN::Env or ENV. Best-effort: any unreachable feed degrades to an error hash rather than raising. First-class kinds cover: reverse phone, person / missing-person, patent, FCC ID, VIN (NHTSA), MAC OUI, ham callsign (Callook), IP/ASN/BGP + threat reputation (ipapi.is / iplocate / ipwho.is / AbuseIPDB / GreyNoise), CT (crt.sh + Cert Spotter), whois/RDAP, GitHub, Wayback, OTX / URLHaus / ThreatFox / urlscan, HackerTarget, openFDA, NPPES NPI, Nominatim, OpenCorporates, CourtListener, SEC EDGAR, Federal Register, UK Police, EPSS + CISA KEV, Microlink unfurl, universities, name demographics (Agify/Genderize/Nationalize), and vital-records public plans.\n"}]}
53
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_abuseipdb Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_abuseipdb`: "}]}
54
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_agify Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_agify`: "}]}
55
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_api_keys Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_api_keys`: "}]}
56
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_bgpview Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_bgpview`: "}]}
57
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_callook Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_callook`: "}]}
58
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_certspotter Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_certspotter`: "}]}
59
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_cisa_kev Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_cisa_kev`: "}]}
60
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_config`: "}]}
61
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_courtlistener Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_courtlistener`: "}]}
62
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_crtsh Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_crtsh`: "}]}
63
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_dispatch Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_dispatch`: "}]}
64
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_dns Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_dns`: "}]}
65
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_epss Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_epss`: "}]}
66
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_fcc_id Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_fcc_id`: "}]}
67
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_federal_register Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_federal_register`: "}]}
68
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_feeds_for Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_feeds_for`: "}]}
69
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_genderize Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_genderize`: "}]}
70
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_github Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_github`: "}]}
71
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_greynoise Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_greynoise`: "}]}
72
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_hackertarget Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_hackertarget`: "}]}
73
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_haveibeenpwned Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_haveibeenpwned`: "}]}
74
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_hunter Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_hunter`: "}]}
75
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_ip_geo Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_ip_geo`: "}]}
76
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_ipapi_is Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_ipapi_is`: "}]}
77
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_iplocate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_iplocate`: "}]}
78
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_ipwhois Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_ipwhois`: "}]}
79
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_mac_vendor Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_mac_vendor`: "}]}
80
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_microlink Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_microlink`: "}]}
81
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_nationalize Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_nationalize`: "}]}
82
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_nhtsa Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_nhtsa`: "}]}
83
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_nominatim Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_nominatim`: "}]}
84
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_nppes Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_nppes`: "}]}
85
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_opencorporates Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_opencorporates`: "}]}
86
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_openfda Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_openfda`: "}]}
87
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_otx Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_otx`: "}]}
88
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_patent Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_patent`: "}]}
89
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_person Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_person`: "}]}
90
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_phone Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_phone`: "}]}
91
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_rdap Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_rdap`: "}]}
92
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_sec_edgar Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_sec_edgar`: "}]}
93
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_securitytrails Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_securitytrails`: "}]}
94
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_shodan Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_shodan`: "}]}
95
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_threatfox Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_threatfox`: "}]}
96
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_uk_police Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_uk_police`: "}]}
97
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_universities Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_universities`: "}]}
98
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_urlhaus Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_urlhaus`: "}]}
99
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_urlscan Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_urlscan`: "}]}
100
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_username Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_username`: "}]}
101
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_virustotal Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_virustotal`: "}]}
102
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_vital_records Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_vital_records`: "}]}
103
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_wayback Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_wayback`: "}]}
104
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.osint_whois Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.osint_whois`: "}]}
105
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.packet_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.packet_config`: "}]}
106
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.packet_sense Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.packet_sense`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.packet_sense(\n\naction: 'optional - :inventory|:capture|:summarize_pcap (default :inventory)',\niface: 'optional - capture interface (default first non-lo or \"any\")',\nfilter: 'optional - BPF filter (e.g. \"tcp port 443\")',\ncount: 'optional - packets to capture (default 20, max 200)',\ntimeout: 'optional - capture seconds (default 5, max 60)',\npath: 'optional - pcap path for :summarize_pcap',\nrecord: 'optional - observe(category: :packet) (default true)',\nttl: 'optional - observation TTL (default 600)'\n\n)\n\nPassive L2/L3 sense via tshark/tcpdump when present; pcap summarisation via PWN::Plugins::Packet + tshark. Capture is short and bounded so the agent never hangs mid-turn.\n"}]}
107
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.pick_stt_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.pick_stt_engine`: "}]}
108
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.pick_tts_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.pick_tts_engine`: "}]}
109
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.presence_map Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.presence_map`: "}]}
110
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.presence_only_bin? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.presence_only_bin?`: "}]}
36
111
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_env Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_env`: "}]}
37
112
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_host Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_host`: "}]}
38
113
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_net Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_net`: "}]}
114
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_osint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_osint`: "}]}
115
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_packet Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_packet`: "}]}
39
116
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_repo Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_repo`: "}]}
40
117
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_rf Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_rf`: "}]}
118
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_serial Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_serial`: "}]}
119
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_telecomm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_telecomm`: "}]}
41
120
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_toolchain Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_toolchain`: "}]}
121
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_vision Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_vision`: "}]}
122
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_voice Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_voice`: "}]}
123
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_web Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_web`: "}]}
42
124
  {"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"}]}
125
+ {"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
126
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_band_plan_keys Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_band_plan_keys`: "}]}
127
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_config`: "}]}
44
128
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_present? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_present?`: "}]}
129
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_tune Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_tune`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.rf_tune(\n\nfreq: 'required - frequency: \"101.1\", \"101.1 FM\", \"101.100.000\", 101_100_000, ...',\nhost: 'optional - GQRX remote-control host (default 127.0.0.1)',\nport: 'optional - GQRX remote-control port (default 7356)',\nsettle_secs: 'optional - seconds to sample RDS after tune (default 8)',\nrds: 'optional - force RDS on/off (default: auto when FM broadcast / band-plan decoder=:rds)',\ndemodulator_mode: 'optional - e.g. :WFM_ST, :WFM, :FM, :AM (default from band-plan / FM range)',\nbandwidth: 'optional - passband Hz string, e.g. \"200.000\" (default from band-plan)',\nrecord: 'optional - also observe(category: :rf) so it hits EXTROSPECTION (default true)',\nttl: 'optional - observation TTL seconds (default 300 — radio content is ephemeral)'\n\n)\n\nRF sense organ — the RF analogue of extro_watch / extro_verify. Tunes a running GQRX instance (never launches the GUI), demodulates, measures strength, and when appropriate samples RDS (PI / PS / RadioText) so questions like “what’s playing on 101.1?” have a live answer. Requires GQRX remote control already listening (default :7356) and an SDR attached; fails fast with actionable advice otherwise. On success, records observe(category: :rf, source: ‘gqrx’) so correlate and to_context keep the agent aware of what was last heard.\n"}]}
130
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_attr Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_attr`: "}]}
131
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_host Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_host`: "}]}
132
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.safe_meta Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.safe_meta`: "}]}
133
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.sample_rds Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.sample_rds`: "}]}
45
134
  {"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"}]}
135
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.serial_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.serial_config`: "}]}
136
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.serial_sense Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.serial_sense`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.serial_sense(\n\nblock_dev: 'optional - device path (default first ttyUSB/ttyACM or config)',\nbaud: 'optional - baud rate (default 9600)',\npayload: 'optional - String or byte Array to write (e.g. \"ATI\\\\r\" or [0x41,0x54])',\nsettle_secs:'optional - seconds to read after write (default 1.5)',\ndata_bits: 'optional (default 8)',\nstop_bits: 'optional (default 1)',\nparity: 'optional :none|:even|:odd (default :none)',\nrecord: 'optional - observe(category: :serial) (default true)',\nttl: 'optional - observation TTL (default 600)'\n\n)\n\nPassive inventory via snapshot(sections:); this verb is the active serial sense — open a device (PWN::Plugins::Serial), optional payload write, drain response, disconnect. Never keeps the port open across calls so other tools can claim the bus.\n"}]}
46
137
  {"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"}]}
138
+ {"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, :osint, :serial, :telecomm, :packet, :vision, :voice] (default host/net/toolchain/repo/env/rf)'\n\n)\n\nAmbient host baseline (secondary to sense tools like intel/verify/watch). :toolchain never spawns GUI/JVM tools (presence-only). auto_extrospect uses AUTO_SECTIONS (host/repo/env) only. When persist:true the prior snapshot is rotated into :previous so .drift can diff them.\n"}]}
48
139
  {"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
140
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.summarise_drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.summarise_drift`: "}]}
141
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.summarize_pcap_file Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.summarize_pcap_file`: "}]}
50
142
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.tcp_open? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.tcp_open?`: "}]}
143
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.telecomm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.telecomm`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.telecomm(\n\naction: 'optional - :status|:dial|:hangup|:inventory (default :inventory)',\ntarget: 'optional - SIP URI / phone number for :dial (e.g. \"sip:alice@example.com\" or \"+13125551212\")',\nhost: 'optional - BareSIP HTTP control host (default 127.0.0.1)',\nport: 'optional - BareSIP HTTP control port (default 8000)',\nrecord: 'optional - observe(category: :telecomm) (default true)',\nttl: 'optional - observation TTL (default 600)'\n\n)\n\nTelecomm analogue of rf_tune — senses live SIP / VoIP / PSTN state through a running BareSIP instance (never launches it). Status and inventory always; dial/hangup are explicit and OPSEC-sensitive.\n"}]}
144
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.telecomm_baresip_cmd Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.telecomm_baresip_cmd`: "}]}
145
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.telecomm_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.telecomm_config`: "}]}
146
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.tls_fingerprint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.tls_fingerprint`: "}]}
51
147
  {"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"}]}
148
+ {"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"}]}
149
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.vision Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.vision`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.vision(\n\nfile: 'required - path to image / screenshot / PDF-page render',\naction: 'optional - :ocr|:barcode|:inventory (default :ocr when file given, else :inventory)',\nlang: 'optional - tesseract language (default eng)',\nrecord: 'optional - observe(category: :vision) (default true)',\nttl: 'optional - observation TTL (default 86400)'\n\n)\n\nEyes on the host: OCR via PWN::Plugins::OCR (RTesseract / tesseract) and barcode/QR decode via zbarimg when present. Inventory only when no file is supplied.\n"}]}
150
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.vision_barcodes Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.vision_barcodes`: "}]}
151
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.vision_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.vision_config`: "}]}
152
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.vision_ocr Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.vision_ocr`: "}]}
153
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.voice_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.voice_config`: "}]}
154
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.voice_sense Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.voice_sense`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Extrospection.voice_sense(\n\naction: 'optional - :inventory|:tts|:stt (default :inventory)',\ntext: 'optional - text to speak for :tts (or text_path:)',\ntext_path: 'optional - path to text file for :tts',\naudio: 'optional - path to audio file for :stt',\nout: 'optional - output audio path for :tts (wav)',\nengine: 'optional - :espeak|:festival|:spd_say|:whisper (auto)',\nmodel: 'optional - whisper model (default tiny)',\nrecord: 'optional - observe(category: :voice) (default true)',\nttl: 'optional - observation TTL (default 3600)'\n\n)\n\nWraps PWN::Plugins::Voice + system TTS/STT binaries (espeak-ng, festival, spd-say, whisper, sox). Inventory is always free; TTS/STT are on-demand and persist optional artefacts under ~/.pwn/extrospection/voice/.\n"}]}
155
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.voice_stt Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.voice_stt`: "}]}
156
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.voice_tts Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.voice_tts`: "}]}
157
+ {"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"}]}
158
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.web_anchors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.web_anchors`: "}]}
159
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.web_config Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.web_config`: "}]}
160
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.with_headless_browser Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.with_headless_browser`: "}]}
52
161
  {"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
162
  {"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
163
  {"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.help`: "}]}
55
164
  {"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
165
  {"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
166
  {"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
167
  {"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.auto_reflect Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_reflect`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.auto_reflect(\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"}]}
63
- {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_reflect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_reflect_enabled?`: "}]}
168
+ {"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"}]}
169
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.auto_introspect_enabled? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.auto_introspect_enabled?`: "}]}
64
170
  {"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
171
  {"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
172
  {"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 +177,7 @@
71
177
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.introspective_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.introspective_lessons`: "}]}
72
178
  {"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
179
  {"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::Introspection (when available) to LLM-summarise the session into structured lessons. Falls back to a heuristic extractor when introspection is disabled so learning never stops.\n"}]}
180
+ {"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
181
  {"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
182
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.skills_dir Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.skills_dir`: "}]}
77
183
  {"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 +231,9 @@
125
231
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.mistakes_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.mistakes_block`: "}]}
126
232
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.pwn_version Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.pwn_version`: "}]}
127
233
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.skills_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.skills_block`: "}]}
234
+ {"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"}]}
235
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Reflect.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Reflect.help`: "}]}
236
+ {"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
237
  {"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
238
  {"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
239
  {"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"}]}
@@ -705,9 +814,73 @@
705
814
  {"messages":[{"role":"user","content":"PWN::Driver::Parser.new Usage"},{"role":"assistant","content":"`PWN::Driver::Parser.new`: "}]}
706
815
  {"messages":[{"role":"user","content":"PWN::Driver::Parser.parse! Usage"},{"role":"assistant","content":"`PWN::Driver::Parser.parse!`: "}]}
707
816
  {"messages":[{"role":"user","content":"PWN::FFI.authors Usage"},{"role":"assistant","content":"`PWN::FFI.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
817
+ {"messages":[{"role":"user","content":"PWN::FFI.available? Usage"},{"role":"assistant","content":"`PWN::FFI.available?`: Supported Method Parameters\n\nok = PWN::FFI.available?(\n\nmod: 'required - Symbol or Module (e.g. :Liquid or PWN::FFI::Liquid)'\n\n)\n"}]}
818
+ {"messages":[{"role":"user","content":"PWN::FFI.backends Usage"},{"role":"assistant","content":"`PWN::FFI.backends`: Supported Method Parameters\n\nPWN::FFI.backends Returns { ModuleName => true|false } for every registered binding.\n"}]}
708
819
  {"messages":[{"role":"user","content":"PWN::FFI.help Usage"},{"role":"assistant","content":"`PWN::FFI.help`: "}]}
820
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.authors Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
821
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.available? Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.available?`: Supported Method Parameters\n\nPWN::FFI::AdalmPluto.available?\n"}]}
822
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.capture Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.capture`: Supported Method Parameters\n\niq = PWN::FFI::AdalmPluto.capture(\n\nfreq_hz: 'required',\nrate_hz: 2_500_000,\nbytes: 1_048_576, # approximate payload size\nuri: nil,\ngain_db: nil\n\n) Returns { iq_cs16: String, rate_hz:, freq_hz:, samples: }\n"}]}
823
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.close Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.close`: Supported Method Parameters\n\nPWN::FFI::AdalmPluto.close(context: pointer)\n"}]}
824
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.configure Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.configure`: Supported Method Parameters\n\nPWN::FFI::AdalmPluto.configure(\n\ncontext: 'required - pointer from .open',\nfreq_hz: 'required - RX LO frequency Hz',\nrate_hz: 'optional - sample rate (default 2_500_000)',\nbw_hz: 'optional - RF bandwidth (default = rate_hz)',\ngain_db: 'optional - manual gain dB; nil = slow_attack AGC',\ngain_mode:'optional - slow_attack|fast_attack|manual|hybrid'\n\n)\n"}]}
825
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.device_info Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.device_info`: Supported Method Parameters\n\nmeta = PWN::FFI::AdalmPluto.device_info(context: pointer) Returns { name:, description:, devices: [{id:, name:}, …] }\n"}]}
826
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.help Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.help`: "}]}
827
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.info Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.info`: Supported Method Parameters\n\ninfo = PWN::FFI::AdalmPluto.info Returns { available:, major:, minor:, git_tag:, ad9361: }\n"}]}
828
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.list_uris Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.list_uris`: Supported Method Parameters\n\nuris = PWN::FFI::AdalmPluto.list_uris(backends: ‘usb,ip,local’) Returns Array<Hash> of { uri:, description: }\n"}]}
829
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.open Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.open`: Supported Method Parameters\n\nctx = PWN::FFI::AdalmPluto.open(uri: ‘ip:192.168.2.1’) Returns opaque iio_context* pointer. ALWAYS pair with .close.\n"}]}
830
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.read_sync Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.read_sync`: Supported Method Parameters\n\niq_cs16 = PWN::FFI::AdalmPluto.read_sync(handle: hash_from_start_rx) Returns binary String of interleaved little-endian signed-16 I/Q (I0,Q0,I1,Q1,…) — same contract as a cs16 capture file.\n"}]}
831
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.start_rx Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.start_rx`: Supported Method Parameters\n\nhandle = PWN::FFI::AdalmPluto.start_rx(\n\ncontext: 'required - pointer from .open',\nsamples: 'optional - samples-per-refill (default 262144)',\ncyclic: 'optional - cyclic buffer (default false)'\n\n) Returns { buffer:, rx:, i_chn:, q_chn:, samples: } — pair with .stop_rx.\n"}]}
832
+ {"messages":[{"role":"user","content":"PWN::FFI::AdalmPluto.stop_rx Usage"},{"role":"assistant","content":"`PWN::FFI::AdalmPluto.stop_rx`: Supported Method Parameters\n\nPWN::FFI::AdalmPluto.stop_rx(handle: hash_from_start_rx)\n"}]}
833
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.authors Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
834
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.available? Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.available?`: Supported Method Parameters\n\nPWN::FFI::FFTW.available?\n"}]}
835
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.cfft Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.cfft`: Supported Method Parameters\n\nspectrum = PWN::FFI::FFTW.cfft(\n\niq: 'required - interleaved Array<Float> I/Q (even length)',\nn: 'optional - number of complex samples (default iq.length/2)',\nsign: 'optional - :forward (default) or :backward'\n\n) Returns Array of [re, im] pairs length n.\n"}]}
836
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.help Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.help`: "}]}
837
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.rfft Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.rfft`: Supported Method Parameters\n\nspectrum = PWN::FFI::FFTW.rfft(\n\nsamples: 'required - Array<Float> real input (length = n)',\nn: 'optional - FFT size (default samples.length; zero-pads/truncates)'\n\n) Returns Array of [re, im] pairs, length n/2+1 (DC .. Nyquist).\n"}]}
838
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.rfft_magnitude Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.rfft_magnitude`: Supported Method Parameters\n\nmag = PWN::FFI::FFTW.rfft_magnitude(\n\nsamples: 'required - Array<Float>',\nn: 'optional - FFT size'\n\n) Returns Array<Float> of |X| for k=0..n/2.\n"}]}
839
+ {"messages":[{"role":"user","content":"PWN::FFI::FFTW.rfft_power_db Usage"},{"role":"assistant","content":"`PWN::FFI::FFTW.rfft_power_db`: Supported Method Parameters\n\npower_db = PWN::FFI::FFTW.rfft_power_db(\n\nsamples: 'required - Array<Float>',\nn: 'optional - FFT size',\nfloor: 'optional - dB floor for zeros (default -120.0)'\n\n) Returns Array<Float> of 20*log10(|X|) with a noise floor.\n"}]}
840
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.authors Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
841
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.available? Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.available?`: Supported Method Parameters\n\nPWN::FFI::HackRF.available?\n"}]}
842
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.close Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.close`: Supported Method Parameters\n\nPWN::FFI::HackRF.close(device: pointer)\n"}]}
843
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.configure Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.configure`: Supported Method Parameters\n\nPWN::FFI::HackRF.configure(\n\ndevice: 'required - pointer from .open',\nfreq_hz: 'required - center frequency Hz',\nrate_hz: 'optional - sample rate (default 10e6)',\nlna_gain: 'optional - 0..40 step 8 (default 16)',\nvga_gain: 'optional - 0..62 step 2 (default 20)',\namp: 'optional - true/false RF amp (default false)',\nbb_bw_hz: 'optional - baseband filter BW Hz'\n\n)\n"}]}
844
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.device_info Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.device_info`: Supported Method Parameters\n\nmeta = PWN::FFI::HackRF.device_info(device: pointer) Returns { board_id:, board_name:, version: }\n"}]}
845
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.help Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.help`: "}]}
846
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.info Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.info`: Supported Method Parameters\n\ninfo = PWN::FFI::HackRF.info Returns Hash with library_version / library_release / available.\n"}]}
847
+ {"messages":[{"role":"user","content":"PWN::FFI::HackRF.open Usage"},{"role":"assistant","content":"`PWN::FFI::HackRF.open`: Supported Method Parameters\n\ndev = PWN::FFI::HackRF.open(serial: nil) Returns FFI::Pointer (opaque hackrf_device*) or raises.\n"}]}
848
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.authors Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
849
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.available? Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.available?`: Supported Method Parameters\n\nPWN::FFI::Liquid.available?\n"}]}
850
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.dc_block Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.dc_block`: Supported Method Parameters\n\nout = PWN::FFI::Liquid.dc_block(\n\nsamples: 'required - Array<Float>',\nm: 'optional - prototype semi-length (default 7 → len 15)',\nas_db: 'optional - stop-band attenuation dB (default 60.0)'\n\n)\n"}]}
851
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.fir_kaiser Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.fir_kaiser`: Supported Method Parameters\n\nout = PWN::FFI::Liquid.fir_kaiser(\n\nsamples: 'required - Array<Float>',\nlength: 'optional - filter length (default 51, odd preferred)',\nfc: 'optional - normalised cutoff 0..0.5 (default 0.1)',\nas_db: 'optional - stop-band attenuation dB (default 60.0)',\nmu: 'optional - fractional sample offset (default 0.0)'\n\n) Returns Array<Float> same length as input.\n"}]}
852
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.freq_demod Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.freq_demod`: Supported Method Parameters\n\naudio = PWN::FFI::Liquid.freq_demod(\n\niq: 'required - interleaved I/Q Array<Float> (even length)',\nkf: 'optional - modulation factor (default 0.5)'\n\n) Returns Array<Float> of demodulated real samples (length = iq.length/2).\n"}]}
853
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.help Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.help`: "}]}
854
+ {"messages":[{"role":"user","content":"PWN::FFI::Liquid.resample Usage"},{"role":"assistant","content":"`PWN::FFI::Liquid.resample`: Supported Method Parameters\n\nout = PWN::FFI::Liquid.resample(\n\nsamples: 'required - Array<Float>',\nrate: 'required - output/input ratio (>0)',\nas_db: 'optional - stop-band attenuation dB (default 60.0)'\n\n) Returns Array<Float> of resampled samples.\n"}]}
855
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.authors Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
856
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.available? Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.available?`: Supported Method Parameters\n\nPWN::FFI::RTLSdr.available?\n"}]}
857
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.close Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.close`: Supported Method Parameters\n\nPWN::FFI::RTLSdr.close(device: pointer)\n"}]}
858
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.configure Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.configure`: Supported Method Parameters\n\nPWN::FFI::RTLSdr.configure(\n\ndevice: 'required - pointer from .open',\nfreq_hz: 'required - center frequency Hz',\nrate_hz: 'optional - sample rate (default 2.048e6)',\ngain_db: 'optional - tenths of dB (e.g. 496 = 49.6 dB). nil = auto',\nppm: 'optional - freq correction ppm (default 0)'\n\n)\n"}]}
859
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.help Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.help`: "}]}
860
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.list_devices Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.list_devices`: Supported Method Parameters\n\ndevices = PWN::FFI::RTLSdr.list_devices Returns Array<Hash> of { index:, name:, manufacturer:, product:, serial: }.\n"}]}
861
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.open Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.open`: Supported Method Parameters\n\ndev = PWN::FFI::RTLSdr.open(index: 0) Returns opaque FFI::Pointer (rtlsdr_dev_t*).\n"}]}
862
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.read_sync Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.read_sync`: Supported Method Parameters\n\niq_u8 = PWN::FFI::RTLSdr.read_sync(\n\ndevice: 'required - pointer from .open',\nbytes: 'optional - number of raw bytes to read (default 262144)'\n\n) Returns a binary String of unsigned 8-bit interleaved I/Q samples.\n"}]}
863
+ {"messages":[{"role":"user","content":"PWN::FFI::RTLSdr.tuner_gains Usage"},{"role":"assistant","content":"`PWN::FFI::RTLSdr.tuner_gains`: Supported Method Parameters\n\ngains = PWN::FFI::RTLSdr.tuner_gains(device: pointer) Returns Array<Integer> of supported gains in tenths of a dB.\n"}]}
864
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.authors Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
865
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.available? Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.available?`: Supported Method Parameters\n\nPWN::FFI::SoapySDR.available?\n"}]}
866
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.device_keys Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.device_keys`: Supported Method Parameters\n\nmeta = PWN::FFI::SoapySDR.device_keys(device: pointer) Returns { driver:, hardware: }.\n"}]}
867
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.help Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.help`: "}]}
868
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.info Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.info`: Supported Method Parameters\n\ninfo = PWN::FFI::SoapySDR.info Returns { available:, api:, abi:, lib: }.\n"}]}
869
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.list_devices Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.list_devices`: Supported Method Parameters\n\ndevices = PWN::FFI::SoapySDR.list_devices Returns Array<Hash> of keyword→value maps for every enumerated device.\n"}]}
870
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.make Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.make`: Supported Method Parameters\n\ndev = PWN::FFI::SoapySDR.make(args: ‘driver=rtlsdr’) Returns opaque pointer (SoapySDRDevice*) or raises. ALWAYS pair with .unmake.\n"}]}
871
+ {"messages":[{"role":"user","content":"PWN::FFI::SoapySDR.unmake Usage"},{"role":"assistant","content":"`PWN::FFI::SoapySDR.unmake`: Supported Method Parameters\n\nPWN::FFI::SoapySDR.unmake(device: pointer)\n"}]}
709
872
  {"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"}]}
873
+ {"messages":[{"role":"user","content":"PWN::FFI::Stdio.available? Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.available?`: Supported Method Parameters\n\nPWN::FFI::Stdio.available?\n"}]}
710
874
  {"messages":[{"role":"user","content":"PWN::FFI::Stdio.help Usage"},{"role":"assistant","content":"`PWN::FFI::Stdio.help`: "}]}
875
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.accumulate Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.accumulate`: Supported Method Parameters\n\nsum = PWN::FFI::Volk.accumulate(samples: Array<Float>)\n"}]}
876
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.authors Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
877
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.available? Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.available?`: Supported Method Parameters\n\nPWN::FFI::Volk.available?\n"}]}
878
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.dot_prod Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.dot_prod`: Supported Method Parameters\n\nsum = PWN::FFI::Volk.dot_prod(a: Array<Float>, b: Array<Float>)\n"}]}
879
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.help Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.help`: "}]}
880
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.magnitude_squared Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.magnitude_squared`: Supported Method Parameters\n\npower = PWN::FFI::Volk.magnitude_squared(\n\niq: 'required - Array of interleaved I/Q Floats (even length)'\n\n) Returns Array<Float> of |z|^2 per complex sample.\n"}]}
881
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.scale Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.scale`: Supported Method Parameters\n\nout = PWN::FFI::Volk.scale(samples: Array<Float>, factor: Float) Multiplies every sample by factor.\n"}]}
882
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.sqrt Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.sqrt`: Supported Method Parameters\n\nout = PWN::FFI::Volk.sqrt(samples: Array<Float>)\n"}]}
883
+ {"messages":[{"role":"user","content":"PWN::FFI::Volk.unpack_s16le Usage"},{"role":"assistant","content":"`PWN::FFI::Volk.unpack_s16le`: Supported Method Parameters\n\nsamples = PWN::FFI::Volk.unpack_s16le(\n\ndata: 'required - raw String of little-endian signed 16-bit PCM'\n\n) Returns Array<Float> normalised to -1.0..1.0 (same contract as PWN::SDR::Decoder::DSP.unpack_s16le). VOLK treats ‘scalar` as a divisor, so pass 32768.0 to get unit-range floats.\n"}]}
711
884
  {"messages":[{"role":"user","content":"PWN::Memory.authors Usage"},{"role":"assistant","content":"`PWN::Memory.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
712
885
  {"messages":[{"role":"user","content":"PWN::Memory.clear Usage"},{"role":"assistant","content":"`PWN::Memory.clear`: Supported Method Parameters\n\nPWN::Memory.clear\n"}]}
713
886
  {"messages":[{"role":"user","content":"PWN::Memory.forget Usage"},{"role":"assistant","content":"`PWN::Memory.forget`: Supported Method Parameters\n\nPWN::Memory.forget(key: :some_key)\n"}]}
@@ -1539,109 +1712,176 @@
1539
1712
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1540
1713
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder.help`: "}]}
1541
1714
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder.resolve Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder.resolve`: Supported Method Parameters\n\nmod = PWN::SDR::Decoder.resolve(\n\ndecoder: 'required - Symbol/String key from REGISTRY (e.g. :pocsag)'\n\n)\n"}]}
1715
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.ais_char Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.ais_char`: "}]}
1542
1716
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1717
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.crc24 Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.crc24`: Supported Method Parameters\n\ncrc = PWN::SDR::Decoder::ADSB.crc24(bits: Array<0|1>) CRC over all bits except the final 24 (which hold the parity).\n"}]}
1718
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.crc_ok? Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.crc_ok?`: Supported Method Parameters\n\nok = PWN::SDR::Decoder::ADSB.crc_ok?(bits: Array<0|1>)\n"}]}
1543
1719
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::ADSB.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1720
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.decode_modes Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.decode_modes`: Supported Method Parameters\n\nh = PWN::SDR::Decoder::ADSB.decode_modes(bits: Array<0|1> of length 56 or 112)\n"}]}
1544
1721
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.help`: "}]}
1722
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.modes_altitude Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.modes_altitude`: "}]}
1545
1723
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::ADSB.parse_line(line: ‘MSG,3,1,1,ABCDEF,…’)\n"}]}
1724
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB::DemodIQ.new`: "}]}
1725
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB::DemodIQ.feed_iq`: "}]}
1546
1726
  {"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
1727
  {"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
1728
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT.help`: "}]}
1729
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT::Demod.new`: "}]}
1730
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT::Demod.feed`: "}]}
1549
1731
  {"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
1732
  {"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"}]}
1733
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.close_iq_source Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.close_iq_source`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.close_iq_source(source: handle)\n"}]}
1551
1734
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.help`: "}]}
1552
1735
  {"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"}]}
1553
1736
  {"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"}]}
1737
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.read_iq_chunk Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.read_iq_chunk`: Supported Method Parameters\n\nchunk = PWN::SDR::Decoder::Base.read_iq_chunk(source: handle, bytes: 262_144) Returns raw binary String in the source’s native format, or nil on EOF.\n"}]}
1554
1738
  {"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"}]}
1739
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.resolve_iq_source Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.resolve_iq_source`: Supported Method Parameters\n\nsrc = PWN::SDR::Decoder::Base.resolve_iq_source(\n\nfreq_obj: 'required',\nsource: 'optional - :auto|:rtlsdr|:hackrf|:adalm_pluto|:soapy|:file',\nsample_rate: 'optional - desired rate Hz',\nfile: 'optional - path to .cu8/.cs16/.iq capture'\n\n) Returns { kind:, rate_hz:, … } handle, or nil if nothing available.\n"}]}
1555
1740
  {"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"}]}
1741
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.run_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.run_iq`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.run_iq(\n\nfreq_obj: 'required - freq_obj Hash',\nprotocol: 'required - short name',\ndemod: 'required - object with #feed_iq(iq, rate:, &emit)\n OR #feed(samples, &emit) when fm_demod:true',\nsample_rate: 'optional - Hz (default 2_048_000)',\nsource: 'optional - :auto|:rtlsdr|:hackrf|:adalm_pluto|:file',\nfile: 'optional - path to capture',\nfm_demod: 'optional - FM-demod I/Q→audio then #feed (default false)',\nchunk_bytes: 'optional - bytes per read (default 262144)',\nfallback: 'optional - :detector|:raise|:silent (default :detector)',\nnote: 'optional - shown once when falling back',\ndescribe: 'optional - Proc for detector fallback'\n\n)\n"}]}
1556
1742
  {"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"}]}
1557
1743
  {"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"}]}
1744
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.unpack_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.unpack_iq`: Supported Method Parameters\n\niq = PWN::SDR::Decoder::Base.unpack_iq(source: handle, data: raw_string) → interleaved Array<Float> [I0,Q0,…]\n"}]}
1558
1745
  {"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"}]}
1559
1746
  {"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"}]}
1560
1747
  {"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"}]}
1561
1748
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.help`: "}]}
1562
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::Bluetooth.parse_line(line: ‘systime=… LAP=9e8b33 …’)\n"}]}
1749
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.parse_line`: "}]}
1750
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth::DemodIQ.enrich Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth::DemodIQ.enrich`: "}]}
1751
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth::DemodIQ.new`: "}]}
1752
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth::DemodIQ.feed_iq`: "}]}
1563
1753
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1564
1754
  {"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"}]}
1565
1755
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.help`: "}]}
1566
- {"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"}]}
1756
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.parse_line`: "}]}
1757
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT::DemodIQ.new`: "}]}
1758
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT::DemodIQ.feed_iq`: "}]}
1567
1759
  {"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"}]}
1568
1760
  {"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"}]}
1569
1761
  {"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"}]}
1570
1762
  {"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"}]}
1763
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.correlate Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.correlate`: Supported Method Parameters\n\nhit = PWN::SDR::Decoder::DSP.correlate(\n\nsamples: 'required - Array<Float>',\ntemplate: 'required - Array<Float> (same units)'\n\n) → { lag:, score: } or nil\n"}]}
1571
1764
  {"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"}]}
1572
1765
  {"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"}]}
1573
1766
  {"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"}]}
1574
1767
  {"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"}]}
1575
1768
  {"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"}]}
1769
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.fm_demod_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.fm_demod_iq`: Supported Method Parameters\n\naudio = PWN::SDR::Decoder::DSP.fm_demod_iq(\n\niq: 'required - interleaved Array<Float> [I0,Q0,…]',\nkf: 'optional - modulation index scale (default 1.0)'\n\n) Polar-discriminant FM demod. Prefers PWN::FFI::Liquid.freq_demod when available; otherwise atan2 difference of consecutive samples.\n"}]}
1576
1770
  {"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"}]}
1577
1771
  {"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"}]}
1578
1772
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.help`: "}]}
1773
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.iq_rms_dbfs Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.iq_rms_dbfs`: Supported Method Parameters\n\npower = PWN::SDR::Decoder::DSP.iq_rms_dbfs(\n\niq: 'required - interleaved Array<Float> [I0,Q0,…]'\n\n)\n"}]}
1774
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.mag_sq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.mag_sq`: Supported Method Parameters\n\nm2 = PWN::SDR::Decoder::DSP.mag_sq(\n\niq: 'required - interleaved Array<Float> [I0,Q0,I1,Q1,…]'\n\n) Returns Array<Float> of I²+Q² per sample (length = iq.length/2).\n"}]}
1579
1775
  {"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"}]}
1580
1776
  {"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"}]}
1581
1777
  {"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"}]}
1778
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.unpack_cs16le Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.unpack_cs16le`: Supported Method Parameters\n\niq = PWN::SDR::Decoder::DSP.unpack_cs16le(\n\ndata: 'required - raw String of interleaved little-endian s16 I/Q'\n\n) Returns interleaved Array<Float> [I0,Q0,I1,Q1,…] normalised ±1.0.\n"}]}
1779
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DSP.unpack_cu8 Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DSP.unpack_cu8`: Supported Method Parameters\n\niq = PWN::SDR::Decoder::DSP.unpack_cu8(\n\ndata: 'required - raw String of interleaved u8 I/Q (RTL-SDR)'\n\n) Returns interleaved Array<Float> [I0,Q0,…] centred & normalised ±1.0.\n"}]}
1582
1780
  {"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"}]}
1781
+ {"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"}]}
1583
1782
  {"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"}]}
1584
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.decode`: Supported Method Parameters\n\npocsag_resp = PWN::SDR::Decoder::Flex.decode(\n\nfreq_obj: 'required - GQRX socket object returned from #connect method'\n\n)\n"}]}
1783
+ {"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"}]}
1784
+ {"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"}]}
1785
+ {"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"}]}
1585
1786
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.help`: "}]}
1787
+ {"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"}]}
1788
+ {"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"}]}
1789
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex::Demod.new`: "}]}
1790
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex::Demod.feed`: "}]}
1586
1791
  {"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"}]}
1587
1792
  {"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"}]}
1588
1793
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.help`: "}]}
1589
- {"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], Long = -97.1 …’)\n"}]}
1794
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.parse_line`: "}]}
1795
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS::DemodIQ.new`: "}]}
1796
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS::DemodIQ.feed_iq`: "}]}
1590
1797
  {"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"}]}
1591
1798
  {"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"}]}
1592
1799
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.help`: "}]}
1593
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::GSM.parse_line(line: ‘ts|arfcn|chan|imsi|tmsi|mcc|mnc|lac|ci|rr’)\n"}]}
1800
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.parse_line`: "}]}
1801
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM::DemodIQ.new`: "}]}
1802
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM::DemodIQ.feed_iq`: "}]}
1594
1803
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1595
1804
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Iridium.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1596
1805
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.help`: "}]}
1597
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::Iridium.parse_line(line: ‘IRA: sat:23 beam:14 …’)\n"}]}
1806
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.parse_line`: "}]}
1807
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium::DemodIQ.new`: "}]}
1808
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium::DemodIQ.feed_iq`: "}]}
1598
1809
  {"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"}]}
1599
1810
  {"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"}]}
1600
1811
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.help`: "}]}
1601
- {"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 … PRB: 50 … -85.0 dBm’)\n"}]}
1812
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.parse_line`: "}]}
1813
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE::DemodIQ.new`: "}]}
1814
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE::DemodIQ.feed_iq`: "}]}
1602
1815
  {"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"}]}
1603
1816
  {"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"}]}
1604
1817
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.help`: "}]}
1605
- {"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"}]}
1818
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.parse_line`: "}]}
1819
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa::DemodIQ.new`: "}]}
1820
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa::DemodIQ.feed_iq`: "}]}
1606
1821
  {"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"}]}
1607
1822
  {"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"}]}
1823
+ {"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"}]}
1608
1824
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.help`: "}]}
1609
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::Morse.parse_line(line: ‘CQ CQ DE W1AW’)\n"}]}
1825
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse::Demod.new`: "}]}
1826
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse::Demod.feed`: "}]}
1610
1827
  {"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"}]}
1611
1828
  {"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"}]}
1612
1829
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.help`: "}]}
1613
- {"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"}]}
1830
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.parse_line`: "}]}
1831
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25::DemodIQ.new`: "}]}
1832
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25::DemodIQ.feed_iq`: "}]}
1833
+ {"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"}]}
1834
+ {"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"}]}
1614
1835
  {"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"}]}
1615
1836
  {"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"}]}
1837
+ {"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"}]}
1616
1838
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.help`: "}]}
1617
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::POCSAG.parse_line(line: ‘POCSAG1200: Address: …’)\n"}]}
1839
+ {"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"}]}
1840
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG::Demod.new`: "}]}
1841
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG::Demod.feed`: "}]}
1618
1842
  {"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"}]}
1619
1843
  {"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"}]}
1620
1844
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.help`: "}]}
1621
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::Pager.parse_line(line: ‘FLEX|… or POCSAG1200: …’)\n"}]}
1845
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager::Demod.new`: "}]}
1846
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager::Demod.feed`: "}]}
1847
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.aggregate Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.aggregate`: "}]}
1622
1848
  {"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"}]}
1623
- {"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"}]}
1849
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::RDS.decode(\n\nfreq_obj: 'required - Hash returned from PWN::SDR::GQRX.init_freq'\n\n)\n\nInteractive TTY UX: enables RDS, spins a live status line until the operator presses ENTER, then disables RDS. Does not return a Hash —callers that need structured data should use .sample instead.\n"}]}
1850
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.disable_rds! Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.disable_rds!`: "}]}
1851
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.enable_rds! Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.enable_rds!`: "}]}
1624
1852
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.help`: "}]}
1853
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.poll_once Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.poll_once`: "}]}
1854
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.resolve_sock Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.resolve_sock`: "}]}
1855
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.sample Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.sample`: Supported Method Parameters\n\nrds_hash = PWN::SDR::Decoder::RDS.sample(\n\ngqrx_sock: 'required unless freq_obj - TCPSocket from GQRX.connect',\nfreq_obj: 'required unless gqrx_sock - Hash from GQRX.init_freq',\nsettle_secs: 'optional - seconds to sample (default 8, max 30)',\ninterval: 'optional - poll interval seconds (default 0.75)',\nleave_enabled: 'optional - leave RDS decoder ON after sample (default false)'\n\n)\nReturns\n\n{\n\npi:, ps_name:, radiotext:, station:,\nsamples: Integer, settle_secs: Float,\nerror: String? # present when RDS backend is unavailable\n\n}\n\nReturns\n\n{\n\npi:, ps_name:, radiotext:, station:,\nsamples: Integer, settle_secs: Float,\nerror: String? # present when RDS backend is unavailable\n\n}\n"}]}
1625
1856
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1626
1857
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::RFID.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1627
1858
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.help`: "}]}
1628
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::RFID.parse_line(line: ‘UID: 04 A1 B2 C3 D4 E5 F6’)\n"}]}
1859
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.parse_line`: "}]}
1860
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID::DemodIQ.new`: "}]}
1861
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID::DemodIQ.feed_iq`: "}]}
1629
1862
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1630
1863
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::RTL433.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1631
1864
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.help`: "}]}
1632
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::RTL433.parse_line(line: ‘{“time”:“…”,“model”:“…”}’)\n"}]}
1865
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.parse_line`: "}]}
1866
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433::DemodIQ.new`: "}]}
1867
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433::DemodIQ.feed_iq`: "}]}
1633
1868
  {"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"}]}
1634
1869
  {"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"}]}
1635
1870
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.help`: "}]}
1636
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::RTTY.parse_line(line: ‘RYRYRY DE W1AW’)\n"}]}
1871
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY::Demod.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY::Demod.new`: "}]}
1872
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY::Demod.feed Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY::Demod.feed`: "}]}
1637
1873
  {"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"}]}
1638
1874
  {"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"}]}
1639
1875
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.help`: "}]}
1640
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::WiFi.parse_line(line: ‘t|subtype|bssid|sa|da|ch|rssi|ssid’)\n"}]}
1876
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.parse_line`: "}]}
1877
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi::DemodIQ.new`: "}]}
1878
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi::DemodIQ.feed_iq`: "}]}
1641
1879
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1642
1880
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::ZigBee.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1643
1881
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.help`: "}]}
1644
- {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::ZigBee.parse_line(line: ‘t|src16|dst16|src64|dst64|pan|type|cmd|seq’)\n"}]}
1882
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.parse_line`: "}]}
1883
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee::DemodIQ.new Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee::DemodIQ.new`: "}]}
1884
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee::DemodIQ.feed_iq Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee::DemodIQ.feed_iq`: "}]}
1645
1885
  {"messages":[{"role":"user","content":"PWN::SDR::FlipperZero.authors Usage"},{"role":"assistant","content":"`PWN::SDR::FlipperZero.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1646
1886
  {"messages":[{"role":"user","content":"PWN::SDR::FlipperZero.connect Usage"},{"role":"assistant","content":"`PWN::SDR::FlipperZero.connect`: Supported Method Parameters\n\nflipper_zero_obj = PWN::SDR::FlipperZero.connect(\n\nblock_dev: 'optional serial block device path (defaults to /dev/ttyACM0)',\nbaud: 'optional (defaults to 9600)',\ndata_bits: 'optional (defaults to 8)',\nstop_bits: 'optional (defaults to 1)',\nparity: 'optional - :even||:odd|:none (defaults to :none)'\n\n)\n"}]}
1647
1887
  {"messages":[{"role":"user","content":"PWN::SDR::FlipperZero.connect_via_screen Usage"},{"role":"assistant","content":"`PWN::SDR::FlipperZero.connect_via_screen`: Supported Method Parameters\n\nPWN::SDR::FlipperZero.connect_via_screen(\n\nblock_dev: 'optional - serial block device path (defaults to /dev/ttyACM0)'\n\n)\n"}]}
@@ -1653,24 +1893,33 @@
1653
1893
  {"messages":[{"role":"user","content":"PWN::SDR::FrequencyAllocation.help Usage"},{"role":"assistant","content":"`PWN::SDR::FrequencyAllocation.help`: "}]}
1654
1894
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.analyze_log Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.analyze_log`: Supported Method Parameters\n\nPWN::SDR::GQRX.analyze_log(\n\nscan_log: 'required - Path to signals log file',\ntarget: 'optional - GQRX target IP address (defaults to 127.0.0.1)',\nport: 'optional - GQRX target port (defaults to 7356)'\n\n)\n"}]}
1655
1895
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.analyze_scan Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.analyze_scan`: Supported Method Parameters\n\nPWN::SDR::GQRX.analyze_scan(\n\nscan_resp: 'required - Scan response hash returned from #scan_range method',\ntarget: 'optional - GQRX target IP address (defaults to 127.0.0.1)',\nport: 'optional - GQRX target port (defaults to 7356)'\n\n)\n"}]}
1896
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.apply_band_plan_input_rate Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.apply_band_plan_input_rate`: Supported Method Parameters\n\nresult = PWN::SDR::GQRX.apply_band_plan_input_rate(\n\nband_plan: 'required - key from PWN::SDR::FrequencyAllocation.band_plans (e.g. :fm_radio, :ads_b1090)',\npath: 'optional - GQRX conf path',\nclamp: 'optional - snap to device-legal rate (default true)',\nrestart: 'optional - bounce GQRX after write (default false)',\ninput_rate: 'optional - override the band-plan recommended rate'\n\n) Looks up FrequencyAllocation, clamps to the currently configured SDR’s legal rates, and writes it into GQRX’s conf.\n"}]}
1656
1897
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.authors Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.authors`: "}]}
1657
1898
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.cmd Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.cmd`: Supported Method Parameters\n\ngqrx_resp = PWN::SDR::GQRX.cmd(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\ncmd: 'required - GQRX command to execute',\nresp_ok: 'optional - Expected response from GQRX to indicate success'\n\n)\n"}]}
1658
- {"messages":[{"role":"user","content":"PWN::SDR::GQRX.connect Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.connect`: Supported Method Parameters\n\ngqrx_sock = PWN::SDR::GQRX.connect(\n\ntarget: 'optional - GQRX target IP address (defaults to 127.0.0.1)',\nport: 'optional - GQRX target port (defaults to 7356)'\n\n)\n"}]}
1899
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.config_path Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.config_path`: Supported Method Parameters\n\npath = PWN::SDR::GQRX.config_path(\n\npath: 'optional - absolute path to a GQRX .conf (defaults to ~/.config/gqrx/default.conf or recentconfig)'\n\n)\n"}]}
1900
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.connect Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.connect`: "}]}
1901
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.device_input_rates Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.device_input_rates`: Supported Method Parameters\n\nrates = PWN::SDR::GQRX.device_input_rates(\n\ndevice: 'optional - SoapySDR args string (defaults to [input] device= from conf)',\npath: 'optional - GQRX conf path used when :device omitted'\n\n) Returns Array<Integer> of legal sample rates (Hz). Empty when unprobeable.\n"}]}
1659
1902
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.disconnect Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.disconnect`: Supported Method Parameters\n\nPWN::SDR::GQRX.disconnect(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method'\n\n)\n"}]}
1660
1903
  {"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"}]}
1661
1904
  {"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"}]}
1662
1905
  {"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"}]}
1663
- {"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"}]}
1906
+ {"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.0 = off; half-power carrier BW is often << plan BW)',\ndemodulator_mode: 'optional - Demodulator mode APPLIED to GQRX + attributed to detections (defaults to WFM)',\nbandwidth: 'optional - Passband bandwidth APPLIED to GQRX + attributed to detections (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level APPLIED to GQRX (defaults to strength_lock - 3.0)',\naudio_gain_db: 'optional - Audio gain in dB APPLIED to GQRX (defaults to 0.0)',\nrf_gain: 'optional - RF gain APPLIED to GQRX (defaults to 0.0)',\nintermediate_gain: 'optional - Intermediate gain APPLIED to GQRX (defaults to 32.0)',\nbaseband_gain: 'optional - Baseband gain APPLIED to GQRX (defaults to 10.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)',\nrefine: 'optional - After panoramic FFT, re-walk each detection with traditional edge_detection + find_best_peak scoped around the candidate to lock the exact channel frequency (defaults to true)'\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"}]}
1907
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.fft_plan_geometry Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.fft_plan_geometry`: Supported Method Parameters\n\ngeo = PWN::SDR::GQRX.fft_plan_geometry(\n\nplan_bw_hz: 'required - expected channel / plan bandwidth (Hz)',\nstep_hz: 'required - band-plan raster 10**(precision-1) (Hz)',\nres_hz: 'optional - FFT bin width sample_rate/nfft (Hz); used for bin counts',\nmeasured_bw_hz: 'optional - measured occupied BW for merge tolerance'\n\n)\n\nPure geometry for –fft-scan derived from the two band-plan invariants (plan_bw_hz, step_hz) plus optional spectrum resolution. Every residual clamp that previously hard-coded FLEX/NBFM-scale kHz values is a pure function of those three inputs so the same detector works for all 84 band plans (CW 150 Hz → Wi-Fi MHz).\n"}]}
1664
1908
  {"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"}]}
1665
1909
  {"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"}]}
1666
1910
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.help Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.help`: "}]}
1667
- {"messages":[{"role":"user","content":"PWN::SDR::GQRX.init_freq Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.init_freq`: Supported Method Parameters\n\nfreq_obj = PWN::SDR::GQRX.init_freq(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nfreq: 'required - Frequency to set',\ndemodulator_mode: 'optional - Demodulator mode (defaults to WFM)',\nbandwidth: 'optional - Bandwidth (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level to set (Defaults to current value)',\ndecoder: 'optional - Decoder key (e.g., :gsm) to start live decoding (starts recording if provided)',\nudp_ip: 'optional - UDP IP address for decoder module (defaults to 127.0.0.1)',\nudp_port: 'optional - UDP port for decoder module (defaults to 7355)',\nsuppress_details: 'optional - Boolean to include extra frequency details in return hash (defaults to false)',\nkeep_alive: 'optional - Boolean to keep GQRX connection alive after method completion (defaults to false)'\n\n)\n"}]}
1911
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.init_freq Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.init_freq`: Supported Method Parameters\n\nfreq_obj = PWN::SDR::GQRX.init_freq(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nfreq: 'required - Frequency to set',\ndemodulator_mode: 'optional - Demodulator mode (defaults to WFM)',\nbandwidth: 'optional - Bandwidth (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level to set (Defaults to current value)',\ndecoder: 'optional - Decoder key (e.g., :gsm / :rds) to start live decoding (starts recording if provided)',\ninteractive: 'optional - Boolean; when false AND decoder responds to .sample, call sample (non-interactive Hash) instead of decode (TTY). Defaults to true.',\nsettle_secs: 'optional - Seconds for decoder.sample (e.g. RDS; default 8)',\nudp_ip: 'optional - UDP IP address for decoder module (defaults to 127.0.0.1)',\nudp_port: 'optional - UDP port for decoder module (defaults to 7355)',\nsuppress_details: 'optional - Boolean to include extra frequency details in return hash (defaults to false)',\nkeep_alive: 'optional - Boolean to keep GQRX connection alive after method completion (defaults to false)'\n\n)\n"}]}
1668
1912
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.listen_udp Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.listen_udp`: Supported Method Parameters\n\nudp_listener = PWN::SDR::GQRX.listen_udp(\n\nudp_ip: 'optional - IP address to bind UDP listener (defaults to 127.0.0.1)',\nupd_port: 'optional - Port to bind UDP listener (defaults to 7355)'\n\n)\n"}]}
1669
1913
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.log_signals Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.log_signals`: Supported Method Parameters\n\nscan_resp = PWN::SDR::GQRX.log_signals(\n\nsignals_detected: 'required - Array of detected signals',\ntimestamp_start: 'required - Scan start timestamp',\nscan_log: 'required - Path to save detected signals log',\niteration_metrics: 'optional - Hash of iteration metrics per range iteration'\n\n)\n"}]}
1670
1914
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.measure_noise_floor Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.measure_noise_floor`: Supported Method Parameters\n\nnoise_floor = PWN::SDR::GQRX.measure_noise_floor(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nfreq: 'required - Frequency to measure noise floor',\nprecision: 'required - Frequency step precision',\nstep_hz_direction: 'required - Frequency step in Hz direction for noise floor measurement'\n\n)\n"}]}
1671
1915
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.measure_signal_strength Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.measure_signal_strength`: Supported Method Parameters\n\nstrength_db = PWN::SDR::GQRX.measure_signal_strength(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nfreq: 'required - Frequency to measure signal strength',\nprecision: 'required - Frequency step precision',\nstrength_lock: 'optional - Strength lock in dBFS to determine signal edges (defaults to -70.0)',\nphase: 'optional - Phase of measurement for logging purposes (defaults to :find_candidates)'\n\n)\n"}]}
1916
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.nearest_input_rate Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.nearest_input_rate`: Supported Method Parameters\n\nhz = PWN::SDR::GQRX.nearest_input_rate(\n\ninput_rate: 'required - desired input rate Hz',\nrates: 'optional - Array of legal rates (defaults to #device_input_rates)'\n\n) Snaps desired rate onto the closest legal device rate (>= preferred when possible, else nearest). Returns desired unchanged when rates empty.\n"}]}
1917
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.read_input_config Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.read_input_config`: Supported Method Parameters\n\ninfo = PWN::SDR::GQRX.read_input_config(\n\npath: 'optional - GQRX conf path (defaults to #config_path)'\n\n) Returns Hash with :path, :device, :frequency, :input_rate, :raw\n"}]}
1672
1918
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.record Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.record`: Supported Method Parameters\n\niq_raw_file = PWN::SDR::GQRX.record(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method'\n\n)\n"}]}
1919
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.refine_detections Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.refine_detections`: "}]}
1920
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.restart_gqrx Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.restart_gqrx`: Supported Method Parameters\n\nok = PWN::SDR::GQRX.restart_gqrx(\n\ngqrx_bin: 'optional - path to gqrx binary',\nconf_path: 'optional - pass -c <conf> on relaunch'\n\n) Best-effort: SIGTERM any running gqrx, then relaunch detached. Returns true when a new process was spawned.\n"}]}
1673
1921
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.scan_range Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.scan_range`: Supported Method Parameters\n\nscan_resp = PWN::SDR::GQRX.scan_range(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nranges: 'required - Array of Hash objects with :start_freq and :target_freq keys defining scan ranges',\ndemodulator_mode: 'optional - Demodulator mode (e.g. WFM, AM, FM, USB, LSB, RAW, CW, RTTY / defaults to WFM)',\nbandwidth: 'optional - Bandwidth in Hz (Defaults to \"200.000\")',\nprecision: 'optional - Frequency step precision (number of digits; defaults to 1)',\nstrength_lock: 'optional - Strength lock in dBFS (defaults to -70.0)',\nsquelch: 'optional - Squelch level in dBFS (defaults to strength_lock - 3.0)',\naudio_gain_db: 'optional - Audio gain in dB (defaults to 0.0)',\nrf_gain: 'optional - RF gain (defaults to 0.0)',\nintermediate_gain: 'optional - Intermediate gain (defaults to 32.0)',\nbaseband_gain: 'optional - Baseband gain (defaults to 10.0)',\nkeep_looping: 'optional - Boolean to keep scanning indefinitely (defaults to false)',\nscan_log: 'optional - Path to save detected signals log (defaults to /tmp/pwn_sdr_gqrx_scan_<start_freq>-<target_freq>_<timestamp>_lN.json)',\nlocation: 'optional - Location string to include in AI analysis (e.g., \"New York, NY\", 90210, GPS coords, etc.)'\n\n)\n"}]}
1922
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.set_input_rate Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.set_input_rate`: Supported Method Parameters\n\nresult = PWN::SDR::GQRX.set_input_rate(\n\ninput_rate: 'required - desired GQRX Input rate in Hz (Integer)',\npath: 'optional - GQRX conf path (defaults to #config_path)',\nclamp: 'optional - snap to nearest legal device rate (default true)',\nrestart: 'optional - kill+respawn gqrx so the new rate is applied (default false)',\ngqrx_bin: 'optional - gqrx binary path when restart:true (default `which gqrx`)'\n\n) Rewrites [input] sample_rate= in the active GQRX conf. Does NOT use the remote-control socket — input rate is not part of that protocol. Returns { path:, previous:, input_rate:, clamped_from:, restarted:, device: }.\n"}]}
1674
1923
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.stop_recording Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.stop_recording`: Supported Method Parameters\n\nPWN::SDR::GQRX.stop_recording(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\niq_raw_file: 'required - iq_raw_file returned from #connect method'\n\n)\n"}]}
1675
1924
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.tune_to Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.tune_to`: Supported Method Parameters\n\ntune_resp = PWN::SDR::GQRX.tune_to(\n\ngqrx_sock: 'required - GQRX socket object returned from #connect method',\nhz: 'required - Frequency to tune to'\n\n)\n"}]}
1676
1925
  {"messages":[{"role":"user","content":"PWN::SDR::RFIDler.authors Usage"},{"role":"assistant","content":"`PWN::SDR::RFIDler.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}