pwn 0.5.618 → 0.5.621

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +14 -6
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/Agent-Tool-Registry.md +4 -4
  6. data/documentation/Cron.md +13 -0
  7. data/documentation/Diagrams.md +6 -2
  8. data/documentation/Extrospection.md +96 -11
  9. data/documentation/Home.md +5 -4
  10. data/documentation/How-PWN-Works.md +7 -4
  11. data/documentation/Mistakes.md +97 -0
  12. data/documentation/Persistence.md +4 -1
  13. data/documentation/SDR.md +23 -5
  14. data/documentation/Skills-Memory-Learning.md +16 -5
  15. data/documentation/Transparent-Browser.md +18 -1
  16. data/documentation/diagrams/agent-tool-registry.svg +103 -100
  17. data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
  18. data/documentation/diagrams/aws-cloud-security.svg +25 -25
  19. data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
  20. data/documentation/diagrams/code-scanning-sast.svg +25 -25
  21. data/documentation/diagrams/cron-scheduling.svg +23 -23
  22. data/documentation/diagrams/dot/agent-tool-registry.dot +3 -3
  23. data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -10
  24. data/documentation/diagrams/dot/memory-skills-detailed.dot +16 -5
  25. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  26. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  27. data/documentation/diagrams/dot/persistence-filesystem.dot +4 -2
  28. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +25 -7
  29. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  30. data/documentation/diagrams/driver-framework.svg +13 -13
  31. data/documentation/diagrams/extrospection-world-awareness.svg +241 -93
  32. data/documentation/diagrams/fuzzing-workflow.svg +24 -24
  33. data/documentation/diagrams/hardware-hacking.svg +18 -18
  34. data/documentation/diagrams/history-to-drivers.svg +18 -18
  35. data/documentation/diagrams/memory-skills-detailed.svg +169 -97
  36. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  37. data/documentation/diagrams/network-infra-testing.svg +27 -27
  38. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  39. data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
  40. data/documentation/diagrams/persistence-filesystem.svg +111 -87
  41. data/documentation/diagrams/plugin-ecosystem.svg +35 -35
  42. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +263 -149
  43. data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
  44. data/documentation/diagrams/reporting-pipeline.svg +18 -18
  45. data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
  46. data/documentation/diagrams/sdr-radio-flow.svg +76 -56
  47. data/documentation/diagrams/sessions-cron-automation.svg +18 -18
  48. data/documentation/diagrams/swarm-multi-agent.svg +39 -39
  49. data/documentation/diagrams/web-application-testing.svg +26 -26
  50. data/documentation/diagrams/zero-day-research-flow.svg +25 -25
  51. data/documentation/pwn-ai-Agent.md +28 -15
  52. data/lib/pwn/ai/agent/extrospection.rb +494 -6
  53. data/lib/pwn/ai/agent/learning.rb +67 -7
  54. data/lib/pwn/ai/agent/loop.rb +72 -6
  55. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  56. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  57. data/lib/pwn/ai/agent/tools/extrospection.rb +88 -3
  58. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  59. data/lib/pwn/ai/agent.rb +1 -0
  60. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  61. data/lib/pwn/sdr/decoder/adsb.rb +82 -0
  62. data/lib/pwn/sdr/decoder/apt.rb +136 -0
  63. data/lib/pwn/sdr/decoder/base.rb +258 -171
  64. data/lib/pwn/sdr/decoder/bluetooth.rb +71 -0
  65. data/lib/pwn/sdr/decoder/dect.rb +70 -0
  66. data/lib/pwn/sdr/decoder/dsp.rb +396 -0
  67. data/lib/pwn/sdr/decoder/flex.rb +177 -210
  68. data/lib/pwn/sdr/decoder/gps.rb +74 -0
  69. data/lib/pwn/sdr/decoder/gsm.rb +31 -62
  70. data/lib/pwn/sdr/decoder/iridium.rb +66 -0
  71. data/lib/pwn/sdr/decoder/lora.rb +80 -0
  72. data/lib/pwn/sdr/decoder/lte.rb +67 -0
  73. data/lib/pwn/sdr/decoder/morse.rb +138 -0
  74. data/lib/pwn/sdr/decoder/p25.rb +74 -0
  75. data/lib/pwn/sdr/decoder/pager.rb +61 -0
  76. data/lib/pwn/sdr/decoder/pocsag.rb +176 -54
  77. data/lib/pwn/sdr/decoder/rfid.rb +79 -0
  78. data/lib/pwn/sdr/decoder/rtl433.rb +86 -0
  79. data/lib/pwn/sdr/decoder/rtty.rb +139 -0
  80. data/lib/pwn/sdr/decoder/wifi.rb +77 -0
  81. data/lib/pwn/sdr/decoder/zigbee.rb +74 -0
  82. data/lib/pwn/sdr/decoder.rb +75 -7
  83. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  84. data/lib/pwn/sdr/gqrx.rb +186 -95
  85. data/lib/pwn/version.rb +1 -1
  86. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  87. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  88. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  89. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  90. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  91. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  92. data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +15 -0
  93. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  94. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  95. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  96. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  97. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  98. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  99. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  100. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  101. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  102. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  103. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  105. data/third_party/pwn_rdoc.jsonl +115 -5
  106. metadata +46 -6
  107. data/README.md.bak +0 -200
@@ -4,182 +4,330 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Extrospection Pages: 1 -->
7
- <svg width="794pt" height="584pt"
8
- viewBox="0.00 0.00 794.00 584.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 541.2)">
7
+ <svg width="1157pt" height="987pt"
8
+ viewBox="0.00 0.00 1157.00 987.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 943.33)">
10
10
  <title>PWN_Extrospection</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-541.2 750.45,-541.2 750.45,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="107.25" y="-476" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Extrospection — World Awareness</text>
