pwn 0.5.669 → 0.5.673

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile +1 -1
  4. data/README.md +13 -9
  5. data/documentation/AI-Integration.md +1 -1
  6. data/documentation/Agent-Tool-Registry.md +17 -5
  7. data/documentation/Configuration.md +19 -8
  8. data/documentation/Diagrams.md +2 -2
  9. data/documentation/Home.md +2 -2
  10. data/documentation/How-PWN-Works.md +12 -10
  11. data/documentation/Installation.md +3 -1
  12. data/documentation/Mistakes.md +3 -0
  13. data/documentation/Persistence.md +4 -1
  14. data/documentation/Reinforcement-Learning.md +90 -73
  15. data/documentation/Skills-Memory-Learning.md +28 -4
  16. data/documentation/What-is-PWN.md +8 -7
  17. data/documentation/Why-PWN.md +3 -2
  18. data/documentation/diagrams/agent-tool-registry.svg +188 -160
  19. data/documentation/diagrams/dot/agent-tool-registry.dot +7 -4
  20. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  21. data/documentation/diagrams/dot/overall-pwn-architecture.dot +4 -3
  22. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -1
  23. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +11 -4
  24. data/documentation/diagrams/dot/reinforcement-learning.dot +8 -3
  25. data/documentation/diagrams/dot/task-summarizer.dot +24 -12
  26. data/documentation/diagrams/memory-skills-detailed.svg +252 -210
  27. data/documentation/diagrams/overall-pwn-architecture.svg +21 -12
  28. data/documentation/diagrams/persistence-filesystem.svg +127 -113
  29. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +449 -397
  30. data/documentation/diagrams/reinforcement-learning.svg +276 -239
  31. data/documentation/diagrams/task-summarizer.svg +178 -126
  32. data/documentation/pwn-ai-Agent.md +66 -32
  33. data/lib/pwn/ai/agent/curriculum.rb +13 -4
  34. data/lib/pwn/ai/agent/dispatch.rb +3 -0
  35. data/lib/pwn/ai/agent/learning.rb +100 -14
  36. data/lib/pwn/ai/agent/loop.rb +692 -25
  37. data/lib/pwn/ai/agent/metrics.rb +52 -4
  38. data/lib/pwn/ai/agent/mistakes.rb +158 -1
  39. data/lib/pwn/ai/agent/policy.rb +935 -0
  40. data/lib/pwn/ai/agent/prompt_builder.rb +82 -6
  41. data/lib/pwn/ai/agent/reflect.rb +11 -3
  42. data/lib/pwn/ai/agent/registry.rb +18 -3
  43. data/lib/pwn/ai/agent/reward.rb +360 -48
  44. data/lib/pwn/ai/agent/task_summarizer.rb +415 -33
  45. data/lib/pwn/ai/agent/tool_guard.rb +157 -0
  46. data/lib/pwn/ai/agent/tools/policy.rb +76 -0
  47. data/lib/pwn/ai/agent/tools/ruby_eval.rb +27 -1
  48. data/lib/pwn/ai/agent/tools/shell.rb +28 -32
  49. data/lib/pwn/ai/agent.rb +2 -0
  50. data/lib/pwn/config.rb +14 -2
  51. data/lib/pwn/memory.rb +188 -0
  52. data/lib/pwn/sessions.rb +9 -4
  53. data/lib/pwn/version.rb +1 -1
  54. data/spec/integration/reinforced_feedback_loop_spec.rb +35 -9
  55. data/spec/lib/pwn/ai/agent/learning_spec.rb +119 -3
  56. data/spec/lib/pwn/ai/agent/loop_spec.rb +215 -3
  57. data/spec/lib/pwn/ai/agent/metrics_spec.rb +10 -0
  58. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +33 -0
  59. data/spec/lib/pwn/ai/agent/policy_spec.rb +165 -0
  60. data/spec/lib/pwn/ai/agent/prompt_builder_spec.rb +51 -0
  61. data/spec/lib/pwn/ai/agent/reward_spec.rb +75 -0
  62. data/spec/lib/pwn/ai/agent/signal_hygiene_spec.rb +118 -0
  63. data/spec/lib/pwn/ai/agent/task_summarizer_spec.rb +111 -6
  64. data/spec/lib/pwn/ai/agent/tool_guard_spec.rb +61 -0
  65. data/spec/lib/pwn/ai/agent/tools/policy_spec.rb +18 -0
  66. data/spec/lib/pwn/memory_spec.rb +62 -0
  67. data/spec/support/sandbox.rb +2 -0
  68. data/third_party/pwn_rdoc.jsonl +108 -4
  69. metadata +10 -3
