pwn 0.5.780 → 0.5.781

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/documentation/AI-Integration.md +4 -4
  4. data/documentation/AWS.md +10 -9
  5. data/documentation/Agent-Tool-Registry.md +20 -17
  6. data/documentation/Blockchain.md +3 -2
  7. data/documentation/Bounty.md +8 -6
  8. data/documentation/BurpSuite.md +6 -10
  9. data/documentation/CLI-Drivers.md +7 -4
  10. data/documentation/Capability-Broker-Sandbox.md +1 -1
  11. data/documentation/Configuration.md +23 -15
  12. data/documentation/Contributing.md +3 -3
  13. data/documentation/Cron.md +3 -2
  14. data/documentation/Diagrams.md +9 -3
  15. data/documentation/Drivers.md +12 -6
  16. data/documentation/Extrospection.md +25 -5
  17. data/documentation/FFI.md +15 -25
  18. data/documentation/Fuzzing.md +13 -13
  19. data/documentation/General-PWN-Usage.md +7 -4
  20. data/documentation/Harness-Evaluation.md +90 -3
  21. data/documentation/Home.md +6 -5
  22. data/documentation/How-PWN-Works.md +9 -10
  23. data/documentation/Installation.md +12 -11
  24. data/documentation/Metasploit.md +13 -19
  25. data/documentation/Mistakes.md +2 -2
  26. data/documentation/NmapIt.md +6 -3
  27. data/documentation/Operability.md +99 -0
  28. data/documentation/Persistence.md +3 -2
  29. data/documentation/Plugin-Degradation.md +4 -2
  30. data/documentation/Plugins.md +4 -11
  31. data/documentation/Policy-Benchmark.md +4 -0
  32. data/documentation/Reinforcement-Learning.md +19 -3
  33. data/documentation/Reporting.md +6 -5
  34. data/documentation/SAST.md +15 -10
  35. data/documentation/SDR-Decoder-Coverage.md +10 -4
  36. data/documentation/SDR.md +28 -40
  37. data/documentation/Session-Workflow.md +25 -12
  38. data/documentation/Sessions.md +7 -0
  39. data/documentation/Skills-Memory-Learning.md +11 -4
  40. data/documentation/Swarm.md +6 -0
  41. data/documentation/Transparent-Browser.md +1 -1
  42. data/documentation/Troubleshooting.md +6 -3
  43. data/documentation/What-is-PWN.md +4 -4
  44. data/documentation/Why-PWN.md +1 -1
  45. data/documentation/diagrams/agent-tool-registry.svg +219 -180
  46. data/documentation/diagrams/ai-integration-tool-calling.svg +35 -34
  47. data/documentation/diagrams/code-scanning-sast.svg +78 -78
  48. data/documentation/diagrams/cron-scheduling.svg +165 -145
  49. data/documentation/diagrams/dot/_THEME.md +6 -4
  50. data/documentation/diagrams/dot/agent-tool-registry.dot +6 -2
  51. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +1 -1
  52. data/documentation/diagrams/dot/code-scanning-sast.dot +8 -8
  53. data/documentation/diagrams/dot/cron-scheduling.dot +2 -0
  54. data/documentation/diagrams/dot/driver-framework.dot +1 -1
  55. data/documentation/diagrams/dot/extrospection-world-awareness.dot +2 -2
  56. data/documentation/diagrams/dot/fuzzing-workflow.dot +3 -3
  57. data/documentation/diagrams/dot/history-to-drivers.dot +1 -1
  58. data/documentation/diagrams/dot/memory-skills-detailed.dot +3 -3
  59. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +2 -2
  60. data/documentation/diagrams/dot/overall-pwn-architecture.dot +33 -121
  61. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -2
  62. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  63. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +31 -167
  64. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +1 -1
  65. data/documentation/diagrams/dot/reinforcement-learning.dot +15 -7
  66. data/documentation/diagrams/dot/reporting-pipeline.dot +5 -3
  67. data/documentation/diagrams/dot/reverse-engineering-flow.dot +3 -3
  68. data/documentation/diagrams/dot/sdr-radio-flow.dot +5 -5
  69. data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
  70. data/documentation/diagrams/dot/swarm-multi-agent.dot +3 -3
  71. data/documentation/diagrams/dot/task-summarizer.dot +2 -2
  72. data/documentation/diagrams/dot/web-application-testing.dot +4 -3
  73. data/documentation/diagrams/dot/zero-day-research-flow.dot +4 -3
  74. data/documentation/diagrams/driver-framework.svg +1 -1
  75. data/documentation/diagrams/extrospection-world-awareness.svg +178 -178
  76. data/documentation/diagrams/fuzzing-workflow.svg +58 -58
  77. data/documentation/diagrams/history-to-drivers.svg +42 -42
  78. data/documentation/diagrams/memory-skills-detailed.svg +210 -210
  79. data/documentation/diagrams/mistakes-negative-feedback.svg +116 -116
  80. data/documentation/diagrams/overall-pwn-architecture.svg +248 -404
  81. data/documentation/diagrams/persistence-filesystem.svg +143 -143
  82. data/documentation/diagrams/plugin-ecosystem.svg +100 -100
  83. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +233 -752
  84. data/documentation/diagrams/pwn-repl-prototyping.svg +27 -27
  85. data/documentation/diagrams/reinforcement-learning.svg +295 -221
  86. data/documentation/diagrams/reporting-pipeline.svg +94 -80
  87. data/documentation/diagrams/reverse-engineering-flow.svg +31 -31
  88. data/documentation/diagrams/sdr-radio-flow.svg +157 -155
  89. data/documentation/diagrams/sessions-cron-automation.svg +13 -13
  90. data/documentation/diagrams/swarm-multi-agent.svg +86 -86
  91. data/documentation/diagrams/task-summarizer.svg +57 -57
  92. data/documentation/diagrams/web-application-testing.svg +81 -75
  93. data/documentation/diagrams/zero-day-research-flow.svg +101 -92
  94. data/documentation/pwn-REPL.md +5 -3
  95. data/documentation/pwn-ai-Agent.md +18 -14
  96. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  97. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +1 -0
  98. data/lib/pwn/ai/agent/learning.rb +46 -1
  99. data/lib/pwn/ai/agent/policy_evaluation.rb +5 -1
  100. data/lib/pwn/ai/agent/reward.rb +9 -0
  101. data/lib/pwn/version.rb +1 -1
  102. data/spec/fixtures/harness/completion_regressions.json +10 -0
  103. data/spec/fixtures/harness/completion_regressions.json.sha256 +1 -0
  104. data/spec/integration/harness_evaluation_spec.rb +13 -0
  105. data/spec/lib/pwn/ai/agent/learning_spec.rb +22 -0
  106. data/spec/lib/pwn/ai/agent/policy_evaluation_spec.rb +6 -1
  107. data/spec/lib/pwn/ai/agent/reward_spec.rb +21 -0
  108. data/spec/support/harness/evaluate.rb +1 -1
  109. data/third_party/pwn_rdoc.jsonl +2 -1
  110. metadata +8 -5
