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,199 +4,248 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_MemorySkills Pages: 1 -->
7
- <svg width="665pt" height="568pt"
8
- viewBox="0.00 0.00 665.00 568.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 524.45)">
7
+ <svg width="847pt" height="585pt"
8
+ viewBox="0.00 0.00 847.00 585.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 541.95)">
10
10
  <title>PWN_MemorySkills</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-524.45 622.2,-524.45 622.2,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="46.5" y="-459.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge — Memory · Skills · Sessions</text>
13
- <text xml:space="preserve" text-anchor="start" x="164.25" y="-447.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">everything under ~/.pwn/ that shapes future prompts</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-541.95 804.2,-541.95 804.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="37.75" y="-476.75" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge — Memory · Skills · Learning · Mistakes · Sessions</text>
13
+ <text xml:space="preserve" text-anchor="start" x="255.25" y="-465.3" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">everything under ~/.pwn/ that shapes future prompts</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_write</title>
16
- <path fill="#022c22" stroke="#047857" d="M20,-351C20,-351 559,-351 559,-351 565,-351 571,-357 571,-363 571,-363 571,-422.25 571,-422.25 571,-428.25 565,-434.25 559,-434.25 559,-434.25 20,-434.25 20,-434.25 14,-434.25 8,-428.25 8,-422.25 8,-422.25 8,-363 8,-363 8,-357 14,-351 20,-351"/>
17
- <text xml:space="preserve" text-anchor="middle" x="289.5" y="-411.25" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Write&#45;Side Tools</text>
16
+ <path fill="#022c22" stroke="#047857" d="M20,-368.5C20,-368.5 691,-368.5 691,-368.5 697,-368.5 703,-374.5 703,-380.5 703,-380.5 703,-439.75 703,-439.75 703,-445.75 697,-451.75 691,-451.75 691,-451.75 20,-451.75 20,-451.75 14,-451.75 8,-445.75 8,-439.75 8,-439.75 8,-380.5 8,-380.5 8,-374.5 14,-368.5 20,-368.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="355.5" y="-428.75" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Write&#45;Side Tools</text>
18
18
  </g>
19
19
  <g id="clust3" class="cluster">
20
20
  <title>cluster_files</title>
21
- <path fill="#422006" stroke="#a16207" d="M47,-215.25C47,-215.25 551,-215.25 551,-215.25 557,-215.25 563,-221.25 563,-227.25 563,-227.25 563,-294.5 563,-294.5 563,-300.5 557,-306.5 551,-306.5 551,-306.5 47,-306.5 47,-306.5 41,-306.5 35,-300.5 35,-294.5 35,-294.5 35,-227.25 35,-227.25 35,-221.25 41,-215.25 47,-215.25"/>
22
- <text xml:space="preserve" text-anchor="middle" x="299" y="-283.5" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
21
+ <path fill="#422006" stroke="#a16207" d="M57,-232.75C57,-232.75 741,-232.75 741,-232.75 747,-232.75 753,-238.75 753,-244.75 753,-244.75 753,-312 753,-312 753,-318 747,-324 741,-324 741,-324 57,-324 57,-324 51,-324 45,-318 45,-312 45,-312 45,-244.75 45,-244.75 45,-238.75 51,-232.75 57,-232.75"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="399" y="-301" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
23
23
  </g>
24
24
  <g id="clust5" class="cluster">
25
25
  <title>cluster_read</title>
26
- <path fill="#2e1065" stroke="#6d28d9" d="M77,-97C77,-97 537,-97 537,-97 543,-97 549,-103 549,-109 549,-109 549,-168.25 549,-168.25 549,-174.25 543,-180.25 537,-180.25 537,-180.25 77,-180.25 77,-180.25 71,-180.25 65,-174.25 65,-168.25 65,-168.25 65,-109 65,-109 65,-103 71,-97 77,-97"/>
27
- <text xml:space="preserve" text-anchor="middle" x="307" y="-157.25" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Read&#45;Side / Injection</text>
26
+ <path fill="#2e1065" stroke="#6d28d9" d="M63,-114.5C63,-114.5 643,-114.5 643,-114.5 649,-114.5 655,-120.5 655,-126.5 655,-126.5 655,-185.75 655,-185.75 655,-191.75 649,-197.75 643,-197.75 643,-197.75 63,-197.75 63,-197.75 57,-197.75 51,-191.75 51,-185.75 51,-185.75 51,-126.5 51,-126.5 51,-120.5 57,-114.5 63,-114.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="353" y="-174.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Read&#45;Side / Injection</text>
28
28
  </g>
29
29
  <!-- Rem -->
30
30
  <g id="node1" class="node">
