pwn 0.5.682 → 0.5.684

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -10
  3. data/documentation/Agent-Tool-Registry.md +13 -9
  4. data/documentation/CLI-Drivers.md +27 -28
  5. data/documentation/Configuration.md +7 -5
  6. data/documentation/Contributing.md +2 -2
  7. data/documentation/Cron.md +11 -7
  8. data/documentation/Diagrams.md +2 -2
  9. data/documentation/General-PWN-Usage.md +1 -1
  10. data/documentation/Home.md +7 -6
  11. data/documentation/How-PWN-Works.md +9 -9
  12. data/documentation/Installation.md +1 -1
  13. data/documentation/Persistence.md +2 -1
  14. data/documentation/Plugins.md +3 -3
  15. data/documentation/Reinforcement-Learning.md +103 -101
  16. data/documentation/SAST.md +1 -1
  17. data/documentation/Session-Workflow.md +152 -0
  18. data/documentation/Sessions.md +2 -1
  19. data/documentation/Troubleshooting.md +2 -2
  20. data/documentation/What-is-PWN.md +3 -3
  21. data/documentation/diagrams/agent-tool-registry.svg +152 -152
  22. data/documentation/diagrams/cron-scheduling.svg +141 -121
  23. data/documentation/diagrams/dot/agent-tool-registry.dot +4 -4
  24. data/documentation/diagrams/dot/cron-scheduling.dot +10 -7
  25. data/documentation/diagrams/dot/driver-framework.dot +1 -1
  26. data/documentation/diagrams/dot/overall-pwn-architecture.dot +4 -4
  27. data/documentation/diagrams/dot/persistence-filesystem.dot +1 -1
  28. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  29. data/documentation/diagrams/dot/task-summarizer.dot +18 -16
  30. data/documentation/diagrams/driver-framework.svg +1 -1
  31. data/documentation/diagrams/overall-pwn-architecture.svg +93 -93
  32. data/documentation/diagrams/persistence-filesystem.svg +4 -4
  33. data/documentation/diagrams/plugin-ecosystem.svg +101 -100
  34. data/documentation/diagrams/task-summarizer.svg +166 -156
  35. data/documentation/pwn-ai-Agent.md +9 -4
  36. data/lib/pwn/ai/agent/dispatch.rb +52 -1
  37. data/lib/pwn/ai/agent/loop.rb +198 -159
  38. data/lib/pwn/ai/agent/open_goal.rb +83 -0
  39. data/lib/pwn/ai/agent/policy.rb +2 -3
  40. data/lib/pwn/ai/agent/prompt_builder.rb +16 -13
  41. data/lib/pwn/ai/agent/registry.rb +6 -9
  42. data/lib/pwn/ai/agent/tools/sessions.rb +32 -0
  43. data/lib/pwn/ai/agent/tools/skills.rb +56 -0
  44. data/lib/pwn/ai/agent.rb +1 -0
  45. data/lib/pwn/ai/anthropic.rb +0 -1
  46. data/lib/pwn/ai/gemini.rb +0 -1
  47. data/lib/pwn/ai/grok.rb +0 -1
  48. data/lib/pwn/ai/ollama.rb +0 -1
  49. data/lib/pwn/ai/open_ai.rb +0 -1
  50. data/lib/pwn/ai/open_web_ui.rb +0 -1
  51. data/lib/pwn/config.rb +2 -2
  52. data/lib/pwn/cron.rb +18 -5
  53. data/lib/pwn/plugins/repl.rb +43 -1
  54. data/lib/pwn/plugins/tty_spinner.rb +109 -13
  55. data/lib/pwn/sessions.rb +82 -0
  56. data/lib/pwn/version.rb +1 -1
  57. data/spec/integration/persistence_roundtrip_spec.rb +2 -1
  58. data/spec/integration/prompt_builder_spec.rb +3 -3
  59. data/spec/integration/reinforced_feedback_loop_spec.rb +6 -11
  60. data/spec/lib/pwn/ai/agent/dispatch_spec.rb +38 -82
  61. data/spec/lib/pwn/ai/agent/loop_spec.rb +284 -11
  62. data/spec/lib/pwn/ai/agent/open_goal_spec.rb +37 -0
  63. data/spec/lib/pwn/ai/agent/prompt_builder_spec.rb +7 -3
  64. data/spec/lib/pwn/ai/agent/registry_spec.rb +16 -9
  65. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +5 -0
  66. data/spec/lib/pwn/ai/agent/tools/skills_spec.rb +16 -0
  67. data/spec/lib/pwn/ai/red_team/test_case_engine_spec.rb +20 -0
  68. data/spec/lib/pwn/cron_spec.rb +13 -3
  69. data/spec/lib/pwn/plugins/repl_spec.rb +26 -0
  70. data/spec/lib/pwn/plugins/tty_spinner_spec.rb +44 -0
  71. data/spec/lib/pwn/sessions_spec.rb +29 -0
  72. data/spec/spec_helper.rb +6 -0
  73. data/third_party/pwn_rdoc.jsonl +28 -1
  74. metadata +4 -1
