pwn 0.5.677 → 0.5.680

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/documentation/AI-Integration.md +4 -3
  4. data/documentation/Agent-Tool-Registry.md +27 -5
  5. data/documentation/CLI-Drivers.md +1 -1
  6. data/documentation/Configuration.md +65 -25
  7. data/documentation/Cron.md +12 -2
  8. data/documentation/Home.md +1 -1
  9. data/documentation/How-PWN-Works.md +1 -1
  10. data/documentation/Installation.md +12 -7
  11. data/documentation/Reinforcement-Learning.md +10 -6
  12. data/documentation/Skills-Memory-Learning.md +1 -1
  13. data/documentation/What-is-PWN.md +1 -1
  14. data/documentation/diagrams/agent-tool-registry.svg +156 -147
  15. data/documentation/diagrams/cron-scheduling.svg +149 -126
  16. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -1
  17. data/documentation/diagrams/dot/cron-scheduling.dot +6 -3
  18. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +1 -1
  19. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +14 -13
  20. data/documentation/pwn-REPL.md +1 -1
  21. data/documentation/pwn-ai-Agent.md +16 -9
  22. data/lib/pwn/ai/agent/loop.rb +42 -5
  23. data/lib/pwn/ai/agent/policy.rb +9 -3
  24. data/lib/pwn/ai/agent/registry.rb +95 -6
  25. data/lib/pwn/ai/anthropic.rb +3 -6
  26. data/lib/pwn/ai/gemini.rb +3 -6
  27. data/lib/pwn/ai/grok.rb +8 -8
  28. data/lib/pwn/ai/ollama.rb +3 -6
  29. data/lib/pwn/ai/open_ai.rb +3 -6
  30. data/lib/pwn/ai/open_web_ui.rb +3 -6
  31. data/lib/pwn/blockchain/btc.rb +2 -6
  32. data/lib/pwn/blockchain/eth.rb +2 -6
  33. data/lib/pwn/config.rb +4 -3
  34. data/lib/pwn/cron.rb +1 -1
  35. data/lib/pwn/plugins/black_duck_binary_analysis.rb +2 -4
  36. data/lib/pwn/plugins/jira_data_center.rb +2 -4
  37. data/lib/pwn/plugins/repl.rb +6 -6
  38. data/lib/pwn/plugins/tty_spinner.rb +71 -0
  39. data/lib/pwn/plugins.rb +1 -0
  40. data/lib/pwn/version.rb +1 -1
  41. data/spec/lib/pwn/ai/agent/registry_spec.rb +6 -0
  42. data/spec/lib/pwn/ai/grok_spec.rb +7 -0
  43. data/spec/lib/pwn/plugins/tty_spinner_spec.rb +13 -0
  44. data/third_party/pwn_rdoc.jsonl +8 -2
  45. metadata +3 -1
@@ -4,375 +4,384 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Agent_Tool_Registry Pages: 1 -->
7
- <svg width="755pt" height="1058pt"
8
- viewBox="0.00 0.00 755.00 1058.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 1014.36)">
7
+ <svg width="797pt" height="1115pt"
8
+ viewBox="0.00 0.00 797.00 1115.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 1072.04)">
10
10
  <title>PWN_Agent_Tool_Registry</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1014.36 711.95,-1014.36 711.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="68.88" y="-949.16" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Registry &#45; Toolsets exposed to the LLM</text>
13
- <text xml:space="preserve" text-anchor="start" x="207.25" y="-937.71" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">13 toolsets · 85 callable tools · lib/pwn/ai/agent/tools/*</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1072.04 753.95,-1072.04 753.95,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="89.88" y="-1006.84" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Registry &#45; Toolsets exposed to the LLM</text>
13
+ <text xml:space="preserve" text-anchor="start" x="228.25" y="-995.39" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">13 toolsets · 85 callable tools · lib/pwn/ai/agent/tools/*</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_ts</title>
16
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M289,-62.16C289,-62.16 355.5,-62.16 355.5,-62.16 361.5,-62.16 367.5,-68.16 367.5,-74.16 367.5,-74.16 367.5,-865.16 367.5,-865.16 367.5,-871.16 361.5,-877.16 355.5,-877.16 355.5,-877.16 289,-877.16 289,-877.16 283,-877.16 277,-871.16 277,-865.16 277,-865.16 277,-74.16 277,-74.16 277,-68.16 283,-62.16 289,-62.16"/>
17
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-854.16" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Toolsets</text>
16
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M331,-119.84C331,-119.84 397.5,-119.84 397.5,-119.84 403.5,-119.84 409.5,-125.84 409.5,-131.84 409.5,-131.84 409.5,-922.84 409.5,-922.84 409.5,-928.84 403.5,-934.84 397.5,-934.84 397.5,-934.84 331,-934.84 331,-934.84 325,-934.84 319,-928.84 319,-922.84 319,-922.84 319,-131.84 319,-131.84 319,-125.84 325,-119.84 331,-119.84"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-911.84" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Toolsets</text>
18
18
  </g>
19
19
  <g id="clust2" class="cluster">
20
20
  <title>cluster_tools</title>
21
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M480.25,-18.16C480.25,-18.16 656.75,-18.16 656.75,-18.16 662.75,-18.16 668.75,-24.16 668.75,-30.16 668.75,-30.16 668.75,-912.16 668.75,-912.16 668.75,-918.16 662.75,-924.16 656.75,-924.16 656.75,-924.16 480.25,-924.16 480.25,-924.16 474.25,-924.16 468.25,-918.16 468.25,-912.16 468.25,-912.16 468.25,-30.16 468.25,-30.16 468.25,-24.16 474.25,-18.16 480.25,-18.16"/>
22
- <text xml:space="preserve" text-anchor="middle" x="568.5" y="-901.16" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Tools &#160;(LLM&#45;callable)</text>
21
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M522.25,-75.84C522.25,-75.84 698.75,-75.84 698.75,-75.84 704.75,-75.84 710.75,-81.84 710.75,-87.84 710.75,-87.84 710.75,-969.84 710.75,-969.84 710.75,-975.84 704.75,-981.84 698.75,-981.84 698.75,-981.84 522.25,-981.84 522.25,-981.84 516.25,-981.84 510.25,-975.84 510.25,-969.84 510.25,-969.84 510.25,-87.84 510.25,-87.84 510.25,-81.84 516.25,-75.84 522.25,-75.84"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="610.5" y="-958.84" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Tools &#160;(LLM&#45;callable)</text>
23
23
  </g>
24
24
  <!-- Registry -->
25
25
  <g id="node1" class="node">
26
26
  <title>Registry</title>
27
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M156.25,-486.66C156.25,-486.66 12,-486.66 12,-486.66 6,-486.66 0,-480.66 0,-474.66 0,-474.66 0,-433.66 0,-433.66 0,-427.66 6,-421.66 12,-421.66 12,-421.66 156.25,-421.66 156.25,-421.66 162.25,-421.66 168.25,-427.66 168.25,-433.66 168.25,-433.66 168.25,-474.66 168.25,-474.66 168.25,-480.66 162.25,-486.66 156.25,-486.66"/>
28
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-471.26" font-family="sans-Serif" font-size="12.00" fill="#0f172a">Registry</text>
29
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-457.01" font-family="sans-Serif" font-size="12.00" fill="#0f172a">JSON&#45;Schema function defs</text>
30
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-442.76" font-family="sans-Serif" font-size="12.00" fill="#0f172a">rank(query) · CORE_TOOLS</text>
31
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-428.51" font-family="sans-Serif" font-size="12.00" fill="#0f172a">tool_router → CORE + top&#45;K</text>
27
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M198.25,-551.47C198.25,-551.47 12,-551.47 12,-551.47 6,-551.47 0,-545.47 0,-539.47 0,-539.47 0,-484.22 0,-484.22 0,-478.22 6,-472.22 12,-472.22 12,-472.22 198.25,-472.22 198.25,-472.22 204.25,-472.22 210.25,-478.22 210.25,-484.22 210.25,-484.22 210.25,-539.47 210.25,-539.47 210.25,-545.47 204.25,-551.47 198.25,-551.47"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="105.12" y="-536.07" font-family="sans-Serif" font-size="12.00" fill="#0f172a">Registry</text>
29
+ <text xml:space="preserve" text-anchor="middle" x="105.12" y="-521.82" font-family="sans-Serif" font-size="12.00" fill="#0f172a">JSON&#45;Schema function defs</text>
30
+ <text xml:space="preserve" text-anchor="middle" x="105.12" y="-507.57" font-family="sans-Serif" font-size="12.00" fill="#0f172a">rank(query) · CORE_TOOLS</text>
31
+ <text xml:space="preserve" text-anchor="middle" x="105.12" y="-493.32" font-family="sans-Serif" font-size="12.00" fill="#0f172a">tool_router → CORE + top&#45;K</text>
32
+ <text xml:space="preserve" text-anchor="middle" x="105.12" y="-479.07" font-family="sans-Serif" font-size="12.00" fill="#0f172a">tool_preference (memory_recall first)</text>
32
33
  </g>
