pwn 0.5.615 → 0.5.618

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 (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +109 -85
  3. data/README.md.bak +200 -0
  4. data/bin/pwn +47 -2
  5. data/bin/pwn_gqrx_scanner +75 -18
  6. data/documentation/AI-Integration.md +42 -26
  7. data/documentation/AWS.md +57 -0
  8. data/documentation/Agent-Tool-Registry.md +56 -0
  9. data/documentation/Banner.md +17 -0
  10. data/documentation/Blockchain.md +18 -0
  11. data/documentation/Bounty.md +21 -0
  12. data/documentation/BurpSuite.md +41 -16
  13. data/documentation/CLI-Drivers.md +58 -0
  14. data/documentation/Configuration.md +66 -0
  15. data/documentation/Contributing.md +33 -19
  16. data/documentation/Cron.md +47 -0
  17. data/documentation/Diagrams.md +123 -40
  18. data/documentation/Drivers.md +43 -16
  19. data/documentation/Extrospection.md +54 -0
  20. data/documentation/FFI.md +14 -0
  21. data/documentation/Fuzzing.md +36 -0
  22. data/documentation/General-PWN-Usage.md +50 -30
  23. data/documentation/Hardware.md +40 -0
  24. data/documentation/Home.md +78 -51
  25. data/documentation/How-PWN-Works.md +59 -57
  26. data/documentation/Installation.md +53 -28
  27. data/documentation/Metasploit.md +34 -0
  28. data/documentation/NmapIt.md +18 -12
  29. data/documentation/PWN.png +0 -0
  30. data/documentation/PWN_Contributors_and_Users.png +0 -0
  31. data/documentation/Persistence.md +38 -0
  32. data/documentation/Plugins.md +97 -47
  33. data/documentation/Reporting.md +25 -18
  34. data/documentation/SAST.md +39 -22
  35. data/documentation/SDR.md +40 -0
  36. data/documentation/Sessions.md +39 -0
  37. data/documentation/Skills-Memory-Learning.md +49 -29
  38. data/documentation/Swarm.md +71 -0
  39. data/documentation/Transparent-Browser.md +26 -22
  40. data/documentation/Troubleshooting.md +44 -25
  41. data/documentation/WWW.md +32 -0
  42. data/documentation/What-is-PWN.md +51 -32
  43. data/documentation/Why-PWN.md +41 -11
  44. data/documentation/diagrams/agent-tool-registry.svg +284 -0
  45. data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
  46. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  47. data/documentation/diagrams/build.sh +20 -0
  48. data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
  49. data/documentation/diagrams/code-scanning-sast.svg +139 -79
  50. data/documentation/diagrams/cron-scheduling.svg +148 -0
  51. data/documentation/diagrams/dot/_THEME.md +27 -0
  52. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  53. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
  54. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  55. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
  56. data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
  57. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  58. data/documentation/diagrams/dot/driver-framework.dot +36 -14
  59. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  60. data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
  61. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  62. data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
  63. data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
  64. data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
  65. data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
  66. data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
  67. data/documentation/diagrams/dot/persistence-filesystem.dot +29 -0
  68. data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
  69. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
  70. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
  71. data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
  72. data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
  73. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  74. data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
  75. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  76. data/documentation/diagrams/dot/web-application-testing.dot +45 -23
  77. data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
  78. data/documentation/diagrams/driver-framework.svg +87 -66
  79. data/documentation/diagrams/extrospection-world-awareness.svg +185 -0
  80. data/documentation/diagrams/fuzzing-workflow.svg +128 -115
  81. data/documentation/diagrams/hardware-hacking.svg +163 -0
  82. data/documentation/diagrams/history-to-drivers.svg +84 -82
  83. data/documentation/diagrams/memory-skills-detailed.svg +167 -119
  84. data/documentation/diagrams/network-infra-testing.svg +146 -84
  85. data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
  86. data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
  87. data/documentation/diagrams/persistence-filesystem.svg +174 -0
  88. data/documentation/diagrams/plugin-ecosystem.svg +225 -121
  89. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
  90. data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
  91. data/documentation/diagrams/reporting-pipeline.svg +128 -68
  92. data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
  93. data/documentation/diagrams/sdr-radio-flow.svg +146 -0
  94. data/documentation/diagrams/sessions-cron-automation.svg +112 -68
  95. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  96. data/documentation/diagrams/web-application-testing.svg +136 -100
  97. data/documentation/diagrams/zero-day-research-flow.svg +116 -112
  98. data/documentation/fax-spectrogram.png +0 -0
  99. data/documentation/fax-waveform.png +0 -0
  100. data/documentation/pwn-REPL.md +40 -24
  101. data/documentation/pwn-ai-Agent.md +59 -30
  102. data/documentation/pwn_android_war_dialer_session.png +0 -0
  103. data/documentation/pwn_install.png +0 -0
  104. data/documentation/pwn_wallpaper.jpg +0 -0
  105. data/documentation/ringing-spectrogram.png +0 -0
  106. data/documentation/ringing-waveform.png +0 -0
  107. data/git_commit.sh +1 -1
  108. data/lib/pwn/ai/agent/assembly.rb +1 -1
  109. data/lib/pwn/ai/agent/btc.rb +1 -1
  110. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  111. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  112. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  113. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  114. data/lib/pwn/ai/agent/introspection.rb +91 -0
  115. data/lib/pwn/ai/agent/learning.rb +6 -4
  116. data/lib/pwn/ai/agent/loop.rb +15 -0
  117. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  118. data/lib/pwn/ai/agent/sast.rb +1 -1
  119. data/lib/pwn/ai/agent/swarm.rb +437 -0
  120. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  121. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  122. data/lib/pwn/ai/agent/tools/learning.rb +108 -0
  123. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  124. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  125. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  126. data/lib/pwn/ai/agent/tools/skills.rb +30 -0
  127. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  128. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  129. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  130. data/lib/pwn/ai/agent.rb +3 -0
  131. data/lib/pwn/ai/anthropic.rb +19 -4
  132. data/lib/pwn/ai.rb +0 -1
  133. data/lib/pwn/config.rb +10 -23
  134. data/lib/pwn/cron.rb +16 -7
  135. data/lib/pwn/plugins/repl.rb +90 -281
  136. data/lib/pwn/sdr/decoder/base.rb +251 -0
  137. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  138. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  139. data/lib/pwn/sdr/decoder.rb +1 -0
  140. data/lib/pwn/sdr/gqrx.rb +446 -65
  141. data/lib/pwn/version.rb +1 -1
  142. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  143. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  144. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  145. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  146. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  147. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  148. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  149. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  150. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  151. data/third_party/pwn_rdoc.jsonl +199 -37
  152. metadata +65 -3
  153. data/lib/pwn/ai/introspection.rb +0 -76
@@ -0,0 +1,148 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN_Cron Pages: 1 -->
7
+ <svg width="1248pt" height="391pt"
8
+ viewBox="0.00 0.00 1248.00 391.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 348.08)">
10
+ <title>PWN_Cron</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-348.08 1204.45,-348.08 1204.45,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="372.5" y="-282.88" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::Cron — Scheduled Autonomous Jobs</text>
13
+ <text xml:space="preserve" text-anchor="start" x="452" y="-271.43" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">prompt · ruby · script → jobs.yml → crontab → pwn&#45;ai</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_kinds</title>
16
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M775.75,-30.88C775.75,-30.88 930,-30.88 930,-30.88 936,-30.88 942,-36.88 942,-42.88 942,-42.88 942,-245.88 942,-245.88 942,-251.88 936,-257.88 930,-257.88 930,-257.88 775.75,-257.88 775.75,-257.88 769.75,-257.88 763.75,-251.88 763.75,-245.88 763.75,-245.88 763.75,-42.88 763.75,-42.88 763.75,-36.88 769.75,-30.88 775.75,-30.88"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-234.88" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Job Kinds</text>
18
+ </g>
19
+ <!-- Create -->
20
+ <g id="node1" class="node">
21
+ <title>Create</title>
22
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M102.25,-152.13C102.25,-152.13 12,-152.13 12,-152.13 6,-152.13 0,-146.13 0,-140.13 0,-140.13 0,-115.63 0,-115.63 0,-109.63 6,-103.63 12,-103.63 12,-103.63 102.25,-103.63 102.25,-103.63 108.25,-103.63 114.25,-109.63 114.25,-115.63 114.25,-115.63 114.25,-140.13 114.25,-140.13 114.25,-146.13 108.25,-152.13 102.25,-152.13"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-137.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">cron_create</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-124.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">name · schedule</text>
25
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-110.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">prompt | ruby | script</text>
26
+ </g>
27
+ <!-- Jobs -->
28
+ <g id="node2" class="node">
29
+ <title>Jobs</title>
30
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M355.88,-184.6C355.88,-186.41 330.1,-187.88 298.38,-187.88 266.65,-187.88 240.88,-186.41 240.88,-184.6 240.88,-184.6 240.88,-155.15 240.88,-155.15 240.88,-153.34 266.65,-151.88 298.38,-151.88 330.1,-151.88 355.88,-153.34 355.88,-155.15 355.88,-155.15 355.88,-184.6 355.88,-184.6"/>
31
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M355.88,-184.6C355.88,-182.8 330.1,-181.33 298.38,-181.33 266.65,-181.33 240.88,-182.8 240.88,-184.6"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-166.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/cron/jobs.yml</text>
33
+ </g>
34
+ <!-- Create&#45;&gt;Jobs -->
35
+ <g id="edge1" class="edge">
36
+ <title>Create&#45;&gt;Jobs</title>
37
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M114.82,-137.83C149.58,-143.93 194.24,-151.77 230.69,-158.17"/>
38
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="229.95,-160.88 238.32,-159.51 230.92,-155.37 229.95,-160.88"/>
39
+ <text xml:space="preserve" text-anchor="middle" x="177" y="-153.34" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">write</text>
40
+ </g>
41
+ <!-- Crontab -->
42
+ <g id="node3" class="node">
43
+ <title>Crontab</title>
44
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M345,-109.88C345,-109.88 251.75,-109.88 251.75,-109.88 245.75,-109.88 239.75,-103.88 239.75,-97.88 239.75,-97.88 239.75,-85.88 239.75,-85.88 239.75,-79.88 245.75,-73.88 251.75,-73.88 251.75,-73.88 345,-73.88 345,-73.88 351,-73.88 357,-79.88 357,-85.88 357,-85.88 357,-97.88 357,-97.88 357,-103.88 351,-109.88 345,-109.88"/>
45
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-94.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">system crontab</text>
46
+ <text xml:space="preserve" text-anchor="middle" x="298.38" y="-81.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(install_crontab: true)</text>
47
+ </g>
48
+ <!-- Create&#45;&gt;Crontab -->
49
+ <g id="edge2" class="edge">
50
+ <title>Create&#45;&gt;Crontab</title>
51
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M114.83,-112.81C129.83,-109.26 146.08,-105.81 161.25,-103.38 183.28,-99.85 207.51,-97.36 229.34,-95.62"/>
52
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="229.46,-98.42 237.22,-95.03 229.03,-92.84 229.46,-98.42"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="177" y="-105.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">append</text>
54
+ </g>
55
+ <!-- Runner -->
56
+ <g id="node4" class="node">
57
+ <title>Runner</title>
58
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M611,-146.88C611,-146.88 528.25,-146.88 528.25,-146.88 522.25,-146.88 516.25,-140.88 516.25,-134.88 516.25,-134.88 516.25,-122.88 516.25,-122.88 516.25,-116.88 522.25,-110.88 528.25,-110.88 528.25,-110.88 611,-110.88 611,-110.88 617,-110.88 623,-116.88 623,-122.88 623,-122.88 623,-134.88 623,-134.88 623,-140.88 617,-146.88 611,-146.88"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="569.62" y="-125.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Cron.run(id)</text>
60
+ </g>
61
+ <!-- Jobs&#45;&gt;Runner -->
62
+ <g id="edge4" class="edge">
63
+ <title>Jobs&#45;&gt;Runner</title>
64
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M356.48,-161.18C400.34,-154.5 460.86,-145.29 506.04,-138.41"/>
65
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="506.29,-141.2 513.78,-137.23 505.45,-135.67 506.29,-141.2"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="436.62" y="-155" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">load job</text>
67
+ </g>
68
+ <!-- Crontab&#45;&gt;Runner -->
69
+ <g id="edge3" class="edge">
70
+ <title>Crontab&#45;&gt;Runner</title>
71
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M357.47,-99.86C400.88,-105.83 460.2,-113.98 504.92,-120.12"/>
72
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="504.36,-122.87 512.66,-121.19 505.12,-117.32 504.36,-122.87"/>
73
+ <text xml:space="preserve" text-anchor="middle" x="436.62" y="-116.73" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fire on schedule</text>
74
+ </g>
75
+ <!-- Prompt -->
76
+ <g id="node5" class="node">
77
+ <title>Prompt</title>
78
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M894.62,-218.88C894.62,-218.88 811.12,-218.88 811.12,-218.88 805.12,-218.88 799.12,-212.88 799.12,-206.88 799.12,-206.88 799.12,-194.88 799.12,-194.88 799.12,-188.88 805.12,-182.88 811.12,-182.88 811.12,-182.88 894.62,-182.88 894.62,-182.88 900.62,-182.88 906.62,-188.88 906.62,-194.88 906.62,-194.88 906.62,-206.88 906.62,-206.88 906.62,-212.88 900.62,-218.88 894.62,-218.88"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-203.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:prompt</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-190.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ pwn&#45;ai one&#45;shot</text>
81
+ </g>
82
+ <!-- Runner&#45;&gt;Prompt -->
83
+ <g id="edge5" class="edge">
84
+ <title>Runner&#45;&gt;Prompt</title>
85
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.65,-144.21C638.6,-148.43 654.91,-152.93 670,-156.88 709.5,-167.22 754.05,-178.01 789.18,-186.32"/>
86
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="788.48,-189.03 796.91,-188.14 789.76,-183.58 788.48,-189.03"/>
87
+ </g>
88
+ <!-- Ruby -->
89
+ <g id="node6" class="node">
90
+ <title>Ruby</title>
91
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M922,-146.88C922,-146.88 783.75,-146.88 783.75,-146.88 777.75,-146.88 771.75,-140.88 771.75,-134.88 771.75,-134.88 771.75,-122.88 771.75,-122.88 771.75,-116.88 777.75,-110.88 783.75,-110.88 783.75,-110.88 922,-110.88 922,-110.88 928,-110.88 934,-116.88 934,-122.88 934,-122.88 934,-134.88 934,-134.88 934,-140.88 928,-146.88 922,-146.88"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-131.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:ruby</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-118.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ TOPLEVEL_BINDING.eval</text>
94
+ </g>
95
+ <!-- Runner&#45;&gt;Ruby -->
96
+ <g id="edge6" class="edge">
97
+ <title>Runner&#45;&gt;Ruby</title>
98
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.53,-128.88C662.29,-128.88 715.87,-128.88 761.38,-128.88"/>
99
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="761.29,-131.68 769.29,-128.88 761.29,-126.08 761.29,-131.68"/>
100
+ </g>
101
+ <!-- Script -->
102
+ <g id="node7" class="node">
103
+ <title>Script</title>
104
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M896.12,-74.88C896.12,-74.88 809.62,-74.88 809.62,-74.88 803.62,-74.88 797.62,-68.88 797.62,-62.88 797.62,-62.88 797.62,-50.88 797.62,-50.88 797.62,-44.88 803.62,-38.88 809.62,-38.88 809.62,-38.88 896.12,-38.88 896.12,-38.88 902.12,-38.88 908.12,-44.88 908.12,-50.88 908.12,-50.88 908.12,-62.88 908.12,-62.88 908.12,-68.88 902.12,-74.88 896.12,-74.88"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-59.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:script</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="852.88" y="-46.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ exec external file</text>
107
+ </g>
108
+ <!-- Runner&#45;&gt;Script -->
109
+ <g id="edge7" class="edge">
110
+ <title>Runner&#45;&gt;Script</title>
111
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M623.53,-115.33C670.17,-103.39 738.24,-85.97 787.93,-73.25"/>
112
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="788.33,-76.03 795.39,-71.34 786.94,-70.61 788.33,-76.03"/>
113
+ </g>
114
+ <!-- Log -->
115
+ <g id="node8" class="node">
116
+ <title>Log</title>
117
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1161.25,-148.56C1161.25,-150.98 1131.61,-152.94 1095.12,-152.94 1058.64,-152.94 1029,-150.98 1029,-148.56 1029,-148.56 1029,-109.19 1029,-109.19 1029,-106.78 1058.64,-104.81 1095.12,-104.81 1131.61,-104.81 1161.25,-106.78 1161.25,-109.19 1161.25,-109.19 1161.25,-148.56 1161.25,-148.56"/>
118
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1161.25,-148.56C1161.25,-146.15 1131.61,-144.19 1095.12,-144.19 1058.64,-144.19 1029,-146.15 1029,-148.56"/>
119
+ <text xml:space="preserve" text-anchor="middle" x="1095.12" y="-131.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/cron/log/&lt;id&gt;.log</text>
120
+ <text xml:space="preserve" text-anchor="middle" x="1095.12" y="-118.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">last_run · last_status</text>
121
+ </g>
122
+ <!-- Prompt&#45;&gt;Log -->
123
+ <g id="edge8" class="edge">
124
+ <title>Prompt&#45;&gt;Log</title>
125
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M907.19,-184.9C940.2,-175.01 983.08,-162.16 1019.44,-151.26"/>
126
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1019.79,-154.08 1026.65,-149.1 1018.18,-148.71 1019.79,-154.08"/>
127
+ </g>
128
+ <!-- Ruby&#45;&gt;Log -->
129
+ <g id="edge9" class="edge">
130
+ <title>Ruby&#45;&gt;Log</title>
131
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M934.54,-128.88C961.74,-128.88 991.97,-128.88 1018.74,-128.88"/>
132
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1018.47,-131.68 1026.47,-128.88 1018.47,-126.08 1018.47,-131.68"/>
133
+ </g>
134
+ <!-- Script&#45;&gt;Log -->
135
+ <g id="edge10" class="edge">
136
+ <title>Script&#45;&gt;Log</title>
137
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M908.69,-73.3C941.36,-83.1 983.3,-95.66 1019.02,-106.37"/>
138
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1018.09,-109.01 1026.55,-108.63 1019.69,-103.65 1018.09,-109.01"/>
139
+ </g>
140
+ <!-- Log&#45;&gt;Jobs -->
141
+ <g id="edge11" class="edge">
142
+ <title>Log&#45;&gt;Jobs</title>
143
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1069.63,-104.26C1041.6,-78 992.95,-38 942,-21.88 759.1,36 698.93,-34.31 516.25,-92.88 461.31,-110.49 399.34,-132.73 355.76,-148.78"/>
144
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.85,-146.13 348.32,-151.53 356.79,-151.38 354.85,-146.13"/>
145
+ <text xml:space="preserve" text-anchor="middle" x="697.38" y="-35.59" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">update status</text>
146
+ </g>
147
+ </g>
148
+ </svg>
@@ -0,0 +1,27 @@
1
+ # PWN Diagram Visual Theme
2
+
3
+ All `.dot` files in this directory share one visual language so the rendered
4
+ SVGs feel like a single coherent product.
5
+
6
+ | Element | Color | Hex |
7
+ |----------------------|-----------|-----------|
8
+ | Background | slate-900 | `#0f172a` |
9
+ | Cluster border | slate-700 | `#334155` |
10
+ | Cluster fill | slate-800 | `#1e293b` |
11
+ | Actor / Entry (blue) | sky-300 | `#7dd3fc` |
12
+ | AI / Agent (purple) | violet-300| `#c4b5fd` |
13
+ | Capability (green) | emerald-300| `#6ee7b7`|
14
+ | Persistence (amber) | amber-300 | `#fcd34d` |
15
+ | Target / Danger (red)| rose-300 | `#fda4af` |
16
+ | Edge default | slate-400 | `#94a3b8` |
17
+ | Edge highlight | sky-400 | `#38bdf8` |
18
+
19
+ Layout rules (to avoid criss-crossed edges):
20
+ 1. `rankdir=TB` (or `LR` for pipelines), `newrank=true`, `splines=spline`.
21
+ 2. Group every layer with `{rank=same; ...}` — edges go layer→layer only.
22
+ 3. Side/back edges use `constraint=false` + `style=dashed` and are kept to ≤3 per diagram.
23
+ 4. One `subgraph cluster_*` per logical layer with a translucent fill.
24
+ 5. Node order inside a rank matches edge destinations in the next rank
25
+ (Graphviz then draws parallel non-crossing edges).
26
+
27
+ Rebuild everything: `./build.sh` (from `documentation/diagrams/`).
@@ -0,0 +1,59 @@
1
+ digraph "PWN_Agent_Tool_Registry" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Registry — Toolsets exposed to the LLM</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">10 toolsets · 45+ callable tools · lib/pwn/ai/agent/tools/*</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.35, ranksep=1.4,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [color="#94a3b8", penwidth=1.1, arrowsize=0.7];
11
+
12
+ Registry [label="Registry\nJSON-Schema\nfunction defs", fillcolor="#c4b5fd", fontsize=12, penwidth=2];
13
+
14
+ subgraph cluster_ts {
15
+ label="Toolsets"; fontcolor="#a7f3d0"; style=rounded;
16
+ color="#047857"; bgcolor="#022c22"; penwidth=2;
17
+ terminal [label="terminal", fillcolor="#6ee7b7"];
18
+ pwn [label="pwn", fillcolor="#6ee7b7"];
19
+ memory [label="memory", fillcolor="#6ee7b7"];
20
+ skills [label="skills", fillcolor="#6ee7b7"];
21
+ sessions [label="sessions", fillcolor="#6ee7b7"];
22
+ learning [label="learning", fillcolor="#6ee7b7"];
23
+ metrics [label="metrics", fillcolor="#6ee7b7"];
24
+ extro [label="extrospection", fillcolor="#6ee7b7"];
25
+ cron [label="cron", fillcolor="#6ee7b7"];
26
+ swarm [label="swarm", fillcolor="#6ee7b7"];
27
+ }
28
+
29
+ subgraph cluster_tools {
30
+ label="Tools (LLM-callable)"; fontcolor="#fde68a"; style=rounded;
31
+ color="#a16207"; bgcolor="#422006"; penwidth=2;
32
+ node [fillcolor="#fcd34d", fontsize=9];
33
+ t_shell [label="shell"];
34
+ t_eval [label="pwn_eval"];
35
+ t_mem [label="memory_remember\nrecall · forget · clear"];
36
+ t_skill [label="skill_list · view\ncreate · add_reference · delete"];
37
+ t_sess [label="sessions_list · view\ncurrent · delete · stats"];
38
+ t_learn [label="learning_note_outcome\nreflect · distill_skill\nconsolidate · outcomes · reset"];
39
+ t_metric [label="metrics_summary\nmetrics_reset"];
40
+ t_extro [label="extro_snapshot · drift\nobserve · intel · correlate\nobservations · stats · reset"];
41
+ t_cron [label="cron_list · create · run\nenable · disable · remove"];
42
+ t_swarm [label="agent_list · spawn · ask\ndebate · broadcast\nswarm_bus · swarm_list"];
43
+ }
44
+
45
+ Registry -> terminal; Registry -> pwn; Registry -> memory;
46
+ Registry -> skills; Registry -> sessions; Registry -> learning;
47
+ Registry -> metrics; Registry -> extro; Registry -> cron; Registry -> swarm;
48
+
49
+ terminal -> t_shell [color="#f59e0b"];
50
+ pwn -> t_eval [color="#f59e0b"];
51
+ memory -> t_mem [color="#f59e0b"];
52
+ skills -> t_skill [color="#f59e0b"];
53
+ sessions -> t_sess [color="#f59e0b"];
54
+ learning -> t_learn [color="#f59e0b"];
55
+ metrics -> t_metric [color="#f59e0b"];
56
+ extro -> t_extro [color="#f59e0b"];
57
+ cron -> t_cron [color="#f59e0b"];
58
+ swarm -> t_swarm [color="#f59e0b"];
59
+ }
@@ -1,23 +1,50 @@
1
- digraph "PWN AI Integration & Tool Calling" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_AI_Integration" {
2
+ graph [
3
+ label=<<B>PWN::AI Multi-Provider LLM Integration</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">one Agent Loop · five interchangeable engines</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- User [label="User Prompt"];
6
- Agent [label="PWN::AI::Agent", shape=ellipse, fillcolor=lightblue];
7
- LLM [label="LLM (Grok OAuth,\nOpenAI, etc.)", shape=box];
8
- Tools [label="Tool Registry\n(pwn_eval, shell,\nmemory_*, skill_*, \nlearning_*)", shape=box];
9
- PWNNS [label="PWN Namespace\n(Plugins, SAST,\nReports, etc.)", shape=box];
10
- External [label="External Tools\n(curl, nmap, msf, burp)", shape=box];
13
+ Loop [label="PWN::AI::Agent::Loop\ntool-calling harness", fillcolor="#7dd3fc", penwidth=2];
11
14
 
12
- User -> Agent;
13
- Agent -> LLM [label="build prompt +\ntools schema"];
14
- LLM -> Agent [label="tool_calls[]"];
15
- Agent -> Tools [label="dispatch"];
16
- Tools -> PWNNS [label="PWN::Plugins::XXX.method"];
17
- Tools -> External [label="shell commands"];
18
- PWNNS -> Tools [label="return value\nor exception"];
19
- External -> Tools [label="stdout/stderr"];
20
- Tools -> Agent [label="results"];
21
- Agent -> LLM [label="continue conversation"];
22
- Agent -> User [label="final answer + artifacts"];
15
+ subgraph cluster_c {
16
+ label="PWN::AI::* Clients"; fontcolor="#ddd6fe"; style=rounded;
17
+ color="#6d28d9"; bgcolor="#2e1065";
18
+ OpenAI [label="OpenAI", fillcolor="#c4b5fd"];
19
+ Anthropic [label="Anthropic", fillcolor="#c4b5fd"];
20
+ Grok [label="Grok\nOAuth device flow", fillcolor="#c4b5fd"];
21
+ Gemini [label="Gemini", fillcolor="#c4b5fd"];
22
+ Ollama [label="Ollama\n(local)", fillcolor="#c4b5fd"];
23
+ }
24
+ {rank=same; OpenAI; Anthropic; Grok; Gemini; Ollama}
25
+
26
+ subgraph cluster_api {
27
+ label="Provider APIs"; fontcolor="#fecaca"; style="rounded,dashed";
28
+ color="#b91c1c"; bgcolor="#450a0a";
29
+ A1 [label="api.openai.com", fillcolor="#fda4af"];
30
+ A2 [label="api.anthropic.com", fillcolor="#fda4af"];
31
+ A3 [label="api.x.ai\nauth.x.ai", fillcolor="#fda4af"];
32
+ A4 [label="generativelanguage\n.googleapis.com", fillcolor="#fda4af"];
33
+ A5 [label="localhost:11434", fillcolor="#fda4af"];
34
+ }
35
+ {rank=same; A1; A2; A3; A4; A5}
36
+
37
+ Cfg [label="PWN::Config\n~/.pwn/config.yml\nengine · key · oauth", shape=cylinder, fillcolor="#fcd34d"];
38
+
39
+ Loop -> OpenAI [color="#a78bfa"];
40
+ Loop -> Anthropic [color="#a78bfa"];
41
+ Loop -> Grok [color="#a78bfa"];
42
+ Loop -> Gemini [color="#a78bfa"];
43
+ Loop -> Ollama [color="#a78bfa"];
44
+ OpenAI -> A1 [color="#fb7185"];
45
+ Anthropic -> A2 [color="#fb7185"];
46
+ Grok -> A3 [color="#fb7185"];
47
+ Gemini -> A4 [color="#fb7185"];
48
+ Ollama -> A5 [color="#fb7185"];
49
+ Cfg -> Loop [label="active engine", style=dashed, color="#fbbf24", constraint=false];
23
50
  }