@@ -4,347 +4,375 @@
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="1002pt"
8
- viewBox="0.00 0.00 755.00 1002.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 958.94)">
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)">
10
10
  <title>PWN_Agent_Tool_Registry</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-958.94 711.95,-958.94 711.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="68.88" y="-893.74" 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="-882.29" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">12 toolsets · 82 callable tools · lib/pwn/ai/agent/tools/*</text>
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>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_ts</title>
16
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M289,-70.74C289,-70.74 355.5,-70.74 355.5,-70.74 361.5,-70.74 367.5,-76.74 367.5,-82.74 367.5,-82.74 367.5,-812.74 367.5,-812.74 367.5,-818.74 361.5,-824.74 355.5,-824.74 355.5,-824.74 289,-824.74 289,-824.74 283,-824.74 277,-818.74 277,-812.74 277,-812.74 277,-82.74 277,-82.74 277,-76.74 283,-70.74 289,-70.74"/>
17
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-801.74" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Toolsets</text>
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>
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,-27.74C480.25,-27.74 656.75,-27.74 656.75,-27.74 662.75,-27.74 668.75,-33.74 668.75,-39.74 668.75,-39.74 668.75,-856.74 668.75,-856.74 668.75,-862.74 662.75,-868.74 656.75,-868.74 656.75,-868.74 480.25,-868.74 480.25,-868.74 474.25,-868.74 468.25,-862.74 468.25,-856.74 468.25,-856.74 468.25,-39.74 468.25,-39.74 468.25,-33.74 474.25,-27.74 480.25,-27.74"/>
22
- <text xml:space="preserve" text-anchor="middle" x="568.5" y="-845.74" 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="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>
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,-456.24C156.25,-456.24 12,-456.24 12,-456.24 6,-456.24 0,-450.24 0,-444.24 0,-444.24 0,-403.24 0,-403.24 0,-397.24 6,-391.24 12,-391.24 12,-391.24 156.25,-391.24 156.25,-391.24 162.25,-391.24 168.25,-397.24 168.25,-403.24 168.25,-403.24 168.25,-444.24 168.25,-444.24 168.25,-450.24 162.25,-456.24 156.25,-456.24"/>
28
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-440.84" font-family="sans-Serif" font-size="12.00" fill="#0f172a">Registry</text>
29
- <text xml:space="preserve" text-anchor="middle" x="84.12" y="-426.59" 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="-412.34" 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="-398.09" 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="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>
32
32
  </g>
33
33
  <!-- terminal -->
34
34
  <g id="node2" class="node">
35
35
  <title>terminal</title>
36
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-785.74C337.25,-785.74 307.25,-785.74 307.25,-785.74 301.25,-785.74 295.25,-779.74 295.25,-773.74 295.25,-773.74 295.25,-761.74 295.25,-761.74 295.25,-755.74 301.25,-749.74 307.25,-749.74 307.25,-749.74 337.25,-749.74 337.25,-749.74 343.25,-749.74 349.25,-755.74 349.25,-761.74 349.25,-761.74 349.25,-773.74 349.25,-773.74 349.25,-779.74 343.25,-785.74 337.25,-785.74"/>
37
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-764.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">terminal</text>
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>
38
38
  </g>
39
39
  <!-- Registry&#45;&gt;terminal -->
40
40
  <g id="edge1" class="edge">
41
41
  <title>Registry&#45;&gt;terminal</title>
42
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M98.32,-457.11C123.97,-518.68 185.67,-651.7 271.25,-737.74 276.02,-742.54 281.7,-746.87 287.5,-750.66"/>
43
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.18,-752.72 293.42,-754.29 288.74,-748.54 286.18,-752.72"/>
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"/>
44
44
  </g>
45
45
  <!-- pwn -->
46
46
  <g id="node3" class="node">
47
47
  <title>pwn</title>
48
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-724.74C337.25,-724.74 307.25,-724.74 307.25,-724.74 301.25,-724.74 295.25,-718.74 295.25,-712.74 295.25,-712.74 295.25,-700.74 295.25,-700.74 295.25,-694.74 301.25,-688.74 307.25,-688.74 307.25,-688.74 337.25,-688.74 337.25,-688.74 343.25,-688.74 349.25,-694.74 349.25,-700.74 349.25,-700.74 349.25,-712.74 349.25,-712.74 349.25,-718.74 343.25,-724.74 337.25,-724.74"/>
49
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-703.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn</text>
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>
50
50
  </g>
51
51
  <!-- Registry&#45;&gt;pwn -->
52
52
  <g id="edge2" class="edge">
53
53
  <title>Registry&#45;&gt;pwn</title>
54
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M103.65,-456.92C133.71,-508.6 197.26,-609.38 271.25,-676.74 276.15,-681.2 281.8,-685.34 287.51,-689.03"/>
55
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.05,-691 293.3,-692.58 288.62,-686.83 286.05,-691"/>
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"/>
56
56
  </g>
57
57
  <!-- memory -->
58
58
  <g id="node4" class="node">
59
59
  <title>memory</title>
60
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-663.74C337.25,-663.74 307.25,-663.74 307.25,-663.74 301.25,-663.74 295.25,-657.74 295.25,-651.74 295.25,-651.74 295.25,-639.74 295.25,-639.74 295.25,-633.74 301.25,-627.74 307.25,-627.74 307.25,-627.74 337.25,-627.74 337.25,-627.74 343.25,-627.74 349.25,-633.74 349.25,-639.74 349.25,-639.74 349.25,-651.74 349.25,-651.74 349.25,-657.74 343.25,-663.74 337.25,-663.74"/>
61
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-642.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory</text>
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>
62
62
  </g>
63
63
  <!-- Registry&#45;&gt;memory -->
