pwn 0.5.613 → 0.5.617

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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -10
  3. data/README.md +117 -17
  4. data/bin/pwn +47 -2
  5. data/bin/pwn_gqrx_scanner +75 -18
  6. data/documentation/AI-Integration.md +36 -0
  7. data/documentation/BurpSuite.md +26 -0
  8. data/documentation/Contributing.md +31 -0
  9. data/documentation/Diagrams.md +140 -0
  10. data/documentation/Drivers.md +25 -0
  11. data/documentation/General-PWN-Usage.md +60 -0
  12. data/documentation/Home.md +78 -0
  13. data/documentation/How-PWN-Works.md +62 -0
  14. data/documentation/Installation.md +75 -0
  15. data/documentation/NmapIt.md +18 -0
  16. data/documentation/Plugins.md +59 -0
  17. data/documentation/Reporting.md +28 -0
  18. data/documentation/SAST.md +32 -0
  19. data/documentation/Skills-Memory-Learning.md +44 -0
  20. data/documentation/Transparent-Browser.md +32 -0
  21. data/documentation/Troubleshooting.md +38 -0
  22. data/documentation/What-is-PWN.md +53 -0
  23. data/documentation/Why-PWN.md +48 -0
  24. data/documentation/diagrams/ai-integration-tool-calling.svg +172 -0
  25. data/documentation/diagrams/build.sh +20 -0
  26. data/documentation/diagrams/burp-vs-zap-preference.svg +69 -0
  27. data/documentation/diagrams/code-scanning-sast.svg +172 -0
  28. data/documentation/diagrams/dot/_THEME.md +27 -0
  29. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  30. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +50 -0
  31. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  32. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +26 -0
  33. data/documentation/diagrams/dot/code-scanning-sast.dot +49 -0
  34. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  35. data/documentation/diagrams/dot/driver-framework.dot +39 -0
  36. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  37. data/documentation/diagrams/dot/fuzzing-workflow.dot +47 -0
  38. data/documentation/diagrams/dot/history-to-drivers.dot +34 -0
  39. data/documentation/diagrams/dot/memory-skills-detailed.dot +60 -0
  40. data/documentation/diagrams/dot/network-infra-testing.dot +54 -0
  41. data/documentation/diagrams/dot/overall-pwn-architecture.dot +115 -0
  42. data/documentation/diagrams/dot/penetration-testing-workflow.dot +60 -0
  43. data/documentation/diagrams/dot/plugin-ecosystem.dot +45 -0
  44. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +98 -0
  45. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +56 -0
  46. data/documentation/diagrams/dot/reporting-pipeline.dot +46 -0
  47. data/documentation/diagrams/dot/reverse-engineering-flow.dot +43 -0
  48. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  49. data/documentation/diagrams/dot/sessions-cron-automation.dot +44 -0
  50. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  51. data/documentation/diagrams/dot/web-application-testing.dot +49 -0
  52. data/documentation/diagrams/dot/zero-day-research-flow.dot +49 -0
  53. data/documentation/diagrams/driver-framework.svg +111 -0
  54. data/documentation/diagrams/fuzzing-workflow.svg +160 -0
  55. data/documentation/diagrams/history-to-drivers.svg +119 -0
  56. data/documentation/diagrams/memory-skills-detailed.svg +202 -0
  57. data/documentation/diagrams/network-infra-testing.svg +183 -0
  58. data/documentation/diagrams/overall-pwn-architecture.svg +405 -0
  59. data/documentation/diagrams/penetration-testing-workflow.svg +201 -0
  60. data/documentation/diagrams/plugin-ecosystem.svg +276 -0
  61. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +306 -0
  62. data/documentation/diagrams/pwn-repl-prototyping.svg +168 -0
  63. data/documentation/diagrams/reporting-pipeline.svg +151 -0
  64. data/documentation/diagrams/reverse-engineering-flow.svg +134 -0
  65. data/documentation/diagrams/sessions-cron-automation.svg +136 -0
  66. data/documentation/diagrams/web-application-testing.svg +173 -0
  67. data/documentation/diagrams/zero-day-research-flow.svg +153 -0
  68. data/documentation/pwn-REPL.md +33 -0
  69. data/documentation/pwn-ai-Agent.md +43 -0
  70. data/git_commit.sh +1 -1
  71. data/lib/pwn/ai/agent/assembly.rb +1 -1
  72. data/lib/pwn/ai/agent/btc.rb +1 -1
  73. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  74. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  75. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  76. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  77. data/lib/pwn/ai/agent/introspection.rb +91 -0
  78. data/lib/pwn/ai/agent/learning.rb +379 -0
  79. data/lib/pwn/ai/agent/loop.rb +33 -3
  80. data/lib/pwn/ai/agent/metrics.rb +155 -0
  81. data/lib/pwn/ai/agent/prompt_builder.rb +32 -3
  82. data/lib/pwn/ai/agent/sast.rb +1 -1
  83. data/lib/pwn/ai/agent/swarm.rb +437 -0
  84. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  85. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  86. data/lib/pwn/ai/agent/tools/learning.rb +221 -0
  87. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  88. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  89. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  90. data/lib/pwn/ai/agent/tools/skills.rb +124 -8
  91. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  92. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  93. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  94. data/lib/pwn/ai/agent.rb +5 -0
  95. data/lib/pwn/ai/anthropic.rb +19 -4
  96. data/lib/pwn/ai/grok.rb +249 -106
  97. data/lib/pwn/ai.rb +0 -1
  98. data/lib/pwn/config.rb +96 -36
  99. data/lib/pwn/cron.rb +16 -7
  100. data/lib/pwn/plugins/monkey_patch.rb +2 -2
  101. data/lib/pwn/plugins/repl.rb +158 -284
  102. data/lib/pwn/sdr/decoder/base.rb +251 -0
  103. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  104. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  105. data/lib/pwn/sdr/decoder.rb +1 -0
  106. data/lib/pwn/sdr/gqrx.rb +446 -65
  107. data/lib/pwn/version.rb +1 -1
  108. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  109. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  110. data/spec/lib/pwn/ai/agent/learning_spec.rb +68 -0
  111. data/spec/lib/pwn/ai/agent/metrics_spec.rb +27 -0
  112. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  113. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  114. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  115. data/spec/lib/pwn/ai/agent/tools/learning_spec.rb +30 -0
  116. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  117. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  118. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  119. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  120. data/third_party/pwn_rdoc.jsonl +178 -33
  121. metadata +110 -36
  122. data/documentation/PWN.png +0 -0
  123. data/documentation/PWN_Contributors_and_Users.png +0 -0
  124. data/documentation/fax-spectrogram.png +0 -0
  125. data/documentation/fax-waveform.png +0 -0
  126. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +0 -54
  127. data/documentation/lifecycle_authz_replay.example.yaml +0 -27
  128. data/documentation/pwn_android_war_dialer_session.png +0 -0
  129. data/documentation/pwn_install.png +0 -0
  130. data/documentation/pwn_wallpaper.jpg +0 -0
  131. data/documentation/ringing-spectrogram.png +0 -0
  132. data/documentation/ringing-waveform.png +0 -0
  133. data/documentation/vulnerability_report_template.md +0 -37
  134. data/lib/pwn/ai/introspection.rb +0 -76