31
31
  <title>Rem</title>
32
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M114.25,-395C114.25,-395 27.75,-395 27.75,-395 21.75,-395 15.75,-389 15.75,-383 15.75,-383 15.75,-371 15.75,-371 15.75,-365 21.75,-359 27.75,-359 27.75,-359 114.25,-359 114.25,-359 120.25,-359 126.25,-365 126.25,-371 126.25,-371 126.25,-383 126.25,-383 126.25,-389 120.25,-395 114.25,-395"/>
33
- <text xml:space="preserve" text-anchor="middle" x="71" y="-379.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_remember</text>
34
- <text xml:space="preserve" text-anchor="middle" x="71" y="-367.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
32
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M550.25,-412.5C550.25,-412.5 463.75,-412.5 463.75,-412.5 457.75,-412.5 451.75,-406.5 451.75,-400.5 451.75,-400.5 451.75,-388.5 451.75,-388.5 451.75,-382.5 457.75,-376.5 463.75,-376.5 463.75,-376.5 550.25,-376.5 550.25,-376.5 556.25,-376.5 562.25,-382.5 562.25,-388.5 562.25,-388.5 562.25,-400.5 562.25,-400.5 562.25,-406.5 556.25,-412.5 550.25,-412.5"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="507" y="-397" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_remember</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="507" y="-385" font-family="sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
35
35
  </g>
36
36
  <!-- Fmem -->
37
- <g id="node5" class="node">
37
+ <g id="node6" class="node">
38
38
  <title>Fmem</title>
39
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M163.12,-263.25C163.12,-265.46 136.18,-267.25 103,-267.25 69.82,-267.25 42.88,-265.46 42.88,-263.25 42.88,-263.25 42.88,-227.25 42.88,-227.25 42.88,-225.04 69.82,-223.25 103,-223.25 136.18,-223.25 163.12,-225.04 163.12,-227.25 163.12,-227.25 163.12,-263.25 163.12,-263.25"/>
40
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M163.12,-263.25C163.12,-261.04 136.18,-259.25 103,-259.25 69.82,-259.25 42.88,-261.04 42.88,-263.25"/>
41
- <text xml:space="preserve" text-anchor="middle" x="103" y="-247.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
- <text xml:space="preserve" text-anchor="middle" x="103" y="-235.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">fact · pref · lesson · env</text>
39
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M565.12,-280.75C565.12,-282.96 538.18,-284.75 505,-284.75 471.82,-284.75 444.88,-282.96 444.88,-280.75 444.88,-280.75 444.88,-244.75 444.88,-244.75 444.88,-242.54 471.82,-240.75 505,-240.75 538.18,-240.75 565.12,-242.54 565.12,-244.75 565.12,-244.75 565.12,-280.75 565.12,-280.75"/>
40
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M565.12,-280.75C565.12,-278.54 538.18,-276.75 505,-276.75 471.82,-276.75 444.88,-278.54 444.88,-280.75"/>
41
+ <text xml:space="preserve" text-anchor="middle" x="505" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="505" y="-253.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">fact · pref · lesson · env</text>
43
43
  </g>
44
44
  <!-- Rem&#45;&gt;Fmem -->
45
45
  <g id="edge1" class="edge">
46
46
  <title>Rem&#45;&gt;Fmem</title>
47
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M75.32,-358.5C80.44,-337.74 89.07,-302.74 95.33,-277.34"/>
48
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="98.02,-278.13 97.22,-269.69 92.58,-276.79 98.02,-278.13"/>
47
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M506.73,-376C506.41,-355.33 505.88,-320.55 505.48,-295.17"/>
48
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="508.29,-295.2 505.36,-287.25 502.69,-295.29 508.29,-295.2"/>
49
49
  </g>
50
50
  <!-- Skc -->
51
51
  <g id="node2" class="node">
52
52
  <title>Skc</title>
53
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M411,-395C411,-395 335,-395 335,-395 329,-395 323,-389 323,-383 323,-383 323,-371 323,-371 323,-365 329,-359 335,-359 335,-359 411,-359 411,-359 417,-359 423,-365 423,-371 423,-371 423,-383 423,-383 423,-389 417,-395 411,-395"/>
54
- <text xml:space="preserve" text-anchor="middle" x="373" y="-379.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_create</text>
55
- <text xml:space="preserve" text-anchor="middle" x="373" y="-367.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_add_reference</text>
53
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M260,-412.5C260,-412.5 184,-412.5 184,-412.5 178,-412.5 172,-406.5 172,-400.5 172,-400.5 172,-388.5 172,-388.5 172,-382.5 178,-376.5 184,-376.5 184,-376.5 260,-376.5 260,-376.5 266,-376.5 272,-382.5 272,-388.5 272,-388.5 272,-400.5 272,-400.5 272,-406.5 266,-412.5 260,-412.5"/>
54
+ <text xml:space="preserve" text-anchor="middle" x="222" y="-397" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_create</text>
55
+ <text xml:space="preserve" text-anchor="middle" x="222" y="-385" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_add_reference</text>
56
56
  </g>
