pwn 0.5.615 → 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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -10
  3. data/bin/pwn +47 -2
  4. data/bin/pwn_gqrx_scanner +75 -18
  5. data/documentation/Diagrams.md +123 -40
  6. data/documentation/General-PWN-Usage.md +50 -30
  7. data/documentation/Home.md +78 -51
  8. data/documentation/How-PWN-Works.md +59 -57
  9. data/documentation/Installation.md +53 -28
  10. data/documentation/What-is-PWN.md +51 -32
  11. data/documentation/Why-PWN.md +41 -11
  12. data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
  13. data/documentation/diagrams/build.sh +20 -0
  14. data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
  15. data/documentation/diagrams/code-scanning-sast.svg +139 -79
  16. data/documentation/diagrams/dot/_THEME.md +27 -0
  17. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  18. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
  19. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  20. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
  21. data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
  22. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  23. data/documentation/diagrams/dot/driver-framework.dot +36 -14
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  25. data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
  26. data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
  27. data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
  28. data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
  29. data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
  30. data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
  31. data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
  32. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
  33. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
  34. data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
  35. data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
  36. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  37. data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
  38. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  39. data/documentation/diagrams/dot/web-application-testing.dot +45 -23
  40. data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
  41. data/documentation/diagrams/driver-framework.svg +87 -66
  42. data/documentation/diagrams/fuzzing-workflow.svg +128 -115
  43. data/documentation/diagrams/history-to-drivers.svg +84 -82
  44. data/documentation/diagrams/memory-skills-detailed.svg +167 -119
  45. data/documentation/diagrams/network-infra-testing.svg +146 -84
  46. data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
  47. data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
  48. data/documentation/diagrams/plugin-ecosystem.svg +225 -121
  49. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
  50. data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
  51. data/documentation/diagrams/reporting-pipeline.svg +128 -68
  52. data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
  53. data/documentation/diagrams/sessions-cron-automation.svg +112 -68
  54. data/documentation/diagrams/web-application-testing.svg +136 -100
  55. data/documentation/diagrams/zero-day-research-flow.svg +116 -112
  56. data/git_commit.sh +1 -1
  57. data/lib/pwn/ai/agent/assembly.rb +1 -1
  58. data/lib/pwn/ai/agent/btc.rb +1 -1
  59. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  60. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  61. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  62. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  63. data/lib/pwn/ai/agent/introspection.rb +91 -0
  64. data/lib/pwn/ai/agent/learning.rb +6 -4
  65. data/lib/pwn/ai/agent/loop.rb +15 -0
  66. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  67. data/lib/pwn/ai/agent/sast.rb +1 -1
  68. data/lib/pwn/ai/agent/swarm.rb +437 -0
  69. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  70. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  71. data/lib/pwn/ai/agent/tools/learning.rb +108 -0
  72. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  73. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  74. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  75. data/lib/pwn/ai/agent/tools/skills.rb +30 -0
  76. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  77. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  78. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  79. data/lib/pwn/ai/agent.rb +3 -0
  80. data/lib/pwn/ai/anthropic.rb +19 -4
  81. data/lib/pwn/ai.rb +0 -1
  82. data/lib/pwn/config.rb +10 -23
  83. data/lib/pwn/cron.rb +16 -7
  84. data/lib/pwn/plugins/repl.rb +90 -281
  85. data/lib/pwn/sdr/decoder/base.rb +251 -0
  86. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  87. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  88. data/lib/pwn/sdr/decoder.rb +1 -0
  89. data/lib/pwn/sdr/gqrx.rb +446 -65
  90. data/lib/pwn/version.rb +1 -1
  91. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  92. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  93. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  94. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  95. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  96. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  97. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  98. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  99. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  100. data/third_party/pwn_rdoc.jsonl +178 -33
  101. metadata +27 -3
  102. data/lib/pwn/ai/introspection.rb +0 -76