@@ -4,384 +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="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)">
7
+ <svg width="810pt" height="1115pt"
8
+ viewBox="0.00 0.00 810.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 1071.95)">
10
10
  <title>PWN_Agent_Tool_Registry</title>
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>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1071.95 766.7,-1071.95 766.7,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="96.25" y="-1006.75" 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="234.62" y="-995.3" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">13 toolsets · 87 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="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>
16
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M343.75,-119.75C343.75,-119.75 410.25,-119.75 410.25,-119.75 416.25,-119.75 422.25,-125.75 422.25,-131.75 422.25,-131.75 422.25,-922.75 422.25,-922.75 422.25,-928.75 416.25,-934.75 410.25,-934.75 410.25,-934.75 343.75,-934.75 343.75,-934.75 337.75,-934.75 331.75,-928.75 331.75,-922.75 331.75,-922.75 331.75,-131.75 331.75,-131.75 331.75,-125.75 337.75,-119.75 343.75,-119.75"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-911.75" 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="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>
21
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M535,-75.75C535,-75.75 711.5,-75.75 711.5,-75.75 717.5,-75.75 723.5,-81.75 723.5,-87.75 723.5,-87.75 723.5,-969.75 723.5,-969.75 723.5,-975.75 717.5,-981.75 711.5,-981.75 711.5,-981.75 535,-981.75 535,-981.75 529,-981.75 523,-975.75 523,-969.75 523,-969.75 523,-87.75 523,-87.75 523,-81.75 529,-75.75 535,-75.75"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="623.25" y="-958.75" 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="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>
27
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M211,-551.37C211,-551.37 12,-551.37 12,-551.37 6,-551.37 0,-545.37 0,-539.37 0,-539.37 0,-484.12 0,-484.12 0,-478.12 6,-472.12 12,-472.12 12,-472.12 211,-472.12 211,-472.12 217,-472.12 223,-478.12 223,-484.12 223,-484.12 223,-539.37 223,-539.37 223,-545.37 217,-551.37 211,-551.37"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="111.5" y="-535.97" font-family="sans-Serif" font-size="12.00" fill="#0f172a">Registry</text>
29
+ <text xml:space="preserve" text-anchor="middle" x="111.5" y="-521.72" 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="111.5" y="-507.47" font-family="sans-Serif" font-size="12.00" fill="#0f172a">rank(query) · CORE_TOOLS</text>
31
+ <text xml:space="preserve" text-anchor="middle" x="111.5" y="-493.22" 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="111.5" y="-478.97" font-family="sans-Serif" font-size="12.00" fill="#0f172a">tool_preference (CORE_TOOLS order)</text>
33
33
  </g>
34
34
  <!-- terminal -->
35
35
  <g id="node2" class="node">
36
36
  <title>terminal</title>
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>
37
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-895.75C392,-895.75 362,-895.75 362,-895.75 356,-895.75 350,-889.75 350,-883.75 350,-883.75 350,-871.75 350,-871.75 350,-865.75 356,-859.75 362,-859.75 362,-859.75 392,-859.75 392,-859.75 398,-859.75 404,-865.75 404,-871.75 404,-871.75 404,-883.75 404,-883.75 404,-889.75 398,-895.75 392,-895.75"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-874.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">terminal</text>
39
39
  </g>
40
40
  <!-- Registry&#45;&gt;terminal -->
41
41
  <g id="edge1" class="edge">
42
42
  <title>Registry&#45;&gt;terminal</title>
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"/>
43
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M130.5,-552.16C162.19,-619.83 233.45,-757.54 326,-847.75 330.79,-852.42 336.44,-856.68 342.19,-860.42"/>
44
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.79,-862.44 348.04,-864.02 343.36,-858.27 340.79,-862.44"/>
45
45
  </g>
46
46
  <!-- pwn -->
47
47
  <g id="node3" class="node">
48
48
  <title>pwn</title>
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>
49
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-834.75C392,-834.75 362,-834.75 362,-834.75 356,-834.75 350,-828.75 350,-822.75 350,-822.75 350,-810.75 350,-810.75 350,-804.75 356,-798.75 362,-798.75 362,-798.75 392,-798.75 392,-798.75 398,-798.75 404,-804.75 404,-810.75 404,-810.75 404,-822.75 404,-822.75 404,-828.75 398,-834.75 392,-834.75"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-813.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn</text>
51
51
  </g>
52
52
  <!-- Registry&#45;&gt;pwn -->
53
53
  <g id="edge2" class="edge">
54
54
  <title>Registry&#45;&gt;pwn</title>
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"/>
55
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M136.86,-551.93C172.93,-609.11 245.06,-714.96 326,-786.75 330.95,-791.14 336.64,-795.24 342.36,-798.92"/>
56
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.9,-800.9 348.15,-802.48 343.46,-796.73 340.9,-800.9"/>
57
57
  </g>
58
58
  <!-- memory -->
59
59
  <g id="node4" class="node">
