pwn 0.5.621 → 0.5.626

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/Gemfile +1 -1
  4. data/README.md +7 -1
  5. data/bin/pwn_gqrx_scanner +78 -9
  6. data/documentation/Agent-Tool-Registry.md +3 -3
  7. data/documentation/Configuration.md +301 -47
  8. data/documentation/Cron.md +5 -3
  9. data/documentation/Diagrams.md +1 -1
  10. data/documentation/Extrospection.md +472 -26
  11. data/documentation/FFI.md +72 -8
  12. data/documentation/Home.md +4 -4
  13. data/documentation/How-PWN-Works.md +7 -3
  14. data/documentation/Mistakes.md +9 -0
  15. data/documentation/SDR.md +83 -10
  16. data/documentation/Skills-Memory-Learning.md +101 -11
  17. data/documentation/diagrams/agent-tool-registry.svg +56 -55
  18. data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
  19. data/documentation/diagrams/aws-cloud-security.svg +25 -25
  20. data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
  21. data/documentation/diagrams/code-scanning-sast.svg +25 -25
  22. data/documentation/diagrams/cron-scheduling.svg +23 -23
  23. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -6
  25. data/documentation/diagrams/dot/hardware-hacking.dot +3 -1
  26. data/documentation/diagrams/dot/memory-skills-detailed.dot +4 -2
  27. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +4 -2
  28. data/documentation/diagrams/dot/overall-pwn-architecture.dot +3 -3
  29. data/documentation/diagrams/dot/persistence-filesystem.dot +3 -3
  30. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +10 -4
  31. data/documentation/diagrams/dot/sdr-radio-flow.dot +39 -16
  32. data/documentation/diagrams/driver-framework.svg +13 -13
  33. data/documentation/diagrams/extrospection-world-awareness.svg +383 -177
  34. data/documentation/diagrams/fuzzing-workflow.svg +24 -24
  35. data/documentation/diagrams/hardware-hacking.svg +84 -69
  36. data/documentation/diagrams/history-to-drivers.svg +18 -18
  37. data/documentation/diagrams/memory-skills-detailed.svg +137 -120
  38. data/documentation/diagrams/mistakes-negative-feedback.svg +152 -137
  39. data/documentation/diagrams/network-infra-testing.svg +27 -27
  40. data/documentation/diagrams/overall-pwn-architecture.svg +97 -97
  41. data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
  42. data/documentation/diagrams/persistence-filesystem.svg +100 -94
  43. data/documentation/diagrams/plugin-ecosystem.svg +35 -35
  44. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +254 -207
  45. data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
  46. data/documentation/diagrams/reporting-pipeline.svg +18 -18
  47. data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
  48. data/documentation/diagrams/sdr-radio-flow.svg +223 -91
  49. data/documentation/diagrams/sessions-cron-automation.svg +18 -18
  50. data/documentation/diagrams/swarm-multi-agent.svg +39 -39
  51. data/documentation/diagrams/web-application-testing.svg +26 -26
  52. data/documentation/diagrams/zero-day-research-flow.svg +25 -25
  53. data/documentation/pwn-ai-Agent.md +16 -10
  54. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  55. data/lib/pwn/ai/agent/assembly.rb +1 -1
  56. data/lib/pwn/ai/agent/btc.rb +1 -1
  57. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  58. data/lib/pwn/ai/agent/extrospection.rb +2562 -57
  59. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  60. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  61. data/lib/pwn/ai/agent/learning.rb +16 -16
  62. data/lib/pwn/ai/agent/loop.rb +1 -1
  63. data/lib/pwn/ai/agent/{introspection.rb → reflect.rb} +12 -12
  64. data/lib/pwn/ai/agent/sast.rb +1 -1
  65. data/lib/pwn/ai/agent/tools/extrospection.rb +311 -8
  66. data/lib/pwn/ai/agent/tools/learning.rb +7 -7
  67. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  68. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  69. data/lib/pwn/ai/agent.rb +1 -1
  70. data/lib/pwn/ai/open_ai.rb +10 -6
  71. data/lib/pwn/config.rb +5 -4
  72. data/lib/pwn/ffi/adalm_pluto.rb +498 -0
  73. data/lib/pwn/ffi/fftw.rb +192 -0
  74. data/lib/pwn/ffi/hack_rf.rb +193 -0
  75. data/lib/pwn/ffi/liquid.rb +244 -0
  76. data/lib/pwn/ffi/rtl_sdr.rb +210 -0
  77. data/lib/pwn/ffi/soapy_sdr.rb +177 -0
  78. data/lib/pwn/ffi/stdio.rb +9 -1
  79. data/lib/pwn/ffi/volk.rb +241 -0
  80. data/lib/pwn/ffi.rb +45 -2
  81. data/lib/pwn/plugins/burp_suite.rb +2 -2
  82. data/lib/pwn/sast/pom_version.rb +2 -2
  83. data/lib/pwn/sast/test_case_engine.rb +1 -1
  84. data/lib/pwn/sdr/decoder/adsb.rb +201 -12
  85. data/lib/pwn/sdr/decoder/apt.rb +19 -5
  86. data/lib/pwn/sdr/decoder/base.rb +314 -1
  87. data/lib/pwn/sdr/decoder/bluetooth.rb +91 -18
  88. data/lib/pwn/sdr/decoder/dect.rb +81 -23
  89. data/lib/pwn/sdr/decoder/dsp.rb +229 -15
  90. data/lib/pwn/sdr/decoder/flex.rb +23 -6
  91. data/lib/pwn/sdr/decoder/gps.rb +80 -18
  92. data/lib/pwn/sdr/decoder/gsm.rb +83 -28
  93. data/lib/pwn/sdr/decoder/iridium.rb +80 -18
  94. data/lib/pwn/sdr/decoder/lora.rb +84 -28
  95. data/lib/pwn/sdr/decoder/lte.rb +80 -18
  96. data/lib/pwn/sdr/decoder/morse.rb +23 -6
  97. data/lib/pwn/sdr/decoder/p25.rb +90 -31
  98. data/lib/pwn/sdr/decoder/pager.rb +23 -6
  99. data/lib/pwn/sdr/decoder/pocsag.rb +23 -6
  100. data/lib/pwn/sdr/decoder/rds.rb +219 -52
  101. data/lib/pwn/sdr/decoder/rfid.rb +81 -27
  102. data/lib/pwn/sdr/decoder/rtl433.rb +85 -27
  103. data/lib/pwn/sdr/decoder/rtty.rb +23 -6
  104. data/lib/pwn/sdr/decoder/wifi.rb +86 -32
  105. data/lib/pwn/sdr/decoder/zigbee.rb +88 -35
  106. data/lib/pwn/sdr/decoder.rb +6 -5
  107. data/lib/pwn/sdr/frequency_allocation.rb +124 -81
  108. data/lib/pwn/sdr/gqrx.rb +1513 -165
  109. data/lib/pwn/version.rb +1 -1
  110. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +96 -0
  111. data/spec/lib/pwn/ai/agent/{introspection_spec.rb → reflect_spec.rb} +3 -3
  112. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +8 -24
  113. data/spec/lib/pwn/ffi/adalm_pluto_spec.rb +37 -0
  114. data/spec/lib/pwn/ffi/fftw_spec.rb +26 -0
  115. data/spec/lib/pwn/ffi/hack_rf_spec.rb +25 -0
  116. data/spec/lib/pwn/ffi/liquid_spec.rb +42 -0
  117. data/spec/lib/pwn/ffi/rtl_sdr_spec.rb +24 -0
  118. data/spec/lib/pwn/ffi/soapy_sdr_spec.rb +25 -0
  119. data/spec/lib/pwn/ffi/volk_spec.rb +36 -0
  120. data/spec/lib/pwn/sdr/decoder/base_iq_spec.rb +65 -0
  121. data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +50 -4
  122. data/spec/lib/pwn/sdr/decoder/rds_spec.rb +45 -4
  123. data/third_party/pwn_rdoc.jsonl +279 -30
  124. metadata +21 -5