64
64
  <g id="edge3" class="edge">
65
65
  <title>Registry&#45;&gt;memory</title>
66
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M112.79,-457.22C147.27,-497.71 209.24,-566.55 271.25,-615.74 276.32,-619.77 281.99,-623.66 287.62,-627.22"/>
67
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.04,-629.12 293.29,-630.69 288.59,-624.94 286.04,-629.12"/>
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"/>
68
68
  </g>
69
69
  <!-- skills -->
70
70
  <g id="node5" class="node">
71
71
  <title>skills</title>
72
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-602.74C337.25,-602.74 307.25,-602.74 307.25,-602.74 301.25,-602.74 295.25,-596.74 295.25,-590.74 295.25,-590.74 295.25,-578.74 295.25,-578.74 295.25,-572.74 301.25,-566.74 307.25,-566.74 307.25,-566.74 337.25,-566.74 337.25,-566.74 343.25,-566.74 349.25,-572.74 349.25,-578.74 349.25,-578.74 349.25,-590.74 349.25,-590.74 349.25,-596.74 343.25,-602.74 337.25,-602.74"/>
73
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-581.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills</text>
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>
74
74
  </g>
75
75
  <!-- Registry&#45;&gt;skills -->
76
76
  <g id="edge4" class="edge">
77
77
  <title>Registry&#45;&gt;skills</title>
78
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M130.38,-456.99C167.68,-484.05 222.23,-522.85 271.25,-554.74 276.44,-558.12 282.01,-561.6 287.47,-564.93"/>
79
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.14,-566.99 293.39,-568.51 288.67,-562.79 286.14,-566.99"/>
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"/>
80
80
  </g>
81
81
  <!-- sessions -->
82
82
  <g id="node6" class="node">
83
83
  <title>sessions</title>
84
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.75,-541.74C337.75,-541.74 306.75,-541.74 306.75,-541.74 300.75,-541.74 294.75,-535.74 294.75,-529.74 294.75,-529.74 294.75,-517.74 294.75,-517.74 294.75,-511.74 300.75,-505.74 306.75,-505.74 306.75,-505.74 337.75,-505.74 337.75,-505.74 343.75,-505.74 349.75,-511.74 349.75,-517.74 349.75,-517.74 349.75,-529.74 349.75,-529.74 349.75,-535.74 343.75,-541.74 337.75,-541.74"/>
85
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-520.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions</text>
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>
86
86
  </g>
87
87
  <!-- Registry&#45;&gt;sessions -->
88
88
  <g id="edge5" class="edge">
89
89
  <title>Registry&#45;&gt;sessions</title>
90
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M164.08,-457.18C205.61,-474.77 254.41,-495.44 286.49,-509.02"/>
91
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.34,-511.19 292.74,-511.67 287.25,-506.68 285.34,-511.19"/>
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"/>
92
92
  </g>
93
93
  <!-- learning -->
94
94
  <g id="node7" class="node">
95
95
  <title>learning</title>
96
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-480.74C337.25,-480.74 307.25,-480.74 307.25,-480.74 301.25,-480.74 295.25,-474.74 295.25,-468.74 295.25,-468.74 295.25,-456.74 295.25,-456.74 295.25,-450.74 301.25,-444.74 307.25,-444.74 307.25,-444.74 337.25,-444.74 337.25,-444.74 343.25,-444.74 349.25,-450.74 349.25,-456.74 349.25,-456.74 349.25,-468.74 349.25,-468.74 349.25,-474.74 343.25,-480.74 337.25,-480.74"/>
97
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-459.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning</text>
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>
98
98
  </g>
99
99
  <!-- Registry&#45;&gt;learning -->
100
100
  <g id="edge6" class="edge">
101
101
  <title>Registry&#45;&gt;learning</title>
102
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-437.6C209.39,-444.27 255.56,-451.89 286.37,-456.98"/>
103
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.68,-459.35 292.99,-458.07 286.48,-454.52 285.68,-459.35"/>
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"/>
104
104
  </g>
105
105
  <!-- metrics -->
106
106
  <g id="node8" class="node">
107
107
  <title>metrics</title>
108
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-419.74C337.25,-419.74 307.25,-419.74 307.25,-419.74 301.25,-419.74 295.25,-413.74 295.25,-407.74 295.25,-407.74 295.25,-395.74 295.25,-395.74 295.25,-389.74 301.25,-383.74 307.25,-383.74 307.25,-383.74 337.25,-383.74 337.25,-383.74 343.25,-383.74 349.25,-389.74 349.25,-395.74 349.25,-395.74 349.25,-407.74 349.25,-407.74 349.25,-413.74 343.25,-419.74 337.25,-419.74"/>
109
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-398.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics</text>
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>
110
110
  </g>
111
111
  <!-- Registry&#45;&gt;metrics -->
112
112
  <g id="edge7" class="edge">
113
113
  <title>Registry&#45;&gt;metrics</title>
114
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-415.92C209.39,-412.16 255.56,-407.86 286.37,-404.99"/>
115
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="286.23,-407.47 292.97,-404.38 285.78,-402.59 286.23,-407.47"/>
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"/>
116
116
  </g>
117
117
  <!-- extro -->
