pwn 0.5.779 → 0.5.781

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/documentation/AI-Integration.md +4 -4
  4. data/documentation/AWS.md +10 -9
  5. data/documentation/Agent-Tool-Registry.md +20 -17
  6. data/documentation/Blockchain.md +3 -2
  7. data/documentation/Bounty.md +8 -6
  8. data/documentation/BurpSuite.md +6 -10
  9. data/documentation/CLI-Drivers.md +7 -4
  10. data/documentation/Capability-Broker-Sandbox.md +1 -1
  11. data/documentation/Configuration.md +23 -15
  12. data/documentation/Contributing.md +3 -3
  13. data/documentation/Cron.md +3 -2
  14. data/documentation/Diagrams.md +9 -3
  15. data/documentation/Drivers.md +12 -6
  16. data/documentation/Extrospection.md +25 -5
  17. data/documentation/FFI.md +15 -25
  18. data/documentation/Fuzzing.md +13 -13
  19. data/documentation/General-PWN-Usage.md +7 -4
  20. data/documentation/Harness-Evaluation.md +90 -3
  21. data/documentation/Home.md +6 -5
  22. data/documentation/How-PWN-Works.md +9 -10
  23. data/documentation/Installation.md +12 -11
  24. data/documentation/Metasploit.md +13 -19
  25. data/documentation/Mistakes.md +2 -2
  26. data/documentation/NmapIt.md +6 -3
  27. data/documentation/Operability.md +99 -0
  28. data/documentation/Persistence.md +3 -2
  29. data/documentation/Plugin-Degradation.md +4 -2
  30. data/documentation/Plugins.md +4 -11
  31. data/documentation/Policy-Benchmark.md +4 -0
  32. data/documentation/Reinforcement-Learning.md +19 -3
  33. data/documentation/Reporting.md +6 -5
  34. data/documentation/SAST.md +15 -10
  35. data/documentation/SDR-Decoder-Coverage.md +10 -4
  36. data/documentation/SDR.md +28 -40
  37. data/documentation/Session-Workflow.md +25 -12
  38. data/documentation/Sessions.md +7 -0
  39. data/documentation/Skills-Memory-Learning.md +11 -4
  40. data/documentation/Swarm.md +6 -0
  41. data/documentation/Transparent-Browser.md +1 -1
  42. data/documentation/Troubleshooting.md +6 -3
  43. data/documentation/What-is-PWN.md +4 -4
  44. data/documentation/Why-PWN.md +1 -1
  45. data/documentation/diagrams/agent-tool-registry.svg +219 -180
  46. data/documentation/diagrams/ai-integration-tool-calling.svg +35 -34
  47. data/documentation/diagrams/code-scanning-sast.svg +78 -78
  48. data/documentation/diagrams/cron-scheduling.svg +165 -145
  49. data/documentation/diagrams/dot/_THEME.md +6 -4
  50. data/documentation/diagrams/dot/agent-tool-registry.dot +6 -2
  51. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +1 -1
  52. data/documentation/diagrams/dot/code-scanning-sast.dot +8 -8
  53. data/documentation/diagrams/dot/cron-scheduling.dot +2 -0
  54. data/documentation/diagrams/dot/driver-framework.dot +1 -1
  55. data/documentation/diagrams/dot/extrospection-world-awareness.dot +2 -2
  56. data/documentation/diagrams/dot/fuzzing-workflow.dot +3 -3
  57. data/documentation/diagrams/dot/history-to-drivers.dot +1 -1
  58. data/documentation/diagrams/dot/memory-skills-detailed.dot +3 -3
  59. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +2 -2
  60. data/documentation/diagrams/dot/overall-pwn-architecture.dot +33 -121
  61. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -2
  62. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  63. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +31 -167
  64. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +1 -1
  65. data/documentation/diagrams/dot/reinforcement-learning.dot +15 -7
  66. data/documentation/diagrams/dot/reporting-pipeline.dot +5 -3
  67. data/documentation/diagrams/dot/reverse-engineering-flow.dot +3 -3
  68. data/documentation/diagrams/dot/sdr-radio-flow.dot +5 -5
  69. data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
  70. data/documentation/diagrams/dot/swarm-multi-agent.dot +3 -3
  71. data/documentation/diagrams/dot/task-summarizer.dot +2 -2
  72. data/documentation/diagrams/dot/web-application-testing.dot +4 -3
  73. data/documentation/diagrams/dot/zero-day-research-flow.dot +4 -3
  74. data/documentation/diagrams/driver-framework.svg +1 -1
  75. data/documentation/diagrams/extrospection-world-awareness.svg +178 -178
  76. data/documentation/diagrams/fuzzing-workflow.svg +58 -58
  77. data/documentation/diagrams/history-to-drivers.svg +42 -42
  78. data/documentation/diagrams/memory-skills-detailed.svg +210 -210
  79. data/documentation/diagrams/mistakes-negative-feedback.svg +116 -116
  80. data/documentation/diagrams/overall-pwn-architecture.svg +248 -404
  81. data/documentation/diagrams/persistence-filesystem.svg +143 -143
  82. data/documentation/diagrams/plugin-ecosystem.svg +100 -100
  83. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +233 -752
  84. data/documentation/diagrams/pwn-repl-prototyping.svg +27 -27
  85. data/documentation/diagrams/reinforcement-learning.svg +295 -221
  86. data/documentation/diagrams/reporting-pipeline.svg +94 -80
  87. data/documentation/diagrams/reverse-engineering-flow.svg +31 -31
  88. data/documentation/diagrams/sdr-radio-flow.svg +157 -155
  89. data/documentation/diagrams/sessions-cron-automation.svg +13 -13
  90. data/documentation/diagrams/swarm-multi-agent.svg +86 -86
  91. data/documentation/diagrams/task-summarizer.svg +57 -57
  92. data/documentation/diagrams/web-application-testing.svg +81 -75
  93. data/documentation/diagrams/zero-day-research-flow.svg +101 -92
  94. data/documentation/pwn-REPL.md +5 -3
  95. data/documentation/pwn-ai-Agent.md +18 -14
  96. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  97. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +1 -0
  98. data/lib/pwn/ai/agent/learning.rb +46 -1
  99. data/lib/pwn/ai/agent/loop.rb +6 -3
  100. data/lib/pwn/ai/agent/policy_evaluation.rb +5 -1
  101. data/lib/pwn/ai/agent/reward.rb +9 -0
  102. data/lib/pwn/version.rb +1 -1
  103. data/spec/fixtures/harness/completion_regressions.json +10 -0
  104. data/spec/fixtures/harness/completion_regressions.json.sha256 +1 -0
  105. data/spec/integration/harness_evaluation_spec.rb +13 -0
  106. data/spec/lib/pwn/ai/agent/learning_spec.rb +22 -0
  107. data/spec/lib/pwn/ai/agent/loop_spec.rb +39 -0
  108. data/spec/lib/pwn/ai/agent/policy_evaluation_spec.rb +6 -1
  109. data/spec/lib/pwn/ai/agent/reward_spec.rb +21 -0
  110. data/spec/support/harness/evaluate.rb +1 -1
  111. data/third_party/pwn_rdoc.jsonl +2 -1
  112. metadata +10 -7