57
57
  <!-- Fskl -->
58
- <g id="node6" class="node">
58
+ <g id="node7" class="node">
59
59
  <title>Fskl</title>
60
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M429.75,-263.25C429.75,-265.46 404.31,-267.25 373,-267.25 341.69,-267.25 316.25,-265.46 316.25,-263.25 316.25,-263.25 316.25,-227.25 316.25,-227.25 316.25,-225.04 341.69,-223.25 373,-223.25 404.31,-223.25 429.75,-225.04 429.75,-227.25 429.75,-227.25 429.75,-263.25 429.75,-263.25"/>
61
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M429.75,-263.25C429.75,-261.04 404.31,-259.25 373,-259.25 341.69,-259.25 316.25,-261.04 316.25,-263.25"/>
62
- <text xml:space="preserve" text-anchor="middle" x="373" y="-247.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
63
- <text xml:space="preserve" text-anchor="middle" x="373" y="-235.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
60
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M279.75,-280.75C279.75,-282.96 254.31,-284.75 223,-284.75 191.69,-284.75 166.25,-282.96 166.25,-280.75 166.25,-280.75 166.25,-244.75 166.25,-244.75 166.25,-242.54 191.69,-240.75 223,-240.75 254.31,-240.75 279.75,-242.54 279.75,-244.75 279.75,-244.75 279.75,-280.75 279.75,-280.75"/>
61
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M279.75,-280.75C279.75,-278.54 254.31,-276.75 223,-276.75 191.69,-276.75 166.25,-278.54 166.25,-280.75"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="223" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
63
+ <text xml:space="preserve" text-anchor="middle" x="223" y="-253.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
64
64
  </g>
65
65
  <!-- Skc&#45;&gt;Fskl -->
66
66
  <g id="edge2" class="edge">
67
67
  <title>Skc&#45;&gt;Fskl</title>
68
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M373,-358.5C373,-337.83 373,-303.05 373,-277.67"/>
69
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="375.8,-277.75 373,-269.75 370.2,-277.75 375.8,-277.75"/>
68
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M222.13,-376C222.29,-355.33 222.56,-320.55 222.76,-295.17"/>
69
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="225.56,-295.27 222.82,-287.25 219.96,-295.23 225.56,-295.27"/>
70
70
  </g>
71
71
  <!-- Note -->
72
72
  <g id="node3" class="node">
73
73
  <title>Note</title>
74
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M271.25,-395C271.25,-395 178.75,-395 178.75,-395 172.75,-395 166.75,-389 166.75,-383 166.75,-383 166.75,-371 166.75,-371 166.75,-365 172.75,-359 178.75,-359 178.75,-359 271.25,-359 271.25,-359 277.25,-359 283.25,-365 283.25,-371 283.25,-371 283.25,-383 283.25,-383 283.25,-389 277.25,-395 271.25,-395"/>
75
- <text xml:space="preserve" text-anchor="middle" x="225" y="-379.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_note_outcome</text>
76
- <text xml:space="preserve" text-anchor="middle" x="225" y="-367.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_reflect</text>
74
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M120.25,-412.5C120.25,-412.5 27.75,-412.5 27.75,-412.5 21.75,-412.5 15.75,-406.5 15.75,-400.5 15.75,-400.5 15.75,-388.5 15.75,-388.5 15.75,-382.5 21.75,-376.5 27.75,-376.5 27.75,-376.5 120.25,-376.5 120.25,-376.5 126.25,-376.5 132.25,-382.5 132.25,-388.5 132.25,-388.5 132.25,-400.5 132.25,-400.5 132.25,-406.5 126.25,-412.5 120.25,-412.5"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="74" y="-397" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_note_outcome</text>
76
+ <text xml:space="preserve" text-anchor="middle" x="74" y="-385" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_reflect</text>
77
77
  </g>
78
78
  <!-- Flrn -->
79
- <g id="node7" class="node">
79
+ <g id="node8" class="node">
80
80
  <title>Flrn</title>