@@ -4,384 +4,423 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Agent_Tool_Registry Pages: 1 -->
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)">
7
+ <svg width="822pt" height="1308pt"
8
+ viewBox="0.00 0.00 822.00 1308.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 1264.84)">
10
10
  <title>PWN_Agent_Tool_Registry</title>
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>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1264.84 778.95,-1264.84 778.95,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="102.38" y="-1199.64" 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="237.75" y="-1188.19" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">16 toolsets · 150 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="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>
16
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M330,-129.64C330,-129.64 436.25,-129.64 436.25,-129.64 442.25,-129.64 448.25,-135.64 448.25,-141.64 448.25,-141.64 448.25,-1115.64 448.25,-1115.64 448.25,-1121.64 442.25,-1127.64 436.25,-1127.64 436.25,-1127.64 330,-1127.64 330,-1127.64 324,-1127.64 318,-1121.64 318,-1115.64 318,-1115.64 318,-141.64 318,-141.64 318,-135.64 324,-129.64 330,-129.64"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-1104.64" 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="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>
21
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M547.25,-268.64C547.25,-268.64 723.75,-268.64 723.75,-268.64 729.75,-268.64 735.75,-274.64 735.75,-280.64 735.75,-280.64 735.75,-1162.64 735.75,-1162.64 735.75,-1168.64 729.75,-1174.64 723.75,-1174.64 723.75,-1174.64 547.25,-1174.64 547.25,-1174.64 541.25,-1174.64 535.25,-1168.64 535.25,-1162.64 535.25,-1162.64 535.25,-280.64 535.25,-280.64 535.25,-274.64 541.25,-268.64 547.25,-268.64"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="635.5" y="-1151.64" 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="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>
27
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M211,-644.26C211,-644.26 12,-644.26 12,-644.26 6,-644.26 0,-638.26 0,-632.26 0,-632.26 0,-577.01 0,-577.01 0,-571.01 6,-565.01 12,-565.01 12,-565.01 211,-565.01 211,-565.01 217,-565.01 223,-571.01 223,-577.01 223,-577.01 223,-632.26 223,-632.26 223,-638.26 217,-644.26 211,-644.26"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="111.5" y="-628.86" font-family="sans-Serif" font-size="12.00" fill="#0f172a">Registry</text>
29
+ <text xml:space="preserve" text-anchor="middle" x="111.5" y="-614.61" 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="-600.36" 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="-586.11" 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="-571.86" 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="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>
37
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-1088.64C398.12,-1088.64 368.12,-1088.64 368.12,-1088.64 362.12,-1088.64 356.12,-1082.64 356.12,-1076.64 356.12,-1076.64 356.12,-1064.64 356.12,-1064.64 356.12,-1058.64 362.12,-1052.64 368.12,-1052.64 368.12,-1052.64 398.12,-1052.64 398.12,-1052.64 404.12,-1052.64 410.12,-1058.64 410.12,-1064.64 410.12,-1064.64 410.12,-1076.64 410.12,-1076.64 410.12,-1082.64 404.12,-1088.64 398.12,-1088.64"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-1067.14" 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="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"/>
43
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M121.44,-645.07C142,-729.3 200.18,-925.34 318,-1040.64 326.33,-1048.79 337.29,-1055.02 347.78,-1059.63"/>
44
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.72,-1061.85 354.13,-1062.22 348.57,-1057.31 346.72,-1061.85"/>
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="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>
49
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.13,-1027.64C398.13,-1027.64 368.12,-1027.64 368.12,-1027.64 362.12,-1027.64 356.12,-1021.64 356.12,-1015.64 356.12,-1015.64 356.12,-1003.64 356.12,-1003.64 356.12,-997.64 362.12,-991.64 368.12,-991.64 368.12,-991.64 398.13,-991.64 398.13,-991.64 404.12,-991.64 410.12,-997.64 410.12,-1003.64 410.12,-1003.64 410.12,-1015.64 410.12,-1015.64 410.12,-1021.64 404.12,-1027.64 398.13,-1027.64"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-1006.14" 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="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"/>
55
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M125.22,-645.24C150.6,-720.36 214.19,-882.24 318,-979.64 326.43,-987.55 337.32,-993.69 347.72,-998.31"/>
56
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.59,-1000.49 353.99,-1000.9 348.46,-995.96 346.59,-1000.49"/>
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="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>
61
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-966.64C398.12,-966.64 368.12,-966.64 368.12,-966.64 362.12,-966.64 356.12,-960.64 356.12,-954.64 356.12,-954.64 356.12,-942.64 356.12,-942.64 356.12,-936.64 362.12,-930.64 368.12,-930.64 368.12,-930.64 398.12,-930.64 398.12,-930.64 404.12,-930.64 410.12,-936.64 410.12,-942.64 410.12,-942.64 410.12,-954.64 410.12,-954.64 410.12,-960.64 404.12,-966.64 398.12,-966.64"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-945.14" 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="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"/>
67
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M130.02,-645.21C159.99,-710.51 226.82,-839.56 318,-918.64 326.66,-926.15 337.51,-932.17 347.82,-936.78"/>
68
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.61,-938.93 354.01,-939.4 348.52,-934.42 346.61,-938.93"/>
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="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>
73
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-905.64C398.12,-905.64 368.12,-905.64 368.12,-905.64 362.12,-905.64 356.12,-899.64 356.12,-893.64 356.12,-893.64 356.12,-881.64 356.12,-881.64 356.12,-875.64 362.12,-869.64 368.12,-869.64 368.12,-869.64 398.12,-869.64 398.12,-869.64 404.12,-869.64 410.12,-875.64 410.12,-881.64 410.12,-881.64 410.12,-893.64 410.12,-893.64 410.12,-899.64 404.12,-905.64 398.12,-905.64"/>
74
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-884.14" 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="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"/>
79
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M136.87,-644.9C171.43,-699.19 239.29,-796.16 318,-857.64 326.87,-864.56 337.59,-870.37 347.71,-874.98"/>
80
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.72,-877.22 354.12,-877.75 348.67,-872.72 346.72,-877.22"/>
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="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>
85
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.62,-844.64C398.62,-844.64 367.62,-844.64 367.62,-844.64 361.62,-844.64 355.62,-838.64 355.62,-832.64 355.62,-832.64 355.62,-820.64 355.62,-820.64 355.62,-814.64 361.62,-808.64 367.62,-808.64 367.62,-808.64 398.62,-808.64 398.62,-808.64 404.62,-808.64 410.62,-814.64 410.62,-820.64 410.62,-820.64 410.62,-832.64 410.62,-832.64 410.62,-838.64 404.62,-844.64 398.62,-844.64"/>
86
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-823.14" 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="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"/>
91
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M148.41,-644.98C187.19,-686.82 252.27,-752.2 318,-796.64 327.08,-802.78 337.61,-808.28 347.49,-812.84"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.31,-815 353.7,-815.62 348.31,-810.53 346.31,-815"/>
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="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>
97
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-783.64C398.12,-783.64 368.12,-783.64 368.12,-783.64 362.12,-783.64 356.12,-777.64 356.12,-771.64 356.12,-771.64 356.12,-759.64 356.12,-759.64 356.12,-753.64 362.12,-747.64 368.12,-747.64 368.12,-747.64 398.12,-747.64 398.12,-747.64 404.12,-747.64 410.12,-753.64 410.12,-759.64 410.12,-759.64 410.12,-771.64 410.12,-771.64 410.12,-777.64 404.12,-783.64 398.12,-783.64"/>
98
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-762.14" 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="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"/>
103
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M171.5,-645.14C211.92,-672.17 267.2,-707.72 318,-735.64 327.52,-740.87 338.11,-746.07 347.89,-750.63"/>
104
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.64,-752.75 354.02,-753.44 348.68,-748.29 346.64,-752.75"/>
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="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>
109
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-722.64C398.12,-722.64 368.12,-722.64 368.12,-722.64 362.12,-722.64 356.12,-716.64 356.12,-710.64 356.12,-710.64 356.12,-698.64 356.12,-698.64 356.12,-692.64 362.12,-686.64 368.12,-686.64 368.12,-686.64 398.12,-686.64 398.12,-686.64 404.12,-686.64 410.12,-692.64 410.12,-698.64 410.12,-698.64 410.12,-710.64 410.12,-710.64 410.12,-716.64 404.12,-722.64 398.12,-722.64"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-701.14" 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="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"/>
115
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M221.78,-645.17C266.8,-661.87 315.77,-680.03 347.59,-691.83"/>
116
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="346.72,-694.12 354.14,-694.26 348.42,-689.53 346.72,-694.12"/>
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="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>
121
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M408.38,-661.64C408.38,-661.64 357.88,-661.64 357.88,-661.64 351.88,-661.64 345.88,-655.64 345.88,-649.64 345.88,-649.64 345.88,-637.64 345.88,-637.64 345.88,-631.64 351.88,-625.64 357.88,-625.64 357.88,-625.64 408.38,-625.64 408.38,-625.64 414.38,-625.64 420.38,-631.64 420.38,-637.64 420.38,-637.64 420.38,-649.64 420.38,-649.64 420.38,-655.64 414.38,-661.64 408.38,-661.64"/>
122
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-640.14" 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="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"/>
127
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.72,-620.73C263.5,-626.48 306.11,-632.64 337.1,-637.13"/>
128
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="336.6,-639.53 343.88,-638.11 337.3,-634.68 336.6,-639.53"/>
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="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>
133
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-600.64C398.12,-600.64 368.12,-600.64 368.12,-600.64 362.12,-600.64 356.12,-594.64 356.12,-588.64 356.12,-588.64 356.12,-576.64 356.12,-576.64 356.12,-570.64 362.12,-564.64 368.12,-564.64 368.12,-564.64 398.12,-564.64 398.12,-564.64 404.12,-564.64 410.12,-570.64 410.12,-576.64 410.12,-576.64 410.12,-588.64 410.12,-588.64 410.12,-594.64 404.12,-600.64 398.12,-600.64"/>
134
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-579.14" 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="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"/>
139
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.72,-595.56C268.01,-591.95 315.8,-588.05 347.17,-585.49"/>
140
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="347.13,-587.95 353.91,-584.94 346.73,-583.07 347.13,-587.95"/>
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="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>
145
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-539.64C398.12,-539.64 368.12,-539.64 368.12,-539.64 362.12,-539.64 356.12,-533.64 356.12,-527.64 356.12,-527.64 356.12,-515.64 356.12,-515.64 356.12,-509.64 362.12,-503.64 368.12,-503.64 368.12,-503.64 398.12,-503.64 398.12,-503.64 404.12,-503.64 410.12,-509.64 410.12,-515.64 410.12,-515.64 410.12,-527.64 410.12,-527.64 410.12,-533.64 404.12,-539.64 398.12,-539.64"/>
146
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-518.14" 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="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"/>
151
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M223.72,-570.4C268.2,-556.71 316.21,-541.93 347.57,-532.28"/>
152
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="348.01,-534.71 353.98,-530.3 346.57,-530.02 348.01,-534.71"/>
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="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>
157
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-478.64C398.12,-478.64 368.12,-478.64 368.12,-478.64 362.12,-478.64 356.12,-472.64 356.12,-466.64 356.12,-466.64 356.12,-454.64 356.12,-454.64 356.12,-448.64 362.12,-442.64 368.12,-442.64 368.12,-442.64 398.12,-442.64 398.12,-442.64 404.12,-442.64 410.12,-448.64 410.12,-454.64 410.12,-454.64 410.12,-466.64 410.12,-466.64 410.12,-472.64 404.12,-478.64 398.12,-478.64"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-457.14" 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="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"/>
163
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M183.81,-564.23C223.12,-542.25 272.96,-514.89 318,-491.64 327.71,-486.63 338.36,-481.38 348.14,-476.66"/>
164
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="349.01,-478.96 354.26,-473.72 346.89,-474.54 349.01,-478.96"/>
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="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>
169
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M401.62,-417.64C401.62,-417.64 364.62,-417.64 364.62,-417.64 358.62,-417.64 352.62,-411.64 352.62,-405.64 352.62,-405.64 352.62,-393.64 352.62,-393.64 352.62,-387.64 358.62,-381.64 364.62,-381.64 364.62,-381.64 401.62,-381.64 401.62,-381.64 407.62,-381.64 413.62,-387.64 413.62,-393.64 413.62,-393.64 413.62,-405.64 413.62,-405.64 413.62,-411.64 407.62,-417.64 401.62,-417.64"/>
170
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-396.14" 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="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"/>
175
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M153.7,-564.29C193.52,-526.66 256.66,-470.52 318,-430.64 326.26,-425.27 335.59,-420.24 344.52,-415.86"/>
176
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="345.46,-418.12 350.73,-412.9 343.36,-413.7 345.46,-418.12"/>
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="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>
181
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M398.12,-356.64C398.12,-356.64 368.12,-356.64 368.12,-356.64 362.12,-356.64 356.12,-350.64 356.12,-344.64 356.12,-344.64 356.12,-332.64 356.12,-332.64 356.12,-326.64 362.12,-320.64 368.12,-320.64 368.12,-320.64 398.12,-320.64 398.12,-320.64 404.12,-320.64 410.12,-326.64 410.12,-332.64 410.12,-332.64 410.12,-344.64 410.12,-344.64 410.12,-350.64 404.12,-356.64 398.12,-356.64"/>
182
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-335.14" 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="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"/>
187
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M140.1,-564.03C176.19,-513.31 243.65,-426.31 318,-369.64 326.92,-362.84 337.58,-356.96 347.62,-352.21"/>
188
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="348.6,-354.45 353.97,-349.33 346.58,-349.99 348.6,-354.45"/>
189
189
  </g>