118
118
  <g id="node9" class="node">
119
119
  <title>extro</title>
120
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M347.5,-358.74C347.5,-358.74 297,-358.74 297,-358.74 291,-358.74 285,-352.74 285,-346.74 285,-346.74 285,-334.74 285,-334.74 285,-328.74 291,-322.74 297,-322.74 297,-322.74 347.5,-322.74 347.5,-322.74 353.5,-322.74 359.5,-328.74 359.5,-334.74 359.5,-334.74 359.5,-346.74 359.5,-346.74 359.5,-352.74 353.5,-358.74 347.5,-358.74"/>
121
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-337.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection</text>
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>
122
122
  </g>
123
123
  <!-- Registry&#45;&gt;extro -->
124
124
  <g id="edge8" class="edge">
125
125
  <title>Registry&#45;&gt;extro</title>
126
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M169.04,-394.25C205.3,-381.5 246.26,-367.1 276.55,-356.45"/>
127
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="277.05,-358.88 282.84,-354.24 275.42,-354.25 277.05,-358.88"/>
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"/>
128
128
  </g>
129
129
  <!-- cron -->
130
130
  <g id="node10" class="node">
131
131
  <title>cron</title>
132
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-297.74C337.25,-297.74 307.25,-297.74 307.25,-297.74 301.25,-297.74 295.25,-291.74 295.25,-285.74 295.25,-285.74 295.25,-273.74 295.25,-273.74 295.25,-267.74 301.25,-261.74 307.25,-261.74 307.25,-261.74 337.25,-261.74 337.25,-261.74 343.25,-261.74 349.25,-267.74 349.25,-273.74 349.25,-273.74 349.25,-285.74 349.25,-285.74 349.25,-291.74 343.25,-297.74 337.25,-297.74"/>
133
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-276.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron</text>
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>
134
134
  </g>
135
135
  <!-- Registry&#45;&gt;cron -->
136
136
  <g id="edge9" class="edge">
137
137
  <title>Registry&#45;&gt;cron</title>
138
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M139.89,-390.34C185.49,-362.54 248.97,-323.82 287.47,-300.34"/>
139
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.7,-302.46 293.4,-296.73 286.15,-298.28 288.7,-302.46"/>
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"/>
140
140
  </g>
141
141
  <!-- swarm -->
142
142
  <g id="node11" class="node">
143
143
  <title>swarm</title>
144
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-236.74C337.25,-236.74 307.25,-236.74 307.25,-236.74 301.25,-236.74 295.25,-230.74 295.25,-224.74 295.25,-224.74 295.25,-212.74 295.25,-212.74 295.25,-206.74 301.25,-200.74 307.25,-200.74 307.25,-200.74 337.25,-200.74 337.25,-200.74 343.25,-200.74 349.25,-206.74 349.25,-212.74 349.25,-212.74 349.25,-224.74 349.25,-224.74 349.25,-230.74 343.25,-236.74 337.25,-236.74"/>
145
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-215.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm</text>
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>
146
146
  </g>
147
147
  <!-- Registry&#45;&gt;swarm -->
148
148
  <g id="edge10" class="edge">
149
149
  <title>Registry&#45;&gt;swarm</title>
150
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M116.67,-390.56C152.36,-353.93 213.12,-294.24 271.25,-249.74 276.38,-245.81 282.03,-241.93 287.63,-238.32"/>
151
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.63,-240.58 293.24,-234.78 286.01,-236.44 288.63,-240.58"/>
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"/>
152
152
  </g>
153
153
  <!-- reward -->
154
154
  <g id="node12" class="node">
155
155
  <title>reward</title>
156
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M337.25,-175.74C337.25,-175.74 307.25,-175.74 307.25,-175.74 301.25,-175.74 295.25,-169.74 295.25,-163.74 295.25,-163.74 295.25,-151.74 295.25,-151.74 295.25,-145.74 301.25,-139.74 307.25,-139.74 307.25,-139.74 337.25,-139.74 337.25,-139.74 343.25,-139.74 349.25,-145.74 349.25,-151.74 349.25,-151.74 349.25,-163.74 349.25,-163.74 349.25,-169.74 343.25,-175.74 337.25,-175.74"/>
157
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-154.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward</text>
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>
158
158
  </g>
159
159
  <!-- Registry&#45;&gt;reward -->
160
160
  <g id="edge11" class="edge">
161
161
  <title>Registry&#45;&gt;reward</title>
162
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M106.11,-390.39C137.71,-341.93 201.31,-251.07 271.25,-188.74 276.18,-184.35 281.81,-180.19 287.48,-176.44"/>
163
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="288.61,-178.62 293.21,-172.8 285.99,-174.48 288.61,-178.62"/>
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"/>
164
164
  </g>
165
165
  <!-- curric -->
166
166
  <g id="node13" class="node">
167
167
  <title>curric</title>
168
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M340.75,-114.74C340.75,-114.74 303.75,-114.74 303.75,-114.74 297.75,-114.74 291.75,-108.74 291.75,-102.74 291.75,-102.74 291.75,-90.74 291.75,-90.74 291.75,-84.74 297.75,-78.74 303.75,-78.74 303.75,-78.74 340.75,-78.74 340.75,-78.74 346.75,-78.74 352.75,-84.74 352.75,-90.74 352.75,-90.74 352.75,-102.74 352.75,-102.74 352.75,-108.74 346.75,-114.74 340.75,-114.74"/>
169
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-93.24" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum</text>
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>
170
170
  </g>