13
- <text xml:space="preserve" text-anchor="start" x="255" y="-464.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">snapshot · drift · observe · intel · correlate</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-943.33 1114.2,-943.33 1114.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="289.12" y="-878.13" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Extrospection — World Awareness</text>
13
+ <text xml:space="preserve" text-anchor="start" x="290.25" y="-866.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#94a3b8">snapshot · drift · observe · intel · watch · verify · correlate &#160;— &#160;host · net · toolchain · repo · env · rf · web</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_world</title>
16
- <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M20,-80C20,-80 155.5,-80 155.5,-80 161.5,-80 167.5,-86 167.5,-92 167.5,-92 167.5,-439 167.5,-439 167.5,-445 161.5,-451 155.5,-451 155.5,-451 20,-451 20,-451 14,-451 8,-445 8,-439 8,-439 8,-92 8,-92 8,-86 14,-80 20,-80"/>
17
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-428" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Outside World</text>
16
+ <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M20,-314.13C20,-314.13 155.5,-314.13 155.5,-314.13 161.5,-314.13 167.5,-320.13 167.5,-326.13 167.5,-326.13 167.5,-841.13 167.5,-841.13 167.5,-847.13 161.5,-853.13 155.5,-853.13 155.5,-853.13 20,-853.13 20,-853.13 14,-853.13 8,-847.13 8,-841.13 8,-841.13 8,-326.13 8,-326.13 8,-320.13 14,-314.13 20,-314.13"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-830.13" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fecaca">Outside World</text>
18
18
  </g>
19
19
  <g id="clust3" class="cluster">
20
20
  <title>cluster_eng</title>
21
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M258.5,-8C258.5,-8 439.5,-8 439.5,-8 445.5,-8 451.5,-14 451.5,-20 451.5,-20 451.5,-367 451.5,-367 451.5,-373 445.5,-379 439.5,-379 439.5,-379 258.5,-379 258.5,-379 252.5,-379 246.5,-373 246.5,-367 246.5,-367 246.5,-20 246.5,-20 246.5,-14 252.5,-8 258.5,-8"/>
22
- <text xml:space="preserve" text-anchor="middle" x="349" y="-356" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Extrospection Engine</text>
21
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M565.62,-148.13C565.62,-148.13 746.62,-148.13 746.62,-148.13 752.62,-148.13 758.62,-154.13 758.62,-160.13 758.62,-160.13 758.62,-714.13 758.62,-714.13 758.62,-720.13 752.62,-726.13 746.62,-726.13 746.62,-726.13 565.62,-726.13 565.62,-726.13 559.62,-726.13 553.62,-720.13 553.62,-714.13 553.62,-714.13 553.62,-160.13 553.62,-160.13 553.62,-154.13 559.62,-148.13 565.62,-148.13"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="656.12" y="-703.13" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fde68a">Extrospection Engine</text>
23
23
  </g>
24
24
  <!-- Host -->
25
25
  <g id="node1" class="node">
26
26
  <title>Host</title>
27
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M132.88,-412C132.88,-412 42.62,-412 42.62,-412 36.62,-412 30.62,-406 30.62,-400 30.62,-400 30.62,-388 30.62,-388 30.62,-382 36.62,-376 42.62,-376 42.62,-376 132.88,-376 132.88,-376 138.88,-376 144.88,-382 144.88,-388 144.88,-388 144.88,-400 144.88,-400 144.88,-406 138.88,-412 132.88,-412"/>
28
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-397.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host</text>
29
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-383.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">uname · distro · arch</text>
27
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M132.88,-814.13C132.88,-814.13 42.62,-814.13 42.62,-814.13 36.62,-814.13 30.62,-808.13 30.62,-802.13 30.62,-802.13 30.62,-790.13 30.62,-790.13 30.62,-784.13 36.62,-778.13 42.62,-778.13 42.62,-778.13 132.88,-778.13 132.88,-778.13 138.88,-778.13 144.88,-784.13 144.88,-790.13 144.88,-790.13 144.88,-802.13 144.88,-802.13 144.88,-808.13 138.88,-814.13 132.88,-814.13"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-799.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">host</text>
29
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-785.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">uname · distro · arch</text>
30
30
  </g>
31
31
  <!-- Snap -->
32
- <g id="node6" class="node">
32
+ <g id="node9" class="node">
33
33
  <title>Snap</title>
34
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M381.25,-340C381.25,-340 315.75,-340 315.75,-340 309.75,-340 303.75,-334 303.75,-328 303.75,-328 303.75,-316 303.75,-316 303.75,-310 309.75,-304 315.75,-304 315.75,-304 381.25,-304 381.25,-304 387.25,-304 393.25,-310 393.25,-316 393.25,-316 393.25,-328 393.25,-328 393.25,-334 387.25,-340 381.25,-340"/>
35
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-325.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_snapshot</text>
36
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-311.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">fingerprint host</text>
34
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M710.5,-686.38C710.5,-686.38 600.75,-686.38 600.75,-686.38 594.75,-686.38 588.75,-680.38 588.75,-674.38 588.75,-674.38 588.75,-649.88 588.75,-649.88 588.75,-643.88 594.75,-637.88 600.75,-637.88 600.75,-637.88 710.5,-637.88 710.5,-637.88 716.5,-637.88 722.5,-643.88 722.5,-649.88 722.5,-649.88 722.5,-674.38 722.5,-674.38 722.5,-680.38 716.5,-686.38 710.5,-686.38"/>
35
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-671.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_snapshot</text>
36
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-658.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">probe_host/net/toolchain</text>
37
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-644.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">probe_repo/env/rf/web</text>
37
38
  </g>
38
39
  <!-- Host&#45;&gt;Snap -->
39
40
  <g id="edge1" class="edge">
40
41
  <title>Host&#45;&gt;Snap</title>
41
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M145.53,-378.2C189.65,-365.92 250.42,-349.01 293.75,-336.96"/>
42
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="294.42,-339.68 301.38,-334.83 292.92,-334.28 294.42,-339.68"/>
42
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M145.28,-787.96C227.97,-775.36 386.34,-748.76 517.75,-712.13 539.51,-706.07 562.74,-698.15 583.77,-690.41"/>
43
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="584.59,-693.1 591.11,-687.68 582.63,-687.85 584.59,-693.1"/>
43
44
  </g>