60
60
  <title>memory</title>
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>
61
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-773.75C392,-773.75 362,-773.75 362,-773.75 356,-773.75 350,-767.75 350,-761.75 350,-761.75 350,-749.75 350,-749.75 350,-743.75 356,-737.75 362,-737.75 362,-737.75 392,-737.75 392,-737.75 398,-737.75 404,-743.75 404,-749.75 404,-749.75 404,-761.75 404,-761.75 404,-767.75 398,-773.75 392,-773.75"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-752.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory</text>
63
63
  </g>
64
64
  <!-- Registry&#45;&gt;memory -->
65
65
  <g id="edge3" class="edge">
66
66
  <title>Registry&#45;&gt;memory</title>
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"/>
67
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M147.3,-552.19C187.55,-597.59 257.16,-671.93 326,-725.75 331.1,-729.74 336.78,-733.61 342.42,-737.17"/>
68
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.84,-739.07 348.09,-740.63 343.39,-734.89 340.84,-739.07"/>
69
69
  </g>
70
70
  <!-- skills -->
71
71
  <g id="node5" class="node">
72
72
  <title>skills</title>
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>
73
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-712.75C392,-712.75 362,-712.75 362,-712.75 356,-712.75 350,-706.75 350,-700.75 350,-700.75 350,-688.75 350,-688.75 350,-682.75 356,-676.75 362,-676.75 362,-676.75 392,-676.75 392,-676.75 398,-676.75 404,-682.75 404,-688.75 404,-688.75 404,-700.75 404,-700.75 404,-706.75 398,-712.75 392,-712.75"/>
74
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-691.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills</text>
75
75
  </g>
76
76
  <!-- Registry&#45;&gt;skills -->
77
77
  <g id="edge4" class="edge">
78
78
  <title>Registry&#45;&gt;skills</title>
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"/>
79
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M166.5,-552.3C209.16,-583.88 270.54,-628.32 326,-664.75 331.18,-668.15 336.74,-671.64 342.2,-674.98"/>
80
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.86,-677.03 348.12,-678.56 343.4,-672.84 340.86,-677.03"/>
81
81
  </g>
82
82
  <!-- sessions -->
83
83
  <g id="node6" class="node">
84
84
  <title>sessions</title>
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>
85
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392.5,-651.75C392.5,-651.75 361.5,-651.75 361.5,-651.75 355.5,-651.75 349.5,-645.75 349.5,-639.75 349.5,-639.75 349.5,-627.75 349.5,-627.75 349.5,-621.75 355.5,-615.75 361.5,-615.75 361.5,-615.75 392.5,-615.75 392.5,-615.75 398.5,-615.75 404.5,-621.75 404.5,-627.75 404.5,-627.75 404.5,-639.75 404.5,-639.75 404.5,-645.75 398.5,-651.75 392.5,-651.75"/>
86
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-630.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions</text>
87
87
  </g>
88
88
  <!-- Registry&#45;&gt;sessions -->
89
89
  <g id="edge5" class="edge">
90
90
  <title>Registry&#45;&gt;sessions</title>
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"/>
91
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M200.24,-552.37C248.4,-574.67 305.42,-601.07 341.16,-617.62"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340,-619.78 347.38,-620.5 342.06,-615.33 340,-619.78"/>
93
93
  </g>
94
94
  <!-- learning -->
95
95
  <g id="node7" class="node">
96
96
  <title>learning</title>
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>
97
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-590.75C392,-590.75 362,-590.75 362,-590.75 356,-590.75 350,-584.75 350,-578.75 350,-578.75 350,-566.75 350,-566.75 350,-560.75 356,-554.75 362,-554.75 362,-554.75 392,-554.75 392,-554.75 398,-554.75 404,-560.75 404,-566.75 404,-566.75 404,-578.75 404,-578.75 404,-584.75 398,-590.75 392,-590.75"/>
98
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-569.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning</text>
99
99
  </g>
100
100
  <!-- Registry&#45;&gt;learning -->
101
101
  <g id="edge6" class="edge">
102
102
  <title>Registry&#45;&gt;learning</title>
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"/>
103
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.87,-537.53C266.05,-547.29 311.1,-557.72 341.13,-564.67"/>
104
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.57,-567.06 347.95,-566.25 341.68,-562.29 340.57,-567.06"/>
105
105
  </g>
106
106
  <!-- metrics -->
107
107
  <g id="node8" class="node">
108
108
  <title>metrics</title>
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>
109
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-529.75C392,-529.75 362,-529.75 362,-529.75 356,-529.75 350,-523.75 350,-517.75 350,-517.75 350,-505.75 350,-505.75 350,-499.75 356,-493.75 362,-493.75 362,-493.75 392,-493.75 392,-493.75 398,-493.75 404,-499.75 404,-505.75 404,-505.75 404,-517.75 404,-517.75 404,-523.75 398,-529.75 392,-529.75"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-508.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics</text>
111
111
  </g>
112
112
  <!-- Registry&#45;&gt;metrics -->
113
113
  <g id="edge7" class="edge">