171
171
  <!-- Registry&#45;&gt;curric -->
172
172
  <g id="edge12" class="edge">
173
173
  <title>Registry&#45;&gt;curric</title>
174
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M99.76,-390.61C126.87,-332.06 189.65,-208.83 271.25,-127.74 275.19,-123.82 279.72,-120.17 284.4,-116.85"/>
175
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="285.48,-119.07 289.94,-113.15 282.76,-115 285.48,-119.07"/>
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"/>
176
176
  </g>
177
- <!-- t_shell -->
177
+ <!-- policy -->
178
178
  <g id="node14" class="node">
179
+ <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>
182
+ </g>
183
+ <!-- Registry&#45;&gt;policy -->
184
+ <g id="edge13" class="edge">
185
+ <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"/>
188
+ </g>
189
+ <!-- t_shell -->
190
+ <g id="node15" class="node">
179
191
  <title>t_shell</title>
180
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M583,-829.74C583,-829.74 553,-829.74 553,-829.74 547,-829.74 541,-823.74 541,-817.74 541,-817.74 541,-805.74 541,-805.74 541,-799.74 547,-793.74 553,-793.74 553,-793.74 583,-793.74 583,-793.74 589,-793.74 595,-799.74 595,-805.74 595,-805.74 595,-817.74 595,-817.74 595,-823.74 589,-829.74 583,-829.74"/>
181
- <text xml:space="preserve" text-anchor="middle" x="568" y="-808.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">shell</text>
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>
182
195
  </g>
183
196
  <!-- terminal&#45;&gt;t_shell -->
184
- <g id="edge13" class="edge">
197
+ <g id="edge14" class="edge">
185
198
  <title>terminal&#45;&gt;t_shell</title>
186
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-772.53C394.03,-780.52 482.8,-796.54 532.06,-805.43"/>
187
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="531.52,-807.83 538.84,-806.66 532.39,-803.01 531.52,-807.83"/>
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"/>
188
201
  </g>
189
202
  <!-- t_eval -->
190
- <g id="node15" class="node">
203
+ <g id="node16" class="node">
191
204
  <title>t_eval</title>
192
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M583.88,-768.74C583.88,-768.74 552.12,-768.74 552.12,-768.74 546.12,-768.74 540.12,-762.74 540.12,-756.74 540.12,-756.74 540.12,-744.74 540.12,-744.74 540.12,-738.74 546.12,-732.74 552.12,-732.74 552.12,-732.74 583.88,-732.74 583.88,-732.74 589.88,-732.74 595.88,-738.74 595.88,-744.74 595.88,-744.74 595.88,-756.74 595.88,-756.74 595.88,-762.74 589.88,-768.74 583.88,-768.74"/>
193
- <text xml:space="preserve" text-anchor="middle" x="568" y="-747.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">pwn_eval</text>
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>
194
208
  </g>
195
209
  <!-- pwn&#45;&gt;t_eval -->
196
- <g id="edge14" class="edge">
210
+ <g id="edge15" class="edge">
197
211
  <title>pwn&#45;&gt;t_eval</title>
198
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-711.53C393.8,-719.48 481.87,-735.37 531.28,-744.29"/>
199
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="530.78,-746.69 538.1,-745.53 531.65,-741.87 530.78,-746.69"/>
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"/>
200
214
  </g>
201
215
  <!-- t_mem -->
202
- <g id="node16" class="node">
216
+ <g id="node17" class="node">
203
217
  <title>t_mem</title>
204
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M604.12,-707.49C604.12,-707.49 531.88,-707.49 531.88,-707.49 525.88,-707.49 519.88,-701.49 519.88,-695.49 519.88,-695.49 519.88,-679.99 519.88,-679.99 519.88,-673.99 525.88,-667.99 531.88,-667.99 531.88,-667.99 604.12,-667.99 604.12,-667.99 610.12,-667.99 616.12,-673.99 616.12,-679.99 616.12,-679.99 616.12,-695.49 616.12,-695.49 616.12,-701.49 610.12,-707.49 604.12,-707.49"/>
205
- <text xml:space="preserve" text-anchor="middle" x="568" y="-694.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">memory_remember</text>
206
- <text xml:space="preserve" text-anchor="middle" x="568" y="-684.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">recall · forget · clear</text>
207
- <text xml:space="preserve" text-anchor="middle" x="568" y="-673.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
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>
208
222
  </g>
209
223
  <!-- memory&#45;&gt;t_mem -->
210
- <g id="edge15" class="edge">
224
+ <g id="edge16" class="edge">
211
225
  <title>memory&#45;&gt;t_mem</title>
212
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-650.32C388.37,-656.96 460.81,-669.44 511.38,-678.16"/>
213
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="510.66,-680.52 517.97,-679.29 511.49,-675.69 510.66,-680.52"/>
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"/>
214
228
  </g>
215
229
  <!-- t_skill -->