81
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M276.5,-263.25C276.5,-265.46 260.14,-267.25 240,-267.25 219.86,-267.25 203.5,-265.46 203.5,-263.25 203.5,-263.25 203.5,-227.25 203.5,-227.25 203.5,-225.04 219.86,-223.25 240,-223.25 260.14,-223.25 276.5,-225.04 276.5,-227.25 276.5,-227.25 276.5,-263.25 276.5,-263.25"/>
82
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M276.5,-263.25C276.5,-261.04 260.14,-259.25 240,-259.25 219.86,-259.25 203.5,-261.04 203.5,-263.25"/>
83
- <text xml:space="preserve" text-anchor="middle" x="240" y="-247.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
84
- <text xml:space="preserve" text-anchor="middle" x="240" y="-235.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
81
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M126.5,-280.75C126.5,-282.96 110.14,-284.75 90,-284.75 69.86,-284.75 53.5,-282.96 53.5,-280.75 53.5,-280.75 53.5,-244.75 53.5,-244.75 53.5,-242.54 69.86,-240.75 90,-240.75 110.14,-240.75 126.5,-242.54 126.5,-244.75 126.5,-244.75 126.5,-280.75 126.5,-280.75"/>
82
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M126.5,-280.75C126.5,-278.54 110.14,-276.75 90,-276.75 69.86,-276.75 53.5,-278.54 53.5,-280.75"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="90" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="90" y="-253.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
85
85
  </g>
86
86
  <!-- Note&#45;&gt;Flrn -->
87
87
  <g id="edge3" class="edge">
88
88
  <title>Note&#45;&gt;Flrn</title>
89
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M227.02,-358.5C229.41,-337.83 233.43,-303.05 236.37,-277.67"/>
90
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="239.15,-278 237.28,-269.73 233.58,-277.36 239.15,-278"/>
89
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M76.16,-376C78.71,-355.33 83,-320.55 86.13,-295.17"/>
90
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="88.9,-295.52 87.1,-287.23 83.35,-294.83 88.9,-295.52"/>
91
91
  </g>
92
92
  <!-- Dist -->
93
93
  <g id="node4" class="node">
94
94
  <title>Dist</title>
95
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M551,-395C551,-395 475,-395 475,-395 469,-395 463,-389 463,-383 463,-383 463,-371 463,-371 463,-365 469,-359 475,-359 475,-359 551,-359 551,-359 557,-359 563,-365 563,-371 563,-371 563,-383 563,-383 563,-389 557,-395 551,-395"/>
96
- <text xml:space="preserve" text-anchor="middle" x="513" y="-379.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
97
- <text xml:space="preserve" text-anchor="middle" x="513" y="-367.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(session → skill)</text>
95
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M400,-412.5C400,-412.5 324,-412.5 324,-412.5 318,-412.5 312,-406.5 312,-400.5 312,-400.5 312,-388.5 312,-388.5 312,-382.5 318,-376.5 324,-376.5 324,-376.5 400,-376.5 400,-376.5 406,-376.5 412,-382.5 412,-388.5 412,-388.5 412,-400.5 412,-400.5 412,-406.5 406,-412.5 400,-412.5"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-397" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-385" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(session → skill)</text>
98
98
  </g>
99
99
  <!-- Dist&#45;&gt;Fskl -->
100
100
  <g id="edge4" class="edge">
101
101
  <title>Dist&#45;&gt;Fskl</title>
102
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M494.12,-358.5C470.82,-336.91 430.92,-299.93 403.32,-274.35"/>
103
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="405.45,-272.5 397.67,-269.12 401.64,-276.61 405.45,-272.5"/>
102
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M343.25,-376C320.13,-354.41 280.51,-317.43 253.1,-291.85"/>
103
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="255.26,-290.03 247.5,-286.62 251.44,-294.13 255.26,-290.03"/>
104
104
  </g>
105
105
  <!-- Fses -->
106
- <g id="node8" class="node">
106
+ <g id="node9" class="node">
107
107
  <title>Fses</title>
108
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M554.5,-263.25C554.5,-265.46 535.45,-267.25 512,-267.25 488.55,-267.25 469.5,-265.46 469.5,-263.25 469.5,-263.25 469.5,-227.25 469.5,-227.25 469.5,-225.04 488.55,-223.25 512,-223.25 535.45,-223.25 554.5,-225.04 554.5,-227.25 554.5,-227.25 554.5,-263.25 554.5,-263.25"/>
109
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M554.5,-263.25C554.5,-261.04 535.45,-259.25 512,-259.25 488.55,-259.25 469.5,-261.04 469.5,-263.25"/>
110
- <text xml:space="preserve" text-anchor="middle" x="512" y="-247.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
111
- <text xml:space="preserve" text-anchor="middle" x="512" y="-235.75" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
108
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M404.5,-280.75C404.5,-282.96 385.45,-284.75 362,-284.75 338.55,-284.75 319.5,-282.96 319.5,-280.75 319.5,-280.75 319.5,-244.75 319.5,-244.75 319.5,-242.54 338.55,-240.75 362,-240.75 385.45,-240.75 404.5,-242.54 404.5,-244.75 404.5,-244.75 404.5,-280.75 404.5,-280.75"/>
109
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M404.5,-280.75C404.5,-278.54 385.45,-276.75 362,-276.75 338.55,-276.75 319.5,-278.54 319.5,-280.75"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
111
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-253.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
112
112
  </g>