44
45
  <!-- Net -->
45
46
  <g id="node2" class="node">
46
47
  <title>Net</title>
47
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M144.5,-340C144.5,-340 31,-340 31,-340 25,-340 19,-334 19,-328 19,-328 19,-316 19,-316 19,-310 25,-304 31,-304 31,-304 144.5,-304 144.5,-304 150.5,-304 156.5,-310 156.5,-316 156.5,-316 156.5,-328 156.5,-328 156.5,-334 150.5,-340 144.5,-340"/>
48
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-325.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">net</text>
49
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-311.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">interfaces · listening ports</text>
48
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M144.5,-742.13C144.5,-742.13 31,-742.13 31,-742.13 25,-742.13 19,-736.13 19,-730.13 19,-730.13 19,-718.13 19,-718.13 19,-712.13 25,-706.13 31,-706.13 31,-706.13 144.5,-706.13 144.5,-706.13 150.5,-706.13 156.5,-712.13 156.5,-718.13 156.5,-718.13 156.5,-730.13 156.5,-730.13 156.5,-736.13 150.5,-742.13 144.5,-742.13"/>
49
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-727.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">net</text>
50
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-713.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">interfaces · listening ports</text>
50
51
  </g>
51
52
  <!-- Net&#45;&gt;Snap -->
52
53
  <g id="edge2" class="edge">
53
54
  <title>Net&#45;&gt;Snap</title>
54
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M157.07,-322C199.72,-322 253.86,-322 293.5,-322"/>
55
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="293.28,-324.8 301.28,-322 293.28,-319.2 293.28,-324.8"/>
55
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M157.17,-717.72C241.9,-709.65 390.59,-695.01 517.75,-680.13 537.4,-677.83 558.61,-675.15 578.33,-672.56"/>
56
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="578.67,-675.34 586.24,-671.52 577.94,-669.79 578.67,-675.34"/>
56
57
  </g>
57
58
  <!-- Tool -->
58
59
  <g id="node3" class="node">
59
60
  <title>Tool</title>
60
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M135.88,-268C135.88,-268 39.62,-268 39.62,-268 33.62,-268 27.62,-262 27.62,-256 27.62,-256 27.62,-244 27.62,-244 27.62,-238 33.62,-232 39.62,-232 39.62,-232 135.88,-232 135.88,-232 141.88,-232 147.88,-238 147.88,-244 147.88,-244 147.88,-256 147.88,-256 147.88,-262 141.88,-268 135.88,-268"/>
61
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-253.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolchain</text>
62
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-239.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">nmap · burp · msf · git</text>
61
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M135.88,-670.13C135.88,-670.13 39.62,-670.13 39.62,-670.13 33.62,-670.13 27.62,-664.13 27.62,-658.13 27.62,-658.13 27.62,-646.13 27.62,-646.13 27.62,-640.13 33.62,-634.13 39.62,-634.13 39.62,-634.13 135.88,-634.13 135.88,-634.13 141.88,-634.13 147.88,-640.13 147.88,-646.13 147.88,-646.13 147.88,-658.13 147.88,-658.13 147.88,-664.13 141.88,-670.13 135.88,-670.13"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-655.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">toolchain</text>
63
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-641.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">nmap · burp · msf · git</text>
63
64
  </g>
64
65
  <!-- Drift -->
65
- <g id="node7" class="node">
66
+ <g id="node10" class="node">
66
67
  <title>Drift</title>
67
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M384.25,-268C384.25,-268 312.75,-268 312.75,-268 306.75,-268 300.75,-262 300.75,-256 300.75,-256 300.75,-244 300.75,-244 300.75,-238 306.75,-232 312.75,-232 312.75,-232 384.25,-232 384.25,-232 390.25,-232 396.25,-238 396.25,-244 396.25,-244 396.25,-256 396.25,-256 396.25,-262 390.25,-268 384.25,-268"/>
68
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-253.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_drift</text>
69
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-239.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">delta vs baseline</text>
68
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M691.38,-602.13C691.38,-602.13 619.88,-602.13 619.88,-602.13 613.88,-602.13 607.88,-596.13 607.88,-590.13 607.88,-590.13 607.88,-578.13 607.88,-578.13 607.88,-572.13 613.88,-566.13 619.88,-566.13 619.88,-566.13 691.38,-566.13 691.38,-566.13 697.38,-566.13 703.38,-572.13 703.38,-578.13 703.38,-578.13 703.38,-590.13 703.38,-590.13 703.38,-596.13 697.38,-602.13 691.38,-602.13"/>
69
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-587.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_drift</text>
70
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-573.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">delta vs baseline</text>
70
71
  </g>
71
72
  <!-- Tool&#45;&gt;Drift -->
72
73
  <g id="edge3" class="edge">
73
74
  <title>Tool&#45;&gt;Drift</title>
74
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M148.44,-250C191.13,-250 248.26,-250 290.36,-250"/>
75
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="290.22,-252.8 298.22,-250 290.22,-247.2 290.22,-252.8"/>
75
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M148.31,-648.32C231.36,-642.58 386.53,-630.3 517.75,-611.13 544.2,-607.27 573.28,-601.72 597.81,-596.66"/>
76
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="598.13,-599.45 605.39,-595.07 596.99,-593.97 598.13,-599.45"/>
76
77
  </g>
77
78
  <!-- Repo -->
78
79
  <g id="node4" class="node">
79
80
  <title>Repo</title>