114
114
  <title>Registry&#45;&gt;metrics</title>
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"/>
115
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.87,-511.75C266.05,-511.75 311.1,-511.75 341.13,-511.75"/>
116
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.9,-514.2 347.9,-511.75 340.9,-509.3 340.9,-514.2"/>
117
117
  </g>
118
118
  <!-- extro -->
119
119
  <g id="node9" class="node">
120
120
  <title>extro</title>
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>
121
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M402.25,-468.75C402.25,-468.75 351.75,-468.75 351.75,-468.75 345.75,-468.75 339.75,-462.75 339.75,-456.75 339.75,-456.75 339.75,-444.75 339.75,-444.75 339.75,-438.75 345.75,-432.75 351.75,-432.75 351.75,-432.75 402.25,-432.75 402.25,-432.75 408.25,-432.75 414.25,-438.75 414.25,-444.75 414.25,-444.75 414.25,-456.75 414.25,-456.75 414.25,-462.75 408.25,-468.75 402.25,-468.75"/>
122
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-447.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection</text>
123
123
  </g>
124
124
  <!-- Registry&#45;&gt;extro -->
125
125
  <g id="edge8" class="edge">
126
126
  <title>Registry&#45;&gt;extro</title>
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"/>
127
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.87,-485.97C261.45,-477.26 301.3,-468.04 330.79,-461.21"/>
128
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="331.32,-463.61 337.58,-459.64 330.21,-458.83 331.32,-463.61"/>
129
129
  </g>
130
130
  <!-- cron -->
131
131
  <g id="node10" class="node">
132
132
  <title>cron</title>
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>
133
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-407.75C392,-407.75 362,-407.75 362,-407.75 356,-407.75 350,-401.75 350,-395.75 350,-395.75 350,-383.75 350,-383.75 350,-377.75 356,-371.75 362,-371.75 362,-371.75 392,-371.75 392,-371.75 398,-371.75 404,-377.75 404,-383.75 404,-383.75 404,-395.75 404,-395.75 404,-401.75 398,-407.75 392,-407.75"/>
134
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-386.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron</text>
135
135
  </g>
136
136
  <!-- Registry&#45;&gt;cron -->
137
137
  <g id="edge9" class="edge">
138
138
  <title>Registry&#45;&gt;cron</title>
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"/>
139
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M200.24,-471.12C248.68,-448.7 306.08,-422.12 341.78,-405.59"/>
140
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="342.66,-407.88 347.98,-402.72 340.6,-403.44 342.66,-407.88"/>
141
141
  </g>
142
142
  <!-- swarm -->
143
143
  <g id="node11" class="node">
144
144
  <title>swarm</title>
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>
145
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-346.75C392,-346.75 362,-346.75 362,-346.75 356,-346.75 350,-340.75 350,-334.75 350,-334.75 350,-322.75 350,-322.75 350,-316.75 356,-310.75 362,-310.75 362,-310.75 392,-310.75 392,-310.75 398,-310.75 404,-316.75 404,-322.75 404,-322.75 404,-334.75 404,-334.75 404,-340.75 398,-346.75 392,-346.75"/>
146
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-325.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm</text>
147
147
  </g>
148
148
  <!-- Registry&#45;&gt;swarm -->
149
149
  <g id="edge10" class="edge">
150
150
  <title>Registry&#45;&gt;swarm</title>
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"/>
151
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M167.12,-471.4C209.87,-440.19 271.06,-396.28 326,-359.75 331.2,-356.29 336.78,-352.71 342.24,-349.27"/>
152
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="343.54,-351.35 348.18,-345.57 340.94,-347.19 343.54,-351.35"/>
153
153
  </g>
154
154
  <!-- reward -->
155
155
  <g id="node12" class="node">
156
156
  <title>reward</title>
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>
157
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-285.75C392,-285.75 362,-285.75 362,-285.75 356,-285.75 350,-279.75 350,-273.75 350,-273.75 350,-261.75 350,-261.75 350,-255.75 356,-249.75 362,-249.75 362,-249.75 392,-249.75 392,-249.75 398,-249.75 404,-255.75 404,-261.75 404,-261.75 404,-273.75 404,-273.75 404,-279.75 398,-285.75 392,-285.75"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-264.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward</text>
159
159
  </g>
160
160
  <!-- Registry&#45;&gt;reward -->
161
161
  <g id="edge11" class="edge">
162
162
  <title>Registry&#45;&gt;reward</title>
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"/>
163
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M147.84,-471.28C188.31,-426.24 257.85,-352.69 326,-298.75 331.12,-294.69 336.81,-290.73 342.46,-287.06"/>
164
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="343.52,-289.28 348.14,-283.48 340.91,-285.14 343.52,-289.28"/>
165
165
  </g>
166
166
  <!-- curric -->
167
167
  <g id="node13" class="node">