@@ -0,0 +1,306 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN_AI_Feedback_Learning_Loop Pages: 1 -->
7
+ <svg width="1195pt" height="689pt"
8
+ viewBox="0.00 0.00 1195.00 689.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 645.45)">
10
+ <title>PWN_AI_Feedback_Learning_Loop</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-645.45 1152.12,-645.45 1152.12,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="360.96" y="-580.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai — Closed Self&#45;Improvement Loop</text>
13
+ <text xml:space="preserve" text-anchor="start" x="445.34" y="-568.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world)</text>
14
+ <g id="clust2" class="cluster">
15
+ <title>cluster_core</title>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M120,-389.5C120,-389.5 500,-389.5 500,-389.5 506,-389.5 512,-395.5 512,-401.5 512,-401.5 512,-460.75 512,-460.75 512,-466.75 506,-472.75 500,-472.75 500,-472.75 120,-472.75 120,-472.75 114,-472.75 108,-466.75 108,-460.75 108,-460.75 108,-401.5 108,-401.5 108,-395.5 114,-389.5 120,-389.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="310" y="-449.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</text>
18
+ </g>
19
+ <g id="clust4" class="cluster">
20
+ <title>cluster_intro</title>
21
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M357,-247.25C357,-247.25 656,-247.25 656,-247.25 662,-247.25 668,-253.25 668,-259.25 668,-259.25 668,-331 668,-331 668,-337 662,-343 656,-343 656,-343 357,-343 357,-343 351,-343 345,-337 345,-331 345,-331 345,-259.25 345,-259.25 345,-253.25 351,-247.25 357,-247.25"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="506.5" y="-320" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
23
+ </g>
24
+ <g id="clust5" class="cluster">
25
+ <title>cluster_extro</title>
26
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M20,-253.5C20,-253.5 304,-253.5 304,-253.5 310,-253.5 316,-259.5 316,-265.5 316,-265.5 316,-324.75 316,-324.75 316,-330.75 310,-336.75 304,-336.75 304,-336.75 20,-336.75 20,-336.75 14,-336.75 8,-330.75 8,-324.75 8,-324.75 8,-265.5 8,-265.5 8,-259.5 14,-253.5 20,-253.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="162" y="-313.75" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
28
+ </g>
29
+ <g id="clust7" class="cluster">
30
+ <title>cluster_store</title>
31
+ <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M199,-8C199,-8 759,-8 759,-8 765,-8 771,-14 771,-20 771,-20 771,-79.25 771,-79.25 771,-85.25 765,-91.25 759,-91.25 759,-91.25 199,-91.25 199,-91.25 193,-91.25 187,-85.25 187,-79.25 187,-79.25 187,-20 187,-20 187,-14 193,-8 199,-8"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="479" y="-68.25" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
33
+ </g>
34
+ <!-- User -->
35
+ <g id="node1" class="node">
36
+ <title>User</title>
37
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M192.88,-563.25C192.88,-563.25 125.12,-563.25 125.12,-563.25 119.12,-563.25 113.12,-557.25 113.12,-551.25 113.12,-551.25 113.12,-539.25 113.12,-539.25 113.12,-533.25 119.12,-527.25 125.12,-527.25 125.12,-527.25 192.88,-527.25 192.88,-527.25 198.88,-527.25 204.88,-533.25 204.88,-539.25 204.88,-539.25 204.88,-551.25 204.88,-551.25 204.88,-557.25 198.88,-563.25 192.88,-563.25"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="159" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
39
+ </g>
40
+ <!-- Prompt -->
41
+ <g id="node4" class="node">
42
+ <title>Prompt</title>
43
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M189.5,-433.5C189.5,-433.5 128.5,-433.5 128.5,-433.5 122.5,-433.5 116.5,-427.5 116.5,-421.5 116.5,-421.5 116.5,-409.5 116.5,-409.5 116.5,-403.5 122.5,-397.5 128.5,-397.5 128.5,-397.5 189.5,-397.5 189.5,-397.5 195.5,-397.5 201.5,-403.5 201.5,-409.5 201.5,-409.5 201.5,-421.5 201.5,-421.5 201.5,-427.5 195.5,-433.5 189.5,-433.5"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="159" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="159" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
46
+ </g>
47
+ <!-- User&#45;&gt;Prompt -->
48
+ <g id="edge1" class="edge">
49
+ <title>User&#45;&gt;Prompt</title>
50
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M159,-526.75C159,-505.75 159,-470.24 159,-445.2"/>
51
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="161.8,-445.22 159,-437.22 156.2,-445.22 161.8,-445.22"/>
52
+ <text xml:space="preserve" text-anchor="middle" x="167.25" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
53
+ </g>
54
+ <!-- LLM -->
55
+ <g id="node2" class="node">
56
+ <title>LLM</title>
57
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M593,-563.25C593,-563.25 517,-563.25 517,-563.25 511,-563.25 505,-557.25 505,-551.25 505,-551.25 505,-539.25 505,-539.25 505,-533.25 511,-527.25 517,-527.25 517,-527.25 593,-527.25 593,-527.25 599,-527.25 605,-533.25 605,-539.25 605,-539.25 605,-551.25 605,-551.25 605,-557.25 599,-563.25 593,-563.25"/>
58
+ <text xml:space="preserve" text-anchor="middle" x="555" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
59
+ </g>
60
+ <!-- Dispatch -->
61
+ <g id="node5" class="node">
62
+ <title>Dispatch</title>
63
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M333,-433.5C333,-433.5 299,-433.5 299,-433.5 293,-433.5 287,-427.5 287,-421.5 287,-421.5 287,-409.5 287,-409.5 287,-403.5 293,-397.5 299,-397.5 299,-397.5 333,-397.5 333,-397.5 339,-397.5 345,-403.5 345,-409.5 345,-409.5 345,-421.5 345,-421.5 345,-427.5 339,-433.5 333,-433.5"/>
64
+ <text xml:space="preserve" text-anchor="middle" x="316" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
65
+ <text xml:space="preserve" text-anchor="middle" x="316" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
66
+ </g>
67
+ <!-- LLM&#45;&gt;Dispatch -->
68
+ <g id="edge2" class="edge">
69
+ <title>LLM&#45;&gt;Dispatch</title>
70
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M506.92,-522.02C478.18,-508.41 441.13,-490.29 409,-472.75 390.13,-462.45 369.65,-450.18 352.71,-439.73"/>
71
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="505.55,-524.47 513.98,-525.35 507.94,-519.41 505.55,-524.47"/>
72
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="354.55,-437.58 346.28,-435.74 351.6,-442.34 354.55,-437.58"/>
73
+ <text xml:space="preserve" text-anchor="middle" x="460" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
74
+ </g>
75
+ <!-- World -->
76
+ <g id="node3" class="node">
77
+ <title>World</title>
78
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M434.75,-563.25C434.75,-563.25 339.25,-563.25 339.25,-563.25 333.25,-563.25 327.25,-557.25 327.25,-551.25 327.25,-551.25 327.25,-539.25 327.25,-539.25 327.25,-533.25 333.25,-527.25 339.25,-527.25 339.25,-527.25 434.75,-527.25 434.75,-527.25 440.75,-527.25 446.75,-533.25 446.75,-539.25 446.75,-539.25 446.75,-551.25 446.75,-551.25 446.75,-557.25 440.75,-563.25 434.75,-563.25"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="387" y="-548.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="387" y="-534.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · Intel feeds</text>
81
+ </g>
82
+ <!-- Result -->
83
+ <g id="node6" class="node">
84
+ <title>Result</title>
85
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M491.88,-433.5C491.88,-433.5 442.12,-433.5 442.12,-433.5 436.12,-433.5 430.12,-427.5 430.12,-421.5 430.12,-421.5 430.12,-409.5 430.12,-409.5 430.12,-403.5 436.12,-397.5 442.12,-397.5 442.12,-397.5 491.88,-397.5 491.88,-397.5 497.88,-397.5 503.88,-403.5 503.88,-409.5 503.88,-409.5 503.88,-421.5 503.88,-421.5 503.88,-427.5 497.88,-433.5 491.88,-433.5"/>
86
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
87
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
88
+ </g>
89
+ <!-- World&#45;&gt;Result -->
90
+ <!-- Snapshot -->
91
+ <g id="node9" class="node">
92
+ <title>Snapshot</title>
93
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M296.38,-297.5C296.38,-297.5 195.62,-297.5 195.62,-297.5 189.62,-297.5 183.62,-291.5 183.62,-285.5 183.62,-285.5 183.62,-273.5 183.62,-273.5 183.62,-267.5 189.62,-261.5 195.62,-261.5 195.62,-261.5 296.38,-261.5 296.38,-261.5 302.38,-261.5 308.38,-267.5 308.38,-273.5 308.38,-273.5 308.38,-285.5 308.38,-285.5 308.38,-291.5 302.38,-297.5 296.38,-297.5"/>
94
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
95
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain/repo</text>
96
+ </g>
97
+ <!-- World&#45;&gt;Snapshot -->
98
+ <g id="edge10" class="edge">
99
+ <title>World&#45;&gt;Snapshot</title>
100
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M402.07,-526.82C416.01,-511.95 438.14,-491.34 462,-480.75 486.59,-469.84 499.66,-487.73 522,-472.75 572.77,-438.71 628.53,-394.91 586,-351 576.29,-340.98 348.23,-347.42 335,-343 311.08,-335.02 287.9,-318.36 271.19,-304.24"/>
101
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="273.35,-302.41 265.48,-299.27 269.67,-306.63 273.35,-302.41"/>
102
+ </g>
103
+ <!-- Observe -->
104
+ <g id="node10" class="node">
105
+ <title>Observe</title>
106
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M128.38,-297.5C128.38,-297.5 27.62,-297.5 27.62,-297.5 21.62,-297.5 15.63,-291.5 15.63,-285.5 15.63,-285.5 15.63,-273.5 15.63,-273.5 15.63,-267.5 21.63,-261.5 27.63,-261.5 27.63,-261.5 128.38,-261.5 128.38,-261.5 134.38,-261.5 140.38,-267.5 140.38,-273.5 140.38,-273.5 140.38,-285.5 140.38,-285.5 140.38,-291.5 134.38,-297.5 128.38,-297.5"/>
107
+ <text xml:space="preserve" text-anchor="middle" x="78" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel</text>
108
+ <text xml:space="preserve" text-anchor="middle" x="78" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon facts · CVE feed</text>
109
+ </g>
110
+ <!-- World&#45;&gt;Observe -->
111
+ <g id="edge11" class="edge">
112
+ <title>World&#45;&gt;Observe</title>
113
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M422.73,-526.62C460,-508.02 514.11,-480.37 522,-472.75 565.98,-430.29 628.82,-394.63 586,-351 569.5,-334.18 184.29,-350.62 162,-343 139.24,-335.22 117.56,-318.78 101.93,-304.72"/>
114
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="103.97,-302.79 96.2,-299.39 100.15,-306.89 103.97,-302.79"/>
115
+ </g>
116
+ <!-- Prompt&#45;&gt;Dispatch -->
117
+ <g id="edge4" class="edge">
118
+ <title>Prompt&#45;&gt;Dispatch</title>
119
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M201.93,-415.5C226.84,-415.5 251.76,-415.5 276.67,-415.5"/>
120
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="276.62,-418.3 284.62,-415.5 276.62,-412.7 276.62,-418.3"/>
121
+ </g>
122
+ <!-- Dispatch&#45;&gt;Result -->
123
+ <g id="edge5" class="edge">
124
+ <title>Dispatch&#45;&gt;Result</title>
125
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M345.49,-415.5C370.21,-415.5 394.94,-415.5 419.66,-415.5"/>
126
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="419.54,-418.3 427.54,-415.5 419.54,-412.7 419.54,-418.3"/>
127
+ </g>
128
+ <!-- Metrics -->
129
+ <g id="node7" class="node">
130
+ <title>Metrics</title>
131
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M478.75,-297.5C478.75,-297.5 365.25,-297.5 365.25,-297.5 359.25,-297.5 353.25,-291.5 353.25,-285.5 353.25,-285.5 353.25,-273.5 353.25,-273.5 353.25,-267.5 359.25,-261.5 365.25,-261.5 365.25,-261.5 478.75,-261.5 478.75,-261.5 484.75,-261.5 490.75,-267.5 490.75,-273.5 490.75,-273.5 490.75,-285.5 490.75,-285.5 490.75,-291.5 484.75,-297.5 478.75,-297.5"/>
132
+ <text xml:space="preserve" text-anchor="middle" x="422" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
133
+ <text xml:space="preserve" text-anchor="middle" x="422" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
134
+ </g>
135
+ <!-- Dispatch&#45;&gt;Metrics -->
136
+ <g id="edge6" class="edge">
137
+ <title>Dispatch&#45;&gt;Metrics</title>
138
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M341.32,-396.81C353.7,-387.32 368.22,-374.84 379,-361.5 392.43,-344.89 403.59,-323.44 411.17,-306.79"/>
139
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="413.55,-308.34 414.22,-299.89 408.43,-306.08 413.55,-308.34"/>
140
+ <text xml:space="preserve" text-anchor="middle" x="402.55" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
141
+ </g>
142
+ <!-- Dispatch&#45;&gt;Snapshot -->
143
+ <g id="edge8" class="edge">
144
+ <title>Dispatch&#45;&gt;Snapshot</title>
145
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M286.41,-403.45C268.31,-394.97 246.64,-381.31 236,-361.5 227.09,-344.91 230.13,-323.71 235.11,-307.16"/>
146
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="237.66,-308.37 237.56,-299.89 232.35,-306.58 237.66,-308.37"/>
147
+ <text xml:space="preserve" text-anchor="middle" x="248" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
148
+ </g>
149
+ <!-- Result&#45;&gt;User -->
150
+ <g id="edge26" class="edge">
151
+ <title>Result&#45;&gt;User</title>
152
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M438.83,-434.16C419.18,-446.03 392.08,-461.5 367,-472.75 317.22,-495.09 258.21,-514.76 215.78,-527.79"/>
153
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="215.1,-525.07 208.26,-530.08 216.73,-530.43 215.1,-525.07"/>
154
+ <text xml:space="preserve" text-anchor="middle" x="360.1" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
155
+ </g>
156
+ <!-- Learning -->
157
+ <g id="node8" class="node">
158
+ <title>Learning</title>
159
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M647.75,-303.75C647.75,-303.75 546.25,-303.75 546.25,-303.75 540.25,-303.75 534.25,-297.75 534.25,-291.75 534.25,-291.75 534.25,-267.25 534.25,-267.25 534.25,-261.25 540.25,-255.25 546.25,-255.25 546.25,-255.25 647.75,-255.25 647.75,-255.25 653.75,-255.25 659.75,-261.25 659.75,-267.25 659.75,-267.25 659.75,-291.75 659.75,-291.75 659.75,-297.75 653.75,-303.75 647.75,-303.75"/>
160
+ <text xml:space="preserve" text-anchor="middle" x="597" y="-289.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
161
+ <text xml:space="preserve" text-anchor="middle" x="597" y="-275.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
162
+ <text xml:space="preserve" text-anchor="middle" x="597" y="-262.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
163
+ </g>
164
+ <!-- Result&#45;&gt;Learning -->
165
+ <g id="edge7" class="edge">
166
+ <title>Result&#45;&gt;Learning</title>
167
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M484,-396.98C505.1,-375.23 541.45,-337.76 567.22,-311.2"/>
168
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="568.93,-313.46 572.49,-305.77 564.91,-309.56 568.93,-313.46"/>
169
+ <text xml:space="preserve" text-anchor="middle" x="552.1" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_reflect</text>
170
+ </g>
171
+ <!-- Result&#45;&gt;Observe -->
172
+ <g id="edge9" class="edge">
173
+ <title>Result&#45;&gt;Observe</title>
174
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M429.54,-402.15C376,-384.59 282.26,-354.15 266,-351 220.49,-342.18 205.42,-359.25 162,-343 139.62,-334.62 118.07,-318.36 102.4,-304.53"/>
175
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="104.46,-302.61 96.66,-299.3 100.69,-306.76 104.46,-302.61"/>
176
+ <text xml:space="preserve" text-anchor="middle" x="332.76" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
177
+ </g>
178
+ <!-- Correlate -->
179
+ <g id="node11" class="node">
180
+ <title>Correlate</title>
181
+ <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M345.88,-172.75C345.88,-172.75 146.12,-172.75 146.12,-172.75 140.12,-172.75 134.12,-166.75 134.12,-160.75 134.12,-160.75 134.12,-148.25 134.12,-148.25 134.12,-142.25 140.12,-136.25 146.12,-136.25 146.12,-136.25 345.88,-136.25 345.88,-136.25 351.88,-136.25 357.88,-142.25 357.88,-148.25 357.88,-148.25 357.88,-160.75 357.88,-160.75 357.88,-166.75 351.88,-172.75 345.88,-172.75"/>
182
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-157.35" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
183
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-143.1" font-family="sans-Serif" font-size="12.00" fill="#0f172a">&quot;I did it wrong&quot; &#160;vs &#160;&quot;the world changed&quot;</text>
184
+ </g>
185
+ <!-- Metrics&#45;&gt;Correlate -->
186
+ <g id="edge12" class="edge">
187
+ <title>Metrics&#45;&gt;Correlate</title>
188
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M396,-261.03C378.65,-249.31 355.37,-233.48 335,-219.25 316.25,-206.16 295.47,-191.29 278.7,-179.21"/>
189
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="280.55,-177.08 272.42,-174.67 277.27,-181.62 280.55,-177.08"/>
190
+ </g>
191
+ <!-- Fmet -->
192
+ <g id="node12" class="node">
193
+ <title>Fmet</title>
194
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-50.53 397.14,-52 377,-52 356.86,-52 340.5,-50.53 340.5,-48.73 340.5,-48.73 340.5,-19.27 340.5,-19.27 340.5,-17.47 356.86,-16 377,-16 397.14,-16 413.5,-17.47 413.5,-19.27 413.5,-19.27 413.5,-48.73 413.5,-48.73"/>
195
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-46.92 397.14,-45.45 377,-45.45 356.86,-45.45 340.5,-46.92 340.5,-48.73"/>
196
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
197
+ </g>
198
+ <!-- Metrics&#45;&gt;Fmet -->
199
+ <g id="edge17" class="edge">
200
+ <title>Metrics&#45;&gt;Fmet</title>
201
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M418.76,-260.99C411.01,-219.06 391.35,-112.65 382.04,-62.26"/>
202
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="384.83,-61.97 380.63,-54.62 379.33,-62.99 384.83,-61.97"/>
203
+ </g>
204
+ <!-- Learning&#45;&gt;Correlate -->
205
+ <g id="edge13" class="edge">
206
+ <title>Learning&#45;&gt;Correlate</title>
207
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M533.92,-255.15C526.54,-252.46 519.11,-249.78 512,-247.25 442.72,-222.57 362.94,-195.19 308.96,-176.82"/>
208
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="310.2,-174.28 301.72,-174.36 308.4,-179.58 310.2,-174.28"/>
209
+ </g>
210
+ <!-- Flrn -->
211
+ <g id="node13" class="node">
212
+ <title>Flrn</title>
213
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-50.53 517.8,-52 496,-52 474.2,-52 456.5,-50.53 456.5,-48.73 456.5,-48.73 456.5,-19.27 456.5,-19.27 456.5,-17.47 474.2,-16 496,-16 517.8,-16 535.5,-17.47 535.5,-19.27 535.5,-19.27 535.5,-48.73 535.5,-48.73"/>
214
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-46.92 517.8,-45.45 496,-45.45 474.2,-45.45 456.5,-46.92 456.5,-48.73"/>
215
+ <text xml:space="preserve" text-anchor="middle" x="496" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
216
+ </g>
217
+ <!-- Learning&#45;&gt;Flrn -->
218
+ <g id="edge18" class="edge">
219
+ <title>Learning&#45;&gt;Flrn</title>
220
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M587.13,-254.71C568.19,-209.03 526.84,-109.35 507.02,-61.57"/>
221
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="509.65,-60.6 504,-54.29 504.48,-62.75 509.65,-60.6"/>
222
+ </g>
223
+ <!-- Fmem -->
224
+ <g id="node14" class="node">
225
+ <title>Fmem</title>
226
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-50.53 638.38,-52 617,-52 595.62,-52 578.25,-50.53 578.25,-48.73 578.25,-48.73 578.25,-19.27 578.25,-19.27 578.25,-17.47 595.62,-16 617,-16 638.38,-16 655.75,-17.47 655.75,-19.27 655.75,-19.27 655.75,-48.73 655.75,-48.73"/>
227
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-46.92 638.38,-45.45 617,-45.45 595.62,-45.45 578.25,-46.92 578.25,-48.73"/>
228
+ <text xml:space="preserve" text-anchor="middle" x="617" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
229
+ </g>
230
+ <!-- Learning&#45;&gt;Fmem -->
231
+ <g id="edge19" class="edge">
232
+ <title>Learning&#45;&gt;Fmem</title>
233
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M598.95,-254.71C602.69,-209.22 610.83,-110.18 614.77,-62.17"/>
234
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="617.54,-62.63 615.4,-54.43 611.96,-62.17 617.54,-62.63"/>
235
+ <text xml:space="preserve" text-anchor="middle" x="622.16" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
236
+ </g>
237
+ <!-- Fskl -->
238
+ <g id="node15" class="node">
239
+ <title>Fskl</title>
240
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-50.53 748.66,-52 731,-52 713.34,-52 699,-50.53 699,-48.73 699,-48.73 699,-19.27 699,-19.27 699,-17.47 713.34,-16 731,-16 748.66,-16 763,-17.47 763,-19.27 763,-19.27 763,-48.73 763,-48.73"/>
241
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-46.92 748.66,-45.45 731,-45.45 713.34,-45.45 699,-46.92 699,-48.73"/>
242
+ <text xml:space="preserve" text-anchor="middle" x="731" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
243
+ </g>
244
+ <!-- Learning&#45;&gt;Fskl -->
245
+ <g id="edge20" class="edge">
246
+ <title>Learning&#45;&gt;Fskl</title>
247
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M612.35,-254.81C619.17,-244.07 627.17,-231.13 634,-219.25 665.74,-164 699.75,-97.49 717.86,-61.42"/>
248
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="720.37,-62.67 721.45,-54.26 715.36,-60.16 720.37,-62.67"/>
249
+ <text xml:space="preserve" text-anchor="middle" x="686.07" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
250
+ </g>
251
+ <!-- Snapshot&#45;&gt;Correlate -->
252
+ <g id="edge14" class="edge">
253
+ <title>Snapshot&#45;&gt;Correlate</title>
254
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M246,-260.88C246,-240.62 246,-207.13 246,-183.34"/>
255
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="248.8,-183.46 246,-175.46 243.2,-183.46 248.8,-183.46"/>
256
+ </g>
257
+ <!-- Observe&#45;&gt;Correlate -->
258
+ <g id="edge15" class="edge">
259
+ <title>Observe&#45;&gt;Correlate</title>
260
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M102.07,-260.88C131.26,-239.51 180.6,-203.38 213.24,-179.49"/>
261
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="214.76,-181.84 219.57,-174.85 211.46,-177.32 214.76,-181.84"/>
262
+ </g>
263
+ <!-- Fext -->
264
+ <g id="node16" class="node">
265
+ <title>Fext</title>
266
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-50.53 274.21,-52 246,-52 217.79,-52 194.88,-50.53 194.88,-48.73 194.88,-48.73 194.88,-19.27 194.88,-19.27 194.88,-17.47 217.79,-16 246,-16 274.21,-16 297.12,-17.47 297.12,-19.27 297.12,-19.27 297.12,-48.73 297.12,-48.73"/>
267
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-46.92 274.21,-45.45 246,-45.45 217.79,-45.45 194.88,-46.92 194.88,-48.73"/>
268
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
269
+ </g>
270
+ <!-- Observe&#45;&gt;Fext -->
271
+ <g id="edge21" class="edge">
272
+ <title>Observe&#45;&gt;Fext</title>
273
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M78.63,-260.82C80.4,-232.36 87.19,-175.59 113,-136.25 135.46,-102.02 173.55,-74.77 203.23,-57.2"/>
274
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="204.52,-59.69 210.05,-53.27 201.72,-54.84 204.52,-59.69"/>
275
+ </g>
276
+ <!-- Correlate&#45;&gt;Prompt -->
277
+ <g id="edge25" class="edge">
278
+ <title>Correlate&#45;&gt;Prompt</title>
279
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M358.73,-163.68C473.02,-174.59 638.52,-198.5 678,-247.25 704.78,-280.32 704.96,-310.08 678,-343 619.62,-414.28 356.98,-374.97 266,-389.5 248.45,-392.3 229.5,-396.38 212.5,-400.43"/>
280
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="212.25,-397.61 205.13,-402.22 213.57,-403.05 212.25,-397.61"/>
281
+ <text xml:space="preserve" text-anchor="middle" x="737.53" y="-276.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
282
+ </g>
283
+ <!-- Correlate&#45;&gt;Fmet -->
284
+ <!-- Fmem&#45;&gt;Prompt -->
285
+ <g id="edge22" class="edge">
286
+ <title>Fmem&#45;&gt;Prompt</title>
287
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M633.9,-52.68C673.84,-94.96 771.88,-201.78 787,-247.25 800.43,-287.63 814,-310.1 787,-343 750.13,-387.93 323.49,-380.96 266,-389.5 248.09,-392.16 228.75,-396.28 211.5,-400.42"/>
288
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.17,-397.62 204.07,-402.24 212.51,-403.06 211.17,-397.62"/>
289
+ <text xml:space="preserve" text-anchor="middle" x="804.5" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
290
+ </g>
291
+ <!-- Fskl&#45;&gt;Prompt -->
292
+ <g id="edge23" class="edge">
293
+ <title>Fskl&#45;&gt;Prompt</title>
294
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M747.89,-52.39C775.06,-81.72 827.43,-144.19 847,-208.75 864.5,-266.48 862.72,-294.39 827,-343 816.11,-357.82 807.77,-356.8 790,-361.5 564.53,-421.12 496.89,-356.62 266,-389.5 248.07,-392.05 228.73,-396.15 211.48,-400.29"/>
295
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.15,-397.49 204.05,-402.12 212.49,-402.93 211.15,-397.49"/>
296
+ <text xml:space="preserve" text-anchor="middle" x="877.38" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
297
+ </g>
298
+ <!-- Fext&#45;&gt;Prompt -->
299
+ <g id="edge24" class="edge">
300
+ <title>Fext&#45;&gt;Prompt</title>
301
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M263.15,-52.62C276.95,-65.62 297.51,-82.51 319,-91.25 622.57,-214.77 840.6,45.84 1047,-208.75 1084.61,-255.14 1077.51,-295.73 1041,-343 988.27,-411.27 351.49,-377.95 266,-389.5 248.06,-391.92 228.71,-395.99 211.46,-400.14"/>
302
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.13,-397.34 204.03,-401.98 212.47,-402.78 211.13,-397.34"/>
303
+ <text xml:space="preserve" text-anchor="middle" x="1081.55" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
304
+ </g>
305
+ </g>
306
+ </svg>
@@ -0,0 +1,168 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN_REPL Pages: 1 -->
7
+ <svg width="840pt" height="529pt"
8
+ viewBox="0.00 0.00 840.00 529.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 485.95)">
10
+ <title>PWN_REPL</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-485.95 796.57,-485.95 796.57,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="183.93" y="-420.75" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">The pwn REPL — Interactive Prototyping</text>
13
+ <text xml:space="preserve" text-anchor="start" x="266.81" y="-409.3" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Pry + full PWN:: preload + custom commands</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_repl</title>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M139,-242.5C139,-242.5 513,-242.5 513,-242.5 519,-242.5 525,-248.5 525,-254.5 525,-254.5 525,-313.75 525,-313.75 525,-319.75 519,-325.75 513,-325.75 513,-325.75 139,-325.75 139,-325.75 133,-325.75 127,-319.75 127,-313.75 127,-313.75 127,-254.5 127,-254.5 127,-248.5 133,-242.5 139,-242.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="326" y="-302.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Plugins::REPL &#160;(Pry)</text>
18
+ </g>
19
+ <g id="clust3" class="cluster">
20
+ <title>cluster_cmds</title>
21
+ <path fill="#022c22" stroke="#047857" d="M53,-125.25C53,-125.25 674,-125.25 674,-125.25 680,-125.25 686,-131.25 686,-137.25 686,-137.25 686,-196.5 686,-196.5 686,-202.5 680,-208.5 674,-208.5 674,-208.5 53,-208.5 53,-208.5 47,-208.5 41,-202.5 41,-196.5 41,-196.5 41,-137.25 41,-137.25 41,-131.25 47,-125.25 53,-125.25"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="363.5" y="-185.5" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Custom Commands</text>
23
+ </g>
24
+ <g id="clust5" class="cluster">
25
+ <title>cluster_ns</title>
26
+ <path fill="#422006" stroke="#a16207" d="M20,-8C20,-8 322,-8 322,-8 328,-8 334,-14 334,-20 334,-20 334,-79.25 334,-79.25 334,-85.25 328,-91.25 322,-91.25 322,-91.25 20,-91.25 20,-91.25 14,-91.25 8,-85.25 8,-79.25 8,-79.25 8,-20 8,-20 8,-14 14,-8 20,-8"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="171" y="-68.25" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Live Namespace</text>
28
+ </g>
29
+ <!-- User -->
30
+ <g id="node1" class="node">
31
+ <title>User</title>
32
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M357.5,-403.75C357.5,-403.75 320.5,-403.75 320.5,-403.75 314.5,-403.75 308.5,-397.75 308.5,-391.75 308.5,-391.75 308.5,-379.75 308.5,-379.75 308.5,-373.75 314.5,-367.75 320.5,-367.75 320.5,-367.75 357.5,-367.75 357.5,-367.75 363.5,-367.75 369.5,-373.75 369.5,-379.75 369.5,-379.75 369.5,-391.75 369.5,-391.75 369.5,-397.75 363.5,-403.75 357.5,-403.75"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="339" y="-382.62" font-family="sans-Serif" font-size="10.00" fill="#0f172a">👤 &#160;$ pwn</text>
34
+ </g>
35
+ <!-- Prompt -->
36
+ <g id="node2" class="node">
37
+ <title>Prompt</title>
38
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M229.38,-286.5C229.38,-286.5 146.62,-286.5 146.62,-286.5 140.62,-286.5 134.62,-280.5 134.62,-274.5 134.62,-274.5 134.62,-262.5 134.62,-262.5 134.62,-256.5 140.62,-250.5 146.62,-250.5 146.62,-250.5 229.38,-250.5 229.38,-250.5 235.38,-250.5 241.38,-256.5 241.38,-262.5 241.38,-262.5 241.38,-274.5 241.38,-274.5 241.38,-280.5 235.38,-286.5 229.38,-286.5"/>
39
+ <text xml:space="preserve" text-anchor="middle" x="188" y="-265" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn[v0.5.x]:001 &gt;&gt;&gt;</text>
40
+ </g>
41
+ <!-- User&#45;&gt;Prompt -->
42
+ <g id="edge1" class="edge">
43
+ <title>User&#45;&gt;Prompt</title>
44
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M315.75,-367.25C300.22,-355.54 279.35,-339.76 261,-325.75 247.26,-315.26 232.11,-303.6 219.19,-293.63"/>
45
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="221.09,-291.56 213.04,-288.89 217.66,-295.99 221.09,-291.56"/>
46
+ </g>
47
+ <!-- Preload -->
48
+ <g id="node3" class="node">
49
+ <title>Preload</title>
50
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M384.88,-286.5C384.88,-286.5 293.12,-286.5 293.12,-286.5 287.12,-286.5 281.12,-280.5 281.12,-274.5 281.12,-274.5 281.12,-262.5 281.12,-262.5 281.12,-256.5 287.12,-250.5 293.12,-250.5 293.12,-250.5 384.88,-250.5 384.88,-250.5 390.88,-250.5 396.88,-256.5 396.88,-262.5 396.88,-262.5 396.88,-274.5 396.88,-274.5 396.88,-280.5 390.88,-286.5 384.88,-286.5"/>
51
+ <text xml:space="preserve" text-anchor="middle" x="339" y="-271" font-family="sans-Serif" font-size="10.00" fill="#0f172a">autoload PWN::*</text>
52
+ <text xml:space="preserve" text-anchor="middle" x="339" y="-259" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Banner · MonkeyPatch</text>
53
+ </g>
54
+ <!-- User&#45;&gt;Preload -->
55
+ <!-- Hist -->
56
+ <g id="node4" class="node">
57
+ <title>Hist</title>
58
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M505.25,-286.5C505.25,-286.5 448.75,-286.5 448.75,-286.5 442.75,-286.5 436.75,-280.5 436.75,-274.5 436.75,-274.5 436.75,-262.5 436.75,-262.5 436.75,-256.5 442.75,-250.5 448.75,-250.5 448.75,-250.5 505.25,-250.5 505.25,-250.5 511.25,-250.5 517.25,-256.5 517.25,-262.5 517.25,-262.5 517.25,-274.5 517.25,-274.5 517.25,-280.5 511.25,-286.5 505.25,-286.5"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="477" y="-271" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn_history</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="477" y="-259" font-family="sans-Serif" font-size="10.00" fill="#0f172a">replay · edit</text>
61
+ </g>
62
+ <!-- User&#45;&gt;Hist -->
63
+ <!-- CAI -->
64
+ <g id="node5" class="node">
65
+ <title>CAI</title>
66
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M91,-169.25C91,-169.25 61,-169.25 61,-169.25 55,-169.25 49,-163.25 49,-157.25 49,-157.25 49,-145.25 49,-145.25 49,-139.25 55,-133.25 61,-133.25 61,-133.25 91,-133.25 91,-133.25 97,-133.25 103,-139.25 103,-145.25 103,-145.25 103,-157.25 103,-157.25 103,-163.25 97,-169.25 91,-169.25"/>
67
+ <text xml:space="preserve" text-anchor="middle" x="76" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai</text>
68
+ </g>
69
+ <!-- Prompt&#45;&gt;CAI -->
70
+ <g id="edge4" class="edge">
71
+ <title>Prompt&#45;&gt;CAI</title>
72
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M167.12,-249.86C154.03,-238.48 137.04,-223.12 123,-208.5 113.61,-198.72 103.9,-187.34 95.76,-177.38"/>
73
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="98.04,-175.76 90.84,-171.29 93.69,-179.28 98.04,-175.76"/>
74
+ </g>
75
+ <!-- CASM -->
76
+ <g id="node6" class="node">
77
+ <title>CASM</title>
78
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M186.88,-169.25C186.88,-169.25 155.12,-169.25 155.12,-169.25 149.12,-169.25 143.12,-163.25 143.12,-157.25 143.12,-157.25 143.12,-145.25 143.12,-145.25 143.12,-139.25 149.12,-133.25 155.12,-133.25 155.12,-133.25 186.88,-133.25 186.88,-133.25 192.88,-133.25 198.88,-139.25 198.88,-145.25 198.88,-145.25 198.88,-157.25 198.88,-157.25 198.88,-163.25 192.88,-169.25 186.88,-169.25"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="171" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;asm</text>
80
+ </g>
81
+ <!-- Prompt&#45;&gt;CASM -->
82
+ <g id="edge5" class="edge">
83
+ <title>Prompt&#45;&gt;CASM</title>
84
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M185.42,-250C182.64,-231.19 178.2,-201.06 174.98,-179.22"/>
85
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="177.78,-178.99 173.84,-171.49 172.24,-179.81 177.78,-178.99"/>
86
+ </g>
87
+ <!-- NS -->
88
+ <g id="node11" class="node">
89
+ <title>NS</title>
90
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M313.62,-52C313.62,-52 28.38,-52 28.38,-52 22.38,-52 16.38,-46 16.38,-40 16.38,-40 16.38,-28 16.38,-28 16.38,-22 22.38,-16 28.38,-16 28.38,-16 313.62,-16 313.62,-16 319.62,-16 325.62,-22 325.62,-28 325.62,-28 325.62,-40 325.62,-40 325.62,-46 319.62,-52 313.62,-52"/>
91
+ <text xml:space="preserve" text-anchor="middle" x="171" y="-37.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Plugins &#160;· &#160;PWN::SAST &#160;· &#160;PWN::AWS &#160;· &#160;PWN::SDR</text>
92
+ <text xml:space="preserve" text-anchor="middle" x="171" y="-23.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::WWW &#160;· &#160;PWN::Reports &#160;· &#160;PWN::AI &#160;· &#160;PWN::Memory</text>
93
+ </g>
94
+ <!-- Prompt&#45;&gt;NS -->
95
+ <g id="edge13" class="edge">
96
+ <title>Prompt&#45;&gt;NS</title>
97
+ <path fill="none" stroke="#f59e0b" stroke-width="2" d="M233.46,-249.97C242.47,-247.05 251.95,-244.37 261,-242.5 308.48,-232.68 663.08,-244.09 696,-208.5 721.12,-181.34 719.84,-153.54 696,-125.25 650.59,-71.37 473.25,-49.66 337.11,-40.91"/>
98
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="2" points="337.32,-38.12 329.16,-40.41 336.97,-43.7 337.32,-38.12"/>
99
+ <text xml:space="preserve" text-anchor="middle" x="733.87" y="-147.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">direct call</text>
100
+ </g>
101
+ <!-- CMEM -->
102
+ <g id="node7" class="node">
103
+ <title>CMEM</title>
104
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M309.38,-169.25C309.38,-169.25 250.62,-169.25 250.62,-169.25 244.62,-169.25 238.62,-163.25 238.62,-157.25 238.62,-157.25 238.62,-145.25 238.62,-145.25 238.62,-139.25 244.62,-133.25 250.62,-133.25 250.62,-133.25 309.38,-133.25 309.38,-133.25 315.38,-133.25 321.38,-139.25 321.38,-145.25 321.38,-145.25 321.38,-157.25 321.38,-157.25 321.38,-163.25 315.38,-169.25 309.38,-169.25"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="280" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai&#45;memory</text>
106
+ </g>
107
+ <!-- Preload&#45;&gt;CMEM -->
108
+ <g id="edge6" class="edge">
109
+ <title>Preload&#45;&gt;CMEM</title>
110
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M330.04,-250C320.28,-230.93 304.57,-200.24 293.35,-178.33"/>
111
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="295.89,-177.14 289.75,-171.29 290.9,-179.69 295.89,-177.14"/>
112
+ </g>
113
+ <!-- CSESS -->
114
+ <g id="node8" class="node">
115
+ <title>CSESS</title>
116
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M436.25,-169.25C436.25,-169.25 373.75,-169.25 373.75,-169.25 367.75,-169.25 361.75,-163.25 361.75,-157.25 361.75,-157.25 361.75,-145.25 361.75,-145.25 361.75,-139.25 367.75,-133.25 373.75,-133.25 373.75,-133.25 436.25,-133.25 436.25,-133.25 442.25,-133.25 448.25,-139.25 448.25,-145.25 448.25,-145.25 448.25,-157.25 448.25,-157.25 448.25,-163.25 442.25,-169.25 436.25,-169.25"/>
117
+ <text xml:space="preserve" text-anchor="middle" x="405" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai&#45;sessions</text>
118
+ </g>
119
+ <!-- Preload&#45;&gt;CSESS -->
120
+ <g id="edge7" class="edge">
121
+ <title>Preload&#45;&gt;CSESS</title>
122
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M349.02,-250C359.99,-230.85 377.68,-199.96 390.23,-178.04"/>
123
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="392.57,-179.58 394.12,-171.25 387.71,-176.8 392.57,-179.58"/>
124
+ </g>
125
+ <!-- CCRON -->
126
+ <g id="node9" class="node">
127
+ <title>CCRON</title>
128
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M542.12,-169.25C542.12,-169.25 499.88,-169.25 499.88,-169.25 493.88,-169.25 487.88,-163.25 487.88,-157.25 487.88,-157.25 487.88,-145.25 487.88,-145.25 487.88,-139.25 493.88,-133.25 499.88,-133.25 499.88,-133.25 542.12,-133.25 542.12,-133.25 548.12,-133.25 554.12,-139.25 554.12,-145.25 554.12,-145.25 554.12,-157.25 554.12,-157.25 554.12,-163.25 548.12,-169.25 542.12,-169.25"/>
129
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai&#45;cron</text>
130
+ </g>
131
+ <!-- Hist&#45;&gt;CCRON -->
132
+ <g id="edge8" class="edge">
133
+ <title>Hist&#45;&gt;CCRON</title>
134
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M483.68,-250C490.93,-231.02 502.58,-200.51 510.93,-178.63"/>
135
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="513.46,-179.85 513.7,-171.38 508.23,-177.85 513.46,-179.85"/>
136
+ </g>
137
+ <!-- CDEL -->
138
+ <g id="node10" class="node">
139
+ <title>CDEL</title>
140
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M666.12,-169.25C666.12,-169.25 605.88,-169.25 605.88,-169.25 599.88,-169.25 593.88,-163.25 593.88,-157.25 593.88,-157.25 593.88,-145.25 593.88,-145.25 593.88,-139.25 599.88,-133.25 605.88,-133.25 605.88,-133.25 666.12,-133.25 666.12,-133.25 672.12,-133.25 678.12,-139.25 678.12,-145.25 678.12,-145.25 678.12,-157.25 678.12,-157.25 678.12,-163.25 672.12,-169.25 666.12,-169.25"/>
141
+ <text xml:space="preserve" text-anchor="middle" x="636" y="-147.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai&#45;delegate</text>
142
+ </g>
143
+ <!-- Hist&#45;&gt;CDEL -->
144
+ <g id="edge9" class="edge">
145
+ <title>Hist&#45;&gt;CDEL</title>
146
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M509,-250.09C528.4,-239.04 553.31,-223.95 574,-208.5 586.96,-198.82 600.37,-186.92 611.39,-176.57"/>
147
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="613.32,-178.59 617.18,-171.05 609.46,-174.54 613.32,-178.59"/>
148
+ </g>
149
+ <!-- CAI&#45;&gt;NS -->
150
+ <g id="edge10" class="edge">
151
+ <title>CAI&#45;&gt;NS</title>
152
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M90.43,-132.75C106.42,-113.34 132.35,-81.89 150.46,-59.92"/>
153
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="152.57,-61.76 155.5,-53.81 148.25,-58.2 152.57,-61.76"/>
154
+ </g>
155
+ <!-- CASM&#45;&gt;NS -->
156
+ <g id="edge11" class="edge">
157
+ <title>CASM&#45;&gt;NS</title>
158
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M171,-132.75C171,-113.94 171,-83.81 171,-61.97"/>
159
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="173.8,-62.26 171,-54.26 168.2,-62.26 173.8,-62.26"/>
160
+ </g>
161
+ <!-- CMEM&#45;&gt;NS -->
162
+ <g id="edge12" class="edge">
163
+ <title>CMEM&#45;&gt;NS</title>
164
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M263.45,-132.75C244.93,-113.17 214.82,-81.33 194.02,-59.34"/>
165
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="196.24,-57.61 188.71,-53.72 192.17,-61.46 196.24,-57.61"/>
166
+ </g>
167
+ </g>
168
+ </svg>