pwn 0.5.617 → 0.5.620

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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +101 -83
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/AI-Integration.md +42 -26
  6. data/documentation/AWS.md +57 -0
  7. data/documentation/Agent-Tool-Registry.md +56 -0
  8. data/documentation/Banner.md +17 -0
  9. data/documentation/Blockchain.md +18 -0
  10. data/documentation/Bounty.md +21 -0
  11. data/documentation/BurpSuite.md +41 -16
  12. data/documentation/CLI-Drivers.md +58 -0
  13. data/documentation/Configuration.md +66 -0
  14. data/documentation/Contributing.md +33 -19
  15. data/documentation/Cron.md +47 -0
  16. data/documentation/Diagrams.md +6 -2
  17. data/documentation/Drivers.md +43 -16
  18. data/documentation/Extrospection.md +73 -0
  19. data/documentation/FFI.md +14 -0
  20. data/documentation/Fuzzing.md +36 -0
  21. data/documentation/Hardware.md +40 -0
  22. data/documentation/Home.md +5 -4
  23. data/documentation/How-PWN-Works.md +7 -4
  24. data/documentation/Metasploit.md +34 -0
  25. data/documentation/Mistakes.md +96 -0
  26. data/documentation/NmapIt.md +18 -12
  27. data/documentation/PWN.png +0 -0
  28. data/documentation/PWN_Contributors_and_Users.png +0 -0
  29. data/documentation/Persistence.md +40 -0
  30. data/documentation/Plugins.md +97 -47
  31. data/documentation/Reporting.md +25 -18
  32. data/documentation/SAST.md +39 -22
  33. data/documentation/SDR.md +58 -0
  34. data/documentation/Sessions.md +39 -0
  35. data/documentation/Skills-Memory-Learning.md +59 -29
  36. data/documentation/Swarm.md +71 -0
  37. data/documentation/Transparent-Browser.md +26 -22
  38. data/documentation/Troubleshooting.md +44 -25
  39. data/documentation/WWW.md +32 -0
  40. data/documentation/diagrams/agent-tool-registry.svg +286 -0
  41. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  42. data/documentation/diagrams/cron-scheduling.svg +148 -0
  43. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  44. data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
  45. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  46. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  47. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  48. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  49. data/documentation/diagrams/dot/persistence-filesystem.dot +30 -0
  50. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
  51. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  52. data/documentation/diagrams/extrospection-world-awareness.svg +203 -0
  53. data/documentation/diagrams/hardware-hacking.svg +163 -0
  54. data/documentation/diagrams/memory-skills-detailed.svg +146 -97
  55. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  56. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  57. data/documentation/diagrams/persistence-filesystem.svg +189 -0
  58. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
  59. data/documentation/diagrams/sdr-radio-flow.svg +166 -0
  60. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  61. data/documentation/fax-spectrogram.png +0 -0
  62. data/documentation/fax-waveform.png +0 -0
  63. data/documentation/pwn-REPL.md +40 -24
  64. data/documentation/pwn-ai-Agent.md +72 -30
  65. data/documentation/pwn_android_war_dialer_session.png +0 -0
  66. data/documentation/pwn_install.png +0 -0
  67. data/documentation/pwn_wallpaper.jpg +0 -0
  68. data/documentation/ringing-spectrogram.png +0 -0
  69. data/documentation/ringing-waveform.png +0 -0
  70. data/lib/pwn/ai/agent/extrospection.rb +65 -6
  71. data/lib/pwn/ai/agent/learning.rb +67 -7
  72. data/lib/pwn/ai/agent/loop.rb +72 -6
  73. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  74. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  75. data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
  76. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  77. data/lib/pwn/ai/agent.rb +1 -0
  78. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  79. data/lib/pwn/sdr/decoder/adsb.rb +101 -0
  80. data/lib/pwn/sdr/decoder/apt.rb +75 -0
  81. data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
  82. data/lib/pwn/sdr/decoder/dect.rb +84 -0
  83. data/lib/pwn/sdr/decoder/gps.rb +83 -0
  84. data/lib/pwn/sdr/decoder/gsm.rb +50 -29
  85. data/lib/pwn/sdr/decoder/iridium.rb +81 -0
  86. data/lib/pwn/sdr/decoder/lora.rb +87 -0
  87. data/lib/pwn/sdr/decoder/lte.rb +88 -0
  88. data/lib/pwn/sdr/decoder/morse.rb +64 -0
  89. data/lib/pwn/sdr/decoder/p25.rb +71 -0
  90. data/lib/pwn/sdr/decoder/pager.rb +77 -0
  91. data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
  92. data/lib/pwn/sdr/decoder/rfid.rb +88 -0
  93. data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
  94. data/lib/pwn/sdr/decoder/rtty.rb +66 -0
  95. data/lib/pwn/sdr/decoder/wifi.rb +98 -0
  96. data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
  97. data/lib/pwn/sdr/decoder.rb +67 -7
  98. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  99. data/lib/pwn/sdr/gqrx.rb +186 -95
  100. data/lib/pwn/version.rb +1 -1
  101. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  102. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  103. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  105. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  106. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  107. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  108. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  109. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  110. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  111. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  112. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  113. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  114. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  115. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  116. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  117. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  118. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  119. data/third_party/pwn_rdoc.jsonl +114 -8
  120. metadata +81 -5
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::SDR::Decoder::WiFi do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::SDR::Decoder::WiFi
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::SDR::Decoder::WiFi
13
+ expect(help_response).to respond_to :help
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PWN::SDR::Decoder::ZigBee do
6
+ it 'should display information for authors' do
7
+ authors_response = PWN::SDR::Decoder::ZigBee
8
+ expect(authors_response).to respond_to :authors
9
+ end
10
+
11
+ it 'should display information for existing help method' do
12
+ help_response = PWN::SDR::Decoder::ZigBee
13
+ expect(help_response).to respond_to :help
14
+ end
15
+ end
@@ -32,18 +32,22 @@
32
32
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.intel_nvd Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.intel_nvd`: "}]}
33
33
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.load Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.load`: Supported Method Parameters\n\nstore = PWN::AI::Agent::Extrospection.load\n"}]}
34
34
  {"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, :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"}]}
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"}]}
36
36
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_env Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_env`: "}]}
37
37
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_host Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_host`: "}]}
38
38
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_net Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_net`: "}]}
39
39
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_repo Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_repo`: "}]}
40
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_rf Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_rf`: "}]}
40
41
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.probe_toolchain Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.probe_toolchain`: "}]}
41
42
  {"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"}]}