@@ -9,46 +9,46 @@
9
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 249.2)">
10
10
  <title>PWN_Pentest</title>
11
11
  <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-249.2 1337.95,-249.2 1337.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="450.88" y="-184" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">End&#45;to&#45;End Penetration Testing with PWN</text>
13
- <text xml:space="preserve" text-anchor="start" x="526.25" y="-172.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#94a3b8">recon → enumerate → exploit → post&#45;ex → report</text>
12
+ <text xml:space="preserve" text-anchor="start" x="450.88" y="-184" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">End&#45;to&#45;End Penetration Testing with PWN</text>
13
+ <text xml:space="preserve" text-anchor="start" x="526.25" y="-172.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">recon → enumerate → exploit → post&#45;ex → report</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_recon</title>
16
16
  <path fill="#022c22" stroke="#047857" d="M166,-8C166,-8 285.75,-8 285.75,-8 291.75,-8 297.75,-14 297.75,-20 297.75,-20 297.75,-147 297.75,-147 297.75,-153 291.75,-159 285.75,-159 285.75,-159 166,-159 166,-159 160,-159 154,-153 154,-147 154,-147 154,-20 154,-20 154,-14 160,-8 166,-8"/>
17
- <text xml:space="preserve" text-anchor="middle" x="225.88" y="-136" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#a7f3d0">1 · Recon</text>
17
+ <text xml:space="preserve" text-anchor="middle" x="225.88" y="-136" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">1 · Recon</text>
18
18
  </g>
19
19
  <g id="clust2" class="cluster">
20
20
  <title>cluster_enum</title>
21
21
  <path fill="#022c22" stroke="#047857" d="M379.75,-8C379.75,-8 497,-8 497,-8 503,-8 509,-14 509,-20 509,-20 509,-147 509,-147 509,-153 503,-159 497,-159 497,-159 379.75,-159 379.75,-159 373.75,-159 367.75,-153 367.75,-147 367.75,-147 367.75,-20 367.75,-20 367.75,-14 373.75,-8 379.75,-8"/>
22
- <text xml:space="preserve" text-anchor="middle" x="438.38" y="-136" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#a7f3d0">2 · Enumerate</text>
22
+ <text xml:space="preserve" text-anchor="middle" x="438.38" y="-136" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">2 · Enumerate</text>
23
23
  </g>
24
24
  <g id="clust3" class="cluster">
25
25
  <title>cluster_vuln</title>
26
26
  <path fill="#422006" stroke="#a16207" d="M591,-8C591,-8 700,-8 700,-8 706,-8 712,-14 712,-20 712,-20 712,-147 712,-147 712,-153 706,-159 700,-159 700,-159 591,-159 591,-159 585,-159 579,-153 579,-147 579,-147 579,-20 579,-20 579,-14 585,-8 591,-8"/>
27
- <text xml:space="preserve" text-anchor="middle" x="645.5" y="-136" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fde68a">3 · Vuln Scan</text>
27
+ <text xml:space="preserve" text-anchor="middle" x="645.5" y="-136" font-family="sans-Serif" font-size="20.00" fill="#fde68a">3 · Vuln Scan</text>
28
28
  </g>
29
29
  <g id="clust4" class="cluster">
30
30
  <title>cluster_xpl</title>
31
31
  <path fill="#450a0a" stroke="#b91c1c" d="M794,-8C794,-8 885.25,-8 885.25,-8 891.25,-8 897.25,-14 897.25,-20 897.25,-20 897.25,-147 897.25,-147 897.25,-153 891.25,-159 885.25,-159 885.25,-159 794,-159 794,-159 788,-159 782,-153 782,-147 782,-147 782,-20 782,-20 782,-14 788,-8 794,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="839.62" y="-136" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fecaca">4 · Exploit</text>
32
+ <text xml:space="preserve" text-anchor="middle" x="839.62" y="-136" font-family="sans-Serif" font-size="20.00" fill="#fecaca">4 · Exploit</text>
33
33
  </g>
34
34
  <g id="clust5" class="cluster">
35
35
  <title>cluster_post</title>
36
36
  <path fill="#2e1065" stroke="#6d28d9" d="M979.25,-8C979.25,-8 1068,-8 1068,-8 1074,-8 1080,-14 1080,-20 1080,-20 1080,-147 1080,-147 1080,-153 1074,-159 1068,-159 1068,-159 979.25,-159 979.25,-159 973.25,-159 967.25,-153 967.25,-147 967.25,-147 967.25,-20 967.25,-20 967.25,-14 973.25,-8 979.25,-8"/>
37
- <text xml:space="preserve" text-anchor="middle" x="1023.62" y="-136" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#ddd6fe">5 · Post&#45;Ex</text>
37
+ <text xml:space="preserve" text-anchor="middle" x="1023.62" y="-136" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">5 · Post&#45;Ex</text>
38
38
  </g>
39
39
  <!-- Scope -->
40
40
  <g id="node1" class="node">
41
41
  <title>Scope</title>
42
42
  <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M64,-86C64,-86 12,-86 12,-86 6,-86 0,-80 0,-74 0,-74 0,-62 0,-62 0,-56 6,-50 12,-50 12,-50 64,-50 64,-50 70,-50 76,-56 76,-62 76,-62 76,-74 76,-74 76,-80 70,-86 64,-86"/>