190
- <!-- t_shell -->
190
+ <!-- http -->
191
191
  <g id="node15" class="node">
192
+ <title>http</title>
193
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M428.25,-295.64C428.25,-295.64 338,-295.64 338,-295.64 332,-295.64 326,-289.64 326,-283.64 326,-283.64 326,-271.64 326,-271.64 326,-265.64 332,-259.64 338,-259.64 338,-259.64 428.25,-259.64 428.25,-259.64 434.25,-259.64 440.25,-265.64 440.25,-271.64 440.25,-271.64 440.25,-283.64 440.25,-283.64 440.25,-289.64 434.25,-295.64 428.25,-295.64"/>
194
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-280.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">http</text>
195
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-268.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">proxy lifecycle / replay</text>
196
+ </g>
197
+ <!-- Registry&#45;&gt;http -->
198
+ <g id="edge14" class="edge">
199
+ <title>Registry&#45;&gt;http</title>
200
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M132,-564.05C163.54,-501.99 231.08,-382.91 318,-308.64 321.41,-305.73 325.14,-303.02 329.03,-300.51"/>
201
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="330,-302.79 334.74,-297.08 327.48,-298.59 330,-302.79"/>
202
+ </g>
203
+ <!-- mcp -->
204
+ <g id="node16" class="node">
205
+ <title>mcp</title>
206
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M412.5,-234.64C412.5,-234.64 353.75,-234.64 353.75,-234.64 347.75,-234.64 341.75,-228.64 341.75,-222.64 341.75,-222.64 341.75,-210.64 341.75,-210.64 341.75,-204.64 347.75,-198.64 353.75,-198.64 353.75,-198.64 412.5,-198.64 412.5,-198.64 418.5,-198.64 424.5,-204.64 424.5,-210.64 424.5,-210.64 424.5,-222.64 424.5,-222.64 424.5,-228.64 418.5,-234.64 412.5,-234.64"/>
207
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-219.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mcp</text>
208
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-207.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">backend broker</text>
209
+ </g>
210
+ <!-- Registry&#45;&gt;mcp -->
211
+ <g id="edge15" class="edge">
212
+ <title>Registry&#45;&gt;mcp</title>
213
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M126.6,-564.14C153.51,-492.02 218.52,-340.2 318,-247.64 322.71,-243.26 328.15,-239.38 333.84,-235.97"/>
214
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="334.75,-238.27 339.68,-232.72 332.37,-233.99 334.75,-238.27"/>
215
+ </g>
216
+ <!-- manifest -->
217
+ <g id="node17" class="node">
218
+ <title>manifest</title>
219
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M419.25,-173.64C419.25,-173.64 347,-173.64 347,-173.64 341,-173.64 335,-167.64 335,-161.64 335,-161.64 335,-149.64 335,-149.64 335,-143.64 341,-137.64 347,-137.64 347,-137.64 419.25,-137.64 419.25,-137.64 425.25,-137.64 431.25,-143.64 431.25,-149.64 431.25,-149.64 431.25,-161.64 431.25,-161.64 431.25,-167.64 425.25,-173.64 419.25,-173.64"/>
220
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-158.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">manifest</text>
221
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-146.14" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML declarations</text>
222
+ </g>
223
+ <!-- Registry&#45;&gt;manifest -->
224
+ <g id="edge16" class="edge">
225
+ <title>Registry&#45;&gt;manifest</title>
226
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M122.72,-564.31C145.14,-483.08 205.84,-298.06 318,-186.64 320.86,-183.79 324.04,-181.17 327.41,-178.76"/>
227
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="328.62,-180.89 333.14,-175.01 325.94,-176.79 328.62,-180.89"/>
228
+ </g>
229
+ <!-- t_shell -->
230
+ <g id="node18" class="node">
192
231
  <title>t_shell</title>
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>
232
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M701.5,-1135.64C701.5,-1135.64 568.5,-1135.64 568.5,-1135.64 562.5,-1135.64 556.5,-1129.64 556.5,-1123.64 556.5,-1123.64 556.5,-1111.64 556.5,-1111.64 556.5,-1105.64 562.5,-1099.64 568.5,-1099.64 568.5,-1099.64 701.5,-1099.64 701.5,-1099.64 707.5,-1099.64 713.5,-1105.64 713.5,-1111.64 713.5,-1111.64 713.5,-1123.64 713.5,-1123.64 713.5,-1129.64 707.5,-1135.64 701.5,-1135.64"/>
233
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-1119.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">shell · job_run/status/tail/result/kill</text>
234
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-1109.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(runtime permissions + ToolGuard)</text>
196
235
  </g>
