pwn 0.5.618 → 0.5.620

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +14 -6
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/Agent-Tool-Registry.md +3 -3
  6. data/documentation/Diagrams.md +6 -2
  7. data/documentation/Extrospection.md +30 -11
  8. data/documentation/Home.md +5 -4
  9. data/documentation/How-PWN-Works.md +7 -4
  10. data/documentation/Mistakes.md +96 -0
  11. data/documentation/Persistence.md +3 -1
  12. data/documentation/SDR.md +23 -5
  13. data/documentation/Skills-Memory-Learning.md +15 -5
  14. data/documentation/diagrams/agent-tool-registry.svg +94 -92
  15. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  16. data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
  17. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  18. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  19. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  20. data/documentation/diagrams/dot/persistence-filesystem.dot +3 -2
  21. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
  22. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  23. data/documentation/diagrams/extrospection-world-awareness.svg +111 -93
  24. data/documentation/diagrams/memory-skills-detailed.svg +146 -97
  25. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  26. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  27. data/documentation/diagrams/persistence-filesystem.svg +77 -62
  28. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
  29. data/documentation/diagrams/sdr-radio-flow.svg +76 -56
  30. data/documentation/pwn-ai-Agent.md +28 -15
  31. data/lib/pwn/ai/agent/extrospection.rb +65 -6
  32. data/lib/pwn/ai/agent/learning.rb +67 -7
  33. data/lib/pwn/ai/agent/loop.rb +72 -6
  34. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  35. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  36. data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
  37. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  38. data/lib/pwn/ai/agent.rb +1 -0
  39. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  40. data/lib/pwn/sdr/decoder/adsb.rb +101 -0
  41. data/lib/pwn/sdr/decoder/apt.rb +75 -0
  42. data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
  43. data/lib/pwn/sdr/decoder/dect.rb +84 -0
  44. data/lib/pwn/sdr/decoder/gps.rb +83 -0
  45. data/lib/pwn/sdr/decoder/gsm.rb +50 -29
  46. data/lib/pwn/sdr/decoder/iridium.rb +81 -0
  47. data/lib/pwn/sdr/decoder/lora.rb +87 -0
  48. data/lib/pwn/sdr/decoder/lte.rb +88 -0
  49. data/lib/pwn/sdr/decoder/morse.rb +64 -0
  50. data/lib/pwn/sdr/decoder/p25.rb +71 -0
  51. data/lib/pwn/sdr/decoder/pager.rb +77 -0
  52. data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
  53. data/lib/pwn/sdr/decoder/rfid.rb +88 -0
  54. data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
  55. data/lib/pwn/sdr/decoder/rtty.rb +66 -0
  56. data/lib/pwn/sdr/decoder/wifi.rb +98 -0
  57. data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
  58. data/lib/pwn/sdr/decoder.rb +67 -7
  59. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  60. data/lib/pwn/sdr/gqrx.rb +186 -95
  61. data/lib/pwn/version.rb +1 -1
  62. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  63. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  64. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  65. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  66. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  67. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  68. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  69. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  70. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  71. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  72. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  73. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  74. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  75. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  76. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  77. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  78. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  79. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  80. data/third_party/pwn_rdoc.jsonl +92 -3
  81. metadata +44 -6
  82. data/README.md.bak +0 -200
@@ -4,303 +4,371 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_AI_Feedback_Learning_Loop Pages: 1 -->
7
- <svg width="1195pt" height="689pt"
8
- viewBox="0.00 0.00 1195.00 689.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 645.45)">
7
+ <svg width="1658pt" height="723pt"
8
+ viewBox="0.00 0.00 1658.00 723.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 679.95)">
10
10
  <title>PWN_AI_Feedback_Learning_Loop</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-645.45 1152.12,-645.45 1152.12,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="360.96" y="-580.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai — Closed Self&#45;Improvement Loop</text>
13
- <text xml:space="preserve" text-anchor="start" x="445.34" y="-568.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world)</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-679.95 1614.99,-679.95 1614.99,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="592.4" y="-614.75" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai — Closed Self&#45;Improvement Loop</text>
13
+ <text xml:space="preserve" text-anchor="start" x="599.52" y="-603.3" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world) &#160;· &#160;Mistakes (negative feedback)</text>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M120,-389.5C120,-389.5 500,-389.5 500,-389.5 506,-389.5 512,-395.5 512,-401.5 512,-401.5 512,-460.75 512,-460.75 512,-466.75 506,-472.75 500,-472.75 500,-472.75 120,-472.75 120,-472.75 114,-472.75 108,-466.75 108,-460.75 108,-460.75 108,-401.5 108,-401.5 108,-395.5 114,-389.5 120,-389.5"/>
17
- <text xml:space="preserve" text-anchor="middle" x="310" y="-449.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</text>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M131.59,-424C131.59,-424 468.59,-424 468.59,-424 474.59,-424 480.59,-430 480.59,-436 480.59,-436 480.59,-495.25 480.59,-495.25 480.59,-501.25 474.59,-507.25 468.59,-507.25 468.59,-507.25 131.59,-507.25 131.59,-507.25 125.59,-507.25 119.59,-501.25 119.59,-495.25 119.59,-495.25 119.59,-436 119.59,-436 119.59,-430 125.59,-424 131.59,-424"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="300.09" y="-484.25" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</text>
18
18
  </g>
19
19
  <g id="clust4" class="cluster">
20
20
  <title>cluster_intro</title>
21
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M357,-247.25C357,-247.25 656,-247.25 656,-247.25 662,-247.25 668,-253.25 668,-259.25 668,-259.25 668,-331 668,-331 668,-337 662,-343 656,-343 656,-343 357,-343 357,-343 351,-343 345,-337 345,-331 345,-331 345,-259.25 345,-259.25 345,-253.25 351,-247.25 357,-247.25"/>
22
- <text xml:space="preserve" text-anchor="middle" x="506.5" y="-320" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
21
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M416.59,-257.75C416.59,-257.75 928.59,-257.75 928.59,-257.75 934.59,-257.75 940.59,-263.75 940.59,-269.75 940.59,-269.75 940.59,-355 940.59,-355 940.59,-361 934.59,-367 928.59,-367 928.59,-367 416.59,-367 416.59,-367 410.59,-367 404.59,-361 404.59,-355 404.59,-355 404.59,-269.75 404.59,-269.75 404.59,-263.75 410.59,-257.75 416.59,-257.75"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="672.59" y="-344" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
23
23
  </g>
24
24
  <g id="clust5" class="cluster">
25
25
  <title>cluster_extro</title>
26
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M20,-253.5C20,-253.5 304,-253.5 304,-253.5 310,-253.5 316,-259.5 316,-265.5 316,-265.5 316,-324.75 316,-324.75 316,-330.75 310,-336.75 304,-336.75 304,-336.75 20,-336.75 20,-336.75 14,-336.75 8,-330.75 8,-324.75 8,-324.75 8,-265.5 8,-265.5 8,-259.5 14,-253.5 20,-253.5"/>
27
- <text xml:space="preserve" text-anchor="middle" x="162" y="-313.75" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
26
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M106.59,-264.5C106.59,-264.5 365.59,-264.5 365.59,-264.5 371.59,-264.5 377.59,-270.5 377.59,-276.5 377.59,-276.5 377.59,-348.25 377.59,-348.25 377.59,-354.25 371.59,-360.25 365.59,-360.25 365.59,-360.25 106.59,-360.25 106.59,-360.25 100.59,-360.25 94.59,-354.25 94.59,-348.25 94.59,-348.25 94.59,-276.5 94.59,-276.5 94.59,-270.5 100.59,-264.5 106.59,-264.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="236.09" y="-337.25" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
28
28
  </g>
29
29
  <g id="clust7" class="cluster">
30
30
  <title>cluster_store</title>
