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
@@ -4,12 +4,12 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_SessionsCron Pages: 1 -->
7
- <svg width="876pt" height="361pt"
8
- viewBox="0.00 0.00 876.00 361.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7
+ <svg width="940pt" height="361pt"
8
+ viewBox="0.00 0.00 940.00 361.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 317.45)">
10
10
  <title>PWN_SessionsCron</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-317.45 832.7,-317.45 832.7,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="134.5" y="-252.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Sessions ↔ Cron ↔ Swarm &#45; Cross&#45;Session Continuity</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-317.45 896.45,-317.45 896.45,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="166.38" y="-252.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Sessions ↔ Cron ↔ Swarm &#45; Cross&#45;Session Continuity</text>
13
13
  <g id="clust1" class="cluster">
14
14
  <title>cluster_p</title>
15
15
  <path fill="#422006" stroke="#a16207" d="M233.25,-8C233.25,-8 335,-8 335,-8 341,-8 347,-14 347,-20 347,-20 347,-223 347,-223 347,-229 341,-235 335,-235 335,-235 233.25,-235 233.25,-235 227.25,-235 221.25,-229 221.25,-223 221.25,-223 221.25,-20 221.25,-20 221.25,-14 227.25,-8 233.25,-8"/>
@@ -111,27 +111,27 @@
111
111
  <!-- Next -->
112
112
  <g id="node8" class="node">
113
113
  <title>Next</title>
114
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M777.5,-124C777.5,-124 696.25,-124 696.25,-124 690.25,-124 684.25,-118 684.25,-112 684.25,-112 684.25,-100 684.25,-100 684.25,-94 690.25,-88 696.25,-88 696.25,-88 777.5,-88 777.5,-88 783.5,-88 789.5,-94 789.5,-100 789.5,-100 789.5,-112 789.5,-112 789.5,-118 783.5,-124 777.5,-124"/>
115
- <text xml:space="preserve" text-anchor="middle" x="736.88" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Next pwn&#45;ai session</text>
116
- <text xml:space="preserve" text-anchor="middle" x="736.88" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">context restored</text>
114
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M841.25,-124C841.25,-124 696.25,-124 696.25,-124 690.25,-124 684.25,-118 684.25,-112 684.25,-112 684.25,-100 684.25,-100 684.25,-94 690.25,-88 696.25,-88 696.25,-88 841.25,-88 841.25,-88 847.25,-88 853.25,-94 853.25,-100 853.25,-100 853.25,-112 853.25,-112 853.25,-118 847.25,-124 841.25,-124"/>
115
+ <text xml:space="preserve" text-anchor="middle" x="768.75" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Next pwn&#45;ai session</text>
116
+ <text xml:space="preserve" text-anchor="middle" x="768.75" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">selected context / new prompt jobs</text>
117
117
  </g>
118
118
  <!-- Reflect&#45;&gt;Next -->
119
119
  <g id="edge7" class="edge">
120
120
  <title>Reflect&#45;&gt;Next</title>
121
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M552.64,-164.96C586.69,-154.01 635.86,-138.18 674.7,-125.69"/>
122
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="675.2,-128.47 681.95,-123.35 673.48,-123.14 675.2,-128.47"/>
121
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M552.63,-166.59C589.96,-156.08 646.31,-140.2 691.98,-127.34"/>
122
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="692.72,-130.04 699.66,-125.18 691.2,-124.65 692.72,-130.04"/>
123
123
  </g>
124
124
  <!-- Fire&#45;&gt;Next -->
125
125
  <g id="edge8" class="edge">
126
126
  <title>Fire&#45;&gt;Next</title>
127
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M559.85,-106C593.17,-106 637.95,-106 674.01,-106"/>
128
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="673.96,-108.8 681.96,-106 673.96,-103.2 673.96,-108.8"/>
127
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M559.61,-106C591.69,-106 635.12,-106 674.01,-106"/>
128
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="673.82,-108.8 681.82,-106 673.82,-103.2 673.82,-108.8"/>
129
129
  </g>
130
130
  <!-- Resume&#45;&gt;Next -->
131
131
  <g id="edge9" class="edge">
132
132
  <title>Resume&#45;&gt;Next</title>
133
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M551.1,-46.54C585.18,-57.51 635.24,-73.62 674.66,-86.3"/>
134
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="673.58,-88.9 682.05,-88.68 675.3,-83.57 673.58,-88.9"/>
133
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M551.23,-45.01C588.58,-55.54 645.89,-71.68 692.17,-84.71"/>
134
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="691.21,-87.35 699.67,-86.82 692.73,-81.96 691.21,-87.35"/>
135
135
  </g>
136
136
  </g>
137
137
  </svg>
@@ -4,27 +4,27 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Swarm Pages: 1 -->
7
- <svg width="1052pt" height="604pt"
8
- viewBox="0.00 0.00 1052.00 604.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7
+ <svg width="1094pt" height="604pt"
8
+ viewBox="0.00 0.00 1094.00 604.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 560.58)">
10
10
  <title>PWN_Swarm</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-560.58 1009.29,-560.58 1009.29,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="205.17" y="-495.38" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Swarm &#45; Native Multi&#45;Agent Orchestration</text>