197
236
  <!-- terminal&#45;&gt;t_shell -->
198
- <g id="edge14" class="edge">
237
+ <g id="edge17" class="edge">
199
238
  <title>terminal&#45;&gt;t_shell</title>
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"/>
239
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-1075.58C442.79,-1081.67 499.49,-1092.34 547.68,-1101.4"/>
240
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="546.98,-1103.77 554.32,-1102.65 547.89,-1098.95 546.98,-1103.77"/>
202
241
  </g>
203
242
  <!-- t_eval -->
204
- <g id="node16" class="node">
243
+ <g id="node19" class="node">
205
244
  <title>t_eval</title>
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>
245
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M655.38,-1074.64C655.38,-1074.64 614.62,-1074.64 614.62,-1074.64 608.62,-1074.64 602.62,-1068.64 602.62,-1062.64 602.62,-1062.64 602.62,-1050.64 602.62,-1050.64 602.62,-1044.64 608.62,-1038.64 614.62,-1038.64 614.62,-1038.64 655.38,-1038.64 655.38,-1038.64 661.38,-1038.64 667.38,-1044.64 667.38,-1050.64 667.38,-1050.64 667.38,-1062.64 667.38,-1062.64 667.38,-1068.64 661.38,-1074.64 655.38,-1074.64"/>
246
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-1058.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">pwn_eval</text>
247
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-1048.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">(ToolGuard)</text>
209
248
  </g>