31
- <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M199,-8C199,-8 759,-8 759,-8 765,-8 771,-14 771,-20 771,-20 771,-79.25 771,-79.25 771,-85.25 765,-91.25 759,-91.25 759,-91.25 199,-91.25 199,-91.25 193,-91.25 187,-85.25 187,-79.25 187,-79.25 187,-20 187,-20 187,-14 193,-8 199,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="479" y="-68.25" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
31
+ <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M318.59,-8C318.59,-8 1002.59,-8 1002.59,-8 1008.59,-8 1014.59,-14 1014.59,-20 1014.59,-20 1014.59,-79.25 1014.59,-79.25 1014.59,-85.25 1008.59,-91.25 1002.59,-91.25 1002.59,-91.25 318.59,-91.25 318.59,-91.25 312.59,-91.25 306.59,-85.25 306.59,-79.25 306.59,-79.25 306.59,-20 306.59,-20 306.59,-14 312.59,-8 318.59,-8"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="660.59" y="-68.25" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
33
33
  </g>
34
34
  <!-- User -->
35
35
  <g id="node1" class="node">
36
36
  <title>User</title>
37
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M192.88,-563.25C192.88,-563.25 125.12,-563.25 125.12,-563.25 119.12,-563.25 113.12,-557.25 113.12,-551.25 113.12,-551.25 113.12,-539.25 113.12,-539.25 113.12,-533.25 119.12,-527.25 125.12,-527.25 125.12,-527.25 192.88,-527.25 192.88,-527.25 198.88,-527.25 204.88,-533.25 204.88,-539.25 204.88,-539.25 204.88,-551.25 204.88,-551.25 204.88,-557.25 198.88,-563.25 192.88,-563.25"/>
38
- <text xml:space="preserve" text-anchor="middle" x="159" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
37
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M329.47,-597.75C329.47,-597.75 261.72,-597.75 261.72,-597.75 255.72,-597.75 249.72,-591.75 249.72,-585.75 249.72,-585.75 249.72,-573.75 249.72,-573.75 249.72,-567.75 255.72,-561.75 261.72,-561.75 261.72,-561.75 329.47,-561.75 329.47,-561.75 335.47,-561.75 341.47,-567.75 341.47,-573.75 341.47,-573.75 341.47,-585.75 341.47,-585.75 341.47,-591.75 335.47,-597.75 329.47,-597.75"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="295.59" y="-576.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
39
39
  </g>
40
40
  <!-- Prompt -->
41
41
  <g id="node4" class="node">
42
42
  <title>Prompt</title>
43
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M189.5,-433.5C189.5,-433.5 128.5,-433.5 128.5,-433.5 122.5,-433.5 116.5,-427.5 116.5,-421.5 116.5,-421.5 116.5,-409.5 116.5,-409.5 116.5,-403.5 122.5,-397.5 128.5,-397.5 128.5,-397.5 189.5,-397.5 189.5,-397.5 195.5,-397.5 201.5,-403.5 201.5,-409.5 201.5,-409.5 201.5,-421.5 201.5,-421.5 201.5,-427.5 195.5,-433.5 189.5,-433.5"/>
44
- <text xml:space="preserve" text-anchor="middle" x="159" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="159" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
43
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M317.09,-468C317.09,-468 256.09,-468 256.09,-468 250.09,-468 244.09,-462 244.09,-456 244.09,-456 244.09,-444 244.09,-444 244.09,-438 250.09,-432 256.09,-432 256.09,-432 317.09,-432 317.09,-432 323.09,-432 329.09,-438 329.09,-444 329.09,-444 329.09,-456 329.09,-456 329.09,-462 323.09,-468 317.09,-468"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="286.59" y="-453.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="286.59" y="-439.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
46
46
  </g>
47
47
  <!-- User&#45;&gt;Prompt -->
48
48
  <g id="edge1" class="edge">
49
49
  <title>User&#45;&gt;Prompt</title>
50
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M159,-526.75C159,-505.75 159,-470.24 159,-445.2"/>
51
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="161.8,-445.22 159,-437.22 156.2,-445.22 161.8,-445.22"/>
52
- <text xml:space="preserve" text-anchor="middle" x="167.25" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
50
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M294.36,-561.25C292.87,-540.16 290.36,-504.42 288.59,-479.36"/>
51
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="291.41,-479.5 288.05,-471.71 285.82,-479.89 291.41,-479.5"/>
52
+ <text xml:space="preserve" text-anchor="middle" x="299.88" y="-517.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
53
+ </g>
54
+ <!-- Mistakes -->
55
+ <g id="node9" class="node">
56
+ <title>Mistakes</title>
57
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M751.84,-327.75C751.84,-327.75 605.34,-327.75 605.34,-327.75 599.34,-327.75 593.34,-321.75 593.34,-315.75 593.34,-315.75 593.34,-277.75 593.34,-277.75 593.34,-271.75 599.34,-265.75 605.34,-265.75 605.34,-265.75 751.84,-265.75 751.84,-265.75 757.84,-265.75 763.84,-271.75 763.84,-277.75 763.84,-277.75 763.84,-315.75 763.84,-315.75 763.84,-321.75 757.84,-327.75 751.84,-327.75"/>
58
+ <text xml:space="preserve" text-anchor="middle" x="678.59" y="-313.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
59
+ <text xml:space="preserve" text-anchor="middle" x="678.59" y="-299.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">record · resolve</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="678.59" y="-286.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">guard · correction_hint</text>
61
+ <text xml:space="preserve" text-anchor="middle" x="678.59" y="-272.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
62
+ </g>
63
+ <!-- User&#45;&gt;Mistakes -->
64
+ <g id="edge9" class="edge">
65
+ <title>User&#45;&gt;Mistakes</title>
66
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M249.08,-567.02C169.94,-547.04 17.5,-508.42 16.59,-507.25 -6.09,-478.02 -4.75,-454.22 16.59,-424 54.13,-370.83 90.56,-386.66 154.59,-375 200.19,-366.7 527.28,-380.55 571.59,-367 594,-360.15 616.17,-347.12 634.47,-334.19"/>
67
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="635.65,-336.8 640.48,-329.84 632.36,-332.27 635.65,-336.8"/>
68
+ <text xml:space="preserve" text-anchor="middle" x="63.09" y="-451.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">&quot;that&#39;s wrong&quot;</text>
69
+ <text xml:space="preserve" text-anchor="middle" x="63.09" y="-441.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">check_user_correction</text>
53
70
  </g>
54
71
  <!-- LLM -->
55
72
  <g id="node2" class="node">
56
73
  <title>LLM</title>
57
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M593,-563.25C593,-563.25 517,-563.25 517,-563.25 511,-563.25 505,-557.25 505,-551.25 505,-551.25 505,-539.25 505,-539.25 505,-533.25 511,-527.25 517,-527.25 517,-527.25 593,-527.25 593,-527.25 599,-527.25 605,-533.25 605,-539.25 605,-539.25 605,-551.25 605,-551.25 605,-557.25 599,-563.25 593,-563.25"/>
58
- <text xml:space="preserve" text-anchor="middle" x="555" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
74
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M481.59,-597.75C481.59,-597.75 405.59,-597.75 405.59,-597.75 399.59,-597.75 393.59,-591.75 393.59,-585.75 393.59,-585.75 393.59,-573.75 393.59,-573.75 393.59,-567.75 399.59,-561.75 405.59,-561.75 405.59,-561.75 481.59,-561.75 481.59,-561.75 487.59,-561.75 493.59,-567.75 493.59,-573.75 493.59,-573.75 493.59,-585.75 493.59,-585.75 493.59,-591.75 487.59,-597.75 481.59,-597.75"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="443.59" y="-576.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
59
76
  </g>
60
77
  <!-- Dispatch -->
61
78
  <g id="node5" class="node">