33
34
  <!-- terminal -->
34
35
  <g id="node2" class="node">
35
36
  <title>terminal</title>
36
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-838.16C337.25,-838.16 307.25,-838.16 307.25,-838.16 301.25,-838.16 295.25,-832.16 295.25,-826.16 295.25,-826.16 295.25,-814.16 295.25,-814.16 295.25,-808.16 301.25,-802.16 307.25,-802.16 307.25,-802.16 337.25,-802.16 337.25,-802.16 343.25,-802.16 349.25,-808.16 349.25,-814.16 349.25,-814.16 349.25,-826.16 349.25,-826.16 349.25,-832.16 343.25,-838.16 337.25,-838.16"/>
37
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-816.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">terminal</text>
37
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-895.84C379.25,-895.84 349.25,-895.84 349.25,-895.84 343.25,-895.84 337.25,-889.84 337.25,-883.84 337.25,-883.84 337.25,-871.84 337.25,-871.84 337.25,-865.84 343.25,-859.84 349.25,-859.84 349.25,-859.84 379.25,-859.84 379.25,-859.84 385.25,-859.84 391.25,-865.84 391.25,-871.84 391.25,-871.84 391.25,-883.84 391.25,-883.84 391.25,-889.84 385.25,-895.84 379.25,-895.84"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-874.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">terminal</text>
38
39
  </g>
39
40
  <!-- Registry&#45;&gt;terminal -->
40
41
  <g id="edge1" class="edge">
41
42
  <title>Registry&#45;&gt;terminal</title>
42
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M96.87,-487.62C120.98,-552.51 181.48,-697.24 271.25,-790.16 275.95,-795.03 281.6,-799.4 287.38,-803.19"/>
43
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.06,-805.26 293.31,-806.83 288.62,-801.08 286.06,-805.26"/>
43
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M123.29,-552.28C153.59,-620.01 222.1,-757.78 313.25,-847.84 318.01,-852.55 323.64,-856.82 329.38,-860.57"/>
44
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="327.99,-862.59 335.24,-864.17 330.56,-858.42 327.99,-862.59"/>
44
45
  </g>
45
46
  <!-- pwn -->
46
47
  <g id="node3" class="node">
47
48
  <title>pwn</title>
48
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-777.16C337.25,-777.16 307.25,-777.16 307.25,-777.16 301.25,-777.16 295.25,-771.16 295.25,-765.16 295.25,-765.16 295.25,-753.16 295.25,-753.16 295.25,-747.16 301.25,-741.16 307.25,-741.16 307.25,-741.16 337.25,-741.16 337.25,-741.16 343.25,-741.16 349.25,-747.16 349.25,-753.16 349.25,-753.16 349.25,-765.16 349.25,-765.16 349.25,-771.16 343.25,-777.16 337.25,-777.16"/>
49
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-755.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn</text>
49
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-834.84C379.25,-834.84 349.25,-834.84 349.25,-834.84 343.25,-834.84 337.25,-828.84 337.25,-822.84 337.25,-822.84 337.25,-810.84 337.25,-810.84 337.25,-804.84 343.25,-798.84 349.25,-798.84 349.25,-798.84 379.25,-798.84 379.25,-798.84 385.25,-798.84 391.25,-804.84 391.25,-810.84 391.25,-810.84 391.25,-822.84 391.25,-822.84 391.25,-828.84 385.25,-834.84 379.25,-834.84"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-813.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn</text>
50
51
  </g>
51
52
  <!-- Registry&#45;&gt;pwn -->
52
53
  <g id="edge2" class="edge">
53
54
  <title>Registry&#45;&gt;pwn</title>
54
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M101.57,-487.62C130.08,-543.07 193.18,-655.24 271.25,-729.16 276.11,-733.76 281.79,-737.99 287.55,-741.72"/>
55
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.16,-743.75 293.41,-745.32 288.72,-739.57 286.16,-743.75"/>
55
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M129.49,-552.09C164.15,-609.34 233.73,-715.27 313.25,-786.84 318.17,-791.27 323.84,-795.4 329.55,-799.08"/>
56
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="328.1,-801.06 335.34,-802.63 330.66,-796.88 328.1,-801.06"/>
56
57
  </g>
57
58
  <!-- memory -->
58
59
  <g id="node4" class="node">
59
60
  <title>memory</title>
60
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-716.16C337.25,-716.16 307.25,-716.16 307.25,-716.16 301.25,-716.16 295.25,-710.16 295.25,-704.16 295.25,-704.16 295.25,-692.16 295.25,-692.16 295.25,-686.16 301.25,-680.16 307.25,-680.16 307.25,-680.16 337.25,-680.16 337.25,-680.16 343.25,-680.16 349.25,-686.16 349.25,-692.16 349.25,-692.16 349.25,-704.16 349.25,-704.16 349.25,-710.16 343.25,-716.16 337.25,-716.16"/>
61
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-694.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory</text>
61
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-773.84C379.25,-773.84 349.25,-773.84 349.25,-773.84 343.25,-773.84 337.25,-767.84 337.25,-761.84 337.25,-761.84 337.25,-749.84 337.25,-749.84 337.25,-743.84 343.25,-737.84 349.25,-737.84 349.25,-737.84 379.25,-737.84 379.25,-737.84 385.25,-737.84 391.25,-743.84 391.25,-749.84 391.25,-749.84 391.25,-761.84 391.25,-761.84 391.25,-767.84 385.25,-773.84 379.25,-773.84"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-752.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory</text>
62
63
  </g>
63
64
  <!-- Registry&#45;&gt;memory -->
64
65
  <g id="edge3" class="edge">
65
66
  <title>Registry&#45;&gt;memory</title>
66
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M108.84,-487.49C141.77,-532.22 204.84,-612.49 271.25,-668.16 276.27,-672.37 281.94,-676.37 287.62,-679.99"/>
67
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.1,-681.93 293.35,-683.5 288.66,-677.75 286.1,-681.93"/>
67
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M139.65,-552.4C178.49,-597.89 245.83,-672.31 313.25,-725.84 318.32,-729.87 323.98,-733.76 329.62,-737.33"/>
68
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="328.03,-739.23 335.28,-740.79 330.59,-735.05 328.03,-739.23"/>
68
69
  </g>
69
70
  <!-- skills -->
70
71
  <g id="node5" class="node">
71
72
  <title>skills</title>
72
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-655.16C337.25,-655.16 307.25,-655.16 307.25,-655.16 301.25,-655.16 295.25,-649.16 295.25,-643.16 295.25,-643.16 295.25,-631.16 295.25,-631.16 295.25,-625.16 301.25,-619.16 307.25,-619.16 307.25,-619.16 337.25,-619.16 337.25,-619.16 343.25,-619.16 349.25,-625.16 349.25,-631.16 349.25,-631.16 349.25,-643.16 349.25,-643.16 349.25,-649.16 343.25,-655.16 337.25,-655.16"/>
73
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-633.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills</text>
73
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-712.84C379.25,-712.84 349.25,-712.84 349.25,-712.84 343.25,-712.84 337.25,-706.84 337.25,-700.84 337.25,-700.84 337.25,-688.84 337.25,-688.84 337.25,-682.84 343.25,-676.84 349.25,-676.84 349.25,-676.84 379.25,-676.84 379.25,-676.84 385.25,-676.84 391.25,-682.84 391.25,-688.84 391.25,-688.84 391.25,-700.84 391.25,-700.84 391.25,-706.84 385.25,-712.84 379.25,-712.84"/>
74
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-691.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills</text>
74
75
  </g>
75
76
  <!-- Registry&#45;&gt;skills -->
76
77
  <g id="edge4" class="edge">
77
78
  <title>Registry&#45;&gt;skills</title>