216
- <g id="node17" class="node">
230
+ <g id="node18" class="node">
217
231
  <title>t_skill</title>
218
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M610.12,-642.49C610.12,-642.49 525.88,-642.49 525.88,-642.49 519.88,-642.49 513.88,-636.49 513.88,-630.49 513.88,-630.49 513.88,-614.99 513.88,-614.99 513.88,-608.99 519.88,-602.99 525.88,-602.99 525.88,-602.99 610.12,-602.99 610.12,-602.99 616.12,-602.99 622.12,-608.99 622.12,-614.99 622.12,-614.99 622.12,-630.49 622.12,-630.49 622.12,-636.49 616.12,-642.49 610.12,-642.49"/>
219
- <text xml:space="preserve" text-anchor="middle" x="568" y="-629.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">skill_list · view · create</text>
220
- <text xml:space="preserve" text-anchor="middle" x="568" y="-619.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">add_reference · delete</text>
221
- <text xml:space="preserve" text-anchor="middle" x="568" y="-608.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">migrate_legacy</text>
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>
222
236
  </g>
223
237
  <!-- skills&#45;&gt;t_skill -->
224
- <g id="edge16" class="edge">
238
+ <g id="edge17" class="edge">
225
239
  <title>skills&#45;&gt;t_skill</title>
226
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-588.88C386.77,-594.65 454.87,-605.26 504.99,-613.08"/>
227
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="504.56,-615.49 511.86,-614.15 505.32,-610.65 504.56,-615.49"/>
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"/>
228
242
  </g>
229
243
  <!-- t_sess -->
230
- <g id="node18" class="node">
244
+ <g id="node19" class="node">
231
245
  <title>t_sess</title>
232
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M607.12,-577.49C607.12,-577.49 528.88,-577.49 528.88,-577.49 522.88,-577.49 516.88,-571.49 516.88,-565.49 516.88,-565.49 516.88,-549.99 516.88,-549.99 516.88,-543.99 522.88,-537.99 528.88,-537.99 528.88,-537.99 607.12,-537.99 607.12,-537.99 613.12,-537.99 619.12,-543.99 619.12,-549.99 619.12,-549.99 619.12,-565.49 619.12,-565.49 619.12,-571.49 613.12,-577.49 607.12,-577.49"/>
233
- <text xml:space="preserve" text-anchor="middle" x="568" y="-564.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">sessions_list · view</text>
234
- <text xml:space="preserve" text-anchor="middle" x="568" y="-554.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">current · delete · stats</text>
235
- <text xml:space="preserve" text-anchor="middle" x="568" y="-543.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
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>
236
250
  </g>
237
251
  <!-- sessions&#45;&gt;t_sess -->
238
- <g id="edge17" class="edge">
252
+ <g id="edge18" class="edge">
239
253
  <title>sessions&#45;&gt;t_sess</title>
240
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M350.27,-527.51C388.11,-532.79 457.9,-542.52 508.07,-549.52"/>
241
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="507.65,-551.94 514.92,-550.48 508.33,-547.08 507.65,-551.94"/>
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"/>
242
256
  </g>
243
257
  <!-- t_learn -->
244
- <g id="node19" class="node">
258
+ <g id="node20" class="node">
245
259
  <title>t_learn</title>
246
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M623.25,-513.24C623.25,-513.24 512.75,-513.24 512.75,-513.24 506.75,-513.24 500.75,-507.24 500.75,-501.24 500.75,-501.24 500.75,-454.24 500.75,-454.24 500.75,-448.24 506.75,-442.24 512.75,-442.24 512.75,-442.24 623.25,-442.24 623.25,-442.24 629.25,-442.24 635.25,-448.24 635.25,-454.24 635.25,-454.24 635.25,-501.24 635.25,-501.24 635.25,-507.24 629.25,-513.24 623.25,-513.24"/>
247
- <text xml:space="preserve" text-anchor="middle" x="568" y="-500.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">learning_* · mistakes_*</text>
248
- <text xml:space="preserve" text-anchor="middle" x="568" y="-490.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_judge · prm · sentinel</text>
249
- <text xml:space="preserve" text-anchor="middle" x="568" y="-479.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">export_dpo · scrub · balance</text>
250
- <text xml:space="preserve" text-anchor="middle" x="568" y="-469.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice · train</text>
251
- <text xml:space="preserve" text-anchor="middle" x="568" y="-458.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">hindsight · offline_judge</text>
252
- <text xml:space="preserve" text-anchor="middle" x="568" y="-448.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">gc_stores · lean helpers</text>
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>
253
267
  </g>
254
268
  <!-- learning&#45;&gt;t_learn -->
255
- <g id="edge18" class="edge">
269
+ <g id="edge19" class="edge">
256
270
  <title>learning&#45;&gt;t_learn</title>
257
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-464.38C383.61,-466.46 443.46,-470.14 491.77,-473.11"/>
258
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="491.55,-475.55 498.68,-473.54 491.85,-470.66 491.55,-475.55"/>
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"/>
259
273
  </g>
260
274
  <!-- t_metric -->
261
- <g id="node20" class="node">
275
+ <g id="node21" class="node">
262
276
  <title>t_metric</title>