62
79
  <title>Dispatch</title>
63
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M333,-433.5C333,-433.5 299,-433.5 299,-433.5 293,-433.5 287,-427.5 287,-421.5 287,-421.5 287,-409.5 287,-409.5 287,-403.5 293,-397.5 299,-397.5 299,-397.5 333,-397.5 333,-397.5 339,-397.5 345,-403.5 345,-409.5 345,-409.5 345,-421.5 345,-421.5 345,-427.5 339,-433.5 333,-433.5"/>
64
- <text xml:space="preserve" text-anchor="middle" x="316" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
65
- <text xml:space="preserve" text-anchor="middle" x="316" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
80
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M460.59,-468C460.59,-468 426.59,-468 426.59,-468 420.59,-468 414.59,-462 414.59,-456 414.59,-456 414.59,-444 414.59,-444 414.59,-438 420.59,-432 426.59,-432 426.59,-432 460.59,-432 460.59,-432 466.59,-432 472.59,-438 472.59,-444 472.59,-444 472.59,-456 472.59,-456 472.59,-462 466.59,-468 460.59,-468"/>
81
+ <text xml:space="preserve" text-anchor="middle" x="443.59" y="-453.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
82
+ <text xml:space="preserve" text-anchor="middle" x="443.59" y="-439.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
66
83
  </g>
67
84
  <!-- LLM&#45;&gt;Dispatch -->
68
85
  <g id="edge2" class="edge">
69
86
  <title>LLM&#45;&gt;Dispatch</title>
70
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M506.92,-522.02C478.18,-508.41 441.13,-490.29 409,-472.75 390.13,-462.45 369.65,-450.18 352.71,-439.73"/>
71
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="505.55,-524.47 513.98,-525.35 507.94,-519.41 505.55,-524.47"/>
72
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="354.55,-437.58 346.28,-435.74 351.6,-442.34 354.55,-437.58"/>
73
- <text xml:space="preserve" text-anchor="middle" x="460" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
87
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M440.4,-550.18C439.65,-542.28 438.97,-533.69 438.59,-525.75 437.87,-510.42 438.88,-493.35 440.17,-479.39"/>
88
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="437.61,-550.42 441.21,-558.1 443.18,-549.86 437.61,-550.42"/>
89
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="442.95,-479.77 440.98,-471.52 437.38,-479.19 442.95,-479.77"/>
90
+ <text xml:space="preserve" text-anchor="middle" x="458.09" y="-517.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
74
91
  </g>
75
92
  <!-- World -->
76
93
  <g id="node3" class="node">
77
94
  <title>World</title>
78
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M434.75,-563.25C434.75,-563.25 339.25,-563.25 339.25,-563.25 333.25,-563.25 327.25,-557.25 327.25,-551.25 327.25,-551.25 327.25,-539.25 327.25,-539.25 327.25,-533.25 333.25,-527.25 339.25,-527.25 339.25,-527.25 434.75,-527.25 434.75,-527.25 440.75,-527.25 446.75,-533.25 446.75,-539.25 446.75,-539.25 446.75,-551.25 446.75,-551.25 446.75,-557.25 440.75,-563.25 434.75,-563.25"/>
79
- <text xml:space="preserve" text-anchor="middle" x="387" y="-548.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
80
- <text xml:space="preserve" text-anchor="middle" x="387" y="-534.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · Intel feeds</text>
95
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M194.34,-597.75C194.34,-597.75 98.84,-597.75 98.84,-597.75 92.84,-597.75 86.84,-591.75 86.84,-585.75 86.84,-585.75 86.84,-573.75 86.84,-573.75 86.84,-567.75 92.84,-561.75 98.84,-561.75 98.84,-561.75 194.34,-561.75 194.34,-561.75 200.34,-561.75 206.34,-567.75 206.34,-573.75 206.34,-573.75 206.34,-585.75 206.34,-585.75 206.34,-591.75 200.34,-597.75 194.34,-597.75"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="146.59" y="-582.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="146.59" y="-569.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · RF · Intel</text>
81
98
  </g>
82
99
  <!-- Result -->
83
100
  <g id="node6" class="node">
84
101
  <title>Result</title>
85
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M491.88,-433.5C491.88,-433.5 442.12,-433.5 442.12,-433.5 436.12,-433.5 430.12,-427.5 430.12,-421.5 430.12,-421.5 430.12,-409.5 430.12,-409.5 430.12,-403.5 436.12,-397.5 442.12,-397.5 442.12,-397.5 491.88,-397.5 491.88,-397.5 497.88,-397.5 503.88,-403.5 503.88,-409.5 503.88,-409.5 503.88,-421.5 503.88,-421.5 503.88,-427.5 497.88,-433.5 491.88,-433.5"/>
86
- <text xml:space="preserve" text-anchor="middle" x="467" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
87
- <text xml:space="preserve" text-anchor="middle" x="467" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
102
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M189.47,-468C189.47,-468 139.72,-468 139.72,-468 133.72,-468 127.72,-462 127.72,-456 127.72,-456 127.72,-444 127.72,-444 127.72,-438 133.72,-432 139.72,-432 139.72,-432 189.47,-432 189.47,-432 195.47,-432 201.47,-438 201.47,-444 201.47,-444 201.47,-456 201.47,-456 201.47,-462 195.47,-468 189.47,-468"/>
103
+ <text xml:space="preserve" text-anchor="middle" x="164.59" y="-453.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
104
+ <text xml:space="preserve" text-anchor="middle" x="164.59" y="-439.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
88
105
  </g>
89
106
  <!-- World&#45;&gt;Result -->
90
107
  <!-- Snapshot -->
91
- <g id="node9" class="node">
108
+ <g id="node10" class="node">
92
109
  <title>Snapshot</title>
93
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M296.38,-297.5C296.38,-297.5 195.62,-297.5 195.62,-297.5 189.62,-297.5 183.62,-291.5 183.62,-285.5 183.62,-285.5 183.62,-273.5 183.62,-273.5 183.62,-267.5 189.62,-261.5 195.62,-261.5 195.62,-261.5 296.38,-261.5 296.38,-261.5 302.38,-261.5 308.38,-267.5 308.38,-273.5 308.38,-273.5 308.38,-285.5 308.38,-285.5 308.38,-291.5 302.38,-297.5 296.38,-297.5"/>
94
- <text xml:space="preserve" text-anchor="middle" x="246" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
95
- <text xml:space="preserve" text-anchor="middle" x="246" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain/repo</text>
110
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M357.59,-321C357.59,-321 281.59,-321 281.59,-321 275.59,-321 269.59,-315 269.59,-309 269.59,-309 269.59,-284.5 269.59,-284.5 269.59,-278.5 275.59,-272.5 281.59,-272.5 281.59,-272.5 357.59,-272.5 357.59,-272.5 363.59,-272.5 369.59,-278.5 369.59,-284.5 369.59,-284.5 369.59,-309 369.59,-309 369.59,-315 363.59,-321 357.59,-321"/>
111
+ <text xml:space="preserve" text-anchor="middle" x="319.59" y="-306.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
112
+ <text xml:space="preserve" text-anchor="middle" x="319.59" y="-293.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain</text>
113
+ <text xml:space="preserve" text-anchor="middle" x="319.59" y="-279.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo/env/rf</text>
96
114
  </g>
97
115
  <!-- World&#45;&gt;Snapshot -->
98
- <g id="edge10" class="edge">
116
+ <g id="edge12" class="edge">
99
117
  <title>World&#45;&gt;Snapshot</title>