80
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M135.12,-196C135.12,-196 40.38,-196 40.38,-196 34.38,-196 28.38,-190 28.38,-184 28.38,-184 28.38,-172 28.38,-172 28.38,-166 34.38,-160 40.38,-160 40.38,-160 135.12,-160 135.12,-160 141.12,-160 147.12,-166 147.12,-172 147.12,-172 147.12,-184 147.12,-184 147.12,-190 141.12,-196 135.12,-196"/>
81
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-181.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo</text>
82
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-167.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">HEAD · dirty · branch</text>
81
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M141.12,-598.13C141.12,-598.13 34.38,-598.13 34.38,-598.13 28.38,-598.13 22.38,-592.13 22.38,-586.13 22.38,-586.13 22.38,-574.13 22.38,-574.13 22.38,-568.13 28.38,-562.13 34.38,-562.13 34.38,-562.13 141.12,-562.13 141.12,-562.13 147.12,-562.13 153.12,-568.13 153.12,-574.13 153.12,-574.13 153.12,-586.13 153.12,-586.13 153.12,-592.13 147.12,-598.13 141.12,-598.13"/>
82
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-583.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">repo · env</text>
83
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-569.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">HEAD · dirty · ruby/gem</text>
83
84
  </g>
84
85
  <!-- Repo&#45;&gt;Drift -->
85
86
  <g id="edge4" class="edge">
86
87
  <title>Repo&#45;&gt;Drift</title>
87
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M147.79,-194.43C190.78,-206.39 248.65,-222.49 291.03,-234.29"/>
88
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="290.01,-236.91 298.47,-236.36 291.51,-231.51 290.01,-236.91"/>
88
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M153.66,-580.59C265.17,-581.38 491.32,-582.98 597.34,-583.73"/>
89
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="597.23,-586.53 605.25,-583.78 597.27,-580.93 597.23,-586.53"/>
89
90
  </g>
90
- <!-- Feeds -->
91
+ <!-- RFhw -->
91
92
  <g id="node5" class="node">
93
+ <title>RFhw</title>
94
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M136.62,-526.38C136.62,-526.38 38.88,-526.38 38.88,-526.38 32.88,-526.38 26.88,-520.38 26.88,-514.38 26.88,-514.38 26.88,-489.88 26.88,-489.88 26.88,-483.88 32.88,-477.88 38.88,-477.88 38.88,-477.88 136.62,-477.88 136.62,-477.88 142.62,-477.88 148.62,-483.88 148.62,-489.88 148.62,-489.88 148.62,-514.38 148.62,-514.38 148.62,-520.38 142.62,-526.38 136.62,-526.38"/>
95
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-511.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">rf &#160;📡</text>
96
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-498.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">rtl&#45;sdr · hackrf · flipper</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-484.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">gqrx sock · serial devs</text>
98
+ </g>
99
+ <!-- Obs -->
100
+ <g id="node11" class="node">
101
+ <title>Obs</title>
102
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M724.75,-530.38C724.75,-530.38 586.5,-530.38 586.5,-530.38 580.5,-530.38 574.5,-524.38 574.5,-518.38 574.5,-518.38 574.5,-493.88 574.5,-493.88 574.5,-487.88 580.5,-481.88 586.5,-481.88 586.5,-481.88 724.75,-481.88 724.75,-481.88 730.75,-481.88 736.75,-487.88 736.75,-493.88 736.75,-493.88 736.75,-518.38 736.75,-518.38 736.75,-524.38 730.75,-530.38 724.75,-530.38"/>
103
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-515.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_observe</text>
104
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-502.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">recon · vuln · intel</text>
105
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-488.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">target · network · env · rf · web</text>
106
+ </g>
107
+ <!-- RFhw&#45;&gt;Obs -->
108
+ <g id="edge5" class="edge">
109
+ <title>RFhw&#45;&gt;Obs</title>
110
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M149.31,-502.56C248.91,-503.27 447.82,-504.67 564.16,-505.49"/>
111
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="564.13,-508.29 572.15,-505.55 564.17,-502.69 564.13,-508.29"/>
112
+ <text xml:space="preserve" text-anchor="middle" x="327.75" y="-506.28" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">probe_rf</text>
113
+ </g>
114
+ <!-- Web -->
115
+ <g id="node6" class="node">
116
+ <title>Web</title>
117
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M144.88,-370.38C144.88,-370.38 30.62,-370.38 30.62,-370.38 24.62,-370.38 18.62,-364.38 18.62,-358.38 18.62,-358.38 18.62,-333.88 18.62,-333.88 18.62,-327.88 24.62,-321.88 30.62,-321.88 30.62,-321.88 144.88,-321.88 144.88,-321.88 150.88,-321.88 156.88,-327.88 156.88,-333.88 156.88,-333.88 156.88,-358.38 156.88,-358.38 156.88,-364.38 150.88,-370.38 144.88,-370.38"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-355.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">web &#160;🌐</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-342.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">anchors · targets</text>
120
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-328.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">rendered DOM · TLS cert</text>
121
+ </g>
122
+ <!-- TB -->
123
+ <g id="node8" class="node">
124
+ <title>TB</title>
125
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M389,-352.38C389,-352.38 266.5,-352.38 266.5,-352.38 260.5,-352.38 254.5,-346.38 254.5,-340.38 254.5,-340.38 254.5,-315.88 254.5,-315.88 254.5,-309.88 260.5,-303.88 266.5,-303.88 266.5,-303.88 389,-303.88 389,-303.88 395,-303.88 401,-309.88 401,-315.88 401,-315.88 401,-340.38 401,-340.38 401,-346.38 395,-352.38 389,-352.38"/>
126
+ <text xml:space="preserve" text-anchor="middle" x="327.75" y="-337.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">PWN::Plugins::</text>
127
+ <text xml:space="preserve" text-anchor="middle" x="327.75" y="-324.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">TransparentBrowser</text>
128
+ <text xml:space="preserve" text-anchor="middle" x="327.75" y="-310.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">:headless (→ :rest fallback)</text>
129
+ </g>
130
+ <!-- Web&#45;&gt;TB -->
131
+ <g id="edge7" class="edge">
132
+ <title>Web&#45;&gt;TB</title>
133
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M157.27,-340.95C184.3,-338.91 215.58,-336.54 243.87,-334.4"/>
134
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="244,-337.2 251.77,-333.8 243.58,-331.62 244,-337.2"/>
135
+ </g>
136
+ <!-- Feeds -->
137
+ <g id="node7" class="node">
92
138
  <title>Feeds</title>