168
168
  <title>curric</title>
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>
169
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M395.5,-224.75C395.5,-224.75 358.5,-224.75 358.5,-224.75 352.5,-224.75 346.5,-218.75 346.5,-212.75 346.5,-212.75 346.5,-200.75 346.5,-200.75 346.5,-194.75 352.5,-188.75 358.5,-188.75 358.5,-188.75 395.5,-188.75 395.5,-188.75 401.5,-188.75 407.5,-194.75 407.5,-200.75 407.5,-200.75 407.5,-212.75 407.5,-212.75 407.5,-218.75 401.5,-224.75 395.5,-224.75"/>
170
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-203.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum</text>
171
171
  </g>
172
172
  <!-- Registry&#45;&gt;curric -->
173
173
  <g id="edge12" class="edge">
174
174
  <title>Registry&#45;&gt;curric</title>
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"/>
175
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M137.34,-471.4C173.72,-414.52 245.92,-309.69 326,-237.75 329.94,-234.21 334.33,-230.83 338.84,-227.7"/>
176
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="340.08,-229.81 344.57,-223.9 337.38,-225.72 340.08,-229.81"/>
177
177
  </g>
178
178
  <!-- policy -->
179
179
  <g id="node14" class="node">
180
180
  <title>policy</title>
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>
181
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392,-163.75C392,-163.75 362,-163.75 362,-163.75 356,-163.75 350,-157.75 350,-151.75 350,-151.75 350,-139.75 350,-139.75 350,-133.75 356,-127.75 362,-127.75 362,-127.75 392,-127.75 392,-127.75 398,-127.75 404,-133.75 404,-139.75 404,-139.75 404,-151.75 404,-151.75 404,-157.75 398,-163.75 392,-163.75"/>
182
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-142.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy</text>
183
183
  </g>
184
184
  <!-- Registry&#45;&gt;policy -->
185
185
  <g id="edge13" class="edge">
186
186
  <title>Registry&#45;&gt;policy</title>
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"/>
187
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M130.8,-471.34C162.81,-403.98 234.36,-267.25 326,-176.75 330.8,-172 336.46,-167.64 342.21,-163.78"/>
188
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="343.47,-165.88 348.07,-160.06 340.85,-161.74 343.47,-165.88"/>
189
189
  </g>
190
190
  <!-- t_shell -->
191
191
  <g id="node15" class="node">
192
192
  <title>t_shell</title>
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>
193
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M643.12,-942.75C643.12,-942.75 602.38,-942.75 602.38,-942.75 596.38,-942.75 590.38,-936.75 590.38,-930.75 590.38,-930.75 590.38,-918.75 590.38,-918.75 590.38,-912.75 596.38,-906.75 602.38,-906.75 602.38,-906.75 643.12,-906.75 643.12,-906.75 649.12,-906.75 655.12,-912.75 655.12,-918.75 655.12,-918.75 655.12,-930.75 655.12,-930.75 655.12,-936.75 649.12,-942.75 643.12,-942.75"/>
194
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-926.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">shell</text>
195
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-916.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
196
196
  </g>
197
197
  <!-- terminal&#45;&gt;t_shell -->
198
198
  <g id="edge14" class="edge">
199
199
  <title>terminal&#45;&gt;t_shell</title>
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"/>
200
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-882.87C447.24,-891.1 531.42,-907.33 581.52,-916.99"/>
201
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="580.88,-919.36 588.22,-918.28 581.81,-914.55 580.88,-919.36"/>
202
202
  </g>
203
203
  <!-- t_eval -->
204
204
  <g id="node16" class="node">
205
205
  <title>t_eval</title>
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>
206
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M643.12,-881.75C643.12,-881.75 602.38,-881.75 602.38,-881.75 596.38,-881.75 590.38,-875.75 590.38,-869.75 590.38,-869.75 590.38,-857.75 590.38,-857.75 590.38,-851.75 596.38,-845.75 602.38,-845.75 602.38,-845.75 643.12,-845.75 643.12,-845.75 649.12,-845.75 655.12,-851.75 655.12,-857.75 655.12,-857.75 655.12,-869.75 655.12,-869.75 655.12,-875.75 649.12,-881.75 643.12,-881.75"/>
207
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-865.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">pwn_eval</text>
208
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-855.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
209
209
  </g>
210
210
  <!-- pwn&#45;&gt;t_eval -->
211
211
  <g id="edge15" class="edge">
212
212
  <title>pwn&#45;&gt;t_eval</title>
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"/>
213
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-821.87C447.24,-830.1 531.42,-846.33 581.52,-855.99"/>
214
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="580.88,-858.36 588.22,-857.28 581.81,-853.55 580.88,-858.36"/>
215
215
  </g>
216
216
  <!-- t_mem -->
217
217
  <g id="node17" class="node">
218
218
  <title>t_mem</title>
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>
219
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M658.88,-820.5C658.88,-820.5 586.62,-820.5 586.62,-820.5 580.62,-820.5 574.62,-814.5 574.62,-808.5 574.62,-808.5 574.62,-793 574.62,-793 574.62,-787 580.62,-781 586.62,-781 586.62,-781 658.88,-781 658.88,-781 664.88,-781 670.88,-787 670.88,-793 670.88,-793 670.88,-808.5 670.88,-808.5 670.88,-814.5 664.88,-820.5 658.88,-820.5"/>
220
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-807.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">memory_remember</text>
221
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-797.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">recall · forget · clear</text>
222
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-786.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
223
223
  </g>