100
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M402.07,-526.82C416.01,-511.95 438.14,-491.34 462,-480.75 486.59,-469.84 499.66,-487.73 522,-472.75 572.77,-438.71 628.53,-394.91 586,-351 576.29,-340.98 348.23,-347.42 335,-343 311.08,-335.02 287.9,-318.36 271.19,-304.24"/>
101
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="273.35,-302.41 265.48,-299.27 269.67,-306.63 273.35,-302.41"/>
118
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M206.94,-565.64C214.22,-564.24 221.56,-562.9 228.59,-561.75 294.2,-550.99 476.64,-570.73 525.59,-525.75 575.71,-479.7 599.49,-424.33 552.59,-375 540.48,-362.26 410.8,-373.81 394.59,-367 375.12,-358.81 357.52,-343.23 344.27,-328.92"/>
119
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="346.47,-327.18 339.06,-323.07 342.28,-330.9 346.47,-327.18"/>
102
120
  </g>
103
121
  <!-- Observe -->
104
- <g id="node10" class="node">
122
+ <g id="node11" class="node">
105
123
  <title>Observe</title>
106
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M128.38,-297.5C128.38,-297.5 27.62,-297.5 27.62,-297.5 21.62,-297.5 15.63,-291.5 15.63,-285.5 15.63,-285.5 15.63,-273.5 15.63,-273.5 15.63,-267.5 21.63,-261.5 27.63,-261.5 27.63,-261.5 128.38,-261.5 128.38,-261.5 134.38,-261.5 140.38,-267.5 140.38,-273.5 140.38,-273.5 140.38,-285.5 140.38,-285.5 140.38,-291.5 134.38,-297.5 128.38,-297.5"/>
107
- <text xml:space="preserve" text-anchor="middle" x="78" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel</text>
108
- <text xml:space="preserve" text-anchor="middle" x="78" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon facts · CVE feed</text>
124
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M214.97,-314.75C214.97,-314.75 114.22,-314.75 114.22,-314.75 108.22,-314.75 102.22,-308.75 102.22,-302.75 102.22,-302.75 102.22,-290.75 102.22,-290.75 102.22,-284.75 108.22,-278.75 114.22,-278.75 114.22,-278.75 214.97,-278.75 214.97,-278.75 220.97,-278.75 226.97,-284.75 226.97,-290.75 226.97,-290.75 226.97,-302.75 226.97,-302.75 226.97,-308.75 220.97,-314.75 214.97,-314.75"/>
125
+ <text xml:space="preserve" text-anchor="middle" x="164.59" y="-299.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel</text>
126
+ <text xml:space="preserve" text-anchor="middle" x="164.59" y="-286.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon facts · CVE feed</text>
109
127
  </g>
110
128
  <!-- World&#45;&gt;Observe -->
111
- <g id="edge11" class="edge">
129
+ <g id="edge13" class="edge">
112
130
  <title>World&#45;&gt;Observe</title>
113
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M422.73,-526.62C460,-508.02 514.11,-480.37 522,-472.75 565.98,-430.29 628.82,-394.63 586,-351 569.5,-334.18 184.29,-350.62 162,-343 139.24,-335.22 117.56,-318.78 101.93,-304.72"/>
114
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="103.97,-302.79 96.2,-299.39 100.15,-306.89 103.97,-302.79"/>
131
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M206.91,-565.44C214.19,-564.07 221.55,-562.8 228.59,-561.75 271.74,-555.31 590.19,-557.98 619.59,-525.75 635.69,-508.11 806.02,-559.02 601.59,-375 587.01,-361.88 266.98,-373.84 248.59,-367 224.01,-357.86 201.4,-338.28 185.85,-322.27"/>
132
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="188.08,-320.56 180.56,-316.65 184,-324.39 188.08,-320.56"/>
115
133
  </g>
116
134
  <!-- Prompt&#45;&gt;Dispatch -->
117
135
  <g id="edge4" class="edge">
118
136
  <title>Prompt&#45;&gt;Dispatch</title>
119
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M201.93,-415.5C226.84,-415.5 251.76,-415.5 276.67,-415.5"/>
120
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="276.62,-418.3 284.62,-415.5 276.62,-412.7 276.62,-418.3"/>
137
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M329.52,-450C354.44,-450 379.35,-450 404.26,-450"/>
138
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="404.22,-452.8 412.22,-450 404.22,-447.2 404.22,-452.8"/>
121
139
  </g>
122
140
  <!-- Dispatch&#45;&gt;Result -->
123
141
  <g id="edge5" class="edge">
124
142
  <title>Dispatch&#45;&gt;Result</title>
125
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M345.49,-415.5C370.21,-415.5 394.94,-415.5 419.66,-415.5"/>
126
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="419.54,-418.3 427.54,-415.5 419.54,-412.7 419.54,-418.3"/>
143
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M426.28,-468.49C405.51,-489.19 368.52,-521.53 329.09,-534.5 293.21,-546.31 278.77,-549.49 244.09,-534.5 217.08,-522.82 195,-496.95 181.03,-476.88"/>
144
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="183.42,-475.42 176.64,-470.33 178.76,-478.54 183.42,-475.42"/>
127
145
  </g>
128
146
  <!-- Metrics -->
129
147
  <g id="node7" class="node">
130
148
  <title>Metrics</title>
131
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M478.75,-297.5C478.75,-297.5 365.25,-297.5 365.25,-297.5 359.25,-297.5 353.25,-291.5 353.25,-285.5 353.25,-285.5 353.25,-273.5 353.25,-273.5 353.25,-267.5 359.25,-261.5 365.25,-261.5 365.25,-261.5 478.75,-261.5 478.75,-261.5 484.75,-261.5 490.75,-267.5 490.75,-273.5 490.75,-273.5 490.75,-285.5 490.75,-285.5 490.75,-291.5 484.75,-297.5 478.75,-297.5"/>
132
- <text xml:space="preserve" text-anchor="middle" x="422" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
133
- <text xml:space="preserve" text-anchor="middle" x="422" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
149
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M538.34,-314.75C538.34,-314.75 424.84,-314.75 424.84,-314.75 418.84,-314.75 412.84,-308.75 412.84,-302.75 412.84,-302.75 412.84,-290.75 412.84,-290.75 412.84,-284.75 418.84,-278.75 424.84,-278.75 424.84,-278.75 538.34,-278.75 538.34,-278.75 544.34,-278.75 550.34,-284.75 550.34,-290.75 550.34,-290.75 550.34,-302.75 550.34,-302.75 550.34,-308.75 544.34,-314.75 538.34,-314.75"/>
150
+ <text xml:space="preserve" text-anchor="middle" x="481.59" y="-299.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
151
+ <text xml:space="preserve" text-anchor="middle" x="481.59" y="-286.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
134
152
  </g>
135
153
  <!-- Dispatch&#45;&gt;Metrics -->
136
154
  <g id="edge6" class="edge">
137
155
  <title>Dispatch&#45;&gt;Metrics</title>
138
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M341.32,-396.81C353.7,-387.32 368.22,-374.84 379,-361.5 392.43,-344.89 403.59,-323.44 411.17,-306.79"/>
139
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="413.55,-308.34 414.22,-299.89 408.43,-306.08 413.55,-308.34"/>
140
- <text xml:space="preserve" text-anchor="middle" x="402.55" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
156
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M422.8,-431.36C408.23,-416.73 392.77,-395.15 401.34,-375 410.6,-353.24 429.32,-334.64 446.36,-321.15"/>
157
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="447.78,-323.58 452.46,-316.51 444.39,-319.13 447.78,-323.58"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="417.47" y="-382.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
141
159
  </g>
142
- <!-- Dispatch&#45;&gt;Snapshot -->
160
+ <!-- Dispatch&#45;&gt;Mistakes -->
143
161
  <g id="edge8" class="edge">