13
- <text xml:space="preserve" text-anchor="start" x="335.67" y="-483.93" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">personas · ask · debate · broadcast · shared bus (no daemon)</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-560.58 1050.67,-560.58 1050.67,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="225.86" y="-495.38" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Swarm &#45; Native Multi&#45;Agent Orchestration</text>
13
+ <text xml:space="preserve" text-anchor="start" x="356.36" y="-483.93" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">personas · ask · debate · broadcast · shared bus (no daemon)</text>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_verbs</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M20,-292.12C20,-292.12 717,-292.12 717,-292.12 723,-292.12 729,-298.12 729,-304.12 729,-304.12 729,-375.88 729,-375.88 729,-381.88 723,-387.88 717,-387.88 717,-387.88 20,-387.88 20,-387.88 14,-387.88 8,-381.88 8,-375.88 8,-375.88 8,-304.12 8,-304.12 8,-298.12 14,-292.12 20,-292.12"/>
17
- <text xml:space="preserve" text-anchor="middle" x="368.5" y="-364.88" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Swarm Verbs &#160;(toolset: swarm)</text>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M20,-292.12C20,-292.12 739,-292.12 739,-292.12 745,-292.12 751,-298.12 751,-304.12 751,-304.12 751,-375.88 751,-375.88 751,-381.88 745,-387.88 739,-387.88 739,-387.88 20,-387.88 20,-387.88 14,-387.88 8,-381.88 8,-375.88 8,-375.88 8,-304.12 8,-304.12 8,-298.12 14,-292.12 20,-292.12"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="379.5" y="-364.88" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Swarm Verbs &#160;(toolset: swarm)</text>
18
18
  </g>
19
19
  <g id="clust4" class="cluster">
20
20
  <title>cluster_personas</title>
21
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M104,-149.88C104,-149.88 707,-149.88 707,-149.88 713,-149.88 719,-155.88 719,-161.88 719,-161.88 719,-233.62 719,-233.62 719,-239.62 713,-245.62 707,-245.62 707,-245.62 104,-245.62 104,-245.62 98,-245.62 92,-239.62 92,-233.62 92,-233.62 92,-161.88 92,-161.88 92,-155.88 98,-149.88 104,-149.88"/>
22
- <text xml:space="preserve" text-anchor="middle" x="405.5" y="-222.62" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Personas &#160;(each = full PWN::AI::Agent::Loop)</text>
21
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M107,-149.88C107,-149.88 749,-149.88 749,-149.88 755,-149.88 761,-155.88 761,-161.88 761,-161.88 761,-233.62 761,-233.62 761,-239.62 755,-245.62 749,-245.62 749,-245.62 107,-245.62 107,-245.62 101,-245.62 95,-239.62 95,-233.62 95,-233.62 95,-161.88 95,-161.88 95,-155.88 101,-149.88 107,-149.88"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="428" y="-222.62" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Illustrative personas (each = nested Loop; not completion proof)</text>
23
23
  </g>
24
24
  <g id="clust6" class="cluster">
25
25
  <title>cluster_state</title>
26
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M107,-8C107,-8 716,-8 716,-8 722,-8 728,-14 728,-20 728,-20 728,-91.38 728,-91.38 728,-97.38 722,-103.38 716,-103.38 716,-103.38 107,-103.38 107,-103.38 101,-103.38 95,-97.38 95,-91.38 95,-91.38 95,-20 95,-20 95,-14 101,-8 107,-8"/>
27
- <text xml:space="preserve" text-anchor="middle" x="411.5" y="-80.38" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Shared State &#160;~/.pwn/</text>
26
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M120,-8C120,-8 729,-8 729,-8 735,-8 741,-14 741,-20 741,-20 741,-91.38 741,-91.38 741,-97.38 735,-103.38 729,-103.38 729,-103.38 120,-103.38 120,-103.38 114,-103.38 108,-97.38 108,-91.38 108,-91.38 108,-20 108,-20 108,-14 114,-8 120,-8"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="424.5" y="-80.38" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Shared State &#160;~/.pwn/</text>
28
28
  </g>
29
29
  <!-- Orchestrator -->
30
30
  <g id="node1" class="node">
@@ -88,175 +88,175 @@
88
88
  <!-- LocalLoop -->
89
89
  <g id="node2" class="node">
90
90
  <title>LocalLoop</title>
91
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M706.38,-478.38C706.38,-478.38 623.62,-478.38 623.62,-478.38 617.62,-478.38 611.62,-472.38 611.62,-466.38 611.62,-466.38 611.62,-454.38 611.62,-454.38 611.62,-448.38 617.62,-442.38 623.62,-442.38 623.62,-442.38 706.38,-442.38 706.38,-442.38 712.38,-442.38 718.38,-448.38 718.38,-454.38 718.38,-454.38 718.38,-466.38 718.38,-466.38 718.38,-472.38 712.38,-478.38 706.38,-478.38"/>
92
- <text xml:space="preserve" text-anchor="middle" x="665" y="-463.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;Local Loop.run</text>
93
- <text xml:space="preserve" text-anchor="middle" x="665" y="-449.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(ai.active = ollama)</text>
91
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M717.38,-478.38C717.38,-478.38 634.62,-478.38 634.62,-478.38 628.62,-478.38 622.62,-472.38 622.62,-466.38 622.62,-466.38 622.62,-454.38 622.62,-454.38 622.62,-448.38 628.62,-442.38 634.62,-442.38 634.62,-442.38 717.38,-442.38 717.38,-442.38 723.38,-442.38 729.38,-448.38 729.38,-454.38 729.38,-454.38 729.38,-466.38 729.38,-466.38 729.38,-472.38 723.38,-478.38 717.38,-478.38"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="676" y="-463.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;Local Loop.run</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="676" y="-449.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(ai.active = ollama)</text>
94
94
  </g>