263
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M600,-416.74C600,-416.74 536,-416.74 536,-416.74 530,-416.74 524,-410.74 524,-404.74 524,-404.74 524,-392.74 524,-392.74 524,-386.74 530,-380.74 536,-380.74 536,-380.74 600,-380.74 600,-380.74 606,-380.74 612,-386.74 612,-392.74 612,-392.74 612,-404.74 612,-404.74 612,-410.74 606,-416.74 600,-416.74"/>
264
- <text xml:space="preserve" text-anchor="middle" x="568" y="-400.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_summary</text>
265
- <text xml:space="preserve" text-anchor="middle" x="568" y="-390.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_reset</text>
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>
266
280
  </g>
267
281
  <!-- metrics&#45;&gt;t_metric -->
268
- <g id="edge19" class="edge">
282
+ <g id="edge20" class="edge">
269
283
  <title>metrics&#45;&gt;t_metric</title>
270
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-401.42C389.34,-400.93 464.47,-400 515.15,-399.38"/>
271
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="515.06,-401.83 522.03,-399.3 515,-396.93 515.06,-401.83"/>
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"/>
272
286
  </g>
273
287
  <!-- t_extro -->
274
- <g id="node21" class="node">
288
+ <g id="node22" class="node">
275
289
  <title>t_extro</title>
276
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M622.12,-355.24C622.12,-355.24 513.88,-355.24 513.88,-355.24 507.88,-355.24 501.88,-349.24 501.88,-343.24 501.88,-343.24 501.88,-296.24 501.88,-296.24 501.88,-290.24 507.88,-284.24 513.88,-284.24 513.88,-284.24 622.12,-284.24 622.12,-284.24 628.12,-284.24 634.12,-290.24 634.12,-296.24 634.12,-296.24 634.12,-343.24 634.12,-343.24 634.12,-349.24 628.12,-355.24 622.12,-355.24"/>
277
- <text xml:space="preserve" text-anchor="middle" x="568" y="-342.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">extro_snapshot · drift</text>
278
- <text xml:space="preserve" text-anchor="middle" x="568" y="-332.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">observe · observations · intel</text>
279
- <text xml:space="preserve" text-anchor="middle" x="568" y="-321.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">watch · verify · rf_tune · osint</text>
280
- <text xml:space="preserve" text-anchor="middle" x="568" y="-311.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">serial · telecomm · packet</text>
281
- <text xml:space="preserve" text-anchor="middle" x="568" y="-300.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">vision · voice · correlate</text>
282
- <text xml:space="preserve" text-anchor="middle" x="568" y="-290.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · reset · auto_toggle</text>
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>
283
297
  </g>
284
298
  <!-- extro&#45;&gt;t_extro -->
285
- <g id="edge20" class="edge">
299
+ <g id="edge21" class="edge">
286
300
  <title>extro&#45;&gt;t_extro</title>
287
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M360.01,-337.58C395.11,-334.55 449.05,-329.9 493.06,-326.11"/>
288
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="493.01,-328.58 499.78,-325.53 492.59,-323.69 493.01,-328.58"/>
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"/>
289
303
  </g>
290
304
  <!-- t_cron -->
291
- <g id="node22" class="node">
305
+ <g id="node23" class="node">
292
306
  <title>t_cron</title>
293
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M615.38,-258.74C615.38,-258.74 520.62,-258.74 520.62,-258.74 514.62,-258.74 508.62,-252.74 508.62,-246.74 508.62,-246.74 508.62,-234.74 508.62,-234.74 508.62,-228.74 514.62,-222.74 520.62,-222.74 520.62,-222.74 615.38,-222.74 615.38,-222.74 621.38,-222.74 627.38,-228.74 627.38,-234.74 627.38,-234.74 627.38,-246.74 627.38,-246.74 627.38,-252.74 621.38,-258.74 615.38,-258.74"/>
294
- <text xml:space="preserve" text-anchor="middle" x="568" y="-242.69" font-family="sans-Serif" font-size="9.00" fill="#0f172a">cron_list · create · run</text>
295
- <text xml:space="preserve" text-anchor="middle" x="568" y="-232.19" font-family="sans-Serif" font-size="9.00" fill="#0f172a">enable · disable · remove</text>
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>
296
310
  </g>
297
311
  <!-- cron&#45;&gt;t_cron -->
298
- <g id="edge21" class="edge">
312
+ <g id="edge22" class="edge">
299
313
  <title>cron&#45;&gt;t_cron</title>
300
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-275.49C385.49,-269.78 450.18,-259.43 499.71,-251.51"/>
301
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="499.98,-253.95 506.5,-250.42 499.2,-249.11 499.98,-253.95"/>
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"/>
302
316
  </g>
303
317
  <!-- t_swarm -->
304
- <g id="node23" class="node">
318
+ <g id="node24" class="node">
305
319
  <title>t_swarm</title>