113
113
  <!-- Dist&#45;&gt;Fses -->
114
114
  <g id="edge5" class="edge">
115
115
  <title>Dist&#45;&gt;Fses</title>
116
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M512.79,-348.57C512.6,-324.48 512.34,-289.92 512.17,-267.78"/>
117
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="509.99,-348.56 512.85,-356.53 515.59,-348.51 509.99,-348.56"/>
118
- <text xml:space="preserve" text-anchor="middle" x="522.71" y="-316.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
116
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M362,-366.07C362,-341.98 362,-307.42 362,-285.28"/>
117
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="359.2,-366.03 362,-374.03 364.8,-366.03 359.2,-366.03"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="372.12" y="-333.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
119
+ </g>
120
+ <!-- Mrec -->
121
+ <g id="node5" class="node">
122
+ <title>Mrec</title>
123
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M683.25,-412.5C683.25,-412.5 614.75,-412.5 614.75,-412.5 608.75,-412.5 602.75,-406.5 602.75,-400.5 602.75,-400.5 602.75,-388.5 602.75,-388.5 602.75,-382.5 608.75,-376.5 614.75,-376.5 614.75,-376.5 683.25,-376.5 683.25,-376.5 689.25,-376.5 695.25,-382.5 695.25,-388.5 695.25,-388.5 695.25,-400.5 695.25,-400.5 695.25,-406.5 689.25,-412.5 683.25,-412.5"/>
124
+ <text xml:space="preserve" text-anchor="middle" x="649" y="-397" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_record</text>
125
+ <text xml:space="preserve" text-anchor="middle" x="649" y="-385" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_resolve</text>
126
+ </g>
127
+ <!-- Mrec&#45;&gt;Fmem -->
128
+ <g id="edge7" class="edge">
129
+ <title>Mrec&#45;&gt;Fmem</title>
130
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M625.29,-375.98C612.73,-366.42 597.21,-354.19 584,-342.5 565.89,-326.47 546.65,-307.34 531.69,-291.95"/>
131
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="534.08,-290.39 526.51,-286.58 530.05,-294.28 534.08,-290.39"/>
132
+ <text xml:space="preserve" text-anchor="middle" x="617" y="-333.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
133
+ </g>
134
+ <!-- Fmis -->
135
+ <g id="node10" class="node">
136
+ <title>Fmis</title>
137
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M744.88,-280.75C744.88,-282.96 713.56,-284.75 675,-284.75 636.44,-284.75 605.12,-282.96 605.12,-280.75 605.12,-280.75 605.12,-244.75 605.12,-244.75 605.12,-242.54 636.44,-240.75 675,-240.75 713.56,-240.75 744.88,-242.54 744.88,-244.75 744.88,-244.75 744.88,-280.75 744.88,-280.75"/>
138
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M744.88,-280.75C744.88,-278.54 713.56,-276.75 675,-276.75 636.44,-276.75 605.12,-278.54 605.12,-280.75"/>
139
+ <text xml:space="preserve" text-anchor="middle" x="675" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
140
+ <text xml:space="preserve" text-anchor="middle" x="675" y="-253.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sig → count · fix · regressed</text>
141
+ </g>
142
+ <!-- Mrec&#45;&gt;Fmis -->
143
+ <g id="edge6" class="edge">
144
+ <title>Mrec&#45;&gt;Fmis</title>
145
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M652.51,-376C656.67,-355.24 663.68,-320.24 668.77,-294.84"/>
146
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="671.47,-295.6 670.3,-287.21 665.98,-294.5 671.47,-295.6"/>
119
147
  </g>
120
148
  <!-- Rec -->
121
- <g id="node9" class="node">
149
+ <g id="node11" class="node">
122
150
  <title>Rec</title>