95
95
  <!-- Escalate -->
96
96
  <g id="node7" class="node">
97
97
  <title>Escalate</title>
98
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M709,-348.62C709,-348.62 621,-348.62 621,-348.62 615,-348.62 609,-342.62 609,-336.62 609,-336.62 609,-312.12 609,-312.12 609,-306.12 615,-300.12 621,-300.12 621,-300.12 709,-300.12 709,-300.12 715,-300.12 721,-306.12 721,-312.12 721,-312.12 721,-336.62 721,-336.62 721,-342.62 715,-348.62 709,-348.62"/>
99
- <text xml:space="preserve" text-anchor="middle" x="665" y="-334.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Loop.escalate</text>
100
- <text xml:space="preserve" text-anchor="middle" x="665" y="-320.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(local stuck ≥N fails)</text>
101
- <text xml:space="preserve" text-anchor="middle" x="665" y="-307.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ frontier hint</text>
98
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M730.88,-348.62C730.88,-348.62 621.12,-348.62 621.12,-348.62 615.12,-348.62 609.12,-342.62 609.12,-336.62 609.12,-336.62 609.12,-312.12 609.12,-312.12 609.12,-306.12 615.12,-300.12 621.12,-300.12 621.12,-300.12 730.88,-300.12 730.88,-300.12 736.88,-300.12 742.88,-306.12 742.88,-312.12 742.88,-312.12 742.88,-336.62 742.88,-336.62 742.88,-342.62 736.88,-348.62 730.88,-348.62"/>
99
+ <text xml:space="preserve" text-anchor="middle" x="676" y="-334.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Loop escalation (private)</text>
100
+ <text xml:space="preserve" text-anchor="middle" x="676" y="-320.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(local stuck ≥N fails)</text>
101
+ <text xml:space="preserve" text-anchor="middle" x="676" y="-307.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ frontier hint</text>
102
102
  </g>
103
103
  <!-- LocalLoop&#45;&gt;Escalate -->
104
104
  <g id="edge5" class="edge">
105
105
  <title>LocalLoop&#45;&gt;Escalate</title>
106
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M665,-441.86C665,-421.22 665,-386.42 665,-360.22"/>
107
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="667.8,-360.26 665,-352.26 662.2,-360.26 667.8,-360.26"/>
108
- <text xml:space="preserve" text-anchor="middle" x="705.5" y="-397.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">escalation_persona</text>
106
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M676,-441.86C676,-421.22 676,-386.42 676,-360.22"/>
107
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="678.8,-360.26 676,-352.26 673.2,-360.26 678.8,-360.26"/>
108
+ <text xml:space="preserve" text-anchor="middle" x="716.5" y="-397.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">escalation_persona</text>
109
109
  </g>
110
110
  <!-- Red -->
111
111
  <g id="node8" class="node">
112
112
  <title>Red</title>
113
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M208.12,-206.38C208.12,-206.38 111.88,-206.38 111.88,-206.38 105.88,-206.38 99.88,-200.38 99.88,-194.38 99.88,-194.38 99.88,-169.88 99.88,-169.88 99.88,-163.88 105.88,-157.88 111.88,-157.88 111.88,-157.88 208.12,-157.88 208.12,-157.88 214.12,-157.88 220.12,-163.88 220.12,-169.88 220.12,-169.88 220.12,-194.38 220.12,-194.38 220.12,-200.38 214.12,-206.38 208.12,-206.38"/>
114
- <text xml:space="preserve" text-anchor="middle" x="160" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🔴 &#160;red_team</text>
115
- <text xml:space="preserve" text-anchor="middle" x="160" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: grok</text>
116
- <text xml:space="preserve" text-anchor="middle" x="160" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: terminal,pwn</text>
113
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M211.12,-206.38C211.12,-206.38 114.88,-206.38 114.88,-206.38 108.88,-206.38 102.88,-200.38 102.88,-194.38 102.88,-194.38 102.88,-169.88 102.88,-169.88 102.88,-163.88 108.88,-157.88 114.88,-157.88 114.88,-157.88 211.12,-157.88 211.12,-157.88 217.12,-157.88 223.12,-163.88 223.12,-169.88 223.12,-169.88 223.12,-194.38 223.12,-194.38 223.12,-200.38 217.12,-206.38 211.12,-206.38"/>
114
+ <text xml:space="preserve" text-anchor="middle" x="163" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🔴 &#160;red_team</text>
115
+ <text xml:space="preserve" text-anchor="middle" x="163" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: grok</text>
116
+ <text xml:space="preserve" text-anchor="middle" x="163" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: terminal,pwn</text>
117
117
  </g>
