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
@@ -3,232 +3,403 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: PWN Overall Architecture Pages: 1 -->
7
- <svg width="596pt" height="473pt"
8
- viewBox="0.00 0.00 596.00 473.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(4 469.4)">
10
- <title>PWN Overall Architecture</title>
11
- <polygon fill="white" stroke="none" points="-4,4 -4,-469.4 592.25,-469.4 592.25,4 -4,4"/>
6
+ <!-- Title: PWN_Overall_Architecture Pages: 1 -->
7
+ <svg width="1249pt" height="784pt"
8
+ viewBox="0.00 0.00 1249.00 784.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 740.7)">
10
+ <title>PWN_Overall_Architecture</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-740.7 1205.66,-740.7 1205.66,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="317.23" y="-673.6" font-family="sans-Serif" font-weight="bold" font-size="22.00" fill="#e2e8f0">PWN — Offensive Security Automation Framework</text>
13
+ <text xml:space="preserve" text-anchor="start" x="509.23" y="-662.05" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Overall Architecture · lib/pwn/*</text>
12
14
  <g id="clust1" class="cluster">
13
- <title>cluster_core</title>
14
- <polygon fill="none" stroke="darkblue" points="82,-65 82,-166 559,-166 559,-65 82,-65"/>
15
- <text xml:space="preserve" text-anchor="middle" x="320.5" y="-148.7" font-family="Times,serif" font-size="14.00">Core PWN</text>
16
- </g>
17
- <g id="clust2" class="cluster">
18
- <title>cluster_persistent</title>
19
- <polygon fill="none" stroke="darkgreen" points="8,-290.83 8,-457.4 291,-457.4 291,-290.83 8,-290.83"/>
20
- <text xml:space="preserve" text-anchor="middle" x="149.5" y="-440.1" font-family="Times,serif" font-size="14.00">Persistent Layer</text>
15
+ <title>cluster_actors</title>
16
+ <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M300,-550.5C300,-550.5 885,-550.5 885,-550.5 891,-550.5 897,-556.5 897,-562.5 897,-562.5 897,-636.5 897,-636.5 897,-642.5 891,-648.5 885,-648.5 885,-648.5 300,-648.5 300,-648.5 294,-648.5 288,-642.5 288,-636.5 288,-636.5 288,-562.5 288,-562.5 288,-556.5 294,-550.5 300,-550.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="592.5" y="-623.6" font-family="sans-Serif" font-size="22.00" fill="#94a3b8">Actors</text>
18
+ </g>
19
+ <g id="clust3" class="cluster">
20
+ <title>cluster_entry</title>
21
+ <path fill="#0c4a6e" stroke="#0369a1" stroke-width="2" d="M166,-412.5C166,-412.5 684,-412.5 684,-412.5 690,-412.5 696,-418.5 696,-424.5 696,-424.5 696,-486 696,-486 696,-492 690,-498 684,-498 684,-498 166,-498 166,-498 160,-498 154,-492 154,-486 154,-486 154,-424.5 154,-424.5 154,-418.5 160,-412.5 166,-412.5"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="425" y="-473.1" font-family="sans-Serif" font-size="22.00" fill="#7dd3fc">Entry Points &#160;(bin/)</text>
23
+ </g>
24
+ <g id="clust5" class="cluster">
25
+ <title>cluster_agent</title>
26
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M130,-274.5C130,-274.5 799,-274.5 799,-274.5 805,-274.5 811,-280.5 811,-286.5 811,-286.5 811,-348 811,-348 811,-354 805,-360 799,-360 799,-360 130,-360 130,-360 124,-360 118,-354 118,-348 118,-348 118,-286.5 118,-286.5 118,-280.5 124,-274.5 130,-274.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="464.5" y="-335.1" font-family="sans-Serif" font-size="22.00" fill="#ddd6fe">PWN::AI::Agent</text>
28
+ </g>
29
+ <g id="clust7" class="cluster">
30
+ <title>cluster_caps</title>
31
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M32,-136.5C32,-136.5 949,-136.5 949,-136.5 955,-136.5 961,-142.5 961,-148.5 961,-148.5 961,-210 961,-210 961,-216 955,-222 949,-222 949,-222 32,-222 32,-222 26,-222 20,-216 20,-210 20,-210 20,-148.5 20,-148.5 20,-142.5 26,-136.5 32,-136.5"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="490.5" y="-197.1" font-family="sans-Serif" font-size="22.00" fill="#a7f3d0">Capability Namespaces &#160;(lib/pwn/*)</text>
33
+ </g>
34
+ <g id="clust9" class="cluster">
35
+ <title>cluster_persist</title>
36
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M20,-8C20,-8 959,-8 959,-8 965,-8 971,-14 971,-20 971,-20 971,-81.5 971,-81.5 971,-87.5 965,-93.5 959,-93.5 959,-93.5 20,-93.5 20,-93.5 14,-93.5 8,-87.5 8,-81.5 8,-81.5 8,-20 8,-20 8,-14 14,-8 20,-8"/>
37
+ <text xml:space="preserve" text-anchor="middle" x="489.5" y="-68.6" font-family="sans-Serif" font-size="22.00" fill="#fde68a">Persistence &#160;~/.pwn/</text>
21
38
  </g>
22
39
  <!-- User -->
23
40
  <g id="node1" class="node">
24
41
  <title>User</title>
25
- <path fill="none" stroke="black" d="M411.12,-422.96C411.12,-422.96 332.88,-422.96 332.88,-422.96 326.88,-422.96 320.88,-416.96 320.88,-410.96 320.88,-410.96 320.88,-398.96 320.88,-398.96 320.88,-392.96 326.88,-386.96 332.88,-386.96 332.88,-386.96 411.12,-386.96 411.12,-386.96 417.12,-386.96 423.12,-392.96 423.12,-398.96 423.12,-398.96 423.12,-410.96 423.12,-410.96 423.12,-416.96 417.12,-422.96 411.12,-422.96"/>
26
- <text xml:space="preserve" text-anchor="middle" x="372" y="-406.91" font-family="Arial" font-size="9.00">End User</text>
27
- <text xml:space="preserve" text-anchor="middle" x="372" y="-396.41" font-family="Arial" font-size="9.00">(Researcher, pwn&#45;ai)</text>
42
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M414,-600.75C414,-600.75 308,-600.75 308,-600.75 302,-600.75 296,-594.75 296,-588.75 296,-588.75 296,-576.75 296,-576.75 296,-570.75 302,-564.75 308,-564.75 308,-564.75 414,-564.75 414,-564.75 420,-564.75 426,-570.75 426,-576.75 426,-576.75 426,-588.75 426,-588.75 426,-594.75 420,-600.75 414,-600.75"/>
43
+ <text xml:space="preserve" text-anchor="middle" x="361" y="-585.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
44
+ <text xml:space="preserve" text-anchor="middle" x="361" y="-572.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Red Team · Bug Hunter</text>
28
45
  </g>
29
46
  <!-- REPL -->
30
- <g id="node2" class="node">
47
+ <g id="node5" class="node">
31
48
  <title>REPL</title>
32
- <ellipse fill="lightgreen" stroke="black" cx="361" cy="-318.77" rx="44.72" ry="20.51"/>
33
- <text xml:space="preserve" text-anchor="middle" x="361" y="-320.72" font-family="Arial" font-size="9.00">PWN REPL</text>
34
- <text xml:space="preserve" text-anchor="middle" x="361" y="-310.22" font-family="Arial" font-size="9.00">(pry + pwn)</text>
49
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M266.25,-456.5C266.25,-456.5 173.75,-456.5 173.75,-456.5 167.75,-456.5 161.75,-450.5 161.75,-444.5 161.75,-444.5 161.75,-432.5 161.75,-432.5 161.75,-426.5 167.75,-420.5 173.75,-420.5 173.75,-420.5 266.25,-420.5 266.25,-420.5 272.25,-420.5 278.25,-426.5 278.25,-432.5 278.25,-432.5 278.25,-444.5 278.25,-444.5 278.25,-450.5 272.25,-456.5 266.25,-456.5"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="220" y="-441.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🐚 &#160;pwn REPL</text>
51
+ <text xml:space="preserve" text-anchor="middle" x="220" y="-428.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Pry + PWN:: preload</text>
35
52
  </g>
36
53
  <!-- User&#45;&gt;REPL -->
37
54
  <g id="edge1" class="edge">
38
55
  <title>User&#45;&gt;REPL</title>
39
- <path fill="none" stroke="black" d="M369.72,-386.52C368.37,-376.15 366.61,-362.71 365.03,-350.6"/>
40
- <polygon fill="black" stroke="black" points="368.55,-350.51 363.78,-341.05 361.61,-351.42 368.55,-350.51"/>
41
- <text xml:space="preserve" text-anchor="middle" x="390.03" y="-359.42" font-family="Arial" font-size="8.00">pwn / pwn&#45;ai</text>
56
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M343.71,-564.31C318.76,-539.14 272.56,-492.53 244.23,-463.94"/>
57
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="246.44,-462.19 238.82,-458.48 242.46,-466.14 246.44,-462.19"/>
42
58
  </g>
43
- <!-- AI -->
44
- <g id="node3" class="node">
45
- <title>AI</title>
46
- <ellipse fill="lightblue" stroke="black" cx="173" cy="-232.01" rx="67" ry="20.51"/>
47
- <text xml:space="preserve" text-anchor="middle" x="173" y="-233.96" font-family="Arial" font-size="9.00">PWN::AI</text>
48
- <text xml:space="preserve" text-anchor="middle" x="173" y="-223.46" font-family="Arial" font-size="9.00">(Agent + Providers)</text>
59
+ <!-- PwnAI -->
60
+ <g id="node6" class="node">
61
+ <title>PwnAI</title>
62
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M419.75,-456.5C419.75,-456.5 330.25,-456.5 330.25,-456.5 324.25,-456.5 318.25,-450.5 318.25,-444.5 318.25,-444.5 318.25,-432.5 318.25,-432.5 318.25,-426.5 324.25,-420.5 330.25,-420.5 330.25,-420.5 419.75,-420.5 419.75,-420.5 425.75,-420.5 431.75,-426.5 431.75,-432.5 431.75,-432.5 431.75,-444.5 431.75,-444.5 431.75,-450.5 425.75,-456.5 419.75,-456.5"/>
63
+ <text xml:space="preserve" text-anchor="middle" x="375" y="-441.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">✨ &#160;pwn&#45;ai</text>
64
+ <text xml:space="preserve" text-anchor="middle" x="375" y="-428.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Agent TUI · pwn &#45;&#45;ai</text>
49
65
  </g>
50
- <!-- REPL&#45;&gt;AI -->
66
+ <!-- User&#45;&gt;PwnAI -->
51
67
  <g id="edge2" class="edge">
52
- <title>REPL&#45;&gt;AI</title>
53
- <path fill="none" stroke="black" d="M330.68,-303.46C319.66,-298.78 306.97,-293.98 295,-290.83 259.25,-281.42 244.92,-298.02 212.5,-280.26 204.32,-275.78 197.13,-268.88 191.21,-261.71"/>
54
- <polygon fill="black" stroke="black" points="194.12,-259.76 185.31,-253.87 188.53,-263.97 194.12,-259.76"/>
55
- <text xml:space="preserve" text-anchor="middle" x="237.25" y="-272.66" font-family="Arial" font-size="8.00">launch pwn&#45;ai</text>
68
+ <title>User&#45;&gt;PwnAI</title>
69
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M362.72,-564.31C365.11,-539.99 369.47,-495.66 372.3,-466.91"/>
70
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="375.08,-467.28 373.08,-459.04 369.51,-466.73 375.08,-467.28"/>
56
71
  </g>
57
- <!-- Plugins -->
58
- <g id="node4" class="node">
59
- <title>Plugins</title>
60
- <path fill="none" stroke="black" d="M187.5,-133.5C187.5,-133.5 102.5,-133.5 102.5,-133.5 96.5,-133.5 90.5,-127.5 90.5,-121.5 90.5,-121.5 90.5,-85 90.5,-85 90.5,-79 96.5,-73 102.5,-73 102.5,-73 187.5,-73 187.5,-73 193.5,-73 199.5,-79 199.5,-85 199.5,-85 199.5,-121.5 199.5,-121.5 199.5,-127.5 193.5,-133.5 187.5,-133.5"/>
61
- <text xml:space="preserve" text-anchor="middle" x="145" y="-120.95" font-family="Arial" font-size="9.00">PWN::Plugins</text>
62
- <text xml:space="preserve" text-anchor="middle" x="145" y="-110.45" font-family="Arial" font-size="9.00">(67+ modules:</text>
63
- <text xml:space="preserve" text-anchor="middle" x="145" y="-99.95" font-family="Arial" font-size="9.00">Burp, NmapIt,</text>
64
- <text xml:space="preserve" text-anchor="middle" x="145" y="-89.45" font-family="Arial" font-size="9.00">Metasploit, Fuzz,</text>
65
- <text xml:space="preserve" text-anchor="middle" x="145" y="-78.95" font-family="Arial" font-size="9.00">TransparentBrowser...)</text>
66
- </g>
67
- <!-- REPL&#45;&gt;Plugins -->
72
+ <!-- CI -->
73
+ <g id="node2" class="node">
74
+ <title>CI</title>
75
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M560,-600.75C560,-600.75 478,-600.75 478,-600.75 472,-600.75 466,-594.75 466,-588.75 466,-588.75 466,-576.75 466,-576.75 466,-570.75 472,-564.75 478,-564.75 478,-564.75 560,-564.75 560,-564.75 566,-564.75 572,-570.75 572,-576.75 572,-576.75 572,-588.75 572,-588.75 572,-594.75 566,-600.75 560,-600.75"/>
76
+ <text xml:space="preserve" text-anchor="middle" x="519" y="-585.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⚙️ &#160;CI / CD</text>
77
+ <text xml:space="preserve" text-anchor="middle" x="519" y="-572.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Headless pipelines</text>
78
+ </g>
79
+ <!-- CLI -->
80
+ <g id="node7" class="node">
81
+ <title>CLI</title>
82
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M543.75,-456.5C543.75,-456.5 484.25,-456.5 484.25,-456.5 478.25,-456.5 472.25,-450.5 472.25,-444.5 472.25,-444.5 472.25,-432.5 472.25,-432.5 472.25,-426.5 478.25,-420.5 484.25,-420.5 484.25,-420.5 543.75,-420.5 543.75,-420.5 549.75,-420.5 555.75,-426.5 555.75,-432.5 555.75,-432.5 555.75,-444.5 555.75,-444.5 555.75,-450.5 549.75,-456.5 543.75,-456.5"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="514" y="-441.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">📜 &#160;bin/pwn_*</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="514" y="-428.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">52 CLI drivers</text>
85
+ </g>
86
+ <!-- CI&#45;&gt;CLI -->
68
87
  <g id="edge3" class="edge">
69
- <title>REPL&#45;&gt;Plugins</title>
70
- <path fill="none" stroke="black" d="M331.97,-302.94C313,-291.7 289.34,-274.45 276,-252.51 257.59,-222.23 287.39,-198.73 262,-174 244.93,-157.38 230.36,-176.55 209,-166 197.11,-160.13 186,-151.25 176.48,-142.05"/>
71
- <polygon fill="black" stroke="black" points="179.1,-139.72 169.61,-135.02 174.1,-144.61 179.1,-139.72"/>
72
- <text xml:space="preserve" text-anchor="middle" x="304.5" y="-229.28" font-family="Arial" font-size="8.00">direct invocation</text>
88
+ <title>CI&#45;&gt;CLI</title>
89
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M518.39,-564.31C517.53,-539.99 515.97,-495.66 514.96,-466.91"/>
90
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="517.77,-466.95 514.69,-459.05 512.17,-467.15 517.77,-466.95"/>
73
91
  </g>
74
- <!-- SAST -->
75
- <g id="node5" class="node">
76
- <title>SAST</title>
77
- <path fill="none" stroke="black" d="M454.38,-121.25C454.38,-121.25 413.62,-121.25 413.62,-121.25 407.62,-121.25 401.62,-115.25 401.62,-109.25 401.62,-109.25 401.62,-97.25 401.62,-97.25 401.62,-91.25 407.62,-85.25 413.62,-85.25 413.62,-85.25 454.38,-85.25 454.38,-85.25 460.38,-85.25 466.38,-91.25 466.38,-97.25 466.38,-97.25 466.38,-109.25 466.38,-109.25 466.38,-115.25 460.38,-121.25 454.38,-121.25"/>
78
- <text xml:space="preserve" text-anchor="middle" x="434" y="-99.95" font-family="Arial" font-size="9.00">PWN::SAST</text>
92
+ <!-- Cronb -->
93
+ <g id="node8" class="node">
94
+ <title>Cronb</title>
95
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M675.88,-456.5C675.88,-456.5 608.12,-456.5 608.12,-456.5 602.12,-456.5 596.12,-450.5 596.12,-444.5 596.12,-444.5 596.12,-432.5 596.12,-432.5 596.12,-426.5 602.12,-420.5 608.12,-420.5 608.12,-420.5 675.88,-420.5 675.88,-420.5 681.88,-420.5 687.88,-426.5 687.88,-432.5 687.88,-432.5 687.88,-444.5 687.88,-444.5 687.88,-450.5 681.88,-456.5 675.88,-456.5"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="642" y="-441.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⏱ &#160;PWN::Cron</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="642" y="-428.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Scheduled jobs</text>
79
98
  </g>
80
- <!-- REPL&#45;&gt;SAST -->
99
+ <!-- CI&#45;&gt;Cronb -->
81
100
  <g id="edge4" class="edge">
82
- <title>REPL&#45;&gt;SAST</title>
83
- <path fill="none" stroke="black" d="M377.69,-299.32C382.22,-293.54 386.77,-286.93 390,-280.26 413.71,-231.37 425.45,-168.45 430.58,-132.61"/>
84
- <polygon fill="black" stroke="black" points="434,-133.43 431.87,-123.05 427.06,-132.49 434,-133.43"/>
101
+ <title>CI&#45;&gt;Cronb</title>
102
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M534.08,-564.31C555.75,-539.25 595.81,-492.92 620.55,-464.31"/>
103
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="622.39,-466.46 625.51,-458.57 618.16,-462.79 622.39,-466.46"/>
104
+ <text xml:space="preserve" text-anchor="middle" x="599.56" y="-507.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">crontab</text>
85
105
  </g>
86
- <!-- Reports -->
87
- <g id="node6" class="node">
88
- <title>Reports</title>
89
- <path fill="none" stroke="black" d="M371.88,-121.25C371.88,-121.25 322.12,-121.25 322.12,-121.25 316.12,-121.25 310.12,-115.25 310.12,-109.25 310.12,-109.25 310.12,-97.25 310.12,-97.25 310.12,-91.25 316.12,-85.25 322.12,-85.25 322.12,-85.25 371.88,-85.25 371.88,-85.25 377.88,-85.25 383.88,-91.25 383.88,-97.25 383.88,-97.25 383.88,-109.25 383.88,-109.25 383.88,-115.25 377.88,-121.25 371.88,-121.25"/>
90
- <text xml:space="preserve" text-anchor="middle" x="347" y="-99.95" font-family="Arial" font-size="9.00">PWN::Reports</text>
106
+ <!-- LLM -->
107
+ <g id="node3" class="node">
108
+ <title>LLM</title>
109
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M724.38,-607C724.38,-607 623.62,-607 623.62,-607 617.62,-607 611.62,-601 611.62,-595 611.62,-595 611.62,-570.5 611.62,-570.5 611.62,-564.5 617.62,-558.5 623.62,-558.5 623.62,-558.5 724.38,-558.5 724.38,-558.5 730.38,-558.5 736.38,-564.5 736.38,-570.5 736.38,-570.5 736.38,-595 736.38,-595 736.38,-601 730.38,-607 724.38,-607"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="674" y="-592.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Providers</text>
111
+ <text xml:space="preserve" text-anchor="middle" x="674" y="-579.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">OpenAI · Anthropic</text>
112
+ <text xml:space="preserve" text-anchor="middle" x="674" y="-565.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Grok · Gemini · Ollama</text>
91
113
  </g>
92
- <!-- REPL&#45;&gt;Reports -->
93
- <g id="edge5" class="edge">
94
- <title>REPL&#45;&gt;Reports</title>
95
- <path fill="none" stroke="black" d="M369.77,-298.29C371.92,-292.59 373.91,-286.28 375,-280.26 383.39,-233.79 383.96,-220.37 375,-174 372.22,-159.63 366.51,-144.47 360.96,-131.96"/>
96
- <polygon fill="black" stroke="black" points="364.23,-130.7 356.84,-123.11 357.89,-133.66 364.23,-130.7"/>
114
+ <!-- Target -->
115
+ <g id="node4" class="node">
116
+ <title>Target</title>
117
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M877.38,-607C877.38,-607 788.62,-607 788.62,-607 782.62,-607 776.62,-601 776.62,-595 776.62,-595 776.62,-570.5 776.62,-570.5 776.62,-564.5 782.62,-558.5 788.62,-558.5 788.62,-558.5 877.38,-558.5 877.38,-558.5 883.38,-558.5 889.38,-564.5 889.38,-570.5 889.38,-570.5 889.38,-595 889.38,-595 889.38,-601 883.38,-607 877.38,-607"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="833" y="-592.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🎯 &#160;Attack Surface</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="833" y="-579.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Hosts · Web · Cloud</text>
120
+ <text xml:space="preserve" text-anchor="middle" x="833" y="-565.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Radio · Hardware</text>
97
121
  </g>
98
- <!-- Driver -->
99
- <g id="node7" class="node">
100
- <title>Driver</title>
101
- <path fill="none" stroke="black" d="M539.12,-121.25C539.12,-121.25 496.88,-121.25 496.88,-121.25 490.88,-121.25 484.88,-115.25 484.88,-109.25 484.88,-109.25 484.88,-97.25 484.88,-97.25 484.88,-91.25 490.88,-85.25 496.88,-85.25 496.88,-85.25 539.12,-85.25 539.12,-85.25 545.12,-85.25 551.12,-91.25 551.12,-97.25 551.12,-97.25 551.12,-109.25 551.12,-109.25 551.12,-115.25 545.12,-121.25 539.12,-121.25"/>
102
- <text xml:space="preserve" text-anchor="middle" x="518" y="-99.95" font-family="Arial" font-size="9.00">PWN::Driver</text>
122
+ <!-- Loop -->
123
+ <g id="node9" class="node">
124
+ <title>Loop</title>
125
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M262.38,-318.5C262.38,-318.5 137.62,-318.5 137.62,-318.5 131.62,-318.5 125.62,-312.5 125.62,-306.5 125.62,-306.5 125.62,-294.5 125.62,-294.5 125.62,-288.5 131.62,-282.5 137.62,-282.5 137.62,-282.5 262.38,-282.5 262.38,-282.5 268.38,-282.5 274.38,-288.5 274.38,-294.5 274.38,-294.5 274.38,-306.5 274.38,-306.5 274.38,-312.5 268.38,-318.5 262.38,-318.5"/>
126
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-303.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Loop</text>
127
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-290.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">plan → dispatch → observe</text>
103
128
  </g>
104
- <!-- REPL&#45;&gt;Driver -->
129
+ <!-- REPL&#45;&gt;Loop -->
130
+ <g id="edge5" class="edge">
131
+ <title>REPL&#45;&gt;Loop</title>
132
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M217.43,-420C214.02,-396.84 207.98,-355.79 203.99,-328.61"/>
133
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="206.78,-328.39 202.85,-320.88 201.24,-329.2 206.78,-328.39"/>
134
+ </g>
135
+ <!-- PwnAI&#45;&gt;Loop -->
105
136
  <g id="edge6" class="edge">
106
- <title>REPL&#45;&gt;Driver</title>
107
- <path fill="none" stroke="black" d="M383.74,-301.1C391.28,-295 399.42,-287.75 406,-280.26 447.91,-232.61 484.91,-167.74 504.1,-131.54"/>
108
- <polygon fill="black" stroke="black" points="507.01,-133.53 508.54,-123.04 500.81,-130.28 507.01,-133.53"/>
137
+ <title>PwnAI&#45;&gt;Loop</title>
138
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M350.72,-419.95C334.81,-408.36 313.64,-392.73 295.25,-378.5 273.03,-361.32 248.39,-341.37 229.73,-326.08"/>
139
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="231.65,-324.03 223.69,-321.12 228.1,-328.36 231.65,-324.03"/>
140
+ <text xml:space="preserve" text-anchor="middle" x="330.12" y="-369.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">natural language</text>
109
141
  </g>
110
- <!-- Memory -->
111
- <g id="node8" class="node">
112
- <title>Memory</title>
113
- <path fill="none" stroke="black" d="M280.25,-121.25C280.25,-121.25 229.75,-121.25 229.75,-121.25 223.75,-121.25 217.75,-115.25 217.75,-109.25 217.75,-109.25 217.75,-97.25 217.75,-97.25 217.75,-91.25 223.75,-85.25 229.75,-85.25 229.75,-85.25 280.25,-85.25 280.25,-85.25 286.25,-85.25 292.25,-91.25 292.25,-97.25 292.25,-97.25 292.25,-109.25 292.25,-109.25 292.25,-115.25 286.25,-121.25 280.25,-121.25"/>
114
- <text xml:space="preserve" text-anchor="middle" x="255" y="-99.95" font-family="Arial" font-size="9.00">PWN::Memory</text>
142
+ <!-- Registry -->
143
+ <g id="node10" class="node">
144
+ <title>Registry</title>
145
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M423.5,-318.5C423.5,-318.5 326.5,-318.5 326.5,-318.5 320.5,-318.5 314.5,-312.5 314.5,-306.5 314.5,-306.5 314.5,-294.5 314.5,-294.5 314.5,-288.5 320.5,-282.5 326.5,-282.5 326.5,-282.5 423.5,-282.5 423.5,-282.5 429.5,-282.5 435.5,-288.5 435.5,-294.5 435.5,-294.5 435.5,-306.5 435.5,-306.5 435.5,-312.5 429.5,-318.5 423.5,-318.5"/>
146
+ <text xml:space="preserve" text-anchor="middle" x="375" y="-303.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
147
+ <text xml:space="preserve" text-anchor="middle" x="375" y="-290.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">10 toolsets · 45+ tools</text>
115
148
  </g>
116
- <!-- REPL&#45;&gt;Memory -->
117
- <g id="edge9" class="edge">
118
- <title>REPL&#45;&gt;Memory</title>
119
- <path fill="none" stroke="black" d="M359.21,-298.1C356.61,-276.1 350.54,-239.83 337,-211.5 325.88,-188.23 316.7,-186.45 301,-166 292.18,-154.52 282.6,-141.7 274.47,-130.73"/>
120
- <polygon fill="black" stroke="black" points="277.41,-128.83 268.65,-122.87 271.78,-132.99 277.41,-128.83"/>
149
+ <!-- PwnAI&#45;&gt;Registry -->
150
+ <g id="edge7" class="edge">
151
+ <title>PwnAI&#45;&gt;Registry</title>
152
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M375,-420C375,-396.84 375,-355.79 375,-328.61"/>
153
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="377.8,-328.9 375,-320.9 372.2,-328.9 377.8,-328.9"/>
121
154
  </g>
122
- <!-- BinDrivers -->
123
- <g id="node13" class="node">
124
- <title>BinDrivers</title>
125
- <path fill="none" stroke="black" d="M576.25,-36C576.25,-36 519.75,-36 519.75,-36 513.75,-36 507.75,-30 507.75,-24 507.75,-24 507.75,-12 507.75,-12 507.75,-6 513.75,0 519.75,0 519.75,0 576.25,0 576.25,0 582.25,0 588.25,-6 588.25,-12 588.25,-12 588.25,-24 588.25,-24 588.25,-30 582.25,-36 576.25,-36"/>
126
- <text xml:space="preserve" text-anchor="middle" x="548" y="-19.95" font-family="Arial" font-size="9.00">/opt/pwn/bin/</text>
127
- <text xml:space="preserve" text-anchor="middle" x="548" y="-9.45" font-family="Arial" font-size="9.00">(Drivers &amp; CLIs)</text>
155
+ <!-- Swarm -->
156
+ <g id="node11" class="node">
157
+ <title>Swarm</title>
158
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M592.25,-318.5C592.25,-318.5 487.75,-318.5 487.75,-318.5 481.75,-318.5 475.75,-312.5 475.75,-306.5 475.75,-306.5 475.75,-294.5 475.75,-294.5 475.75,-288.5 481.75,-282.5 487.75,-282.5 487.75,-282.5 592.25,-282.5 592.25,-282.5 598.25,-282.5 604.25,-288.5 604.25,-294.5 604.25,-294.5 604.25,-306.5 604.25,-306.5 604.25,-312.5 598.25,-318.5 592.25,-318.5"/>
159
+ <text xml:space="preserve" text-anchor="middle" x="540" y="-303.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Swarm</text>
160
+ <text xml:space="preserve" text-anchor="middle" x="540" y="-290.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">personas · debate · bus</text>
128
161
  </g>
129
- <!-- REPL&#45;&gt;BinDrivers -->
130
- <g id="edge10" class="edge">
131
- <title>REPL&#45;&gt;BinDrivers</title>
132
- <path fill="none" stroke="black" d="M394.13,-304.81C442.17,-283.94 529.12,-237.81 563,-166 581.05,-127.73 569.62,-77.76 559.2,-47.05"/>
133
- <polygon fill="black" stroke="black" points="562.52,-45.93 555.83,-37.71 555.93,-48.3 562.52,-45.93"/>
162
+ <!-- CLI&#45;&gt;Swarm -->
163
+ <!-- Plugins -->
164
+ <g id="node13" class="node">
165
+ <title>Plugins</title>
166
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M87.75,-180.5C87.75,-180.5 40.25,-180.5 40.25,-180.5 34.25,-180.5 28.25,-174.5 28.25,-168.5 28.25,-168.5 28.25,-156.5 28.25,-156.5 28.25,-150.5 34.25,-144.5 40.25,-144.5 40.25,-144.5 87.75,-144.5 87.75,-144.5 93.75,-144.5 99.75,-150.5 99.75,-156.5 99.75,-156.5 99.75,-168.5 99.75,-168.5 99.75,-174.5 93.75,-180.5 87.75,-180.5"/>
167
+ <text xml:space="preserve" text-anchor="middle" x="64" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Plugins</text>
168
+ <text xml:space="preserve" text-anchor="middle" x="64" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">66 modules</text>
134
169
  </g>
135
- <!-- AI&#45;&gt;Plugins -->
136
- <g id="edge7" class="edge">
137
- <title>AI&#45;&gt;Plugins</title>
138
- <path fill="none" stroke="black" d="M156.11,-212C152.11,-206.41 148.39,-200.04 146.25,-193.5 141.25,-178.25 140.09,-160.72 140.48,-145.26"/>
139
- <polygon fill="black" stroke="black" points="143.97,-145.59 140.97,-135.43 136.98,-145.24 143.97,-145.59"/>
140
- <text xml:space="preserve" text-anchor="middle" x="163.12" y="-185.9" font-family="Arial" font-size="8.00">tool calls</text>
141
- <text xml:space="preserve" text-anchor="middle" x="163.12" y="-176.15" font-family="Arial" font-size="8.00">pwn_eval</text>
142
- </g>
143
- <!-- AI&#45;&gt;Memory -->
144
- <g id="edge8" class="edge">
145
- <title>AI&#45;&gt;Memory</title>
146
- <path fill="none" stroke="black" d="M185.63,-211.48C199.55,-189.97 222.02,-155.24 237.59,-131.16"/>
147
- <polygon fill="black" stroke="black" points="240.49,-133.13 242.98,-122.83 234.61,-129.32 240.49,-133.13"/>
148
- <text xml:space="preserve" text-anchor="middle" x="238.34" y="-181.03" font-family="Arial" font-size="8.00">remember/recall</text>
170
+ <!-- CLI&#45;&gt;Plugins -->
171
+ <g id="edge18" class="edge">
172
+ <title>CLI&#45;&gt;Plugins</title>
173
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M555,-419.82C561.94,-417.16 569.12,-414.61 576,-412.5 589.31,-408.42 812.25,-370.83 821,-360 844.89,-330.45 846.85,-302.36 821,-274.5 794.44,-245.87 155.32,-238.67 120,-222 104.46,-214.67 90.99,-201 81.16,-188.72"/>
174
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="83.5,-187.17 76.43,-182.5 79.04,-190.56 83.5,-187.17"/>
149
175
  </g>
150
- <!-- Learn -->
176
+ <!-- Prompt -->
151
177
  <g id="node12" class="node">
152
- <title>Learn</title>
153
- <path fill="none" stroke="black" d="M106.12,-421.27C106.12,-423.27 85.9,-424.9 61,-424.9 36.1,-424.9 15.88,-423.27 15.88,-421.27 15.88,-421.27 15.88,-388.65 15.88,-388.65 15.88,-386.65 36.1,-385.02 61,-385.02 85.9,-385.02 106.12,-386.65 106.12,-388.65 106.12,-388.65 106.12,-421.27 106.12,-421.27"/>
154
- <path fill="none" stroke="black" d="M106.12,-421.27C106.12,-419.27 85.9,-417.65 61,-417.65 36.1,-417.65 15.88,-419.27 15.88,-421.27"/>
155
- <text xml:space="preserve" text-anchor="middle" x="61" y="-406.91" font-family="Arial" font-size="9.00">Learning</text>
156
- <text xml:space="preserve" text-anchor="middle" x="61" y="-396.41" font-family="Arial" font-size="9.00">(Metrics + JSONL)</text>
178
+ <title>Prompt</title>
179
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M791.25,-318.5C791.25,-318.5 656.75,-318.5 656.75,-318.5 650.75,-318.5 644.75,-312.5 644.75,-306.5 644.75,-306.5 644.75,-294.5 644.75,-294.5 644.75,-288.5 650.75,-282.5 656.75,-282.5 656.75,-282.5 791.25,-282.5 791.25,-282.5 797.25,-282.5 803.25,-288.5 803.25,-294.5 803.25,-294.5 803.25,-306.5 803.25,-306.5 803.25,-312.5 797.25,-318.5 791.25,-318.5"/>
180
+ <text xml:space="preserve" text-anchor="middle" x="724" y="-303.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
181
+ <text xml:space="preserve" text-anchor="middle" x="724" y="-290.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MEMORY · SKILLS · EXTRO</text>
182
+ </g>
183
+ <!-- Cronb&#45;&gt;Prompt -->
184
+ <!-- Loop&#45;&gt;LLM -->
185
+ <g id="edge27" class="edge">
186
+ <title>Loop&#45;&gt;LLM</title>
187
+ <path fill="none" stroke="#c4b5fd" stroke-width="2" d="M221.96,-319.05C240.33,-332.71 267.84,-350.82 295,-360 328.85,-371.44 339.51,-363.84 375,-368 448.71,-376.64 657.14,-356.63 706,-412.5 738.98,-450.21 715.09,-511.05 694.64,-548.59"/>
188
+ <polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="2" points="692.27,-547.09 690.77,-555.43 697.15,-549.85 692.27,-547.09"/>
189
+ <text xml:space="preserve" text-anchor="middle" x="747.07" y="-435.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool&#45;use API</text>
190
+ </g>
191
+ <!-- Loop&#45;&gt;Plugins -->
192
+ <g id="edge10" class="edge">
193
+ <title>Loop&#45;&gt;Plugins</title>
194
+ <path fill="none" stroke="#34d399" stroke-width="2" d="M179.38,-281.93C166.17,-270.46 148.84,-254.97 134.25,-240.5 117.56,-223.94 99.71,-204.36 86.18,-189.08"/>
195
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="88.53,-187.51 81.15,-183.36 84.33,-191.21 88.53,-187.51"/>
196
+ <text xml:space="preserve" text-anchor="middle" x="154.12" y="-231.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">pwn_eval</text>
157
197
  </g>
158
- <!-- AI&#45;&gt;Learn -->
159
- <g id="edge13" class="edge">
160
- <title>AI&#45;&gt;Learn</title>
161
- <path fill="none" stroke="black" d="M171.47,-252.98C168.34,-281.33 158.93,-333.49 131,-367.02 126.77,-372.1 121.67,-376.57 116.16,-380.48"/>
162
- <polygon fill="black" stroke="black" points="114.45,-377.43 107.88,-385.74 118.2,-383.33 114.45,-377.43"/>
163
- <text xml:space="preserve" text-anchor="middle" x="182.2" y="-316.04" font-family="Arial" font-size="8.00">distill skills</text>
198
+ <!-- SAST -->
199
+ <g id="node14" class="node">
200
+ <title>SAST</title>
201
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M182.12,-180.5C182.12,-180.5 151.88,-180.5 151.88,-180.5 145.88,-180.5 139.88,-174.5 139.88,-168.5 139.88,-168.5 139.88,-156.5 139.88,-156.5 139.88,-150.5 145.88,-144.5 151.88,-144.5 151.88,-144.5 182.12,-144.5 182.12,-144.5 188.12,-144.5 194.12,-150.5 194.12,-156.5 194.12,-156.5 194.12,-168.5 194.12,-168.5 194.12,-174.5 188.12,-180.5 182.12,-180.5"/>
202
+ <text xml:space="preserve" text-anchor="middle" x="167" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">SAST</text>
203
+ <text xml:space="preserve" text-anchor="middle" x="167" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">48 rules</text>
164
204
  </g>
165
- <!-- Plugins&#45;&gt;Learn -->
205
+ <!-- Loop&#45;&gt;SAST -->
206
+ <g id="edge11" class="edge">
207
+ <title>Loop&#45;&gt;SAST</title>
208
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M195.75,-282C190.13,-258.84 180.17,-217.79 173.58,-190.61"/>
209
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="176.3,-189.96 171.69,-182.85 170.86,-191.28 176.3,-189.96"/>
210
+ </g>
211
+ <!-- WWW -->
212
+ <g id="node15" class="node">
213
+ <title>WWW</title>
214
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M305.38,-180.5C305.38,-180.5 246.62,-180.5 246.62,-180.5 240.62,-180.5 234.62,-174.5 234.62,-168.5 234.62,-168.5 234.62,-156.5 234.62,-156.5 234.62,-150.5 240.62,-144.5 246.62,-144.5 246.62,-144.5 305.38,-144.5 305.38,-144.5 311.38,-144.5 317.38,-150.5 317.38,-156.5 317.38,-156.5 317.38,-168.5 317.38,-168.5 317.38,-174.5 311.38,-180.5 305.38,-180.5"/>
215
+ <text xml:space="preserve" text-anchor="middle" x="276" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">WWW</text>
216
+ <text xml:space="preserve" text-anchor="middle" x="276" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">21 site drivers</text>
217
+ </g>
218
+ <!-- Registry&#45;&gt;WWW -->
166
219
  <g id="edge12" class="edge">
167
- <title>Plugins&#45;&gt;Learn</title>
168
- <path fill="none" stroke="black" d="M127.8,-133.6C116.56,-154.53 102.92,-183.77 97,-211.5 93.19,-229.33 94.08,-234.52 97,-252.51 98.35,-260.84 101.65,-262.19 103,-270.51 109.87,-312.85 120.68,-327.94 103,-367.02 101.48,-370.39 99.48,-373.56 97.19,-376.54"/>
169
- <polygon fill="black" stroke="black" points="94.79,-373.98 90.61,-383.72 99.95,-378.71 94.79,-373.98"/>
220
+ <title>Registry&#45;&gt;WWW</title>
221
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M362.26,-282C345.03,-258.33 314.2,-215.97 294.44,-188.83"/>
222
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="296.82,-187.34 289.85,-182.52 292.29,-190.64 296.82,-187.34"/>
223
+ </g>
224
+ <!-- AWS -->
225
+ <g id="node16" class="node">
226
+ <title>AWS</title>
227
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M415,-180.5C415,-180.5 369,-180.5 369,-180.5 363,-180.5 357,-174.5 357,-168.5 357,-168.5 357,-156.5 357,-156.5 357,-150.5 363,-144.5 369,-144.5 369,-144.5 415,-144.5 415,-144.5 421,-144.5 427,-150.5 427,-156.5 427,-156.5 427,-168.5 427,-168.5 427,-174.5 421,-180.5 415,-180.5"/>
228
+ <text xml:space="preserve" text-anchor="middle" x="392" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">AWS</text>
229
+ <text xml:space="preserve" text-anchor="middle" x="392" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">90 services</text>
230
+ </g>
231
+ <!-- Registry&#45;&gt;AWS -->
232
+ <g id="edge13" class="edge">
233
+ <title>Registry&#45;&gt;AWS</title>
234
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M377.19,-282C380.08,-258.84 385.21,-217.79 388.61,-190.61"/>
235
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="391.36,-191.17 389.58,-182.89 385.81,-190.48 391.36,-191.17"/>
236
+ </g>
237
+ <!-- SDR -->
238
+ <g id="node17" class="node">
239
+ <title>SDR</title>
240
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M580.75,-180.5C580.75,-180.5 479.25,-180.5 479.25,-180.5 473.25,-180.5 467.25,-174.5 467.25,-168.5 467.25,-168.5 467.25,-156.5 467.25,-156.5 467.25,-150.5 473.25,-144.5 479.25,-144.5 479.25,-144.5 580.75,-144.5 580.75,-144.5 586.75,-144.5 592.75,-150.5 592.75,-156.5 592.75,-156.5 592.75,-168.5 592.75,-168.5 592.75,-174.5 586.75,-180.5 580.75,-180.5"/>
241
+ <text xml:space="preserve" text-anchor="middle" x="530" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">SDR</text>
242
+ <text xml:space="preserve" text-anchor="middle" x="530" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">GQRX · Flipper · RFID</text>
243
+ </g>
244
+ <!-- Swarm&#45;&gt;SDR -->
245
+ <g id="edge14" class="edge">
246
+ <title>Swarm&#45;&gt;SDR</title>
247
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M538.71,-282C537.01,-258.84 533.99,-217.79 531.99,-190.61"/>
248
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="534.81,-190.67 531.43,-182.9 529.22,-191.08 534.81,-190.67"/>
249
+ </g>
250
+ <!-- Chain -->
251
+ <g id="node18" class="node">
252
+ <title>Chain</title>
253
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M691,-180.5C691,-180.5 645,-180.5 645,-180.5 639,-180.5 633,-174.5 633,-168.5 633,-168.5 633,-156.5 633,-156.5 633,-150.5 639,-144.5 645,-144.5 645,-144.5 691,-144.5 691,-144.5 697,-144.5 703,-150.5 703,-156.5 703,-156.5 703,-168.5 703,-168.5 703,-174.5 697,-180.5 691,-180.5"/>
254
+ <text xml:space="preserve" text-anchor="middle" x="668" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Blockchain</text>
255
+ <text xml:space="preserve" text-anchor="middle" x="668" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">BTC · ETH</text>
256
+ </g>
257
+ <!-- Swarm&#45;&gt;Chain -->
258
+ <g id="edge15" class="edge">
259
+ <title>Swarm&#45;&gt;Chain</title>
260
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M556.53,-281.96C571.33,-266.26 593.62,-242.6 613,-222 623.38,-210.97 634.85,-198.77 644.62,-188.37"/>
261
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="646.61,-190.35 650.05,-182.6 642.53,-186.51 646.61,-190.35"/>
262
+ </g>
263
+ <!-- Bounty -->
264
+ <g id="node19" class="node">
265
+ <title>Bounty</title>
266
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M816.88,-180.5C816.88,-180.5 755.12,-180.5 755.12,-180.5 749.12,-180.5 743.12,-174.5 743.12,-168.5 743.12,-168.5 743.12,-156.5 743.12,-156.5 743.12,-150.5 749.12,-144.5 755.12,-144.5 755.12,-144.5 816.88,-144.5 816.88,-144.5 822.88,-144.5 828.88,-150.5 828.88,-156.5 828.88,-156.5 828.88,-168.5 828.88,-168.5 828.88,-174.5 822.88,-180.5 816.88,-180.5"/>
267
+ <text xml:space="preserve" text-anchor="middle" x="786" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Bounty</text>
268
+ <text xml:space="preserve" text-anchor="middle" x="786" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">lifecycle replay</text>
269
+ </g>
270
+ <!-- Prompt&#45;&gt;Bounty -->
271
+ <!-- Reports -->
272
+ <g id="node20" class="node">
273
+ <title>Reports</title>
274
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M941.12,-180.5C941.12,-180.5 880.88,-180.5 880.88,-180.5 874.88,-180.5 868.88,-174.5 868.88,-168.5 868.88,-168.5 868.88,-156.5 868.88,-156.5 868.88,-150.5 874.88,-144.5 880.88,-144.5 880.88,-144.5 941.12,-144.5 941.12,-144.5 947.12,-144.5 953.12,-150.5 953.12,-156.5 953.12,-156.5 953.12,-168.5 953.12,-168.5 953.12,-174.5 947.12,-180.5 941.12,-180.5"/>
275
+ <text xml:space="preserve" text-anchor="middle" x="911" y="-165.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reports</text>
276
+ <text xml:space="preserve" text-anchor="middle" x="911" y="-152.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">HTML · JSON</text>
170
277
  </g>
171
- <!-- Driver&#45;&gt;BinDrivers -->
172
- <g id="edge11" class="edge">
173
- <title>Driver&#45;&gt;BinDrivers</title>
174
- <path fill="none" stroke="black" d="M524.22,-85C528.2,-73.95 533.46,-59.36 538.01,-46.71"/>
175
- <polygon fill="black" stroke="black" points="541.18,-48.25 541.28,-37.65 534.6,-45.87 541.18,-48.25"/>
278
+ <!-- Prompt&#45;&gt;Reports -->
279
+ <!-- Memory -->
280
+ <g id="node21" class="node">
281
+ <title>Memory</title>
282
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M93.75,-48.73C93.75,-50.53 76.38,-52 55,-52 33.62,-52 16.25,-50.53 16.25,-48.73 16.25,-48.73 16.25,-19.27 16.25,-19.27 16.25,-17.47 33.62,-16 55,-16 76.38,-16 93.75,-17.47 93.75,-19.27 93.75,-19.27 93.75,-48.73 93.75,-48.73"/>
283
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M93.75,-48.73C93.75,-46.92 76.38,-45.45 55,-45.45 33.62,-45.45 16.25,-46.92 16.25,-48.73"/>
284
+ <text xml:space="preserve" text-anchor="middle" x="55" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
285
+ </g>
286
+ <!-- Prompt&#45;&gt;Memory -->
287
+ <g id="edge29" class="edge">
288
+ <title>Prompt&#45;&gt;Memory</title>
289
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M813.43,-296.69C868.46,-289.75 935.12,-270.87 971,-222 993.49,-191.37 997.19,-164.04 971,-136.5 905.29,-67.41 201.22,-132 114,-93.5 94.34,-84.82 77.58,-66.43 67,-52.57"/>
290
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="813.24,-293.89 805.61,-297.59 813.88,-299.45 813.24,-293.89"/>
291
+ <text xml:space="preserve" text-anchor="middle" x="1000.16" y="-159.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
292
+ </g>
293
+ <!-- Plugins&#45;&gt;Target -->
294
+ <g id="edge28" class="edge">
295
+ <title>Plugins&#45;&gt;Target</title>
296
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M75.16,-181.11C85.06,-194.99 100.9,-213.4 120,-222 140.68,-231.32 301.36,-228.62 324,-230 383.76,-233.65 820.45,-230.45 861,-274.5 930.76,-350.28 879.92,-485.57 850.3,-548.22"/>
297
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="847.86,-546.84 846.89,-555.26 852.9,-549.28 847.86,-546.84"/>
298
+ <text xml:space="preserve" text-anchor="middle" x="908.09" y="-369.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">attack</text>
299
+ </g>
300
+ <!-- Plugins&#45;&gt;Memory -->
301
+ <g id="edge19" class="edge">
302
+ <title>Plugins&#45;&gt;Memory</title>
303
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M62.75,-143.91C61.24,-122.76 58.7,-87.04 56.94,-62.3"/>
304
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="59.74,-62.18 56.38,-54.4 54.16,-62.58 59.74,-62.18"/>
176
305
  </g>
177
306
  <!-- Skills -->
178
- <g id="node9" class="node">
307
+ <g id="node22" class="node">
179
308
  <title>Skills</title>
180
- <path fill="none" stroke="black" d="M87.75,-335.08C87.75,-337.08 71.73,-338.71 52,-338.71 32.27,-338.71 16.25,-337.08 16.25,-335.08 16.25,-335.08 16.25,-302.46 16.25,-302.46 16.25,-300.46 32.27,-298.83 52,-298.83 71.73,-298.83 87.75,-300.46 87.75,-302.46 87.75,-302.46 87.75,-335.08 87.75,-335.08"/>
181
- <path fill="none" stroke="black" d="M87.75,-335.08C87.75,-333.08 71.73,-331.46 52,-331.46 32.27,-331.46 16.25,-333.08 16.25,-335.08"/>
182
- <text xml:space="preserve" text-anchor="middle" x="52" y="-320.72" font-family="Arial" font-size="9.00">PWN::Skills</text>
183
- <text xml:space="preserve" text-anchor="middle" x="52" y="-310.22" font-family="Arial" font-size="9.00">(~/.pwn/skills)</text>
184
- </g>
185
- <!-- Skills&#45;&gt;REPL -->
186
- <g id="edge16" class="edge">
187
- <title>Skills&#45;&gt;REPL</title>
188
- <path fill="none" stroke="black" d="M85.29,-337.67C103.73,-347.05 127.43,-357.38 150,-362.15 209.14,-374.65 227.62,-377.82 286,-362.15 300.79,-358.18 315.67,-350.51 328.24,-342.71"/>
189
- <polygon fill="black" stroke="black" points="330.04,-345.71 336.51,-337.32 326.22,-339.85 330.04,-345.71"/>
190
- </g>
191
- <!-- Skills&#45;&gt;AI -->
192
- <g id="edge15" class="edge">
193
- <title>Skills&#45;&gt;AI</title>
194
- <path fill="none" stroke="black" d="M65.51,-298.57C72.79,-289.23 82.39,-278.36 92.75,-270.51 101.39,-263.97 111.36,-258.18 121.27,-253.23"/>
195
- <polygon fill="black" stroke="black" points="122.61,-256.47 130.15,-249.03 119.62,-250.14 122.61,-256.47"/>
196
- <text xml:space="preserve" text-anchor="middle" x="120.88" y="-272.66" font-family="Arial" font-size="8.00">context injection</text>
309
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M198,-48.73C198,-50.53 183.66,-52 166,-52 148.34,-52 134,-50.53 134,-48.73 134,-48.73 134,-19.27 134,-19.27 134,-17.47 148.34,-16 166,-16 183.66,-16 198,-17.47 198,-19.27 198,-19.27 198,-48.73 198,-48.73"/>
310
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M198,-48.73C198,-46.92 183.66,-45.45 166,-45.45 148.34,-45.45 134,-46.92 134,-48.73"/>
311
+ <text xml:space="preserve" text-anchor="middle" x="166" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
197
312
  </g>
198
- <!-- Sess -->
199
- <g id="node10" class="node">
200
- <title>Sess</title>
201
- <path fill="none" stroke="black" d="M203.5,-419.69C203.5,-421.49 185.8,-422.96 164,-422.96 142.2,-422.96 124.5,-421.49 124.5,-419.69 124.5,-419.69 124.5,-390.23 124.5,-390.23 124.5,-388.43 142.2,-386.96 164,-386.96 185.8,-386.96 203.5,-388.43 203.5,-390.23 203.5,-390.23 203.5,-419.69 203.5,-419.69"/>
202
- <path fill="none" stroke="black" d="M203.5,-419.69C203.5,-417.88 185.8,-416.42 164,-416.42 142.2,-416.42 124.5,-417.88 124.5,-419.69"/>
203
- <text xml:space="preserve" text-anchor="middle" x="164" y="-401.66" font-family="Arial" font-size="9.00">PWN::Sessions</text>
204
- </g>
205
- <!-- Sess&#45;&gt;REPL -->
206
- <g id="edge18" class="edge">
207
- <title>Sess&#45;&gt;REPL</title>
208
- <path fill="none" stroke="black" d="M180.75,-386.54C191.22,-376.59 205.5,-364.67 220.25,-357.27 250.8,-341.97 261.99,-348.12 295,-339.27 300.99,-337.67 307.26,-335.91 313.45,-334.14"/>
209
- <polygon fill="black" stroke="black" points="314.36,-337.52 322.99,-331.36 312.41,-330.8 314.36,-337.52"/>
210
- <text xml:space="preserve" text-anchor="middle" x="243.12" y="-359.42" font-family="Arial" font-size="8.00">replay / audit</text>
313
+ <!-- SAST&#45;&gt;Skills -->
314
+ <g id="edge20" class="edge">
315
+ <title>SAST&#45;&gt;Skills</title>
316
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M166.86,-143.91C166.69,-122.76 166.41,-87.04 166.22,-62.3"/>
317
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="169.02,-62.39 166.15,-54.41 163.42,-62.43 169.02,-62.39"/>
211
318
  </g>
212
- <!-- Cron -->
213
- <g id="node11" class="node">
214
- <title>Cron</title>
215
- <path fill="none" stroke="black" d="M282.88,-419.69C282.88,-421.49 269.04,-422.96 252,-422.96 234.96,-422.96 221.12,-421.49 221.12,-419.69 221.12,-419.69 221.12,-390.23 221.12,-390.23 221.12,-388.43 234.96,-386.96 252,-386.96 269.04,-386.96 282.88,-388.43 282.88,-390.23 282.88,-390.23 282.88,-419.69 282.88,-419.69"/>
216
- <path fill="none" stroke="black" d="M282.88,-419.69C282.88,-417.88 269.04,-416.42 252,-416.42 234.96,-416.42 221.12,-417.88 221.12,-419.69"/>
217
- <text xml:space="preserve" text-anchor="middle" x="252" y="-401.66" font-family="Arial" font-size="9.00">PWN::Cron</text>
218
- </g>
219
- <!-- Cron&#45;&gt;REPL -->
220
- <g id="edge17" class="edge">
221
- <title>Cron&#45;&gt;REPL</title>
222
- <path fill="none" stroke="black" d="M258.44,-386.65C262.76,-376.98 269.26,-365.31 278,-357.27 288.18,-347.91 301.1,-340.56 313.7,-334.95"/>
223
- <polygon fill="black" stroke="black" points="314.83,-338.27 322.73,-331.22 312.16,-331.8 314.83,-338.27"/>
224
- <text xml:space="preserve" text-anchor="middle" x="320" y="-359.42" font-family="Arial" font-size="8.00">schedule drivers/agents</text>
225
- </g>
226
- <!-- Learn&#45;&gt;Skills -->
227
- <g id="edge14" class="edge">
228
- <title>Learn&#45;&gt;Skills</title>
229
- <path fill="none" stroke="black" d="M44.09,-384.87C40.28,-379.46 36.76,-373.32 34.75,-367.02 32.94,-361.35 33.32,-355.34 34.85,-349.58"/>
230
- <polygon fill="black" stroke="black" points="38.07,-350.96 38.4,-340.37 31.54,-348.44 38.07,-350.96"/>
231
- <text xml:space="preserve" text-anchor="middle" x="68.88" y="-359.42" font-family="Arial" font-size="8.00">promote successful</text>
319
+ <!-- Learn -->
320
+ <g id="node23" class="node">
321
+ <title>Learn</title>
322
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M317.5,-48.73C317.5,-50.53 299.8,-52 278,-52 256.2,-52 238.5,-50.53 238.5,-48.73 238.5,-48.73 238.5,-19.27 238.5,-19.27 238.5,-17.47 256.2,-16 278,-16 299.8,-16 317.5,-17.47 317.5,-19.27 317.5,-19.27 317.5,-48.73 317.5,-48.73"/>
323
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M317.5,-48.73C317.5,-46.92 299.8,-45.45 278,-45.45 256.2,-45.45 238.5,-46.92 238.5,-48.73"/>
324
+ <text xml:space="preserve" text-anchor="middle" x="278" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
325
+ </g>
326
+ <!-- WWW&#45;&gt;Learn -->
327
+ <g id="edge21" class="edge">
328
+ <title>WWW&#45;&gt;Learn</title>
329
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M276.28,-143.91C276.61,-122.76 277.18,-87.04 277.57,-62.3"/>
330
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="280.37,-62.45 277.69,-54.41 274.77,-62.36 280.37,-62.45"/>
331
+ </g>
332
+ <!-- Metrics -->
333
+ <g id="node24" class="node">
334
+ <title>Metrics</title>
335
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M430.5,-48.73C430.5,-50.53 414.14,-52 394,-52 373.86,-52 357.5,-50.53 357.5,-48.73 357.5,-48.73 357.5,-19.27 357.5,-19.27 357.5,-17.47 373.86,-16 394,-16 414.14,-16 430.5,-17.47 430.5,-19.27 430.5,-19.27 430.5,-48.73 430.5,-48.73"/>
336
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M430.5,-48.73C430.5,-46.92 414.14,-45.45 394,-45.45 373.86,-45.45 357.5,-46.92 357.5,-48.73"/>
337
+ <text xml:space="preserve" text-anchor="middle" x="394" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
338
+ </g>
339
+ <!-- AWS&#45;&gt;Metrics -->
340
+ <g id="edge22" class="edge">
341
+ <title>AWS&#45;&gt;Metrics</title>
342
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M392.28,-143.91C392.61,-122.76 393.18,-87.04 393.57,-62.3"/>
343
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="396.37,-62.45 393.69,-54.41 390.77,-62.36 396.37,-62.45"/>
344
+ </g>
345
+ <!-- Extro -->
346
+ <g id="node25" class="node">
347
+ <title>Extro</title>
348
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M573.12,-48.73C573.12,-50.53 550.21,-52 522,-52 493.79,-52 470.88,-50.53 470.88,-48.73 470.88,-48.73 470.88,-19.27 470.88,-19.27 470.88,-17.47 493.79,-16 522,-16 550.21,-16 573.12,-17.47 573.12,-19.27 573.12,-19.27 573.12,-48.73 573.12,-48.73"/>
349
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M573.12,-48.73C573.12,-46.92 550.21,-45.45 522,-45.45 493.79,-45.45 470.88,-46.92 470.88,-48.73"/>
350
+ <text xml:space="preserve" text-anchor="middle" x="522" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
351
+ </g>
352
+ <!-- SDR&#45;&gt;Extro -->
353
+ <g id="edge23" class="edge">
354
+ <title>SDR&#45;&gt;Extro</title>
355
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M528.89,-143.91C527.55,-122.76 525.29,-87.04 523.73,-62.3"/>
356
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="526.53,-62.21 523.23,-54.4 520.94,-62.56 526.53,-62.21"/>
357
+ </g>
358
+ <!-- Sessions -->
359
+ <g id="node26" class="node">
360
+ <title>Sessions</title>
361
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M702.75,-48.73C702.75,-50.53 682.69,-52 658,-52 633.31,-52 613.25,-50.53 613.25,-48.73 613.25,-48.73 613.25,-19.27 613.25,-19.27 613.25,-17.47 633.31,-16 658,-16 682.69,-16 702.75,-17.47 702.75,-19.27 702.75,-19.27 702.75,-48.73 702.75,-48.73"/>
362
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M702.75,-48.73C702.75,-46.92 682.69,-45.45 658,-45.45 633.31,-45.45 613.25,-46.92 613.25,-48.73"/>
363
+ <text xml:space="preserve" text-anchor="middle" x="658" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sessions/*.jsonl</text>
364
+ </g>
365
+ <!-- Chain&#45;&gt;Sessions -->
366
+ <g id="edge24" class="edge">
367
+ <title>Chain&#45;&gt;Sessions</title>
368
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M666.61,-143.91C664.94,-122.76 662.11,-87.04 660.16,-62.3"/>
369
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="662.96,-62.16 659.53,-54.4 657.37,-62.6 662.96,-62.16"/>
370
+ </g>
371
+ <!-- SwarmB -->
372
+ <g id="node27" class="node">
373
+ <title>SwarmB</title>
374
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M843.38,-48.73C843.38,-50.53 820.8,-52 793,-52 765.2,-52 742.62,-50.53 742.62,-48.73 742.62,-48.73 742.62,-19.27 742.62,-19.27 742.62,-17.47 765.2,-16 793,-16 820.8,-16 843.38,-17.47 843.38,-19.27 843.38,-19.27 843.38,-48.73 843.38,-48.73"/>
375
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M843.38,-48.73C843.38,-46.92 820.8,-45.45 793,-45.45 765.2,-45.45 742.62,-46.92 742.62,-48.73"/>
376
+ <text xml:space="preserve" text-anchor="middle" x="793" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/*/bus.jsonl</text>
377
+ </g>
378
+ <!-- Bounty&#45;&gt;SwarmB -->
379
+ <g id="edge25" class="edge">
380
+ <title>Bounty&#45;&gt;SwarmB</title>
381
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M786.97,-143.91C788.14,-122.76 790.12,-87.04 791.49,-62.3"/>
382
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="794.28,-62.55 791.93,-54.4 788.69,-62.24 794.28,-62.55"/>
383
+ </g>
384
+ <!-- Reports&#45;&gt;User -->
385
+ <g id="edge30" class="edge">
386
+ <title>Reports&#45;&gt;User</title>
387
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M920.53,-181.03C929.12,-194.86 943.12,-213.24 961,-222 977.78,-230.22 1114.82,-217.83 1129,-230 1172.94,-267.73 1170.73,-312.22 1138,-360 957.75,-623.19 754.79,-470.45 446,-550.5 435.5,-553.22 424.48,-556.75 413.99,-560.44"/>
388
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="413.13,-557.78 406.56,-563.14 415.04,-563.04 413.13,-557.78"/>
389
+ <text xml:space="preserve" text-anchor="middle" x="1145.79" y="-369.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
390
+ </g>
391
+ <!-- CronF -->
392
+ <g id="node28" class="node">
393
+ <title>CronF</title>
394
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M962.5,-48.73C962.5,-50.53 944.8,-52 923,-52 901.2,-52 883.5,-50.53 883.5,-48.73 883.5,-48.73 883.5,-19.27 883.5,-19.27 883.5,-17.47 901.2,-16 923,-16 944.8,-16 962.5,-17.47 962.5,-19.27 962.5,-19.27 962.5,-48.73 962.5,-48.73"/>
395
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M962.5,-48.73C962.5,-46.92 944.8,-45.45 923,-45.45 901.2,-45.45 883.5,-46.92 883.5,-48.73"/>
396
+ <text xml:space="preserve" text-anchor="middle" x="923" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">cron/jobs.yml</text>
397
+ </g>
398
+ <!-- Reports&#45;&gt;CronF -->
399
+ <g id="edge26" class="edge">
400
+ <title>Reports&#45;&gt;CronF</title>
401
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M912.67,-143.91C914.67,-122.76 918.06,-87.04 920.41,-62.3"/>
402
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="923.19,-62.63 921.16,-54.4 917.62,-62.1 923.19,-62.63"/>
232
403
  </g>
233
404
  </g>
234
405
  </svg>