43
- <text xml:space="preserve" text-anchor="middle" x="38" y="-70.88" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">🎯 &#160;Scope</text>
44
- <text xml:space="preserve" text-anchor="middle" x="38" y="-58.12" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">targets · rules</text>
43
+ <text xml:space="preserve" text-anchor="middle" x="38" y="-70.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">🎯 &#160;Scope</text>
44
+ <text xml:space="preserve" text-anchor="middle" x="38" y="-58.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">targets · rules</text>
45
45
  </g>
46
46
  <!-- Shodan -->
47
47
  <g id="node2" class="node">
48
48
  <title>Shodan</title>
49
49
  <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M257.5,-52C257.5,-52 194.25,-52 194.25,-52 188.25,-52 182.25,-46 182.25,-40 182.25,-40 182.25,-28 182.25,-28 182.25,-22 188.25,-16 194.25,-16 194.25,-16 257.5,-16 257.5,-16 263.5,-16 269.5,-22 269.5,-28 269.5,-28 269.5,-40 269.5,-40 269.5,-46 263.5,-52 257.5,-52"/>
50
- <text xml:space="preserve" text-anchor="middle" x="225.88" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Shodan</text>
51
- <text xml:space="preserve" text-anchor="middle" x="225.88" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Hunter · IPInfo</text>
50
+ <text xml:space="preserve" text-anchor="middle" x="225.88" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Shodan</text>
51
+ <text xml:space="preserve" text-anchor="middle" x="225.88" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Hunter · IPInfo</text>
52
52
  </g>
53
53
  <!-- Scope&#45;&gt;Shodan -->
54
54
  <g id="edge1" class="edge">
@@ -60,8 +60,8 @@
60
60
  <g id="node3" class="node">
61
61
  <title>CrtSh</title>
62
62
  <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M277.75,-120C277.75,-120 174,-120 174,-120 168,-120 162,-114 162,-108 162,-108 162,-96 162,-96 162,-90 168,-84 174,-84 174,-84 277.75,-84 277.75,-84 283.75,-84 289.75,-90 289.75,-96 289.75,-96 289.75,-108 289.75,-108 289.75,-114 283.75,-120 277.75,-120"/>
63
- <text xml:space="preserve" text-anchor="middle" x="225.88" y="-104.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">bin/pwn_crt_sh</text>
64
- <text xml:space="preserve" text-anchor="middle" x="225.88" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">WWW::WaybackMachine</text>
63
+ <text xml:space="preserve" text-anchor="middle" x="225.88" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">bin/pwn_crt_sh</text>
64
+ <text xml:space="preserve" text-anchor="middle" x="225.88" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">WWW::WaybackMachine</text>
65
65
  </g>
66
66
  <!-- Scope&#45;&gt;CrtSh -->
67
67
  <g id="edge2" class="edge">
@@ -73,8 +73,8 @@
73
73
  <g id="node4" class="node">
74
74
  <title>Nmap</title>
75
75
  <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M476.25,-52C476.25,-52 399.5,-52 399.5,-52 393.5,-52 387.5,-46 387.5,-40 387.5,-40 387.5,-28 387.5,-28 387.5,-22 393.5,-16 399.5,-16 399.5,-16 476.25,-16 476.25,-16 482.25,-16 488.25,-22 488.25,-28 488.25,-28 488.25,-40 488.25,-40 488.25,-46 482.25,-52 476.25,-52"/>
76
- <text xml:space="preserve" text-anchor="middle" x="437.88" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::NmapIt</text>
77
- <text xml:space="preserve" text-anchor="middle" x="437.88" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">TCP/UDP discover</text>
76
+ <text xml:space="preserve" text-anchor="middle" x="437.88" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::NmapIt</text>
77
+ <text xml:space="preserve" text-anchor="middle" x="437.88" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TCP/UDP discover</text>
78
78
  </g>
79
79
  <!-- Shodan&#45;&gt;Nmap -->
80
80
  <g id="edge3" class="edge">
@@ -86,8 +86,8 @@
86
86
  <g id="node5" class="node">
87
87
  <title>Spider</title>
88
88
  <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M477.75,-120C477.75,-120 398,-120 398,-120 392,-120 386,-114 386,-108 386,-108 386,-96 386,-96 386,-90 392,-84 398,-84 398,-84 477.75,-84 477.75,-84 483.75,-84 489.75,-90 489.75,-96 489.75,-96 489.75,-108 489.75,-108 489.75,-114 483.75,-120 477.75,-120"/>
89
- <text xml:space="preserve" text-anchor="middle" x="437.88" y="-104.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Spider</text>
90
- <text xml:space="preserve" text-anchor="middle" x="437.88" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">TransparentBrowser</text>
89
+ <text xml:space="preserve" text-anchor="middle" x="437.88" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Spider</text>
90
+ <text xml:space="preserve" text-anchor="middle" x="437.88" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TransparentBrowser</text>
91
91
  </g>
92
92
  <!-- CrtSh&#45;&gt;Spider -->
93
93
  <g id="edge4" class="edge">
@@ -99,8 +99,8 @@
99
99
  <g id="node6" class="node">
100
100
  <title>Burp</title>
101
101
  <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M681.5,-120C681.5,-120 608.5,-120 608.5,-120 602.5,-120 596.5,-114 596.5,-108 596.5,-108 596.5,-96 596.5,-96 596.5,-90 602.5,-84 608.5,-84 608.5,-84 681.5,-84 681.5,-84 687.5,-84 693.5,-90 693.5,-96 693.5,-96 693.5,-108 693.5,-108 693.5,-114 687.5,-120 681.5,-120"/>
102
- <text xml:space="preserve" text-anchor="middle" x="645" y="-104.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::BurpSuite</text>
103
- <text xml:space="preserve" text-anchor="middle" x="645" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">active scan</text>
102
+ <text xml:space="preserve" text-anchor="middle" x="645" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::BurpSuite</text>
103
+ <text xml:space="preserve" text-anchor="middle" x="645" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">active scan</text>
104
104
  </g>
105
105
  <!-- Nmap&#45;&gt;Burp -->
106
106
  <g id="edge5" class="edge">
@@ -112,8 +112,8 @@
112
112
  <g id="node7" class="node">
113
113
  <title>Nessus</title>
114
114
  <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M686,-52C686,-52 604,-52 604,-52 598,-52 592,-46 592,-40 592,-40 592,-28 592,-28 592,-22 598,-16 604,-16 604,-16 686,-16 686,-16 692,-16 698,-22 698,-28 698,-28 698,-40 698,-40 698,-46 692,-52 686,-52"/>
115
- <text xml:space="preserve" text-anchor="middle" x="645" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">NessusCloud</text>
116
- <text xml:space="preserve" text-anchor="middle" x="645" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">OpenVAS · Nexpose</text>
115
+ <text xml:space="preserve" text-anchor="middle" x="645" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">NessusCloud</text>
116
+ <text xml:space="preserve" text-anchor="middle" x="645" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OpenVAS · Nexpose</text>
117
117
  </g>