162
+ <title>Dispatch&#45;&gt;Mistakes</title>
163
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M473.21,-448.45C542.47,-446.46 711.81,-437.4 746.59,-396 762.37,-377.23 749.08,-354.84 730.2,-336.18"/>
164
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="732.12,-334.15 724.35,-330.76 728.31,-338.25 732.12,-334.15"/>
165
+ <text xml:space="preserve" text-anchor="middle" x="772.71" y="-387.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">on failure</text>
166
+ <text xml:space="preserve" text-anchor="middle" x="772.71" y="-376.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
167
+ </g>
168
+ <!-- Dispatch&#45;&gt;Snapshot -->
169
+ <g id="edge10" class="edge">
144
170
  <title>Dispatch&#45;&gt;Snapshot</title>
145
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M286.41,-403.45C268.31,-394.97 246.64,-381.31 236,-361.5 227.09,-344.91 230.13,-323.71 235.11,-307.16"/>
146
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="237.66,-308.37 237.56,-299.89 232.35,-306.58 237.66,-308.37"/>
147
- <text xml:space="preserve" text-anchor="middle" x="248" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
171
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M413.98,-434.36C397.73,-425.15 378.18,-411.98 364.59,-396 348.44,-377 336.92,-351.24 329.59,-330.86"/>
172
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="332.31,-330.15 327.06,-323.49 327.01,-331.97 332.31,-330.15"/>
173
+ <text xml:space="preserve" text-anchor="middle" x="376.59" y="-382.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
148
174
  </g>
149
175
  <!-- Result&#45;&gt;User -->
150
- <g id="edge26" class="edge">
176
+ <g id="edge33" class="edge">
151
177
  <title>Result&#45;&gt;User</title>
152
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M438.83,-434.16C419.18,-446.03 392.08,-461.5 367,-472.75 317.22,-495.09 258.21,-514.76 215.78,-527.79"/>
153
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="215.1,-525.07 208.26,-530.08 216.73,-530.43 215.1,-525.07"/>
154
- <text xml:space="preserve" text-anchor="middle" x="360.1" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
178
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M176.86,-468.54C187.3,-481.86 203.6,-499.21 222.59,-507.25 235.95,-512.9 473.49,-504.84 483.59,-515.25 486.84,-518.6 486.41,-522.03 483.59,-525.75 475.46,-536.5 404.87,-554.35 352.57,-566.33"/>
179
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="352.18,-563.54 345,-568.05 353.42,-569.01 352.18,-563.54"/>
180
+ <text xml:space="preserve" text-anchor="middle" x="500.87" y="-517.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
155
181
  </g>
156
182
  <!-- Learning -->
157
183
  <g id="node8" class="node">
158
184
  <title>Learning</title>
159
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M647.75,-303.75C647.75,-303.75 546.25,-303.75 546.25,-303.75 540.25,-303.75 534.25,-297.75 534.25,-291.75 534.25,-291.75 534.25,-267.25 534.25,-267.25 534.25,-261.25 540.25,-255.25 546.25,-255.25 546.25,-255.25 647.75,-255.25 647.75,-255.25 653.75,-255.25 659.75,-261.25 659.75,-267.25 659.75,-267.25 659.75,-291.75 659.75,-291.75 659.75,-297.75 653.75,-303.75 647.75,-303.75"/>
160
- <text xml:space="preserve" text-anchor="middle" x="597" y="-289.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
161
- <text xml:space="preserve" text-anchor="middle" x="597" y="-275.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
162
- <text xml:space="preserve" text-anchor="middle" x="597" y="-262.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
185
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M920.34,-321C920.34,-321 818.84,-321 818.84,-321 812.84,-321 806.84,-315 806.84,-309 806.84,-309 806.84,-284.5 806.84,-284.5 806.84,-278.5 812.84,-272.5 818.84,-272.5 818.84,-272.5 920.34,-272.5 920.34,-272.5 926.34,-272.5 932.34,-278.5 932.34,-284.5 932.34,-284.5 932.34,-309 932.34,-309 932.34,-315 926.34,-321 920.34,-321"/>
186
+ <text xml:space="preserve" text-anchor="middle" x="869.59" y="-306.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
187
+ <text xml:space="preserve" text-anchor="middle" x="869.59" y="-293.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
188
+ <text xml:space="preserve" text-anchor="middle" x="869.59" y="-279.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
163
189
  </g>
164
190
  <!-- Result&#45;&gt;Learning -->
165
191
  <g id="edge7" class="edge">
166
192
  <title>Result&#45;&gt;Learning</title>
167
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M484,-396.98C505.1,-375.23 541.45,-337.76 567.22,-311.2"/>
168
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="568.93,-313.46 572.49,-305.77 564.91,-309.56 568.93,-313.46"/>
169
- <text xml:space="preserve" text-anchor="middle" x="552.1" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_reflect</text>
193
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M200.45,-431.32C207.64,-428.42 215.24,-425.78 222.59,-424 400.11,-381.01 454.09,-434.7 632.59,-396 658.57,-390.37 662.66,-380.81 688.59,-375 730.8,-365.54 745.52,-383.28 785.59,-367 806.66,-358.44 826.48,-342.63 841.57,-328.28"/>
194
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="843.44,-330.37 847.18,-322.77 839.51,-326.38 843.44,-330.37"/>
195
+ <text xml:space="preserve" text-anchor="middle" x="712.59" y="-382.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_reflect</text>
170
196
  </g>
171
197
  <!-- Result&#45;&gt;Observe -->
172
- <g id="edge9" class="edge">
198
+ <g id="edge11" class="edge">
173
199
  <title>Result&#45;&gt;Observe</title>
174
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M429.54,-402.15C376,-384.59 282.26,-354.15 266,-351 220.49,-342.18 205.42,-359.25 162,-343 139.62,-334.62 118.07,-318.36 102.4,-304.53"/>
175
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="104.46,-302.61 96.66,-299.3 100.69,-306.76 104.46,-302.61"/>
176
- <text xml:space="preserve" text-anchor="middle" x="332.76" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
200
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M164.59,-431.35C164.59,-405.17 164.59,-355.81 164.59,-324.97"/>
201
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="167.39,-325.25 164.59,-317.25 161.79,-325.25 167.39,-325.25"/>
202
+ <text xml:space="preserve" text-anchor="middle" x="197.22" y="-382.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
177
203
  </g>
178
204
  <!-- Correlate -->
179
- <g id="node11" class="node">
205
+ <g id="node12" class="node">
180
206
  <title>Correlate</title>
181
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M345.88,-172.75C345.88,-172.75 146.12,-172.75 146.12,-172.75 140.12,-172.75 134.12,-166.75 134.12,-160.75 134.12,-160.75 134.12,-148.25 134.12,-148.25 134.12,-142.25 140.12,-136.25 146.12,-136.25 146.12,-136.25 345.88,-136.25 345.88,-136.25 351.88,-136.25 357.88,-142.25 357.88,-148.25 357.88,-148.25 357.88,-160.75 357.88,-160.75 357.88,-166.75 351.88,-172.75 345.88,-172.75"/>
182
- <text xml:space="preserve" text-anchor="middle" x="246" y="-157.35" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
183
- <text xml:space="preserve" text-anchor="middle" x="246" y="-143.1" font-family="sans-Serif" font-size="12.00" fill="#0f172a">&quot;I did it wrong&quot; &#160;vs &#160;&quot;the world changed&quot;</text>
207
+ <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M435.47,-172.75C435.47,-172.75 235.72,-172.75 235.72,-172.75 229.72,-172.75 223.72,-166.75 223.72,-160.75 223.72,-160.75 223.72,-148.25 223.72,-148.25 223.72,-142.25 229.72,-136.25 235.72,-136.25 235.72,-136.25 435.47,-136.25 435.47,-136.25 441.47,-136.25 447.47,-142.25 447.47,-148.25 447.47,-148.25 447.47,-160.75 447.47,-160.75 447.47,-166.75 441.47,-172.75 435.47,-172.75"/>
208
+ <text xml:space="preserve" text-anchor="middle" x="335.59" y="-157.35" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
209
+ <text xml:space="preserve" text-anchor="middle" x="335.59" y="-143.1" font-family="sans-Serif" font-size="12.00" fill="#0f172a">&quot;I did it wrong&quot; &#160;vs &#160;&quot;the world changed&quot;</text>
184
210
  </g>