@@ -3,115 +3,117 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: History Command to Driver Generation Pages: 1 -->
7
- <svg width="369pt" height="455pt"
8
- viewBox="0.00 0.00 369.00 455.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 451.25)">
10
- <title>History Command to Driver Generation</title>
11
- <polygon fill="white" stroke="none" points="-4,4 -4,-451.25 364.98,-451.25 364.98,4 -4,4"/>
12
- <!-- User -->
6
+ <!-- Title: PWN_HistToDriver Pages: 1 -->
7
+ <svg width="1033pt" height="368pt"
8
+ viewBox="0.00 0.00 1033.00 368.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 325.2)">
10
+ <title>PWN_HistToDriver</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-325.2 990.2,-325.2 990.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="263.88" y="-260" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">From REPL History → Reusable Driver / Skill</text>
13
+ <text xml:space="preserve" text-anchor="start" x="352" y="-248.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">explore → history → bin/pwn_* driver → distill_skill</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_out</title>
16
+ <path fill="#2e1065" stroke="#6d28d9" d="M593.25,-8C593.25,-8 752.5,-8 752.5,-8 758.5,-8 764.5,-14 764.5,-20 764.5,-20 764.5,-223 764.5,-223 764.5,-229 758.5,-235 752.5,-235 752.5,-235 593.25,-235 593.25,-235 587.25,-235 581.25,-229 581.25,-223 581.25,-223 581.25,-20 581.25,-20 581.25,-14 587.25,-8 593.25,-8"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="672.88" y="-212" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Reusable Artefacts</text>
18
+ </g>
19
+ <!-- Explore -->
13
20
  <g id="node1" class="node">
14
- <title>User</title>
15
- <path fill="none" stroke="black" d="M125.88,-447.25C125.88,-447.25 78.38,-447.25 78.38,-447.25 72.38,-447.25 66.38,-441.25 66.38,-435.25 66.38,-435.25 66.38,-423.25 66.38,-423.25 66.38,-417.25 72.38,-411.25 78.38,-411.25 78.38,-411.25 125.88,-411.25 125.88,-411.25 131.88,-411.25 137.88,-417.25 137.88,-423.25 137.88,-423.25 137.88,-435.25 137.88,-435.25 137.88,-441.25 131.88,-447.25 125.88,-447.25"/>
16
- <text xml:space="preserve" text-anchor="middle" x="102.12" y="-425.95" font-family="Arial" font-size="9.00">User in REPL</text>
21
+ <title>Explore</title>
22
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M95.5,-124C95.5,-124 12,-124 12,-124 6,-124 0,-118 0,-112 0,-112 0,-100 0,-100 0,-94 6,-88 12,-88 12,-88 95.5,-88 95.5,-88 101.5,-88 107.5,-94 107.5,-100 107.5,-100 107.5,-112 107.5,-112 107.5,-118 101.5,-124 95.5,-124"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="53.75" y="-108.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">🐚 &#160;Explore in REPL</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="53.75" y="-96.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">call PWN::Plugins::*</text>
17
25
  </g>
18
- <!-- Pry -->
26
+ <!-- Hist -->
19
27
  <g id="node2" class="node">
20
- <title>Pry</title>
21
- <path fill="none" stroke="black" d="M136.38,-358.75C136.38,-358.75 67.88,-358.75 67.88,-358.75 61.88,-358.75 55.88,-352.75 55.88,-346.75 55.88,-346.75 55.88,-334.75 55.88,-334.75 55.88,-328.75 61.88,-322.75 67.88,-322.75 67.88,-322.75 136.38,-322.75 136.38,-322.75 142.38,-322.75 148.38,-328.75 148.38,-334.75 148.38,-334.75 148.38,-346.75 148.38,-346.75 148.38,-352.75 142.38,-358.75 136.38,-358.75"/>
22
- <text xml:space="preserve" text-anchor="middle" x="102.12" y="-342.7" font-family="Arial" font-size="9.00">PWN REPL</text>
23
- <text xml:space="preserve" text-anchor="middle" x="102.12" y="-332.2" font-family="Arial" font-size="9.00">(history, edit, save)</text>
28
+ <title>Hist</title>
29
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M318.25,-124C318.25,-126.21 297.86,-128 272.75,-128 247.64,-128 227.25,-126.21 227.25,-124 227.25,-124 227.25,-88 227.25,-88 227.25,-85.79 247.64,-84 272.75,-84 297.86,-84 318.25,-85.79 318.25,-88 318.25,-88 318.25,-124 318.25,-124"/>
30
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M318.25,-124C318.25,-121.79 297.86,-120 272.75,-120 247.64,-120 227.25,-121.79 227.25,-124"/>
31
+ <text xml:space="preserve" text-anchor="middle" x="272.75" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn_history</text>
32
+ <text xml:space="preserve" text-anchor="middle" x="272.75" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Pry `history` cmd</text>
24
33
  </g>