43
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_band_plan_keys Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_band_plan_keys`: "}]}
44
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.rf_present? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.rf_present?`: "}]}
42
45
  {"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"}]}
43
46
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.sh Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.sh`: "}]}
44
- {"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] (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"}]}
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"}]}
45
48
  {"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"}]}
46
49
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.summarise_drift Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.summarise_drift`: "}]}
50
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Extrospection.tcp_open? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Extrospection.tcp_open?`: "}]}
47
51
  {"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"}]}
48
52
  {"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"}]}
49
53
  {"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"}]}
@@ -60,8 +64,10 @@
60
64
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.build_skill_from_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.build_skill_from_session`: "}]}
61
65
  {"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"}]}
62
66
  {"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"}]}
67
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.flip_last_outcome Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.flip_last_outcome`: Supported Method Parameters\n\nPWN::AI::Agent::Learning.flip_last_outcome(\n\nsession_id: 'optional - only flip if the newest outcome belongs to this session',\nreason: 'optional - why it is being flipped (usually the user correction text)'\n\n)\n\nRewrites the most-recently-appended learning.jsonl entry from success:true to success:false. Called by Mistakes.check_user_correction when the user’s next message rejects the previous answer, so the 100 %-success illusion is broken and the failure enters the corpus.\n"}]}
63
68
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.help`: "}]}
64
69
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.heuristic_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.heuristic_lessons`: "}]}
70
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.infer_success Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.infer_success`: "}]}
65
71
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Learning.introspective_lessons Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Learning.introspective_lessons`: "}]}
66
72
  {"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"}]}
67
73
  {"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"}]}
@@ -76,6 +82,7 @@
76
82
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.call_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.call_engine`: Supported Method Parameters\n\nmsg = PWN::AI::Agent::Loop.call_engine(\n\nmessages: 'required - OpenAI-format messages array',\ntools: 'optional - OpenAI tools array'\n\n)\n\nReturns a normalised assistant message hash:\n\n{ role: 'assistant', content: String|nil,\n tool_calls: [ {id:, type:'function', function:{name:, arguments:}} ],\n _native_content: <provider raw> (when adapter needs round-trip) }\n"}]}
77
83
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.degrade_text_only Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.degrade_text_only`: "}]}
78
84
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.expose_current_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.expose_current_session`: "}]}
85
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.guard_repeated_failure Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.guard_repeated_failure`: "}]}
79
86
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.help`: "}]}
80
87
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.max_iters Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.max_iters`: "}]}
81
88
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Loop.normalize_llm Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Loop.normalize_llm`: Supported Method Parameters\n\nmsg = PWN::AI::Agent::Loop.normalize_llm(\n\nresponse: 'required - chat_with_tools response Hash from any provider'\n\n)\n"}]}
@@ -89,6 +96,23 @@
89
96
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.save Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.save`: Supported Method Parameters\n\nPWN::AI::Agent::Metrics.save(\n\nmetrics: 'required - Hash returned by .load / mutated in place'\n\n)\n"}]}
90
97
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.summary Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.summary`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Metrics.summary(\n\nlimit: 'optional - cap number of tools returned (default 25)'\n\n)\n"}]}
91
98
  {"messages":[{"role":"user","content":"PWN::AI::Agent::Metrics.to_context Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Metrics.to_context`: Supported Method Parameters\n\nctx = PWN::AI::Agent::Metrics.to_context(\n\nlimit: 'optional - cap number of tools included (default 8)'\n\n)\n"}]}