118
118
  <!-- Nmap&#45;&gt;Nessus -->
119
119
  <g id="edge6" class="edge">
@@ -131,7 +131,7 @@
131
131
  <g id="node8" class="node">
132
132
  <title>MSF</title>
133
133
  <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M877.25,-120C877.25,-120 802,-120 802,-120 796,-120 790,-114 790,-108 790,-108 790,-96 790,-96 790,-90 796,-84 802,-84 802,-84 877.25,-84 877.25,-84 883.25,-84 889.25,-90 889.25,-96 889.25,-96 889.25,-108 889.25,-108 889.25,-114 883.25,-120 877.25,-120"/>
134
- <text xml:space="preserve" text-anchor="middle" x="839.62" y="-98.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Metasploit</text>
134
+ <text xml:space="preserve" text-anchor="middle" x="839.62" y="-98.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Metasploit</text>
135
135
  </g>
136
136
  <!-- Burp&#45;&gt;MSF -->
137
137
  <g id="edge8" class="edge">
@@ -143,8 +143,8 @@
143
143
  <g id="node9" class="node">
144
144
  <title>Fuzz</title>
145
145
  <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M866.75,-52C866.75,-52 812.5,-52 812.5,-52 806.5,-52 800.5,-46 800.5,-40 800.5,-40 800.5,-28 800.5,-28 800.5,-22 806.5,-16 812.5,-16 812.5,-16 866.75,-16 866.75,-16 872.75,-16 878.75,-22 878.75,-28 878.75,-28 878.75,-40 878.75,-40 878.75,-46 872.75,-52 866.75,-52"/>
146
- <text xml:space="preserve" text-anchor="middle" x="839.62" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Fuzz</text>
147
- <text xml:space="preserve" text-anchor="middle" x="839.62" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Packet · Sock</text>
146
+ <text xml:space="preserve" text-anchor="middle" x="839.62" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Fuzz</text>
147
+ <text xml:space="preserve" text-anchor="middle" x="839.62" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Packet · Sock</text>
148
148
  </g>
149
149
  <!-- Nessus&#45;&gt;Fuzz -->
150
150
  <g id="edge9" class="edge">
@@ -156,8 +156,8 @@
156
156
  <g id="node10" class="node">
157
157
  <title>Beef</title>
158
158
  <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1052.5,-120C1052.5,-120 993.75,-120 993.75,-120 987.75,-120 981.75,-114 981.75,-108 981.75,-108 981.75,-96 981.75,-96 981.75,-90 987.75,-84 993.75,-84 993.75,-84 1052.5,-84 1052.5,-84 1058.5,-84 1064.5,-90 1064.5,-96 1064.5,-96 1064.5,-108 1064.5,-108 1064.5,-114 1058.5,-120 1052.5,-120"/>
159
- <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-104.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::BeEF</text>
160
- <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Android · Serial</text>
159
+ <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::BeEF</text>
160
+ <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Android · Serial</text>
161
161
  </g>
162
162
  <!-- MSF&#45;&gt;Beef -->
163
163
  <g id="edge10" class="edge">
@@ -169,8 +169,8 @@
169
169
  <g id="node11" class="node">
170
170
  <title>Tor</title>
171
171
  <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1045,-52C1045,-52 1001.25,-52 1001.25,-52 995.25,-52 989.25,-46 989.25,-40 989.25,-40 989.25,-28 989.25,-28 989.25,-22 995.25,-16 1001.25,-16 1001.25,-16 1045,-16 1045,-16 1051,-16 1057,-22 1057,-28 1057,-28 1057,-40 1057,-40 1057,-46 1051,-52 1045,-52"/>
172
- <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Tor</text>
173
- <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">pivot / exfil</text>
172
+ <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Tor</text>
173
+ <text xml:space="preserve" text-anchor="middle" x="1023.12" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pivot / exfil</text>
174
174
  </g>
175
175
  <!-- Fuzz&#45;&gt;Tor -->
176
176
  <g id="edge11" class="edge">
@@ -182,8 +182,8 @@
182
182
  <g id="node12" class="node">
183
183
  <title>Report</title>
184
184
  <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M1282.75,-86C1282.75,-86 1170,-86 1170,-86 1164,-86 1158,-80 1158,-74 1158,-74 1158,-62 1158,-62 1158,-56 1164,-50 1170,-50 1170,-50 1282.75,-50 1282.75,-50 1288.75,-50 1294.75,-56 1294.75,-62 1294.75,-62 1294.75,-74 1294.75,-74 1294.75,-80 1288.75,-86 1282.75,-86"/>
185
- <text xml:space="preserve" text-anchor="middle" x="1226.38" y="-70.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">PWN::Reports</text>
186
- <text xml:space="preserve" text-anchor="middle" x="1226.38" y="-58.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">HTML · JSON · DefectDojo</text>
185
+ <text xml:space="preserve" text-anchor="middle" x="1226.38" y="-70.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Reports</text>
186
+ <text xml:space="preserve" text-anchor="middle" x="1226.38" y="-58.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">HTML · JSON · DefectDojo</text>
187
187
  </g>
188
188
  <!-- Beef&#45;&gt;Report -->
189
189
  <g id="edge12" class="edge">
@@ -4,195 +4,201 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Persistence Pages: 1 -->
7
- <svg width="604pt" height="920pt"
8
- viewBox="0.00 0.00 604.00 920.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 876.45)">
7
+ <svg width="604pt" height="986pt"
8
+ viewBox="0.00 0.00 604.00 986.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 942.45)">
10
10
  <title>PWN_Persistence</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-876.45 560.95,-876.45 560.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="8" y="-811.25" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">~/.pwn/ — Everything PWN Persists Across Sessions</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-942.45 560.95,-942.45 560.95,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="8" y="-877.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">~/.pwn/ — Everything PWN Persists Across Sessions</text>
13
13
  <!-- Root -->
14
14
  <g id="node1" class="node">
15
15
  <title>Root</title>
16
- <polygon fill="#7dd3fc" stroke="#334155" stroke-width="1.3" points="158.88,-415 155.88,-419 134.88,-419 131.88,-415 99.38,-415 99.38,-379 158.88,-379 158.88,-415"/>
17
- <text xml:space="preserve" text-anchor="middle" x="129.12" y="-392.15" font-family="Helvetica,sans-Serif" font-size="13.00" fill="#0f172a">~/.pwn/</text>
16
+ <polygon fill="#7dd3fc" stroke="#334155" stroke-width="1.3" points="147.25,-444 144.25,-448 123.25,-448 120.25,-444 87.75,-444 87.75,-408 147.25,-408 147.25,-444"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="117.5" y="-421.15" font-family="sans-Serif" font-size="13.00" fill="#0f172a">~/.pwn/</text>
18
18
  </g>