93
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M147.5,-124C147.5,-124 28,-124 28,-124 22,-124 16,-118 16,-112 16,-112 16,-100 16,-100 16,-94 22,-88 28,-88 28,-88 147.5,-88 147.5,-88 153.5,-88 159.5,-94 159.5,-100 159.5,-100 159.5,-112 159.5,-112 159.5,-118 153.5,-124 147.5,-124"/>
94
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-109.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">intel feeds</text>
95
- <text xml:space="preserve" text-anchor="middle" x="87.75" y="-95.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">NVD · CIRCL · Exploit&#45;DB</text>
139
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M147.5,-442.13C147.5,-442.13 28,-442.13 28,-442.13 22,-442.13 16,-436.13 16,-430.13 16,-430.13 16,-418.13 16,-418.13 16,-412.13 22,-406.13 28,-406.13 28,-406.13 147.5,-406.13 147.5,-406.13 153.5,-406.13 159.5,-412.13 159.5,-418.13 159.5,-418.13 159.5,-430.13 159.5,-430.13 159.5,-436.13 153.5,-442.13 147.5,-442.13"/>
140
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-427.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">intel feeds</text>
141
+ <text xml:space="preserve" text-anchor="middle" x="87.75" y="-413.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">NVD · CIRCL · Exploit&#45;DB</text>
96
142
  </g>
97
143
  <!-- Intel -->
98
- <g id="node9" class="node">
144
+ <g id="node12" class="node">
99
145
  <title>Intel</title>
100
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M393.25,-124C393.25,-124 303.75,-124 303.75,-124 297.75,-124 291.75,-118 291.75,-112 291.75,-112 291.75,-100 291.75,-100 291.75,-94 297.75,-88 303.75,-88 303.75,-88 393.25,-88 393.25,-88 399.25,-88 405.25,-94 405.25,-100 405.25,-100 405.25,-112 405.25,-112 405.25,-118 399.25,-124 393.25,-124"/>
101
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-109.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_intel</text>
102
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-95.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">CVE / exploit lookup</text>
146
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M700.38,-446.13C700.38,-446.13 610.88,-446.13 610.88,-446.13 604.88,-446.13 598.88,-440.13 598.88,-434.13 598.88,-434.13 598.88,-422.13 598.88,-422.13 598.88,-416.13 604.88,-410.13 610.88,-410.13 610.88,-410.13 700.38,-410.13 700.38,-410.13 706.38,-410.13 712.38,-416.13 712.38,-422.13 712.38,-422.13 712.38,-434.13 712.38,-434.13 712.38,-440.13 706.38,-446.13 700.38,-446.13"/>
147
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-431.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_intel</text>
148
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-417.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">CVE / exploit lookup</text>
103
149
  </g>
104
150
  <!-- Feeds&#45;&gt;Intel -->
105
- <g id="edge5" class="edge">
151
+ <g id="edge6" class="edge">
106
152
  <title>Feeds&#45;&gt;Intel</title>