99
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
100
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.check_user_correction Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.check_user_correction`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Mistakes.check_user_correction(\n\nrequest: 'required - the incoming user message',\nsession_id: 'optional - session to inspect for the previous answer'\n\n)\n\nWhen the user’s new message reads like a correction of the previous answer, this (a) flips the most recent Learning outcome for that session to success:false, and (b) records a mistake with source :user_correction whose “error” is the user’s own words. This is the strongest available signal that the agent was WRONG.\n"}]}
101
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.correction? Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.correction?`: Supported Method Parameters\n\nbool = PWN::AI::Agent::Mistakes.correction?(request: user_text)\n"}]}
102
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.correction_hint Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.correction_hint`: Supported Method Parameters\n\nstr = PWN::AI::Agent::Mistakes.correction_hint(\n\ntool: 'required - tool that just failed',\nerror: 'required - raw error it failed with'\n\n)\n\nCalled by Loop.run immediately after a failed dispatch. Returns a string to append to the tool result telling the model (a) how many times this exact failure has occurred across ALL sessions, and (b) the recorded fix if one exists — so it can self-correct on the very next iteration instead of re-discovering the fix from scratch.\n"}]}
103
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.find Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.find`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Mistakes.find(\n\nsignature: 'optional - exact signature to fetch',\ntool: 'optional - with error:, compute signature and fetch',\nerror: 'optional - raw error text (used with tool:)'\n\n)\n"}]}
104
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.for_tool Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.for_tool`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Mistakes.for_tool(\n\ntool: 'required - tool name',\nunresolved_only: 'optional - default false'\n\n)\n"}]}
105
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.help`: "}]}
106
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.load Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.load`: Supported Method Parameters\n\nstore = PWN::AI::Agent::Mistakes.load\n"}]}
107
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.normalize_error Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.normalize_error`: "}]}
108
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.previous_assistant Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.previous_assistant`: "}]}
109
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.record Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.record`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Mistakes.record(\n\ntool: 'required - tool/component that produced the failure',\nerror: 'required - error text / message',\nargs: 'optional - args that triggered it (stored truncated as sample)',\nsession_id: 'optional - PWN::Sessions id',\nsource: 'optional - :tool | :user_correction | :loop | :model | :heuristic (default :tool)'\n\n)\n\nReturns the FULL persisted entry including its cumulative :count so the caller (Loop.run) can drive cross-session repeat detection.\n"}]}
110
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.reset Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.reset`: Supported Method Parameters\n\nPWN::AI::Agent::Mistakes.reset\n"}]}
111
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.resolve Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.resolve`: Supported Method Parameters\n\nentry = PWN::AI::Agent::Mistakes.resolve(\n\nsignature: 'required - mistake signature (from mistakes_list / .top)',\nfix: 'required - what to do INSTEAD next time'\n\n)\n"}]}
112
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.save Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.save`: Supported Method Parameters\n\nPWN::AI::Agent::Mistakes.save(store: hash)\n"}]}
113
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.signature Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.signature`: Supported Method Parameters\n\nsig = PWN::AI::Agent::Mistakes.signature(\n\ntool: 'required - tool/component name that failed',\nerror: 'required - raw error text (will be normalised)'\n\n)\n"}]}
114
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.to_context Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.to_context`: Supported Method Parameters\n\nctx = PWN::AI::Agent::Mistakes.to_context(limit: 6)\n\nInjected by PromptBuilder into every system prompt. Emits TWO blocks so the model sees both what NOT to do AND what to do INSTEAD:\n\nKNOWN MISTAKES — unresolved, count-sorted, [REPEATING]/[REGRESSED]\nKNOWN FIXES — resolved entries with their fix, so the correction\n survives even after dropping out of the first list.\n"}]}
115
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Mistakes.top Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Mistakes.top`: Supported Method Parameters\n\nrows = PWN::AI::Agent::Mistakes.top(\n\nlimit: 'optional - max rows (default 10)',\nunresolved_only: 'optional - default true'\n\n)\n"}]}
92
116
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.active_engine Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.active_engine`: "}]}
93
117
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
94
118
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.build Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.build`: Supported Method Parameters\n\nsystem_prompt = PWN::AI::Agent::PromptBuilder.build(\n\nsession_id: 'optional - PWN::Sessions id to embed in the ENV block'\n\n)\n"}]}
@@ -98,6 +122,7 @@
98
122
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.learning_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.learning_block`: "}]}
99
123
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.memory_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.memory_block`: "}]}
100
124
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.metrics_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.metrics_block`: "}]}
125
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.mistakes_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.mistakes_block`: "}]}
101
126
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.pwn_version Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.pwn_version`: "}]}
102
127
  {"messages":[{"role":"user","content":"PWN::AI::Agent::PromptBuilder.skills_block Usage"},{"role":"assistant","content":"`PWN::AI::Agent::PromptBuilder.skills_block`: "}]}
103
128
  {"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"}]}
@@ -118,6 +143,27 @@
118
143
  {"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::SAST.analyze(\n\nrequest: 'required - A string containing the source code snippet to be analyzed for SAST antipatterns and vulnerabilities.'\n\n)\n"}]}
119
144
  {"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
120
145
  {"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.help`: "}]}