210
249
  <!-- pwn&#45;&gt;t_eval -->
211
- <g id="edge15" class="edge">
250
+ <g id="edge18" class="edge">
212
251
  <title>pwn&#45;&gt;t_eval</title>
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"/>
252
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-1014.58C454.19,-1022.82 542.41,-1039.41 593.98,-1049.11"/>
253
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="593.27,-1051.47 600.6,-1050.36 594.17,-1046.66 593.27,-1051.47"/>
215
254
  </g>
216
255
  <!-- t_mem -->
217
- <g id="node17" class="node">
256
+ <g id="node20" class="node">
218
257
  <title>t_mem</title>
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>
258
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M671.12,-1013.39C671.12,-1013.39 598.88,-1013.39 598.88,-1013.39 592.88,-1013.39 586.88,-1007.39 586.88,-1001.39 586.88,-1001.39 586.88,-985.89 586.88,-985.89 586.88,-979.89 592.88,-973.89 598.88,-973.89 598.88,-973.89 671.12,-973.89 671.12,-973.89 677.12,-973.89 683.12,-979.89 683.12,-985.89 683.12,-985.89 683.12,-1001.39 683.12,-1001.39 683.12,-1007.39 677.12,-1013.39 671.12,-1013.39"/>
259
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-1000.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">memory_remember</text>
260
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-990.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">recall · forget · clear</text>
261
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-979.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">lean</text>
223
262
  </g>
