pwn 0.5.708 → 0.5.710

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 (450) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/documentation/Installation.md +1 -0
  4. data/etc/default_skills/exploitdev/SKILL.md +38 -0
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  6. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  7. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  8. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  9. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  10. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  12. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  13. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  14. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +58 -0
  15. data/etc/default_skills/pwn/plugins/credential_attack/references/urls.md +3 -0
  16. data/etc/default_skills/pwn/plugins/exploit_db/SKILL.md +49 -0
  17. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +63 -0
  18. data/etc/default_skills/pwn/plugins/frida/SKILL.md +51 -0
  19. data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +2 -0
  20. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +53 -0
  21. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  22. data/etc/default_skills/pwn/plugins/k8s/SKILL.md +51 -0
  23. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +50 -0
  24. data/etc/default_skills/pwn/plugins/preflight_checker/SKILL.md +59 -0
  25. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +53 -0
  26. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  27. data/etc/default_skills/pwn/plugins/recon/SKILL.md +57 -0
  28. data/etc/default_skills/pwn/plugins/recon/references/urls.md +6 -0
  29. data/etc/default_skills/pwn/plugins/semgrep/SKILL.md +48 -0
  30. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  31. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  32. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +49 -0
  33. data/lib/pwn/ai/agent/assembly.rb +4 -1
  34. data/lib/pwn/ai/agent/btc.rb +4 -1
  35. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  36. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  37. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  38. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  39. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  40. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  41. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  42. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  43. data/lib/pwn/ai/agent/learning.rb +142 -25
  44. data/lib/pwn/ai/agent/loop.rb +53 -46
  45. data/lib/pwn/ai/agent/metrics.rb +133 -23
  46. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  47. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  48. data/lib/pwn/ai/agent/policy.rb +158 -18
  49. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  50. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  51. data/lib/pwn/ai/agent/reflect.rb +9 -5
  52. data/lib/pwn/ai/agent/registry.rb +65 -12
  53. data/lib/pwn/ai/agent/result.rb +19 -10
  54. data/lib/pwn/ai/agent/reward.rb +150 -32
  55. data/lib/pwn/ai/agent/sast.rb +4 -1
  56. data/lib/pwn/ai/agent/swarm.rb +72 -36
  57. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  58. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  59. data/lib/pwn/ai/agent/tools/sessions.rb +8 -1
  60. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  61. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  62. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  63. data/lib/pwn/ai/agent.rb +4 -0
  64. data/lib/pwn/ai/anthropic.rb +41 -7
  65. data/lib/pwn/ai/gemini.rb +21 -11
  66. data/lib/pwn/ai/grok.rb +44 -6
  67. data/lib/pwn/ai/http_retry.rb +40 -12
  68. data/lib/pwn/ai/ollama.rb +19 -10
  69. data/lib/pwn/ai/open_ai.rb +81 -30
  70. data/lib/pwn/ai/open_web_ui.rb +20 -14
  71. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  72. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  73. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  74. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  75. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  76. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  77. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  78. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  79. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  80. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  81. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  82. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  83. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  84. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  85. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  86. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  87. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  88. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  89. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  90. data/lib/pwn/ai/red_team.rb +4 -0
  91. data/lib/pwn/ai.rb +4 -0
  92. data/lib/pwn/aws/acm.rb +5 -2
  93. data/lib/pwn/aws/api_gateway.rb +10 -7
  94. data/lib/pwn/aws/app_stream.rb +5 -2
  95. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  96. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  97. data/lib/pwn/aws/auto_scaling.rb +5 -2
  98. data/lib/pwn/aws/batch.rb +5 -2
  99. data/lib/pwn/aws/budgets.rb +5 -2
  100. data/lib/pwn/aws/cloud_formation.rb +5 -2
  101. data/lib/pwn/aws/cloud_front.rb +7 -4
  102. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  103. data/lib/pwn/aws/cloud_search.rb +5 -2
  104. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  105. data/lib/pwn/aws/cloud_trail.rb +5 -2
  106. data/lib/pwn/aws/cloud_watch.rb +5 -2
  107. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  108. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  109. data/lib/pwn/aws/code_build.rb +5 -2
  110. data/lib/pwn/aws/code_commit.rb +5 -2
  111. data/lib/pwn/aws/code_deploy.rb +5 -2
  112. data/lib/pwn/aws/code_pipeline.rb +5 -2
  113. data/lib/pwn/aws/cognito_identity.rb +5 -2
  114. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  115. data/lib/pwn/aws/cognito_sync.rb +5 -2
  116. data/lib/pwn/aws/config_service.rb +5 -2
  117. data/lib/pwn/aws/data_pipleline.rb +5 -2
  118. data/lib/pwn/aws/database_migration_service.rb +5 -2
  119. data/lib/pwn/aws/device_farm.rb +5 -2
  120. data/lib/pwn/aws/direct_connect.rb +5 -2
  121. data/lib/pwn/aws/directory_service.rb +5 -2
  122. data/lib/pwn/aws/dynamo_db.rb +5 -2
  123. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  124. data/lib/pwn/aws/ec2.rb +5 -2
  125. data/lib/pwn/aws/ecr.rb +5 -2
  126. data/lib/pwn/aws/ecs.rb +5 -2
  127. data/lib/pwn/aws/efs.rb +5 -2
  128. data/lib/pwn/aws/elasti_cache.rb +5 -2
  129. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  130. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  131. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  132. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  133. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  134. data/lib/pwn/aws/emr.rb +5 -2
  135. data/lib/pwn/aws/firehose.rb +5 -2
  136. data/lib/pwn/aws/game_lift.rb +5 -2
  137. data/lib/pwn/aws/glacier.rb +6 -3
  138. data/lib/pwn/aws/health.rb +5 -2
  139. data/lib/pwn/aws/iam.rb +10 -4
  140. data/lib/pwn/aws/import_export.rb +5 -2
  141. data/lib/pwn/aws/inspector.rb +5 -2
  142. data/lib/pwn/aws/iot.rb +5 -2
  143. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  144. data/lib/pwn/aws/kinesis.rb +5 -2
  145. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  146. data/lib/pwn/aws/kms.rb +5 -2
  147. data/lib/pwn/aws/lambda.rb +5 -2
  148. data/lib/pwn/aws/lambda_preview.rb +5 -2
  149. data/lib/pwn/aws/lex.rb +5 -2
  150. data/lib/pwn/aws/lightsail.rb +5 -2
  151. data/lib/pwn/aws/machine_learning.rb +5 -2
  152. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  153. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  154. data/lib/pwn/aws/ops_works.rb +5 -2
  155. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  156. data/lib/pwn/aws/pinpoint.rb +5 -2
  157. data/lib/pwn/aws/polly.rb +5 -2
  158. data/lib/pwn/aws/rds.rb +5 -2
  159. data/lib/pwn/aws/redshift.rb +5 -2
  160. data/lib/pwn/aws/rekognition.rb +5 -2
  161. data/lib/pwn/aws/route53.rb +5 -2
  162. data/lib/pwn/aws/route53_domains.rb +5 -2
  163. data/lib/pwn/aws/s3.rb +5 -2
  164. data/lib/pwn/aws/service_catalog.rb +5 -2
  165. data/lib/pwn/aws/ses.rb +5 -2
  166. data/lib/pwn/aws/shield.rb +5 -2
  167. data/lib/pwn/aws/simple_db.rb +5 -2
  168. data/lib/pwn/aws/sms.rb +5 -2
  169. data/lib/pwn/aws/snowball.rb +5 -2
  170. data/lib/pwn/aws/sns.rb +5 -2
  171. data/lib/pwn/aws/sqs.rb +5 -2
  172. data/lib/pwn/aws/ssm.rb +5 -2
  173. data/lib/pwn/aws/states.rb +5 -2
  174. data/lib/pwn/aws/storage_gateway.rb +5 -2
  175. data/lib/pwn/aws/sts.rb +4 -1
  176. data/lib/pwn/aws/support.rb +5 -2
  177. data/lib/pwn/aws/swf.rb +5 -2
  178. data/lib/pwn/aws/waf.rb +5 -2
  179. data/lib/pwn/aws/waf_regional.rb +5 -2
  180. data/lib/pwn/aws/workspaces.rb +5 -2
  181. data/lib/pwn/aws/x_ray.rb +5 -2
  182. data/lib/pwn/aws.rb +4 -0
  183. data/lib/pwn/banner/anon.rb +3 -0
  184. data/lib/pwn/banner/bubble.rb +3 -0
  185. data/lib/pwn/banner/cheshire.rb +3 -0
  186. data/lib/pwn/banner/code_cave.rb +3 -0
  187. data/lib/pwn/banner/dont_panic.rb +3 -0
  188. data/lib/pwn/banner/f_society.rb +3 -0
  189. data/lib/pwn/banner/fork_bomb.rb +3 -0
  190. data/lib/pwn/banner/jmp_esp.rb +3 -0
  191. data/lib/pwn/banner/matrix.rb +5 -1
  192. data/lib/pwn/banner/ninja.rb +3 -0
  193. data/lib/pwn/banner/off_the_air.rb +3 -0
  194. data/lib/pwn/banner/pirate.rb +3 -0
  195. data/lib/pwn/banner/radare2.rb +3 -0
  196. data/lib/pwn/banner/radare2_ai.rb +3 -0
  197. data/lib/pwn/banner/white_rabbit.rb +3 -0
  198. data/lib/pwn/banner.rb +6 -2
  199. data/lib/pwn/blockchain/btc.rb +8 -3
  200. data/lib/pwn/blockchain/eth.rb +10 -3
  201. data/lib/pwn/blockchain.rb +4 -0
  202. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  203. data/lib/pwn/bounty.rb +4 -0
  204. data/lib/pwn/config.rb +79 -13
  205. data/lib/pwn/cron.rb +297 -20
  206. data/lib/pwn/driver.rb +2 -18
  207. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  208. data/lib/pwn/ffi/fftw.rb +31 -6
  209. data/lib/pwn/ffi/hack_rf.rb +59 -8
  210. data/lib/pwn/ffi/liquid.rb +63 -10
  211. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  212. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  213. data/lib/pwn/ffi/stdio.rb +7 -8
  214. data/lib/pwn/ffi/volk.rb +36 -7
  215. data/lib/pwn/ffi.rb +12 -0
  216. data/lib/pwn/memory.rb +136 -16
  217. data/lib/pwn/memory_index.rb +34 -19
  218. data/lib/pwn/migrate.rb +34 -24
  219. data/lib/pwn/module_skills.rb +39 -8
  220. data/lib/pwn/plugins/aflplusplus.rb +72 -0
  221. data/lib/pwn/plugins/android.rb +71 -245
  222. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  223. data/lib/pwn/plugins/assembly.rb +9 -4
  224. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  225. data/lib/pwn/plugins/baresip.rb +59 -12
  226. data/lib/pwn/plugins/basic_auth.rb +9 -3
  227. data/lib/pwn/plugins/beef.rb +28 -18
  228. data/lib/pwn/plugins/binary_parser.rb +133 -0
  229. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  230. data/lib/pwn/plugins/burp_suite.rb +98 -68
  231. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  232. data/lib/pwn/plugins/char.rb +33 -3
  233. data/lib/pwn/plugins/credential_attack.rb +158 -0
  234. data/lib/pwn/plugins/credit_card.rb +6 -1
  235. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  236. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  237. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  238. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  239. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  240. data/lib/pwn/plugins/detect_os.rb +5 -0
  241. data/lib/pwn/plugins/ein.rb +3 -0
  242. data/lib/pwn/plugins/exploit_db.rb +69 -0
  243. data/lib/pwn/plugins/exploit_dev.rb +330 -0
  244. data/lib/pwn/plugins/file_fu.rb +11 -8
  245. data/lib/pwn/plugins/frida.rb +112 -0
  246. data/lib/pwn/plugins/fuzz.rb +42 -6
  247. data/lib/pwn/plugins/gdb.rb +115 -0
  248. data/lib/pwn/plugins/git.rb +19 -14
  249. data/lib/pwn/plugins/github.rb +38 -15
  250. data/lib/pwn/plugins/google_workspace.rb +188 -45
  251. data/lib/pwn/plugins/hacker_one.rb +159 -35
  252. data/lib/pwn/plugins/hunter.rb +6 -3
  253. data/lib/pwn/plugins/ip_info.rb +9 -4
  254. data/lib/pwn/plugins/irc.rb +28 -15
  255. data/lib/pwn/plugins/jenkins.rb +65 -57
  256. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  257. data/lib/pwn/plugins/jobs.rb +110 -0
  258. data/lib/pwn/plugins/json_pathify.rb +9 -5
  259. data/lib/pwn/plugins/k8s.rb +73 -0
  260. data/lib/pwn/plugins/log.rb +113 -13
  261. data/lib/pwn/plugins/mail_agent.rb +87 -79
  262. data/lib/pwn/plugins/metasploit.rb +11 -6
  263. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  264. data/lib/pwn/plugins/msr206.rb +42 -28
  265. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  266. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  267. data/lib/pwn/plugins/nmap_it.rb +14 -34
  268. data/lib/pwn/plugins/nuclei.rb +90 -0
  269. data/lib/pwn/plugins/oauth2.rb +11 -5
  270. data/lib/pwn/plugins/ocr.rb +3 -0
  271. data/lib/pwn/plugins/open_api.rb +5 -2
  272. data/lib/pwn/plugins/openvas.rb +33 -25
  273. data/lib/pwn/plugins/packet.rb +152 -31
  274. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  275. data/lib/pwn/plugins/pony.rb +86 -1
  276. data/lib/pwn/plugins/preflight_checker.rb +166 -0
  277. data/lib/pwn/plugins/process_tube.rb +139 -0
  278. data/lib/pwn/plugins/ps.rb +7 -1
  279. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  280. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  281. data/lib/pwn/plugins/radare2.rb +253 -0
  282. data/lib/pwn/plugins/recon.rb +196 -0
  283. data/lib/pwn/plugins/repl.rb +122 -1
  284. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  285. data/lib/pwn/plugins/semgrep.rb +61 -0
  286. data/lib/pwn/plugins/serial.rb +24 -14
  287. data/lib/pwn/plugins/shodan.rb +54 -35
  288. data/lib/pwn/plugins/slack_client.rb +11 -6
  289. data/lib/pwn/plugins/sock.rb +17 -8
  290. data/lib/pwn/plugins/spider.rb +5 -2
  291. data/lib/pwn/plugins/sqlmap.rb +49 -0
  292. data/lib/pwn/plugins/ssn.rb +3 -0
  293. data/lib/pwn/plugins/thread_pool.rb +6 -9
  294. data/lib/pwn/plugins/tor.rb +9 -4
  295. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  296. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  297. data/lib/pwn/plugins/twitter_api.rb +6 -2
  298. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  299. data/lib/pwn/plugins/vault.rb +12 -3
  300. data/lib/pwn/plugins/vin.rb +24 -12
  301. data/lib/pwn/plugins/voice.rb +7 -2
  302. data/lib/pwn/plugins/volatility.rb +67 -0
  303. data/lib/pwn/plugins/vsphere.rb +9 -5
  304. data/lib/pwn/plugins/xxd.rb +12 -43
  305. data/lib/pwn/plugins/zaproxy.rb +30 -16
  306. data/lib/pwn/plugins.rb +22 -0
  307. data/lib/pwn/reports/ai_red_team.rb +6 -2
  308. data/lib/pwn/reports/csv.rb +8 -1
  309. data/lib/pwn/reports/fuzz.rb +5 -2
  310. data/lib/pwn/reports/html.rb +8 -1
  311. data/lib/pwn/reports/html_footer.rb +4 -3
  312. data/lib/pwn/reports/html_header.rb +6 -2
  313. data/lib/pwn/reports/json.rb +8 -1
  314. data/lib/pwn/reports/markdown.rb +8 -1
  315. data/lib/pwn/reports/pdf.rb +8 -1
  316. data/lib/pwn/reports/phone.rb +5 -2
  317. data/lib/pwn/reports/sast.rb +6 -2
  318. data/lib/pwn/reports/uri_buster.rb +5 -2
  319. data/lib/pwn/reports/xml.rb +8 -1
  320. data/lib/pwn/reports.rb +19 -0
  321. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  322. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  323. data/lib/pwn/sast/aws.rb +9 -3
  324. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  325. data/lib/pwn/sast/base64.rb +9 -3
  326. data/lib/pwn/sast/beef_hook.rb +9 -3
  327. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  328. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  329. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  330. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  331. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  332. data/lib/pwn/sast/csrf.rb +9 -3
  333. data/lib/pwn/sast/deserial_java.rb +9 -3
  334. data/lib/pwn/sast/emoticon.rb +9 -3
  335. data/lib/pwn/sast/eval.rb +9 -3
  336. data/lib/pwn/sast/factory.rb +9 -3
  337. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  338. data/lib/pwn/sast/inner_html.rb +9 -3
  339. data/lib/pwn/sast/keystore.rb +9 -3
  340. data/lib/pwn/sast/local_storage.rb +9 -3
  341. data/lib/pwn/sast/location_hash.rb +9 -3
  342. data/lib/pwn/sast/log4j.rb +9 -3
  343. data/lib/pwn/sast/logger.rb +9 -3
  344. data/lib/pwn/sast/md5.rb +9 -3
  345. data/lib/pwn/sast/outer_html.rb +9 -3
  346. data/lib/pwn/sast/padding_oracle.rb +9 -3
  347. data/lib/pwn/sast/password.rb +9 -3
  348. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  349. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  350. data/lib/pwn/sast/pom_version.rb +9 -3
  351. data/lib/pwn/sast/port.rb +9 -3
  352. data/lib/pwn/sast/post_message.rb +9 -3
  353. data/lib/pwn/sast/private_key.rb +9 -3
  354. data/lib/pwn/sast/redirect.rb +9 -3
  355. data/lib/pwn/sast/redos.rb +9 -3
  356. data/lib/pwn/sast/shell.rb +9 -3
  357. data/lib/pwn/sast/signature.rb +9 -3
  358. data/lib/pwn/sast/sql.rb +9 -3
  359. data/lib/pwn/sast/ssl.rb +9 -3
  360. data/lib/pwn/sast/sudo.rb +9 -3
  361. data/lib/pwn/sast/task_tag.rb +9 -3
  362. data/lib/pwn/sast/test_case_engine.rb +11 -7
  363. data/lib/pwn/sast/throw_errors.rb +9 -3
  364. data/lib/pwn/sast/token.rb +9 -3
  365. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  366. data/lib/pwn/sast/use_after_free.rb +9 -3
  367. data/lib/pwn/sast/version.rb +9 -3
  368. data/lib/pwn/sast/window_location_hash.rb +9 -3
  369. data/lib/pwn/sast.rb +4 -0
  370. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  371. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  372. data/lib/pwn/sdr/decoder/base.rb +74 -22
  373. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  374. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  375. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  376. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  377. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  378. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  379. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  380. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  381. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  382. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  383. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  384. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  385. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  386. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  387. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  388. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  389. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  390. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  391. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  392. data/lib/pwn/sdr/decoder.rb +9 -0
  393. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  394. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  395. data/lib/pwn/sdr/gqrx.rb +178 -119
  396. data/lib/pwn/sdr/rfidler.rb +4 -1
  397. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  398. data/lib/pwn/sdr.rb +14 -0
  399. data/lib/pwn/sessions.rb +86 -16
  400. data/lib/pwn/setup.rb +106 -37
  401. data/lib/pwn/version.rb +1 -1
  402. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  403. data/lib/pwn/www/bing.rb +10 -5
  404. data/lib/pwn/www/bug_crowd.rb +11 -5
  405. data/lib/pwn/www/checkip.rb +8 -4
  406. data/lib/pwn/www/coinbase_pro.rb +11 -5
  407. data/lib/pwn/www/duckduckgo.rb +12 -6
  408. data/lib/pwn/www/facebook.rb +11 -5
  409. data/lib/pwn/www/github.rb +11 -5
  410. data/lib/pwn/www/google.rb +11 -5
  411. data/lib/pwn/www/hacker_one.rb +20 -9
  412. data/lib/pwn/www/linkedin.rb +11 -5
  413. data/lib/pwn/www/pandora.rb +11 -5
  414. data/lib/pwn/www/pastebin.rb +9 -4
  415. data/lib/pwn/www/paypal.rb +19 -11
  416. data/lib/pwn/www/synack.rb +11 -5
  417. data/lib/pwn/www/torch.rb +13 -8
  418. data/lib/pwn/www/trading_view.rb +11 -5
  419. data/lib/pwn/www/twitter.rb +11 -5
  420. data/lib/pwn/www/uber.rb +11 -5
  421. data/lib/pwn/www/upwork.rb +11 -5
  422. data/lib/pwn/www/wayback_machine.rb +12 -6
  423. data/lib/pwn/www/youtube.rb +10 -5
  424. data/lib/pwn/www.rb +4 -0
  425. data/spec/conventions_spec.rb +118 -2
  426. data/spec/integration/help_contract_spec.rb +2 -0
  427. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  428. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  429. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  431. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  432. data/spec/lib/pwn/plugins/exploit_db_spec.rb +13 -0
  433. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  434. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  435. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  436. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  437. data/spec/lib/pwn/plugins/k8s_spec.rb +13 -0
  438. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  439. data/spec/lib/pwn/plugins/preflight_checker_spec.rb +23 -0
  440. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  441. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  442. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  443. data/spec/lib/pwn/plugins/semgrep_spec.rb +13 -0
  444. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  445. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  446. data/spec/lib/pwn/req_queue_spec.rb +168 -0
  447. data/third_party/pwn_rdoc.jsonl +160 -5
  448. metadata +63 -7
  449. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  450. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -1634,36 +1634,95 @@ module PWN