146
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.ask Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.ask`: Supported Method Parameters\n\nreply = PWN::AI::Agent::Swarm.ask(\n\nname: 'required - persona name from ~/.pwn/agents.yml',\nrequest: 'required - what to ask/instruct the persona',\nswarm_id: 'optional - join an existing swarm (created if omitted)',\nto: 'optional - addressee recorded on the bus (default :all)',\non_tool: 'optional - ->(name, args, result) live-UI callback'\n\n)\n"}]}
147
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
148
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.broadcast Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.broadcast`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Swarm.broadcast(\n\nrequest: 'required', names: 'optional - default all personas',\nswarm_id: 'optional'\n\n)\n"}]}
149
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.build_persona_prompt Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.build_persona_prompt`: "}]}
150
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.bus_append Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.bus_append`: Supported Method Parameters\n\nPWN::AI::Agent::Swarm.bus_append(\n\nswarm_id: 'required', from: 'required', content: 'required',\nto: 'optional (default :all)'\n\n)\n"}]}
151
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.bus_path Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.bus_path`: "}]}
152
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.bus_tail Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.bus_tail`: Supported Method Parameters\n\nmsgs = PWN::AI::Agent::Swarm.bus_tail(swarm_id: ‘required’, limit: 12)\n"}]}
153
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.caller_label Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.caller_label`: "}]}
154
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.create Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.create`: Supported Method Parameters\n\nswarm = PWN::AI::Agent::Swarm.create(topic: ‘optional’)\n"}]}
155
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.debate Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.debate`: Supported Method Parameters\n\nresult = PWN::AI::Agent::Swarm.debate(\n\nnames: 'required - Array of persona names, order = speaking order',\ntopic: 'required - opening question / claim',\nrounds: 'optional - full passes over names (default 2)',\nswarm_id: 'optional - join an existing swarm',\non_tool: 'optional - ->(name, args, result) live-UI callback'\n\n)\n"}]}
156
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.deep_stringify Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.deep_stringify`: "}]}
157
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.env_ai Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.env_ai`: "}]}
158
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.help`: "}]}
159
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.list Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.list`: Supported Method Parameters\n\nswarms = PWN::AI::Agent::Swarm.list\n"}]}
160
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.max_depth Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.max_depth`: "}]}
161
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.normalize_persona Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.normalize_persona`: "}]}
162
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.persona_session Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.persona_session`: "}]}
163
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.personas Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.personas`: Supported Method Parameters\n\npersonas = PWN::AI::Agent::Swarm.personas\n"}]}
164
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.retire Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.retire`: Supported Method Parameters\n\nPWN::AI::Agent::Swarm.retire(name: ‘required - persona name’)\n"}]}
165
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.spawn Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.spawn`: Supported Method Parameters\n\nPWN::AI::Agent::Swarm.spawn(\n\nname: 'required - persona name (snake_case)',\nrole: 'required - system_role_content overlay for this persona',\ntoolsets: 'optional - Array of Registry toolset names',\nengine: 'optional - :openai / :anthropic / :grok / :gemini / :ollama',\nmax_iters: 'optional - per-turn iteration cap for this persona'\n\n)\n"}]}
166
+ {"messages":[{"role":"user","content":"PWN::AI::Agent::Swarm.with_persona_env Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Swarm.with_persona_env`: "}]}
121
167
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::TransparentBrowser.analyze(\n\nrequest: 'required - current step in the JavaScript debugging session to analyze',\nsource_to_review: 'required - the block of JavaScript code in which the current step resides'\n\n)\n"}]}
122
168
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
123
169
  {"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.help`: "}]}