25
- <!-- User&#45;&gt;Pry -->
34
+ <!-- Explore&#45;&gt;Hist -->
26
35
  <g id="edge1" class="edge">
27
- <title>User&#45;&gt;Pry</title>
28
- <path fill="none" stroke="black" d="M102.12,-411.16C102.12,-399.51 102.12,-383.8 102.12,-370.27"/>
29
- <polygon fill="black" stroke="black" points="105.63,-370.61 102.13,-360.61 98.63,-370.61 105.63,-370.61"/>
30
- <text xml:space="preserve" text-anchor="middle" x="160.25" y="-379.95" font-family="Times,serif" font-size="14.00">run exploration cmds</text>
36
+ <title>Explore&#45;&gt;Hist</title>
37
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M108.11,-106C141.23,-106 183.7,-106 217.06,-106"/>
38
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="216.69,-108.8 224.69,-106 216.69,-103.2 216.69,-108.8"/>
39
+ <text xml:space="preserve" text-anchor="middle" x="167.38" y="-107.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto&#45;log</text>
31
40
  </g>
32
- <!-- HistoryFile -->
41
+ <!-- Extract -->
33
42
  <g id="node3" class="node">
34
- <title>HistoryFile</title>
35
- <path fill="none" stroke="black" d="M84.25,-250.12C84.25,-252.13 65.37,-253.75 42.12,-253.75 18.88,-253.75 0,-252.13 0,-250.12 0,-250.12 0,-217.5 0,-217.5 0,-215.5 18.88,-213.88 42.12,-213.88 65.37,-213.88 84.25,-215.5 84.25,-217.5 84.25,-217.5 84.25,-250.12 84.25,-250.12"/>
36
- <path fill="none" stroke="black" d="M84.25,-250.12C84.25,-248.12 65.37,-246.5 42.12,-246.5 18.88,-246.5 0,-248.12 0,-250.12"/>
37
- <text xml:space="preserve" text-anchor="middle" x="42.12" y="-235.76" font-family="Arial" font-size="9.00">~/.pry_history</text>
38
- <text xml:space="preserve" text-anchor="middle" x="42.12" y="-225.26" font-family="Arial" font-size="9.00">(raw commands)</text>
43
+ <title>Extract</title>
44
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M490.25,-124C490.25,-124 417.25,-124 417.25,-124 411.25,-124 405.25,-118 405.25,-112 405.25,-112 405.25,-100 405.25,-100 405.25,-94 411.25,-88 417.25,-88 417.25,-88 490.25,-88 490.25,-88 496.25,-88 502.25,-94 502.25,-100 502.25,-100 502.25,-112 502.25,-112 502.25,-118 496.25,-124 490.25,-124"/>
45
+ <text xml:space="preserve" text-anchor="middle" x="453.75" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">copy working lines</text>
39
46
  </g>
40
- <!-- Pry&#45;&gt;HistoryFile -->
47
+ <!-- Hist&#45;&gt;Extract -->
41
48
  <g id="edge2" class="edge">
42
- <title>Pry&#45;&gt;HistoryFile</title>
43
- <path fill="none" stroke="black" d="M60.46,-322.35C53.65,-317.64 47.49,-311.84 43.38,-304.75 36.56,-293.01 35.46,-278.19 36.38,-265.21"/>
44
- <polygon fill="black" stroke="black" points="39.84,-265.8 37.52,-255.46 32.88,-264.99 39.84,-265.8"/>
45
- <text xml:space="preserve" text-anchor="middle" x="91.75" y="-283.2" font-family="Times,serif" font-size="14.00">appends each line</text>
49
+ <title>Hist&#45;&gt;Extract</title>
50
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M318.46,-106C341.68,-106 370.32,-106 395.18,-106"/>
51
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="394.89,-108.8 402.89,-106 394.89,-103.2 394.89,-108.8"/>
46
52
  </g>
47
- <!-- Script -->
53
+ <!-- Driver -->
48
54
  <g id="node4" class="node">