1634
1634
  # Display Usage for this Module
1635
1635
 
1636
1636
  public_class_method def self.help
1637
- puts <<~USAGE
1638
- USAGE:
1639
- # Tier 4 — self-play
1640
- PWN::AI::Agent::Curriculum.practice(limit: 3) # S1 + P14 trajectory DPO pairs + P17 budget-first
1641
- PWN::AI::Agent::Curriculum.offline_judge(since_hours: 24) # P3 offline ORM/PRM fill
1642
- PWN::AI::Agent::Curriculum.preference_balance # P5 W1 diversity report
1643
- PWN::AI::Agent::Curriculum.counterfactual(request:, name:, args:, error:, hint:) # S2 A/B → DPO pair
1644
- PWN::AI::Agent::Curriculum.critic(request:, final:) # S3 tool-armed constitutional critic
1645
- PWN::AI::Agent::Curriculum.red_team_plan(request:, plan:) # S4 telemetry-grounded plan review
1646
- PWN::AI::Agent::Curriculum.hindsight(request:, final:, session_id:) # C3 HER soft-relabel
1647
-
1648
- # Tier 5 close the weight loop
1649
- PWN::AI::Agent::Curriculum.train_and_gate(dry_run: true) # W2 export-ready; P11 gate v2 promote only with trainer+dry_run:false
1650
- PWN::AI::Agent::Curriculum.calibrate(predicted: 0.8, actual: 1.0) # W3 Brier Metrics[:calibration]
1651
-
1652
- Cron self-improvement (seeded by PWN::Cron.install_defaults):
1653
- curriculum_practice_nightly 0 3 * * * Curriculum.practice(limit: 3)
1654
- curriculum_offline_judge 30 3 * * * Curriculum.offline_judge(since_hours: 24, limit: 40)
1655
- curriculum_train_weekly 0 4 * * 0 Curriculum.train_and_gate(dry_run: true)
1656
- learning_consolidate_nightly 0 5 * * * Learning.consolidate
1657
-
1658
- Config (PWN::Env[:ai][:agent]) — nil = auto (ON for remote engines, OFF for ollama):
1659
- :critic - Boolean/nil, run S3 before every note_outcome
1660
- :red_team_plan - Boolean/nil, run S4 after every plan_first
1661
- :counterfactual - Boolean/nil, run S2 on REPEAT_THRESHOLD
1662
- :hindsight - Boolean, HER soft-relabel failures (default true)
1663
- :reward_llm - Boolean/nil, force ORM/PRM LLM teacher (nil=on for remote)
1664
-
1665
- #{self}.authors
1666
- USAGE
1637
+ puts "USAGE:
1638
+ # Run practice and return its result
1639
+ #{self}.practice(
1640
+ limit: 'optional - limit value consumed by #practice',
1641
+ prompts_per: 'optional - prompts per value consumed by #practice',
1642
+ dry_run: 'optional - dry run value consumed by #practice'
1643
+ )
1644
+
1645
+ # Priority-fix 3 — Offline ORM/PRM pass over recent sessions so
1646
+ #{self}.offline_judge(
1647
+ local: 'optional - failure_only introspect does not starve the reward corpus.',
1648
+ since_hours: 'optional - lookback window (default 24)',
1649
+ limit: 'optional - max sessions to score (default 40)',
1650
+ prm: 'optional - also run Process Reward Model (default true)',
1651
+ commit: 'optional - write scores into learning/sentinel (default true)'
1652
+ )
1653
+
1654
+ # P5 W1 diversity report so monoculture is visible before DPO export
1655
+ #{self}.preference_balance(
1656
+ limit: 'optional - limit value consumed by #preference_balance (defaults to 10_000)',
1657
+ scrub: 'optional - scrub value consumed by #preference_balance'
1658
+ )
1659
+
1660
+ # Run counterfactual and return its result
1661
+ #{self}.counterfactual(
1662
+ force: 'optional - force value consumed by #counterfactual',
1663
+ request: 'optional - request value consumed by #counterfactual',
1664
+ hint: 'optional - hint value consumed by #counterfactual',
1665
+ name: 'required - binary or identifier name',
1666
+ args: 'required - args value consumed by #counterfactual',
1667
+ error: 'optional - error value consumed by #counterfactual'
1668
+ )
1669
+
1670
+ # S3 — Constitutional critic (with tool access)
1671
+ #{self}.critic(
1672
+ request: 'required - user request',
1673
+ final: 'required - candidate final answer',
1674
+ session_id: 'optional - for evidence lookup',
1675
+ text_only: 'optional - text only value consumed by #critic',
1676
+ force: 'optional - force value consumed by #critic'
1677
+ )
1678
+
1679
+ # S4 — Adversarial plan review (grounded in telemetry)
1680
+ #{self}.red_team_plan(
1681
+ request: 'required - user goal',
1682
+ plan: 'required - numbered plan text from plan_first'
1683
+ )
1684
+
1685
+ # C3 — Hindsight Experience Replay
1686
+ #{self}.hindsight(
1687
+ request: 'required - the FAILED goal',
1688
+ final: 'required - the final produced anyway',
1689
+ session_id: 'required - trajectory to relabel'
1690
+ )
1691
+
1692
+ # W2 — Online LoRA A/B with regression gate
1693
+ #{self}.train_and_gate(
1694
+ base_model: 'optional - ollama base tag (default PWN::Env[:ai][:ollama][:model])',
1695
+ trainer: 'optional - :unsloth | :axolotl | :auto (default :auto)',
1696
+ dry_run: 'optional - export + build eval set but do not train (default true)'
1697
+ )
1698
+
1699
+ # Run reclassify backlog and return its result
1700
+ #{self}.reclassify_backlog(
1701
+ limit: 'optional - limit value consumed by #reclassify_backlog'
1702
+ )
1703
+
1704
+ # Run practice kpi and return its result
1705
+ #{self}.practice_kpi(
1706
+ results: 'optional - Array results value consumed by #practice_kpi',
1707
+ reclassified_n: 'optional - reclassified n value consumed by #practice_kpi'
1708
+ )
1709
+
1710
+ # Week-over-week (or last-N snapshots) delta on repeating_n
1711
+ #{self}.repeating_trend(
1712
+ limit: 'optional - limit value consumed by #repeating_trend'
1713
+ )
1714
+
1715
+ # Run calibrate and return its result
1716
+ #{self}.calibrate(
1717
+ predicted: 'optional - predicted value consumed by #calibrate',
1718
+ actual: 'optional - actual value consumed by #calibrate',
1719
+ engine: 'optional - engine value consumed by #calibrate'
1720
+ )
1721
+
1722
+ # Print the AUTHOR(S) string for this module.
1723
+ #{self}.authors
1724
+ "
1725
+ constants.sort
1667
1726
  end