224
224
  <!-- memory&#45;&gt;t_mem -->
225
225
  <g id="edge16" class="edge">
226
226
  <title>memory&#45;&gt;t_mem</title>
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"/>
227
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-760.65C443.12,-767.77 515.56,-781.14 566.13,-790.48"/>
228
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="565.4,-792.83 572.72,-791.7 566.29,-788.02 565.4,-792.83"/>
229
229
  </g>
230
230
  <!-- t_skill -->
231
231
  <g id="node18" class="node">
232
232
  <title>t_skill</title>
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>
233
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M677.62,-755.5C677.62,-755.5 567.88,-755.5 567.88,-755.5 561.88,-755.5 555.88,-749.5 555.88,-743.5 555.88,-743.5 555.88,-728 555.88,-728 555.88,-722 561.88,-716 567.88,-716 567.88,-716 677.62,-716 677.62,-716 683.62,-716 689.62,-722 689.62,-728 689.62,-728 689.62,-743.5 689.62,-743.5 689.62,-749.5 683.62,-755.5 677.62,-755.5"/>
234
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-742.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">skills_recall · skill_list</text>
235
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">view · create · add_reference</text>
236
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-721.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">delete · migrate_legacy</text>
237
237
  </g>
238
238
  <!-- skills&#45;&gt;t_skill -->
239
239
  <g id="edge17" class="edge">
240
240
  <title>skills&#45;&gt;t_skill</title>
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"/>
241
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-699.21C438.49,-704.92 498.66,-715.04 547.07,-723.19"/>
242
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="546.4,-725.56 553.71,-724.3 547.21,-720.72 546.4,-725.56"/>
243
243
  </g>
244
244
  <!-- t_sess -->
245
245
  <g id="node19" class="node">
246
246
  <title>t_sess</title>
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>
247
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M678,-690.5C678,-690.5 567.5,-690.5 567.5,-690.5 561.5,-690.5 555.5,-684.5 555.5,-678.5 555.5,-678.5 555.5,-663 555.5,-663 555.5,-657 561.5,-651 567.5,-651 567.5,-651 678,-651 678,-651 684,-651 690,-657 690,-663 690,-663 690,-678.5 690,-678.5 690,-684.5 684,-690.5 678,-690.5"/>
248
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-677.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">session_recall · sessions_list</text>
249
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-667.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">view · current · delete</text>
250
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-656.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · lean</text>
251
251
  </g>
252
252
  <!-- sessions&#45;&gt;t_sess -->
253
253
  <g id="edge18" class="edge">
254
254
  <title>sessions&#45;&gt;t_sess</title>
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"/>
255
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M405.02,-637.85C438.87,-642.99 498.27,-652 546.34,-659.3"/>
256
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="545.93,-661.72 553.22,-660.34 546.66,-656.87 545.93,-661.72"/>
257
257
  </g>
258
258
  <!-- t_learn -->
259
259
  <g id="node20" class="node">
260
260
  <title>t_learn</title>
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>
261
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M678,-626.25C678,-626.25 567.5,-626.25 567.5,-626.25 561.5,-626.25 555.5,-620.25 555.5,-614.25 555.5,-614.25 555.5,-567.25 555.5,-567.25 555.5,-561.25 561.5,-555.25 567.5,-555.25 567.5,-555.25 678,-555.25 678,-555.25 684,-555.25 690,-561.25 690,-567.25 690,-567.25 690,-614.25 690,-614.25 690,-620.25 684,-626.25 678,-626.25"/>
262
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-613.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">learning_* · mistakes_*</text>
263
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-603.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_judge · prm · sentinel</text>
264
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-592.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">export_dpo · scrub · balance</text>
265
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-582.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice · train</text>
266
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-571.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">hindsight · offline_judge</text>
267
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-561.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">gc_stores · lean helpers</text>
268
268
  </g>
269
269
  <!-- learning&#45;&gt;t_learn -->
270
270
  <g id="edge19" class="edge">
271
271
  <title>learning&#45;&gt;t_learn</title>
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"/>
272
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-574.71C438.36,-577.2 498.21,-581.62 546.52,-585.19"/>
273
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="546.27,-587.63 553.44,-585.7 546.63,-582.74 546.27,-587.63"/>
274
274
  </g>
275
275
  <!-- t_metric -->
276
276
  <g id="node21" class="node">
277
277
  <title>t_metric</title>
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>
278
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M654.75,-529.75C654.75,-529.75 590.75,-529.75 590.75,-529.75 584.75,-529.75 578.75,-523.75 578.75,-517.75 578.75,-517.75 578.75,-505.75 578.75,-505.75 578.75,-499.75 584.75,-493.75 590.75,-493.75 590.75,-493.75 654.75,-493.75 654.75,-493.75 660.75,-493.75 666.75,-499.75 666.75,-505.75 666.75,-505.75 666.75,-517.75 666.75,-517.75 666.75,-523.75 660.75,-529.75 654.75,-529.75"/>
279
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-513.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_summary</text>
280
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-503.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_reset</text>
281
281
  </g>