78
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M122.32,-487.52C159,-519.72 217.24,-569.07 271.25,-607.16 276.49,-610.86 282.19,-614.56 287.81,-618.03"/>
79
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.16,-619.9 293.41,-621.44 288.7,-615.71 286.16,-619.9"/>
79
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M157.91,-552.25C199.22,-583.95 258.95,-628.62 313.25,-664.84 318.4,-668.28 323.95,-671.79 329.41,-675.14"/>
80
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="328.07,-677.19 335.32,-678.72 330.6,-673 328.07,-677.19"/>
80
81
  </g>
81
82
  <!-- sessions -->
82
83
  <g id="node6" class="node">
83
84
  <title>sessions</title>
84
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.75,-594.16C337.75,-594.16 306.75,-594.16 306.75,-594.16 300.75,-594.16 294.75,-588.16 294.75,-582.16 294.75,-582.16 294.75,-570.16 294.75,-570.16 294.75,-564.16 300.75,-558.16 306.75,-558.16 306.75,-558.16 337.75,-558.16 337.75,-558.16 343.75,-558.16 349.75,-564.16 349.75,-570.16 349.75,-570.16 349.75,-582.16 349.75,-582.16 349.75,-588.16 343.75,-594.16 337.75,-594.16"/>
85
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-572.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions</text>
85
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.75,-651.84C379.75,-651.84 348.75,-651.84 348.75,-651.84 342.75,-651.84 336.75,-645.84 336.75,-639.84 336.75,-639.84 336.75,-627.84 336.75,-627.84 336.75,-621.84 342.75,-615.84 348.75,-615.84 348.75,-615.84 379.75,-615.84 379.75,-615.84 385.75,-615.84 391.75,-621.84 391.75,-627.84 391.75,-627.84 391.75,-639.84 391.75,-639.84 391.75,-645.84 385.75,-651.84 379.75,-651.84"/>
86
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-630.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions</text>
86
87
  </g>
87
88
  <!-- Registry&#45;&gt;sessions -->
88
89
  <g id="edge5" class="edge">
89
90
  <title>Registry&#45;&gt;sessions</title>
90
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M149.96,-487.66C194.19,-510.51 251.02,-539.88 286.8,-558.37"/>
91
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.29,-560.34 292.63,-561.38 287.53,-555.99 285.29,-560.34"/>
91
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M191.74,-552.47C238.47,-574.64 293.74,-600.86 328.65,-617.42"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="327.33,-619.51 334.7,-620.3 329.43,-615.08 327.33,-619.51"/>
92
93
  </g>
93
94
  <!-- learning -->
94
95
  <g id="node7" class="node">
95
96
  <title>learning</title>
96
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-533.16C337.25,-533.16 307.25,-533.16 307.25,-533.16 301.25,-533.16 295.25,-527.16 295.25,-521.16 295.25,-521.16 295.25,-509.16 295.25,-509.16 295.25,-503.16 301.25,-497.16 307.25,-497.16 307.25,-497.16 337.25,-497.16 337.25,-497.16 343.25,-497.16 349.25,-503.16 349.25,-509.16 349.25,-509.16 349.25,-521.16 349.25,-521.16 349.25,-527.16 343.25,-533.16 337.25,-533.16"/>
97
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-511.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning</text>
97
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-590.84C379.25,-590.84 349.25,-590.84 349.25,-590.84 343.25,-590.84 337.25,-584.84 337.25,-578.84 337.25,-578.84 337.25,-566.84 337.25,-566.84 337.25,-560.84 343.25,-554.84 349.25,-554.84 349.25,-554.84 379.25,-554.84 379.25,-554.84 385.25,-554.84 391.25,-560.84 391.25,-566.84 391.25,-566.84 391.25,-578.84 391.25,-578.84 391.25,-584.84 385.25,-590.84 379.25,-590.84"/>
98
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-569.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning</text>
98
99
  </g>
99
100
  <!-- Registry&#45;&gt;learning -->
100
101
  <g id="edge6" class="edge">
101
102
  <title>Registry&#45;&gt;learning</title>
102
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-475.84C209.39,-486.27 255.56,-498.19 286.37,-506.15"/>
103
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.63,-508.49 293.02,-507.87 286.85,-503.75 285.63,-508.49"/>
103
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M211.08,-536.74C252.97,-546.68 298.31,-557.44 328.51,-564.6"/>
104
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="327.61,-566.91 334.99,-566.14 328.74,-562.14 327.61,-566.91"/>
104
105
  </g>
105
106
  <!-- metrics -->
106
107
  <g id="node8" class="node">
107
108
  <title>metrics</title>
108
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-472.16C337.25,-472.16 307.25,-472.16 307.25,-472.16 301.25,-472.16 295.25,-466.16 295.25,-460.16 295.25,-460.16 295.25,-448.16 295.25,-448.16 295.25,-442.16 301.25,-436.16 307.25,-436.16 307.25,-436.16 337.25,-436.16 337.25,-436.16 343.25,-436.16 349.25,-442.16 349.25,-448.16 349.25,-448.16 349.25,-460.16 349.25,-460.16 349.25,-466.16 343.25,-472.16 337.25,-472.16"/>
109
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-450.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics</text>
109
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-529.84C379.25,-529.84 349.25,-529.84 349.25,-529.84 343.25,-529.84 337.25,-523.84 337.25,-517.84 337.25,-517.84 337.25,-505.84 337.25,-505.84 337.25,-499.84 343.25,-493.84 349.25,-493.84 349.25,-493.84 379.25,-493.84 379.25,-493.84 385.25,-493.84 391.25,-499.84 391.25,-505.84 391.25,-505.84 391.25,-517.84 391.25,-517.84 391.25,-523.84 385.25,-529.84 379.25,-529.84"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-508.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics</text>
110
111
  </g>
111
112
  <!-- Registry&#45;&gt;metrics -->
112
113
  <g id="edge7" class="edge">
113
114
  <title>Registry&#45;&gt;metrics</title>
114
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-454.16C209.21,-454.16 255.16,-454.16 285.97,-454.16"/>
115
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.97,-456.61 292.97,-454.16 285.97,-451.71 285.97,-456.61"/>
115
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M211.08,-511.84C252.79,-511.84 297.93,-511.84 328.12,-511.84"/>
116
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="327.94,-514.29 334.94,-511.84 327.94,-509.39 327.94,-514.29"/>
116
117
  </g>
117
118
  <!-- extro -->
118
119
  <g id="node9" class="node">
119
120
  <title>extro</title>
120
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M347.5,-411.16C347.5,-411.16 297,-411.16 297,-411.16 291,-411.16 285,-405.16 285,-399.16 285,-399.16 285,-387.16 285,-387.16 285,-381.16 291,-375.16 297,-375.16 297,-375.16 347.5,-375.16 347.5,-375.16 353.5,-375.16 359.5,-381.16 359.5,-387.16 359.5,-387.16 359.5,-399.16 359.5,-399.16 359.5,-405.16 353.5,-411.16 347.5,-411.16"/>
121
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-389.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection</text>
121
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M389.5,-468.84C389.5,-468.84 339,-468.84 339,-468.84 333,-468.84 327,-462.84 327,-456.84 327,-456.84 327,-444.84 327,-444.84 327,-438.84 333,-432.84 339,-432.84 339,-432.84 389.5,-432.84 389.5,-432.84 395.5,-432.84 401.5,-438.84 401.5,-444.84 401.5,-444.84 401.5,-456.84 401.5,-456.84 401.5,-462.84 395.5,-468.84 389.5,-468.84"/>
122
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-447.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection</text>
122
123
  </g>
123
124
  <!-- Registry&#45;&gt;extro -->
124
125
  <g id="edge8" class="edge">
125
126
  <title>Registry&#45;&gt;extro</title>
126
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-432.49C205.15,-423.16 245.92,-412.63 276.17,-404.81"/>
127
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="276.63,-407.22 282.8,-403.1 275.41,-402.48 276.63,-407.22"/>
127
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M211.08,-486.94C248.52,-478.06 288.73,-468.52 318.41,-461.48"/>
128
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="318.63,-463.95 324.87,-459.95 317.5,-459.18 318.63,-463.95"/>
128
129
  </g>
129
130
  <!-- cron -->
130
131
  <g id="node10" class="node">
131
132
  <title>cron</title>