@@ -129,7 +175,7 @@
129
175
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.anthropic_rest_call Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.anthropic_rest_call`: Supported Method Parameters\n\nanthropic_rest_call(\n\ntoken: 'required - anthropic api key',\nhttp_method: 'optional HTTP method (defaults to GET)',\nbase_uri: 'optional base anthropic api URI (defaults to https://api.anthropic.com/v1)',\nrest_call: 'required rest call to make per the schema',\nparams: 'optional params passed in the URI or HTTP Headers',\nhttp_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST',\ntimeout: 'optional timeout in seconds (defaults to 900)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
130
176
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.authors Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
131
177
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.chat Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Anthropic.chat(\n\nrequest: 'required - message to Anthropic',\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:anthropic][:model])',\ntemp: 'optional - creative response float (defaults to PWN::Env[:ai][:anthropic][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:anthropic][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 900)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
132
- {"messages":[{"role":"user","content":"PWN::AI::Anthropic.chat_with_tools Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.chat_with_tools`: Supported Method Parameters\n\nresponse = PWN::AI::Anthropic.chat_with_tools(\n\nmessages: 'required - OpenAI-format messages array (system/user/assistant/tool)',\ntools: 'optional - OpenAI tools array [{type:\"function\", function:{...}}]',\ntool_choice: 'optional - \"auto\" | \"none\" | \"required\" | {type:\"function\", function:{name:..}}',\nmodel: 'optional - overrides PWN::Env[:ai][:anthropic][:model]',\ntemp: 'optional - temperature (defaults to PWN::Env[:ai][:anthropic][:temp] || 1)',\nmax_tokens: 'optional - defaults to 4096',\ntimeout: 'optional - seconds (default 900)',\nspinner: 'optional - display spinner (default false)'\n\n)\n"}]}
178
+ {"messages":[{"role":"user","content":"PWN::AI::Anthropic.chat_with_tools Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.chat_with_tools`: Supported Method Parameters\n\nresponse = PWN::AI::Anthropic.chat_with_tools(\n\nmessages: 'required - OpenAI-format messages array (system/user/assistant/tool)',\ntools: 'optional - OpenAI tools array [{type:\"function\", function:{...}}]',\ntool_choice: 'optional - \"auto\" | \"none\" | \"required\" | {type:\"function\", function:{name:..}}',\nmodel: 'optional - overrides PWN::Env[:ai][:anthropic][:model]',\ntemp: 'optional - temperature (defaults to PWN::Env[:ai][:anthropic][:temp] || 1)',\nmax_tokens: 'optional - defaults to PWN::Env[:ai][:anthropic][:max_tokens] || 128_000',\ntimeout: 'optional - seconds (default 900)',\nspinner: 'optional - display spinner (default false)'\n\n)\n"}]}
133
179
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.get_models Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.get_models`: Supported Method Parameters\n\nmodels = PWN::AI::Anthropic.get_models\n"}]}
134
180
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.help Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.help`: "}]}
135
181
  {"messages":[{"role":"user","content":"PWN::AI::Anthropic.oa_messages_to_anthropic Usage"},{"role":"assistant","content":"`PWN::AI::Anthropic.oa_messages_to_anthropic`: "}]}