123
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M140.88,-141C140.88,-141 85.12,-141 85.12,-141 79.12,-141 73.12,-135 73.12,-129 73.12,-129 73.12,-117 73.12,-117 73.12,-111 79.12,-105 85.12,-105 85.12,-105 140.88,-105 140.88,-105 146.88,-105 152.88,-111 152.88,-117 152.88,-117 152.88,-129 152.88,-129 152.88,-135 146.88,-141 140.88,-141"/>
124
- <text xml:space="preserve" text-anchor="middle" x="113" y="-119.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
151
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M514.88,-158.5C514.88,-158.5 459.12,-158.5 459.12,-158.5 453.12,-158.5 447.12,-152.5 447.12,-146.5 447.12,-146.5 447.12,-134.5 447.12,-134.5 447.12,-128.5 453.12,-122.5 459.12,-122.5 459.12,-122.5 514.88,-122.5 514.88,-122.5 520.88,-122.5 526.88,-128.5 526.88,-134.5 526.88,-134.5 526.88,-146.5 526.88,-146.5 526.88,-152.5 520.88,-158.5 514.88,-158.5"/>
152
+ <text xml:space="preserve" text-anchor="middle" x="487" y="-137" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
125
153
  </g>
126
154
  <!-- Fmem&#45;&gt;Rec -->
127
- <g id="edge6" class="edge">
155
+ <g id="edge8" class="edge">
128
156
  <title>Fmem&#45;&gt;Rec</title>
129
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M104.79,-222.75C106.45,-202.78 108.93,-172.95 110.73,-151.3"/>
130
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="113.52,-151.58 111.39,-143.37 107.94,-151.11 113.52,-151.58"/>
157
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M501.78,-240.25C498.78,-220.19 494.29,-190.18 491.04,-168.51"/>
158
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="493.85,-168.36 489.9,-160.86 488.31,-169.19 493.85,-168.36"/>
131
159
  </g>
132
160
  <!-- Skv -->
133
- <g id="node10" class="node">
161
+ <g id="node12" class="node">
134
162
  <title>Skv</title>
135
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M399.25,-141C399.25,-141 342.75,-141 342.75,-141 336.75,-141 330.75,-135 330.75,-129 330.75,-129 330.75,-117 330.75,-117 330.75,-111 336.75,-105 342.75,-105 342.75,-105 399.25,-105 399.25,-105 405.25,-105 411.25,-111 411.25,-117 411.25,-117 411.25,-129 411.25,-129 411.25,-135 405.25,-141 399.25,-141"/>
136
- <text xml:space="preserve" text-anchor="middle" x="371" y="-119.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
163
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M265.25,-158.5C265.25,-158.5 208.75,-158.5 208.75,-158.5 202.75,-158.5 196.75,-152.5 196.75,-146.5 196.75,-146.5 196.75,-134.5 196.75,-134.5 196.75,-128.5 202.75,-122.5 208.75,-122.5 208.75,-122.5 265.25,-122.5 265.25,-122.5 271.25,-122.5 277.25,-128.5 277.25,-134.5 277.25,-134.5 277.25,-146.5 277.25,-146.5 277.25,-152.5 271.25,-158.5 265.25,-158.5"/>
164
+ <text xml:space="preserve" text-anchor="middle" x="237" y="-137" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
137
165
  </g>
138
166
  <!-- Fskl&#45;&gt;Skv -->
139
- <g id="edge7" class="edge">
167
+ <g id="edge9" class="edge">
140
168
  <title>Fskl&#45;&gt;Skv</title>
141
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M372.64,-222.75C372.31,-202.78 371.81,-172.95 371.45,-151.3"/>
142
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="374.26,-151.33 371.32,-143.38 368.66,-151.43 374.26,-151.33"/>
169
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M225.5,-240.25C227.83,-220.28 231.3,-190.45 233.82,-168.8"/>
170
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="236.6,-169.14 234.75,-160.87 231.04,-168.49 236.6,-169.14"/>
143
171
  </g>
144
172
  <!-- Out -->
145
- <g id="node11" class="node">
173
+ <g id="node13" class="node">
146
174
  <title>Out</title>
147
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M278.88,-141C278.88,-141 205.12,-141 205.12,-141 199.12,-141 193.12,-135 193.12,-129 193.12,-129 193.12,-117 193.12,-117 193.12,-111 199.12,-105 205.12,-105 205.12,-105 278.88,-105 278.88,-105 284.88,-105 290.88,-111 290.88,-117 290.88,-117 290.88,-129 290.88,-129 290.88,-135 284.88,-141 278.88,-141"/>
148
- <text xml:space="preserve" text-anchor="middle" x="242" y="-125.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
149
- <text xml:space="preserve" text-anchor="middle" x="242" y="-113.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
175
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M144.88,-158.5C144.88,-158.5 71.12,-158.5 71.12,-158.5 65.12,-158.5 59.12,-152.5 59.12,-146.5 59.12,-146.5 59.12,-134.5 59.12,-134.5 59.12,-128.5 65.12,-122.5 71.12,-122.5 71.12,-122.5 144.88,-122.5 144.88,-122.5 150.88,-122.5 156.88,-128.5 156.88,-134.5 156.88,-134.5 156.88,-146.5 156.88,-146.5 156.88,-152.5 150.88,-158.5 144.88,-158.5"/>
176
+ <text xml:space="preserve" text-anchor="middle" x="108" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
177
+ <text xml:space="preserve" text-anchor="middle" x="108" y="-131" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
150
178
  </g>