118
118
  <!-- Spawn&#45;&gt;Red -->
119
119
  <!-- Agents -->
120
120
  <g id="node12" class="node">
121
121
  <title>Agents</title>
122
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M196.62,-59.75C196.62,-62.16 175.73,-64.12 150,-64.12 124.27,-64.12 103.38,-62.16 103.38,-59.75 103.38,-59.75 103.38,-20.38 103.38,-20.38 103.38,-17.96 124.27,-16 150,-16 175.73,-16 196.62,-17.96 196.62,-20.38 196.62,-20.38 196.62,-59.75 196.62,-59.75"/>
123
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M196.62,-59.75C196.62,-57.34 175.73,-55.38 150,-55.38 124.27,-55.38 103.38,-57.34 103.38,-59.75"/>
124
- <text xml:space="preserve" text-anchor="middle" x="150" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">agents.yml</text>
125
- <text xml:space="preserve" text-anchor="middle" x="150" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">persona registry</text>
122
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M209.62,-59.75C209.62,-62.16 188.73,-64.12 163,-64.12 137.27,-64.12 116.38,-62.16 116.38,-59.75 116.38,-59.75 116.38,-20.38 116.38,-20.38 116.38,-17.96 137.27,-16 163,-16 188.73,-16 209.62,-17.96 209.62,-20.38 209.62,-20.38 209.62,-59.75 209.62,-59.75"/>
123
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M209.62,-59.75C209.62,-57.34 188.73,-55.38 163,-55.38 137.27,-55.38 116.38,-57.34 116.38,-59.75"/>
124
+ <text xml:space="preserve" text-anchor="middle" x="163" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">agents.yml</text>
125
+ <text xml:space="preserve" text-anchor="middle" x="163" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">persona registry</text>
126
126
  </g>
127
127
  <!-- Spawn&#45;&gt;Agents -->
128
128
  <g id="edge17" class="edge">
129
129
  <title>Spawn&#45;&gt;Agents</title>
130
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M91.85,-305.73C102.7,-300.49 115.09,-295.3 127,-292.12 322.24,-240.06 378.42,-267.56 580,-253.62 588.33,-253.05 724.26,-251.68 730,-245.62 759.28,-214.74 758.69,-181.31 730,-149.88 710.86,-128.9 247.09,-114.58 221,-103.38 204.37,-96.23 188.89,-83.67 176.65,-71.69"/>
131
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="178.82,-69.9 171.21,-66.15 174.82,-73.82 178.82,-69.9"/>
132
- <text xml:space="preserve" text-anchor="middle" x="761.49" y="-178.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">write</text>
130
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M91.84,-305.71C102.69,-300.47 115.09,-295.28 127,-292.12 329.16,-238.53 387.28,-266.93 596,-253.62 605.77,-253 765.24,-252.7 772,-245.62 801.4,-214.86 800.77,-181.24 772,-149.88 751.72,-127.77 261.59,-115.15 234,-103.38 217.35,-96.27 201.87,-83.72 189.63,-71.73"/>
131
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="191.8,-69.94 184.2,-66.18 187.8,-73.86 191.8,-69.94"/>
132
+ <text xml:space="preserve" text-anchor="middle" x="803.56" y="-178.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">write</text>
133
133
  </g>
134
134
  <!-- Ask&#45;&gt;Red -->
135
135
  <g id="edge7" class="edge">
136
136
  <title>Ask&#45;&gt;Red</title>
137
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M199.39,-305.9C192.23,-283.56 179.67,-244.44 170.66,-216.36"/>
138
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="173.35,-215.56 168.24,-208.8 168.02,-217.28 173.35,-215.56"/>
137
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M199.77,-305.9C193.08,-283.56 181.36,-244.44 172.95,-216.36"/>
138
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="175.67,-215.67 170.69,-208.81 170.31,-217.28 175.67,-215.67"/>
139
139
  </g>
140
140
  <!-- Blue -->
141
141
  <g id="node9" class="node">
142
142
  <title>Blue</title>
143
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M548,-206.38C548,-206.38 466,-206.38 466,-206.38 460,-206.38 454,-200.38 454,-194.38 454,-194.38 454,-169.88 454,-169.88 454,-163.88 460,-157.88 466,-157.88 466,-157.88 548,-157.88 548,-157.88 554,-157.88 560,-163.88 560,-169.88 560,-169.88 560,-194.38 560,-194.38 560,-200.38 554,-206.38 548,-206.38"/>
144
- <text xml:space="preserve" text-anchor="middle" x="507" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🔵 &#160;blue_team</text>
145
- <text xml:space="preserve" text-anchor="middle" x="507" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: anthropic</text>
146
- <text xml:space="preserve" text-anchor="middle" x="507" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: pwn,extro</text>
143
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M589.88,-206.38C589.88,-206.38 468.12,-206.38 468.12,-206.38 462.12,-206.38 456.12,-200.38 456.12,-194.38 456.12,-194.38 456.12,-169.88 456.12,-169.88 456.12,-163.88 462.12,-157.88 468.12,-157.88 468.12,-157.88 589.88,-157.88 589.88,-157.88 595.88,-157.88 601.88,-163.88 601.88,-169.88 601.88,-169.88 601.88,-194.38 601.88,-194.38 601.88,-200.38 595.88,-206.38 589.88,-206.38"/>
144
+ <text xml:space="preserve" text-anchor="middle" x="529" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🔵 &#160;blue_team</text>
145
+ <text xml:space="preserve" text-anchor="middle" x="529" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: anthropic</text>
146
+ <text xml:space="preserve" text-anchor="middle" x="529" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: pwn,extrospection</text>
147
147
  </g>