@@ -3,450 +3,294 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: PWN_Overall_Architecture Pages: 1 -->
7
- <svg width="1770pt" height="848pt"
8
- viewBox="0.00 0.00 1770.00 848.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 804.83)">
10
- <title>PWN_Overall_Architecture</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-804.83 1727.2,-804.83 1727.2,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="585.12" y="-737.73" font-family="sans-Serif" font-weight="bold" font-size="22.00" fill="#e2e8f0">PWN &#45; Offensive Security Automation Framework</text>
13
- <text xml:space="preserve" text-anchor="start" x="770" y="-726.18" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Overall Architecture · lib/pwn/*</text>
14
- <g id="clust1" class="cluster">
15
- <title>cluster_actors</title>
16
- <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M495,-614.62C495,-614.62 1120,-614.62 1120,-614.62 1126,-614.62 1132,-620.62 1132,-626.62 1132,-626.62 1132,-700.62 1132,-700.62 1132,-706.62 1126,-712.62 1120,-712.62 1120,-712.62 495,-712.62 495,-712.62 489,-712.62 483,-706.62 483,-700.62 483,-700.62 483,-626.62 483,-626.62 483,-620.62 489,-614.62 495,-614.62"/>
17
- <text xml:space="preserve" text-anchor="middle" x="807.5" y="-687.73" font-family="sans-Serif" font-size="22.00" fill="#94a3b8">Actors</text>
18
- </g>
19
- <g id="clust3" class="cluster">
20
- <title>cluster_entry</title>
21
- <path fill="#0c4a6e" stroke="#0369a1" stroke-width="2" d="M359,-476.62C359,-476.62 933,-476.62 933,-476.62 939,-476.62 945,-482.62 945,-488.62 945,-488.62 945,-550.12 945,-550.12 945,-556.12 939,-562.12 933,-562.12 933,-562.12 359,-562.12 359,-562.12 353,-562.12 347,-556.12 347,-550.12 347,-550.12 347,-488.62 347,-488.62 347,-482.62 353,-476.62 359,-476.62"/>
22
- <text xml:space="preserve" text-anchor="middle" x="646" y="-537.23" font-family="sans-Serif" font-size="22.00" fill="#7dd3fc">Entry Points &#160;(bin/)</text>
23
- </g>
24
- <g id="clust5" class="cluster">
25
- <title>cluster_agent</title>
26
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M278,-299.12C278,-299.12 1024,-299.12 1024,-299.12 1030,-299.12 1036,-305.12 1036,-311.12 1036,-311.12 1036,-412.12 1036,-412.12 1036,-418.12 1030,-424.12 1024,-424.12 1024,-424.12 278,-424.12 278,-424.12 272,-424.12 266,-418.12 266,-412.12 266,-412.12 266,-311.12 266,-311.12 266,-305.12 272,-299.12 278,-299.12"/>
27
- <text xml:space="preserve" text-anchor="middle" x="651" y="-399.23" font-family="sans-Serif" font-size="22.00" fill="#ddd6fe">PWN::AI::Agent</text>
28
- </g>
29
- <g id="clust7" class="cluster">
30
- <title>cluster_caps</title>
31
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M222,-148.62C222,-148.62 1161,-148.62 1161,-148.62 1167,-148.62 1173,-154.62 1173,-160.62 1173,-160.62 1173,-234.62 1173,-234.62 1173,-240.62 1167,-246.62 1161,-246.62 1161,-246.62 222,-246.62 222,-246.62 216,-246.62 210,-240.62 210,-234.62 210,-234.62 210,-160.62 210,-160.62 210,-154.62 216,-148.62 222,-148.62"/>
32
- <text xml:space="preserve" text-anchor="middle" x="691.5" y="-221.72" font-family="sans-Serif" font-size="22.00" fill="#a7f3d0">Capability Namespaces &#160;(lib/pwn/*)</text>
33
- </g>
34
- <g id="clust9" class="cluster">
35
- <title>cluster_persist</title>
36
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M20,-8C20,-8 1664,-8 1664,-8 1670,-8 1676,-14 1676,-20 1676,-20 1676,-93.62 1676,-93.62 1676,-99.62 1670,-105.62 1664,-105.62 1664,-105.62 20,-105.62 20,-105.62 14,-105.62 8,-99.62 8,-93.62 8,-93.62 8,-20 8,-20 8,-14 14,-8 20,-8"/>
37
- <text xml:space="preserve" text-anchor="middle" x="842" y="-80.72" font-family="sans-Serif" font-size="22.00" fill="#fde68a">Persistence &#160;~/.pwn/</text>
38
- </g>
39
- <!-- User -->
6
+ <!-- Title: PWN_Architecture Pages: 1 -->
7
+ <svg width="1135pt" height="986pt"
8
+ viewBox="0.00 0.00 1135.00 986.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 942.83)">
10
+ <title>PWN_Architecture</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-942.83 1092.2,-942.83 1092.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="middle" x="524.5" y="-874.73" font-family="sans-Serif" font-size="22.00" fill="#e2e8f0">PWN &#45; runtime ownership and evidence flow</text>
13
+ <!-- Operator -->
40
14
  <g id="node1" class="node">
41
- <title>User</title>
42
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M609,-664.88C609,-664.88 503,-664.88 503,-664.88 497,-664.88 491,-658.88 491,-652.88 491,-652.88 491,-640.88 491,-640.88 491,-634.88 497,-628.88 503,-628.88 503,-628.88 609,-628.88 609,-628.88 615,-628.88 621,-634.88 621,-640.88 621,-640.88 621,-652.88 621,-652.88 621,-658.88 615,-664.88 609,-664.88"/>
43
- <text xml:space="preserve" text-anchor="middle" x="556" y="-649.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
44
- <text xml:space="preserve" text-anchor="middle" x="556" y="-636.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Red Team · Bug Hunter</text>
15
+ <title>Operator</title>
16
+ <path fill="#7dd3fc" stroke="#334155" d="M78.5,-866.12C78.5,-866.12 23.5,-866.12 23.5,-866.12 17.5,-866.12 11.5,-860.12 11.5,-854.12 11.5,-854.12 11.5,-842.12 11.5,-842.12 11.5,-836.12 17.5,-830.12 23.5,-830.12 23.5,-830.12 78.5,-830.12 78.5,-830.12 84.5,-830.12 90.5,-836.12 90.5,-842.12 90.5,-842.12 90.5,-854.12 90.5,-854.12 90.5,-860.12 84.5,-866.12 78.5,-866.12"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="51" y="-844.42" font-family="sans-Serif" font-size="11.00">Operator / CI</text>
45
18
  </g>
46
- <!-- REPL -->
47
- <g id="node5" class="node">
48
- <title>REPL</title>
49
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M459.25,-520.62C459.25,-520.62 366.75,-520.62 366.75,-520.62 360.75,-520.62 354.75,-514.62 354.75,-508.62 354.75,-508.62 354.75,-496.62 354.75,-496.62 354.75,-490.62 360.75,-484.62 366.75,-484.62 366.75,-484.62 459.25,-484.62 459.25,-484.62 465.25,-484.62 471.25,-490.62 471.25,-496.62 471.25,-496.62 471.25,-508.62 471.25,-508.62 471.25,-514.62 465.25,-520.62 459.25,-520.62"/>
50
- <text xml:space="preserve" text-anchor="middle" x="413" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🐚 &#160;pwn REPL</text>
51
- <text xml:space="preserve" text-anchor="middle" x="413" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Pry + PWN:: preload</text>
19
+ <!-- Entry -->
20
+ <g id="node2" class="node">
21
+ <title>Entry</title>
22
+ <path fill="#7dd3fc" stroke="#334155" d="M208.62,-793.12C208.62,-793.12 79.38,-793.12 79.38,-793.12 73.38,-793.12 67.38,-787.12 67.38,-781.12 67.38,-781.12 67.38,-769.12 67.38,-769.12 67.38,-763.12 73.38,-757.12 79.38,-757.12 79.38,-757.12 208.62,-757.12 208.62,-757.12 214.62,-757.12 220.62,-763.12 220.62,-769.12 220.62,-769.12 220.62,-781.12 220.62,-781.12 220.62,-787.12 214.62,-793.12 208.62,-793.12"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="144" y="-778.17" font-family="sans-Serif" font-size="11.00">pwn / pwn&#45;ai CLI and curses</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="144" y="-764.67" font-family="sans-Serif" font-size="11.00">56 executables total</text>
52
25
  </g>
53
- <!-- User&#45;&gt;REPL -->
26
+ <!-- Operator&#45;&gt;Entry -->
54
27
  <g id="edge1" class="edge">
55
- <title>User&#45;&gt;REPL</title>
56
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M538.47,-628.43C513.16,-603.26 466.31,-556.65 437.57,-528.07"/>
57
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="439.72,-526.25 432.07,-522.6 435.77,-530.23 439.72,-526.25"/>
28
+ <title>Operator&#45;&gt;Entry</title>
29
+ <path fill="none" stroke="#94a3b8" d="M73.51,-829.94C85.19,-821.02 99.65,-809.98 112.43,-800.23"/>
30
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="114.34,-803.17 120.17,-794.32 110.1,-797.6 114.34,-803.17"/>
58
31
  </g>
59
- <!-- PwnAI -->
60
- <g id="node6" class="node">
61
- <title>PwnAI</title>
62
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M612.75,-520.62C612.75,-520.62 523.25,-520.62 523.25,-520.62 517.25,-520.62 511.25,-514.62 511.25,-508.62 511.25,-508.62 511.25,-496.62 511.25,-496.62 511.25,-490.62 517.25,-484.62 523.25,-484.62 523.25,-484.62 612.75,-484.62 612.75,-484.62 618.75,-484.62 624.75,-490.62 624.75,-496.62 624.75,-496.62 624.75,-508.62 624.75,-508.62 624.75,-514.62 618.75,-520.62 612.75,-520.62"/>
63
- <text xml:space="preserve" text-anchor="middle" x="568" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">✨ &#160;pwn&#45;ai</text>
64
- <text xml:space="preserve" text-anchor="middle" x="568" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Agent TUI · pwn &#45;&#45;ai</text>
32
+ <!-- Mesh -->
33
+ <g id="node3" class="node">
34
+ <title>Mesh</title>
35
+ <path fill="#7dd3fc" stroke="#334155" d="M250,-133.62C250,-133.62 12,-133.62 12,-133.62 6,-133.62 0,-127.62 0,-121.62 0,-121.62 0,-97.12 0,-97.12 0,-91.12 6,-85.12 12,-85.12 12,-85.12 250,-85.12 250,-85.12 256,-85.12 262,-91.12 262,-97.12 262,-97.12 262,-121.62 262,-121.62 262,-127.62 256,-133.62 250,-133.62"/>
36
+ <text xml:space="preserve" text-anchor="middle" x="131" y="-119.17" font-family="sans-Serif" font-size="11.00">pwn&#45;mesh</text>
37
+ <text xml:space="preserve" text-anchor="middle" x="131" y="-105.67" font-family="sans-Serif" font-size="11.00">primary radio or MQTT + optional secondary MQTT</text>
38
+ <text xml:space="preserve" text-anchor="middle" x="131" y="-92.17" font-family="sans-Serif" font-size="11.00">@ai / private channel / whitelist gate</text>
65
39
  </g>
66
- <!-- User&#45;&gt;PwnAI -->
40
+ <!-- Operator&#45;&gt;Mesh -->
67
41
  <g id="edge2" class="edge">
68
- <title>User&#45;&gt;PwnAI</title>
69
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M557.47,-628.43C559.52,-604.12 563.26,-559.79 565.69,-531.03"/>
70
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="568.47,-531.38 566.35,-523.17 562.89,-530.91 568.47,-531.38"/>
71
- </g>
72
- <!-- CI -->
73
- <g id="node2" class="node">
74
- <title>CI</title>
75
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M755,-664.88C755,-664.88 673,-664.88 673,-664.88 667,-664.88 661,-658.88 661,-652.88 661,-652.88 661,-640.88 661,-640.88 661,-634.88 667,-628.88 673,-628.88 673,-628.88 755,-628.88 755,-628.88 761,-628.88 767,-634.88 767,-640.88 767,-640.88 767,-652.88 767,-652.88 767,-658.88 761,-664.88 755,-664.88"/>
76
- <text xml:space="preserve" text-anchor="middle" x="714" y="-649.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⚙️ &#160;CI / CD</text>
77
- <text xml:space="preserve" text-anchor="middle" x="714" y="-636.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Headless pipelines</text>
42
+ <title>Operator&#45;&gt;Mesh</title>
43
+ <path fill="none" stroke="#94a3b8" d="M46.39,-829.76C43.01,-815.47 39,-794.63 39,-776.12 39,-776.12 39,-776.12 39,-197.12 39,-173.73 54.94,-154.78 73.55,-140.63"/>
44
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="75.46,-143.57 81.61,-134.94 71.42,-137.85 75.46,-143.57"/>
78
45
  </g>
79
- <!-- CLI -->
80
- <g id="node7" class="node">
81
- <title>CLI</title>
82
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M741,-520.62C741,-520.62 677,-520.62 677,-520.62 671,-520.62 665,-514.62 665,-508.62 665,-508.62 665,-496.62 665,-496.62 665,-490.62 671,-484.62 677,-484.62 677,-484.62 741,-484.62 741,-484.62 747,-484.62 753,-490.62 753,-496.62 753,-496.62 753,-508.62 753,-508.62 753,-514.62 747,-520.62 741,-520.62"/>
83
- <text xml:space="preserve" text-anchor="middle" x="709" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">📜 &#160;bin/pwn_*</text>
84
- <text xml:space="preserve" text-anchor="middle" x="709" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">54 executables</text>
46
+ <!-- Runtime -->
47
+ <g id="node4" class="node">
48
+ <title>Runtime</title>
49
+ <path fill="#c4b5fd" stroke="#334155" d="M490.38,-710.62C490.38,-710.62 293.62,-710.62 293.62,-710.62 287.62,-710.62 281.62,-704.62 281.62,-698.62 281.62,-698.62 281.62,-674.12 281.62,-674.12 281.62,-668.12 287.62,-662.12 293.62,-662.12 293.62,-662.12 490.38,-662.12 490.38,-662.12 496.38,-662.12 502.38,-668.12 502.38,-674.12 502.38,-674.12 502.38,-698.62 502.38,-698.62 502.38,-704.62 496.38,-710.62 490.38,-710.62"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="392" y="-696.17" font-family="sans-Serif" font-size="11.00">RequestRuntime + Loop</text>
51
+ <text xml:space="preserve" text-anchor="middle" x="392" y="-682.67" font-family="sans-Serif" font-size="11.00">original objective / additive steering</text>
52
+ <text xml:space="preserve" text-anchor="middle" x="392" y="-669.17" font-family="sans-Serif" font-size="11.00">checkpoint / permissions / uncertain effects</text>
85
53
  </g>
86
- <!-- CI&#45;&gt;CLI -->
54
+ <!-- Entry&#45;&gt;Runtime -->
87
55
  <g id="edge3" class="edge">
88
- <title>CI&#45;&gt;CLI</title>
89
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M713.39,-628.43C712.53,-604.12 710.97,-559.79 709.96,-531.03"/>
90
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="712.77,-531.07 709.69,-523.18 707.17,-531.27 712.77,-531.07"/>
91
- </g>
92
- <!-- Cronb -->
93
- <g id="node8" class="node">
94
- <title>Cronb</title>
95
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M924.75,-520.62C924.75,-520.62 805.25,-520.62 805.25,-520.62 799.25,-520.62 793.25,-514.62 793.25,-508.62 793.25,-508.62 793.25,-496.62 793.25,-496.62 793.25,-490.62 799.25,-484.62 805.25,-484.62 805.25,-484.62 924.75,-484.62 924.75,-484.62 930.75,-484.62 936.75,-490.62 936.75,-496.62 936.75,-496.62 936.75,-508.62 936.75,-508.62 936.75,-514.62 930.75,-520.62 924.75,-520.62"/>
96
- <text xml:space="preserve" text-anchor="middle" x="865" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⏱ &#160;PWN::Cron</text>
97
- <text xml:space="preserve" text-anchor="middle" x="865" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Jobs + background worker</text>
56
+ <title>Entry&#45;&gt;Runtime</title>
57
+ <path fill="none" stroke="#94a3b8" d="M193.89,-756.67C228.15,-744.69 274.34,-728.53 313.49,-714.84"/>
58
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="314.62,-718.15 322.91,-711.54 312.31,-711.54 314.62,-718.15"/>
98
59
  </g>
99
- <!-- CI&#45;&gt;Cronb -->
60
+ <!-- Mesh&#45;&gt;Runtime -->
100
61
  <g id="edge4" class="edge">
101
- <title>CI&#45;&gt;Cronb</title>
102
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M732.52,-628.43C759.35,-603.16 809.13,-556.26 839.44,-527.7"/>
103
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="841,-530.08 844.9,-522.56 837.16,-526.01 841,-530.08"/>
104
- <text xml:space="preserve" text-anchor="middle" x="809.4" y="-572.08" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">crontab</text>
62
+ <title>Mesh&#45;&gt;Runtime</title>
63
+ <path fill="none" stroke="#94a3b8" d="M131,-133.94C131,-151.39 131,-175.74 131,-197.12 131,-351.38 131,-351.38 131,-351.38 131,-374.4 127.33,-380.88 133.25,-403.12 161.83,-510.45 181.31,-536.31 248,-625.12 257.78,-638.15 270.91,-648.39 285.28,-656.42"/>
64
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="283.56,-659.47 294.05,-660.94 286.77,-653.25 283.56,-659.47"/>
65
+ <text xml:space="preserve" text-anchor="middle" x="186.12" y="-394.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">eligible received @ai only</text>
105
66
  </g>
106
- <!-- LLM -->
107
- <g id="node3" class="node">
108
- <title>LLM</title>
109
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M959.25,-671.12C959.25,-671.12 818.75,-671.12 818.75,-671.12 812.75,-671.12 806.75,-665.12 806.75,-659.12 806.75,-659.12 806.75,-634.62 806.75,-634.62 806.75,-628.62 812.75,-622.62 818.75,-622.62 818.75,-622.62 959.25,-622.62 959.25,-622.62 965.25,-622.62 971.25,-628.62 971.25,-634.62 971.25,-634.62 971.25,-659.12 971.25,-659.12 971.25,-665.12 965.25,-671.12 959.25,-671.12"/>
110
- <text xml:space="preserve" text-anchor="middle" x="889" y="-656.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Providers</text>
111
- <text xml:space="preserve" text-anchor="middle" x="889" y="-643.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">OpenAI · Anthropic · Grok</text>
112
- <text xml:space="preserve" text-anchor="middle" x="889" y="-629.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Gemini · Ollama · Open WebUI</text>
113
- </g>
114
- <!-- Target -->
115
- <g id="node4" class="node">
116
- <title>Target</title>
117
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M1112.38,-671.12C1112.38,-671.12 1023.62,-671.12 1023.62,-671.12 1017.62,-671.12 1011.62,-665.12 1011.62,-659.12 1011.62,-659.12 1011.62,-634.62 1011.62,-634.62 1011.62,-628.62 1017.62,-622.62 1023.62,-622.62 1023.62,-622.62 1112.38,-622.62 1112.38,-622.62 1118.38,-622.62 1124.38,-628.62 1124.38,-634.62 1124.38,-634.62 1124.38,-659.12 1124.38,-659.12 1124.38,-665.12 1118.38,-671.12 1112.38,-671.12"/>
118
- <text xml:space="preserve" text-anchor="middle" x="1068" y="-656.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🎯 &#160;Attack Surface</text>
119
- <text xml:space="preserve" text-anchor="middle" x="1068" y="-643.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Hosts · Web · Cloud</text>
120
- <text xml:space="preserve" text-anchor="middle" x="1068" y="-629.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Radio · Hardware</text>
67
+ <!-- Prompt -->
68
+ <g id="node5" class="node">
69
+ <title>Prompt</title>
70
+ <path fill="#c4b5fd" stroke="#334155" d="M889.38,-625.12C889.38,-625.12 674.62,-625.12 674.62,-625.12 668.62,-625.12 662.62,-619.12 662.62,-613.12 662.62,-613.12 662.62,-588.62 662.62,-588.62 662.62,-582.62 668.62,-576.62 674.62,-576.62 674.62,-576.62 889.38,-576.62 889.38,-576.62 895.38,-576.62 901.38,-582.62 901.38,-588.62 901.38,-588.62 901.38,-613.12 901.38,-613.12 901.38,-619.12 895.38,-625.12 889.38,-625.12"/>
71
+ <text xml:space="preserve" text-anchor="middle" x="782" y="-610.67" font-family="sans-Serif" font-size="11.00">PromptBuilder</text>
72
+ <text xml:space="preserve" text-anchor="middle" x="782" y="-597.17" font-family="sans-Serif" font-size="11.00">memory / skills / lessons / mistakes / policy</text>
73
+ <text xml:space="preserve" text-anchor="middle" x="782" y="-583.67" font-family="sans-Serif" font-size="11.00">HOST: DetectOS summary + PreflightChecker</text>
121
74
  </g>
122
- <!-- Loop -->
123
- <g id="node9" class="node">
124
- <title>Loop</title>
125
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M446,-382.62C446,-382.62 286,-382.62 286,-382.62 280,-382.62 274,-376.62 274,-370.62 274,-370.62 274,-319.12 274,-319.12 274,-313.12 280,-307.12 286,-307.12 286,-307.12 446,-307.12 446,-307.12 452,-307.12 458,-313.12 458,-319.12 458,-319.12 458,-370.62 458,-370.62 458,-376.62 452,-382.62 446,-382.62"/>
126
- <text xml:space="preserve" text-anchor="middle" x="366" y="-368.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Loop</text>
127
- <text xml:space="preserve" text-anchor="middle" x="366" y="-354.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TaskSummarizer briefs</text>
128
- <text xml:space="preserve" text-anchor="middle" x="366" y="-341.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">plan → dispatch → observe</text>
129
- <text xml:space="preserve" text-anchor="middle" x="366" y="-327.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">max_iters 777 (scars do not shrink)</text>
130
- <text xml:space="preserve" text-anchor="middle" x="366" y="-314.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">last&#45;iter tools only if done</text>
131
- </g>
132
- <!-- REPL&#45;&gt;Loop -->
75
+ <!-- Runtime&#45;&gt;Prompt -->
133
76
  <g id="edge5" class="edge">
134
- <title>REPL&#45;&gt;Loop</title>
135
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M407.7,-484.06C401.04,-462 389.36,-423.3 380.06,-392.45"/>
136
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="382.81,-391.89 377.82,-385.04 377.45,-393.51 382.81,-391.89"/>
137
- </g>
138
- <!-- PwnAI&#45;&gt;Loop -->
139
- <g id="edge6" class="edge">
140
- <title>PwnAI&#45;&gt;Loop</title>
141
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M543.77,-484.01C527.88,-472.39 506.71,-456.76 488.25,-442.62 466.05,-425.64 441.87,-406.61 420.92,-389.96"/>
142
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="422.82,-387.89 414.82,-385.1 419.34,-392.28 422.82,-387.89"/>
143
- <text xml:space="preserve" text-anchor="middle" x="523.12" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">natural language</text>
77
+ <title>Runtime&#45;&gt;Prompt</title>
78
+ <path fill="none" stroke="#94a3b8" d="M502.72,-661.67C551.91,-651.14 609.98,-638.71 660.38,-627.91"/>
79
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="660.82,-631.4 669.87,-625.88 659.35,-624.55 660.82,-631.4"/>
144
80
  </g>
145
81
  <!-- Registry -->
146
- <g id="node10" class="node">
82
+ <g id="node6" class="node">
147
83
  <title>Registry</title>
148
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M625.88,-369.12C625.88,-369.12 510.12,-369.12 510.12,-369.12 504.12,-369.12 498.12,-363.12 498.12,-357.12 498.12,-357.12 498.12,-332.62 498.12,-332.62 498.12,-326.62 504.12,-320.62 510.12,-320.62 510.12,-320.62 625.88,-320.62 625.88,-320.62 631.88,-320.62 637.88,-326.62 637.88,-332.62 637.88,-332.62 637.88,-357.12 637.88,-357.12 637.88,-363.12 631.88,-369.12 625.88,-369.12"/>
149
- <text xml:space="preserve" text-anchor="middle" x="568" y="-354.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
150
- <text xml:space="preserve" text-anchor="middle" x="568" y="-341.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">13 toolsets · 87 tools</text>
151
- <text xml:space="preserve" text-anchor="middle" x="568" y="-327.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool_router (CORE+topK)</text>
84
+ <path fill="#c4b5fd" stroke="#334155" d="M632.5,-618.88C632.5,-618.88 451.5,-618.88 451.5,-618.88 445.5,-618.88 439.5,-612.88 439.5,-606.88 439.5,-606.88 439.5,-594.88 439.5,-594.88 439.5,-588.88 445.5,-582.88 451.5,-582.88 451.5,-582.88 632.5,-582.88 632.5,-582.88 638.5,-582.88 644.5,-588.88 644.5,-594.88 644.5,-594.88 644.5,-606.88 644.5,-606.88 644.5,-612.88 638.5,-618.88 632.5,-618.88"/>
85
+ <text xml:space="preserve" text-anchor="middle" x="542" y="-603.92" font-family="sans-Serif" font-size="11.00">Registry: 16 toolsets / 150 tools</text>
86
+ <text xml:space="preserve" text-anchor="middle" x="542" y="-590.42" font-family="sans-Serif" font-size="11.00">normal Loop: core&#45;only + relevant MCP</text>
152
87
  </g>
153
- <!-- PwnAI&#45;&gt;Registry -->
154
- <g id="edge7" class="edge">
155
- <title>PwnAI&#45;&gt;Registry</title>
156
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M568,-484.06C568,-458.79 568,-411.69 568,-379.58"/>
157
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="570.8,-379.69 568,-371.69 565.2,-379.69 570.8,-379.69"/>
88
+ <!-- Runtime&#45;&gt;Registry -->
89
+ <g id="edge6" class="edge">
90
+ <title>Runtime&#45;&gt;Registry</title>
91
+ <path fill="none" stroke="#94a3b8" d="M434.58,-661.67C455.33,-650.12 480.17,-636.29 500.74,-624.84"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="502.4,-627.92 509.44,-620 499,-621.81 502.4,-627.92"/>
158
93
  </g>
159
- <!-- Swarm -->
160
- <g id="node11" class="node">
161
- <title>Swarm</title>
162
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M794.25,-362.88C794.25,-362.88 689.75,-362.88 689.75,-362.88 683.75,-362.88 677.75,-356.88 677.75,-350.88 677.75,-350.88 677.75,-338.88 677.75,-338.88 677.75,-332.88 683.75,-326.88 689.75,-326.88 689.75,-326.88 794.25,-326.88 794.25,-326.88 800.25,-326.88 806.25,-332.88 806.25,-338.88 806.25,-338.88 806.25,-350.88 806.25,-350.88 806.25,-356.88 800.25,-362.88 794.25,-362.88"/>
163
- <text xml:space="preserve" text-anchor="middle" x="742" y="-347.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Swarm</text>
164
- <text xml:space="preserve" text-anchor="middle" x="742" y="-334.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">personas · debate · bus</text>
94
+ <!-- Verify -->
95
+ <g id="node12" class="node">
96
+ <title>Verify</title>
97
+ <path fill="#c4b5fd" stroke="#334155" d="M412.88,-289.12C412.88,-289.12 171.12,-289.12 171.12,-289.12 165.12,-289.12 159.12,-283.12 159.12,-277.12 159.12,-277.12 159.12,-265.12 159.12,-265.12 159.12,-259.12 165.12,-253.12 171.12,-253.12 171.12,-253.12 412.88,-253.12 412.88,-253.12 418.88,-253.12 424.88,-259.12 424.88,-265.12 424.88,-265.12 424.88,-277.12 424.88,-277.12 424.88,-283.12 418.88,-289.12 412.88,-289.12"/>
98
+ <text xml:space="preserve" text-anchor="middle" x="292" y="-274.18" font-family="sans-Serif" font-size="11.00">Finalization arbiter + Verification</text>
99
+ <text xml:space="preserve" text-anchor="middle" x="292" y="-260.68" font-family="sans-Serif" font-size="11.00">current bytes / authored checks / complete coverage</text>
165
100
  </g>
166
- <!-- CLI&#45;&gt;Swarm -->
167
- <!-- Plugins -->
168
- <g id="node13" class="node">
169
- <title>Plugins</title>
170
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M277.75,-198.88C277.75,-198.88 230.25,-198.88 230.25,-198.88 224.25,-198.88 218.25,-192.88 218.25,-186.88 218.25,-186.88 218.25,-174.88 218.25,-174.88 218.25,-168.88 224.25,-162.88 230.25,-162.88 230.25,-162.88 277.75,-162.88 277.75,-162.88 283.75,-162.88 289.75,-168.88 289.75,-174.88 289.75,-174.88 289.75,-186.88 289.75,-186.88 289.75,-192.88 283.75,-198.88 277.75,-198.88"/>
171
- <text xml:space="preserve" text-anchor="middle" x="254" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Plugins</text>
172
- <text xml:space="preserve" text-anchor="middle" x="254" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">67 modules</text>
101
+ <!-- Runtime&#45;&gt;Verify -->
102
+ <g id="edge14" class="edge">
103
+ <title>Runtime&#45;&gt;Verify</title>
104
+ <path fill="none" stroke="#94a3b8" d="M299.4,-661.67C273.36,-649.11 252,-630.18 252,-601.88 252,-601.88 252,-601.88 252,-438.12 252,-388.01 220.04,-372.51 239,-326.12 243.44,-315.27 251.22,-305.42 259.48,-297.2"/>
105
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="261.7,-299.91 266.68,-290.56 256.95,-294.77 261.7,-299.91"/>
173
106
  </g>
174
- <!-- CLI&#45;&gt;Plugins -->
175
- <g id="edge18" class="edge">
176
- <title>CLI&#45;&gt;Plugins</title>
177
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M750.97,-483.98C758.24,-481.28 765.78,-478.71 773,-476.62 891.7,-442.34 967.31,-519.39 1046,-424.12 1081.38,-381.29 1083.86,-339.78 1046,-299.12 1018.06,-269.13 346.65,-264.99 310,-246.62 292.78,-238 278.65,-221.52 268.89,-207.34"/>
178
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="271.45,-206.15 264.73,-200.99 266.77,-209.21 271.45,-206.15"/>
107
+ <!-- Provider -->
108
+ <g id="node7" class="node">
109
+ <title>Provider</title>
110
+ <path fill="#fda4af" stroke="#334155" d="M680.88,-539.62C680.88,-539.62 493.12,-539.62 493.12,-539.62 487.12,-539.62 481.12,-533.62 481.12,-527.62 481.12,-527.62 481.12,-515.62 481.12,-515.62 481.12,-509.62 487.12,-503.62 493.12,-503.62 493.12,-503.62 680.88,-503.62 680.88,-503.62 686.88,-503.62 692.88,-509.62 692.88,-515.62 692.88,-515.62 692.88,-527.62 692.88,-527.62 692.88,-533.62 686.88,-539.62 680.88,-539.62"/>
111
+ <text xml:space="preserve" text-anchor="middle" x="587" y="-524.67" font-family="sans-Serif" font-size="11.00">Configured provider adapter</text>
112
+ <text xml:space="preserve" text-anchor="middle" x="587" y="-511.18" font-family="sans-Serif" font-size="11.00">request&#45;local routing and retry ownership</text>
179
113
  </g>
180
- <!-- Prompt -->
181
- <g id="node12" class="node">
182
- <title>Prompt</title>
183
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1015.88,-375.88C1015.88,-375.88 858.12,-375.88 858.12,-375.88 852.12,-375.88 846.12,-369.88 846.12,-363.88 846.12,-363.88 846.12,-325.88 846.12,-325.88 846.12,-319.88 852.12,-313.88 858.12,-313.88 858.12,-313.88 1015.88,-313.88 1015.88,-313.88 1021.88,-313.88 1027.88,-319.88 1027.88,-325.88 1027.88,-325.88 1027.88,-363.88 1027.88,-363.88 1027.88,-369.88 1021.88,-375.88 1015.88,-375.88"/>
184
- <text xml:space="preserve" text-anchor="middle" x="937" y="-361.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
185
- <text xml:space="preserve" text-anchor="middle" x="937" y="-347.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine&#45;budgeted blocks</text>
186
- <text xml:space="preserve" text-anchor="middle" x="937" y="-334.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MEMORY · SKILLS · POLICY</text>
187
- <text xml:space="preserve" text-anchor="middle" x="937" y="-320.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MemoryIndex → relevance&#45;ranked</text>
188
- </g>
189
- <!-- Cronb&#45;&gt;Prompt -->
190
- <!-- Loop&#45;&gt;LLM -->
191
- <g id="edge29" class="edge">
192
- <title>Loop&#45;&gt;LLM</title>
193
- <path fill="none" stroke="#c4b5fd" stroke-width="2" d="M408.22,-383.26C428.04,-398.63 452.81,-414.95 478,-424.12 515.73,-437.87 528.05,-428.05 568,-432.12 654.12,-440.9 897.39,-412.01 955,-476.62 990.42,-516.35 950.47,-577.24 919.12,-614.13"/>
194
- <polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="2" points="917.33,-611.92 914.18,-619.79 921.55,-615.6 917.33,-611.92"/>
195
- <text xml:space="preserve" text-anchor="middle" x="993.61" y="-499.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool&#45;use API</text>
196
- </g>
197
- <!-- Loop&#45;&gt;Plugins -->
198
- <g id="edge10" class="edge">
199
- <title>Loop&#45;&gt;Plugins</title>
200
- <path fill="none" stroke="#34d399" stroke-width="2" d="M340.06,-306.65C330.94,-293.53 320.63,-278.68 311.25,-265.12 298.16,-246.19 283.44,-224.79 272.21,-208.43"/>
201
- <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="274.58,-206.94 267.75,-201.93 269.97,-210.11 274.58,-206.94"/>
202
- <text xml:space="preserve" text-anchor="middle" x="331.12" y="-256.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">pwn_eval</text>
114
+ <!-- Prompt&#45;&gt;Provider -->
115
+ <g id="edge7" class="edge">
116
+ <title>Prompt&#45;&gt;Provider</title>
117
+ <path fill="none" stroke="#94a3b8" d="M722.17,-576.17C696.4,-565.97 666.49,-554.12 641.37,-544.16"/>
118
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="642.91,-541.01 632.33,-540.58 640.34,-547.52 642.91,-541.01"/>
203
119
  </g>
204
- <!-- SAST -->
205
- <g id="node14" class="node">
206
- <title>SAST</title>
207
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M372.12,-198.88C372.12,-198.88 341.88,-198.88 341.88,-198.88 335.88,-198.88 329.88,-192.88 329.88,-186.88 329.88,-186.88 329.88,-174.88 329.88,-174.88 329.88,-168.88 335.88,-162.88 341.88,-162.88 341.88,-162.88 372.12,-162.88 372.12,-162.88 378.12,-162.88 384.12,-168.88 384.12,-174.88 384.12,-174.88 384.12,-186.88 384.12,-186.88 384.12,-192.88 378.12,-198.88 372.12,-198.88"/>
208
- <text xml:space="preserve" text-anchor="middle" x="357" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">SAST</text>
209
- <text xml:space="preserve" text-anchor="middle" x="357" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">48 rules</text>
120
+ <!-- Registry&#45;&gt;Provider -->
121
+ <g id="edge8" class="edge">
122
+ <title>Registry&#45;&gt;Provider</title>
123
+ <path fill="none" stroke="#94a3b8" d="M551.99,-582.73C557.6,-573.1 564.73,-560.85 571.1,-549.93"/>
124
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="574.11,-551.7 576.12,-541.3 568.07,-548.18 574.11,-551.7"/>
210
125
  </g>
211
- <!-- Loop&#45;&gt;SAST -->
212
- <g id="edge11" class="edge">
213
- <title>Loop&#45;&gt;SAST</title>
214
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M363.94,-306.71C362.29,-277.02 360.01,-236.09 358.52,-209.31"/>
215
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="361.33,-209.25 358.09,-201.42 355.73,-209.57 361.33,-209.25"/>
126
+ <!-- Dispatch -->
127
+ <g id="node8" class="node">
128
+ <title>Dispatch</title>
129
+ <path fill="#c4b5fd" stroke="#334155" d="M675.75,-457.12C675.75,-457.12 466.25,-457.12 466.25,-457.12 460.25,-457.12 454.25,-451.12 454.25,-445.12 454.25,-445.12 454.25,-433.12 454.25,-433.12 454.25,-427.12 460.25,-421.12 466.25,-421.12 466.25,-421.12 675.75,-421.12 675.75,-421.12 681.75,-421.12 687.75,-427.12 687.75,-433.12 687.75,-433.12 687.75,-445.12 687.75,-445.12 687.75,-451.12 681.75,-457.12 675.75,-457.12"/>
130
+ <text xml:space="preserve" text-anchor="middle" x="571" y="-435.43" font-family="sans-Serif" font-size="11.00">Dispatch / ToolGuard / confirmation / sandbox</text>
131
+ </g>
132
+ <!-- Provider&#45;&gt;Dispatch -->
133
+ <g id="edge9" class="edge">
134
+ <title>Provider&#45;&gt;Dispatch</title>
135
+ <path fill="none" stroke="#94a3b8" d="M583.53,-503.16C581.54,-493.14 578.99,-480.31 576.71,-468.84"/>
136
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="580.14,-468.17 574.76,-459.04 573.28,-469.53 580.14,-468.17"/>
137
+ <text xml:space="preserve" text-anchor="middle" x="597.96" y="-477.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool calls</text>
138
+ </g>
139
+ <!-- Capabilities -->
140
+ <g id="node9" class="node">
141
+ <title>Capabilities</title>
142
+ <path fill="#6ee7b7" stroke="#334155" d="M878.88,-374.62C878.88,-374.62 697.12,-374.62 697.12,-374.62 691.12,-374.62 685.12,-368.62 685.12,-362.62 685.12,-362.62 685.12,-338.12 685.12,-338.12 685.12,-332.12 691.12,-326.12 697.12,-326.12 697.12,-326.12 878.88,-326.12 878.88,-326.12 884.88,-326.12 890.88,-332.12 890.88,-338.12 890.88,-338.12 890.88,-362.62 890.88,-362.62 890.88,-368.62 884.88,-374.62 878.88,-374.62"/>
143
+ <text xml:space="preserve" text-anchor="middle" x="788" y="-360.18" font-family="sans-Serif" font-size="11.00">107 plugin modules / 48 SAST modules</text>
144
+ <text xml:space="preserve" text-anchor="middle" x="788" y="-346.68" font-family="sans-Serif" font-size="11.00">90 AWS wrappers / 22 WWW drivers</text>
145
+ <text xml:space="preserve" text-anchor="middle" x="788" y="-333.18" font-family="sans-Serif" font-size="11.00">SDR / blockchain / reports / FFI</text>
216
146
  </g>
217
- <!-- WWW -->
218
- <g id="node15" class="node">
219
- <title>WWW</title>
220
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M495.38,-198.88C495.38,-198.88 436.62,-198.88 436.62,-198.88 430.62,-198.88 424.62,-192.88 424.62,-186.88 424.62,-186.88 424.62,-174.88 424.62,-174.88 424.62,-168.88 430.62,-162.88 436.62,-162.88 436.62,-162.88 495.38,-162.88 495.38,-162.88 501.38,-162.88 507.38,-168.88 507.38,-174.88 507.38,-174.88 507.38,-186.88 507.38,-186.88 507.38,-192.88 501.38,-198.88 495.38,-198.88"/>
221
- <text xml:space="preserve" text-anchor="middle" x="466" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">WWW</text>
222
- <text xml:space="preserve" text-anchor="middle" x="466" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">22 site drivers</text>
147
+ <!-- Dispatch&#45;&gt;Capabilities -->
148
+ <g id="edge10" class="edge">
149
+ <title>Dispatch&#45;&gt;Capabilities</title>
150
+ <path fill="none" stroke="#94a3b8" d="M614.65,-420.67C644.38,-408.79 684.35,-392.81 718.43,-379.19"/>
151
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="719.4,-382.57 727.39,-375.61 716.8,-376.07 719.4,-382.57"/>
223
152
  </g>
224
- <!-- Registry&#45;&gt;WWW -->
153
+ <!-- Evidence -->
154
+ <g id="node11" class="node">
155
+ <title>Evidence</title>
156
+ <path fill="#fcd34d" stroke="#334155" d="M667.38,-370.06C667.38,-372.48 620.59,-374.44 563,-374.44 505.41,-374.44 458.62,-372.48 458.62,-370.06 458.62,-370.06 458.62,-330.69 458.62,-330.69 458.62,-328.27 505.41,-326.31 563,-326.31 620.59,-326.31 667.38,-328.27 667.38,-330.69 667.38,-330.69 667.38,-370.06 667.38,-370.06"/>
157
+ <path fill="none" stroke="#334155" d="M667.38,-370.06C667.38,-367.65 620.59,-365.69 563,-365.69 505.41,-365.69 458.62,-367.65 458.62,-370.06"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="563" y="-353.43" font-family="sans-Serif" font-size="11.00">Host observations / exact&#45;target artifacts</text>
159
+ <text xml:space="preserve" text-anchor="middle" x="563" y="-339.93" font-family="sans-Serif" font-size="11.00">Sessions / request checkpoints</text>
160
+ </g>
161
+ <!-- Dispatch&#45;&gt;Evidence -->
225
162
  <g id="edge12" class="edge">
226
- <title>Registry&#45;&gt;WWW</title>
227
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M552.95,-319.97C534.01,-289.88 501.6,-238.41 482.15,-207.52"/>
228
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="484.71,-206.33 478.08,-201.05 479.97,-209.32 484.71,-206.33"/>
163
+ <title>Dispatch&#45;&gt;Evidence</title>
164
+ <path fill="none" stroke="#94a3b8" d="M569.42,-420.99C568.49,-410.96 567.29,-397.93 566.18,-385.87"/>
165
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="569.7,-385.86 565.29,-376.23 562.72,-386.51 569.7,-385.86"/>
229
166
  </g>
230
- <!-- AWS -->
167
+ <!-- Swarm -->
231
168
  <g id="node16" class="node">
232
- <title>AWS</title>
233
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M605,-198.88C605,-198.88 559,-198.88 559,-198.88 553,-198.88 547,-192.88 547,-186.88 547,-186.88 547,-174.88 547,-174.88 547,-168.88 553,-162.88 559,-162.88 559,-162.88 605,-162.88 605,-162.88 611,-162.88 617,-168.88 617,-174.88 617,-174.88 617,-186.88 617,-186.88 617,-192.88 611,-198.88 605,-198.88"/>
234
- <text xml:space="preserve" text-anchor="middle" x="582" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">AWS</text>
235
- <text xml:space="preserve" text-anchor="middle" x="582" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">90 services</text>
169
+ <title>Swarm</title>
170
+ <path fill="#c4b5fd" stroke="#334155" d="M428.5,-368.38C428.5,-368.38 259.5,-368.38 259.5,-368.38 253.5,-368.38 247.5,-362.38 247.5,-356.38 247.5,-356.38 247.5,-344.38 247.5,-344.38 247.5,-338.38 253.5,-332.38 259.5,-332.38 259.5,-332.38 428.5,-332.38 428.5,-332.38 434.5,-332.38 440.5,-338.38 440.5,-344.38 440.5,-344.38 440.5,-356.38 440.5,-356.38 440.5,-362.38 434.5,-368.38 428.5,-368.38"/>
171
+ <text xml:space="preserve" text-anchor="middle" x="344" y="-353.43" font-family="sans-Serif" font-size="11.00">Swarm nested Loop / Solve</text>
172
+ <text xml:space="preserve" text-anchor="middle" x="344" y="-339.93" font-family="sans-Serif" font-size="11.00">parent rechecks child artifact receipts</text>
236
173
  </g>
237
- <!-- Registry&#45;&gt;AWS -->
238
- <g id="edge13" class="edge">
239
- <title>Registry&#45;&gt;AWS</title>
240
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M570.07,-319.97C572.62,-290.4 576.96,-240.16 579.65,-209.12"/>
241
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="582.42,-209.56 580.32,-201.35 576.84,-209.08 582.42,-209.56"/>
174
+ <!-- Dispatch&#45;&gt;Swarm -->
175
+ <g id="edge20" class="edge">
176
+ <title>Dispatch&#45;&gt;Swarm</title>
177
+ <path fill="none" stroke="#94a3b8" d="M525.34,-420.67C489.24,-406.88 438.69,-387.56 400.13,-372.82"/>
178
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="401.6,-369.64 391,-369.34 399.1,-376.18 401.6,-369.64"/>
242
179
  </g>
243
- <!-- SDR -->
244
- <g id="node17" class="node">
245
- <title>SDR</title>
246
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M793,-205.12C793,-205.12 669,-205.12 669,-205.12 663,-205.12 657,-199.12 657,-193.12 657,-193.12 657,-168.62 657,-168.62 657,-162.62 663,-156.62 669,-156.62 669,-156.62 793,-156.62 793,-156.62 799,-156.62 805,-162.62 805,-168.62 805,-168.62 805,-193.12 805,-193.12 805,-199.12 799,-205.12 793,-205.12"/>
247
- <text xml:space="preserve" text-anchor="middle" x="731" y="-190.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">SDR</text>
248
- <text xml:space="preserve" text-anchor="middle" x="731" y="-177.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">GQRX · Flipper · RFID</text>
249
- <text xml:space="preserve" text-anchor="middle" x="731" y="-163.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Decoder::* (20+Base/DSP)</text>
180
+ <!-- Target -->
181
+ <g id="node10" class="node">
182
+ <title>Target</title>
183
+ <path fill="#fda4af" stroke="#334155" d="M878.62,-289.12C878.62,-289.12 665.38,-289.12 665.38,-289.12 659.38,-289.12 653.38,-283.12 653.38,-277.12 653.38,-277.12 653.38,-265.12 653.38,-265.12 653.38,-259.12 659.38,-253.12 665.38,-253.12 665.38,-253.12 878.62,-253.12 878.62,-253.12 884.62,-253.12 890.62,-259.12 890.62,-265.12 890.62,-265.12 890.62,-277.12 890.62,-277.12 890.62,-283.12 884.62,-289.12 878.62,-289.12"/>
184
+ <text xml:space="preserve" text-anchor="middle" x="772" y="-274.18" font-family="sans-Serif" font-size="11.00">Authorized target / external service / hardware</text>
185
+ <text xml:space="preserve" text-anchor="middle" x="772" y="-260.68" font-family="sans-Serif" font-size="11.00">requires separate live validation</text>
250
186
  </g>
251
- <!-- Swarm&#45;&gt;SDR -->
252
- <g id="edge14" class="edge">
253
- <title>Swarm&#45;&gt;SDR</title>
254
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M740.8,-326.23C739.01,-299.77 735.58,-249.34 733.29,-215.65"/>
255
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="736.09,-215.54 732.76,-207.74 730.51,-215.92 736.09,-215.54"/>
256
- </g>
257
- <!-- Chain -->
258
- <g id="node18" class="node">
259
- <title>Chain</title>
260
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M903,-198.88C903,-198.88 857,-198.88 857,-198.88 851,-198.88 845,-192.88 845,-186.88 845,-186.88 845,-174.88 845,-174.88 845,-168.88 851,-162.88 857,-162.88 857,-162.88 903,-162.88 903,-162.88 909,-162.88 915,-168.88 915,-174.88 915,-174.88 915,-186.88 915,-186.88 915,-192.88 909,-198.88 903,-198.88"/>
261
- <text xml:space="preserve" text-anchor="middle" x="880" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Blockchain</text>
262
- <text xml:space="preserve" text-anchor="middle" x="880" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">BTC · ETH</text>
263
- </g>
264
- <!-- Swarm&#45;&gt;Chain -->
187
+ <!-- Capabilities&#45;&gt;Target -->
188
+ <g id="edge11" class="edge">
189
+ <title>Capabilities&#45;&gt;Target</title>
190
+ <path fill="none" stroke="#94a3b8" d="M783.11,-325.78C781.46,-317.82 779.61,-308.84 777.89,-300.55"/>
191
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="781.35,-300.01 775.9,-290.93 774.5,-301.43 781.35,-300.01"/>
192
+ </g>
193
+ <!-- Evidence&#45;&gt;Runtime -->
194
+ <g id="edge13" class="edge">
195
+ <title>Evidence&#45;&gt;Runtime</title>
196
+ <path fill="none" stroke="#94a3b8" d="M466.31,-373.2C436.33,-386.09 411,-406.37 411,-438.12 411,-601.88 411,-601.88 411,-601.88 411,-618.34 407.44,-636.19 403.41,-651.14"/>
197
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="400.12,-649.91 400.7,-660.49 406.84,-651.86 400.12,-649.91"/>
198
+ <text xml:space="preserve" text-anchor="middle" x="437.25" y="-518.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">observations</text>
199
+ </g>
200
+ <!-- Evidence&#45;&gt;Verify -->
265
201
  <g id="edge15" class="edge">
266
- <title>Swarm&#45;&gt;Chain</title>
267
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M757.01,-326.32C773.64,-306.85 801.26,-274.51 825,-246.62 836.14,-233.54 848.53,-218.96 858.72,-206.95"/>
268
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="860.76,-208.88 863.8,-200.97 856.49,-205.26 860.76,-208.88"/>
269
- </g>
270
- <!-- Bounty -->
271
- <g id="node19" class="node">
272
- <title>Bounty</title>
273
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1028.88,-198.88C1028.88,-198.88 967.12,-198.88 967.12,-198.88 961.12,-198.88 955.12,-192.88 955.12,-186.88 955.12,-186.88 955.12,-174.88 955.12,-174.88 955.12,-168.88 961.12,-162.88 967.12,-162.88 967.12,-162.88 1028.88,-162.88 1028.88,-162.88 1034.88,-162.88 1040.88,-168.88 1040.88,-174.88 1040.88,-174.88 1040.88,-186.88 1040.88,-186.88 1040.88,-192.88 1034.88,-198.88 1028.88,-198.88"/>
274
- <text xml:space="preserve" text-anchor="middle" x="998" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Bounty</text>
275
- <text xml:space="preserve" text-anchor="middle" x="998" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">lifecycle replay</text>
276
- </g>
277
- <!-- Prompt&#45;&gt;Bounty -->
278
- <!-- Reports -->
279
- <g id="node20" class="node">
280
- <title>Reports</title>
281
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1153.12,-198.88C1153.12,-198.88 1092.88,-198.88 1092.88,-198.88 1086.88,-198.88 1080.88,-192.88 1080.88,-186.88 1080.88,-186.88 1080.88,-174.88 1080.88,-174.88 1080.88,-168.88 1086.88,-162.88 1092.88,-162.88 1092.88,-162.88 1153.12,-162.88 1153.12,-162.88 1159.12,-162.88 1165.12,-168.88 1165.12,-174.88 1165.12,-174.88 1165.12,-186.88 1165.12,-186.88 1165.12,-192.88 1159.12,-198.88 1153.12,-198.88"/>
282
- <text xml:space="preserve" text-anchor="middle" x="1123" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reports</text>
283
- <text xml:space="preserve" text-anchor="middle" x="1123" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">HTML · JSON</text>
284
- </g>
285
- <!-- Prompt&#45;&gt;Reports -->
286
- <!-- Memory -->
287
- <g id="node21" class="node">
288
- <title>Memory</title>
289
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M93.75,-54.79C93.75,-56.6 76.38,-58.06 55,-58.06 33.62,-58.06 16.25,-56.6 16.25,-54.79 16.25,-54.79 16.25,-25.34 16.25,-25.34 16.25,-23.53 33.62,-22.06 55,-22.06 76.38,-22.06 93.75,-23.53 93.75,-25.34 93.75,-25.34 93.75,-54.79 93.75,-54.79"/>
290
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M93.75,-54.79C93.75,-52.98 76.38,-51.52 55,-51.52 33.62,-51.52 16.25,-52.98 16.25,-54.79"/>
291
- <text xml:space="preserve" text-anchor="middle" x="55" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
292
- </g>
293
- <!-- Prompt&#45;&gt;Memory -->
294
- <g id="edge31" class="edge">
295
- <title>Prompt&#45;&gt;Memory</title>
296
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1038.12,-331.03C1090.67,-318.66 1150.55,-294.35 1183,-246.62 1207.49,-210.61 1213.17,-180.04 1183,-148.62 1141.83,-105.76 167.89,-130.69 114,-105.62 92.66,-95.7 75.53,-74.13 65.34,-58.65"/>
297
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1037.51,-328.3 1030.32,-332.78 1038.73,-333.76 1037.51,-328.3"/>
298
- <text xml:space="preserve" text-anchor="middle" x="1214.43" y="-177.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
299
- </g>
300
- <!-- Plugins&#45;&gt;Target -->
301
- <g id="edge30" class="edge">
302
- <title>Plugins&#45;&gt;Target</title>
303
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M263.58,-199.49C273.09,-215.01 289.24,-236.63 310,-246.62 330.34,-256.41 490.47,-253.31 513,-254.62 577.3,-258.37 1047.24,-251.86 1091,-299.12 1171.51,-386.08 1114.94,-543.72 1084.24,-612.4"/>
304
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1081.78,-611.06 1081,-619.5 1086.87,-613.38 1081.78,-611.06"/>
305
- <text xml:space="preserve" text-anchor="middle" x="1143.95" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">attack</text>
306
- </g>
307
- <!-- Plugins&#45;&gt;Memory -->
308
- <g id="edge19" class="edge">
309
- <title>Plugins&#45;&gt;Memory</title>
310
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M217.76,-164.83C188.24,-151.62 146.3,-130.64 114,-105.62 99.29,-94.23 85.14,-78.95 74.39,-66.11"/>
311
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="76.63,-64.44 69.4,-60.02 72.3,-67.98 76.63,-64.44"/>
312
- </g>
313
- <!-- Skills -->
314
- <g id="node23" class="node">
315
- <title>Skills</title>
316
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M371,-54.79C371,-56.6 345.9,-58.06 315,-58.06 284.1,-58.06 259,-56.6 259,-54.79 259,-54.79 259,-25.34 259,-25.34 259,-23.53 284.1,-22.06 315,-22.06 345.9,-22.06 371,-23.53 371,-25.34 371,-25.34 371,-54.79 371,-54.79"/>
317
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M371,-54.79C371,-52.98 345.9,-51.52 315,-51.52 284.1,-51.52 259,-52.98 259,-54.79"/>
318
- <text xml:space="preserve" text-anchor="middle" x="315" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
319
- </g>
320
- <!-- SAST&#45;&gt;Skills -->
321
- <g id="edge20" class="edge">
322
- <title>SAST&#45;&gt;Skills</title>
323
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M351.68,-162.29C344.49,-138.51 331.58,-95.87 323.16,-68.03"/>
324
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="325.84,-67.23 320.85,-60.38 320.48,-68.85 325.84,-67.23"/>
202
+ <title>Evidence&#45;&gt;Verify</title>
203
+ <path fill="none" stroke="#94a3b8" d="M483.89,-326.82C445.92,-316 400.77,-303.13 363.8,-292.59"/>
204
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="365.14,-289.33 354.56,-289.96 363.22,-296.07 365.14,-289.33"/>
205
+ </g>
206
+ <!-- Outcome -->
207
+ <g id="node13" class="node">
208
+ <title>Outcome</title>
209
+ <path fill="#7dd3fc" stroke="#334155" d="M361.25,-216.12C361.25,-216.12 178.75,-216.12 178.75,-216.12 172.75,-216.12 166.75,-210.12 166.75,-204.12 166.75,-204.12 166.75,-192.12 166.75,-192.12 166.75,-186.12 172.75,-180.12 178.75,-180.12 178.75,-180.12 361.25,-180.12 361.25,-180.12 367.25,-180.12 373.25,-186.12 373.25,-192.12 373.25,-192.12 373.25,-204.12 373.25,-204.12 373.25,-210.12 367.25,-216.12 361.25,-216.12"/>
210
+ <text xml:space="preserve" text-anchor="middle" x="270" y="-201.18" font-family="sans-Serif" font-size="11.00">Verified / failed / unknown or incomplete</text>
211
+ <text xml:space="preserve" text-anchor="middle" x="270" y="-187.68" font-family="sans-Serif" font-size="11.00">not model prose alone</text>
212
+ </g>
213
+ <!-- Verify&#45;&gt;Outcome -->
214
+ <g id="edge16" class="edge">
215
+ <title>Verify&#45;&gt;Outcome</title>
216
+ <path fill="none" stroke="#94a3b8" d="M286.67,-252.94C284.27,-245.18 281.37,-235.81 278.66,-227.07"/>
217
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="282.03,-226.12 275.72,-217.6 275.34,-228.19 282.03,-226.12"/>
218
+ </g>
219
+ <!-- Outcome&#45;&gt;Entry -->
220
+ <g id="edge24" class="edge">
221
+ <title>Outcome&#45;&gt;Entry</title>
222
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M177.17,-216.58C127.73,-228.63 77,-246.7 77,-270.12 77,-687.38 77,-687.38 77,-687.38 77,-712.07 94.22,-734.02 111.19,-749.66"/>
223
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="108.44,-751.91 118.29,-755.82 113.04,-746.62 108.44,-751.91"/>
224
+ <text xml:space="preserve" text-anchor="middle" x="104.75" y="-477.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">release result</text>
225
+ </g>
226
+ <!-- Outcome&#45;&gt;Mesh -->
227
+ <g id="edge25" class="edge">
228
+ <title>Outcome&#45;&gt;Mesh</title>
229
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M242.21,-179.78C224,-168.42 199.73,-153.27 178.51,-140.03"/>
230
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="180.63,-137.23 170.3,-134.9 176.93,-143.16 180.63,-137.23"/>
231
+ <text xml:space="preserve" text-anchor="middle" x="305.2" y="-153.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">origin&#45;bound reply; submission != RF delivery</text>
325
232
  </g>
326
233
  <!-- Learn -->
327
- <g id="node24" class="node">
234
+ <g id="node14" class="node">
328
235
  <title>Learn</title>
329
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M490.5,-54.79C490.5,-56.6 472.8,-58.06 451,-58.06 429.2,-58.06 411.5,-56.6 411.5,-54.79 411.5,-54.79 411.5,-25.34 411.5,-25.34 411.5,-23.53 429.2,-22.06 451,-22.06 472.8,-22.06 490.5,-23.53 490.5,-25.34 490.5,-25.34 490.5,-54.79 490.5,-54.79"/>
330
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M490.5,-54.79C490.5,-52.98 472.8,-51.52 451,-51.52 429.2,-51.52 411.5,-52.98 411.5,-54.79"/>
331
- <text xml:space="preserve" text-anchor="middle" x="451" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
236
+ <path fill="#c4b5fd" stroke="#334155" d="M878.88,-133.62C878.88,-133.62 703.12,-133.62 703.12,-133.62 697.12,-133.62 691.12,-127.62 691.12,-121.62 691.12,-121.62 691.12,-97.12 691.12,-97.12 691.12,-91.12 697.12,-85.12 703.12,-85.12 703.12,-85.12 878.88,-85.12 878.88,-85.12 884.88,-85.12 890.88,-91.12 890.88,-97.12 890.88,-97.12 890.88,-121.62 890.88,-121.62 890.88,-127.62 884.88,-133.62 878.88,-133.62"/>
237
+ <text xml:space="preserve" text-anchor="middle" x="791" y="-119.17" font-family="sans-Serif" font-size="11.00">Reward / Learning / Mistakes / Metrics</text>
238
+ <text xml:space="preserve" text-anchor="middle" x="791" y="-105.67" font-family="sans-Serif" font-size="11.00">claim and verified&#45;completion fields</text>
239
+ <text xml:space="preserve" text-anchor="middle" x="791" y="-92.17" font-family="sans-Serif" font-size="11.00">Policy positive credit needs attribution</text>
240
+ </g>
241
+ <!-- Outcome&#45;&gt;Learn -->
242
+ <g id="edge17" class="edge">
243
+ <title>Outcome&#45;&gt;Learn</title>
244
+ <path fill="none" stroke="#94a3b8" d="M373.56,-179.88C462.01,-165.15 588.95,-144.02 679.59,-128.93"/>
245
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="679.96,-132.41 689.25,-127.32 678.81,-125.51 679.96,-132.41"/>
246
+ </g>
247
+ <!-- Stores -->
248
+ <g id="node15" class="node">
249
+ <title>Stores</title>
250
+ <path fill="#fcd34d" stroke="#334155" d="M945.12,-43.75C945.12,-46.16 904.73,-48.12 855,-48.12 805.27,-48.12 764.88,-46.16 764.88,-43.75 764.88,-43.75 764.88,-4.38 764.88,-4.38 764.88,-1.96 805.27,0 855,0 904.73,0 945.12,-1.96 945.12,-4.38 945.12,-4.38 945.12,-43.75 945.12,-43.75"/>
251
+ <path fill="none" stroke="#334155" d="M945.12,-43.75C945.12,-41.34 904.73,-39.38 855,-39.38 805.27,-39.38 764.88,-41.34 764.88,-43.75"/>
252
+ <text xml:space="preserve" text-anchor="middle" x="855" y="-27.11" font-family="sans-Serif" font-size="11.00">Default ~/.pwn stores</text>
253
+ <text xml:space="preserve" text-anchor="middle" x="855" y="-13.61" font-family="sans-Serif" font-size="11.00">plus explicit artifact/worktree paths</text>
332
254
  </g>
333
- <!-- WWW&#45;&gt;Learn -->
255
+ <!-- Learn&#45;&gt;Stores -->
256
+ <g id="edge18" class="edge">
257
+ <title>Learn&#45;&gt;Stores</title>
258
+ <path fill="none" stroke="#94a3b8" d="M809.17,-84.72C815.64,-76.3 823.05,-66.65 830,-57.61"/>
259
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="832.77,-59.75 836.09,-49.68 827.22,-55.48 832.77,-59.75"/>
260
+ </g>
261
+ <!-- Stores&#45;&gt;Prompt -->
262
+ <g id="edge19" class="edge">
263
+ <title>Stores&#45;&gt;Prompt</title>
264
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M886.25,-48.51C902.5,-63.55 919,-84.66 919,-108.38 919,-522.62 919,-522.62 919,-522.62 919,-543.9 906.31,-559.38 888.65,-570.62"/>
265
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="887.27,-567.38 880.32,-575.38 890.74,-573.46 887.27,-567.38"/>
266
+ </g>
267
+ <!-- Swarm&#45;&gt;Runtime -->
334
268
  <g id="edge21" class="edge">
335
- <title>WWW&#45;&gt;Learn</title>
336
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M464.1,-162.29C461.54,-138.62 456.96,-96.25 453.95,-68.4"/>
337
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="456.74,-68.11 453.1,-60.46 451.17,-68.71 456.74,-68.11"/>
338
- </g>
339
- <!-- Metrics -->
340
- <g id="node25" class="node">
341
- <title>Metrics</title>
342
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M603.5,-54.79C603.5,-56.6 587.14,-58.06 567,-58.06 546.86,-58.06 530.5,-56.6 530.5,-54.79 530.5,-54.79 530.5,-25.34 530.5,-25.34 530.5,-23.53 546.86,-22.06 567,-22.06 587.14,-22.06 603.5,-23.53 603.5,-25.34 603.5,-25.34 603.5,-54.79 603.5,-54.79"/>
343
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M603.5,-54.79C603.5,-52.98 587.14,-51.52 567,-51.52 546.86,-51.52 530.5,-52.98 530.5,-54.79"/>
344
- <text xml:space="preserve" text-anchor="middle" x="567" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
345
- </g>
346
- <!-- AWS&#45;&gt;Metrics -->
269
+ <title>Swarm&#45;&gt;Runtime</title>
270
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M341.79,-368.62C339.73,-386.11 337,-413.95 337,-438.12 337,-601.88 337,-601.88 337,-601.88 337,-620.85 347.03,-638.85 358.52,-653.24"/>
271
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="355.64,-655.25 364.8,-660.56 360.95,-650.69 355.64,-655.25"/>
272
+ <text xml:space="preserve" text-anchor="middle" x="355.75" y="-518.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">child turn</text>
273
+ </g>
274
+ <!-- Cron -->
275
+ <g id="node17" class="node">
276
+ <title>Cron</title>
277
+ <path fill="#c4b5fd" stroke="#334155" d="M886.5,-793.12C886.5,-793.12 753.5,-793.12 753.5,-793.12 747.5,-793.12 741.5,-787.12 741.5,-781.12 741.5,-781.12 741.5,-769.12 741.5,-769.12 741.5,-763.12 747.5,-757.12 753.5,-757.12 753.5,-757.12 886.5,-757.12 886.5,-757.12 892.5,-757.12 898.5,-763.12 898.5,-769.12 898.5,-769.12 898.5,-781.12 898.5,-781.12 898.5,-787.12 892.5,-793.12 886.5,-793.12"/>
278
+ <text xml:space="preserve" text-anchor="middle" x="820" y="-778.17" font-family="sans-Serif" font-size="11.00">Cron scheduler</text>
279
+ <text xml:space="preserve" text-anchor="middle" x="820" y="-764.67" font-family="sans-Serif" font-size="11.00">hygiene on / curriculum opt&#45;in</text>
280
+ </g>
281
+ <!-- Cron&#45;&gt;Runtime -->
347
282
  <g id="edge22" class="edge">
348
- <title>AWS&#45;&gt;Metrics</title>
349
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M580.1,-162.29C577.54,-138.62 572.96,-96.25 569.95,-68.4"/>
350
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="572.74,-68.11 569.1,-60.46 567.17,-68.71 572.74,-68.11"/>
351
- </g>
352
- <!-- MistF -->
353
- <g id="node26" class="node">
354
- <title>MistF</title>
355
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M724.25,-54.79C724.25,-56.6 706.21,-58.06 684,-58.06 661.79,-58.06 643.75,-56.6 643.75,-54.79 643.75,-54.79 643.75,-25.34 643.75,-25.34 643.75,-23.53 661.79,-22.06 684,-22.06 706.21,-22.06 724.25,-23.53 724.25,-25.34 724.25,-25.34 724.25,-54.79 724.25,-54.79"/>
356
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M724.25,-54.79C724.25,-52.98 706.21,-51.52 684,-51.52 661.79,-51.52 643.75,-52.98 643.75,-54.79"/>
357
- <text xml:space="preserve" text-anchor="middle" x="684" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
358
- </g>
359
- <!-- SDR&#45;&gt;MistF -->
360
- <!-- Extro -->
361
- <g id="node27" class="node">
362
- <title>Extro</title>
363
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M885.88,-59.75C885.88,-62.16 858.59,-64.12 825,-64.12 791.41,-64.12 764.12,-62.16 764.12,-59.75 764.12,-59.75 764.12,-20.38 764.12,-20.38 764.12,-17.96 791.41,-16 825,-16 858.59,-16 885.88,-17.96 885.88,-20.38 885.88,-20.38 885.88,-59.75 885.88,-59.75"/>
364
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M885.88,-59.75C885.88,-57.34 858.59,-55.38 825,-55.38 791.41,-55.38 764.12,-57.34 764.12,-59.75"/>
365
- <text xml:space="preserve" text-anchor="middle" x="825" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
366
- <text xml:space="preserve" text-anchor="middle" x="825" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf · web · observations</text>
367
- </g>
368
- <!-- SDR&#45;&gt;Extro -->
369
- <g id="edge24" class="edge">
370
- <title>SDR&#45;&gt;Extro</title>
371
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M747.16,-156.01C762.72,-133.03 786.36,-98.12 803.51,-72.8"/>
372
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="805.78,-74.44 807.95,-66.24 801.14,-71.3 805.78,-74.44"/>
373
- </g>
374
- <!-- Sessions -->
375
- <g id="node28" class="node">
376
- <title>Sessions</title>
377
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1015.75,-54.79C1015.75,-56.6 995.69,-58.06 971,-58.06 946.31,-58.06 926.25,-56.6 926.25,-54.79 926.25,-54.79 926.25,-25.34 926.25,-25.34 926.25,-23.53 946.31,-22.06 971,-22.06 995.69,-22.06 1015.75,-23.53 1015.75,-25.34 1015.75,-25.34 1015.75,-54.79 1015.75,-54.79"/>
378
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1015.75,-54.79C1015.75,-52.98 995.69,-51.52 971,-51.52 946.31,-51.52 926.25,-52.98 926.25,-54.79"/>
379
- <text xml:space="preserve" text-anchor="middle" x="971" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sessions/*.jsonl</text>
380
- </g>
381
- <!-- Chain&#45;&gt;Sessions -->
382
- <g id="edge25" class="edge">
383
- <title>Chain&#45;&gt;Sessions</title>
384
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M891.53,-162.29C907.39,-138.1 936.05,-94.37 954.27,-66.58"/>
385
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="956.45,-68.37 958.49,-60.15 951.76,-65.3 956.45,-68.37"/>
386
- </g>
387
- <!-- SwarmB -->
388
- <g id="node29" class="node">
389
- <title>SwarmB</title>
390
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1156.38,-54.79C1156.38,-56.6 1133.8,-58.06 1106,-58.06 1078.2,-58.06 1055.62,-56.6 1055.62,-54.79 1055.62,-54.79 1055.62,-25.34 1055.62,-25.34 1055.62,-23.53 1078.2,-22.06 1106,-22.06 1133.8,-22.06 1156.38,-23.53 1156.38,-25.34 1156.38,-25.34 1156.38,-54.79 1156.38,-54.79"/>
391
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1156.38,-54.79C1156.38,-52.98 1133.8,-51.52 1106,-51.52 1078.2,-51.52 1055.62,-52.98 1055.62,-54.79"/>
392
- <text xml:space="preserve" text-anchor="middle" x="1106" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/*/bus.jsonl</text>
393
- </g>
394
- <!-- Bounty&#45;&gt;SwarmB -->
395
- <g id="edge26" class="edge">
396
- <title>Bounty&#45;&gt;SwarmB</title>
397
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1011.68,-162.29C1030.59,-137.99 1064.82,-93.99 1086.43,-66.22"/>
398
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1088.52,-68.09 1091.22,-60.05 1084.1,-64.65 1088.52,-68.09"/>
399
- </g>
400
- <!-- Reports&#45;&gt;User -->
401
- <g id="edge32" class="edge">
402
- <title>Reports&#45;&gt;User</title>
403
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1134.52,-199.46C1143.96,-213.15 1158.13,-232.17 1173,-246.62 1177.34,-250.84 1180.28,-249.86 1184,-254.62 1230.64,-314.32 1234.96,-355.91 1202,-424.12 1087.43,-661.21 896.54,-551.12 641,-614.62 630.25,-617.3 618.97,-620.87 608.28,-624.64"/>
404
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="607.64,-621.89 601.08,-627.25 609.56,-627.15 607.64,-621.89"/>
405
- <text xml:space="preserve" text-anchor="middle" x="1212.78" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
406
- </g>
407
- <!-- CronF -->
408
- <g id="node30" class="node">
409
- <title>CronF</title>
410
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1275.5,-54.79C1275.5,-56.6 1257.8,-58.06 1236,-58.06 1214.2,-58.06 1196.5,-56.6 1196.5,-54.79 1196.5,-54.79 1196.5,-25.34 1196.5,-25.34 1196.5,-23.53 1214.2,-22.06 1236,-22.06 1257.8,-22.06 1275.5,-23.53 1275.5,-25.34 1275.5,-25.34 1275.5,-54.79 1275.5,-54.79"/>
411
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1275.5,-54.79C1275.5,-52.98 1257.8,-51.52 1236,-51.52 1214.2,-51.52 1196.5,-52.98 1196.5,-54.79"/>
412
- <text xml:space="preserve" text-anchor="middle" x="1236" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">cron/jobs.yml</text>
413
- </g>
414
- <!-- Reports&#45;&gt;CronF -->
415
- <g id="edge27" class="edge">
416
- <title>Reports&#45;&gt;CronF</title>
417
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1127.9,-162.22C1132.81,-147.46 1141.73,-126.77 1156,-113.62 1163.04,-107.14 1168.11,-111.04 1176,-105.62 1191.72,-94.84 1206.34,-79.27 1217.22,-66.12"/>
418
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1219.11,-68.24 1221.94,-60.25 1214.75,-64.73 1219.11,-68.24"/>
419
- </g>
420
- <!-- Prefs -->
421
- <g id="node32" class="node">
422
- <title>Prefs</title>
423
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1539.88,-54.79C1539.88,-56.6 1517.97,-58.06 1491,-58.06 1464.03,-58.06 1442.12,-56.6 1442.12,-54.79 1442.12,-54.79 1442.12,-25.34 1442.12,-25.34 1442.12,-23.53 1464.03,-22.06 1491,-22.06 1517.97,-22.06 1539.88,-23.53 1539.88,-25.34 1539.88,-25.34 1539.88,-54.79 1539.88,-54.79"/>
424
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1539.88,-54.79C1539.88,-52.98 1517.97,-51.52 1491,-51.52 1464.03,-51.52 1442.12,-52.98 1442.12,-54.79"/>
425
- <text xml:space="preserve" text-anchor="middle" x="1491" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">preferences.jsonl</text>
426
- </g>
427
- <!-- Reports&#45;&gt;Prefs -->
428
- <!-- MemIdx -->
429
- <g id="node22" class="node">
430
- <title>MemIdx</title>
431
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M218.5,-59.75C218.5,-62.16 199.45,-64.12 176,-64.12 152.55,-64.12 133.5,-62.16 133.5,-59.75 133.5,-59.75 133.5,-20.38 133.5,-20.38 133.5,-17.96 152.55,-16 176,-16 199.45,-16 218.5,-17.96 218.5,-20.38 218.5,-20.38 218.5,-59.75 218.5,-59.75"/>
432
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M218.5,-59.75C218.5,-57.34 199.45,-55.38 176,-55.38 152.55,-55.38 133.5,-57.34 133.5,-59.75"/>
433
- <text xml:space="preserve" text-anchor="middle" x="176" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.idx</text>
434
- <text xml:space="preserve" text-anchor="middle" x="176" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(embed index)</text>
435
- </g>
436
- <!-- Finetune -->
437
- <g id="node31" class="node">
438
- <title>Finetune</title>
439
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1402.25,-54.79C1402.25,-56.6 1382.86,-58.06 1359,-58.06 1335.14,-58.06 1315.75,-56.6 1315.75,-54.79 1315.75,-54.79 1315.75,-25.34 1315.75,-25.34 1315.75,-23.53 1335.14,-22.06 1359,-22.06 1382.86,-22.06 1402.25,-23.53 1402.25,-25.34 1402.25,-25.34 1402.25,-54.79 1402.25,-54.79"/>
440
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1402.25,-54.79C1402.25,-52.98 1382.86,-51.52 1359,-51.52 1335.14,-51.52 1315.75,-52.98 1315.75,-54.79"/>
441
- <text xml:space="preserve" text-anchor="middle" x="1359" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">finetune/*.jsonl</text>
442
- </g>
443
- <!-- PolicyF -->
444
- <g id="node33" class="node">
445
- <title>PolicyF</title>
446
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1668.38,-59.75C1668.38,-62.16 1648.49,-64.12 1624,-64.12 1599.51,-64.12 1579.62,-62.16 1579.62,-59.75 1579.62,-59.75 1579.62,-20.38 1579.62,-20.38 1579.62,-17.96 1599.51,-16 1624,-16 1648.49,-16 1668.38,-17.96 1668.38,-20.38 1668.38,-20.38 1668.38,-59.75 1668.38,-59.75"/>
447
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1668.38,-59.75C1668.38,-57.34 1648.49,-55.38 1624,-55.38 1599.51,-55.38 1579.62,-57.34 1579.62,-59.75"/>
448
- <text xml:space="preserve" text-anchor="middle" x="1624" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy.json</text>
449
- <text xml:space="preserve" text-anchor="middle" x="1624" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy_traj.jsonl</text>
283
+ <title>Cron&#45;&gt;Runtime</title>
284
+ <path fill="none" stroke="#94a3b8" d="M741.5,-758.21C677.8,-745.3 586.89,-726.88 513.76,-712.05"/>
285
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="514.62,-708.66 504.13,-710.1 513.23,-715.52 514.62,-708.66"/>
286
+ <text xml:space="preserve" text-anchor="middle" x="668.34" y="-730.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">prompt jobs</text>
287
+ </g>
288
+ <!-- Cron&#45;&gt;Learn -->
289
+ <g id="edge23" class="edge">
290
+ <title>Cron&#45;&gt;Learn</title>
291
+ <path fill="none" stroke="#94a3b8" d="M898.86,-756.65C932.87,-744.02 965,-722.72 965,-687.38 965,-687.38 965,-687.38 965,-197.12 965,-161.95 936.16,-141.03 901.97,-128.6"/>
292
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="903.24,-125.33 892.64,-125.49 901.02,-131.97 903.24,-125.33"/>
293
+ <text xml:space="preserve" text-anchor="middle" x="1007" y="-435.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit maintenance</text>
450
294
  </g>
451
295
  </g>
452
296
  </svg>