1668
1727
  end
1669
1728
  end
@@ -352,22 +352,33 @@ module PWN
352
352
  # Display Usage for this Module
353
353
 
354
354
  public_class_method def self.help
355
- puts <<~USAGE
356
- USAGE:
357
- json_str = PWN::AI::Agent::Dispatch.call(
358
- tool_call: {
359
- id: 'call_1',
360
- type: 'function',
361
- function: { name: 'shell', arguments: '{"command":"id"}' }
362
- }
363
- )
364
-
365
- PWN::AI::Agent::Dispatch.repair_name(name: 'run_shell') # => 'shell'
366
- PWN::AI::Agent::Dispatch.effect(name: 'shell', args: { command: 'ls' })
367
- PWN::AI::Agent::Dispatch.tool_calls_from_text(text: 'shell(command="id")')
368
-
369
- #{self}.authors
370
- USAGE
355
+ puts "USAGE:
356
+ # Run call and return its result
357
+ #{self}.call(
358
+ tool_call: 'required - Hash { id:, type:, function: { name:, arguments: } }'
359
+ )
360
+
361
+ # Run repair name and return its result
362
+ #{self}.repair_name(
363
+ name: 'required - possibly-wrong tool name emitted by the model'
364
+ )
365
+
366
+ # Run tool calls from text and return its result
367
+ #{self}.tool_calls_from_text(
368
+ text: 'required - assistant plain-text that may embed shell(...) / JSON tool forms',
369
+ call: 'optional - shell{command: uname -s} / tool:shell{command:id}'
370
+ )
371
+
372
+ # Run effect and return its result
373
+ #{self}.effect(
374
+ name: 'required - binary or identifier name',
375
+ args: 'optional - args value consumed by #effect'
376
+ )
377
+
378
+ # Print the AUTHOR(S) string for this module.
379
+ #{self}.authors
380
+ "
381
+ constants.sort
371
382
  end