107
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M160.14,-106C198.04,-106 244.31,-106 281.38,-106"/>
108
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="281.12,-108.8 289.12,-106 281.12,-103.2 281.12,-108.8"/>
153
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M160.13,-424.64C270.63,-425.42 481.49,-426.91 588.62,-427.67"/>
154
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="588.36,-430.47 596.38,-427.72 588.4,-424.87 588.36,-430.47"/>
155
+ </g>
156
+ <!-- TB&#45;&gt;Snap -->
157
+ <g id="edge8" class="edge">
158
+ <title>TB&#45;&gt;Snap</title>
159
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M341.97,-353.17C372.35,-408.51 452.34,-542.44 553.62,-620.13 561.45,-626.13 570.25,-631.43 579.31,-636.05"/>
160
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="577.87,-638.47 586.29,-639.43 580.31,-633.42 577.87,-638.47"/>
161
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-600.18" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">probe_web</text>
162
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-589.68" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">(opt&#45;in)</text>
163
+ </g>
164
+ <!-- Watch -->
165
+ <g id="node13" class="node">
166
+ <title>Watch</title>
167
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M712.75,-374.38C712.75,-374.38 598.5,-374.38 598.5,-374.38 592.5,-374.38 586.5,-368.38 586.5,-362.38 586.5,-362.38 586.5,-337.88 586.5,-337.88 586.5,-331.88 592.5,-325.88 598.5,-325.88 598.5,-325.88 712.75,-325.88 712.75,-325.88 718.75,-325.88 724.75,-331.88 724.75,-337.88 724.75,-337.88 724.75,-362.38 724.75,-362.38 724.75,-368.38 718.75,-374.38 712.75,-374.38"/>
168
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-359.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_watch</text>
169
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-346.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">render → DOM SHA&#45;256</text>
170
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-332.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">screenshot · TLS fp</text>
171
+ </g>
172
+ <!-- TB&#45;&gt;Watch -->
173
+ <g id="edge9" class="edge">
174
+ <title>TB&#45;&gt;Watch</title>
175
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M401.83,-320.32C417.07,-318.99 433.05,-317.82 448,-317.13 478.97,-315.71 486.97,-313.48 517.75,-317.13 536.96,-319.42 557.37,-323.44 576.4,-327.91"/>
176
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="575.58,-330.59 584.01,-329.75 576.89,-325.15 575.58,-330.59"/>
177
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-329.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">goto · text</text>
178
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-319.08" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">screenshot</text>
179
+ </g>
180
+ <!-- Verify -->
181
+ <g id="node14" class="node">
182
+ <title>Verify</title>
183
+ <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M734.5,-289.38C734.5,-289.38 576.75,-289.38 576.75,-289.38 570.75,-289.38 564.75,-283.38 564.75,-277.38 564.75,-277.38 564.75,-252.88 564.75,-252.88 564.75,-246.88 570.75,-240.88 576.75,-240.88 576.75,-240.88 734.5,-240.88 734.5,-240.88 740.5,-240.88 746.5,-246.88 746.5,-252.88 746.5,-252.88 746.5,-277.38 746.5,-277.38 746.5,-283.38 740.5,-289.38 734.5,-289.38"/>
184
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-274.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_verify</text>
185
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-261.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">:cve · :version · :doc · :generic</text>
186
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-247.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">→ :confirmed | :refuted | :unknown</text>
187
+ </g>
188
+ <!-- TB&#45;&gt;Verify -->
189
+ <g id="edge10" class="edge">
190
+ <title>TB&#45;&gt;Verify</title>
191
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M389.46,-302.94C407.97,-296.16 428.57,-289.51 448,-285.13 481.79,-277.53 519.33,-272.82 553.04,-269.9"/>
192
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="553.08,-272.7 560.82,-269.26 552.62,-267.12 553.08,-272.7"/>
193
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-297.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">render</text>
194
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-287.08" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">canonical source</text>
109
195
  </g>
110
196
  <!-- Store -->
111
- <g id="node11" class="node">
197
+ <g id="node16" class="node">
112
198
  <title>Store</title>
113
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M695.62,-197.69C695.62,-200.1 672.71,-202.06 644.5,-202.06 616.29,-202.06 593.38,-200.1 593.38,-197.69 593.38,-197.69 593.38,-158.31 593.38,-158.31 593.38,-155.9 616.29,-153.94 644.5,-153.94 672.71,-153.94 695.62,-155.9 695.62,-158.31 695.62,-158.31 695.62,-197.69 695.62,-197.69"/>
114
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M695.62,-197.69C695.62,-195.27 672.71,-193.31 644.5,-193.31 616.29,-193.31 593.38,-195.27 593.38,-197.69"/>
115
- <text xml:space="preserve" text-anchor="middle" x="644.5" y="-181.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/</text>
116
- <text xml:space="preserve" text-anchor="middle" x="644.5" y="-167.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
199
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1046.25,-478.82C1046.25,-481.24 1023.33,-483.2 995.12,-483.2 966.92,-483.2 944,-481.24 944,-478.82 944,-478.82 944,-439.45 944,-439.45 944,-437.03 966.92,-435.07 995.12,-435.07 1023.33,-435.07 1046.25,-437.03 1046.25,-439.45 1046.25,-439.45 1046.25,-478.82 1046.25,-478.82"/>
200
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1046.25,-478.82C1046.25,-476.41 1023.33,-474.45 995.12,-474.45 966.92,-474.45 944,-476.41 944,-478.82"/>
201
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-462.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/</text>
202
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-448.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
117
203
  </g>
118
204
  <!-- Snap&#45;&gt;Store -->
119
- <g id="edge6" class="edge">
205
+ <g id="edge11" class="edge">
120
206
  <title>Snap&#45;&gt;Store</title>
121
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M393.84,-308.22C411.99,-302.09 433.03,-294.38 451.5,-286 503.15,-262.57 559.38,-230.05 597.56,-206.83"/>
122
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="598.86,-209.32 604.22,-202.75 595.94,-204.54 598.86,-209.32"/>
207
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M721.21,-637.24C733.77,-631.92 746.73,-626.1 758.62,-620.13 811.23,-593.75 823.53,-585.15 872.25,-552.13 901.35,-532.42 932.86,-508.29 956.55,-489.55"/>
208
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="958.21,-491.81 962.73,-484.64 954.73,-487.43 958.21,-491.81"/>
123
209
  </g>
124
210
  <!-- Drift&#45;&gt;Store -->
125
- <g id="edge7" class="edge">
211
+ <g id="edge12" class="edge">
126
212
  <title>Drift&#45;&gt;Store</title>
127
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M396.77,-239.03C434.24,-230.27 487.9,-217.59 534.75,-206 550.5,-202.1 567.5,-197.78 583.28,-193.72"/>
128
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="583.97,-196.43 591.02,-191.72 582.57,-191.01 583.97,-196.43"/>
129
- </g>
130
- <!-- Obs -->
131
- <g id="node8" class="node">
132
- <title>Obs</title>
133
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M385,-196C385,-196 312,-196 312,-196 306,-196 300,-190 300,-184 300,-184 300,-172 300,-172 300,-166 306,-160 312,-160 312,-160 385,-160 385,-160 391,-160 397,-166 397,-172 397,-172 397,-184 397,-184 397,-190 391,-196 385,-196"/>
134
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-181.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_observe</text>
135
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-167.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">record recon fact</text>
213
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M704.06,-568.85C747.96,-554.47 814.91,-531.94 872.25,-510.13 892.61,-502.39 914.63,-493.37 934.29,-485.1"/>
214
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="935.34,-487.69 941.62,-481.99 933.16,-482.53 935.34,-487.69"/>
136
215
  </g>
137
216
  <!-- Obs&#45;&gt;Store -->
138
- <g id="edge8" class="edge">
217
+ <g id="edge13" class="edge">
139
218
  <title>Obs&#45;&gt;Store</title>
140
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M397.39,-178C448.09,-178 528.24,-178 583.21,-178"/>
141
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="583.2,-180.8 591.2,-178 583.2,-175.2 583.2,-180.8"/>
219
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M737.04,-494.94C797.55,-486.51 879.17,-475.14 934.07,-467.5"/>
220
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="934.17,-470.31 941.71,-466.43 933.4,-464.76 934.17,-470.31"/>
142
221
  </g>
143
222
  <!-- Intel&#45;&gt;Store -->
144
- <g id="edge9" class="edge">
223
+ <g id="edge14" class="edge">
145
224
  <title>Intel&#45;&gt;Store</title>
146
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M405.84,-119.8C456.69,-132.25 531.3,-150.52 583.32,-163.26"/>
147
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="582.41,-165.92 590.84,-165.1 583.74,-160.48 582.41,-165.92"/>
148
- <text xml:space="preserve" text-anchor="middle" x="512.62" y="-152.52" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record:true</text>
225
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M712.74,-433.29C773.76,-438.89 870.96,-447.82 933.65,-453.58"/>
226
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="933.22,-456.35 941.45,-454.29 933.73,-450.77 933.22,-456.35"/>
227
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-449.27" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">record:true</text>
228
+ </g>
229
+ <!-- Watch&#45;&gt;Store -->
230
+ <g id="edge15" class="edge">
231
+ <title>Watch&#45;&gt;Store</title>
232
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M725.33,-372.32C786.58,-392.11 875.36,-420.78 933.89,-439.68"/>
233
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="933.03,-442.34 941.5,-442.14 934.75,-437.01 933.03,-442.34"/>
234
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-419.55" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">category::web</text>
235
+ </g>
236
+ <!-- Shots -->
237
+ <g id="node17" class="node">
238
+ <title>Shots</title>
239
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1054.5,-380.82C1054.5,-383.24 1027.89,-385.2 995.12,-385.2 962.36,-385.2 935.75,-383.24 935.75,-380.82 935.75,-380.82 935.75,-341.45 935.75,-341.45 935.75,-339.03 962.36,-337.07 995.12,-337.07 1027.89,-337.07 1054.5,-339.03 1054.5,-341.45 1054.5,-341.45 1054.5,-380.82 1054.5,-380.82"/>
240
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1054.5,-380.82C1054.5,-378.41 1027.89,-376.45 995.12,-376.45 962.36,-376.45 935.75,-378.41 935.75,-380.82"/>
241
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-364.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/extrospection/</text>
242
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-350.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">web/*.png</text>
243
+ </g>
244
+ <!-- Watch&#45;&gt;Shots -->
245
+ <g id="edge16" class="edge">
246
+ <title>Watch&#45;&gt;Shots</title>
247
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M725.33,-352.37C783.63,-354.27 866.87,-356.99 925.23,-358.89"/>
248
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="925.04,-361.68 933.13,-359.15 925.22,-356.09 925.04,-361.68"/>
249
+ </g>
250
+ <!-- Verify&#45;&gt;Store -->
251
+ <g id="edge18" class="edge">
252
+ <title>Verify&#45;&gt;Store</title>
253
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M718.13,-290.29C731.55,-295.99 745.62,-302.14 758.62,-308.13 809.93,-331.79 824.76,-334.53 872.25,-365.13 894.83,-379.68 898.05,-386.64 919.25,-403.13 930.18,-411.63 942.14,-420.69 953.23,-428.98"/>
254
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="951.46,-431.15 959.54,-433.69 954.8,-426.66 951.46,-431.15"/>
255
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-377.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
256
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-367.08" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs (ttl 30d)</text>
257
+ </g>
258
+ <!-- Mist -->
259
+ <g id="node19" class="node">
260
+ <title>Mist</title>
261
+ <path fill="#fca5a5" stroke="#334155" stroke-width="2" d="M1048.5,-298.38C1048.5,-298.38 941.75,-298.38 941.75,-298.38 935.75,-298.38 929.75,-292.38 929.75,-286.38 929.75,-286.38 929.75,-261.88 929.75,-261.88 929.75,-255.88 935.75,-249.88 941.75,-249.88 941.75,-249.88 1048.5,-249.88 1048.5,-249.88 1054.5,-249.88 1060.5,-255.88 1060.5,-261.88 1060.5,-261.88 1060.5,-286.38 1060.5,-286.38 1060.5,-292.38 1054.5,-298.38 1048.5,-298.38"/>
262
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-283.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Mistakes.record</text>
263
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-270.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">(tool:&#39;assumption&#39;)</text>
264
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-256.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">→ KNOWN MISTAKES</text>
265
+ </g>
266
+ <!-- Verify&#45;&gt;Mist -->
267
+ <g id="edge17" class="edge">
268
+ <title>Verify&#45;&gt;Mist</title>
269
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M747.41,-262.49C785.93,-261.89 831.3,-261.87 872.25,-263.63 887.1,-264.27 902.95,-265.35 918.13,-266.57"/>
270
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="917.82,-269.36 926.03,-267.23 918.29,-263.77 917.82,-269.36"/>
271
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-265.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
272
+ </g>
273
+ <!-- Mem -->
274
+ <g id="node20" class="node">
275
+ <title>Mem</title>
276
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1059,-213.38C1059,-213.38 931.25,-213.38 931.25,-213.38 925.25,-213.38 919.25,-207.38 919.25,-201.38 919.25,-201.38 919.25,-176.88 919.25,-176.88 919.25,-170.88 925.25,-164.88 931.25,-164.88 931.25,-164.88 1059,-164.88 1059,-164.88 1065,-164.88 1071,-170.88 1071,-176.88 1071,-176.88 1071,-201.38 1071,-201.38 1071,-207.38 1065,-213.38 1059,-213.38"/>
277
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-198.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">PWN::Memory :fact</text>
278
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-185.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
279
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-171.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">(revalidate_memory)</text>
280
+ </g>
281
+ <!-- Verify&#45;&gt;Mem -->
282
+ <g id="edge19" class="edge">
283
+ <title>Verify&#45;&gt;Mem</title>
284
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M727.94,-239.9C738.65,-234.76 749.24,-228.83 758.62,-222.13 777.55,-208.62 772.27,-192.63 793.5,-183.13 829.12,-167.2 871.97,-166.36 908.91,-170.45"/>
285
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="908.43,-173.21 916.71,-171.41 909.11,-167.65 908.43,-173.21"/>
286
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-195.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">revalidate_memory</text>
287
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-185.08" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale :fact</text>
149
288
  </g>
150
289
  <!-- Corr -->
151
- <g id="node10" class="node">
290
+ <g id="node15" class="node">
152
291
  <title>Corr</title>
153
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M386.5,-52C386.5,-52 310.5,-52 310.5,-52 304.5,-52 298.5,-46 298.5,-40 298.5,-40 298.5,-28 298.5,-28 298.5,-22 304.5,-16 310.5,-16 310.5,-16 386.5,-16 386.5,-16 392.5,-16 398.5,-22 398.5,-28 398.5,-28 398.5,-40 398.5,-40 398.5,-46 392.5,-52 386.5,-52"/>
154
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-37.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_correlate</text>
155
- <text xml:space="preserve" text-anchor="middle" x="348.5" y="-23.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">join with Learning</text>
292
+ <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M703.38,-204.38C703.38,-204.38 607.88,-204.38 607.88,-204.38 601.88,-204.38 595.88,-198.38 595.88,-192.38 595.88,-192.38 595.88,-167.88 595.88,-167.88 595.88,-161.88 601.88,-155.88 607.88,-155.88 607.88,-155.88 703.38,-155.88 703.38,-155.88 709.38,-155.88 715.38,-161.88 715.38,-167.88 715.38,-167.88 715.38,-192.38 715.38,-192.38 715.38,-198.38 709.38,-204.38 703.38,-204.38"/>
293
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-189.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extro_correlate</text>
294
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-176.43" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">join with Learning</text>
295
+ <text xml:space="preserve" text-anchor="middle" x="655.62" y="-162.93" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">+ Mistakes + Memory</text>
156
296
  </g>
157
297
  <!-- Prompt -->
158
- <g id="node12" class="node">
298
+ <g id="node18" class="node">
159
299
  <title>Prompt</title>
160
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M695.25,-77C695.25,-77 593.75,-77 593.75,-77 587.75,-77 581.75,-71 581.75,-65 581.75,-65 581.75,-53 581.75,-53 581.75,-47 587.75,-41 593.75,-41 593.75,-41 695.25,-41 695.25,-41 701.25,-41 707.25,-47 707.25,-53 707.25,-53 707.25,-65 707.25,-65 707.25,-71 701.25,-77 695.25,-77"/>
161
- <text xml:space="preserve" text-anchor="middle" x="644.5" y="-62.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">EXTROSPECTION</text>
162
- <text xml:space="preserve" text-anchor="middle" x="644.5" y="-48.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">block in system prompt</text>
300
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1045.88,-129.13C1045.88,-129.13 944.38,-129.13 944.38,-129.13 938.38,-129.13 932.38,-123.13 932.38,-117.13 932.38,-117.13 932.38,-105.13 932.38,-105.13 932.38,-99.13 938.38,-93.13 944.38,-93.13 944.38,-93.13 1045.88,-93.13 1045.88,-93.13 1051.88,-93.13 1057.88,-99.13 1057.88,-105.13 1057.88,-105.13 1057.88,-117.13 1057.88,-117.13 1057.88,-123.13 1051.88,-129.13 1045.88,-129.13"/>
301
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-114.18" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">EXTROSPECTION</text>
302
+ <text xml:space="preserve" text-anchor="middle" x="995.12" y="-100.68" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">block in system prompt</text>
163
303
  </g>
164
304
  <!-- Corr&#45;&gt;Prompt -->
165
- <g id="edge10" class="edge">
305
+ <g id="edge20" class="edge">
166
306
  <title>Corr&#45;&gt;Prompt</title>
167
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M399.37,-38.24C446.27,-42.23 517.05,-48.25 570.34,-52.78"/>
168
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="569.86,-55.55 578.07,-53.44 570.34,-49.97 569.86,-55.55"/>
169
- <text xml:space="preserve" text-anchor="middle" x="512.62" y="-51.42" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
307
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M716.35,-155.48C740.01,-146.64 767.67,-137.44 793.5,-131.63 835.34,-122.23 883.07,-117.13 921.48,-114.37"/>
308
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="921.24,-117.19 929.03,-113.86 920.86,-111.6 921.24,-117.19"/>
309
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-133.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
170
310
  </g>
171
311
  <!-- Store&#45;&gt;Corr -->
172
- <g id="edge12" class="edge">
312
+ <g id="edge22" class="edge">
173
313
  <title>Store&#45;&gt;Corr</title>
174
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M625.47,-153.5C596.26,-113.98 541.21,-40.24 534.75,-37 496.22,-17.67 447.26,-17.76 409.35,-22.23"/>
175
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="408.99,-19.45 401.42,-23.27 409.71,-25 408.99,-19.45"/>
314
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M951.61,-435.93C939.34,-427.21 927.15,-416.19 919.25,-403.13 851.01,-290.27 972.62,-195.69 872.25,-110.13 820.43,-65.97 740.18,-113.46 693.59,-148.9"/>
315
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="692.01,-146.58 687.41,-153.7 695.44,-151 692.01,-146.58"/>
176
316
  </g>
177
317
  <!-- Store&#45;&gt;Prompt -->
178
- <g id="edge11" class="edge">
318
+ <g id="edge21" class="edge">
179
319
  <title>Store&#45;&gt;Prompt</title>
180
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M644.5,-153.34C644.5,-134.16 644.5,-107.51 644.5,-87.42"/>
181
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="647.3,-87.56 644.5,-79.56 641.7,-87.56 647.3,-87.56"/>
182
- <text xml:space="preserve" text-anchor="middle" x="636.25" y="-112.17" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
320
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M954.46,-435.47C941.87,-426.61 928.81,-415.61 919.25,-403.13 867.09,-335.05 864.92,-307.67 849.04,-223.38 840.93,-180.34 883.31,-151.22 924.47,-133.45"/>
321
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="925.35,-136.12 931.68,-130.48 923.21,-130.95 925.35,-136.12"/>
322
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-214.83" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
323
+ </g>
324
+ <!-- Mem&#45;&gt;Corr -->
325
+ <g id="edge23" class="edge">
326
+ <title>Mem&#45;&gt;Corr</title>
327
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M938.64,-164.25C931.46,-159.33 924.71,-153.64 919.25,-147.13 878.67,-98.8 923.74,-49.64 872.25,-13.13 797.18,40.09 711.81,-83.76 675.05,-146.49"/>
328
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="672.75,-144.88 671.18,-153.21 677.6,-147.68 672.75,-144.88"/>
329
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-25.58" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">rule (f)</text>
330
+ <text xml:space="preserve" text-anchor="middle" x="832.88" y="-15.08" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">stale :fact</text>
183
331
  </g>
184
332
  </g>
185
333
  </svg>