19
19
  <!-- cfg -->
20
20
  <g id="node2" class="node">
21
21
  <title>cfg</title>
22
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M437.12,-798C437.12,-800.21 406.98,-802 369.88,-802 332.77,-802 302.62,-800.21 302.62,-798 302.62,-798 302.62,-762 302.62,-762 302.62,-759.79 332.77,-758 369.88,-758 406.98,-758 437.12,-759.79 437.12,-762 437.12,-762 437.12,-798 437.12,-798"/>
23
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M437.12,-798C437.12,-795.79 406.98,-794 369.88,-794 332.77,-794 302.62,-795.79 302.62,-798"/>
24
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-782.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">config.yml</text>
25
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-770.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">engines · keys · agent opts</text>
22
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M406.38,-864C406.38,-866.21 376.23,-868 339.12,-868 302.02,-868 271.88,-866.21 271.88,-864 271.88,-864 271.88,-828 271.88,-828 271.88,-825.79 302.02,-824 339.12,-824 376.23,-824 406.38,-825.79 406.38,-828 406.38,-828 406.38,-864 406.38,-864"/>
23
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M406.38,-864C406.38,-861.79 376.23,-860 339.12,-860 302.02,-860 271.88,-861.79 271.88,-864"/>
24
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-848.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">config.yml</text>
25
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-836.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engines · keys · agent opts</text>
26
26
  </g>
27
27
  <!-- Root&#45;&gt;cfg -->
28
28
  <g id="edge1" class="edge">
29
29
  <title>Root&#45;&gt;cfg</title>
30
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.28,-405.7C170.11,-410.21 181.68,-416.77 189.62,-426 287.23,-539.32 189.97,-636.38 290.62,-747 293.03,-749.64 295.67,-752.07 298.49,-754.32"/>
31
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="296.89,-756.18 304.01,-758.25 299.74,-752.19 296.89,-756.18"/>
30
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M119.27,-444.62C122.81,-505.96 142.31,-704 248.25,-813 252.89,-817.78 258.29,-821.87 264.08,-825.37"/>
31
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="262.83,-827.48 270.14,-828.69 265.18,-823.18 262.83,-827.48"/>
32
32
  </g>
33
33
  <!-- mem -->
34
34
  <g id="node3" class="node">
35
35
  <title>mem</title>
36
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M437.88,-732C437.88,-734.21 407.4,-736 369.88,-736 332.35,-736 301.88,-734.21 301.88,-732 301.88,-732 301.88,-696 301.88,-696 301.88,-693.79 332.35,-692 369.88,-692 407.4,-692 437.88,-693.79 437.88,-696 437.88,-696 437.88,-732 437.88,-732"/>
37
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M437.88,-732C437.88,-729.79 407.4,-728 369.88,-728 332.35,-728 301.88,-729.79 301.88,-732"/>
38
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-716.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
39
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-704.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">facts · prefs · lessons · env</text>
36
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M407.12,-798C407.12,-800.21 376.65,-802 339.12,-802 301.6,-802 271.12,-800.21 271.12,-798 271.12,-798 271.12,-762 271.12,-762 271.12,-759.79 301.6,-758 339.12,-758 376.65,-758 407.12,-759.79 407.12,-762 407.12,-762 407.12,-798 407.12,-798"/>
37
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M407.12,-798C407.12,-795.79 376.65,-794 339.12,-794 301.6,-794 271.12,-795.79 271.12,-798"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-782.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
39
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-770.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">facts · prefs · lessons · env</text>
40
40
  </g>
41
41
  <!-- Root&#45;&gt;mem -->
42
42
  <g id="edge2" class="edge">
43
43
  <title>Root&#45;&gt;mem</title>
44
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.25,-406.13C169.94,-410.68 181.43,-417.15 189.62,-426 272.47,-515.42 205.38,-593.86 290.62,-681 293.32,-683.75 296.28,-686.29 299.42,-688.62"/>
45
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="297.55,-690.31 304.72,-692.2 300.29,-686.25 297.55,-690.31"/>
44
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M120.72,-444.47C128.21,-498.68 157.35,-658.98 248.25,-747 252.68,-751.29 257.72,-755.03 263.09,-758.29"/>
45
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="261.84,-760.4 269.15,-761.64 264.21,-756.11 261.84,-760.4"/>
46
46
  </g>
47
47
  <!-- skl -->
48
48
  <g id="node4" class="node">
49
49
  <title>skl</title>
50
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M436,-666C436,-668.21 406.36,-670 369.88,-670 333.39,-670 303.75,-668.21 303.75,-666 303.75,-666 303.75,-630 303.75,-630 303.75,-627.79 333.39,-626 369.88,-626 406.36,-626 436,-627.79 436,-630 436,-630 436,-666 436,-666"/>
51
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M436,-666C436,-663.79 406.36,-662 369.88,-662 333.39,-662 303.75,-663.79 303.75,-666"/>
52
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-650.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
53
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-638.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">reusable procedures + refs</text>
50
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M405.25,-732C405.25,-734.21 375.61,-736 339.12,-736 302.64,-736 273,-734.21 273,-732 273,-732 273,-696 273,-696 273,-693.79 302.64,-692 339.12,-692 375.61,-692 405.25,-693.79 405.25,-696 405.25,-696 405.25,-732 405.25,-732"/>
51
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M405.25,-732C405.25,-729.79 375.61,-728 339.12,-728 302.64,-728 273,-729.79 273,-732"/>
52
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-716.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
53
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-704.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reusable procedures + refs</text>
54
54
  </g>
55
55
  <!-- Root&#45;&gt;skl -->
56
56
  <g id="edge3" class="edge">
57
57
  <title>Root&#45;&gt;skl</title>
58
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.35,-406.89C169.8,-411.49 181.1,-417.79 189.62,-426 258.21,-492.08 220.26,-550.81 290.62,-615 293.6,-617.71 296.83,-620.22 300.23,-622.54"/>
59
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="298.77,-624.52 306,-626.16 301.37,-620.37 298.77,-624.52"/>
58
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M122.92,-444.62C134.89,-491.14 172.29,-613.56 248.25,-681 253.23,-685.42 258.86,-689.27 264.8,-692.61"/>
59
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="263.65,-694.78 271,-695.82 265.91,-690.43 263.65,-694.78"/>
60
60
  </g>
61
61
  <!-- lrn -->
62
62
  <g id="node5" class="node">
63
63
  <title>lrn</title>