148
148
  <!-- Debate&#45;&gt;Blue -->
149
149
  <g id="edge8" class="edge">
150
150
  <title>Debate&#45;&gt;Blue</title>
151
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M379.2,-305.9C403.16,-282.88 445.68,-242.03 475.05,-213.81"/>
152
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="476.97,-215.85 480.8,-208.29 473.09,-211.81 476.97,-215.85"/>
151
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M381.94,-305.9C409.74,-282.68 459.27,-241.34 493.1,-213.1"/>
152
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="494.63,-215.47 498.98,-208.19 491.04,-211.17 494.63,-215.47"/>
153
153
  </g>
154
154
  <!-- Recon -->
155
155
  <g id="node10" class="node">
156
156
  <title>Recon</title>
157
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M394.5,-206.38C394.5,-206.38 279.5,-206.38 279.5,-206.38 273.5,-206.38 267.5,-200.38 267.5,-194.38 267.5,-194.38 267.5,-169.88 267.5,-169.88 267.5,-163.88 273.5,-157.88 279.5,-157.88 279.5,-157.88 394.5,-157.88 394.5,-157.88 400.5,-157.88 406.5,-163.88 406.5,-169.88 406.5,-169.88 406.5,-194.38 406.5,-194.38 406.5,-200.38 400.5,-206.38 394.5,-206.38"/>
158
- <text xml:space="preserve" text-anchor="middle" x="337" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🛰 &#160;recon</text>
159
- <text xml:space="preserve" text-anchor="middle" x="337" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: ollama</text>
160
- <text xml:space="preserve" text-anchor="middle" x="337" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: terminal,memory</text>
157
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M397.5,-206.38C397.5,-206.38 282.5,-206.38 282.5,-206.38 276.5,-206.38 270.5,-200.38 270.5,-194.38 270.5,-194.38 270.5,-169.88 270.5,-169.88 270.5,-163.88 276.5,-157.88 282.5,-157.88 282.5,-157.88 397.5,-157.88 397.5,-157.88 403.5,-157.88 409.5,-163.88 409.5,-169.88 409.5,-169.88 409.5,-194.38 409.5,-194.38 409.5,-200.38 403.5,-206.38 397.5,-206.38"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="340" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🛰 &#160;recon</text>
159
+ <text xml:space="preserve" text-anchor="middle" x="340" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: ollama</text>
160
+ <text xml:space="preserve" text-anchor="middle" x="340" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: terminal,memory</text>
161
161
  </g>
162
162
  <!-- Debate&#45;&gt;Recon -->
163
163
  <g id="edge9" class="edge">
164
164
  <title>Debate&#45;&gt;Recon</title>
165
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M358.01,-305.9C354.2,-283.66 347.55,-244.78 342.75,-216.73"/>
166
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="345.51,-216.28 341.41,-208.87 339.99,-217.23 345.51,-216.28"/>
165
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M358.38,-305.9C355.05,-283.66 349.23,-244.78 345.03,-216.73"/>
166
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="347.81,-216.37 343.86,-208.87 342.27,-217.2 347.81,-216.37"/>
167
167
  </g>
168
168
  <!-- Xpl -->
169
169
  <g id="node11" class="node">
170
170
  <title>Xpl</title>
171
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M699.25,-206.38C699.25,-206.38 618.75,-206.38 618.75,-206.38 612.75,-206.38 606.75,-200.38 606.75,-194.38 606.75,-194.38 606.75,-169.88 606.75,-169.88 606.75,-163.88 612.75,-157.88 618.75,-157.88 618.75,-157.88 699.25,-157.88 699.25,-157.88 705.25,-157.88 711.25,-163.88 711.25,-169.88 711.25,-169.88 711.25,-194.38 711.25,-194.38 711.25,-200.38 705.25,-206.38 699.25,-206.38"/>
172
- <text xml:space="preserve" text-anchor="middle" x="659" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">💥 &#160;exploit_dev</text>
173
- <text xml:space="preserve" text-anchor="middle" x="659" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: openai</text>
174
- <text xml:space="preserve" text-anchor="middle" x="659" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: pwn,skills</text>
171
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M741.25,-206.38C741.25,-206.38 660.75,-206.38 660.75,-206.38 654.75,-206.38 648.75,-200.38 648.75,-194.38 648.75,-194.38 648.75,-169.88 648.75,-169.88 648.75,-163.88 654.75,-157.88 660.75,-157.88 660.75,-157.88 741.25,-157.88 741.25,-157.88 747.25,-157.88 753.25,-163.88 753.25,-169.88 753.25,-169.88 753.25,-194.38 753.25,-194.38 753.25,-200.38 747.25,-206.38 741.25,-206.38"/>
172
+ <text xml:space="preserve" text-anchor="middle" x="701" y="-191.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">💥 &#160;exploit_dev</text>
173
+ <text xml:space="preserve" text-anchor="middle" x="701" y="-178.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine: openai</text>
174
+ <text xml:space="preserve" text-anchor="middle" x="701" y="-164.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolsets: pwn,skills</text>
175
175
  </g>