132
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-350.16C337.25,-350.16 307.25,-350.16 307.25,-350.16 301.25,-350.16 295.25,-344.16 295.25,-338.16 295.25,-338.16 295.25,-326.16 295.25,-326.16 295.25,-320.16 301.25,-314.16 307.25,-314.16 307.25,-314.16 337.25,-314.16 337.25,-314.16 343.25,-314.16 349.25,-320.16 349.25,-326.16 349.25,-326.16 349.25,-338.16 349.25,-338.16 349.25,-344.16 343.25,-350.16 337.25,-350.16"/>
133
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-328.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron</text>
133
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-407.84C379.25,-407.84 349.25,-407.84 349.25,-407.84 343.25,-407.84 337.25,-401.84 337.25,-395.84 337.25,-395.84 337.25,-383.84 337.25,-383.84 337.25,-377.84 343.25,-371.84 349.25,-371.84 349.25,-371.84 379.25,-371.84 379.25,-371.84 385.25,-371.84 391.25,-377.84 391.25,-383.84 391.25,-383.84 391.25,-395.84 391.25,-395.84 391.25,-401.84 385.25,-407.84 379.25,-407.84"/>
134
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-386.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron</text>
134
135
  </g>
135
136
  <!-- Registry&#45;&gt;cron -->
136
137
  <g id="edge9" class="edge">
137
138
  <title>Registry&#45;&gt;cron</title>
138
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M149.96,-420.67C194.44,-397.68 251.68,-368.11 287.42,-349.64"/>
139
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.14,-352.03 293.23,-346.64 285.89,-347.68 288.14,-352.03"/>
139
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M191.74,-471.22C238.74,-448.92 294.38,-422.52 329.25,-405.98"/>
140
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="330.02,-408.32 335.29,-403.11 327.92,-403.9 330.02,-408.32"/>
140
141
  </g>
141
142
  <!-- swarm -->
142
143
  <g id="node11" class="node">
143
144
  <title>swarm</title>
144
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-289.16C337.25,-289.16 307.25,-289.16 307.25,-289.16 301.25,-289.16 295.25,-283.16 295.25,-277.16 295.25,-277.16 295.25,-265.16 295.25,-265.16 295.25,-259.16 301.25,-253.16 307.25,-253.16 307.25,-253.16 337.25,-253.16 337.25,-253.16 343.25,-253.16 349.25,-259.16 349.25,-265.16 349.25,-265.16 349.25,-277.16 349.25,-277.16 349.25,-283.16 343.25,-289.16 337.25,-289.16"/>
145
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-267.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm</text>
145
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-346.84C379.25,-346.84 349.25,-346.84 349.25,-346.84 343.25,-346.84 337.25,-340.84 337.25,-334.84 337.25,-334.84 337.25,-322.84 337.25,-322.84 337.25,-316.84 343.25,-310.84 349.25,-310.84 349.25,-310.84 379.25,-310.84 379.25,-310.84 385.25,-310.84 391.25,-316.84 391.25,-322.84 391.25,-322.84 391.25,-334.84 391.25,-334.84 391.25,-340.84 385.25,-346.84 379.25,-346.84"/>
146
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-325.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm</text>
146
147
  </g>
147
148
  <!-- Registry&#45;&gt;swarm -->
148
149
  <g id="edge10" class="edge">
149
150
  <title>Registry&#45;&gt;swarm</title>
150
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M122.83,-420.93C159.64,-389.07 217.77,-340.34 271.25,-302.16 276.34,-298.53 281.85,-294.87 287.29,-291.39"/>
151
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.59,-293.47 293.21,-287.67 285.98,-289.32 288.59,-293.47"/>
151
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M158.95,-471.31C200.32,-440 259.66,-396.04 313.25,-359.84 318.43,-356.35 323.99,-352.75 329.45,-349.3"/>
152
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="330.74,-351.38 335.38,-345.6 328.15,-347.23 330.74,-351.38"/>
152
153
  </g>
153
154
  <!-- reward -->
154
155
  <g id="node12" class="node">
155
156
  <title>reward</title>
156
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-228.16C337.25,-228.16 307.25,-228.16 307.25,-228.16 301.25,-228.16 295.25,-222.16 295.25,-216.16 295.25,-216.16 295.25,-204.16 295.25,-204.16 295.25,-198.16 301.25,-192.16 307.25,-192.16 307.25,-192.16 337.25,-192.16 337.25,-192.16 343.25,-192.16 349.25,-198.16 349.25,-204.16 349.25,-204.16 349.25,-216.16 349.25,-216.16 349.25,-222.16 343.25,-228.16 337.25,-228.16"/>
157
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-206.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward</text>
157
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-285.84C379.25,-285.84 349.25,-285.84 349.25,-285.84 343.25,-285.84 337.25,-279.84 337.25,-273.84 337.25,-273.84 337.25,-261.84 337.25,-261.84 337.25,-255.84 343.25,-249.84 349.25,-249.84 349.25,-249.84 379.25,-249.84 379.25,-249.84 385.25,-249.84 391.25,-255.84 391.25,-261.84 391.25,-261.84 391.25,-273.84 391.25,-273.84 391.25,-279.84 385.25,-285.84 379.25,-285.84"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-264.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward</text>
158
159
  </g>
159
160
  <!-- Registry&#45;&gt;reward -->
160
161
  <g id="edge11" class="edge">
161
162
  <title>Registry&#45;&gt;reward</title>
162
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M109.27,-420.77C142.45,-376.34 205.54,-296.94 271.25,-241.16 276.29,-236.89 281.97,-232.79 287.65,-229.06"/>
163
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.79,-231.24 293.39,-225.43 286.17,-227.1 288.79,-231.24"/>
163
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M140.18,-471.27C179.24,-426.13 246.52,-352.5 313.25,-298.84 318.34,-294.75 324.01,-290.76 329.65,-287.09"/>
164
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="330.72,-289.32 335.33,-283.51 328.1,-285.17 330.72,-289.32"/>
164
165
  </g>
165
166
  <!-- curric -->
166
167
  <g id="node13" class="node">
167
168
  <title>curric</title>
168
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M340.75,-167.16C340.75,-167.16 303.75,-167.16 303.75,-167.16 297.75,-167.16 291.75,-161.16 291.75,-155.16 291.75,-155.16 291.75,-143.16 291.75,-143.16 291.75,-137.16 297.75,-131.16 303.75,-131.16 303.75,-131.16 340.75,-131.16 340.75,-131.16 346.75,-131.16 352.75,-137.16 352.75,-143.16 352.75,-143.16 352.75,-155.16 352.75,-155.16 352.75,-161.16 346.75,-167.16 340.75,-167.16"/>
169
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-145.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum</text>
169
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M382.75,-224.84C382.75,-224.84 345.75,-224.84 345.75,-224.84 339.75,-224.84 333.75,-218.84 333.75,-212.84 333.75,-212.84 333.75,-200.84 333.75,-200.84 333.75,-194.84 339.75,-188.84 345.75,-188.84 345.75,-188.84 382.75,-188.84 382.75,-188.84 388.75,-188.84 394.75,-194.84 394.75,-200.84 394.75,-200.84 394.75,-212.84 394.75,-212.84 394.75,-218.84 388.75,-224.84 382.75,-224.84"/>
170
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-203.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum</text>
170
171
  </g>
171
172
  <!-- Registry&#45;&gt;curric -->
172
173
  <g id="edge12" class="edge">
173
174
  <title>Registry&#45;&gt;curric</title>
174
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M101.72,-420.96C130.44,-365.9 193.85,-254.4 271.25,-180.16 275.12,-176.45 279.51,-172.96 284.03,-169.75"/>
175
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.37,-171.81 289.82,-165.88 282.64,-167.73 285.37,-171.81"/>
175
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M129.95,-471.43C164.93,-414.48 234.59,-309.56 313.25,-237.84 317.16,-234.28 321.54,-230.88 326.04,-227.74"/>
176
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="327.29,-229.85 331.76,-223.93 324.57,-225.77 327.29,-229.85"/>
176
177
  </g>
177
178
  <!-- policy -->
178
179
  <g id="node14" class="node">
179
180
  <title>policy</title>
180
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-106.16C337.25,-106.16 307.25,-106.16 307.25,-106.16 301.25,-106.16 295.25,-100.16 295.25,-94.16 295.25,-94.16 295.25,-82.16 295.25,-82.16 295.25,-76.16 301.25,-70.16 307.25,-70.16 307.25,-70.16 337.25,-70.16 337.25,-70.16 343.25,-70.16 349.25,-76.16 349.25,-82.16 349.25,-82.16 349.25,-94.16 349.25,-94.16 349.25,-100.16 343.25,-106.16 337.25,-106.16"/>
181
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-84.66" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy</text>
181
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M379.25,-163.84C379.25,-163.84 349.25,-163.84 349.25,-163.84 343.25,-163.84 337.25,-157.84 337.25,-151.84 337.25,-151.84 337.25,-139.84 337.25,-139.84 337.25,-133.84 343.25,-127.84 349.25,-127.84 349.25,-127.84 379.25,-127.84 379.25,-127.84 385.25,-127.84 391.25,-133.84 391.25,-139.84 391.25,-139.84 391.25,-151.84 391.25,-151.84 391.25,-157.84 385.25,-163.84 379.25,-163.84"/>
182
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-142.34" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy</text>
182
183
  </g>