224
263
  <!-- memory&#45;&gt;t_mem -->
225
- <g id="edge16" class="edge">
264
+ <g id="edge19" class="edge">
226
265
  <title>memory&#45;&gt;t_mem</title>
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"/>
266
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-953.37C449.92,-960.49 525.62,-974.12 577.91,-983.54"/>
267
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="577.46,-985.95 584.78,-984.78 578.32,-981.12 577.46,-985.95"/>
229
268
  </g>
230
269
  <!-- t_skill -->
231
- <g id="node18" class="node">
270
+ <g id="node21" class="node">
232
271
  <title>t_skill</title>
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>
272
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M689.88,-948.39C689.88,-948.39 580.12,-948.39 580.12,-948.39 574.12,-948.39 568.12,-942.39 568.12,-936.39 568.12,-936.39 568.12,-920.89 568.12,-920.89 568.12,-914.89 574.12,-908.89 580.12,-908.89 580.12,-908.89 689.88,-908.89 689.88,-908.89 695.88,-908.89 701.88,-914.89 701.88,-920.89 701.88,-920.89 701.88,-936.39 701.88,-936.39 701.88,-942.39 695.88,-948.39 689.88,-948.39"/>
273
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-935.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">skills_recall · skill_list</text>
274
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-925.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">view · create · add_reference</text>
275
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-914.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">delete · migrate_legacy</text>
237
276
  </g>
238
277
  <!-- skills&#45;&gt;t_skill -->
239
- <g id="edge17" class="edge">
278
+ <g id="edge20" class="edge">
240
279
  <title>skills&#45;&gt;t_skill</title>
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"/>
280
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-891.95C445.47,-897.7 509.03,-908.13 559.44,-916.41"/>
281
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="558.78,-918.78 566.09,-917.5 559.58,-913.95 558.78,-918.78"/>
243
282
  </g>
244
283
  <!-- t_sess -->
245
- <g id="node19" class="node">
284
+ <g id="node22" class="node">
246
285
  <title>t_sess</title>
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>
286
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M690.25,-883.39C690.25,-883.39 579.75,-883.39 579.75,-883.39 573.75,-883.39 567.75,-877.39 567.75,-871.39 567.75,-871.39 567.75,-855.89 567.75,-855.89 567.75,-849.89 573.75,-843.89 579.75,-843.89 579.75,-843.89 690.25,-843.89 690.25,-843.89 696.25,-843.89 702.25,-849.89 702.25,-855.89 702.25,-855.89 702.25,-871.39 702.25,-871.39 702.25,-877.39 696.25,-883.39 690.25,-883.39"/>
287
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-870.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">session_recall · sessions_list</text>
288
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-860.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">view · current · delete</text>
289
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-849.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · lean</text>
251
290
  </g>
252
291
  <!-- sessions&#45;&gt;t_sess -->
253
- <g id="edge18" class="edge">
292
+ <g id="edge21" class="edge">
254
293
  <title>sessions&#45;&gt;t_sess</title>
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"/>
294
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.87,-830.6C445.86,-835.78 508.61,-845.07 558.67,-852.49"/>
295
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="558.29,-854.91 565.58,-853.51 559.01,-850.06 558.29,-854.91"/>
257
296
  </g>
258
297
  <!-- t_learn -->
259
- <g id="node20" class="node">
298
+ <g id="node23" class="node">
260
299
  <title>t_learn</title>
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>
300
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M690.25,-819.14C690.25,-819.14 579.75,-819.14 579.75,-819.14 573.75,-819.14 567.75,-813.14 567.75,-807.14 567.75,-807.14 567.75,-760.14 567.75,-760.14 567.75,-754.14 573.75,-748.14 579.75,-748.14 579.75,-748.14 690.25,-748.14 690.25,-748.14 696.25,-748.14 702.25,-754.14 702.25,-760.14 702.25,-760.14 702.25,-807.14 702.25,-807.14 702.25,-813.14 696.25,-819.14 690.25,-819.14"/>
301
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-806.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">learning_* · mistakes_*</text>
302
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-796.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_judge · prm · sentinel</text>
303
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-785.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">export_dpo · scrub · balance</text>
304
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-775.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice · train</text>
305
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-764.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">hindsight · offline_judge</text>
306
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-754.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">gc_stores · lean helpers</text>
268
307
  </g>
269
308
  <!-- learning&#45;&gt;t_learn -->
270
- <g id="edge19" class="edge">
309
+ <g id="edge22" class="edge">
271
310
  <title>learning&#45;&gt;t_learn</title>
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"/>
311
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-767.53C445.28,-770.04 508.34,-774.59 558.62,-778.21"/>
312
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="558.39,-780.65 565.54,-778.71 558.74,-775.76 558.39,-780.65"/>
274
313
  </g>
275
314
  <!-- t_metric -->