372
383
  end
373
384
  end
@@ -214,25 +214,16 @@ module PWN
214
214
  { source: 'recon-ng', error: "#{e.class}: #{e.message.to_s[0, 160]}" }
215
215
  end
216
216
  # Marker submodule so this file satisfies PWN module conventions
217
- # (def self.help / def self.authors per-file) WITHOUT clobbering
218
- # PWN::AI::Agent::Extrospection.help defined in the parent file.
219
- module OSINTBridges
220
- # Author(s):: 0day Inc. <support@0dayinc.com>
221
-
222
- public_class_method def self.authors
223
- "AUTHOR(S):\n0day Inc. <support@0dayinc.com>\n"
224
- end
225
-
226
- # Display Usage for this Module
217
+ public_class_method def self.authors
218
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
219
+ end
227
220
 
228
- public_class_method def self.help
229
- <<~USAGE
230
- Local-tool OSINT bridge feeds for PWN::AI::Agent::Extrospection.osint.
231
- Feeds: #{BRIDGE_FEEDS.join(', ')}
232
- Bins probed: theHarvester, spiderfoot, amass, recon-ng (skips cleanly when absent).
233
- See PWN::AI::Agent::Extrospection.help / documentation/Extrospection.md.
234
- USAGE
235
- end
221
+ public_class_method def self.help
222
+ puts "USAGE:
223
+ # Marker submodule so this file satisfies PWN module conventions
224
+ #{self}.authors
225
+ "
226
+ constants.sort
236
227
  end