64
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M410.12,-600C410.12,-602.21 392.08,-604 369.88,-604 347.67,-604 329.62,-602.21 329.62,-600 329.62,-600 329.62,-564 329.62,-564 329.62,-561.79 347.67,-560 369.88,-560 392.08,-560 410.12,-561.79 410.12,-564 410.12,-564 410.12,-600 410.12,-600"/>
65
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M410.12,-600C410.12,-597.79 392.08,-596 369.88,-596 347.67,-596 329.62,-597.79 329.62,-600"/>
66
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-584.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
67
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">task outcomes</text>
64
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M379.38,-666C379.38,-668.21 361.33,-670 339.12,-670 316.92,-670 298.88,-668.21 298.88,-666 298.88,-666 298.88,-630 298.88,-630 298.88,-627.79 316.92,-626 339.12,-626 361.33,-626 379.38,-627.79 379.38,-630 379.38,-630 379.38,-666 379.38,-666"/>
65
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M379.38,-666C379.38,-663.79 361.33,-662 339.12,-662 316.92,-662 298.88,-663.79 298.88,-666"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-650.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">task outcomes</text>
68
68
  </g>
69
69
  <!-- Root&#45;&gt;lrn -->
70
70
  <g id="edge4" class="edge">
71
71
  <title>Root&#45;&gt;lrn</title>
72
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.43,-408.25C169.55,-412.9 180.61,-418.88 189.62,-426 245.14,-469.84 233.94,-506.69 290.62,-549 299.85,-555.88 310.72,-561.64 321.38,-566.31"/>
73
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="320.14,-568.45 327.54,-568.88 322.02,-563.92 320.14,-568.45"/>
72
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M126.39,-444.39C143.32,-481.78 186.65,-567.14 248.25,-615 260.54,-624.55 275.87,-631.53 290.37,-636.54"/>
73
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="289.31,-638.78 296.73,-638.61 290.83,-634.12 289.31,-638.78"/>
74
74
  </g>
75
75
  <!-- mis -->
76
76
  <g id="node6" class="node">
77
77
  <title>mis</title>
78
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M449.12,-532.75C449.12,-535.78 413.6,-538.25 369.88,-538.25 326.15,-538.25 290.62,-535.78 290.62,-532.75 290.62,-532.75 290.62,-483.25 290.62,-483.25 290.62,-480.22 326.15,-477.75 369.88,-477.75 413.6,-477.75 449.12,-480.22 449.12,-483.25 449.12,-483.25 449.12,-532.75 449.12,-532.75"/>
79
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M449.12,-532.75C449.12,-529.72 413.6,-527.25 369.88,-527.25 326.15,-527.25 290.62,-529.72 290.62,-532.75"/>
80
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
81
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">failure fingerprints · fixes</text>
82
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
78
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M418.38,-598.75C418.38,-601.78 382.85,-604.25 339.12,-604.25 295.4,-604.25 259.88,-601.78 259.88,-598.75 259.88,-598.75 259.88,-549.25 259.88,-549.25 259.88,-546.22 295.4,-543.75 339.12,-543.75 382.85,-543.75 418.38,-546.22 418.38,-549.25 418.38,-549.25 418.38,-598.75 418.38,-598.75"/>
79
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M418.38,-598.75C418.38,-595.72 382.85,-593.25 339.12,-593.25 295.4,-593.25 259.88,-595.72 259.88,-598.75"/>
80
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-582.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
81
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-570.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">failure fingerprints · fixes</text>
82
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-558.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
83
83
  </g>
84
84
  <!-- Root&#45;&gt;mis -->
85
85
  <g id="edge5" class="edge">
86
86
  <title>Root&#45;&gt;mis</title>
87
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.4,-410.61C193.72,-426.57 251.81,-453.57 298.12,-475.1"/>
88
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="296.85,-477.21 304.23,-477.94 298.91,-472.77 296.85,-477.21"/>
87
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M137.49,-444.4C161.73,-467.23 205.67,-506.38 248.25,-533 252.64,-535.74 257.24,-538.41 261.95,-540.98"/>
88
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="260.61,-543.05 267.95,-544.16 262.91,-538.72 260.61,-543.05"/>
89
89
  </g>
90
90
  <!-- met -->
91
91
  <g id="node7" class="node">
92
92
  <title>met</title>
93
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M415.75,-452C415.75,-454.21 395.19,-456 369.88,-456 344.56,-456 324,-454.21 324,-452 324,-452 324,-416 324,-416 324,-413.79 344.56,-412 369.88,-412 395.19,-412 415.75,-413.79 415.75,-416 415.75,-416 415.75,-452 415.75,-452"/>
94
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M415.75,-452C415.75,-449.79 395.19,-448 369.88,-448 344.56,-448 324,-449.79 324,-452"/>
95
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-436.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">metrics.json</text>
96
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-424.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">per&#45;tool telemetry</text>
93
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M385,-518C385,-520.21 364.44,-522 339.12,-522 313.81,-522 293.25,-520.21 293.25,-518 293.25,-518 293.25,-482 293.25,-482 293.25,-479.79 313.81,-478 339.12,-478 364.44,-478 385,-479.79 385,-482 385,-482 385,-518 385,-518"/>
94
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M385,-518C385,-515.79 364.44,-514 339.12,-514 313.81,-514 293.25,-515.79 293.25,-518"/>
95
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-502.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics.json</text>
96
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-490.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">per&#45;tool telemetry</text>
97
97
  </g>
98
98
  <!-- Root&#45;&gt;met -->
99
99
  <g id="edge6" class="edge">
100
100
  <title>Root&#45;&gt;met</title>
101
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.4,-401.54C198.05,-407.53 266.81,-418.18 314.98,-425.65"/>
102
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="314.49,-428.05 321.78,-426.7 315.24,-423.21 314.49,-428.05"/>
101
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M147.66,-435.83C182.52,-447.57 241.55,-467.46 284.67,-481.99"/>
102
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="283.8,-484.28 291.22,-484.2 285.37,-479.64 283.8,-484.28"/>
103
103
  </g>
104
104
  <!-- ext -->
105
105
  <g id="node8" class="node">
106
106
  <title>ext</title>
107
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M432.62,-384.75C432.62,-387.78 404.5,-390.25 369.88,-390.25 335.25,-390.25 307.12,-387.78 307.12,-384.75 307.12,-384.75 307.12,-335.25 307.12,-335.25 307.12,-332.22 335.25,-329.75 369.88,-329.75 404.5,-329.75 432.62,-332.22 432.62,-335.25 432.62,-335.25 432.62,-384.75 432.62,-384.75"/>
108
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M432.62,-384.75C432.62,-381.72 404.5,-379.25 369.88,-379.25 335.25,-379.25 307.12,-381.72 307.12,-384.75"/>
109
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-368.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
110
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-356.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">host snapshot + rf + web</text>
111
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-344.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">+ observations</text>
107
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M430,-450.75C430,-453.78 389.27,-456.25 339.12,-456.25 288.98,-456.25 248.25,-453.78 248.25,-450.75 248.25,-450.75 248.25,-401.25 248.25,-401.25 248.25,-398.22 288.98,-395.75 339.12,-395.75 389.27,-395.75 430,-398.22 430,-401.25 430,-401.25 430,-450.75 430,-450.75"/>
108
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M430,-450.75C430,-447.72 389.27,-445.25 339.12,-445.25 288.98,-445.25 248.25,-447.72 248.25,-450.75"/>
109
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-434.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
110
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-422.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot (host/net/tc/repo/env/rf/web)</text>
111
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-410.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ previous + observations[]</text>
112
112
  </g>