49
- <title>Script</title>
50
- <path fill="none" stroke="black" d="M190.38,-251.81C190.38,-251.81 133.88,-251.81 133.88,-251.81 127.88,-251.81 121.88,-245.81 121.88,-239.81 121.88,-239.81 121.88,-227.81 121.88,-227.81 121.88,-221.81 127.88,-215.81 133.88,-215.81 133.88,-215.81 190.38,-215.81 190.38,-215.81 196.38,-215.81 202.38,-221.81 202.38,-227.81 202.38,-227.81 202.38,-239.81 202.38,-239.81 202.38,-245.81 196.38,-251.81 190.38,-251.81"/>
51
- <text xml:space="preserve" text-anchor="middle" x="162.12" y="-235.76" font-family="Arial" font-size="9.00">Prototype Script</text>
52
- <text xml:space="preserve" text-anchor="middle" x="162.12" y="-225.26" font-family="Arial" font-size="9.00">(.rb or bin/)</text>
55
+ <title>Driver</title>
56
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M726.5,-196C726.5,-196 618.25,-196 618.25,-196 612.25,-196 606.25,-190 606.25,-184 606.25,-184 606.25,-172 606.25,-172 606.25,-166 612.25,-160 618.25,-160 618.25,-160 726.5,-160 726.5,-160 732.5,-160 738.5,-166 738.5,-172 738.5,-172 738.5,-184 738.5,-184 738.5,-190 732.5,-196 726.5,-196"/>
57
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-180.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">bin/pwn_&lt;name&gt;</text>
58
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-168.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OptionParser + PWN calls</text>
53
59
  </g>
54
- <!-- Pry&#45;&gt;Script -->
60
+ <!-- Extract&#45;&gt;Driver -->
55
61
  <g id="edge3" class="edge">
56
- <title>Pry&#45;&gt;Script</title>
57
- <path fill="none" stroke="black" d="M124.67,-322.56C130.35,-317.35 135.99,-311.26 140.12,-304.75 148.09,-292.2 153.37,-276.54 156.75,-263.23"/>
58
- <polygon fill="black" stroke="black" points="160.1,-264.27 158.92,-253.74 153.28,-262.71 160.1,-264.27"/>
59
- <text xml:space="preserve" text-anchor="middle" x="232.35" y="-291.45" font-family="Times,serif" font-size="14.00">history | grep &gt; my_proto.rb</text>
60
- <text xml:space="preserve" text-anchor="middle" x="232.35" y="-274.95" font-family="Times,serif" font-size="14.00">or edit &#45;n</text>
62
+ <title>Extract&#45;&gt;Driver</title>
63
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-121.98C533.25,-132.09 572.96,-145.29 606.2,-156.34"/>
64
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="605.05,-158.91 613.52,-158.77 606.81,-153.59 605.05,-158.91"/>
61
65
  </g>
62
- <!-- Driver -->
66
+ <!-- Skill -->
63
67
  <g id="node5" class="node">
64
- <title>Driver</title>
65
- <path fill="none" stroke="black" d="M138.75,-144.69C138.75,-144.69 51.5,-144.69 51.5,-144.69 45.5,-144.69 39.5,-138.69 39.5,-132.69 39.5,-132.69 39.5,-117.19 39.5,-117.19 39.5,-111.19 45.5,-105.19 51.5,-105.19 51.5,-105.19 138.75,-105.19 138.75,-105.19 144.75,-105.19 150.75,-111.19 150.75,-117.19 150.75,-117.19 150.75,-132.69 150.75,-132.69 150.75,-138.69 144.75,-144.69 138.75,-144.69"/>
66
- <text xml:space="preserve" text-anchor="middle" x="95.12" y="-132.14" font-family="Arial" font-size="9.00">PWN Driver</text>
67
- <text xml:space="preserve" text-anchor="middle" x="95.12" y="-121.64" font-family="Arial" font-size="9.00">(/opt/pwn/bin/ example</text>
68
- <text xml:space="preserve" text-anchor="middle" x="95.12" y="-111.14" font-family="Arial" font-size="9.00">or PWN::Driver::Parser)</text>
68
+ <title>Skill</title>
69
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M723.88,-124C723.88,-124 620.88,-124 620.88,-124 614.88,-124 608.88,-118 608.88,-112 608.88,-112 608.88,-100 608.88,-100 608.88,-94 614.88,-88 620.88,-88 620.88,-88 723.88,-88 723.88,-88 729.88,-88 735.88,-94 735.88,-100 735.88,-100 735.88,-112 735.88,-112 735.88,-118 729.88,-124 723.88,-124"/>
70
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn/skills/&lt;name&gt;.md</text>
71
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
69
72
  </g>