237
228
  end
238
229
  end
@@ -379,25 +379,16 @@ module PWN
379
379
  }
380
380
  end
381
381
  # Marker submodule so this file satisfies PWN module conventions
382
- # (def self.help / def self.authors per-file) WITHOUT clobbering
383
- # PWN::AI::Agent::Extrospection.help defined in the parent file.
384
- module OSINTSocial
385
- # Author(s):: 0day Inc. <support@0dayinc.com>
386
-
387
- public_class_method def self.authors
388
- "AUTHOR(S):\n0day Inc. <support@0dayinc.com>\n"
389
- end
390
-
391
- # Display Usage for this Module
382
+ public_class_method def self.authors
383
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
384
+ end
392
385
 
393
- public_class_method def self.help
394
- <<~USAGE
395
- Social / identity OSINT feeds for PWN::AI::Agent::Extrospection.osint.
396
- Feeds: #{SOCIAL_FEEDS.join(', ')}
397
- Sites file: #{SOCIAL_SITES_FILE}
398
- See PWN::AI::Agent::Extrospection.help / documentation/Extrospection.md.
399
- USAGE
400
- end
386
+ public_class_method def self.help
387
+ puts "USAGE:
388
+ # Marker submodule so this file satisfies PWN module conventions
389
+ #{self}.authors
390
+ "
391
+ constants.sort
401
392
  end