183
184
  <!-- Registry&#45;&gt;policy -->
184
185
  <g id="edge13" class="edge">
185
186
  <title>Registry&#45;&gt;policy</title>
186
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M97.11,-420.67C121.54,-356.06 182.42,-212.35 271.25,-119.16 276.06,-114.12 281.86,-109.56 287.79,-105.58"/>
187
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.72,-107.89 293.33,-102.08 286.11,-103.75 288.72,-107.89"/>
187
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M123.58,-471.4C154.21,-404 223.01,-267.2 313.25,-176.84 318.02,-172.07 323.66,-167.69 329.4,-163.83"/>
188
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="330.67,-165.92 335.27,-160.11 328.04,-161.79 330.67,-165.92"/>
188
189
  </g>
189
190
  <!-- t_shell -->
190
191
  <g id="node15" class="node">
191
192
  <title>t_shell</title>
192
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M588.38,-885.16C588.38,-885.16 547.62,-885.16 547.62,-885.16 541.62,-885.16 535.62,-879.16 535.62,-873.16 535.62,-873.16 535.62,-861.16 535.62,-861.16 535.62,-855.16 541.62,-849.16 547.62,-849.16 547.62,-849.16 588.38,-849.16 588.38,-849.16 594.38,-849.16 600.38,-855.16 600.38,-861.16 600.38,-861.16 600.38,-873.16 600.38,-873.16 600.38,-879.16 594.38,-885.16 588.38,-885.16"/>
193
- <text xml:space="preserve" text-anchor="middle" x="568" y="-869.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">shell</text>
194
- <text xml:space="preserve" text-anchor="middle" x="568" y="-858.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
193
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M630.38,-942.84C630.38,-942.84 589.62,-942.84 589.62,-942.84 583.62,-942.84 577.62,-936.84 577.62,-930.84 577.62,-930.84 577.62,-918.84 577.62,-918.84 577.62,-912.84 583.62,-906.84 589.62,-906.84 589.62,-906.84 630.38,-906.84 630.38,-906.84 636.38,-906.84 642.38,-912.84 642.38,-918.84 642.38,-918.84 642.38,-930.84 642.38,-930.84 642.38,-936.84 636.38,-942.84 630.38,-942.84"/>
194
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-926.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">shell</text>
195
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-916.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
195
196
  </g>
196
197
  <!-- terminal&#45;&gt;t_shell -->
197
198
  <g id="edge14" class="edge">
198
199
  <title>terminal&#45;&gt;t_shell</title>
199
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-825.28C392.49,-833.51 476.67,-849.75 526.77,-859.41"/>
200
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="526.13,-861.78 533.47,-860.7 527.06,-856.97 526.13,-861.78"/>
200
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-882.96C434.49,-891.19 518.67,-907.43 568.77,-917.09"/>
201
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="568.13,-919.46 575.47,-918.38 569.06,-914.65 568.13,-919.46"/>
201
202
  </g>
202
203
  <!-- t_eval -->
203
204
  <g id="node16" class="node">
204
205
  <title>t_eval</title>
205
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M588.38,-824.16C588.38,-824.16 547.62,-824.16 547.62,-824.16 541.62,-824.16 535.62,-818.16 535.62,-812.16 535.62,-812.16 535.62,-800.16 535.62,-800.16 535.62,-794.16 541.62,-788.16 547.62,-788.16 547.62,-788.16 588.38,-788.16 588.38,-788.16 594.38,-788.16 600.38,-794.16 600.38,-800.16 600.38,-800.16 600.38,-812.16 600.38,-812.16 600.38,-818.16 594.38,-824.16 588.38,-824.16"/>
206
- <text xml:space="preserve" text-anchor="middle" x="568" y="-808.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">pwn_eval</text>
207
- <text xml:space="preserve" text-anchor="middle" x="568" y="-797.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
206
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M630.38,-881.84C630.38,-881.84 589.62,-881.84 589.62,-881.84 583.62,-881.84 577.62,-875.84 577.62,-869.84 577.62,-869.84 577.62,-857.84 577.62,-857.84 577.62,-851.84 583.62,-845.84 589.62,-845.84 589.62,-845.84 630.38,-845.84 630.38,-845.84 636.38,-845.84 642.38,-851.84 642.38,-857.84 642.38,-857.84 642.38,-869.84 642.38,-869.84 642.38,-875.84 636.38,-881.84 630.38,-881.84"/>
207
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-865.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">pwn_eval</text>
208
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-855.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
208
209
  </g>
209
210
  <!-- pwn&#45;&gt;t_eval -->
210
211
  <g id="edge15" class="edge">
211
212
  <title>pwn&#45;&gt;t_eval</title>
212
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-764.28C392.49,-772.51 476.67,-788.75 526.77,-798.41"/>
213
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="526.13,-800.78 533.47,-799.7 527.06,-795.97 526.13,-800.78"/>
213
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-821.96C434.49,-830.19 518.67,-846.43 568.77,-856.09"/>
214
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="568.13,-858.46 575.47,-857.38 569.06,-853.65 568.13,-858.46"/>
214
215
  </g>
215
216
  <!-- t_mem -->
216
217
  <g id="node17" class="node">
217
218
  <title>t_mem</title>
218
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M604.12,-762.91C604.12,-762.91 531.88,-762.91 531.88,-762.91 525.88,-762.91 519.88,-756.91 519.88,-750.91 519.88,-750.91 519.88,-735.41 519.88,-735.41 519.88,-729.41 525.88,-723.41 531.88,-723.41 531.88,-723.41 604.12,-723.41 604.12,-723.41 610.12,-723.41 616.12,-729.41 616.12,-735.41 616.12,-735.41 616.12,-750.91 616.12,-750.91 616.12,-756.91 610.12,-762.91 604.12,-762.91"/>
219
- <text xml:space="preserve" text-anchor="middle" x="568" y="-750.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">memory_remember</text>
220
- <text xml:space="preserve" text-anchor="middle" x="568" y="-739.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">recall · forget · clear</text>
221
- <text xml:space="preserve" text-anchor="middle" x="568" y="-729.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
219
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M646.12,-820.59C646.12,-820.59 573.88,-820.59 573.88,-820.59 567.88,-820.59 561.88,-814.59 561.88,-808.59 561.88,-808.59 561.88,-793.09 561.88,-793.09 561.88,-787.09 567.88,-781.09 573.88,-781.09 573.88,-781.09 646.12,-781.09 646.12,-781.09 652.12,-781.09 658.12,-787.09 658.12,-793.09 658.12,-793.09 658.12,-808.59 658.12,-808.59 658.12,-814.59 652.12,-820.59 646.12,-820.59"/>
220
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-808.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">memory_remember</text>
221
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-797.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">recall · forget · clear</text>
222
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-787.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
222
223
  </g>
223
224
  <!-- memory&#45;&gt;t_mem -->
224
225
  <g id="edge16" class="edge">
225
226
  <title>memory&#45;&gt;t_mem</title>
226
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-703.07C388.37,-710.19 460.81,-723.56 511.38,-732.9"/>
227
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="510.65,-735.25 517.97,-734.11 511.54,-730.43 510.65,-735.25"/>
227
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-760.75C430.37,-767.87 502.81,-781.24 553.38,-790.58"/>
228
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="552.65,-792.93 559.97,-791.79 553.54,-788.11 552.65,-792.93"/>
228
229
  </g>
229
230
  <!-- t_skill -->
230
231
  <g id="node18" class="node">
231
232
  <title>t_skill</title>