70
- <!-- Script&#45;&gt;Driver -->
73
+ <!-- Extract&#45;&gt;Skill -->
71
74
  <g id="edge4" class="edge">
72
- <title>Script&#45;&gt;Driver</title>
73
- <path fill="none" stroke="black" d="M121.49,-221.49C109,-215.89 96.64,-207.71 89.38,-195.88 82.18,-184.15 82.45,-169.16 85,-156.07"/>
74
- <polygon fill="black" stroke="black" points="88.33,-157.2 87.33,-146.65 81.53,-155.52 88.33,-157.2"/>
75
- <text xml:space="preserve" text-anchor="middle" x="151.25" y="-182.57" font-family="Times,serif" font-size="14.00">wrap in PWN::Driver</text>
76
- <text xml:space="preserve" text-anchor="middle" x="151.25" y="-166.07" font-family="Times,serif" font-size="14.00">add opts, orchestration</text>
75
+ <title>Extract&#45;&gt;Skill</title>
76
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-106C531.07,-106 567.32,-106 598.96,-106"/>
77
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="598.65,-108.8 606.65,-106 598.65,-103.2 598.65,-108.8"/>
77
78
  </g>
78
- <!-- Skill -->
79
+ <!-- Cron -->
79
80
  <g id="node6" class="node">
80
- <title>Skill</title>
81
- <path fill="none" stroke="black" d="M270,-141.25C270,-143.25 253.47,-144.88 233.12,-144.88 212.78,-144.88 196.25,-143.25 196.25,-141.25 196.25,-141.25 196.25,-108.62 196.25,-108.62 196.25,-106.62 212.78,-105 233.12,-105 253.47,-105 270,-106.62 270,-108.62 270,-108.62 270,-141.25 270,-141.25"/>
82
- <path fill="none" stroke="black" d="M270,-141.25C270,-139.25 253.47,-137.62 233.12,-137.62 212.78,-137.62 196.25,-139.25 196.25,-141.25"/>
83
- <text xml:space="preserve" text-anchor="middle" x="233.12" y="-126.89" font-family="Arial" font-size="9.00">Distilled Skill</text>
84
- <text xml:space="preserve" text-anchor="middle" x="233.12" y="-116.39" font-family="Arial" font-size="9.00">(~/.pwn/skills/)</text>
81
+ <title>Cron</title>
82
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M699.88,-52C699.88,-52 644.88,-52 644.88,-52 638.88,-52 632.88,-46 632.88,-40 632.88,-40 632.88,-28 632.88,-28 632.88,-22 638.88,-16 644.88,-16 644.88,-16 699.88,-16 699.88,-16 705.88,-16 711.88,-22 711.88,-28 711.88,-28 711.88,-40 711.88,-40 711.88,-46 705.88,-52 699.88,-52"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron_create</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">prompt: | ruby:</text>
85
85
  </g>
86
- <!-- Script&#45;&gt;Skill -->
86
+ <!-- Extract&#45;&gt;Cron -->
87
87
  <g id="edge5" class="edge">
88
- <title>Script&#45;&gt;Skill</title>
89
- <path fill="none" stroke="black" d="M193.12,-215.38C200.55,-209.96 207.85,-203.4 213.12,-195.88 221.23,-184.31 226.07,-169.52 228.95,-156.51"/>
90
- <polygon fill="black" stroke="black" points="232.38,-157.18 230.8,-146.7 225.51,-155.88 232.38,-157.18"/>
91
- <text xml:space="preserve" text-anchor="middle" x="293.99" y="-182.57" font-family="Times,serif" font-size="14.00">manually or via</text>
92
- <text xml:space="preserve" text-anchor="middle" x="293.99" y="-166.07" font-family="Times,serif" font-size="14.00">distill_skill after success</text>
88
+ <title>Extract&#45;&gt;Cron</title>
89
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-90.02C538.64,-78.12 587.34,-61.93 623.18,-50.02"/>
90
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="623.89,-52.73 630.6,-47.55 622.12,-47.42 623.89,-52.73"/>
93
91
  </g>