113
113
  <!-- Root&#45;&gt;ext -->
114
114
  <g id="edge7" class="edge">
115
115
  <title>Root&#45;&gt;ext</title>
116
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.4,-392.46C193.75,-387.14 251.88,-378.13 298.21,-370.95"/>
117
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="298.52,-373.38 305.07,-369.89 297.77,-368.54 298.52,-373.38"/>
116
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M147.66,-426C171.33,-426 206.13,-426 239.53,-426"/>
117
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="239.32,-428.45 246.32,-426 239.32,-423.55 239.32,-428.45"/>
118
+ </g>
119
+ <!-- ews -->
120
+ <g id="node9" class="node">
121
+ <title>ews</title>
122
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M415.38,-370C415.38,-372.21 381.2,-374 339.12,-374 297.05,-374 262.88,-372.21 262.88,-370 262.88,-370 262.88,-334 262.88,-334 262.88,-331.79 297.05,-330 339.12,-330 381.2,-330 415.38,-331.79 415.38,-334 415.38,-334 415.38,-370 415.38,-370"/>
123
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M415.38,-370C415.38,-367.79 381.2,-366 339.12,-366 297.05,-366 262.88,-367.79 262.88,-370"/>
124
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-354.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection/web/*.png</text>
125
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-342.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">probe_web / extro_watch shots</text>
126
+ </g>
127
+ <!-- Root&#45;&gt;ews -->
128
+ <g id="edge8" class="edge">
129
+ <title>Root&#45;&gt;ews</title>
130
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M147.66,-416.17C177.86,-406 226.18,-389.72 266.59,-376.1"/>
131
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="267.13,-378.51 272.98,-373.95 265.57,-373.86 267.13,-378.51"/>
118
132
  </g>
119
133
  <!-- ses -->
120
134
  <g id="node10" class="node">
121
135
  <title>ses</title>
122
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M412.38,-304C412.38,-306.21 393.33,-308 369.88,-308 346.42,-308 327.38,-306.21 327.38,-304 327.38,-304 327.38,-268 327.38,-268 327.38,-265.79 346.42,-264 369.88,-264 393.33,-264 412.38,-265.79 412.38,-268 412.38,-268 412.38,-304 412.38,-304"/>
123
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M412.38,-304C412.38,-301.79 393.33,-300 369.88,-300 346.42,-300 327.38,-301.79 327.38,-304"/>
124
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
125
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-276.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
136
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M381.62,-304C381.62,-306.21 362.58,-308 339.12,-308 315.67,-308 296.62,-306.21 296.62,-304 296.62,-304 296.62,-268 296.62,-268 296.62,-265.79 315.67,-264 339.12,-264 362.58,-264 381.62,-265.79 381.62,-268 381.62,-268 381.62,-304 381.62,-304"/>
137
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M381.62,-304C381.62,-301.79 362.58,-300 339.12,-300 315.67,-300 296.62,-301.79 296.62,-304"/>
138
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-288.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
139
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-276.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
126
140
  </g>
127
141
  <!-- Root&#45;&gt;ses -->
128
- <g id="edge8" class="edge">
142
+ <g id="edge9" class="edge">
129
143
  <title>Root&#45;&gt;ses</title>
130
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M159.48,-382.15C191.5,-366.09 244.35,-339.98 290.62,-319 299.75,-314.86 309.55,-310.59 319.01,-306.56"/>
131
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="319.85,-308.87 325.33,-303.88 317.93,-304.36 319.85,-308.87"/>
144
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M136.76,-407.48C160.58,-384.16 204.43,-344.13 248.25,-319 260.55,-311.95 274.63,-305.93 287.94,-301.04"/>
145
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.76,-303.35 294.53,-298.7 287.12,-298.73 288.76,-303.35"/>
132
146
  </g>
133
147
  <!-- crn -->
134
148
  <g id="node11" class="node">
135
149
  <title>crn</title>
136
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M425.5,-238C425.5,-240.21 400.57,-242 369.88,-242 339.18,-242 314.25,-240.21 314.25,-238 314.25,-238 314.25,-202 314.25,-202 314.25,-199.79 339.18,-198 369.88,-198 400.57,-198 425.5,-199.79 425.5,-202 425.5,-202 425.5,-238 425.5,-238"/>
137
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M425.5,-238C425.5,-235.79 400.57,-234 369.88,-234 339.18,-234 314.25,-235.79 314.25,-238"/>
138
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">cron/jobs.yml</text>
139
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-210.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">scheduled jobs + logs</text>
150
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M394.75,-238C394.75,-240.21 369.82,-242 339.12,-242 308.43,-242 283.5,-240.21 283.5,-238 283.5,-238 283.5,-202 283.5,-202 283.5,-199.79 308.43,-198 339.12,-198 369.82,-198 394.75,-199.79 394.75,-202 394.75,-202 394.75,-238 394.75,-238"/>
151
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M394.75,-238C394.75,-235.79 369.82,-234 339.12,-234 308.43,-234 283.5,-235.79 283.5,-238"/>
152
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-222.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron/jobs.yml</text>
153
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-210.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">scheduled jobs + logs</text>
140
154
  </g>
141
155
  <!-- Root&#45;&gt;crn -->
142
- <g id="edge9" class="edge">
156
+ <g id="edge10" class="edge">
143
157
  <title>Root&#45;&gt;crn</title>
144
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M146.82,-378.47C174.37,-348.78 232.14,-290.09 290.62,-253 295.59,-249.85 300.91,-246.88 306.34,-244.12"/>
145
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="307.1,-246.47 312.32,-241.2 304.95,-242.07 307.1,-246.47"/>
158
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M127.64,-407.58C145.89,-372.62 190.11,-296.25 248.25,-253 256.46,-246.89 265.91,-241.82 275.54,-237.63"/>
159
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="276.2,-240.01 281.74,-235.08 274.34,-235.47 276.2,-240.01"/>
146
160
  </g>
147
161
  <!-- agt -->
148
162
  <g id="node12" class="node">
149
163
  <title>agt</title>
150
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M412.75,-172C412.75,-174.21 393.53,-176 369.88,-176 346.22,-176 327,-174.21 327,-172 327,-172 327,-136 327,-136 327,-133.79 346.22,-132 369.88,-132 393.53,-132 412.75,-133.79 412.75,-136 412.75,-136 412.75,-172 412.75,-172"/>
151
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M412.75,-172C412.75,-169.79 393.53,-168 369.88,-168 346.22,-168 327,-169.79 327,-172"/>
152
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">agents.yml</text>
153
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-144.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">persona registry</text>
164
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M382,-172C382,-174.21 362.78,-176 339.12,-176 315.47,-176 296.25,-174.21 296.25,-172 296.25,-172 296.25,-136 296.25,-136 296.25,-133.79 315.47,-132 339.12,-132 362.78,-132 382,-133.79 382,-136 382,-136 382,-172 382,-172"/>
165
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M382,-172C382,-169.79 362.78,-168 339.12,-168 315.47,-168 296.25,-169.79 296.25,-172"/>
166
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-156.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agents.yml</text>
167
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-144.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">persona registry</text>
154
168
  </g>
155
169
  <!-- Root&#45;&gt;agt -->
156
- <g id="edge10" class="edge">
170
+ <g id="edge11" class="edge">
157
171
  <title>Root&#45;&gt;agt</title>
158
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M139.88,-378.41C161.77,-338.3 218.59,-242.75 290.62,-187 299,-180.52 308.83,-175.08 318.64,-170.6"/>
159
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="319.5,-172.9 324.95,-167.88 317.55,-168.41 319.5,-172.9"/>
172
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M123.56,-407.57C136.64,-363.23 175.73,-249.67 248.25,-187 259.5,-177.28 273.86,-170.32 287.78,-165.39"/>
173
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.44,-167.75 294.32,-163.23 286.91,-163.09 288.44,-167.75"/>
160
174
  </g>
161
175
  <!-- swm -->
162
176
  <g id="node13" class="node">
163
177
  <title>swm</title>
164
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M424.75,-106C424.75,-108.21 400.15,-110 369.88,-110 339.6,-110 315,-108.21 315,-106 315,-106 315,-70 315,-70 315,-67.79 339.6,-66 369.88,-66 400.15,-66 424.75,-67.79 424.75,-70 424.75,-70 424.75,-106 424.75,-106"/>
165
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M424.75,-106C424.75,-103.79 400.15,-102 369.88,-102 339.6,-102 315,-103.79 315,-106"/>
166
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-90.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
167
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">multi&#45;agent chat</text>
178
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M394,-106C394,-108.21 369.4,-110 339.12,-110 308.85,-110 284.25,-108.21 284.25,-106 284.25,-106 284.25,-70 284.25,-70 284.25,-67.79 308.85,-66 339.12,-66 369.4,-66 394,-67.79 394,-70 394,-70 394,-106 394,-106"/>
179
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M394,-106C394,-103.79 369.4,-102 339.12,-102 308.85,-102 284.25,-103.79 284.25,-106"/>
180
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-90.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
181
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-78.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">multi&#45;agent chat</text>
168
182
  </g>
169
183
  <!-- Root&#45;&gt;swm -->
170
- <g id="edge11" class="edge">
184
+ <g id="edge12" class="edge">
171
185
  <title>Root&#45;&gt;swm</title>
172
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M136.17,-378.51C152.96,-329.82 204.69,-196.61 290.62,-121 295.53,-116.69 301.08,-112.88 306.9,-109.53"/>
173
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="307.91,-111.77 312.93,-106.31 305.6,-107.44 307.91,-111.77"/>
186
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M121.14,-407.69C129.62,-355.44 160.89,-204.07 248.25,-121 256.12,-113.52 265.83,-107.7 275.92,-103.19"/>
187
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="276.62,-105.56 282.16,-100.63 274.75,-101.03 276.62,-105.56"/>
174
188
  </g>
175
189
  <!-- hist -->
176
190
  <g id="node14" class="node">
177
191
  <title>hist</title>
178
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M410.12,-40C410.12,-42.21 392.08,-44 369.88,-44 347.67,-44 329.62,-42.21 329.62,-40 329.62,-40 329.62,-4 329.62,-4 329.62,-1.79 347.67,0 369.88,0 392.08,0 410.12,-1.79 410.12,-4 410.12,-4 410.12,-40 410.12,-40"/>
179
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M410.12,-40C410.12,-37.79 392.08,-36 369.88,-36 347.67,-36 329.62,-37.79 329.62,-40"/>
180
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn_history</text>
181
- <text xml:space="preserve" text-anchor="middle" x="369.88" y="-12.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">REPL history</text>
192
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M379.38,-40C379.38,-42.21 361.33,-44 339.12,-44 316.92,-44 298.88,-42.21 298.88,-40 298.88,-40 298.88,-4 298.88,-4 298.88,-1.79 316.92,0 339.12,0 361.33,0 379.38,-1.79 379.38,-4 379.38,-4 379.38,-40 379.38,-40"/>
193
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M379.38,-40C379.38,-37.79 361.33,-36 339.12,-36 316.92,-36 298.88,-37.79 298.88,-40"/>
194
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn_history</text>
195
+ <text xml:space="preserve" text-anchor="middle" x="339.12" y="-12.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">REPL history</text>
182
196
  </g>
183
197
  <!-- Root&#45;&gt;hist -->
184
- <g id="edge12" class="edge">
198
+ <g id="edge13" class="edge">
185
199
  <title>Root&#45;&gt;hist</title>
186
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M133.83,-378.7C146.09,-322.66 190.37,-151.35 290.62,-55 299.26,-46.7 310.31,-40.34 321.35,-35.53"/>
187
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="322.24,-37.81 327.82,-32.92 320.41,-33.27 322.24,-37.81"/>
188
- </g>
189
- <!-- ews -->
190
- <g id="node9" class="node">
191
- <title>ews</title>
192
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M189.62,-477C189.62,-479.21 162.51,-481 129.12,-481 95.74,-481 68.62,-479.21 68.62,-477 68.62,-477 68.62,-441 68.62,-441 68.62,-438.79 95.74,-437 129.12,-437 162.51,-437 189.62,-438.79 189.62,-441 189.62,-441 189.62,-477 189.62,-477"/>
193
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M189.62,-477C189.62,-474.79 162.51,-473 129.12,-473 95.74,-473 68.62,-474.79 68.62,-477"/>
194
- <text xml:space="preserve" text-anchor="middle" x="129.12" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">extrospection/web/*.png</text>
195
- <text xml:space="preserve" text-anchor="middle" x="129.12" y="-449.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">headless screenshots</text>
200
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M119.56,-407.72C123.96,-348.39 145.8,-159.05 248.25,-55 259.57,-43.51 275.22,-35.99 290.29,-31.08"/>
201
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="290.97,-33.43 296.98,-29.08 289.57,-28.74 290.97,-33.43"/>
196
202
  </g>
197
203
  </g>
198
204
  </svg>