402
393
  end
403
394
  end
@@ -44,7 +44,7 @@ module PWN
44
44
  #
45
45
  # PromptBuilder re-injects Extrospection.to_context on every turn.
46
46
  # Persistence: ~/.pwn/extrospection.json across REPL restarts.
47
- module Extrospection
47
+ module Extrospection # rubocop:disable Metrics/ModuleLength
48
48
  EXTRO_FILE = File.join(Dir.home, '.pwn', 'extrospection.json')
49
49
  MAX_OBSERVATIONS = 500
50
50
  # CLI tools that accept a cheap, non-interactive --version / -V.
@@ -3630,65 +3630,190 @@ module PWN
3630
3630
  # Display Usage for this Module
3631
3631
 
3632
3632
  public_class_method def self.help
3633
- puts <<~USAGE
3634
- USAGE:
3635
- PWN::AI::Agent::Extrospection.snapshot # probe host, persist, return {snapshot:, drift:}
3636
- PWN::AI::Agent::Extrospection.drift(live: true) # what changed vs last snapshot
3637
- PWN::AI::Agent::Extrospection.observe(source: 'nmap', category: :recon, target: '10.0.0.5', data: '22/tcp open ssh 9.6')
3638
- PWN::AI::Agent::Extrospection.observe(source: 'gqrx', category: :rf, target: '433.920MHz', data: 'peak -34.2 dBFS bw=200k')
3639
- PWN::AI::Agent::Extrospection.observations(category: 'recon', target: '10.0.0.5')
3640
- PWN::AI::Agent::Extrospection.intel(query: 'openssl 3.0', record: true)
3641
- PWN::AI::Agent::Extrospection.correlate # introspection x extrospection findings
3642
- PWN::AI::Agent::Extrospection.to_context # injected by PromptBuilder
3643
- PWN::AI::Agent::Extrospection.stats
3644
- PWN::AI::Agent::Extrospection.auto_extrospect(session_id: sid) # called from Learning.auto_introspect
3645
- PWN::AI::Agent::Extrospection.snapshot(sections: %i[web]) # opt-in browser probe of web_anchors
3646
- PWN::AI::Agent::Extrospection.watch(url: 'https://target/api/version')
3647
- PWN::AI::Agent::Extrospection.rf_tune(freq: '101.1') # tune GQRX + RDS → now_playing
3648
- PWN::AI::Agent::Extrospection.osint(query: '+13125551212', kind: :phone)
3649
- PWN::AI::Agent::Extrospection.osint(query: '2ABIP-ESP32', kind: :fcc_id)
3650
- PWN::AI::Agent::Extrospection.osint(query: 'US10123456', kind: :patent)
3651
- PWN::AI::Agent::Extrospection.osint(query: '1HGCM82633A004352', kind: :vin)
3652
- PWN::AI::Agent::Extrospection.osint(query: '00:11:22:33:44:55', kind: :mac)
3653
- PWN::AI::Agent::Extrospection.osint(query: 'W1AW', kind: :callsign)
3654
- PWN::AI::Agent::Extrospection.osint(query: 'CVE-2021-44228', kind: :cve)
3655
- PWN::AI::Agent::Extrospection.serial_sense(payload: "ATI\r")
3656
- PWN::AI::Agent::Extrospection.telecomm(action: :status)
3657
- PWN::AI::Agent::Extrospection.packet_sense(action: :capture, filter: 'tcp port 443', count: 10)
3658
- PWN::AI::Agent::Extrospection.vision(file: '/tmp/shot.png', action: :ocr)
3659
- PWN::AI::Agent::Extrospection.voice_sense(action: :tts, text: 'hello from pwn')
3660
- PWN::AI::Agent::Extrospection.verify(claim: 'CVE-2026-12345 affects OpenSSL 3.2.1')
3661
- PWN::AI::Agent::Extrospection.revalidate_memory # cron: GC stale PWN::Memory :fact entries
3662
- PWN::AI::Agent::Extrospection.reset
3663
-
3664
- PRIMARY use = on-demand sensing (intel / verify / watch / rf_tune / osint /
3665
- serial_sense / telecomm / packet_sense / vision / voice_sense / observe /
3666
- rf / web / osint / serial / telecomm / packet / vision / voice).
3667
- auto_extrospect is OPTIONAL ambient baseline (host/repo/env only - never
3668
- launches burpsuite/zaproxy/msfconsole/gqrx). Prefer calling sense tools
3669
- when a question needs the outside world, not after every turn.
3670
-
3671
- Enable end-of-run ambient baseline with:
3672
- PWN::Env[:ai][:agent][:auto_extrospect] = true # sections: AUTO_SECTIONS
3673
-
3674
- Configure browser-backed :web probe / verify / watch with:
3675
- PWN::Env[:ai][:agent][:extrospection][:web] =
3676
- { anchors: [...], proxy: 'tor', max_anchors: 8, per_page_timeout: 15, screenshot: false, allow_targets: false }
3677
-
3678
- Configure RF sense (rf_tune) with:
3679
- PWN::Env[:ai][:agent][:extrospection][:rf] =
3680
- { host: '127.0.0.1', port: 7356, settle_secs: 8, ttl: 300 }
3681
-
3682
- Configure new limbs:
3683
- PWN::Env[:ai][:agent][:extrospection][:osint] = { ttl: 86400, api_keys: { shodan: '...', hunter: '...', abuseipdb: '...', virustotal: '...', greynoise: '...', haveibeenpwned: '...', securitytrails: '...', steam: '...' }, social: { max_threads: 16, timeout: 6, sites_file: 'etc/osint/social_sites.json', mastodon_instance: 'mastodon.social' }, bridges: { timeout: 120, amass_passive: true } }
3684
- PWN::Env[:ai][:agent][:extrospection][:serial] = { block_dev: '/dev/ttyUSB0', baud: 115200, settle_secs: 1.5 }
3685
- PWN::Env[:ai][:agent][:extrospection][:telecomm] = { host: '127.0.0.1', port: 8000 }
3686
- PWN::Env[:ai][:agent][:extrospection][:packet] = { iface: 'eth0' }
3687
- PWN::Env[:ai][:agent][:extrospection][:vision] = { lang: 'eng' }
3688
- PWN::Env[:ai][:agent][:extrospection][:voice] = { ttl: 3600 }
3689
-
3690
- #{self}.authors
3691
- USAGE
3633
+ puts "USAGE:
3634
+ # Run load and return its result
3635
+ #{self}.load
3636
+
3637
+ # Run save and return its result
3638
+ #{self}.save(
3639
+ store: 'required - Hash returned by .load / mutated in place'
3640
+ )
3641
+
3642
+ # Run snapshot and return its result
3643
+ #{self}.snapshot(
3644
+ persist: 'optional - Boolean, write snapshot to disk & rotate previous (default true)',
3645
+ sections: 'optional - Array subset of [:host, :net, :toolchain, :repo, :env, :rf, :web, :osint, :serial, :telecomm, :packet, :vision, :voice] (default host/net/toolchain/repo/env/rf)'
3646
+ )
3647
+
3648
+ # Run observe and return its result
3649
+ #{self}.observe(
3650
+ source: 'required - where the observation came from (nmap, shodan, burp, cve, human, ...)',
3651
+ data: 'required - the observation payload (String or Hash)',
3652
+ category: 'optional - :recon, :vuln, :intel, :target, :network, :env, :rf, :web, :osint, :serial, :telecomm, :packet, :vision, :voice, :misc (default :misc)',
3653
+ target: 'optional - host/ip/url/asset the observation is about',
3654
+ tags: 'optional - Array of String labels',
3655
+ ttl: 'optional - seconds until this observation is considered stale (default nil = forever)'
3656
+ )
3657
+
3658
+ # Run observations and return its result
3659
+ #{self}.observations(
3660
+ limit: 'optional - max entries newest-first (default 50)',
3661
+ source: 'optional - filter by source substring',
3662
+ category: 'optional - filter by category',
3663
+ target: 'optional - filter by target substring',
3664
+ tag: 'optional - filter by tag substring',
3665
+ fresh_only: 'optional - drop entries whose ttl has expired (default false)'
3666
+ )
3667
+
3668
+ # Run drift and return its result
3669
+ #{self}.drift(
3670
+ live: 'optional - probe host NOW and diff vs stored snapshot (default true). When false, diff stored :snapshot vs stored :previous.'
3671
+ )
3672
+
3673
+ # Run intel and return its result
3674
+ #{self}.intel(
3675
+ query: 'required - keyword / product / CVE id to search external threat-intel for',
3676
+ feeds: 'optional - Array subset of [:nvd, :circl, :exploitdb] (default all)',
3677
+ limit: 'optional - max results per feed (default 5)',
3678
+ record: 'optional - also persist each hit as an observation (default false)'
3679
+ )
3680
+
3681
+ # Run verify and return its result
3682
+ #{self}.verify(
3683
+ claim: 'required - factual claim to fact-check against the live web',
3684
+ kind: 'optional - :cve | :version | :doc | :generic (default auto-detect)',
3685
+ url: 'optional - explicit URL the claim cites (forces kind: :doc)',
3686
+ commit: 'optional - write Mistakes/Memory/observe on refute/confirm (default true)',
3687
+ proxy: 'optional - upstream proxy for TransparentBrowser (e.g. tor) (defaults to web_config[:proxy])',
3688
+ in: 'optional - headless mode against a canonical source for the claim class',
3689
+ confidence: 'optional - confidence value consumed by #verify',
3690
+ evidence: 'required - [{url:, title:, excerpt:, dom_sha:, screenshot:}]',
3691
+ action_taken: 'required - :mistakes_record | :extro_observe | :learning_note | nil }'
3692
+ )
3693
+
3694
+ # Run watch and return its result
3695
+ #{self}.watch(
3696
+ url: 'required - URL to render and fingerprint',
3697
+ selector: 'optional - CSS selector whose innerText to hash (default full body)',
3698
+ ttl: 'optional - seconds until stale (default 7 days)',
3699
+ proxy: 'optional - upstream proxy for TransparentBrowser (defaults to web_config[:proxy])',
3700
+ tags: 'optional - Array tags value consumed by #watch'
3701
+ )
3702
+
3703
+ # Run rf tune and return its result
3704
+ #{self}.rf_tune(
3705
+ freq: 'required - frequency: 101.1, 101.1 FM, 101.100.000, 101_100_000, ...',
3706
+ host: 'optional - GQRX remote-control host (default 127.0.0.1)',
3707
+ port: 'optional - GQRX remote-control port (default 7356)',
3708
+ settle_secs: 'optional - seconds to sample RDS after tune (default 8)',
3709
+ rds: 'optional - force RDS on/off (default: auto when FM broadcast / band-plan decoder=:rds)',
3710
+ demodulator_mode: 'optional - e.g. :WFM_ST, :WFM, :FM, :AM (default from band-plan / FM range)',
3711
+ bandwidth: 'optional - passband Hz string, e.g. 200.000 (default from band-plan)',
3712
+ record: 'optional - also observe(category: :rf) so it hits EXTROSPECTION (default true)',
3713
+ ttl: 'optional - observation TTL seconds (default 300 - radio content is ephemeral)'
3714
+ )
3715
+
3716
+ # OSINT sense organ
3717
+ #{self}.osint(
3718
+ query: 'required - phone, IP, domain, email, person name, FCC ID, patent #, username, VIN, MAC, callsign, ...',
3719
+ kind: '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)',
3720
+ feeds: 'optional - Array subset of DEFAULT_OSINT_FEEDS (default: auto-selected from kind)',
3721
+ limit: 'optional - max hits per feed (default 5)',
3722
+ record: 'optional - also observe(category: :osint) (default true)',
3723
+ ttl: 'optional - observation TTL seconds (default 86400)',
3724
+ api_keys: 'optional - Hash of {shodan:, hunter:, abuseipdb:, virustotal:, greynoise:, haveibeenpwned:, securitytrails:} overriding PWN::Env / ENV'
3725
+ )
3726
+
3727
+ # Serial sense organ
3728
+ #{self}.serial_sense(
3729
+ block_dev: 'optional - device path (default first ttyUSB/ttyACM or config)',
3730
+ baud: 'optional - baud rate (default 9600)',
3731
+ payload: 'optional - String or byte Array to write (e.g. ATI\\\\r or [0x41,0x54])',
3732
+ settle_secs: 'optional - seconds to read after write (default 1.5)',
3733
+ data_bits: 'optional - optional (default 8)',
3734
+ stop_bits: 'optional - optional (default 1)',
3735
+ parity: 'optional - optional :none|:even|:odd (default :none)',
3736
+ record: 'optional - observe(category: :serial) (default true)',
3737
+ ttl: 'optional - observation TTL (default 600)'
3738
+ )
3739
+
3740
+ # Telecomm sense organ (SIP / VoIP / PSTN via BareSIP)
3741
+ #{self}.telecomm(
3742
+ action: 'optional - :status|:dial|:hangup|:inventory (default :inventory)',
3743
+ target: 'optional - SIP URI / phone number for :dial (e.g. sip:alice@example.com or +13125551212)',
3744
+ host: 'optional - BareSIP HTTP control host (default 127.0.0.1)',
3745
+ port: 'optional - BareSIP HTTP control port (default 8000)',
3746
+ record: 'optional - observe(category: :telecomm) (default true)',
3747
+ ttl: 'optional - observation TTL (default 600)'
3748
+ )
3749
+
3750
+ # Packet sense organ
3751
+ #{self}.packet_sense(
3752
+ action: 'optional - :inventory|:capture|:summarize_pcap (default :inventory)',
3753
+ iface: 'optional - capture interface (default first non-lo or any)',
3754
+ filter: 'optional - BPF filter (e.g. tcp port 443)',
3755
+ count: 'optional - packets to capture (default 20, max 200)',
3756
+ timeout: 'optional - capture seconds (default 5, max 60)',
3757
+ path: 'optional - pcap path for :summarize_pcap',
3758
+ record: 'optional - observe(category: :packet) (default true)',
3759
+ ttl: 'optional - observation TTL (default 600)'
3760
+ )
3761
+
3762
+ # Vision / OCR sense organ
3763
+ #{self}.vision(
3764
+ file: 'required - path to image / screenshot / PDF-page render',
3765
+ action: 'optional - :ocr|:barcode|:inventory (default :ocr when file given, else :inventory)',
3766
+ lang: 'optional - tesseract language (default eng)',
3767
+ record: 'optional - observe(category: :vision) (default true)',
3768
+ ttl: 'optional - observation TTL (default 86400)'
3769
+ )
3770
+
3771
+ # Voice sense organ (TTS / STT / inventory)
3772
+ #{self}.voice_sense(
3773
+ action: 'optional - :inventory|:tts|:stt (default :inventory)',
3774
+ text: 'optional - text to speak for :tts (or text_path:)',
3775
+ text_path: 'optional - path to text file for :tts',
3776
+ audio: 'optional - path to audio file for :stt',
3777
+ out: 'optional - output audio path for :tts (wav)',
3778
+ engine: 'optional - :espeak|:festival|:spd_say|:whisper (auto)',
3779
+ model: 'optional - whisper model (default tiny)',
3780
+ record: 'optional - observe(category: :voice) (default true)',
3781
+ ttl: 'optional - observation TTL (default 3600)'
3782
+ )
3783
+
3784
+ # Run revalidate memory and return its result
3785
+ #{self}.revalidate_memory(
3786
+ limit: 'optional - max :fact entries to check (default 25)',
3787
+ proxy: 'optional - upstream proxy for TransparentBrowser (defaults to web_config[:proxy])',
3788
+ ruby: 'optional - PWN::AI::Agent::Extrospection.revalidate_memory'
3789
+ )
3790
+
3791
+ # Run correlate and return its result
3792
+ #{self}.correlate(
3793
+ limit: 'optional - max findings returned (default 10)'
3794
+ )
3795
+
3796
+ # Run to context and return its result
3797
+ #{self}.to_context(
3798
+ drift_limit: 'optional - max drift lines (default 4)',
3799
+ obs_limit: 'optional - max observation lines (default 4)'
3800
+ )
3801
+
3802
+ # Run stats and return its result
3803
+ #{self}.stats
3804
+
3805
+ # Called by Learning.auto_introspect when
3806
+ #{self}.auto_extrospect(
3807
+ session_id: 'optional - id of the just-completed session (for tagging)'
3808
+ )
3809
+
3810
+ # Run reset and return its result
3811
+ #{self}.reset
3812
+
3813
+ # Print the AUTHOR(S) string for this module.
3814
+ #{self}.authors
3815
+ "
3816
+ constants.sort
3692
3817
  end