232
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M610.12,-697.91C610.12,-697.91 525.88,-697.91 525.88,-697.91 519.88,-697.91 513.88,-691.91 513.88,-685.91 513.88,-685.91 513.88,-670.41 513.88,-670.41 513.88,-664.41 519.88,-658.41 525.88,-658.41 525.88,-658.41 610.12,-658.41 610.12,-658.41 616.12,-658.41 622.12,-664.41 622.12,-670.41 622.12,-670.41 622.12,-685.91 622.12,-685.91 622.12,-691.91 616.12,-697.91 610.12,-697.91"/>
233
- <text xml:space="preserve" text-anchor="middle" x="568" y="-685.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">skill_list · view · create</text>
234
- <text xml:space="preserve" text-anchor="middle" x="568" y="-674.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">add_reference · delete</text>
235
- <text xml:space="preserve" text-anchor="middle" x="568" y="-664.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">migrate_legacy</text>
233
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M652.12,-755.59C652.12,-755.59 567.88,-755.59 567.88,-755.59 561.88,-755.59 555.88,-749.59 555.88,-743.59 555.88,-743.59 555.88,-728.09 555.88,-728.09 555.88,-722.09 561.88,-716.09 567.88,-716.09 567.88,-716.09 652.12,-716.09 652.12,-716.09 658.12,-716.09 664.12,-722.09 664.12,-728.09 664.12,-728.09 664.12,-743.59 664.12,-743.59 664.12,-749.59 658.12,-755.59 652.12,-755.59"/>
234
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-743.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">skill_list · view · create</text>
235
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-732.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">add_reference · delete</text>
236
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-722.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">migrate_legacy</text>
236
237
  </g>
237
238
  <!-- skills&#45;&gt;t_skill -->
238
239
  <g id="edge17" class="edge">
239
240
  <title>skills&#45;&gt;t_skill</title>
240
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-641.63C386.77,-647.85 454.87,-659.3 504.99,-667.73"/>
241
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="504.55,-670.14 511.86,-668.89 505.36,-665.31 504.55,-670.14"/>
241
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-699.31C428.77,-705.53 496.87,-716.98 546.99,-725.41"/>
242
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="546.55,-727.82 553.86,-726.57 547.36,-722.99 546.55,-727.82"/>
242
243
  </g>
243
244
  <!-- t_sess -->
244
245
  <g id="node19" class="node">
245
246
  <title>t_sess</title>
246
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M607.12,-632.91C607.12,-632.91 528.88,-632.91 528.88,-632.91 522.88,-632.91 516.88,-626.91 516.88,-620.91 516.88,-620.91 516.88,-605.41 516.88,-605.41 516.88,-599.41 522.88,-593.41 528.88,-593.41 528.88,-593.41 607.12,-593.41 607.12,-593.41 613.12,-593.41 619.12,-599.41 619.12,-605.41 619.12,-605.41 619.12,-620.91 619.12,-620.91 619.12,-626.91 613.12,-632.91 607.12,-632.91"/>
247
- <text xml:space="preserve" text-anchor="middle" x="568" y="-620.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">sessions_list · view</text>
248
- <text xml:space="preserve" text-anchor="middle" x="568" y="-609.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">current · delete · stats</text>
249
- <text xml:space="preserve" text-anchor="middle" x="568" y="-599.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
247
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M649.12,-690.59C649.12,-690.59 570.88,-690.59 570.88,-690.59 564.88,-690.59 558.88,-684.59 558.88,-678.59 558.88,-678.59 558.88,-663.09 558.88,-663.09 558.88,-657.09 564.88,-651.09 570.88,-651.09 570.88,-651.09 649.12,-651.09 649.12,-651.09 655.12,-651.09 661.12,-657.09 661.12,-663.09 661.12,-663.09 661.12,-678.59 661.12,-678.59 661.12,-684.59 655.12,-690.59 649.12,-690.59"/>
248
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-678.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">sessions_list · view</text>
249
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-667.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">current · delete · stats</text>
250
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-657.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
250
251
  </g>
251
252
  <!-- sessions&#45;&gt;t_sess -->
252
253
  <g id="edge18" class="edge">
253
254
  <title>sessions&#45;&gt;t_sess</title>
254
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M350.27,-580.26C388.11,-586.01 457.9,-596.6 508.07,-604.22"/>
255
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="507.64,-606.63 514.93,-605.26 508.37,-601.79 507.64,-606.63"/>
255
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M392.27,-637.94C430.11,-643.69 499.9,-654.28 550.07,-661.9"/>
256
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="549.64,-664.31 556.93,-662.94 550.37,-659.47 549.64,-664.31"/>
256
257
  </g>
257
258
  <!-- t_learn -->
258
259
  <g id="node20" class="node">
259
260
  <title>t_learn</title>
260
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M623.25,-568.66C623.25,-568.66 512.75,-568.66 512.75,-568.66 506.75,-568.66 500.75,-562.66 500.75,-556.66 500.75,-556.66 500.75,-509.66 500.75,-509.66 500.75,-503.66 506.75,-497.66 512.75,-497.66 512.75,-497.66 623.25,-497.66 623.25,-497.66 629.25,-497.66 635.25,-503.66 635.25,-509.66 635.25,-509.66 635.25,-556.66 635.25,-556.66 635.25,-562.66 629.25,-568.66 623.25,-568.66"/>
261
- <text xml:space="preserve" text-anchor="middle" x="568" y="-556.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">learning_* · mistakes_*</text>
262
- <text xml:space="preserve" text-anchor="middle" x="568" y="-545.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_judge · prm · sentinel</text>
263
- <text xml:space="preserve" text-anchor="middle" x="568" y="-535.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">export_dpo · scrub · balance</text>
264
- <text xml:space="preserve" text-anchor="middle" x="568" y="-524.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice · train</text>
265
- <text xml:space="preserve" text-anchor="middle" x="568" y="-514.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">hindsight · offline_judge</text>
266
- <text xml:space="preserve" text-anchor="middle" x="568" y="-503.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">gc_stores · lean helpers</text>
261
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M665.25,-626.34C665.25,-626.34 554.75,-626.34 554.75,-626.34 548.75,-626.34 542.75,-620.34 542.75,-614.34 542.75,-614.34 542.75,-567.34 542.75,-567.34 542.75,-561.34 548.75,-555.34 554.75,-555.34 554.75,-555.34 665.25,-555.34 665.25,-555.34 671.25,-555.34 677.25,-561.34 677.25,-567.34 677.25,-567.34 677.25,-614.34 677.25,-614.34 677.25,-620.34 671.25,-626.34 665.25,-626.34"/>
262
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-613.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">learning_* · mistakes_*</text>
263
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-603.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_judge · prm · sentinel</text>
264
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-592.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">export_dpo · scrub · balance</text>
265
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-582.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice · train</text>
266
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-571.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">hindsight · offline_judge</text>
267
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-561.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">gc_stores · lean helpers</text>
267
268
  </g>
268
269
  <!-- learning&#45;&gt;t_learn -->
269
270
  <g id="edge19" class="edge">
270
271
  <title>learning&#45;&gt;t_learn</title>
271
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-517.12C383.61,-519.62 443.46,-524.04 491.77,-527.61"/>
272
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="491.52,-530.05 498.69,-528.12 491.88,-525.16 491.52,-530.05"/>
272
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-574.8C425.61,-577.3 485.46,-581.72 533.77,-585.29"/>
273
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="533.52,-587.73 540.69,-585.8 533.88,-582.84 533.52,-587.73"/>
273
274
  </g>
274
275
  <!-- t_metric -->
275
276
  <g id="node21" class="node">
276
277
  <title>t_metric</title>
277
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M600,-472.16C600,-472.16 536,-472.16 536,-472.16 530,-472.16 524,-466.16 524,-460.16 524,-460.16 524,-448.16 524,-448.16 524,-442.16 530,-436.16 536,-436.16 536,-436.16 600,-436.16 600,-436.16 606,-436.16 612,-442.16 612,-448.16 612,-448.16 612,-460.16 612,-460.16 612,-466.16 606,-472.16 600,-472.16"/>
278
- <text xml:space="preserve" text-anchor="middle" x="568" y="-456.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_summary</text>
279
- <text xml:space="preserve" text-anchor="middle" x="568" y="-445.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_reset</text>
278
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M642,-529.84C642,-529.84 578,-529.84 578,-529.84 572,-529.84 566,-523.84 566,-517.84 566,-517.84 566,-505.84 566,-505.84 566,-499.84 572,-493.84 578,-493.84 578,-493.84 642,-493.84 642,-493.84 648,-493.84 654,-499.84 654,-505.84 654,-505.84 654,-517.84 654,-517.84 654,-523.84 648,-529.84 642,-529.84"/>
279
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-513.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_summary</text>
280
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-503.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_reset</text>
280
281
  </g>
281
282
  <!-- metrics&#45;&gt;t_metric -->
282
283
  <g id="edge20" class="edge">
283
284
  <title>metrics&#45;&gt;t_metric</title>