94
- <!-- Agent -->
92
+ <!-- CI -->
95
93
  <g id="node7" class="node">
96
- <title>Agent</title>
97
- <path fill="none" stroke="black" d="M202.75,-36C202.75,-36 133.5,-36 133.5,-36 127.5,-36 121.5,-30 121.5,-24 121.5,-24 121.5,-12 121.5,-12 121.5,-6 127.5,0 133.5,0 133.5,0 202.75,0 202.75,0 208.75,0 214.75,-6 214.75,-12 214.75,-12 214.75,-24 214.75,-24 214.75,-30 208.75,-36 202.75,-36"/>
98
- <text xml:space="preserve" text-anchor="middle" x="168.12" y="-19.95" font-family="Arial" font-size="9.00">pwn&#45;ai Agent</text>
99
- <text xml:space="preserve" text-anchor="middle" x="168.12" y="-9.45" font-family="Arial" font-size="9.00">(future automation)</text>
94
+ <title>CI</title>
95
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M935,-124C935,-124 887.5,-124 887.5,-124 881.5,-124 875.5,-118 875.5,-112 875.5,-112 875.5,-100 875.5,-100 875.5,-94 881.5,-88 887.5,-88 887.5,-88 935,-88 935,-88 941,-88 947,-94 947,-100 947,-100 947,-112 947,-112 947,-118 941,-124 935,-124"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="911.25" y="-108.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">⚙️ &#160;CI / CD</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="911.25" y="-96.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">headless run</text>
100
98
  </g>
101
- <!-- Driver&#45;&gt;Agent -->
99
+ <!-- Driver&#45;&gt;CI -->
102
100
  <g id="edge6" class="edge">
103
- <title>Driver&#45;&gt;Agent</title>
104
- <path fill="none" stroke="black" d="M95.29,-104.78C96.3,-89.72 99.76,-68.86 110.38,-54 113.17,-50.08 116.56,-46.52 120.27,-43.3"/>
105
- <polygon fill="black" stroke="black" points="122.33,-46.14 128.2,-37.32 118.11,-40.55 122.33,-46.14"/>
106
- <text xml:space="preserve" text-anchor="middle" x="157.25" y="-73.7" font-family="Times,serif" font-size="14.00">invoked by agent</text>
107
- <text xml:space="preserve" text-anchor="middle" x="157.25" y="-57.2" font-family="Times,serif" font-size="14.00">or cron</text>
101
+ <title>Driver&#45;&gt;CI</title>
102
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M734.68,-159.36C775.23,-147.04 827.53,-131.14 864.46,-119.92"/>
103
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="865.19,-122.62 872.03,-117.62 863.56,-117.26 865.19,-122.62"/>
108
104
  </g>
109
- <!-- Skill&#45;&gt;Agent -->
105
+ <!-- Skill&#45;&gt;CI -->
110
106
  <g id="edge7" class="edge">
111
- <title>Skill&#45;&gt;Agent</title>
112
- <path fill="none" stroke="black" d="M229.03,-104.61C225.27,-89.84 218.65,-69.46 208.12,-54 205.81,-50.6 203.08,-47.32 200.16,-44.22"/>
113
- <polygon fill="black" stroke="black" points="202.85,-41.95 193.22,-37.54 198,-46.99 202.85,-41.95"/>
114
- <text xml:space="preserve" text-anchor="middle" x="292.35" y="-65.45" font-family="Times,serif" font-size="14.00">loaded in prompt context</text>
107
+ <title>Skill&#45;&gt;CI</title>
108
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M736.23,-106C776.82,-106 828.68,-106 865.19,-106"/>
109
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="865.09,-108.8 873.09,-106 865.09,-103.2 865.09,-108.8"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="816" y="-107.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">pwn &#45;&#45;ai</text>
111
+ </g>
112
+ <!-- Cron&#45;&gt;CI -->
113
+ <g id="edge8" class="edge">
114
+ <title>Cron&#45;&gt;CI</title>
115
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M712.49,-45.89C754.6,-58.69 821.48,-79.02 865.62,-92.43"/>
116
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="864.6,-95.05 873.06,-94.7 866.22,-89.69 864.6,-95.05"/>
115
117
  </g>
116
118
  </g>
117
119
  </svg>