151
179
  <!-- Flrn&#45;&gt;Out -->
152
- <g id="edge8" class="edge">
180
+ <g id="edge10" class="edge">
153
181
  <title>Flrn&#45;&gt;Out</title>
154
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M240.36,-222.75C240.69,-202.78 241.19,-172.95 241.55,-151.3"/>
155
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="244.34,-151.43 241.68,-143.38 238.74,-151.33 244.34,-151.43"/>
182
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M93.22,-240.25C96.22,-220.19 100.71,-190.18 103.96,-168.51"/>
183
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="106.69,-169.19 105.1,-160.86 101.15,-168.36 106.69,-169.19"/>
156
184
  </g>
157
185
  <!-- Sesv -->
158
- <g id="node12" class="node">
186
+ <g id="node14" class="node">
159
187
  <title>Sesv</title>
160
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M529.12,-141C529.12,-141 462.88,-141 462.88,-141 456.88,-141 450.88,-135 450.88,-129 450.88,-129 450.88,-117 450.88,-117 450.88,-111 456.88,-105 462.88,-105 462.88,-105 529.12,-105 529.12,-105 535.12,-105 541.12,-111 541.12,-117 541.12,-117 541.12,-129 541.12,-129 541.12,-135 535.12,-141 529.12,-141"/>
161
- <text xml:space="preserve" text-anchor="middle" x="496" y="-125.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
162
- <text xml:space="preserve" text-anchor="middle" x="496" y="-113.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
188
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M395.12,-158.5C395.12,-158.5 328.88,-158.5 328.88,-158.5 322.88,-158.5 316.88,-152.5 316.88,-146.5 316.88,-146.5 316.88,-134.5 316.88,-134.5 316.88,-128.5 322.88,-122.5 328.88,-122.5 328.88,-122.5 395.12,-122.5 395.12,-122.5 401.12,-122.5 407.12,-128.5 407.12,-134.5 407.12,-134.5 407.12,-146.5 407.12,-146.5 407.12,-152.5 401.12,-158.5 395.12,-158.5"/>
189
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
190
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-131" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
163
191
  </g>
164
192
  <!-- Fses&#45;&gt;Sesv -->
165
- <g id="edge9" class="edge">
193
+ <g id="edge11" class="edge">
166
194
  <title>Fses&#45;&gt;Sesv</title>
167
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M509.14,-222.75C506.47,-202.69 502.48,-172.68 499.59,-151.01"/>
168
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="502.41,-150.92 498.58,-143.36 496.86,-151.66 502.41,-150.92"/>
195
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M362,-240.25C362,-220.28 362,-190.45 362,-168.8"/>
196
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="364.8,-168.88 362,-160.88 359.2,-168.88 364.8,-168.88"/>
197
+ </g>
198
+ <!-- Mlst -->
199
+ <g id="node15" class="node">
200
+ <title>Mlst</title>
201
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M634.88,-158.5C634.88,-158.5 579.12,-158.5 579.12,-158.5 573.12,-158.5 567.12,-152.5 567.12,-146.5 567.12,-146.5 567.12,-134.5 567.12,-134.5 567.12,-128.5 573.12,-122.5 579.12,-122.5 579.12,-122.5 634.88,-122.5 634.88,-122.5 640.88,-122.5 646.88,-128.5 646.88,-134.5 646.88,-134.5 646.88,-146.5 646.88,-146.5 646.88,-152.5 640.88,-158.5 634.88,-158.5"/>
202
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_list</text>
203
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-131" font-family="sans-Serif" font-size="10.00" fill="#0f172a">correction_hint</text>
204
+ </g>
205
+ <!-- Fmis&#45;&gt;Mlst -->
206
+ <g id="edge12" class="edge">
207
+ <title>Fmis&#45;&gt;Mlst</title>
208
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M662.84,-240.25C651.29,-219.83 633.91,-189.09 621.61,-167.34"/>
209
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="624.19,-166.21 617.82,-160.63 619.32,-168.97 624.19,-166.21"/>
169
210
  </g>
170
211
  <!-- Prompt -->