284
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-454.16C389.34,-454.16 464.47,-454.16 515.15,-454.16"/>
285
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="515.03,-456.61 522.03,-454.16 515.03,-451.71 515.03,-456.61"/>
285
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-511.84C431.34,-511.84 506.47,-511.84 557.15,-511.84"/>
286
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="557.03,-514.29 564.03,-511.84 557.03,-509.39 557.03,-514.29"/>
286
287
  </g>
287
288
  <!-- t_extro -->
288
289
  <g id="node22" class="node">
289
290
  <title>t_extro</title>
290
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M622.12,-410.66C622.12,-410.66 513.88,-410.66 513.88,-410.66 507.88,-410.66 501.88,-404.66 501.88,-398.66 501.88,-398.66 501.88,-351.66 501.88,-351.66 501.88,-345.66 507.88,-339.66 513.88,-339.66 513.88,-339.66 622.12,-339.66 622.12,-339.66 628.12,-339.66 634.12,-345.66 634.12,-351.66 634.12,-351.66 634.12,-398.66 634.12,-398.66 634.12,-404.66 628.12,-410.66 622.12,-410.66"/>
291
- <text xml:space="preserve" text-anchor="middle" x="568" y="-398.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">extro_snapshot · drift</text>
292
- <text xml:space="preserve" text-anchor="middle" x="568" y="-387.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">observe · observations · intel</text>
293
- <text xml:space="preserve" text-anchor="middle" x="568" y="-377.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">watch · verify · rf_tune · osint</text>
294
- <text xml:space="preserve" text-anchor="middle" x="568" y="-366.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">serial · telecomm · packet</text>
295
- <text xml:space="preserve" text-anchor="middle" x="568" y="-356.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">vision · voice · correlate</text>
296
- <text xml:space="preserve" text-anchor="middle" x="568" y="-345.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · reset · auto_toggle</text>
291
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M664.12,-468.34C664.12,-468.34 555.88,-468.34 555.88,-468.34 549.88,-468.34 543.88,-462.34 543.88,-456.34 543.88,-456.34 543.88,-409.34 543.88,-409.34 543.88,-403.34 549.88,-397.34 555.88,-397.34 555.88,-397.34 664.12,-397.34 664.12,-397.34 670.12,-397.34 676.12,-403.34 676.12,-409.34 676.12,-409.34 676.12,-456.34 676.12,-456.34 676.12,-462.34 670.12,-468.34 664.12,-468.34"/>
292
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-455.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">extro_snapshot · drift</text>
293
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-445.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">observe · observations · intel</text>
294
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-434.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">watch · verify · rf_tune · osint</text>
295
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-424.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">serial · telecomm · packet</text>
296
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-413.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">vision · voice · correlate</text>
297
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-403.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · reset · auto_toggle</text>
297
298
  </g>
298
299
  <!-- extro&#45;&gt;t_extro -->
299
300
  <g id="edge21" class="edge">
300
301
  <title>extro&#45;&gt;t_extro</title>
301
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M360.01,-390.45C395.11,-387.86 449.05,-383.87 493.06,-380.62"/>
302
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="492.98,-383.09 499.78,-380.13 492.62,-378.2 492.98,-383.09"/>
302
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M402.01,-448.13C437.11,-445.54 491.05,-441.55 535.06,-438.3"/>
303
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="534.98,-440.77 541.78,-437.81 534.62,-435.88 534.98,-440.77"/>
303
304
  </g>
304
305
  <!-- t_cron -->
305
306
  <g id="node23" class="node">
306
307
  <title>t_cron</title>
307
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M615.38,-314.16C615.38,-314.16 520.62,-314.16 520.62,-314.16 514.62,-314.16 508.62,-308.16 508.62,-302.16 508.62,-302.16 508.62,-290.16 508.62,-290.16 508.62,-284.16 514.62,-278.16 520.62,-278.16 520.62,-278.16 615.38,-278.16 615.38,-278.16 621.38,-278.16 627.38,-284.16 627.38,-290.16 627.38,-290.16 627.38,-302.16 627.38,-302.16 627.38,-308.16 621.38,-314.16 615.38,-314.16"/>
308
- <text xml:space="preserve" text-anchor="middle" x="568" y="-298.11" font-family="sans-Serif" font-size="9.00" fill="#0f172a">cron_list · create · run</text>
309
- <text xml:space="preserve" text-anchor="middle" x="568" y="-287.61" font-family="sans-Serif" font-size="9.00" fill="#0f172a">enable · disable · remove</text>
308
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M657.38,-371.84C657.38,-371.84 562.62,-371.84 562.62,-371.84 556.62,-371.84 550.62,-365.84 550.62,-359.84 550.62,-359.84 550.62,-347.84 550.62,-347.84 550.62,-341.84 556.62,-335.84 562.62,-335.84 562.62,-335.84 657.38,-335.84 657.38,-335.84 663.38,-335.84 669.38,-341.84 669.38,-347.84 669.38,-347.84 669.38,-359.84 669.38,-359.84 669.38,-365.84 663.38,-371.84 657.38,-371.84"/>
309
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-355.79" font-family="sans-Serif" font-size="9.00" fill="#0f172a">cron_list · create · run</text>
310
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-345.29" font-family="sans-Serif" font-size="9.00" fill="#0f172a">enable · disable · remove</text>
310
311
  </g>
311
312
  <!-- cron&#45;&gt;t_cron -->
312
313
  <g id="edge22" class="edge">
313
314
  <title>cron&#45;&gt;t_cron</title>
314
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-328.24C385.49,-322.97 450.18,-313.42 499.71,-306.1"/>
315
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="499.93,-308.55 506.5,-305.1 499.22,-303.7 499.93,-308.55"/>
315
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-385.92C427.49,-380.65 492.18,-371.1 541.71,-363.78"/>
316
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="541.93,-366.23 548.5,-362.78 541.22,-361.38 541.93,-366.23"/>
316
317
  </g>
317
318
  <!-- t_swarm -->
318
319
  <g id="node24" class="node">
319
320
  <title>t_swarm</title>
320
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M612.75,-252.91C612.75,-252.91 523.25,-252.91 523.25,-252.91 517.25,-252.91 511.25,-246.91 511.25,-240.91 511.25,-240.91 511.25,-225.41 511.25,-225.41 511.25,-219.41 517.25,-213.41 523.25,-213.41 523.25,-213.41 612.75,-213.41 612.75,-213.41 618.75,-213.41 624.75,-219.41 624.75,-225.41 624.75,-225.41 624.75,-240.91 624.75,-240.91 624.75,-246.91 618.75,-252.91 612.75,-252.91"/>
321
- <text xml:space="preserve" text-anchor="middle" x="568" y="-240.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">agent_list · spawn · ask</text>
322
- <text xml:space="preserve" text-anchor="middle" x="568" y="-229.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">debate · broadcast</text>
323
- <text xml:space="preserve" text-anchor="middle" x="568" y="-219.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">swarm_bus · swarm_list</text>
321
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M654.75,-310.59C654.75,-310.59 565.25,-310.59 565.25,-310.59 559.25,-310.59 553.25,-304.59 553.25,-298.59 553.25,-298.59 553.25,-283.09 553.25,-283.09 553.25,-277.09 559.25,-271.09 565.25,-271.09 565.25,-271.09 654.75,-271.09 654.75,-271.09 660.75,-271.09 666.75,-277.09 666.75,-283.09 666.75,-283.09 666.75,-298.59 666.75,-298.59 666.75,-304.59 660.75,-310.59 654.75,-310.59"/>
322
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-298.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">agent_list · spawn · ask</text>
323
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-287.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">debate · broadcast</text>
324
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-277.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">swarm_bus · swarm_list</text>
324
325
  </g>
325
326
  <!-- swarm&#45;&gt;t_swarm -->
326
327
  <g id="edge23" class="edge">
327
328
  <title>swarm&#45;&gt;t_swarm</title>
328
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-267.02C386.07,-261.37 452.3,-251.04 502.13,-243.28"/>
329
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="502.42,-245.71 508.96,-242.21 501.66,-240.87 502.42,-245.71"/>
329
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-324.7C428.07,-319.05 494.3,-308.72 544.13,-300.96"/>
330
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="544.42,-303.39 550.96,-299.89 543.66,-298.55 544.42,-303.39"/>
330
331
  </g>
331
332
  <!-- t_reward -->
332
333
  <g id="node25" class="node">
333
334
  <title>t_reward</title>