276
- <g id="node21" class="node">
315
+ <g id="node24" class="node">
277
316
  <title>t_metric</title>
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>
317
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M667,-722.64C667,-722.64 603,-722.64 603,-722.64 597,-722.64 591,-716.64 591,-710.64 591,-710.64 591,-698.64 591,-698.64 591,-692.64 597,-686.64 603,-686.64 603,-686.64 667,-686.64 667,-686.64 673,-686.64 679,-692.64 679,-698.64 679,-698.64 679,-710.64 679,-710.64 679,-716.64 673,-722.64 667,-722.64"/>
318
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-706.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_summary</text>
319
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-696.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">metrics_reset</text>
281
320
  </g>
282
321
  <!-- metrics&#45;&gt;t_metric -->
283
- <g id="edge20" class="edge">
322
+ <g id="edge23" class="edge">
284
323
  <title>metrics&#45;&gt;t_metric</title>
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"/>
324
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-704.64C450.99,-704.64 529.73,-704.64 582.1,-704.64"/>
325
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="581.92,-707.09 588.92,-704.64 581.92,-702.19 581.92,-707.09"/>
287
326
  </g>
288
327
  <!-- t_extro -->
289
- <g id="node22" class="node">
328
+ <g id="node25" class="node">
290
329
  <title>t_extro</title>
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>
330
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M689.12,-661.14C689.12,-661.14 580.88,-661.14 580.88,-661.14 574.88,-661.14 568.88,-655.14 568.88,-649.14 568.88,-649.14 568.88,-602.14 568.88,-602.14 568.88,-596.14 574.88,-590.14 580.88,-590.14 580.88,-590.14 689.12,-590.14 689.12,-590.14 695.12,-590.14 701.12,-596.14 701.12,-602.14 701.12,-602.14 701.12,-649.14 701.12,-649.14 701.12,-655.14 695.12,-661.14 689.12,-661.14"/>
331
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-648.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">extro_snapshot · drift</text>
332
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-638.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">observe · observations · intel</text>
333
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-627.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">watch · verify · rf_tune · osint</text>
334
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-617.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">serial · telecomm · packet</text>
335
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-606.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">vision · voice · correlate</text>
336
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-596.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">stats · reset · auto_toggle</text>
298
337
  </g>
299
338
  <!-- extro&#45;&gt;t_extro -->
300
- <g id="edge21" class="edge">
339
+ <g id="edge24" class="edge">
301
340
  <title>extro&#45;&gt;t_extro</title>
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"/>
341
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M420.99,-640.98C457.42,-638.36 514.16,-634.27 559.92,-630.98"/>
342
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="559.87,-633.44 566.67,-630.49 559.51,-628.55 559.87,-633.44"/>
304
343
  </g>
305
344
  <!-- t_cron -->
306
- <g id="node23" class="node">
345
+ <g id="node26" class="node">
307
346
  <title>t_cron</title>
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>
347
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M682.38,-564.64C682.38,-564.64 587.62,-564.64 587.62,-564.64 581.62,-564.64 575.62,-558.64 575.62,-552.64 575.62,-552.64 575.62,-540.64 575.62,-540.64 575.62,-534.64 581.62,-528.64 587.62,-528.64 587.62,-528.64 682.38,-528.64 682.38,-528.64 688.38,-528.64 694.38,-534.64 694.38,-540.64 694.38,-540.64 694.38,-552.64 694.38,-552.64 694.38,-558.64 688.38,-564.64 682.38,-564.64"/>
348
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-548.59" font-family="sans-Serif" font-size="9.00" fill="#0f172a">cron_list · create · run</text>
349
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-538.09" font-family="sans-Serif" font-size="9.00" fill="#0f172a">enable · disable · remove</text>
311
350
  </g>
312
351
  <!-- cron&#45;&gt;t_cron -->
313
- <g id="edge22" class="edge">
352
+ <g id="edge25" class="edge">
314
353
  <title>cron&#45;&gt;t_cron</title>
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"/>
354
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-578.86C447.19,-573.55 515.33,-563.74 566.76,-556.33"/>
355
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="566.96,-558.77 573.54,-555.35 566.26,-553.92 566.96,-558.77"/>
317
356
  </g>
318
357
  <!-- t_swarm -->
319
- <g id="node24" class="node">
358
+ <g id="node27" class="node">
320
359
  <title>t_swarm</title>
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>
360
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M679.75,-503.39C679.75,-503.39 590.25,-503.39 590.25,-503.39 584.25,-503.39 578.25,-497.39 578.25,-491.39 578.25,-491.39 578.25,-475.89 578.25,-475.89 578.25,-469.89 584.25,-463.89 590.25,-463.89 590.25,-463.89 679.75,-463.89 679.75,-463.89 685.75,-463.89 691.75,-469.89 691.75,-475.89 691.75,-475.89 691.75,-491.39 691.75,-491.39 691.75,-497.39 685.75,-503.39 679.75,-503.39"/>
361
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-490.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">agent_list · spawn · ask</text>
362
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-480.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">debate · broadcast</text>
363
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-469.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">swarm_bus · swarm_list</text>
325
364
  </g>
326
365
  <!-- swarm&#45;&gt;t_swarm -->
327
- <g id="edge23" class="edge">
366
+ <g id="edge26" class="edge">
328
367
  <title>swarm&#45;&gt;t_swarm</title>
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"/>
368
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-517.64C447.78,-511.96 517.54,-501.35 569.24,-493.49"/>
369
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="569.5,-495.93 576.05,-492.45 568.76,-491.08 569.5,-495.93"/>
331
370
  </g>
332
371
  <!-- t_reward -->