171
- <g id="node13" class="node">
212
+ <g id="node16" class="node">
172
213
  <title>Prompt</title>
173
- <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M395,-36C395,-36 217,-36 217,-36 211,-36 205,-30 205,-24 205,-24 205,-12 205,-12 205,-6 211,0 217,0 217,0 395,0 395,0 401,0 407,-6 407,-12 407,-12 407,-24 407,-24 407,-30 401,-36 395,-36"/>
174
- <text xml:space="preserve" text-anchor="middle" x="306" y="-20.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder</text>
175
- <text xml:space="preserve" text-anchor="middle" x="306" y="-8.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MEMORY + SKILLS + LEARNING blocks</text>
214
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M448.75,-44C448.75,-44 275.25,-44 275.25,-44 269.25,-44 263.25,-38 263.25,-32 263.25,-32 263.25,-12 263.25,-12 263.25,-6 269.25,0 275.25,0 275.25,0 448.75,0 448.75,0 454.75,0 460.75,-6 460.75,-12 460.75,-12 460.75,-32 460.75,-32 460.75,-38 454.75,-44 448.75,-44"/>
215
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder</text>
216
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-18.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MEMORY + SKILLS + LEARNING</text>
217
+ <text xml:space="preserve" text-anchor="middle" x="362" y="-6.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ KNOWN MISTAKES / KNOWN FIXES</text>
176
218
  </g>
177
219
  <!-- Rec&#45;&gt;Prompt -->
178
- <g id="edge10" class="edge">
220
+ <g id="edge13" class="edge">
179
221
  <title>Rec&#45;&gt;Prompt</title>
180
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M145.74,-104.53C178.26,-87.17 228.26,-60.49 263.76,-41.54"/>
181
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="264.98,-44.07 270.72,-37.83 262.34,-39.13 264.98,-44.07"/>
222
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M468.29,-122.06C448.29,-103.42 416.27,-73.58 392.6,-51.52"/>
223
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="394.74,-49.69 386.98,-46.28 390.92,-53.78 394.74,-49.69"/>
182
224
  </g>
183
225
  <!-- Skv&#45;&gt;Prompt -->
184
- <g id="edge11" class="edge">
226
+ <g id="edge14" class="edge">
185
227
  <title>Skv&#45;&gt;Prompt</title>
186
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M359.97,-104.53C349.72,-88.28 334.3,-63.84 322.56,-45.24"/>
187
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="324.99,-43.84 318.35,-38.57 320.25,-46.83 324.99,-43.84"/>
228
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M255.71,-122.06C275.71,-103.42 307.73,-73.58 331.4,-51.52"/>
229
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="333.08,-53.78 337.02,-46.28 329.26,-49.69 333.08,-53.78"/>
188
230
  </g>
189
231
  <!-- Out&#45;&gt;Prompt -->
190
- <g id="edge12" class="edge">
232
+ <g id="edge15" class="edge">
191
233
  <title>Out&#45;&gt;Prompt</title>
192
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M252.86,-104.53C262.95,-88.28 278.14,-63.84 289.69,-45.24"/>
193
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="291.99,-46.85 293.84,-38.58 287.24,-43.89 291.99,-46.85"/>
234
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M146.3,-121.93C188.57,-102.54 257.03,-71.15 305.47,-48.93"/>
235
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="306.38,-51.59 312.49,-45.71 304.05,-46.5 306.38,-51.59"/>
194
236
  </g>
195
237
  <!-- Sesv&#45;&gt;Prompt -->
196
- <g id="edge13" class="edge">
238
+ <g id="edge16" class="edge">
197
239
  <title>Sesv&#45;&gt;Prompt</title>
198
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M463.77,-104.53C431.76,-87.17 382.53,-60.49 347.58,-41.54"/>
199
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="349.12,-39.19 340.76,-37.84 346.46,-44.12 349.12,-39.19"/>
240
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M362,-122.06C362,-104.3 362,-76.39 362,-54.71"/>
241
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="364.8,-54.91 362,-46.91 359.2,-54.91 364.8,-54.91"/>
242
+ </g>
243
+ <!-- Mlst&#45;&gt;Prompt -->
244
+ <g id="edge17" class="edge">
245
+ <title>Mlst&#45;&gt;Prompt</title>
246
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M570.06,-121.93C529.7,-102.75 464.62,-71.8 417.99,-49.62"/>
247
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="419.2,-47.1 410.77,-46.19 416.79,-52.15 419.2,-47.1"/>
248
+ <text xml:space="preserve" text-anchor="middle" x="529.17" y="-79.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">do NOT repeat</text>
200
249
  </g>
201
250
  </g>
202
251
  </svg>