185
211
  <!-- Metrics&#45;&gt;Correlate -->
186
- <g id="edge12" class="edge">
212
+ <g id="edge14" class="edge">
187
213
  <title>Metrics&#45;&gt;Correlate</title>
188
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M396,-261.03C378.65,-249.31 355.37,-233.48 335,-219.25 316.25,-206.16 295.47,-191.29 278.7,-179.21"/>
189
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="280.55,-177.08 272.42,-174.67 277.27,-181.62 280.55,-177.08"/>
214
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M463.4,-278.27C437.75,-253.63 390.82,-208.55 361.53,-180.41"/>
215
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="363.61,-178.53 355.9,-175.01 359.73,-182.57 363.61,-178.53"/>
190
216
  </g>
191
217
  <!-- Fmet -->
192
- <g id="node12" class="node">
218
+ <g id="node13" class="node">
193
219
  <title>Fmet</title>
194
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-50.53 397.14,-52 377,-52 356.86,-52 340.5,-50.53 340.5,-48.73 340.5,-48.73 340.5,-19.27 340.5,-19.27 340.5,-17.47 356.86,-16 377,-16 397.14,-16 413.5,-17.47 413.5,-19.27 413.5,-19.27 413.5,-48.73 413.5,-48.73"/>
195
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-46.92 397.14,-45.45 377,-45.45 356.86,-45.45 340.5,-46.92 340.5,-48.73"/>
196
- <text xml:space="preserve" text-anchor="middle" x="377" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
220
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M533.09,-48.73C533.09,-50.53 516.73,-52 496.59,-52 476.45,-52 460.09,-50.53 460.09,-48.73 460.09,-48.73 460.09,-19.27 460.09,-19.27 460.09,-17.47 476.45,-16 496.59,-16 516.73,-16 533.09,-17.47 533.09,-19.27 533.09,-19.27 533.09,-48.73 533.09,-48.73"/>
221
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M533.09,-48.73C533.09,-46.92 516.73,-45.45 496.59,-45.45 476.45,-45.45 460.09,-46.92 460.09,-48.73"/>
222
+ <text xml:space="preserve" text-anchor="middle" x="496.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
197
223
  </g>
198
224
  <!-- Metrics&#45;&gt;Fmet -->
199
- <g id="edge17" class="edge">
225
+ <g id="edge20" class="edge">
200
226
  <title>Metrics&#45;&gt;Fmet</title>
201
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M418.76,-260.99C411.01,-219.06 391.35,-112.65 382.04,-62.26"/>
202
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="384.83,-61.97 380.63,-54.62 379.33,-62.99 384.83,-61.97"/>
227
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M482.6,-278.24C485.16,-233.7 491.94,-115.88 495.03,-62.26"/>
228
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="497.81,-62.55 495.48,-54.4 492.22,-62.23 497.81,-62.55"/>
203
229
  </g>
204
230
  <!-- Learning&#45;&gt;Correlate -->
205
- <g id="edge13" class="edge">
231
+ <g id="edge15" class="edge">
206
232
  <title>Learning&#45;&gt;Correlate</title>
207
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M533.92,-255.15C526.54,-252.46 519.11,-249.78 512,-247.25 442.72,-222.57 362.94,-195.19 308.96,-176.82"/>
208
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="310.2,-174.28 301.72,-174.36 308.4,-179.58 310.2,-174.28"/>
233
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M821.4,-271.95C809.85,-266.81 797.43,-261.73 785.59,-257.75 675.2,-220.66 545.09,-192.73 453.25,-175.51"/>
234
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="453.96,-172.79 445.58,-174.08 452.93,-178.29 453.96,-172.79"/>
209
235
  </g>
210
236
  <!-- Flrn -->
211
- <g id="node13" class="node">
237
+ <g id="node14" class="node">
212
238
  <title>Flrn</title>
213
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-50.53 517.8,-52 496,-52 474.2,-52 456.5,-50.53 456.5,-48.73 456.5,-48.73 456.5,-19.27 456.5,-19.27 456.5,-17.47 474.2,-16 496,-16 517.8,-16 535.5,-17.47 535.5,-19.27 535.5,-19.27 535.5,-48.73 535.5,-48.73"/>
214
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-46.92 517.8,-45.45 496,-45.45 474.2,-45.45 456.5,-46.92 456.5,-48.73"/>
215
- <text xml:space="preserve" text-anchor="middle" x="496" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
239
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M899.09,-48.73C899.09,-50.53 881.39,-52 859.59,-52 837.8,-52 820.09,-50.53 820.09,-48.73 820.09,-48.73 820.09,-19.27 820.09,-19.27 820.09,-17.47 837.8,-16 859.59,-16 881.39,-16 899.09,-17.47 899.09,-19.27 899.09,-19.27 899.09,-48.73 899.09,-48.73"/>
240
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M899.09,-48.73C899.09,-46.92 881.39,-45.45 859.59,-45.45 837.8,-45.45 820.09,-46.92 820.09,-48.73"/>
241
+ <text xml:space="preserve" text-anchor="middle" x="859.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
216
242
  </g>
217
243
  <!-- Learning&#45;&gt;Flrn -->
218
- <g id="edge18" class="edge">
244
+ <g id="edge21" class="edge">
219
245
  <title>Learning&#45;&gt;Flrn</title>
220
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M587.13,-254.71C568.19,-209.03 526.84,-109.35 507.02,-61.57"/>
221
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="509.65,-60.6 504,-54.29 504.48,-62.75 509.65,-60.6"/>
246
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M879.02,-271.98C883.55,-259.59 888.62,-244.06 891.59,-229.75 903.38,-172.96 908.63,-154.69 891.59,-99.25 887.58,-86.19 881.13,-72.52 875.07,-61.17"/>
247
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="877.62,-59.99 871.3,-54.34 872.71,-62.7 877.62,-59.99"/>
222
248
  </g>
223
249
  <!-- Fmem -->
224
- <g id="node14" class="node">
250
+ <g id="node16" class="node">
225
251
  <title>Fmem</title>
226
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-50.53 638.38,-52 617,-52 595.62,-52 578.25,-50.53 578.25,-48.73 578.25,-48.73 578.25,-19.27 578.25,-19.27 578.25,-17.47 595.62,-16 617,-16 638.38,-16 655.75,-17.47 655.75,-19.27 655.75,-19.27 655.75,-48.73 655.75,-48.73"/>
227
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-46.92 638.38,-45.45 617,-45.45 595.62,-45.45 578.25,-46.92 578.25,-48.73"/>
228
- <text xml:space="preserve" text-anchor="middle" x="617" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
252
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M777.34,-48.73C777.34,-50.53 759.98,-52 738.59,-52 717.21,-52 699.84,-50.53 699.84,-48.73 699.84,-48.73 699.84,-19.27 699.84,-19.27 699.84,-17.47 717.21,-16 738.59,-16 759.98,-16 777.34,-17.47 777.34,-19.27 777.34,-19.27 777.34,-48.73 777.34,-48.73"/>
253
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M777.34,-48.73C777.34,-46.92 759.98,-45.45 738.59,-45.45 717.21,-45.45 699.84,-46.92 699.84,-48.73"/>
254
+ <text xml:space="preserve" text-anchor="middle" x="738.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
229
255
  </g>
230
256
  <!-- Learning&#45;&gt;Fmem -->
231
- <g id="edge19" class="edge">
257
+ <g id="edge24" class="edge">
232
258
  <title>Learning&#45;&gt;Fmem</title>