3693
3818
  end
3694
3819
  end
@@ -41,13 +41,16 @@ module PWN
41
41
 
42
42
  public_class_method def self.help
43
43
  puts "USAGE:
44
- ai_analysis = PWN::AI::Agent::GQRX.analyze(
44
+ # Run analyze and return its result
45
+ #{self}.analyze(
45
46
  request: '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.',
46
47
  location: '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.'
47
48
  )
48
49
 
50
+ # Print the AUTHOR(S) string for this module.
49
51
  #{self}.authors
50
52
  "
53
+ constants.sort
51
54
  end
52
55
  end
53
56
  end
@@ -51,13 +51,16 @@ module PWN
51
51
 
52
52
  public_class_method def self.help
53
53
  puts "USAGE:
54
- ai_analysis = PWN::AI::Agent::HackerOne.analyze(
55
- request: 'required - dataset to analyze, such as bounty program details, scope details, or hacktivity details'
54
+ # Run analyze and return its result
55
+ #{self}.analyze(
56
+ request: 'required - dataset to analyze, such as bounty program details, scope details, or hacktivity details',
56
57
  type: 'required - type of analysis to perform, such as :bounty_programs, :scope_details, or :hacktivity'
57
58
  )
58
59
 
60
+ # Print the AUTHOR(S) string for this module.
59
61
  #{self}.authors
60
62
  "
63
+ constants.sort
61
64
  end
62
65
  end
63
66
  end