334
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M610.5,-188.16C610.5,-188.16 525.5,-188.16 525.5,-188.16 519.5,-188.16 513.5,-182.16 513.5,-176.16 513.5,-176.16 513.5,-164.16 513.5,-164.16 513.5,-158.16 519.5,-152.16 525.5,-152.16 525.5,-152.16 610.5,-152.16 610.5,-152.16 616.5,-152.16 622.5,-158.16 622.5,-164.16 622.5,-164.16 622.5,-176.16 622.5,-176.16 622.5,-182.16 616.5,-188.16 610.5,-188.16"/>
335
- <text xml:space="preserve" text-anchor="middle" x="568" y="-166.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_generator_mix</text>
335
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M652.5,-245.84C652.5,-245.84 567.5,-245.84 567.5,-245.84 561.5,-245.84 555.5,-239.84 555.5,-233.84 555.5,-233.84 555.5,-221.84 555.5,-221.84 555.5,-215.84 561.5,-209.84 567.5,-209.84 567.5,-209.84 652.5,-209.84 652.5,-209.84 658.5,-209.84 664.5,-215.84 664.5,-221.84 664.5,-221.84 664.5,-233.84 664.5,-233.84 664.5,-239.84 658.5,-245.84 652.5,-245.84"/>
336
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-224.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_generator_mix</text>
336
337
  </g>
337
338
  <!-- reward&#45;&gt;t_reward -->
338
339
  <g id="edge24" class="edge">
339
340
  <title>reward&#45;&gt;t_reward</title>
340
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-205.81C386.66,-199.76 454.44,-188.63 504.52,-180.42"/>
341
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="504.87,-182.84 511.38,-179.29 504.07,-178.01 504.87,-182.84"/>
341
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-263.49C428.66,-257.44 496.44,-246.31 546.52,-238.1"/>
342
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="546.87,-240.52 553.38,-236.97 546.07,-235.69 546.87,-240.52"/>
342
343
  </g>
343
344
  <!-- t_curric -->
344
345
  <g id="node26" class="node">
345
346
  <title>t_curric</title>
346
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M612.75,-127.16C612.75,-127.16 523.25,-127.16 523.25,-127.16 517.25,-127.16 511.25,-121.16 511.25,-115.16 511.25,-115.16 511.25,-103.16 511.25,-103.16 511.25,-97.16 517.25,-91.16 523.25,-91.16 523.25,-91.16 612.75,-91.16 612.75,-91.16 618.75,-91.16 624.75,-97.16 624.75,-103.16 624.75,-103.16 624.75,-115.16 624.75,-115.16 624.75,-121.16 618.75,-127.16 612.75,-127.16"/>
347
- <text xml:space="preserve" text-anchor="middle" x="568" y="-105.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice_kpi</text>
347
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M654.75,-184.84C654.75,-184.84 565.25,-184.84 565.25,-184.84 559.25,-184.84 553.25,-178.84 553.25,-172.84 553.25,-172.84 553.25,-160.84 553.25,-160.84 553.25,-154.84 559.25,-148.84 565.25,-148.84 565.25,-148.84 654.75,-148.84 654.75,-148.84 660.75,-148.84 666.75,-154.84 666.75,-160.84 666.75,-160.84 666.75,-172.84 666.75,-172.84 666.75,-178.84 660.75,-184.84 654.75,-184.84"/>
348
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-163.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice_kpi</text>
348
349
  </g>
349
350
  <!-- curric&#45;&gt;t_curric -->
350
351
  <g id="edge26" class="edge">
351
352
  <title>curric&#45;&gt;t_curric</title>
352
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M353.14,-144.26C390.08,-138.2 453.96,-127.71 502.32,-119.78"/>
353
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="502.7,-122.2 509.21,-118.65 501.9,-117.36 502.7,-122.2"/>
353
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M395.14,-201.94C432.08,-195.88 495.96,-185.39 544.32,-177.46"/>
354
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="544.7,-179.88 551.21,-176.33 543.9,-175.04 544.7,-179.88"/>
354
355
  </g>
355
356
  <!-- t_policy -->
356
357
  <g id="node27" class="node">
357
358
  <title>t_policy</title>
358
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M603,-65.91C603,-65.91 533,-65.91 533,-65.91 527,-65.91 521,-59.91 521,-53.91 521,-53.91 521,-38.41 521,-38.41 521,-32.41 527,-26.41 533,-26.41 533,-26.41 603,-26.41 603,-26.41 609,-26.41 615,-32.41 615,-38.41 615,-38.41 615,-53.91 615,-53.91 615,-59.91 609,-65.91 603,-65.91"/>
359
- <text xml:space="preserve" text-anchor="middle" x="568" y="-53.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_stats</text>
360
- <text xml:space="preserve" text-anchor="middle" x="568" y="-42.86" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_evaluate</text>
361
- <text xml:space="preserve" text-anchor="middle" x="568" y="-32.36" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_recommend</text>
359
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M645,-123.59C645,-123.59 575,-123.59 575,-123.59 569,-123.59 563,-117.59 563,-111.59 563,-111.59 563,-96.09 563,-96.09 563,-90.09 569,-84.09 575,-84.09 575,-84.09 645,-84.09 645,-84.09 651,-84.09 657,-90.09 657,-96.09 657,-96.09 657,-111.59 657,-111.59 657,-117.59 651,-123.59 645,-123.59"/>
360
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-111.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_stats</text>
361
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-100.54" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_evaluate</text>
362
+ <text xml:space="preserve" text-anchor="middle" x="610" y="-90.04" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_recommend</text>
362
363
  </g>
363
364
  <!-- policy&#45;&gt;t_policy -->
364
365
  <g id="edge25" class="edge">
365
366
  <title>policy&#45;&gt;t_policy</title>
366
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-83.59C388.6,-76.9 461.69,-64.31 512.3,-55.59"/>
367
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="512.41,-58.06 518.89,-54.45 511.57,-53.23 512.41,-58.06"/>
367
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M391.8,-141.27C430.6,-134.58 503.69,-121.99 554.3,-113.27"/>
368
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="554.41,-115.74 560.89,-112.13 553.57,-110.91 554.41,-115.74"/>
368
369
  </g>
369
370
  <!-- t_metric&#45;&gt;Registry -->
370
371
  <g id="edge27" class="edge">
371
372
  <title>t_metric&#45;&gt;Registry</title>
372
- <path fill="none" stroke="#fbbf24" stroke-width="1.1" stroke-dasharray="5,2" d="M523.45,-450.18C504.06,-446.21 482.46,-438.42 468.25,-423.16 343.71,-289.45 516.61,-136.46 373.25,-23.16 222.44,96.02 122.74,-283.59 93.82,-412.73"/>
373
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.1" points="91.5,-411.88 92.38,-419.24 96.28,-412.94 91.5,-411.88"/>
374
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-42.86" font-family="serif" font-size="14.00">success_rate</text>
375
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-26.36" font-family="serif" font-size="14.00">→ router tie&#45;break</text>
373
+ <path fill="none" stroke="#fbbf24" stroke-width="1.1" stroke-dasharray="5,2" d="M565.45,-507.86C546.06,-503.89 524.46,-496.1 510.25,-480.84 385.71,-347.13 558.61,-194.14 415.25,-80.84 263.64,38.98 152.87,-327.28 117.86,-463.2"/>
374
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.1" points="115.53,-462.43 116.17,-469.82 120.27,-463.64 115.53,-462.43"/>
375
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-100.54" font-family="serif" font-size="14.00">success_rate</text>
376
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-84.04" font-family="serif" font-size="14.00">→ router tie&#45;break</text>
377
+ </g>
378
+ <!-- t_policy&#45;&gt;Registry -->
379
+ <g id="edge28" class="edge">
380
+ <title>t_policy&#45;&gt;Registry</title>
381
+ <path fill="none" stroke="#c4b5fd" stroke-width="1.1" stroke-dasharray="5,2" d="M583.23,-83.52C529.74,-44 404.13,34.9 313.25,-17.84 153.26,-110.69 116.85,-357.49 108.56,-462.95"/>
382
+ <polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="1.1" points="106.13,-462.68 108.05,-469.84 111.01,-463.04 106.13,-462.68"/>
383
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-37.54" font-family="serif" font-size="14.00">preference_order</text>
384
+ <text xml:space="preserve" text-anchor="middle" x="364.25" y="-21.04" font-family="serif" font-size="14.00">+ Q&#45;advantage</text>
376
385
  </g>
377
386
  </g>
378
387
  </svg>