233
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M598.95,-254.71C602.69,-209.22 610.83,-110.18 614.77,-62.17"/>
234
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="617.54,-62.63 615.4,-54.43 611.96,-62.17 617.54,-62.63"/>
235
- <text xml:space="preserve" text-anchor="middle" x="622.16" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
259
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M858.17,-271.87C843.14,-240.59 815.81,-184.1 791.59,-136.25 778.62,-110.61 763.36,-81.58 752.56,-61.2"/>
260
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="755.08,-59.97 748.85,-54.22 750.13,-62.6 755.08,-59.97"/>
261
+ <text xml:space="preserve" text-anchor="middle" x="823.24" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
236
262
  </g>
237
263
  <!-- Fskl -->
238
- <g id="node15" class="node">
264
+ <g id="node17" class="node">
239
265
  <title>Fskl</title>
240
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-50.53 748.66,-52 731,-52 713.34,-52 699,-50.53 699,-48.73 699,-48.73 699,-19.27 699,-19.27 699,-17.47 713.34,-16 731,-16 748.66,-16 763,-17.47 763,-19.27 763,-19.27 763,-48.73 763,-48.73"/>
241
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-46.92 748.66,-45.45 731,-45.45 713.34,-45.45 699,-46.92 699,-48.73"/>
242
- <text xml:space="preserve" text-anchor="middle" x="731" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
266
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1006.59,-48.73C1006.59,-50.53 992.25,-52 974.59,-52 956.94,-52 942.59,-50.53 942.59,-48.73 942.59,-48.73 942.59,-19.27 942.59,-19.27 942.59,-17.47 956.94,-16 974.59,-16 992.25,-16 1006.59,-17.47 1006.59,-19.27 1006.59,-19.27 1006.59,-48.73 1006.59,-48.73"/>
267
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1006.59,-48.73C1006.59,-46.92 992.25,-45.45 974.59,-45.45 956.94,-45.45 942.59,-46.92 942.59,-48.73"/>
268
+ <text xml:space="preserve" text-anchor="middle" x="974.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
243
269
  </g>
244
270
  <!-- Learning&#45;&gt;Fskl -->
245
- <g id="edge20" class="edge">
271
+ <g id="edge25" class="edge">
246
272
  <title>Learning&#45;&gt;Fskl</title>
247
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M612.35,-254.81C619.17,-244.07 627.17,-231.13 634,-219.25 665.74,-164 699.75,-97.49 717.86,-61.42"/>
248
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="720.37,-62.67 721.45,-54.26 715.36,-60.16 720.37,-62.67"/>
249
- <text xml:space="preserve" text-anchor="middle" x="686.07" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
273
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M894.37,-272.03C905.38,-260.26 917.62,-245.25 925.59,-229.75 954.14,-174.25 966.72,-101.15 971.71,-62.19"/>
274
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="974.45,-62.84 972.63,-54.56 968.89,-62.16 974.45,-62.84"/>
275
+ <text xml:space="preserve" text-anchor="middle" x="965.73" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
276
+ </g>
277
+ <!-- Mistakes&#45;&gt;Dispatch -->
278
+ <g id="edge31" class="edge">
279
+ <title>Mistakes&#45;&gt;Dispatch</title>
280
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M630.95,-328.65C612.43,-340.64 591.04,-354.48 571.59,-367 540.76,-386.85 505.7,-409.31 480.07,-425.69"/>
281
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="478.87,-423.14 473.63,-429.81 481.88,-427.86 478.87,-423.14"/>
282
+ <text xml:space="preserve" text-anchor="middle" x="590.35" y="-387.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
283
+ <text xml:space="preserve" text-anchor="middle" x="590.35" y="-376.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
284
+ </g>
285
+ <!-- Mistakes&#45;&gt;Correlate -->
286
+ <g id="edge16" class="edge">
287
+ <title>Mistakes&#45;&gt;Correlate</title>
288
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M602.9,-264.8C538.1,-238.3 446.45,-200.83 389.05,-177.36"/>
289
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="390.43,-174.9 381.96,-174.46 388.31,-180.08 390.43,-174.9"/>
290
+ </g>
291
+ <!-- Fmis -->
292
+ <g id="node15" class="node">
293
+ <title>Fmis</title>
294
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M656.84,-48.73C656.84,-50.53 638.8,-52 616.59,-52 594.38,-52 576.34,-50.53 576.34,-48.73 576.34,-48.73 576.34,-19.27 576.34,-19.27 576.34,-17.47 594.38,-16 616.59,-16 638.8,-16 656.84,-17.47 656.84,-19.27 656.84,-19.27 656.84,-48.73 656.84,-48.73"/>
295
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M656.84,-48.73C656.84,-46.92 638.8,-45.45 616.59,-45.45 594.38,-45.45 576.34,-46.92 576.34,-48.73"/>
296
+ <text xml:space="preserve" text-anchor="middle" x="616.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
297
+ </g>
298
+ <!-- Mistakes&#45;&gt;Fmis -->
299
+ <g id="edge22" class="edge">
300
+ <title>Mistakes&#45;&gt;Fmis</title>
301
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M671.24,-264.81C658.99,-213.3 634.62,-110.8 623.02,-62.02"/>
302
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="625.78,-61.51 621.2,-54.38 620.33,-62.81 625.78,-61.51"/>
303
+ </g>
304
+ <!-- Mistakes&#45;&gt;Fmem -->
305
+ <g id="edge23" class="edge">
306
+ <title>Mistakes&#45;&gt;Fmem</title>
307
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M685.71,-264.81C697.56,-213.3 721.15,-110.8 732.38,-62.02"/>
308
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="735.07,-62.8 734.13,-54.38 729.61,-61.55 735.07,-62.8"/>
309
+ <text xml:space="preserve" text-anchor="middle" x="748.29" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
250
310
  </g>
251
311
  <!-- Snapshot&#45;&gt;Correlate -->
252
- <g id="edge14" class="edge">
312
+ <g id="edge17" class="edge">
253
313
  <title>Snapshot&#45;&gt;Correlate</title>
254
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M246,-260.88C246,-240.62 246,-207.13 246,-183.34"/>
255
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="248.8,-183.46 246,-175.46 243.2,-183.46 248.8,-183.46"/>
314
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M322.31,-271.96C325.11,-247.4 329.48,-209.11 332.43,-183.2"/>
315
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="335.18,-183.82 333.31,-175.55 329.62,-183.18 335.18,-183.82"/>
256
316
  </g>
257
317
  <!-- Observe&#45;&gt;Correlate -->
258
- <g id="edge15" class="edge">
318
+ <g id="edge18" class="edge">
259
319
  <title>Observe&#45;&gt;Correlate</title>
260
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M102.07,-260.88C131.26,-239.51 180.6,-203.38 213.24,-179.49"/>
261
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="214.76,-181.84 219.57,-174.85 211.46,-177.32 214.76,-181.84"/>
320
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M185.91,-278.27C216.2,-253.42 271.84,-207.79 306.09,-179.7"/>
321
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="307.54,-182.13 311.95,-174.89 303.99,-177.8 307.54,-182.13"/>
262
322
  </g>
263
323
  <!-- Fext -->
264
- <g id="node16" class="node">
324
+ <g id="node18" class="node">
265
325
  <title>Fext</title>