176
176
  <!-- Broadcast&#45;&gt;Xpl -->
177
177
  <g id="edge10" class="edge">
178
178
  <title>Broadcast&#45;&gt;Xpl</title>
179
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M518.15,-305.83C524.63,-289.88 536.38,-266.88 554,-253.62 565.03,-245.33 571.75,-251.97 584,-245.62 600.11,-237.29 615.85,-225 628.72,-213.52"/>
180
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="630.5,-215.7 634.5,-208.22 626.71,-211.57 630.5,-215.7"/>
179
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M528.75,-305.72C544.65,-289.92 569.95,-267.22 596,-253.62 607.85,-247.44 613.13,-251.78 625,-245.62 641.22,-237.21 657.16,-224.91 670.22,-213.44"/>
180
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="672.03,-215.58 676.1,-208.14 668.28,-211.42 672.03,-215.58"/>
181
181
  </g>
182
182
  <!-- Escalate&#45;&gt;Blue -->
183
183
  <g id="edge11" class="edge">
184
184
  <title>Escalate&#45;&gt;Blue</title>
185
- <path fill="none" stroke="#34d399" stroke-width="2" d="M637.84,-299.27C611.34,-275.74 570.9,-239.85 542,-214.2"/>
186
- <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="543.91,-212.15 536.07,-208.93 540.19,-216.33 543.91,-212.15"/>
187
- <text xml:space="preserve" text-anchor="middle" x="623.96" y="-255.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ask 3&#45;line hint</text>
185
+ <path fill="none" stroke="#34d399" stroke-width="2" d="M650.73,-299.27C626.18,-275.84 588.78,-240.16 561.91,-214.53"/>
186
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="563.85,-212.51 556.13,-209.01 559.99,-216.56 563.85,-212.51"/>
187
+ <text xml:space="preserve" text-anchor="middle" x="639.8" y="-255.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ask 3&#45;line hint</text>
188
188
  </g>
189
189
  <!-- Red&#45;&gt;Agents -->
190
190
  <!-- Bus -->
191
191
  <g id="node13" class="node">
192
192
  <title>Bus</title>
193
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M362,-59.75C362,-62.16 335.56,-64.12 303,-64.12 270.44,-64.12 244,-62.16 244,-59.75 244,-59.75 244,-20.38 244,-20.38 244,-17.96 270.44,-16 303,-16 335.56,-16 362,-17.96 362,-20.38 362,-20.38 362,-59.75 362,-59.75"/>
194
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M362,-59.75C362,-57.34 335.56,-55.38 303,-55.38 270.44,-55.38 244,-57.34 244,-59.75"/>
195
- <text xml:space="preserve" text-anchor="middle" x="303" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
196
- <text xml:space="preserve" text-anchor="middle" x="303" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">append&#45;only chat</text>
193
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M375,-59.75C375,-62.16 348.56,-64.12 316,-64.12 283.44,-64.12 257,-62.16 257,-59.75 257,-59.75 257,-20.38 257,-20.38 257,-17.96 283.44,-16 316,-16 348.56,-16 375,-17.96 375,-20.38 375,-20.38 375,-59.75 375,-59.75"/>
194
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M375,-59.75C375,-57.34 348.56,-55.38 316,-55.38 283.44,-55.38 257,-57.34 257,-59.75"/>
195
+ <text xml:space="preserve" text-anchor="middle" x="316" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
196
+ <text xml:space="preserve" text-anchor="middle" x="316" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">append&#45;only chat</text>
197
197
  </g>
198
198
  <!-- Red&#45;&gt;Bus -->
199
199
  <g id="edge13" class="edge">
200
200
  <title>Red&#45;&gt;Bus</title>
201
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M184.26,-157.37C208.44,-133.68 245.67,-97.21 271.99,-71.44"/>
202
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="273.94,-73.45 277.69,-65.85 270.02,-69.45 273.94,-73.45"/>
203
- <text xml:space="preserve" text-anchor="middle" x="254.21" y="-113.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">append reply</text>
201
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M188.95,-157.37C214.86,-133.65 254.76,-97.12 282.92,-71.34"/>
202
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="284.71,-73.5 288.72,-66.03 280.93,-69.37 284.71,-73.5"/>
203
+ <text xml:space="preserve" text-anchor="middle" x="261.91" y="-113.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">append reply</text>
204
204
  </g>
205
205
  <!-- Blue&#45;&gt;LocalLoop -->
206
206
  <g id="edge20" class="edge">
207
207
  <title>Blue&#45;&gt;LocalLoop</title>