306
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M612.75,-197.49C612.75,-197.49 523.25,-197.49 523.25,-197.49 517.25,-197.49 511.25,-191.49 511.25,-185.49 511.25,-185.49 511.25,-169.99 511.25,-169.99 511.25,-163.99 517.25,-157.99 523.25,-157.99 523.25,-157.99 612.75,-157.99 612.75,-157.99 618.75,-157.99 624.75,-163.99 624.75,-169.99 624.75,-169.99 624.75,-185.49 624.75,-185.49 624.75,-191.49 618.75,-197.49 612.75,-197.49"/>
307
- <text xml:space="preserve" text-anchor="middle" x="568" y="-184.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">agent_list · spawn · ask</text>
308
- <text xml:space="preserve" text-anchor="middle" x="568" y="-174.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">debate · broadcast</text>
309
- <text xml:space="preserve" text-anchor="middle" x="568" y="-163.94" font-family="sans-Serif" font-size="9.00" fill="#0f172a">swarm_bus · swarm_list</text>
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>
310
324
  </g>
311
325
  <!-- swarm&#45;&gt;t_swarm -->
312
- <g id="edge22" class="edge">
326
+ <g id="edge23" class="edge">
313
327
  <title>swarm&#45;&gt;t_swarm</title>
314
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-214.28C386.07,-208.17 452.3,-197.03 502.13,-188.65"/>
315
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="502.46,-191.08 508.96,-187.5 501.65,-186.25 502.46,-191.08"/>
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"/>
316
330
  </g>
317
331
  <!-- t_reward -->
318
- <g id="node24" class="node">
332
+ <g id="node25" class="node">
319
333
  <title>t_reward</title>
320
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M610.5,-132.74C610.5,-132.74 525.5,-132.74 525.5,-132.74 519.5,-132.74 513.5,-126.74 513.5,-120.74 513.5,-120.74 513.5,-108.74 513.5,-108.74 513.5,-102.74 519.5,-96.74 525.5,-96.74 525.5,-96.74 610.5,-96.74 610.5,-96.74 616.5,-96.74 622.5,-102.74 622.5,-108.74 622.5,-108.74 622.5,-120.74 622.5,-120.74 622.5,-126.74 616.5,-132.74 610.5,-132.74"/>
321
- <text xml:space="preserve" text-anchor="middle" x="568" y="-111.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_generator_mix</text>
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>
322
336
  </g>
323
337
  <!-- reward&#45;&gt;t_reward -->
324
- <g id="edge23" class="edge">
338
+ <g id="edge24" class="edge">
325
339
  <title>reward&#45;&gt;t_reward</title>
326
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M349.8,-153.06C386.66,-146.56 454.44,-134.6 504.52,-125.76"/>
327
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="504.91,-128.18 511.38,-124.55 504.06,-123.36 504.91,-128.18"/>
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"/>
328
342
  </g>
329
343
  <!-- t_curric -->
330
- <g id="node25" class="node">
344
+ <g id="node26" class="node">
331
345
  <title>t_curric</title>
332
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M612.75,-71.74C612.75,-71.74 523.25,-71.74 523.25,-71.74 517.25,-71.74 511.25,-65.74 511.25,-59.74 511.25,-59.74 511.25,-47.74 511.25,-47.74 511.25,-41.74 517.25,-35.74 523.25,-35.74 523.25,-35.74 612.75,-35.74 612.75,-35.74 618.75,-35.74 624.75,-41.74 624.75,-47.74 624.75,-47.74 624.75,-59.74 624.75,-59.74 624.75,-65.74 618.75,-71.74 612.75,-71.74"/>
333
- <text xml:space="preserve" text-anchor="middle" x="568" y="-50.44" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice_kpi</text>
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>
334
348
  </g>
335
349
  <!-- curric&#45;&gt;t_curric -->
336
- <g id="edge24" class="edge">
350
+ <g id="edge26" class="edge">
337
351
  <title>curric&#45;&gt;t_curric</title>
338
- <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M353.14,-91.47C390.08,-84.95 453.96,-73.68 502.32,-65.15"/>
339
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="502.74,-67.57 509.21,-63.94 501.89,-62.74 502.74,-67.57"/>
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"/>
354
+ </g>
355
+ <!-- t_policy -->
356
+ <g id="node27" class="node">
357
+ <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>
362
+ </g>
363
+ <!-- policy&#45;&gt;t_policy -->
364
+ <g id="edge25" class="edge">
365
+ <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"/>
340
368
  </g>
341
369
  <!-- t_metric&#45;&gt;Registry -->
342
- <g id="edge25" class="edge">
370
+ <g id="edge27" class="edge">
343
371
  <title>t_metric&#45;&gt;Registry</title>
344
- <path fill="none" stroke="#fbbf24" stroke-width="1.1" stroke-dasharray="5,2" d="M523.49,-394.43C504.23,-390.39 482.71,-382.63 468.25,-367.74 437.75,-336.35 512.92,121.04 271.25,-31.74 146.55,-110.57 103.72,-298.17 90.47,-382.01"/>
345
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.1" points="88.06,-381.57 89.43,-388.86 92.9,-382.31 88.06,-381.57"/>
346
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-51.44" font-family="serif" font-size="14.00">success_rate</text>
347
- <text xml:space="preserve" text-anchor="middle" x="322.25" y="-34.94" font-family="serif" font-size="14.00">→ router tie&#45;break</text>
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>
348
376
  </g>
349
377
  </g>
350
378
  </svg>