282
282
  <!-- metrics&#45;&gt;t_metric -->
283
283
  <g id="edge20" class="edge">
284
284
  <title>metrics&#45;&gt;t_metric</title>
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"/>
285
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-511.75C444.09,-511.75 519.22,-511.75 569.9,-511.75"/>
286
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="569.78,-514.2 576.78,-511.75 569.78,-509.3 569.78,-514.2"/>
287
287
  </g>
288
288
  <!-- t_extro -->
289
289
  <g id="node22" class="node">
290
290
  <title>t_extro</title>
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>
291
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M676.88,-468.25C676.88,-468.25 568.62,-468.25 568.62,-468.25 562.62,-468.25 556.62,-462.25 556.62,-456.25 556.62,-456.25 556.62,-409.25 556.62,-409.25 556.62,-403.25 562.62,-397.25 568.62,-397.25 568.62,-397.25 676.88,-397.25 676.88,-397.25 682.88,-397.25 688.88,-403.25 688.88,-409.25 688.88,-409.25 688.88,-456.25 688.88,-456.25 688.88,-462.25 682.88,-468.25 676.88,-468.25"/>
292
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-455.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">extro_snapshot · drift</text>
293
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-445.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">observe · observations · intel</text>
294
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-434.7" 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="622.75" y="-424.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">serial · telecomm · packet</text>
296
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-413.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">vision · voice · correlate</text>
297
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-403.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · reset · auto_toggle</text>
298
298
  </g>
299
299
  <!-- extro&#45;&gt;t_extro -->
300
300
  <g id="edge21" class="edge">
301
301
  <title>extro&#45;&gt;t_extro</title>
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"/>
302
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M414.76,-448.03C449.86,-445.44 503.8,-441.46 547.81,-438.21"/>
303
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="547.73,-440.67 554.53,-437.71 547.37,-435.78 547.73,-440.67"/>
304
304
  </g>
305
305
  <!-- t_cron -->
306
306
  <g id="node23" class="node">
307
307
  <title>t_cron</title>
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>
308
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M670.12,-371.75C670.12,-371.75 575.38,-371.75 575.38,-371.75 569.38,-371.75 563.38,-365.75 563.38,-359.75 563.38,-359.75 563.38,-347.75 563.38,-347.75 563.38,-341.75 569.38,-335.75 575.38,-335.75 575.38,-335.75 670.12,-335.75 670.12,-335.75 676.12,-335.75 682.12,-341.75 682.12,-347.75 682.12,-347.75 682.12,-359.75 682.12,-359.75 682.12,-365.75 676.12,-371.75 670.12,-371.75"/>
309
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-355.7" font-family="sans-Serif" font-size="9.00" fill="#0f172a">cron_list · create · run</text>
310
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-345.2" font-family="sans-Serif" font-size="9.00" fill="#0f172a">enable · disable · remove</text>
311
311
  </g>
312
312
  <!-- cron&#45;&gt;t_cron -->
313
313
  <g id="edge22" class="edge">
314
314
  <title>cron&#45;&gt;t_cron</title>
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"/>
315
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-385.83C440.24,-380.55 504.93,-371 554.46,-363.68"/>
316
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="554.68,-366.13 561.25,-362.68 553.97,-361.28 554.68,-366.13"/>
317
317
  </g>
318
318
  <!-- t_swarm -->
319
319
  <g id="node24" class="node">
320
320
  <title>t_swarm</title>
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>
321
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M667.5,-310.5C667.5,-310.5 578,-310.5 578,-310.5 572,-310.5 566,-304.5 566,-298.5 566,-298.5 566,-283 566,-283 566,-277 572,-271 578,-271 578,-271 667.5,-271 667.5,-271 673.5,-271 679.5,-277 679.5,-283 679.5,-283 679.5,-298.5 679.5,-298.5 679.5,-304.5 673.5,-310.5 667.5,-310.5"/>
322
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-297.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">agent_list · spawn · ask</text>
323
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-287.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">debate · broadcast</text>
324
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-276.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">swarm_bus · swarm_list</text>
325
325
  </g>
326
326
  <!-- swarm&#45;&gt;t_swarm -->
327
327
  <g id="edge23" class="edge">
328
328
  <title>swarm&#45;&gt;t_swarm</title>
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"/>
329
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-324.61C440.82,-318.95 507.05,-308.63 556.88,-300.86"/>
330
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="557.17,-303.29 563.71,-299.8 556.41,-298.45 557.17,-303.29"/>
331
331
  </g>
332
332
  <!-- t_reward -->
333
333
  <g id="node25" class="node">