@@ -0,0 +1,48 @@
1
+ digraph "PWN_AWS" {
2
+ graph [
3
+ label=<<B>PWN::AWS — Cloud Security (90 service wrappers)</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">enumerate → misconfig → escalate → persist</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.4, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ Creds [label="🔑 AWS Creds\nSTS · env · profile", fillcolor="#7dd3fc"];
14
+
15
+ subgraph cluster_enum {
16
+ label="Enumerate"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ IAM [label="IAM · STS\nOrganizations", fillcolor="#6ee7b7"];
19
+ EC2 [label="EC2 · ECS · ECR\nLambda · Lightsail", fillcolor="#6ee7b7"];
20
+ Net [label="Route53 · ELB\nAPI Gateway · CloudFront", fillcolor="#6ee7b7"];
21
+ }
22
+ subgraph cluster_mis {
23
+ label="Misconfig"; fontcolor="#fde68a"; style=rounded;
24
+ color="#a16207"; bgcolor="#422006";
25
+ S3 [label="S3 · Glacier\npublic buckets", fillcolor="#fcd34d"];
26
+ KMS [label="KMS · CloudHSM\nSecrets · SSM", fillcolor="#fcd34d"];
27
+ Log [label="CloudTrail\nCloudWatch · Config", fillcolor="#fcd34d"];
28
+ }
29
+ subgraph cluster_esc {
30
+ label="Escalate / Persist"; fontcolor="#fecaca"; style=rounded;
31
+ color="#b91c1c"; bgcolor="#450a0a";
32
+ Priv [label="iam:PassRole\nlambda invoke", fillcolor="#fda4af"];
33
+ Back [label="new access key\nEC2 userdata", fillcolor="#fda4af"];
34
+ }
35
+ Rep [label="pwn_aws_describe_resources\nReports", fillcolor="#c4b5fd"];
36
+
37
+ Creds -> IAM [color="#38bdf8"];
38
+ Creds -> EC2 [color="#38bdf8"];
39
+ Creds -> Net [color="#38bdf8"];
40
+ IAM -> S3 [color="#f59e0b"];
41
+ EC2 -> KMS [color="#f59e0b"];
42
+ Net -> Log [color="#f59e0b"];
43
+ S3 -> Priv [color="#fb7185"];
44
+ KMS -> Priv [color="#fb7185"];
45
+ Log -> Back [color="#fb7185"];
46
+ Priv -> Rep [color="#a78bfa"];
47
+ Back -> Rep [color="#a78bfa"];
48
+ }
@@ -1,15 +1,26 @@
1
- digraph "PWN BurpSuite vs Zaproxy Preference" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_BurpVsZap" {
2
+ graph [
3
+ label=<<B>Web Proxy Selection BurpSuite ⭐ preferred over ZAP</B>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=TB, splines=spline, nodesep=0.7, ranksep=0.9,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Decision [label="Web Proxy Choice\nin PWN", shape=diamond, fillcolor=lightyellow];
6
- Burp [label="PWN::Plugins::BurpSuite\n(preferred for most cases)\n- Comprehensive scanning\n- Rich ecosystem\n- Active scan + extensions", shape=box, fillcolor=lightgreen];
7
- Zap [label="PWN::Plugins::Zaproxy\n(fallback)\n- Open source\n- REST API scans", shape=box, fillcolor=lightblue];
13
+ Need [label="Need web proxy /\nactive scanner?", shape=diamond,
14
+ style=filled, fillcolor="#7dd3fc", height=1.1];
15
+ Burp [label="PWN::Plugins::BurpSuite\nheadless · REST · richer scanner\nBApp ecosystem",
16
+ fillcolor="#6ee7b7", penwidth=2];
17
+ Zap [label="PWN::Plugins::Zaproxy\nOSS fallback",
18
+ fillcolor="#fcd34d"];
19
+ Both [label="Same downstream:\nTransparentBrowser proxy · Reports · DefectDojo",
20
+ fillcolor="#c4b5fd"];
8
21
 
9
- UserTask [label="Web App Test Task"];
10
- UserTask -> Decision;
11
- Decision -> Burp [label="default / most features"];
12
- Decision -> Zap [label="if Burp unavailable\nor specific REST need"];
13
- Burp -> "Scan / Proxy / Exploit";
14
- Zap -> "Scan / Proxy / Exploit";
22
+ Need -> Burp [label="Burp Pro available", color="#34d399", penwidth=2];
23
+ Need -> Zap [label="fallback", color="#f59e0b"];
24
+ Burp -> Both [color="#a78bfa"];
25
+ Zap -> Both [color="#a78bfa"];
15
26
  }
@@ -1,21 +1,49 @@
1
- digraph "PWN Code Scanning & SAST" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_SAST" {
2
+ graph [
3
+ label=<<B>PWN::SAST Static Application Security Testing</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">48 rules · multi-language · bin/pwn_sast · Reports::SAST</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.4, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Source [label="Source Code\n(Git, Local Dir)", shape=box];
6
- SAST [label="PWN::SAST\n(analyze, testgen)", shape=ellipse, fillcolor=lightgreen];
7
- Static [label="Static Analysis\n(RuboCop, Brakeman,\nSemgrep, custom rules)"];
8
- TestGen [label="Test Case Gen\n(unit/integration fuzz)"];
9
- Findings [label="Vulns / Findings\n(CWE mapped)", shape=box];
10
- Reports [label="PWN::Reports\n(generate PDF/MD/JSON)", shape=ellipse, fillcolor=lightgreen];
11
- REPL [label="REPL / Agent\n(inspect findings)"];
13
+ Src [label="📁 Source Tree\ngit clone / repo", fillcolor="#7dd3fc"];
12
14
 
13
- Source -> SAST;
14
- SAST -> Static;
15
- SAST -> TestGen;
16
- Static -> Findings;
17
- TestGen -> Findings;
18
- Findings -> Reports;
19
- Reports -> REPL;
20
- REPL -> Source [label="patch & re-scan"];
15
+ subgraph cluster_engine {
16
+ label="SAST Engine"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ Factory [label="SAST::Factory\nrule loader", fillcolor="#6ee7b7"];
19
+ TCE [label="TestCaseEngine\ngenerate probes", fillcolor="#6ee7b7"];
20
+ }
21
+ subgraph cluster_rules {
22
+ label="Rule Families (48)"; fontcolor="#fde68a"; style=rounded;
23
+ color="#a16207"; bgcolor="#422006";
24
+ Cmd [label="cmd_execution_*\njava · py · ruby · go · scala", fillcolor="#fcd34d"];
25
+ Web [label="csrf · redirect · redos\ninner/outer_html · location_hash", fillcolor="#fcd34d"];
26
+ Cryp [label="md5 · ssl · keystore\npadding_oracle · private_key", fillcolor="#fcd34d"];
27
+ Data [label="sql · eval · deserial_java\nlog4j · php_type_juggling", fillcolor="#fcd34d"];
28
+ Mem [label="banned_c_calls\nuse_after_free", fillcolor="#fcd34d"];
29
+ }
30
+ subgraph cluster_out {
31
+ label="Output"; fontcolor="#ddd6fe"; style=rounded;
32
+ color="#6d28d9"; bgcolor="#2e1065";
33
+ Report [label="Reports::SAST\nHTML + JSON", fillcolor="#c4b5fd"];
34
+ DD [label="DefectDojo\nimport / reimport", fillcolor="#c4b5fd"];
35
+ }
36
+
37
+ Src -> Factory [color="#38bdf8"];
38
+ Src -> TCE [color="#38bdf8"];
39
+ Factory -> Cmd [color="#f59e0b"];
40
+ Factory -> Web [color="#f59e0b"];
41
+ Factory -> Cryp [color="#f59e0b"];
42
+ TCE -> Data [color="#f59e0b"];
43
+ TCE -> Mem [color="#f59e0b"];
44
+ Cmd -> Report [color="#a78bfa"];
45
+ Web -> Report [color="#a78bfa"];
46
+ Cryp -> Report [color="#a78bfa"];
47
+ Data -> DD [color="#a78bfa"];
48
+ Mem -> DD [color="#a78bfa"];
21
49
  }
@@ -0,0 +1,40 @@
1
+ digraph "PWN_Cron" {
2
+ graph [
3
+ label=<<B>PWN::Cron — Scheduled Autonomous Jobs</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">prompt · ruby · script → jobs.yml → crontab → pwn-ai</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.5, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ Create [label="cron_create\nname · schedule\nprompt | ruby | script", fillcolor="#7dd3fc"];
14
+ Jobs [label="~/.pwn/cron/jobs.yml", shape=cylinder, fillcolor="#fcd34d"];
15
+ Crontab[label="system crontab\n(install_crontab: true)", fillcolor="#fda4af"];
16
+ Runner [label="PWN::Cron.run(id)", fillcolor="#c4b5fd"];
17
+
18
+ subgraph cluster_kinds {
19
+ label="Job Kinds"; fontcolor="#a7f3d0"; style=rounded;
20
+ color="#047857"; bgcolor="#022c22"; penwidth=2;
21
+ Prompt [label=":prompt\n→ pwn-ai one-shot", fillcolor="#6ee7b7"];
22
+ Ruby [label=":ruby\n→ TOPLEVEL_BINDING.eval", fillcolor="#6ee7b7"];
23
+ Script [label=":script\n→ exec external file", fillcolor="#6ee7b7"];
24
+ }
25
+ {rank=same; Prompt; Ruby; Script}
26
+
27
+ Log [label="~/.pwn/cron/log/<id>.log\nlast_run · last_status", shape=cylinder, fillcolor="#fcd34d"];
28
+
29
+ Create -> Jobs [label="write", color="#38bdf8"];
30
+ Create -> Crontab [label="append", color="#fb7185"];
31
+ Crontab -> Runner [label="fire on schedule", color="#fb7185", penwidth=2];
32
+ Jobs -> Runner [label="load job", color="#f59e0b"];
33
+ Runner -> Prompt [color="#34d399"];
34
+ Runner -> Ruby [color="#34d399"];
35
+ Runner -> Script [color="#34d399"];
36
+ Prompt -> Log [color="#f59e0b"];
37
+ Ruby -> Log [color="#f59e0b"];
38
+ Script -> Log [color="#f59e0b"];
39
+ Log -> Jobs [label="update status", style=dashed, color="#fbbf24", constraint=false];
40
+ }
@@ -1,17 +1,39 @@
1
- digraph "PWN Driver Framework" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_Driver" {
2
+ graph [
3
+ label=<<B>Driver Anatomy — bin/pwn_*</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">52 shipped drivers · thin CLI over PWN::Plugins</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.5, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Parser [label="PWN::Driver::Parser\n(OptionParser + auto_opts)"];
6
- Script [label="Driver Script\n(bin/pwn_* or custom)"];
7
- PWNLoad [label="require 'pwn'\nFull namespace"];
8
- Orchestrate [label="Orchestration Logic\n(plugins + AI + loops)"];
9
- Outputs [label="Reports, Logs,\nFindings"];
13
+ Sh [label="$ pwn_burp_suite_pro_active_scan \\ \n -t https://target -o out/", fillcolor="#7dd3fc"];
10
14
 
11
- Script -> Parser;
12
- Parser -> Script;
13
- Script -> PWNLoad;
14
- PWNLoad -> Orchestrate;
15
- Orchestrate -> Outputs;
16
- Script -> "standalone | cron | pwn-ai";
15
+ subgraph cluster_d {
16
+ label="Driver Body"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ Opt [label="OptionParser\nARGV opts{}", fillcolor="#6ee7b7"];
19
+ Req [label="require 'pwn'", fillcolor="#6ee7b7"];
20
+ Call [label="PWN::Plugins::X.method(opts)", fillcolor="#6ee7b7"];
21
+ }
22
+ {rank=same; Opt; Req; Call}
23
+
24
+ subgraph cluster_o {
25
+ label="Output"; fontcolor="#ddd6fe"; style=rounded;
26
+ color="#6d28d9"; bgcolor="#2e1065";
27
+ Std [label="STDOUT / STDERR", fillcolor="#c4b5fd"];
28
+ Rep [label="PWN::Reports", fillcolor="#c4b5fd"];
29
+ Ex [label="exit code", fillcolor="#c4b5fd"];
30
+ }
31
+
32
+ Sh -> Opt [color="#38bdf8"];
33
+ Sh -> Req [color="#38bdf8"];
34
+ Opt -> Call [color="#34d399"];
35
+ Req -> Call [color="#34d399"];
36
+ Call -> Std [color="#a78bfa"];
37
+ Call -> Rep [color="#a78bfa"];
38
+ Call -> Ex [color="#a78bfa"];
17
39
  }
@@ -0,0 +1,55 @@
1
+ digraph "PWN_Extrospection" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Extrospection — World Awareness</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">snapshot · drift · observe · intel · correlate</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.5, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ /* col 0 ─ world */
14
+ subgraph cluster_world {
15
+ label="Outside World"; fontcolor="#fecaca"; style="rounded,dashed";
16
+ color="#b91c1c"; bgcolor="#450a0a";
17
+ Host [label="host\nuname · distro · arch", fillcolor="#fda4af"];
18
+ Net [label="net\ninterfaces · listening ports", fillcolor="#fda4af"];
19
+ Tool [label="toolchain\nnmap · burp · msf · git", fillcolor="#fda4af"];
20
+ Repo [label="repo\nHEAD · dirty · branch", fillcolor="#fda4af"];
21
+ Feeds [label="intel feeds\nNVD · CIRCL · Exploit-DB", fillcolor="#fda4af"];
22
+ }
23
+ {rank=same; Host; Net; Tool; Repo; Feeds}
24
+
25
+ /* col 1 ─ engine */
26
+ subgraph cluster_eng {
27
+ label="Extrospection Engine"; fontcolor="#fde68a"; style=rounded;
28
+ color="#a16207"; bgcolor="#422006"; penwidth=2;
29
+ Snap [label="extro_snapshot\nfingerprint host", fillcolor="#fcd34d"];
30
+ Drift [label="extro_drift\ndelta vs baseline", fillcolor="#fcd34d"];
31
+ Obs [label="extro_observe\nrecord recon fact", fillcolor="#fcd34d"];
32
+ Intel [label="extro_intel\nCVE / exploit lookup", fillcolor="#fcd34d"];
33
+ Corr [label="extro_correlate\njoin with Learning", fillcolor="#fcd34d", penwidth=2];
34
+ }
35
+ {rank=same; Snap; Drift; Obs; Intel; Corr}
36
+
37
+ /* col 2 ─ store + prompt */
38
+ Store [label="~/.pwn/\nextrospection.json", shape=cylinder, fillcolor="#fcd34d"];
39
+ Prompt [label="EXTROSPECTION\nblock in system prompt", fillcolor="#c4b5fd"];
40
+ {rank=same; Store; Prompt}
41
+
42
+ Host -> Snap [color="#fb7185"];
43
+ Net -> Snap [color="#fb7185"];
44
+ Tool -> Drift [color="#fb7185"];
45
+ Repo -> Drift [color="#fb7185"];
46
+ Feeds -> Intel [color="#fb7185"];
47
+
48
+ Snap -> Store [color="#f59e0b"];
49
+ Drift -> Store [color="#f59e0b"];
50
+ Obs -> Store [color="#f59e0b"];
51
+ Intel -> Store [label="record:true", color="#f59e0b"];
52
+ Corr -> Prompt[label="findings", color="#a78bfa", penwidth=2];
53
+ Store -> Prompt[label="inject", style=dashed, color="#fbbf24"];
54
+ Store -> Corr [style=dashed, color="#fbbf24", constraint=false];
55
+ }