@@ -153,9 +199,6 @@
153
199
  {"messages":[{"role":"user","content":"PWN::AI::Grok.obtain_oauth_bearer_token Usage"},{"role":"assistant","content":"`PWN::AI::Grok.obtain_oauth_bearer_token`: Supported Method Parameters\n\nbearer = PWN::AI::Grok.obtain_oauth_bearer_token(\n\nclient_id: 'optional - xAI OAuth Client ID (defaults to public Grok-CLI client)',\nscope: 'optional - space-delimited scopes (defaults to XAI_OAUTH_SCOPE)',\ntimeout: 'optional - seconds to wait for user consent (default 300)'\n\n)\n\nRuns the RFC 8628 OAuth 2.0 Device Authorization Grant against auth.x.ai using xAI’s public Grok-CLI client (no client_secret). This is the same identity path ‘hermes auth add xai-oauth` uses – a SuperGrok / X Premium+ subscription on the account is what grants api:access at consent time.\n\n1. POST /oauth2/device/code -> device_code, user_code, verification_uri\n2. User opens verification_uri_complete in a browser and approves.\n3. Poll POST /oauth2/token (grant_type=device_code) until access_token.\n\nOn success the access_token + refresh_token are written back into the passed opts/oauth Hash (so PWN::Env[:grok] is live-cached) and the operator is told exactly what to persist via pwn-vault.\n"}]}
154
200
  {"messages":[{"role":"user","content":"PWN::AI::Grok.real_config_value? Usage"},{"role":"assistant","content":"`PWN::AI::Grok.real_config_value?`: "}]}
155
201
  {"messages":[{"role":"user","content":"PWN::AI::Grok.refresh_oauth_bearer_token Usage"},{"role":"assistant","content":"`PWN::AI::Grok.refresh_oauth_bearer_token`: Supported Method Parameters\n\naccess_token = PWN::AI::Grok.refresh_oauth_bearer_token(\n\nrefresh_token: 'required - xAI OAuth refresh_token',\nclient_id: 'optional - defaults to public Grok-CLI client',\ntoken_uri: 'optional - defaults to https://auth.x.ai/oauth2/token'\n\n)\n\nExchanges a refresh_token for a fresh access_token at auth.x.ai. On success, writes :bearer_token (and a rotated :refresh_token if returned) back into the passed opts/oauth Hash so the live PWN::Env stays warm for the rest of the process.\n"}]}