334
334
  <title>t_reward</title>
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>
335
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M665.25,-245.75C665.25,-245.75 580.25,-245.75 580.25,-245.75 574.25,-245.75 568.25,-239.75 568.25,-233.75 568.25,-233.75 568.25,-221.75 568.25,-221.75 568.25,-215.75 574.25,-209.75 580.25,-209.75 580.25,-209.75 665.25,-209.75 665.25,-209.75 671.25,-209.75 677.25,-215.75 677.25,-221.75 677.25,-221.75 677.25,-233.75 677.25,-233.75 677.25,-239.75 671.25,-245.75 665.25,-245.75"/>
336
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-224.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_generator_mix</text>
337
337
  </g>
338
338
  <!-- reward&#45;&gt;t_reward -->
339
339
  <g id="edge24" class="edge">
340
340
  <title>reward&#45;&gt;t_reward</title>
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"/>
341
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-263.39C441.41,-257.34 509.19,-246.22 559.27,-238"/>
342
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="559.62,-240.43 566.13,-236.87 558.82,-235.59 559.62,-240.43"/>
343
343
  </g>
344
344
  <!-- t_curric -->
345
345
  <g id="node26" class="node">
346
346
  <title>t_curric</title>
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>
347
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M667.5,-184.75C667.5,-184.75 578,-184.75 578,-184.75 572,-184.75 566,-178.75 566,-172.75 566,-172.75 566,-160.75 566,-160.75 566,-154.75 572,-148.75 578,-148.75 578,-148.75 667.5,-148.75 667.5,-148.75 673.5,-148.75 679.5,-154.75 679.5,-160.75 679.5,-160.75 679.5,-172.75 679.5,-172.75 679.5,-178.75 673.5,-184.75 667.5,-184.75"/>
348
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-163.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice_kpi</text>
349
349
  </g>
350
350
  <!-- curric&#45;&gt;t_curric -->
351
351
  <g id="edge26" class="edge">
352
352
  <title>curric&#45;&gt;t_curric</title>
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"/>
353
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M407.89,-201.84C444.83,-195.78 508.71,-185.3 557.07,-177.36"/>
354
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="557.45,-179.78 563.96,-176.23 556.65,-174.95 557.45,-179.78"/>
355
355
  </g>
356
356
  <!-- t_policy -->
357
357
  <g id="node27" class="node">
358
358
  <title>t_policy</title>
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>
359
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M657.75,-123.5C657.75,-123.5 587.75,-123.5 587.75,-123.5 581.75,-123.5 575.75,-117.5 575.75,-111.5 575.75,-111.5 575.75,-96 575.75,-96 575.75,-90 581.75,-84 587.75,-84 587.75,-84 657.75,-84 657.75,-84 663.75,-84 669.75,-90 669.75,-96 669.75,-96 669.75,-111.5 669.75,-111.5 669.75,-117.5 663.75,-123.5 657.75,-123.5"/>
360
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-110.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_stats</text>
361
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-100.45" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_evaluate</text>
362
+ <text xml:space="preserve" text-anchor="middle" x="622.75" y="-89.95" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_recommend</text>
363
363
  </g>
364
364
  <!-- policy&#45;&gt;t_policy -->
365
365
  <g id="edge25" class="edge">
366
366
  <title>policy&#45;&gt;t_policy</title>
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"/>
367
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M404.55,-141.17C443.35,-134.49 516.44,-121.89 567.05,-113.17"/>
368
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="567.16,-115.64 573.64,-112.04 566.32,-110.81 567.16,-115.64"/>
369
369
  </g>
370
370
  <!-- t_metric&#45;&gt;Registry -->
371
371
  <g id="edge27" class="edge">
372
372
  <title>t_metric&#45;&gt;Registry</title>
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>
373
+ <path fill="none" stroke="#fbbf24" stroke-width="1.1" stroke-dasharray="5,2" d="M578.2,-507.76C558.81,-503.79 537.21,-496 523,-480.75 398.46,-347.04 571.36,-194.04 428,-80.75 275.32,39.92 160.95,-326.88 124.67,-463.02"/>
374
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.1" points="122.34,-462.26 122.92,-469.66 127.08,-463.51 122.34,-462.26"/>
375
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-100.45" font-family="serif" font-size="14.00">success_rate</text>
376
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-83.95" font-family="serif" font-size="14.00">→ router tie&#45;break</text>
377
377
  </g>
378
378
  <!-- t_policy&#45;&gt;Registry -->
379
379
  <g id="edge28" class="edge">
380
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>
381
+ <path fill="none" stroke="#c4b5fd" stroke-width="1.1" stroke-dasharray="5,2" d="M596,-83.46C542.55,-44 417,34.78 326,-17.75 165.04,-110.64 125.32,-357.41 115.6,-462.86"/>
382
+ <polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="1.1" points="113.17,-462.56 115,-469.75 118.05,-462.99 113.17,-462.56"/>
383
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-37.45" font-family="serif" font-size="14.00">preference_order</text>
384
+ <text xml:space="preserve" text-anchor="middle" x="377" y="-20.95" font-family="serif" font-size="14.00">+ Q&#45;advantage</text>
385
385
  </g>
386
386
  </g>
387
387
  </svg>