333
- <g id="node25" class="node">
372
+ <g id="node28" class="node">
334
373
  <title>t_reward</title>
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>
374
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M677.5,-438.64C677.5,-438.64 592.5,-438.64 592.5,-438.64 586.5,-438.64 580.5,-432.64 580.5,-426.64 580.5,-426.64 580.5,-414.64 580.5,-414.64 580.5,-408.64 586.5,-402.64 592.5,-402.64 592.5,-402.64 677.5,-402.64 677.5,-402.64 683.5,-402.64 689.5,-408.64 689.5,-414.64 689.5,-414.64 689.5,-426.64 689.5,-426.64 689.5,-432.64 683.5,-438.64 677.5,-438.64"/>
375
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-417.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">reward_generator_mix</text>
337
376
  </g>
338
377
  <!-- reward&#45;&gt;t_reward -->
339
- <g id="edge24" class="edge">
378
+ <g id="edge27" class="edge">
340
379
  <title>reward&#45;&gt;t_reward</title>
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"/>
380
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-456.43C448.38,-450.35 519.76,-438.93 571.68,-430.62"/>
381
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="572,-433.05 578.52,-429.52 571.22,-428.21 572,-433.05"/>
343
382
  </g>
344
383
  <!-- t_curric -->
345
- <g id="node26" class="node">
384
+ <g id="node29" class="node">
346
385
  <title>t_curric</title>
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>
386
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M679.75,-377.64C679.75,-377.64 590.25,-377.64 590.25,-377.64 584.25,-377.64 578.25,-371.64 578.25,-365.64 578.25,-365.64 578.25,-353.64 578.25,-353.64 578.25,-347.64 584.25,-341.64 590.25,-341.64 590.25,-341.64 679.75,-341.64 679.75,-341.64 685.75,-341.64 691.75,-347.64 691.75,-353.64 691.75,-353.64 691.75,-365.64 691.75,-365.64 691.75,-371.64 685.75,-377.64 679.75,-377.64"/>
387
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-356.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">curriculum_practice_kpi</text>
349
388
  </g>
350
389
  <!-- curric&#45;&gt;t_curric -->
351
- <g id="edge26" class="edge">
390
+ <g id="edge29" class="edge">
352
391
  <title>curric&#45;&gt;t_curric</title>
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"/>
392
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M414.27,-394.81C452.43,-388.71 519.21,-378.01 569.17,-370.02"/>
393
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="569.49,-372.45 576.02,-368.92 568.72,-367.61 569.49,-372.45"/>
355
394
  </g>
356
395
  <!-- t_policy -->
357
- <g id="node27" class="node">
396
+ <g id="node30" class="node">
358
397
  <title>t_policy</title>
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>
398
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M670,-316.39C670,-316.39 600,-316.39 600,-316.39 594,-316.39 588,-310.39 588,-304.39 588,-304.39 588,-288.89 588,-288.89 588,-282.89 594,-276.89 600,-276.89 600,-276.89 670,-276.89 670,-276.89 676,-276.89 682,-282.89 682,-288.89 682,-288.89 682,-304.39 682,-304.39 682,-310.39 676,-316.39 670,-316.39"/>
399
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-303.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_stats</text>
400
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-293.34" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_evaluate</text>
401
+ <text xml:space="preserve" text-anchor="middle" x="635" y="-282.84" font-family="sans-Serif" font-size="9.00" fill="#0f172a">policy_recommend</text>
363
402
  </g>
364
403
  <!-- policy&#45;&gt;t_policy -->
365
- <g id="edge25" class="edge">
404
+ <g id="edge28" class="edge">
366
405
  <title>policy&#45;&gt;t_policy</title>
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"/>
406
+ <path fill="none" stroke="#f59e0b" stroke-width="1.1" d="M410.39,-334.22C450.16,-327.54 526.53,-314.7 578.85,-305.91"/>
407
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.1" points="579.22,-308.33 585.71,-304.76 578.41,-303.5 579.22,-308.33"/>
369
408
  </g>
370
409
  <!-- t_metric&#45;&gt;Registry -->
371
- <g id="edge27" class="edge">
410
+ <g id="edge30" class="edge">
372
411
  <title>t_metric&#45;&gt;Registry</title>
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>
412
+ <path fill="none" stroke="#fbbf24" stroke-width="1.1" stroke-dasharray="5,2" d="M590.36,-701.28C570.71,-697.47 548.91,-689.62 535.25,-673.64 450.13,-574.08 547.47,-176.16 448.25,-90.64 275.31,58.41 156.71,-401.82 122.6,-556.08"/>
413
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.1" points="120.22,-555.51 121.11,-562.87 125,-556.56 120.22,-555.51"/>
414
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-110.34" font-family="serif" font-size="14.00">success_rate</text>
415
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-93.84" font-family="serif" font-size="14.00">→ router tie&#45;break</text>
377
416
  </g>
378
417
  <!-- t_policy&#45;&gt;Registry -->
379
- <g id="edge28" class="edge">
418
+ <g id="edge31" class="edge">
380
419
  <title>t_policy&#45;&gt;Registry</title>
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>
420
+ <path fill="none" stroke="#c4b5fd" stroke-width="1.1" stroke-dasharray="5,2" d="M627.74,-276.49C609.93,-223.12 553.35,-78.37 448.25,-22.64 397.11,4.48 365.99,9.74 318,-22.64 137.75,-144.26 114.14,-438.75 112.09,-555.64"/>
421
+ <polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="1.1" points="109.65,-555.38 112,-562.41 114.55,-555.45 109.65,-555.38"/>
422
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-42.34" font-family="serif" font-size="14.00">preference_order</text>
423
+ <text xml:space="preserve" text-anchor="middle" x="383.12" y="-25.84" font-family="serif" font-size="14.00">+ Q&#45;advantage</text>
385
424
  </g>
386
425
  </g>
387
426
  </svg>