156
- {"messages":[{"role":"user","content":"PWN::AI::Introspection.authors Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
157
- {"messages":[{"role":"user","content":"PWN::AI::Introspection.help Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.help`: "}]}
158
- {"messages":[{"role":"user","content":"PWN::AI::Introspection.reflect_on Usage"},{"role":"assistant","content":"`PWN::AI::Introspection.reflect_on`: Supported Method Parameters\n\nresponse = PWN::AI::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"}]}
159
202
  {"messages":[{"role":"user","content":"PWN::AI::Ollama.authors Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
160
203
  {"messages":[{"role":"user","content":"PWN::AI::Ollama.chat Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Ollama.chat(\n\nrequest: 'required - message to Ollama'\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:ollama][:model])',\ntemp: 'optional - creative response float (deafults to PWN::Env[:ai][:ollama][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:ollama][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 900)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
161
204
  {"messages":[{"role":"user","content":"PWN::AI::Ollama.chat_with_tools Usage"},{"role":"assistant","content":"`PWN::AI::Ollama.chat_with_tools`: Supported Method Parameters\n\nresponse = PWN::AI::Ollama.chat_with_tools(\n\nmessages: 'required - full OpenAI-format messages array (system/user/assistant/tool)',\ntools: 'optional - OpenAI tools array [{type:\"function\", function:{...}}]',\ntool_choice: 'optional - \"auto\" | \"none\" | {type:\"function\", function:{name:..}}',\nmodel: 'optional - overrides PWN::Env[:ai][:ollama][:model]',\ntemp: 'optional - temperature (defaults to PWN::Env[:ai][:ollama][:temp] || 1)',\ntimeout: 'optional - seconds (default 900)',\nspinner: 'optional - display spinner (default false)'\n\n)\n\nReturns the raw /v1/chat/completions response Hash with :choices intact (including :message) — used by PWN::AI::Agent::Loop. Ollama’s OpenAI-compat endpoint supports tools since 0.3.x; tool_calls come back with function.arguments as a JSON object (not string), which PWN::AI::Agent::Dispatch.parse_args handles transparently.\n"}]}
@@ -1112,7 +1155,6 @@
1112
1155
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.refresh_ps1_proc Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.refresh_ps1_proc`: "}]}
1113
1156
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.start Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.start`: Supported Method Parameters\n\nPWN::Plugins::REPL.start\n"}]}
1114
1157
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.process`: "}]}
1115
- {"messages":[{"role":"user","content":"PWN::Plugins::REPL.top_h1_program_scope Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.top_h1_program_scope`: "}]}
1116
1158
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.new Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.new`: "}]}
1117
1159
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.ensure_tmux_extended_keys Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.ensure_tmux_extended_keys`: "}]}
1118
1160
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.install_shift_enter_bindings Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.install_shift_enter_bindings`: "}]}
@@ -1496,25 +1538,89 @@
1496
1538
  {"messages":[{"role":"user","content":"PWN::SDR.hz_to_s Usage"},{"role":"assistant","content":"`PWN::SDR.hz_to_s`: Supported Method Parameters\n\nPWN::SDR.hz_to_s(\n\nfreq: 'required - frequency in Hz (Integer or String)'\n\n)\n"}]}
1497
1539
  {"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"}]}
1498
1540
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder.help`: "}]}
1541
+ {"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"}]}
1542
+ {"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"}]}
1543
+ {"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"}]}
1544
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ADSB.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ADSB.help`: "}]}
1545
+ {"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"}]}
1546
+ {"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
+ {"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
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::APT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::APT.help`: "}]}
1499
1549
  {"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"}]}
1500
1550
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.bin_available? Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.bin_available?`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.bin_available?(bin: ‘multimon-ng’)\n"}]}
1501
1551
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.help`: "}]}
1502
1552
  {"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"}]}
1503
1553
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Base.run_pipeline Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Base.run_pipeline`: Supported Method Parameters\n\nPWN::SDR::Decoder::Base.run_pipeline(\n\nfreq_obj: 'required - freq_obj Hash from PWN::SDR::GQRX.init_freq',\nprotocol: 'required - short name used in banner / log filename',\ndecode_cmd: 'optional - shell pipeline reading 22 050 Hz s16le on stdin',\ndirect_cmd: 'optional - stand-alone shell cmd (owns the SDR itself)',\nline_match: 'optional - Regexp/String a stdout line must match',\nparser: 'optional - Proc.new { |line| Hash } to structure a line',\nrequired_bins: 'optional - Array of executables that must exist on PATH',\nresample_hz: 'optional - sox output rate for decode_cmd (default 22050)'\n\n)\n"}]}
1554
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1555
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Bluetooth.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1556
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Bluetooth.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Bluetooth.help`: "}]}
1557
+ {"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"}]}
1558
+ {"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"}]}
1559
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::DECT.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1560
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::DECT.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::DECT.help`: "}]}
1561
+ {"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"}]}
1504
1562
  {"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"}]}
1505
1563
  {"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"}]}
1506
1564
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Flex.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Flex.help`: "}]}
1565
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1566
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::GPS.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1567
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.help`: "}]}
1568
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GPS.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GPS.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::GPS.parse_line(line: ‘Position at … Lat = 32.7 [deg], Long = -97.1 …’)\n"}]}
1507
1569
  {"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"}]}
1508
1570
  {"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"}]}
1509
1571
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::GSM.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::GSM.help`: "}]}
1510
1572
  {"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"}]}
1573
+ {"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"}]}
1574
+ {"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"}]}
1575
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Iridium.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Iridium.help`: "}]}
1576
+ {"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"}]}
1577
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1578
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::LTE.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1579
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.help`: "}]}
1580
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LTE.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LTE.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::LTE.parse_line(line: ‘Found CELL … PCI: 123 … PRB: 50 … -85.0 dBm’)\n"}]}
1581
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1582
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::LoRa.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1583
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.help`: "}]}
1584
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::LoRa.parse_line Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::LoRa.parse_line`: Supported Method Parameters\n\nPWN::SDR::Decoder::LoRa.parse_line(line: ‘{“model”:“LoRa”,…}’)\n"}]}
1585
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1586
+ {"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"}]}
1587
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Morse.help`: "}]}
1588
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Morse.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"}]}
1589
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1590
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::P25.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1591
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::P25.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::P25.help`: "}]}
1592
+ {"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"}]}
1511
1593
  {"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"}]}