208
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M528.04,-207.02C542.04,-221.09 561.73,-237.64 583,-245.62 597.05,-250.9 842.55,-242.86 853,-253.62 916.06,-318.58 786.52,-398.49 712.23,-436.8"/>
209
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="711.14,-434.21 705.28,-440.33 713.68,-439.21 711.14,-434.21"/>
210
- <text xml:space="preserve" text-anchor="middle" x="911.73" y="-326.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier_hint</text>
211
- <text xml:space="preserve" text-anchor="middle" x="911.73" y="-315.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(synthetic tool result)</text>
208
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M556.71,-207.05C574.84,-221.13 599.77,-237.69 625,-245.62 638.2,-249.78 864.37,-243.68 874,-253.62 938.49,-320.22 803.11,-399.31 725.45,-437.11"/>
209
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="724.55,-434.43 718.55,-440.42 726.98,-439.48 724.55,-434.43"/>
210
+ <text xml:space="preserve" text-anchor="middle" x="932.8" y="-326.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier_hint</text>
211
+ <text xml:space="preserve" text-anchor="middle" x="932.8" y="-315.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(synthetic tool result)</text>
212
212
  </g>
213
213
  <!-- Blue&#45;&gt;Bus -->
214
214
  <g id="edge14" class="edge">
215
215
  <title>Blue&#45;&gt;Bus</title>
216
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M467.73,-157.24C443.55,-142.26 412.1,-122.26 385,-103.38 370.28,-93.12 354.51,-81.33 340.77,-70.79"/>
217
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="342.54,-68.62 334.49,-65.95 339.12,-73.05 342.54,-68.62"/>
216
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M486.06,-157.29C460.11,-142.48 426.63,-122.65 398,-103.38 383,-93.27 367.05,-81.42 353.25,-70.79"/>
217
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="354.98,-68.59 346.94,-65.9 351.55,-73.01 354.98,-68.59"/>
218
218
  </g>
219
219
  <!-- Pmap -->
220
220
  <g id="node14" class="node">
221
221
  <title>Pmap</title>
222
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M551.38,-59.75C551.38,-62.16 519.38,-64.12 480,-64.12 440.62,-64.12 408.62,-62.16 408.62,-59.75 408.62,-59.75 408.62,-20.38 408.62,-20.38 408.62,-17.96 440.62,-16 480,-16 519.38,-16 551.38,-17.96 551.38,-20.38 551.38,-20.38 551.38,-59.75 551.38,-59.75"/>
223
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M551.38,-59.75C551.38,-57.34 519.38,-55.38 480,-55.38 440.62,-55.38 408.62,-57.34 408.62,-59.75"/>
224
- <text xml:space="preserve" text-anchor="middle" x="480" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/&lt;id&gt;/personas.json</text>
225
- <text xml:space="preserve" text-anchor="middle" x="480" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">name → session_id</text>
222
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M564.38,-59.75C564.38,-62.16 532.38,-64.12 493,-64.12 453.62,-64.12 421.62,-62.16 421.62,-59.75 421.62,-59.75 421.62,-20.38 421.62,-20.38 421.62,-17.96 453.62,-16 493,-16 532.38,-16 564.38,-17.96 564.38,-20.38 564.38,-20.38 564.38,-59.75 564.38,-59.75"/>
223
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M564.38,-59.75C564.38,-57.34 532.38,-55.38 493,-55.38 453.62,-55.38 421.62,-57.34 421.62,-59.75"/>
224
+ <text xml:space="preserve" text-anchor="middle" x="493" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">swarm/&lt;id&gt;/personas.json</text>
225
+ <text xml:space="preserve" text-anchor="middle" x="493" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">name → session_id</text>
226
226
  </g>
227
227
  <!-- Recon&#45;&gt;Pmap -->
228
228
  <g id="edge15" class="edge">
229
229
  <title>Recon&#45;&gt;Pmap</title>
230
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M361.26,-157.37C385.44,-133.68 422.67,-97.21 448.99,-71.44"/>
231
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="450.94,-73.45 454.69,-65.85 447.02,-69.45 450.94,-73.45"/>
230
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M365.95,-157.37C391.86,-133.65 431.76,-97.12 459.92,-71.34"/>
231
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="461.71,-73.5 465.72,-66.03 457.93,-69.37 461.71,-73.5"/>
232
232
  </g>
233
233
  <!-- Sess -->
234
234
  <g id="node15" class="node">
235
235
  <title>Sess</title>