266
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-50.53 274.21,-52 246,-52 217.79,-52 194.88,-50.53 194.88,-48.73 194.88,-48.73 194.88,-19.27 194.88,-19.27 194.88,-17.47 217.79,-16 246,-16 274.21,-16 297.12,-17.47 297.12,-19.27 297.12,-19.27 297.12,-48.73 297.12,-48.73"/>
267
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-46.92 274.21,-45.45 246,-45.45 217.79,-45.45 194.88,-46.92 194.88,-48.73"/>
268
- <text xml:space="preserve" text-anchor="middle" x="246" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
326
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M416.72,-48.73C416.72,-50.53 393.8,-52 365.59,-52 337.38,-52 314.47,-50.53 314.47,-48.73 314.47,-48.73 314.47,-19.27 314.47,-19.27 314.47,-17.47 337.38,-16 365.59,-16 393.8,-16 416.72,-17.47 416.72,-19.27 416.72,-19.27 416.72,-48.73 416.72,-48.73"/>
327
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M416.72,-48.73C416.72,-46.92 393.8,-45.45 365.59,-45.45 337.38,-45.45 314.47,-46.92 314.47,-48.73"/>
328
+ <text xml:space="preserve" text-anchor="middle" x="365.59" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
269
329
  </g>
270
330
  <!-- Observe&#45;&gt;Fext -->
271
- <g id="edge21" class="edge">
331
+ <g id="edge26" class="edge">
272
332
  <title>Observe&#45;&gt;Fext</title>
273
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M78.63,-260.82C80.4,-232.36 87.19,-175.59 113,-136.25 135.46,-102.02 173.55,-74.77 203.23,-57.2"/>
274
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="204.52,-59.69 210.05,-53.27 201.72,-54.84 204.52,-59.69"/>
333
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M164.56,-278.16C165.36,-246.73 170.97,-180.13 202.59,-136.25 229.7,-98.63 275.53,-71.98 311.7,-55.5"/>
334
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="312.69,-58.13 318.87,-52.33 310.42,-53.01 312.69,-58.13"/>
275
335
  </g>
276
336
  <!-- Correlate&#45;&gt;Prompt -->
277
- <g id="edge25" class="edge">
337
+ <g id="edge32" class="edge">
278
338
  <title>Correlate&#45;&gt;Prompt</title>
279
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M358.73,-163.68C473.02,-174.59 638.52,-198.5 678,-247.25 704.78,-280.32 704.96,-310.08 678,-343 619.62,-414.28 356.98,-374.97 266,-389.5 248.45,-392.3 229.5,-396.38 212.5,-400.43"/>
280
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="212.25,-397.61 205.13,-402.22 213.57,-403.05 212.25,-397.61"/>
281
- <text xml:space="preserve" text-anchor="middle" x="737.53" y="-276.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
339
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M448.33,-166.31C617.02,-183.66 918.83,-219.63 950.59,-257.75 981.67,-295.05 981.47,-329.53 950.59,-367 911.03,-415.01 455.12,-414.76 393.59,-424 376.02,-426.64 357.06,-430.67 340.06,-434.73"/>
340
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="339.8,-431.91 332.7,-436.53 341.13,-437.35 339.8,-431.91"/>
341
+ <text xml:space="preserve" text-anchor="middle" x="1013.2" y="-293.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
282
342
  </g>
283
343
  <!-- Correlate&#45;&gt;Fmet -->
344
+ <!-- Fmis&#45;&gt;Prompt -->
345
+ <g id="edge29" class="edge">
346
+ <title>Fmis&#45;&gt;Prompt</title>
347
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M630.71,-52.47C642.18,-65.39 659.54,-82.24 678.59,-91.25 802.47,-149.82 868.26,-62.26 983.59,-136.25 1074.83,-194.78 1130.78,-282.74 1062.59,-367 1015.66,-424.99 467.46,-413.52 393.59,-424 376,-426.5 357.04,-430.49 340.04,-434.55"/>
348
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="339.78,-431.74 332.67,-436.36 341.11,-437.17 339.78,-431.74"/>
349
+ <text xml:space="preserve" text-anchor="middle" x="1117.63" y="-221.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
350
+ <text xml:space="preserve" text-anchor="middle" x="1117.63" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
351
+ </g>
284
352
  <!-- Fmem&#45;&gt;Prompt -->
285
- <g id="edge22" class="edge">
353
+ <g id="edge27" class="edge">
286
354
  <title>Fmem&#45;&gt;Prompt</title>
287
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M633.9,-52.68C673.84,-94.96 771.88,-201.78 787,-247.25 800.43,-287.63 814,-310.1 787,-343 750.13,-387.93 323.49,-380.96 266,-389.5 248.09,-392.16 228.75,-396.28 211.5,-400.42"/>
288
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.17,-397.62 204.07,-402.24 212.51,-403.06 211.17,-397.62"/>
289
- <text xml:space="preserve" text-anchor="middle" x="804.5" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
355
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M752.47,-52.54C763.56,-65.32 780.26,-81.95 798.59,-91.25 952.48,-169.27 1081.22,-59.97 1168.59,-208.75 1206.61,-273.48 1162.46,-313.71 1109.59,-367 1087.03,-389.75 1074.8,-388.74 1043.59,-396 761.95,-461.51 680.07,-384.71 393.59,-424 375.65,-426.46 356.31,-430.53 339.06,-434.68"/>
356
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="338.73,-431.88 331.63,-436.52 340.07,-437.32 338.73,-431.88"/>
357
+ <text xml:space="preserve" text-anchor="middle" x="1210.36" y="-215.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
290
358
  </g>
291
359
  <!-- Fskl&#45;&gt;Prompt -->
292
- <g id="edge23" class="edge">
360
+ <g id="edge28" class="edge">
293
361
  <title>Fskl&#45;&gt;Prompt</title>
294
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M747.89,-52.39C775.06,-81.72 827.43,-144.19 847,-208.75 864.5,-266.48 862.72,-294.39 827,-343 816.11,-357.82 807.77,-356.8 790,-361.5 564.53,-421.12 496.89,-356.62 266,-389.5 248.07,-392.05 228.73,-396.15 211.48,-400.29"/>
295
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.15,-397.49 204.05,-402.12 212.49,-402.93 211.15,-397.49"/>
296
- <text xml:space="preserve" text-anchor="middle" x="877.38" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
362
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1007.1,-43.55C1068.89,-61.81 1201.64,-111.12 1252.59,-208.75 1288.52,-277.58 1236.71,-315.52 1178.59,-367 1152.15,-390.42 1139.17,-388.76 1104.59,-396 795.06,-460.82 706.98,-381.61 393.59,-424 375.65,-426.43 356.3,-430.49 339.06,-434.65"/>
363
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="338.72,-431.84 331.63,-436.48 340.06,-437.28 338.72,-431.84"/>
364
+ <text xml:space="preserve" text-anchor="middle" x="1288.2" y="-215.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
297
365
  </g>
298
366
  <!-- Fext&#45;&gt;Prompt -->
299
- <g id="edge24" class="edge">
367
+ <g id="edge30" class="edge">
300
368
  <title>Fext&#45;&gt;Prompt</title>
301
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M263.15,-52.62C276.95,-65.62 297.51,-82.51 319,-91.25 622.57,-214.77 840.6,45.84 1047,-208.75 1084.61,-255.14 1077.51,-295.73 1041,-343 988.27,-411.27 351.49,-377.95 266,-389.5 248.06,-391.92 228.71,-395.99 211.46,-400.14"/>
302
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.13,-397.34 204.03,-401.98 212.47,-402.78 211.13,-397.34"/>
303
- <text xml:space="preserve" text-anchor="middle" x="1081.55" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
369
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M382.38,-52.56C396.13,-65.71 416.81,-82.81 438.59,-91.25 663.41,-178.31 1570.24,4.82 1514.59,-229.75 1498.83,-296.18 1497.91,-323.13 1445.59,-367 1411.11,-395.91 1393.02,-388.84 1348.59,-396 929.38,-463.61 814.67,-369.2 393.59,-424 375.64,-426.34 356.29,-430.38 339.04,-434.54"/>
370
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="338.7,-431.74 331.61,-436.38 340.05,-437.17 338.7,-431.74"/>
371
+ <text xml:space="preserve" text-anchor="middle" x="1544.42" y="-215.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
304
372
  </g>
305
373
  </g>
306
374
  </svg>