1512
1594
  {"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"}]}
1513
1595
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::POCSAG.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::POCSAG.help`: "}]}
1514
1596
  {"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"}]}
1597
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1598
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::Pager.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1599
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::Pager.help`: "}]}
1600
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::Pager.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"}]}
1515
1601
  {"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"}]}
1516
1602
  {"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"}]}
1517
1603
  {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RDS.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RDS.help`: "}]}
1604
+ {"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"}]}
1605
+ {"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"}]}
1606
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RFID.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RFID.help`: "}]}
1607
+ {"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"}]}
1608
+ {"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"}]}
1609
+ {"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"}]}
1610
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTL433.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTL433.help`: "}]}
1611
+ {"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"}]}
1612
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1613
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::RTTY.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1614
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::RTTY.help`: "}]}
1615
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::RTTY.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"}]}
1616
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.authors Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
1617
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.decode Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.decode`: Supported Method Parameters\n\nPWN::SDR::Decoder::WiFi.decode(\n\nfreq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'\n\n)\n"}]}
1618
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::WiFi.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::WiFi.help`: "}]}
1619
+ {"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"}]}
1620
+ {"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"}]}
1621
+ {"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"}]}
1622
+ {"messages":[{"role":"user","content":"PWN::SDR::Decoder::ZigBee.help Usage"},{"role":"assistant","content":"`PWN::SDR::Decoder::ZigBee.help`: "}]}
1623
+ {"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"}]}
1518
1624
  {"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"}]}
1519
1625
  {"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"}]}
1520
1626
  {"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"}]}
@@ -1533,7 +1639,7 @@
1533
1639
  {"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"}]}
1534
1640
  {"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"}]}
1535
1641
  {"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"}]}
1536
- {"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',\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"}]}
1642
+ {"messages":[{"role":"user","content":"PWN::SDR::GQRX.fast_scan_range Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.fast_scan_range`: Supported Method Parameters\n\nfast_resp = PWN::SDR::GQRX.fast_scan_range(\n\ngqrx_sock: 'required - GQRX socket object',\nranges: 'required - Array<Hash> of {start_freq:, target_freq: }',\nsample_rate: 'optional - Set this to GQRX visible input sample rate (the span width)',\nnfft: 'optional - FFT size',\navg: 'optional',\ncapture_secs: 'optional',\nstrength_lock: 'optional',\nmin_snr_db: 'optional - Minimum SNR in dB above per-chunk noise floor to report (defaults to 12.0)',\ndemodulator_mode: 'optional - Demodulator mode to attribute to detections (defaults to WFM)',\nbandwidth: 'optional - Passband bandwidth to attribute to detections (defaults to \"200.000\")',\nsquelch: 'optional - Squelch level (defaults to strength_lock - 3.0)',\ndecoder: 'optional - Decoder key (e.g. :gsm) to attribute to detections',\nlocation: 'optional - Location string for AI analysis',\nkeep_spectrum: 'optional - if true return raw spectrum arrays too (large)'\n\n)\n\nUses chunk-wise retuning where chunk = sample_rate so that the *entire visible band* (waterfall width) is captured via a single FFT each time rather than point-by-point hops. This yields near real-time panoramic coverage. Update rate is roughly (retune + capture + fft) per chunk.\n\nPer-signal output shape is INTENTIONALLY IDENTICAL to scan_range / init_freq (:freq, :demodulator_mode, :bandwidth, :strength_db, :decoder, :squelch, :strength_lock, :iteration, :ai_analysis) so that analyze_scan / analyze_log and downstream decoders behave the same regardless of which scan mode produced the log. FFT-specific extras (:hz, :bw_hz, :snr_db, :prominence_db, :noise_floor_db, :chunk_center, :method) are appended for provenance.\n"}]}
1537
1643
  {"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"}]}
1538
1644
  {"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"}]}
1539
1645
  {"messages":[{"role":"user","content":"PWN::SDR::GQRX.help Usage"},{"role":"assistant","content":"`PWN::SDR::GQRX.help`: "}]}