236
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M719.88,-59.75C719.88,-62.16 692.59,-64.12 659,-64.12 625.41,-64.12 598.12,-62.16 598.12,-59.75 598.12,-59.75 598.12,-20.38 598.12,-20.38 598.12,-17.96 625.41,-16 659,-16 692.59,-16 719.88,-17.96 719.88,-20.38 719.88,-20.38 719.88,-59.75 719.88,-59.75"/>
237
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M719.88,-59.75C719.88,-57.34 692.59,-55.38 659,-55.38 625.41,-55.38 598.12,-57.34 598.12,-59.75"/>
238
- <text xml:space="preserve" text-anchor="middle" x="659" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sessions/*.jsonl</text>
239
- <text xml:space="preserve" text-anchor="middle" x="659" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;persona transcript</text>
236
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M732.88,-59.75C732.88,-62.16 705.59,-64.12 672,-64.12 638.41,-64.12 611.12,-62.16 611.12,-59.75 611.12,-59.75 611.12,-20.38 611.12,-20.38 611.12,-17.96 638.41,-16 672,-16 705.59,-16 732.88,-17.96 732.88,-20.38 732.88,-20.38 732.88,-59.75 732.88,-59.75"/>
237
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M732.88,-59.75C732.88,-57.34 705.59,-55.38 672,-55.38 638.41,-55.38 611.12,-57.34 611.12,-59.75"/>
238
+ <text xml:space="preserve" text-anchor="middle" x="672" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sessions/*.jsonl</text>
239
+ <text xml:space="preserve" text-anchor="middle" x="672" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;persona transcript</text>
240
240
  </g>
241
241
  <!-- Xpl&#45;&gt;Sess -->
242
242
  <g id="edge16" class="edge">
243
243
  <title>Xpl&#45;&gt;Sess</title>
244
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M659,-157.37C659,-134.49 659,-99.69 659,-74.12"/>
245
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="661.8,-74.44 659,-66.44 656.2,-74.44 661.8,-74.44"/>
244
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M696.08,-157.37C691.34,-134.49 684.14,-99.69 678.84,-74.12"/>
245
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="681.61,-73.66 677.25,-66.4 676.13,-74.8 681.61,-73.66"/>
246
246
  </g>
247
247
  <!-- Bus&#45;&gt;Orchestrator -->
248
248
  <g id="edge19" class="edge">
249
249
  <title>Bus&#45;&gt;Orchestrator</title>
250
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" stroke-dasharray="5,2" d="M325.7,-64.68C340.96,-78.82 362.36,-95.53 385,-103.38 432.67,-119.9 789.91,-99.72 839,-111.38 877.39,-120.49 898,-116.47 919,-149.88 941.65,-185.9 941.82,-209.7 919,-245.62 892.94,-286.66 858.49,-262.44 820,-292.12 776.09,-325.99 789.09,-362.08 740,-387.88 723.01,-396.8 673.05,-393.52 654,-395.88 528.04,-411.47 381.22,-435.68 301.95,-449.26"/>
251
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="301.5,-446.5 294.09,-450.61 302.45,-452.02 301.5,-446.5"/>
252
- <text xml:space="preserve" text-anchor="middle" x="939.46" y="-255.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">swarm_bus()</text>
250
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" stroke-dasharray="5,2" d="M338.69,-64.69C353.95,-78.83 375.36,-95.54 398,-103.38 448.72,-120.93 828.77,-99.01 881,-111.38 919.4,-120.47 940,-116.47 961,-149.88 983.65,-185.9 985,-210.48 961,-245.62 928.98,-292.52 888.09,-258.96 842,-292.12 796.98,-324.51 811.23,-362.34 762,-387.88 742.8,-397.83 686.48,-393.37 665,-395.88 534.65,-411.06 382.63,-435.72 301.67,-449.42"/>
251
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="301.52,-446.6 294.1,-450.7 302.46,-452.12 301.52,-446.6"/>
252
+ <text xml:space="preserve" text-anchor="middle" x="980.85" y="-255.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">swarm_bus()</text>
253
253
  </g>
254
254
  <!-- Bus&#45;&gt;Debate -->
255
255
  <g id="edge18" class="edge">
256
256
  <title>Bus&#45;&gt;Debate</title>
257
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M325.7,-64.67C340.96,-78.8 362.37,-95.5 385,-103.38 427.83,-118.27 750.81,-94.77 793,-111.38 816.87,-120.77 825.53,-126.46 836,-149.88 853.36,-188.73 864.87,-214.36 836,-245.62 828.44,-253.82 747.08,-252.39 736,-253.62 703.42,-257.27 695.49,-259.76 663,-264.12 563.56,-277.49 536.14,-267.04 439,-292.12 428.83,-294.75 418.22,-298.37 408.21,-302.22"/>
258
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="407.45,-299.5 401.05,-305.06 409.52,-304.71 407.45,-299.5"/>
259
- <text xml:space="preserve" text-anchor="middle" x="880.97" y="-178.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tail → context</text>
257
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M338.7,-64.68C353.96,-78.81 375.37,-95.52 398,-103.38 443.88,-119.3 789.8,-93.62 835,-111.38 858.88,-120.75 867.53,-126.46 878,-149.88 895.36,-188.73 907.11,-214.58 878,-245.62 868.56,-255.7 767.73,-252.22 754,-253.62 720.52,-257.04 712.38,-259.84 679,-264.12 572.48,-277.79 543.09,-265.7 439,-292.12 428.82,-294.71 418.2,-298.31 408.2,-302.15"/>
258
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="407.43,-299.44 401.03,-305 409.5,-304.64 407.43,-299.44"/>
259
+ <text xml:space="preserve" text-anchor="middle" x="923.07" y="-178.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tail → context</text>
260
260
  </g>
261
261
  </g>
262
262
  </svg>