pwn 0.5.781 → 0.5.783

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/Installation.md +33 -9
  3. data/documentation/diagrams/dot/extrospection-world-awareness.dot +37 -92
  4. data/documentation/diagrams/dot/memory-skills-detailed.dot +33 -98
  5. data/documentation/diagrams/dot/overall-pwn-architecture.dot +54 -32
  6. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +53 -30
  7. data/documentation/diagrams/dot/reinforcement-learning.dot +46 -111
  8. data/documentation/diagrams/dot/swarm-multi-agent.dot +36 -61
  9. data/documentation/diagrams/extrospection-world-awareness.svg +139 -510
  10. data/documentation/diagrams/memory-skills-detailed.svg +126 -475
  11. data/documentation/diagrams/overall-pwn-architecture.svg +116 -266
  12. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +158 -244
  13. data/documentation/diagrams/reinforcement-learning.svg +238 -529
  14. data/documentation/diagrams/swarm-multi-agent.svg +104 -233
  15. data/documentation/pwn-REPL.md +31 -3
  16. data/documentation/pwn-ai-Agent.md +62 -2
  17. data/etc/default_cron/session_cleanup.rb +335 -42
  18. data/lib/pwn/ai/agent/curriculum.rb +2 -2
  19. data/lib/pwn/ai/agent/learning.rb +11 -4
  20. data/lib/pwn/ai/agent/mistakes.rb +22 -3
  21. data/lib/pwn/ai/agent/tools/sessions.rb +6 -6
  22. data/lib/pwn/ai/http_retry.rb +3 -0
  23. data/lib/pwn/ai/router.rb +3 -1
  24. data/lib/pwn/cron.rb +1 -1
  25. data/lib/pwn/memory.rb +62 -6
  26. data/lib/pwn/plugins/repl/ai.rb +13 -3
  27. data/lib/pwn/plugins/repl/ai_console.rb +37 -21
  28. data/lib/pwn/session_trace.rb +1 -1
  29. data/lib/pwn/sessions.rb +305 -80
  30. data/lib/pwn/version.rb +1 -1
  31. data/spec/lib/pwn/ai/agent/learning_spec.rb +65 -2
  32. data/spec/lib/pwn/ai/agent/swarm_spec.rb +3 -3
  33. data/spec/lib/pwn/memory_spec.rb +58 -1
  34. data/spec/lib/pwn/plugins/repl/ai_console_spec.rb +191 -6
  35. data/spec/lib/pwn/plugins/repl/ai_result_chronology_spec.rb +2 -2
  36. data/spec/lib/pwn/plugins/repl/ai_spec.rb +28 -11
  37. data/spec/lib/pwn/session_cleanup_default_spec.rb +2 -2
  38. data/spec/lib/pwn/session_cleanup_payload_spec.rb +467 -36
  39. data/spec/lib/pwn/sessions_spec.rb +116 -16
  40. data/third_party/pwn_rdoc.jsonl +12 -0
  41. metadata +1 -1
@@ -4,536 +4,165 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Extrospection Pages: 1 -->
7
- <svg width="1182pt" height="1342pt"
8
- viewBox="0.00 0.00 1182.00 1342.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 1299.2)">
7
+ <svg width="992pt" height="691pt"
8
+ viewBox="0.00 0.00 992.00 691.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(28.8 661.96)">
10
10
  <title>PWN_Extrospection</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1299.2 1138.95,-1299.2 1138.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="204" y="-1234" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Extrospection &#45; On&#45;demand sensing + ambient baseline</text>
13
- <text xml:space="preserve" text-anchor="start" x="147.75" y="-1222.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">PRIMARY: intel · verify · watch · rf_tune · osint · serial · telecomm · packet · vision · voice · observe &#160;· &#160;SECONDARY: snapshot/drift (AUTO_SECTIONS=host/repo/env)</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-28.8,28.8 -28.8,-661.96 962.8,-661.96 962.8,28.8 -28.8,28.8"/>
12
+ <text xml:space="preserve" text-anchor="start" x="123.12" y="-611.16" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent::Extrospection &#45; On&#45;demand sensing + ambient baseline</text>
13
+ <text xml:space="preserve" text-anchor="start" x="196.25" y="-599.71" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">automatic host / repo / env only · other probes and actions are on demand · observations are not completion proof</text>
14
14
  <g id="clust1" class="cluster">
15
- <title>cluster_world</title>
16
- <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M20,-116C20,-116 157,-116 157,-116 163,-116 169,-122 169,-128 169,-128 169,-1166 169,-1166 169,-1172 163,-1178 157,-1178 157,-1178 20,-1178 20,-1178 14,-1178 8,-1172 8,-1166 8,-1166 8,-128 8,-128 8,-122 14,-116 20,-116"/>
17
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1155" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Outside World</text>
15
+ <title>cluster_auto</title>
16
+ <path fill="#1e293b" stroke="#334155" d="M20,-285.08C20,-285.08 286,-285.08 286,-285.08 292,-285.08 298,-291.08 298,-297.08 298,-297.08 298,-567.41 298,-567.41 298,-573.41 292,-579.41 286,-579.41 286,-579.41 20,-579.41 20,-579.41 14,-579.41 8,-573.41 8,-567.41 8,-567.41 8,-297.08 8,-297.08 8,-291.08 14,-285.08 20,-285.08"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-564.01" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">AMBIENT BASELINE &#160;· &#160;automatic scope</text>
18
18
  </g>
19
- <g id="clust3" class="cluster">
20
- <title>cluster_eng</title>
21
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M570.25,-8C570.25,-8 766.5,-8 766.5,-8 772.5,-8 778.5,-14 778.5,-20 778.5,-20 778.5,-1197 778.5,-1197 778.5,-1203 772.5,-1209 766.5,-1209 766.5,-1209 570.25,-1209 570.25,-1209 564.25,-1209 558.25,-1203 558.25,-1197 558.25,-1197 558.25,-20 558.25,-20 558.25,-14 564.25,-8 570.25,-8"/>
22
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1186" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Extrospection Engine</text>
19
+ <g id="clust2" class="cluster">
20
+ <title>cluster_web</title>
21
+ <path fill="#1e293b" stroke="#94a3b8" stroke-dasharray="5,2" d="M325,-285.08C325,-285.08 609,-285.08 609,-285.08 615,-285.08 621,-291.08 621,-297.08 621,-297.08 621,-574.16 621,-574.16 621,-580.16 615,-586.16 609,-586.16 609,-586.16 325,-586.16 325,-586.16 319,-586.16 313,-580.16 313,-574.16 313,-574.16 313,-297.08 313,-297.08 313,-291.08 319,-285.08 325,-285.08"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-570.76" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">ON DEMAND &#160;· &#160;web / public intelligence</text>
23
23
  </g>
24
- <!-- Host -->
25
- <g id="node1" class="node">
26
- <title>Host</title>
27
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M133.62,-727C133.62,-727 43.38,-727 43.38,-727 37.38,-727 31.38,-721 31.38,-715 31.38,-715 31.38,-703 31.38,-703 31.38,-697 37.38,-691 43.38,-691 43.38,-691 133.62,-691 133.62,-691 139.62,-691 145.62,-697 145.62,-703 145.62,-703 145.62,-715 145.62,-715 145.62,-721 139.62,-727 133.62,-727"/>
28
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-712.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host</text>
29
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-698.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">uname · distro · arch</text>
24
+ <g id="clust3" class="cluster">
25
+ <title>cluster_sense</title>
26
+ <path fill="#1e293b" stroke="#94a3b8" stroke-dasharray="5,2" d="M648,-278.33C648,-278.33 914,-278.33 914,-278.33 920,-278.33 926,-284.33 926,-290.33 926,-290.33 926,-574.16 926,-574.16 926,-580.16 920,-586.16 914,-586.16 914,-586.16 648,-586.16 648,-586.16 642,-586.16 636,-580.16 636,-574.16 636,-574.16 636,-290.33 636,-290.33 636,-284.33 642,-278.33 648,-278.33"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-570.76" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">ON DEMAND &#160;· &#160;devices / media / observations</text>
30
28
  </g>
31
- <!-- Snap -->
32
- <g id="node15" class="node">
33
- <title>Snap</title>
34
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M745.75,-744.75C745.75,-744.75 591,-744.75 591,-744.75 585,-744.75 579,-738.75 579,-732.75 579,-732.75 579,-681.25 579,-681.25 579,-675.25 585,-669.25 591,-669.25 591,-669.25 745.75,-669.25 745.75,-669.25 751.75,-669.25 757.75,-675.25 757.75,-681.25 757.75,-681.25 757.75,-732.75 757.75,-732.75 757.75,-738.75 751.75,-744.75 745.75,-744.75"/>
35
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-730.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_snapshot</text>
36
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-716.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">probe_host/net/toolchain/repo/env</text>
37
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-703.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf/web/osint/serial/telecomm</text>
38
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-689.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">packet/vision/voice</text>
39
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-676.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(auto = host/repo/env only)</text>
29
+ <g id="clust6" class="cluster">
30
+ <title>cluster_retention</title>
31
+ <path fill="#1e293b" stroke="#334155" d="M284,-8C284,-8 650,-8 650,-8 656,-8 662,-14 662,-20 662,-20 662,-236.33 662,-236.33 662,-242.33 656,-248.33 650,-248.33 650,-248.33 284,-248.33 284,-248.33 278,-248.33 272,-242.33 272,-236.33 272,-236.33 272,-20 272,-20 272,-14 278,-8 284,-8"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-232.93" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">RETAINED WORLD MODEL &#160;· &#160;not ground truth</text>
40
33
  </g>
41
- <!-- Host&#45;&gt;Snap -->
34
+ <!-- Baseline -->
35
+ <g id="node1" class="node">
36
+ <title>Baseline</title>
37
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M277.8,-549.16C277.8,-549.16 28.2,-549.16 28.2,-549.16 22.2,-549.16 16.2,-543.16 16.2,-537.16 16.2,-537.16 16.2,-470.62 16.2,-470.62 16.2,-464.62 22.2,-458.62 28.2,-458.62 28.2,-458.62 277.8,-458.62 277.8,-458.62 283.8,-458.62 289.8,-464.62 289.8,-470.62 289.8,-470.62 289.8,-537.16 289.8,-537.16 289.8,-543.16 283.8,-549.16 277.8,-549.16"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-527.19" font-family="sans-Serif" font-size="11.00" fill="#0f172a">AUTO_SECTIONS = host / repo / env</text>
39
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-513.69" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Host: OS / distribution / architecture</text>
40
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-500.19" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Repository: HEAD / dirty state</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-486.69" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Environment: Ruby / gem information</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-473.19" font-family="sans-Serif" font-size="11.00" fill="#0f172a">No automatic network / RF / browser sensing</text>
43
+ </g>
44
+ <!-- Snapshot -->
45
+ <g id="node2" class="node">
46
+ <title>Snapshot</title>
47
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M277.8,-397.12C277.8,-397.12 28.2,-397.12 28.2,-397.12 22.2,-397.12 16.2,-391.12 16.2,-385.12 16.2,-385.12 16.2,-305.08 16.2,-305.08 16.2,-299.08 22.2,-293.08 28.2,-293.08 28.2,-293.08 277.8,-293.08 277.8,-293.08 283.8,-293.08 289.8,-299.08 289.8,-305.08 289.8,-305.08 289.8,-385.12 289.8,-385.12 289.8,-391.12 283.8,-397.12 277.8,-397.12"/>
48
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-375.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">SNAPSHOT + DRIFT</text>
49
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-361.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_snapshot: selected probes</text>
50
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-348.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_drift: delta against prior baseline</text>
51
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-334.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Explicit snapshots can request other sections</text>
52
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-321.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain inventory uses safe version checks</text>
53
+ <text xml:space="preserve" text-anchor="middle" x="153" y="-307.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">or PATH presence; not general tool execution</text>
54
+ </g>
55
+ <!-- Baseline&#45;&gt;Snapshot -->
42
56
  <g id="edge1" class="edge">
43
- <title>Host&#45;&gt;Snap</title>
44
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M146.23,-708.8C244.38,-708.46 447.03,-707.76 568.69,-707.34"/>
45
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="568.43,-710.14 576.42,-707.31 568.41,-704.54 568.43,-710.14"/>
57
+ <title>Baseline&#45;&gt;Snapshot</title>
58
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M153,-458.38C153,-442.56 153,-424.47 153,-407.49"/>
59
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="155.8,-407.61 153,-399.61 150.2,-407.61 155.8,-407.61"/>
60
+ <text xml:space="preserve" text-anchor="middle" x="187.88" y="-424.37" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">auto_extrospect</text>
46
61
  </g>
47
- <!-- Net -->
48
- <g id="node2" class="node">
49
- <title>Net</title>
50
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M145.25,-799C145.25,-799 31.75,-799 31.75,-799 25.75,-799 19.75,-793 19.75,-787 19.75,-787 19.75,-775 19.75,-775 19.75,-769 25.75,-763 31.75,-763 31.75,-763 145.25,-763 145.25,-763 151.25,-763 157.25,-769 157.25,-775 157.25,-775 157.25,-787 157.25,-787 157.25,-793 151.25,-799 145.25,-799"/>
51
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-784.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">net</text>
52
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-770.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">interfaces · listening ports</text>
62
+ <!-- Store -->
63
+ <g id="node7" class="node">
64
+ <title>Store</title>
65
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M642.2,-218.08C642.2,-218.08 291.8,-218.08 291.8,-218.08 285.8,-218.08 279.8,-212.08 279.8,-206.08 279.8,-206.08 279.8,-153.04 279.8,-153.04 279.8,-147.04 285.8,-141.04 291.8,-141.04 291.8,-141.04 642.2,-141.04 642.2,-141.04 648.2,-141.04 654.2,-147.04 654.2,-153.04 654.2,-153.04 654.2,-206.08 654.2,-206.08 654.2,-212.08 648.2,-218.08 642.2,-218.08"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-196.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/extrospection.json</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-182.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Snapshot + baseline / categorized observations</text>
68
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-169.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Watch screenshots: ~/.pwn/extrospection/web/*.png</text>
69
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-155.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Persistence depends on operation / options</text>
53
70
  </g>
54
- <!-- Net&#45;&gt;Snap -->
55
- <g id="edge2" class="edge">
56
- <title>Net&#45;&gt;Snap</title>
57
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M157.84,-775.73C242.82,-768.75 392.2,-755.05 519.25,-736 535.28,-733.6 552.21,-730.66 568.68,-727.59"/>
58
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="569.03,-730.37 576.37,-726.14 567.99,-724.87 569.03,-730.37"/>
71
+ <!-- Snapshot&#45;&gt;Store -->
72
+ <g id="edge5" class="edge">
73
+ <title>Snapshot&#45;&gt;Store</title>
74
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M266.32,-285.08C286.4,-274.62 307.51,-263.63 328.2,-252.85"/>
75
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="329.34,-255.41 335.14,-249.24 326.75,-250.45 329.34,-255.41"/>
76
+ <text xml:space="preserve" text-anchor="middle" x="354.29" y="-258.83" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">snapshot / delta</text>
59
77
  </g>
60
- <!-- Tool -->
78
+ <!-- Web -->
61
79
  <g id="node3" class="node">
62
- <title>Tool</title>
63
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M144.12,-655.25C144.12,-655.25 32.88,-655.25 32.88,-655.25 26.88,-655.25 20.88,-649.25 20.88,-643.25 20.88,-643.25 20.88,-618.75 20.88,-618.75 20.88,-612.75 26.88,-606.75 32.88,-606.75 32.88,-606.75 144.12,-606.75 144.12,-606.75 150.12,-606.75 156.12,-612.75 156.12,-618.75 156.12,-618.75 156.12,-643.25 156.12,-643.25 156.12,-649.25 150.12,-655.25 144.12,-655.25"/>
64
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-640.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">toolchain (presence)</text>
65
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-627.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">nmap/git (safe &#45;&#45;ver)</text>
66
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-613.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">burp/msf/gqrx PATH only</text>
67
- </g>
68
- <!-- Drift -->
69
- <g id="node16" class="node">
70
- <title>Drift</title>
71
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M704.12,-633C704.12,-633 632.62,-633 632.62,-633 626.62,-633 620.62,-627 620.62,-621 620.62,-621 620.62,-609 620.62,-609 620.62,-603 626.62,-597 632.62,-597 632.62,-597 704.12,-597 704.12,-597 710.12,-597 716.12,-603 716.12,-609 716.12,-609 716.12,-621 716.12,-621 716.12,-627 710.12,-633 704.12,-633"/>
72
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-618.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_drift</text>
73
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-604.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">delta vs baseline</text>
74
- </g>
75
- <!-- Tool&#45;&gt;Drift -->
76
- <g id="edge3" class="edge">
77
- <title>Tool&#45;&gt;Drift</title>
78
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M156.64,-629.14C271.42,-625.96 503.37,-619.54 610.62,-616.57"/>
79
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="610.41,-619.38 618.33,-616.36 610.25,-613.78 610.41,-619.38"/>
80
- </g>
81
- <!-- Repo -->
80
+ <title>Web</title>
81
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M600.59,-555.91C600.59,-555.91 333.41,-555.91 333.41,-555.91 327.41,-555.91 321.41,-549.91 321.41,-543.91 321.41,-543.91 321.41,-463.87 321.41,-463.87 321.41,-457.87 327.41,-451.87 333.41,-451.87 333.41,-451.87 600.59,-451.87 600.59,-451.87 606.59,-451.87 612.59,-457.87 612.59,-463.87 612.59,-463.87 612.59,-543.91 612.59,-543.91 612.59,-549.91 606.59,-555.91 600.59,-555.91"/>
82
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-533.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">INDEPENDENT LOOKUPS / WATCHES</text>
83
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-520.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_intel: NVD / CIRCL / Exploit&#45;DB</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-506.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_osint: phone / FCC / patent / IP / person</text>
85
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-493.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_watch: DOM hash / screenshot / TLS</text>
86
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-479.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_verify: CVE / version / doc / generic</text>
87
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-466.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Web: TransparentBrowser headless → REST fallback</text>
88
+ </g>
89
+ <!-- Verdict -->
82
90
  <g id="node4" class="node">
83
- <title>Repo</title>
84
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M141.88,-571C141.88,-571 35.12,-571 35.12,-571 29.12,-571 23.12,-565 23.12,-559 23.12,-559 23.12,-547 23.12,-547 23.12,-541 29.12,-535 35.12,-535 35.12,-535 141.88,-535 141.88,-535 147.88,-535 153.88,-541 153.88,-547 153.88,-547 153.88,-559 153.88,-559 153.88,-565 147.88,-571 141.88,-571"/>
85
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-556.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo · env</text>
86
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-542.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">HEAD · dirty · ruby/gem</text>
87
- </g>
88
- <!-- Repo&#45;&gt;Drift -->
89
- <g id="edge4" class="edge">
90
- <title>Repo&#45;&gt;Drift</title>
91
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M154.39,-559.96C268.33,-572.19 502.5,-597.31 610.51,-608.9"/>
92
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="610.04,-611.66 618.29,-609.73 610.63,-606.1 610.04,-611.66"/>
93
- </g>
94
- <!-- RFhw -->
95
- <g id="node5" class="node">
96
- <title>RFhw</title>
97
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M137.38,-499.25C137.38,-499.25 39.62,-499.25 39.62,-499.25 33.62,-499.25 27.62,-493.25 27.62,-487.25 27.62,-487.25 27.62,-462.75 27.62,-462.75 27.62,-456.75 33.62,-450.75 39.62,-450.75 39.62,-450.75 137.38,-450.75 137.38,-450.75 143.38,-450.75 149.38,-456.75 149.38,-462.75 149.38,-462.75 149.38,-487.25 149.38,-487.25 149.38,-493.25 143.38,-499.25 137.38,-499.25"/>
98
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-484.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf &#160;📡</text>
99
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-471.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rtl&#45;sdr · hackrf · flipper</text>
100
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-457.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">gqrx sock · serial devs</text>
101
- </g>
102
- <!-- Obs -->
103
- <g id="node17" class="node">
104
- <title>Obs</title>
105
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M724.75,-560.75C724.75,-560.75 612,-560.75 612,-560.75 606,-560.75 600,-554.75 600,-548.75 600,-548.75 600,-497.25 600,-497.25 600,-491.25 606,-485.25 612,-485.25 612,-485.25 724.75,-485.25 724.75,-485.25 730.75,-485.25 736.75,-491.25 736.75,-497.25 736.75,-497.25 736.75,-548.75 736.75,-548.75 736.75,-554.75 730.75,-560.75 724.75,-560.75"/>
106
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-546.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_observe</text>
107
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-532.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon · vuln · intel · target</text>
108
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-519.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">network · env · rf · web</text>
109
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-505.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">osint · serial · telecomm</text>
110
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-492.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">packet · vision · voice</text>
111
- </g>
112
- <!-- RFhw&#45;&gt;Obs -->
113
- <g id="edge5" class="edge">
114
- <title>RFhw&#45;&gt;Obs</title>
115
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M149.98,-480.02C255.44,-488.78 472.85,-506.84 589.45,-516.53"/>
116
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="589.21,-519.32 597.42,-517.19 589.68,-513.74 589.21,-519.32"/>
117
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-502.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe_rf</text>
118
- </g>
119
- <!-- RFTune -->
120
- <g id="node21" class="node">
121
- <title>RFTune</title>
122
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M756.25,-449.25C756.25,-449.25 580.5,-449.25 580.5,-449.25 574.5,-449.25 568.5,-443.25 568.5,-437.25 568.5,-437.25 568.5,-412.75 568.5,-412.75 568.5,-406.75 574.5,-400.75 580.5,-400.75 580.5,-400.75 756.25,-400.75 756.25,-400.75 762.25,-400.75 768.25,-406.75 768.25,-412.75 768.25,-412.75 768.25,-437.25 768.25,-437.25 768.25,-443.25 762.25,-449.25 756.25,-449.25"/>
123
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-434.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_rf_tune &#160;📡</text>
124
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-421.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tune GQRX · demod · strength</text>
125
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-407.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RDS PI/PS/RadioText → now_playing</text>
91
+ <title>Verdict</title>
92
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M599.84,-397.12C599.84,-397.12 334.16,-397.12 334.16,-397.12 328.16,-397.12 322.16,-391.12 322.16,-385.12 322.16,-385.12 322.16,-305.08 322.16,-305.08 322.16,-299.08 328.16,-293.08 334.16,-293.08 334.16,-293.08 599.84,-293.08 599.84,-293.08 605.84,-293.08 611.84,-299.08 611.84,-305.08 611.84,-305.08 611.84,-385.12 611.84,-385.12 611.84,-391.12 605.84,-397.12 599.84,-397.12"/>
93
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-375.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RECORDING / HEURISTIC VERDICTS</text>
94
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-361.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Intel records when record:true; watch stores web data</text>
95
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-348.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Verify: confirmed / refuted / unknown</text>
96
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-334.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">With commit: confirmed → intel; refuted → Mistakes</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-321.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory: confident refutation marks</text>
98
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-307.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:fact [UNVERIFIED date] + stale web observation</text>
99
+ </g>
100
+ <!-- Web&#45;&gt;Verdict -->
101
+ <g id="edge2" class="edge">
102
+ <title>Web&#45;&gt;Verdict</title>
103
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M467,-451.55C467,-437.47 467,-422.07 467,-407.49"/>
104
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="469.8,-407.52 467,-399.52 464.2,-407.52 469.8,-407.52"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="506.75" y="-424.37" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">selected operation</text>
126
106
  </g>
127
- <!-- RFhw&#45;&gt;RFTune -->
107
+ <!-- Verdict&#45;&gt;Store -->
128
108
  <g id="edge6" class="edge">
129
- <title>RFhw&#45;&gt;RFTune</title>
130
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M149.98,-469.77C246.27,-461.44 435.9,-445.03 556.9,-434.56"/>
131
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="556.92,-437.37 564.64,-433.89 556.43,-431.79 556.92,-437.37"/>
132
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-462.48" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tune · RDS</text>
109
+ <title>Verdict&#45;&gt;Store</title>
110
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M467,-285.08C467,-276.33 467,-267.21 467,-258.16"/>
111
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="469.8,-258.3 467,-250.3 464.2,-258.3 469.8,-258.3"/>
112
+ <text xml:space="preserve" text-anchor="middle" x="515" y="-258.83" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">recorded observations</text>
133
113
  </g>
134
- <!-- Web -->
114
+ <!-- Sense -->
115
+ <g id="node5" class="node">
116
+ <title>Sense</title>
117
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M905.8,-555.91C905.8,-555.91 656.2,-555.91 656.2,-555.91 650.2,-555.91 644.2,-549.91 644.2,-543.91 644.2,-543.91 644.2,-463.87 644.2,-463.87 644.2,-457.87 650.2,-451.87 656.2,-451.87 656.2,-451.87 905.8,-451.87 905.8,-451.87 911.8,-451.87 917.8,-457.87 917.8,-463.87 917.8,-463.87 917.8,-543.91 917.8,-543.91 917.8,-549.91 911.8,-555.91 905.8,-555.91"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-533.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">INDEPENDENT TOOLS / ACTIONS</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-520.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_rf_tune: GQRX / strength / RDS</text>
120
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-506.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_serial: UART open / payload / drain</text>
121
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-493.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_telecomm: BareSIP status / dial</text>
122
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-479.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_packet: capture / pcap summary</text>
123
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-466.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_vision: OCR / QR; extro_voice: TTS / STT</text>
124
+ </g>
125
+ <!-- Observe -->
135
126
  <g id="node6" class="node">
136
- <title>Web</title>
137
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M145.62,-968.25C145.62,-968.25 31.38,-968.25 31.38,-968.25 25.38,-968.25 19.38,-962.25 19.38,-956.25 19.38,-956.25 19.38,-931.75 19.38,-931.75 19.38,-925.75 25.38,-919.75 31.38,-919.75 31.38,-919.75 145.62,-919.75 145.62,-919.75 151.62,-919.75 157.62,-925.75 157.62,-931.75 157.62,-931.75 157.62,-956.25 157.62,-956.25 157.62,-962.25 151.62,-968.25 145.62,-968.25"/>
138
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-953.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">web &#160;🌐</text>
139
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-940.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">anchors · targets</text>
140
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-926.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rendered DOM · TLS cert</text>
141
- </g>
142
- <!-- TB -->
143
- <g id="node14" class="node">
144
- <title>TB</title>
145
- <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M390.5,-967.25C390.5,-967.25 268,-967.25 268,-967.25 262,-967.25 256,-961.25 256,-955.25 256,-955.25 256,-930.75 256,-930.75 256,-924.75 262,-918.75 268,-918.75 268,-918.75 390.5,-918.75 390.5,-918.75 396.5,-918.75 402.5,-924.75 402.5,-930.75 402.5,-930.75 402.5,-955.25 402.5,-955.25 402.5,-961.25 396.5,-967.25 390.5,-967.25"/>
146
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-952.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Plugins::</text>
147
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-939.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TransparentBrowser</text>
148
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-925.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:headless (→ :rest fallback)</text>
149
- </g>
150
- <!-- Web&#45;&gt;TB -->
151
- <g id="edge8" class="edge">
152
- <title>Web&#45;&gt;TB</title>
153
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M158.24,-943.71C185.35,-943.6 216.73,-943.47 245.1,-943.35"/>
154
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="245.05,-946.15 253.03,-943.32 245.02,-940.55 245.05,-946.15"/>
155
- </g>
156
- <!-- Feeds -->
157
- <g id="node7" class="node">
158
- <title>Feeds</title>
159
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M148.25,-160C148.25,-160 28.75,-160 28.75,-160 22.75,-160 16.75,-154 16.75,-148 16.75,-148 16.75,-136 16.75,-136 16.75,-130 22.75,-124 28.75,-124 28.75,-124 148.25,-124 148.25,-124 154.25,-124 160.25,-130 160.25,-136 160.25,-136 160.25,-148 160.25,-148 160.25,-154 154.25,-160 148.25,-160"/>
160
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-145.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">intel feeds</text>
161
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-131.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">NVD · CIRCL · Exploit&#45;DB</text>
162
- </g>
163
- <!-- Intel -->
164
- <g id="node18" class="node">
165
- <title>Intel</title>
166
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M713.12,-136C713.12,-136 623.62,-136 623.62,-136 617.62,-136 611.62,-130 611.62,-124 611.62,-124 611.62,-112 611.62,-112 611.62,-106 617.62,-100 623.62,-100 623.62,-100 713.12,-100 713.12,-100 719.12,-100 725.12,-106 725.12,-112 725.12,-112 725.12,-124 725.12,-124 725.12,-130 719.12,-136 713.12,-136"/>
167
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-121.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_intel</text>
168
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-107.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">CVE / exploit lookup</text>
127
+ <title>Observe</title>
128
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M905.8,-403.87C905.8,-403.87 656.2,-403.87 656.2,-403.87 650.2,-403.87 644.2,-397.87 644.2,-391.87 644.2,-391.87 644.2,-298.33 644.2,-298.33 644.2,-292.33 650.2,-286.33 656.2,-286.33 656.2,-286.33 905.8,-286.33 905.8,-286.33 911.8,-286.33 917.8,-292.33 917.8,-298.33 917.8,-298.33 917.8,-391.87 917.8,-391.87 917.8,-397.87 911.8,-403.87 905.8,-403.87"/>
129
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-381.9" font-family="sans-Serif" font-size="11.00" fill="#0f172a">OBSERVATION BOUNDARY</text>
130
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-368.4" font-family="sans-Serif" font-size="11.00" fill="#0f172a">On&#45;demand calls use available plugins / hardware</text>
131
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-354.9" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Actions may affect devices or external services</text>
132
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-341.4" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_observe records supplied observations</text>
133
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-327.9" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Categories: recon / vuln / intel / target / network</text>
134
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-314.4" font-family="sans-Serif" font-size="11.00" fill="#0f172a">env / RF / web / OSINT / serial / telecomm</text>
135
+ <text xml:space="preserve" text-anchor="middle" x="781" y="-300.9" font-family="sans-Serif" font-size="11.00" fill="#0f172a">packet / vision / voice</text>
136
+ </g>
137
+ <!-- Sense&#45;&gt;Observe -->
138
+ <g id="edge3" class="edge">
139
+ <title>Sense&#45;&gt;Observe</title>
140
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M781,-451.55C781,-439.64 781,-426.78 781,-414.28"/>
141
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="783.8,-414.31 781,-406.31 778.2,-414.31 783.8,-414.31"/>
142
+ <text xml:space="preserve" text-anchor="middle" x="832" y="-424.37" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">record operation results</text>
169
143
  </g>
170
- <!-- Feeds&#45;&gt;Intel -->
144
+ <!-- Observe&#45;&gt;Store -->
171
145
  <g id="edge7" class="edge">
172
- <title>Feeds&#45;&gt;Intel</title>
173
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M160.92,-128.36C190.26,-123.41 224.64,-118.43 256,-116 377.62,-106.56 520.08,-110.61 601.43,-114.35"/>
174
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="600.95,-117.13 609.08,-114.71 601.22,-111.53 600.95,-117.13"/>
146
+ <title>Observe&#45;&gt;Store</title>
147
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M654.73,-278.33C638.63,-269.95 622.09,-261.34 605.82,-252.86"/>
148
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="607.25,-250.45 598.86,-249.24 604.66,-255.41 607.25,-250.45"/>
149
+ <text xml:space="preserve" text-anchor="middle" x="674.66" y="-258.83" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">categorized results</text>
175
150
  </g>
176
- <!-- OSINT -->
151
+ <!-- Context -->
177
152
  <g id="node8" class="node">
178
- <title>OSINT</title>
179
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M135.88,-1138.25C135.88,-1138.25 41.12,-1138.25 41.12,-1138.25 35.12,-1138.25 29.12,-1132.25 29.12,-1126.25 29.12,-1126.25 29.12,-1101.75 29.12,-1101.75 29.12,-1095.75 35.12,-1089.75 41.12,-1089.75 41.12,-1089.75 135.88,-1089.75 135.88,-1089.75 141.88,-1089.75 147.88,-1095.75 147.88,-1101.75 147.88,-1101.75 147.88,-1126.25 147.88,-1126.25 147.88,-1132.25 141.88,-1138.25 135.88,-1138.25"/>
180
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1123.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">osint &#160;🕵️</text>
181
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1110.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">phone · FCC · patent</text>
182
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1096.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">IP/ASN · CT · person</text>
183
- </g>
184
- <!-- OsintT -->
185
- <g id="node22" class="node">
186
- <title>OsintT</title>
187
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M736,-1169.25C736,-1169.25 600.75,-1169.25 600.75,-1169.25 594.75,-1169.25 588.75,-1163.25 588.75,-1157.25 588.75,-1157.25 588.75,-1132.75 588.75,-1132.75 588.75,-1126.75 594.75,-1120.75 600.75,-1120.75 600.75,-1120.75 736,-1120.75 736,-1120.75 742,-1120.75 748,-1126.75 748,-1132.75 748,-1132.75 748,-1157.25 748,-1157.25 748,-1163.25 742,-1169.25 736,-1169.25"/>
188
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1154.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_osint &#160;🕵️</text>
189
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1141.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">public APIs aggregate</text>
190
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1127.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">phone · FCC · patent · person</text>
191
- </g>
192
- <!-- OSINT&#45;&gt;OsintT -->
193
- <g id="edge19" class="edge">
194
- <title>OSINT&#45;&gt;OsintT</title>
195
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M148.36,-1117.16C249.63,-1122.59 457.46,-1133.74 577.13,-1140.16"/>
196
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="576.91,-1142.95 585.05,-1140.58 577.21,-1137.36 576.91,-1142.95"/>
197
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-1132.74" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">public APIs</text>
198
- </g>
199
- <!-- Serial -->
200
- <g id="node9" class="node">
201
- <title>Serial</title>
202
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M131.75,-1053.25C131.75,-1053.25 45.25,-1053.25 45.25,-1053.25 39.25,-1053.25 33.25,-1047.25 33.25,-1041.25 33.25,-1041.25 33.25,-1016.75 33.25,-1016.75 33.25,-1010.75 39.25,-1004.75 45.25,-1004.75 45.25,-1004.75 131.75,-1004.75 131.75,-1004.75 137.75,-1004.75 143.75,-1010.75 143.75,-1016.75 143.75,-1016.75 143.75,-1041.25 143.75,-1041.25 143.75,-1047.25 137.75,-1053.25 131.75,-1053.25"/>
203
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1038.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">serial &#160;🔌</text>
204
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1025.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">ttyUSB/ACM · by&#45;id</text>
205
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-1011.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">UART / AT modem</text>
206
- </g>
207
- <!-- SerT -->
208
- <g id="node23" class="node">
209
- <title>SerT</title>
210
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M716.12,-999.25C716.12,-999.25 620.62,-999.25 620.62,-999.25 614.62,-999.25 608.62,-993.25 608.62,-987.25 608.62,-987.25 608.62,-962.75 608.62,-962.75 608.62,-956.75 614.62,-950.75 620.62,-950.75 620.62,-950.75 716.12,-950.75 716.12,-950.75 722.12,-950.75 728.12,-956.75 728.12,-962.75 728.12,-962.75 728.12,-987.25 728.12,-987.25 728.12,-993.25 722.12,-999.25 716.12,-999.25"/>
211
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-984.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_serial &#160;🔌</text>
212
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-971.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">open · payload · drain</text>
213
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-957.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Plugins::Serial</text>
214
- </g>
215
- <!-- Serial&#45;&gt;SerT -->
216
- <g id="edge20" class="edge">
217
- <title>Serial&#45;&gt;SerT</title>
218
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M144.14,-1024.51C225.8,-1017.72 384.52,-1004.23 519.25,-991 544.7,-988.5 572.59,-985.55 597.23,-982.86"/>
219
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="597.28,-985.67 604.93,-982.02 596.67,-980.1 597.28,-985.67"/>
220
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-1016.76" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">UART I/O</text>
221
- </g>
222
- <!-- Telco -->
223
- <g id="node10" class="node">
224
- <title>Telco</title>
225
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M132.12,-883.25C132.12,-883.25 44.88,-883.25 44.88,-883.25 38.88,-883.25 32.88,-877.25 32.88,-871.25 32.88,-871.25 32.88,-846.75 32.88,-846.75 32.88,-840.75 38.88,-834.75 44.88,-834.75 44.88,-834.75 132.12,-834.75 132.12,-834.75 138.12,-834.75 144.12,-840.75 144.12,-846.75 144.12,-846.75 144.12,-871.25 144.12,-871.25 144.12,-877.25 138.12,-883.25 132.12,-883.25"/>
226
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-868.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">telecomm &#160;☎️</text>
227
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-855.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">BareSIP · SIP ports</text>
228
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-841.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PSTN / VoIP</text>
229
- </g>
230
- <!-- TelT -->
231
- <g id="node24" class="node">
232
- <title>TelT</title>
233
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M712.38,-829.25C712.38,-829.25 624.38,-829.25 624.38,-829.25 618.38,-829.25 612.38,-823.25 612.38,-817.25 612.38,-817.25 612.38,-792.75 612.38,-792.75 612.38,-786.75 618.38,-780.75 624.38,-780.75 624.38,-780.75 712.38,-780.75 712.38,-780.75 718.38,-780.75 724.38,-786.75 724.38,-792.75 724.38,-792.75 724.38,-817.25 724.38,-817.25 724.38,-823.25 718.38,-829.25 712.38,-829.25"/>
234
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-814.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_telecomm &#160;☎️</text>
235
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-801.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">BareSIP status/dial</text>
236
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-787.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inventory SIP</text>
237
- </g>
238
- <!-- Telco&#45;&gt;TelT -->
239
- <g id="edge21" class="edge">
240
- <title>Telco&#45;&gt;TelT</title>
241
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M144.65,-853.85C251.37,-843.87 485.75,-821.97 600.89,-811.21"/>
242
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="600.93,-814.02 608.63,-810.49 600.41,-808.45 600.93,-814.02"/>
243
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-845.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SIP/HTTP</text>
244
- </g>
245
- <!-- Pkt -->
246
- <g id="node11" class="node">
247
- <title>Pkt</title>
248
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M124.25,-414.25C124.25,-414.25 52.75,-414.25 52.75,-414.25 46.75,-414.25 40.75,-408.25 40.75,-402.25 40.75,-402.25 40.75,-377.75 40.75,-377.75 40.75,-371.75 46.75,-365.75 52.75,-365.75 52.75,-365.75 124.25,-365.75 124.25,-365.75 130.25,-365.75 136.25,-371.75 136.25,-377.75 136.25,-377.75 136.25,-402.25 136.25,-402.25 136.25,-408.25 130.25,-414.25 124.25,-414.25"/>
249
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-399.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">packet &#160;📦</text>
250
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-386.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tshark · tcpdump</text>
251
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-372.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">pcap summarise</text>
252
- </g>
253
- <!-- PktT -->
254
- <g id="node25" class="node">
255
- <title>PktT</title>
256
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M726.25,-364.25C726.25,-364.25 610.5,-364.25 610.5,-364.25 604.5,-364.25 598.5,-358.25 598.5,-352.25 598.5,-352.25 598.5,-327.75 598.5,-327.75 598.5,-321.75 604.5,-315.75 610.5,-315.75 610.5,-315.75 726.25,-315.75 726.25,-315.75 732.25,-315.75 738.25,-321.75 738.25,-327.75 738.25,-327.75 738.25,-352.25 738.25,-352.25 738.25,-358.25 732.25,-364.25 726.25,-364.25"/>
257
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-349.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_packet &#160;📦</text>
258
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-336.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">capture · summarise pcap</text>
259
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-322.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tshark/PacketFu</text>
260
- </g>
261
- <!-- Pkt&#45;&gt;PktT -->
262
- <g id="edge22" class="edge">
263
- <title>Pkt&#45;&gt;PktT</title>
264
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M136.79,-385.91C235.57,-377.36 464.74,-357.53 587.06,-346.95"/>
265
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="587.09,-349.76 594.82,-346.28 586.61,-344.18 587.09,-349.76"/>
266
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-377.48" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">capture</text>
267
- </g>
268
- <!-- Vis -->
269
- <g id="node12" class="node">
270
- <title>Vis</title>
271
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M125.75,-329.25C125.75,-329.25 51.25,-329.25 51.25,-329.25 45.25,-329.25 39.25,-323.25 39.25,-317.25 39.25,-317.25 39.25,-292.75 39.25,-292.75 39.25,-286.75 45.25,-280.75 51.25,-280.75 51.25,-280.75 125.75,-280.75 125.75,-280.75 131.75,-280.75 137.75,-286.75 137.75,-292.75 137.75,-292.75 137.75,-317.25 137.75,-317.25 137.75,-323.25 131.75,-329.25 125.75,-329.25"/>
272
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-314.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">vision &#160;👁</text>
273
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-301.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tesseract OCR</text>
274
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-287.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">zbar QR/barcode</text>
275
- </g>
276
- <!-- VisT -->
277
- <g id="node26" class="node">
278
- <title>VisT</title>
279
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M710.5,-280C710.5,-280 626.25,-280 626.25,-280 620.25,-280 614.25,-274 614.25,-268 614.25,-268 614.25,-256 614.25,-256 614.25,-250 620.25,-244 626.25,-244 626.25,-244 710.5,-244 710.5,-244 716.5,-244 722.5,-250 722.5,-256 722.5,-256 722.5,-268 722.5,-268 722.5,-274 716.5,-280 710.5,-280"/>
280
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-265.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_vision &#160;👁</text>
281
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-251.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">OCR · barcode/QR</text>
282
- </g>
283
- <!-- Vis&#45;&gt;VisT -->
284
- <g id="edge23" class="edge">
285
- <title>Vis&#45;&gt;VisT</title>
286
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M138.32,-292.83C171.32,-285.18 216,-275.95 256,-271.5 377.97,-257.93 521.49,-258.29 602.71,-260"/>
287
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="602.18,-262.79 610.24,-260.17 602.31,-257.19 602.18,-262.79"/>
288
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-273.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">OCR</text>
289
- </g>
290
- <!-- Voice -->
291
- <g id="node13" class="node">
292
- <title>Voice</title>
293
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M149,-244.25C149,-244.25 28,-244.25 28,-244.25 22,-244.25 16,-238.25 16,-232.25 16,-232.25 16,-207.75 16,-207.75 16,-201.75 22,-195.75 28,-195.75 28,-195.75 149,-195.75 149,-195.75 155,-195.75 161,-201.75 161,-207.75 161,-207.75 161,-232.25 161,-232.25 161,-238.25 155,-244.25 149,-244.25"/>
294
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-229.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">voice &#160;🔊</text>
295
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-216.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">espeak TTS · whisper STT</text>
296
- <text xml:space="preserve" text-anchor="middle" x="88.5" y="-202.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sox / festival</text>
297
- </g>
298
- <!-- VoxT -->
299
- <g id="node27" class="node">
300
- <title>VoxT</title>
301
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M716.12,-208C716.12,-208 620.62,-208 620.62,-208 614.62,-208 608.62,-202 608.62,-196 608.62,-196 608.62,-184 608.62,-184 608.62,-178 614.62,-172 620.62,-172 620.62,-172 716.12,-172 716.12,-172 722.12,-172 728.12,-178 728.12,-184 728.12,-184 728.12,-196 728.12,-196 728.12,-202 722.12,-208 716.12,-208"/>
302
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-193.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_voice &#160;🔊</text>
303
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-179.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TTS · STT · inventory</text>
304
- </g>
305
- <!-- Voice&#45;&gt;VoxT -->
306
- <g id="edge24" class="edge">
307
- <title>Voice&#45;&gt;VoxT</title>
308
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M161.61,-203.31C190.75,-197.37 224.81,-191.42 256,-188.5 375.31,-177.31 514.94,-181.43 597,-185.6"/>
309
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="596.79,-188.4 604.92,-186.02 597.08,-182.8 596.79,-188.4"/>
310
- <text xml:space="preserve" text-anchor="middle" x="329.25" y="-190.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">TTS/STT</text>
311
- </g>
312
- <!-- TB&#45;&gt;Snap -->
313
- <g id="edge9" class="edge">
314
- <title>TB&#45;&gt;Snap</title>
315
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M365.91,-917.86C377.58,-909.63 390.6,-900.43 402.5,-892 454.45,-855.2 472.36,-852.06 519.25,-809 538.99,-790.87 537.26,-779.66 558.25,-763 563.7,-758.68 569.53,-754.55 575.56,-750.63"/>
316
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="576.93,-753.08 582.22,-746.46 573.96,-748.33 576.93,-753.08"/>
317
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-873.04" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe_web</text>
318
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-862.54" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(opt&#45;in)</text>
319
- </g>
320
- <!-- Watch -->
321
- <g id="node19" class="node">
322
- <title>Watch</title>
323
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M725.5,-914.25C725.5,-914.25 611.25,-914.25 611.25,-914.25 605.25,-914.25 599.25,-908.25 599.25,-902.25 599.25,-902.25 599.25,-877.75 599.25,-877.75 599.25,-871.75 605.25,-865.75 611.25,-865.75 611.25,-865.75 725.5,-865.75 725.5,-865.75 731.5,-865.75 737.5,-871.75 737.5,-877.75 737.5,-877.75 737.5,-902.25 737.5,-902.25 737.5,-908.25 731.5,-914.25 725.5,-914.25"/>
324
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-899.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_watch</text>
325
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-886.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">render → DOM SHA&#45;256</text>
326
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-872.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">screenshot · TLS fp</text>
327
- </g>
328
- <!-- TB&#45;&gt;Watch -->
329
- <g id="edge10" class="edge">
330
- <title>TB&#45;&gt;Watch</title>
331
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M403.47,-957.47C438.91,-961.9 481.8,-963.44 519.25,-954 538.34,-949.19 540.39,-941.29 558.25,-933 568.89,-928.06 580.26,-923.17 591.51,-918.55"/>
332
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="592.3,-921.25 598.66,-915.65 590.19,-916.06 592.3,-921.25"/>
333
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-973.41" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">goto · text</text>
334
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-962.91" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">screenshot</text>
335
- </g>
336
- <!-- Verify -->
337
- <g id="node20" class="node">
338
- <title>Verify</title>
339
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M758.5,-1084.25C758.5,-1084.25 578.25,-1084.25 578.25,-1084.25 572.25,-1084.25 566.25,-1078.25 566.25,-1072.25 566.25,-1072.25 566.25,-1047.75 566.25,-1047.75 566.25,-1041.75 572.25,-1035.75 578.25,-1035.75 578.25,-1035.75 758.5,-1035.75 758.5,-1035.75 764.5,-1035.75 770.5,-1041.75 770.5,-1047.75 770.5,-1047.75 770.5,-1072.25 770.5,-1072.25 770.5,-1078.25 764.5,-1084.25 758.5,-1084.25"/>
340
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1069.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_verify</text>
341
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1056.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">:cve · :version · :doc · :generic</text>
342
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-1042.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">heuristic: confirmed | refuted | unknown</text>
343
- </g>
344
- <!-- TB&#45;&gt;Verify -->
345
- <g id="edge11" class="edge">
346
- <title>TB&#45;&gt;Verify</title>
347
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M390.27,-968.19C409.11,-975.82 430.07,-984.02 449.5,-991 489.44,-1005.34 534.03,-1019.74 572.42,-1031.65"/>
348
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="571.19,-1034.2 579.66,-1033.88 572.84,-1028.85 571.19,-1034.2"/>
349
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-1025.78" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">render</text>
350
- <text xml:space="preserve" text-anchor="middle" x="484.38" y="-1015.28" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">canonical source</text>
351
- </g>
352
- <!-- Store -->
353
- <g id="node29" class="node">
354
- <title>Store</title>
355
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1071,-613.69C1071,-616.1 1048.08,-618.06 1019.88,-618.06 991.67,-618.06 968.75,-616.1 968.75,-613.69 968.75,-613.69 968.75,-574.31 968.75,-574.31 968.75,-571.9 991.67,-569.94 1019.88,-569.94 1048.08,-569.94 1071,-571.9 1071,-574.31 1071,-574.31 1071,-613.69 1071,-613.69"/>
356
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1071,-613.69C1071,-611.27 1048.08,-609.31 1019.88,-609.31 991.67,-609.31 968.75,-611.27 968.75,-613.69"/>
357
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-597.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/</text>
358
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-583.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
359
- </g>
360
- <!-- Snap&#45;&gt;Store -->
361
- <g id="edge12" class="edge">
362
- <title>Snap&#45;&gt;Store</title>
363
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M758.02,-678.34C820.92,-658 903.65,-631.25 958.92,-613.39"/>
364
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="959.6,-616.11 966.35,-610.98 957.88,-610.78 959.6,-616.11"/>
365
- </g>
366
- <!-- Drift&#45;&gt;Store -->
367
- <g id="edge13" class="edge">
368
- <title>Drift&#45;&gt;Store</title>
369
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M716.51,-612.17C779.11,-608.41 889.75,-601.76 958.43,-597.63"/>
370
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="958.47,-600.43 966.28,-597.16 958.13,-594.84 958.47,-600.43"/>
371
- </g>
372
- <!-- Obs&#45;&gt;Store -->
373
- <g id="edge14" class="edge">
374
- <title>Obs&#45;&gt;Store</title>
375
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M737.18,-536.77C801.43,-549.83 897.03,-569.25 958.66,-581.77"/>
376
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="957.92,-584.48 966.32,-583.32 959.04,-578.99 957.92,-584.48"/>
377
- </g>
378
- <!-- Intel&#45;&gt;Store -->
379
- <g id="edge15" class="edge">
380
- <title>Intel&#45;&gt;Store</title>
381
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M725.74,-129.51C743.71,-134.97 762.95,-142.83 778.5,-154 801.96,-170.86 799.76,-183.2 817.5,-206 852.05,-250.4 868.14,-256.21 897,-304.5 948.87,-391.27 989.52,-504.17 1008.01,-559.86"/>
382
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1005.32,-560.66 1010.48,-567.39 1010.64,-558.92 1005.32,-560.66"/>
383
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-306.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record:true</text>
384
- </g>
385
- <!-- Watch&#45;&gt;Store -->
386
- <g id="edge16" class="edge">
387
- <title>Watch&#45;&gt;Store</title>
388
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M738,-866.42C751.75,-860.74 765.85,-854.21 778.5,-847 836.44,-814 850.14,-802.43 897,-755 936.97,-714.54 975.23,-660.69 997.89,-626.68"/>
389
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1000.15,-628.34 1002.23,-620.12 995.48,-625.25 1000.15,-628.34"/>
390
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-825.01" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::web</text>
391
- </g>
392
- <!-- Shots -->
393
- <g id="node30" class="node">
394
- <title>Shots</title>
395
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1079.25,-853.69C1079.25,-856.1 1052.64,-858.06 1019.88,-858.06 987.11,-858.06 960.5,-856.1 960.5,-853.69 960.5,-853.69 960.5,-814.31 960.5,-814.31 960.5,-811.9 987.11,-809.94 1019.88,-809.94 1052.64,-809.94 1079.25,-811.9 1079.25,-814.31 1079.25,-814.31 1079.25,-853.69 1079.25,-853.69"/>
396
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1079.25,-853.69C1079.25,-851.27 1052.64,-849.31 1019.88,-849.31 987.11,-849.31 960.5,-851.27 960.5,-853.69"/>
397
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-837.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">~/.pwn/extrospection/</text>
398
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-823.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">web/*.png</text>
399
- </g>
400
- <!-- Watch&#45;&gt;Shots -->
401
- <g id="edge17" class="edge">
402
- <title>Watch&#45;&gt;Shots</title>
403
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M738.03,-873.12C762.95,-867.42 791.39,-861.39 817.5,-857 861.49,-849.61 911.29,-843.9 950.36,-840.02"/>
404
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="950.4,-842.83 958.09,-839.26 949.85,-837.25 950.4,-842.83"/>
405
- </g>
406
- <!-- Verify&#45;&gt;Store -->
407
- <g id="edge32" class="edge">
408
- <title>Verify&#45;&gt;Store</title>
409
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M752.39,-1034.81C761.81,-1029.84 770.78,-1023.95 778.5,-1017 806.41,-991.85 790.22,-967.84 817.5,-942 845.66,-915.33 870.31,-934.14 897,-906 902.08,-900.65 975.74,-707.6 1006.02,-627.9"/>
410
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1008.57,-629.07 1008.79,-620.6 1003.33,-627.08 1008.57,-629.07"/>
411
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-954.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
412
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-943.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs (ttl 30d)</text>
413
- </g>
414
- <!-- Mist -->
415
- <g id="node32" class="node">
416
- <title>Mist</title>
417
- <path fill="#fca5a5" stroke="#334155" stroke-width="2" d="M1073.25,-1084.25C1073.25,-1084.25 966.5,-1084.25 966.5,-1084.25 960.5,-1084.25 954.5,-1078.25 954.5,-1072.25 954.5,-1072.25 954.5,-1047.75 954.5,-1047.75 954.5,-1041.75 960.5,-1035.75 966.5,-1035.75 966.5,-1035.75 1073.25,-1035.75 1073.25,-1035.75 1079.25,-1035.75 1085.25,-1041.75 1085.25,-1047.75 1085.25,-1047.75 1085.25,-1072.25 1085.25,-1072.25 1085.25,-1078.25 1079.25,-1084.25 1073.25,-1084.25"/>
418
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1069.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes.record</text>
419
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1056.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(tool:&#39;assumption&#39;)</text>
420
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1042.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">→ KNOWN MISTAKES</text>
421
- </g>
422
- <!-- Verify&#45;&gt;Mist -->
423
- <g id="edge31" class="edge">
424
- <title>Verify&#45;&gt;Mist</title>
425
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M771.4,-1060C826.22,-1060 892.64,-1060 942.87,-1060"/>
426
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="942.63,-1062.8 950.63,-1060 942.63,-1057.2 942.63,-1062.8"/>
427
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-1061.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
428
- </g>
429
- <!-- Mem -->
430
- <g id="node33" class="node">
431
- <title>Mem</title>
432
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1083.75,-1169.25C1083.75,-1169.25 956,-1169.25 956,-1169.25 950,-1169.25 944,-1163.25 944,-1157.25 944,-1157.25 944,-1132.75 944,-1132.75 944,-1126.75 950,-1120.75 956,-1120.75 956,-1120.75 1083.75,-1120.75 1083.75,-1120.75 1089.75,-1120.75 1095.75,-1126.75 1095.75,-1132.75 1095.75,-1132.75 1095.75,-1157.25 1095.75,-1157.25 1095.75,-1163.25 1089.75,-1169.25 1083.75,-1169.25"/>
433
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1154.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PWN::Memory :fact</text>
434
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1141.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
435
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-1127.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(revalidate_memory)</text>
436
- </g>
437
- <!-- Verify&#45;&gt;Mem -->
438
- <g id="edge33" class="edge">
439
- <title>Verify&#45;&gt;Mem</title>
440
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M771.4,-1084.81C822.97,-1097.36 884.82,-1112.4 933.79,-1124.31"/>
441
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="933.06,-1127.01 941.49,-1126.18 934.38,-1121.57 933.06,-1127.01"/>
442
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-1127.53" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">revalidate_memory</text>
443
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-1117.03" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale :fact</text>
444
- </g>
445
- <!-- RFTune&#45;&gt;Store -->
446
- <g id="edge18" class="edge">
447
- <title>RFTune&#45;&gt;Store</title>
448
- <path fill="none" stroke="#f59e0b" stroke-width="2" d="M738.23,-450.22C751.69,-455.51 765.62,-461.24 778.5,-467 796.28,-474.95 800,-478.44 817.5,-487 852.51,-504.12 862.4,-506.06 897,-524 921.43,-536.67 948,-551.77 970.07,-564.69"/>
449
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="2" points="968.63,-567.09 976.95,-568.74 971.47,-562.27 968.63,-567.09"/>
450
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-536.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::rf</text>
451
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-525.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">now_playing</text>
452
- </g>
453
- <!-- OsintT&#45;&gt;Store -->
454
- <g id="edge25" class="edge">
455
- <title>OsintT&#45;&gt;Store</title>
456
- <path fill="none" stroke="#f59e0b" stroke-width="2" d="M748.74,-1120.71C759.36,-1115.52 769.63,-1109.33 778.5,-1102 803.45,-1081.39 796.69,-1065.29 817.5,-1040.5 848.24,-1003.87 872.16,-1008.86 897,-968 939.06,-898.82 919.21,-869.07 944,-792 962.66,-734 988.56,-668.07 1004.49,-628.82"/>
457
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="2" points="1007.04,-629.99 1007.46,-621.52 1001.85,-627.87 1007.04,-629.99"/>
458
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-1042.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::osint</text>
459
- </g>
460
- <!-- SerT&#45;&gt;Store -->
461
- <g id="edge26" class="edge">
462
- <title>SerT&#45;&gt;Store</title>
463
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M729,-956.49C745.7,-950.01 763.4,-941.83 778.5,-932 798.91,-918.71 798.45,-908.67 817.5,-893.5 850.25,-867.43 869.08,-874.19 897,-843 955.5,-777.64 992.47,-679.14 1008.92,-627.81"/>
464
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1011.53,-628.85 1011.26,-620.38 1006.19,-627.17 1011.53,-628.85"/>
465
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-895.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::serial</text>
466
- </g>
467
- <!-- TelT&#45;&gt;Store -->
468
- <g id="edge27" class="edge">
469
- <title>TelT&#45;&gt;Store</title>
470
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M725.22,-786.51C742.68,-779.95 761.75,-771.93 778.5,-763 819.12,-741.33 921.97,-666.19 979.09,-623.77"/>
471
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="980.51,-626.2 985.26,-619.18 977.17,-621.71 980.51,-626.2"/>
472
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-739.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::telecomm</text>
473
- </g>
474
- <!-- PktT&#45;&gt;Store -->
475
- <g id="edge28" class="edge">
476
- <title>PktT&#45;&gt;Store</title>
477
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M739.04,-360.9C752.86,-366.8 766.72,-374.1 778.5,-383 801.27,-400.19 795.48,-415.85 817.5,-434 847.94,-459.1 864.9,-450.56 897,-473.5 933.14,-499.32 968.57,-536 991.83,-562.09"/>
478
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="989.66,-563.86 997.05,-568.01 993.86,-560.16 989.66,-563.86"/>
479
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-475.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::packet</text>
480
- </g>
481
- <!-- VisT&#45;&gt;Store -->
482
- <g id="edge29" class="edge">
483
- <title>VisT&#45;&gt;Store</title>
484
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M723.49,-270.72C742.61,-276.01 763.16,-284.47 778.5,-298 808.77,-324.69 789.21,-351.22 817.5,-380 845.16,-408.14 867.11,-393.75 897,-419.5 944.04,-460.03 981.84,-522.53 1002.26,-560.7"/>
485
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="999.71,-561.87 1005.91,-567.65 1004.66,-559.26 999.71,-561.87"/>
486
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-421.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::vision</text>
487
- </g>
488
- <!-- VoxT&#45;&gt;Store -->
489
- <g id="edge30" class="edge">
490
- <title>VoxT&#45;&gt;Store</title>
491
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M729.05,-199.64C746.7,-204.96 764.92,-213.21 778.5,-226 812.63,-258.14 785.75,-289.52 817.5,-324 844.23,-353.02 868.75,-335.96 897,-363.5 955.34,-420.38 991.89,-511.23 1008.45,-560.16"/>
492
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1005.71,-560.78 1010.88,-567.49 1011.03,-559.02 1005.71,-560.78"/>
493
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-365.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">category::voice</text>
494
- </g>
495
- <!-- Corr -->
496
- <g id="node28" class="node">
497
- <title>Corr</title>
498
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M738.62,-64.25C738.62,-64.25 598.12,-64.25 598.12,-64.25 592.12,-64.25 586.12,-58.25 586.12,-52.25 586.12,-52.25 586.12,-27.75 586.12,-27.75 586.12,-21.75 592.12,-15.75 598.12,-15.75 598.12,-15.75 738.62,-15.75 738.62,-15.75 744.62,-15.75 750.62,-21.75 750.62,-27.75 750.62,-27.75 750.62,-52.25 750.62,-52.25 750.62,-58.25 744.62,-64.25 738.62,-64.25"/>
499
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-49.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_correlate</text>
500
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-36.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">candidate correlations</text>
501
- <text xml:space="preserve" text-anchor="middle" x="668.38" y="-22.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning + Mistakes + Memory</text>
502
- </g>
503
- <!-- Prompt -->
504
- <g id="node31" class="node">
505
- <title>Prompt</title>
506
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1070.62,-366C1070.62,-366 969.12,-366 969.12,-366 963.12,-366 957.12,-360 957.12,-354 957.12,-354 957.12,-342 957.12,-342 957.12,-336 963.12,-330 969.12,-330 969.12,-330 1070.62,-330 1070.62,-330 1076.62,-330 1082.62,-336 1082.62,-342 1082.62,-342 1082.62,-354 1082.62,-354 1082.62,-360 1076.62,-366 1070.62,-366"/>
507
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-351.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">EXTROSPECTION</text>
508
- <text xml:space="preserve" text-anchor="middle" x="1019.88" y="-337.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">block in system prompt</text>
509
- </g>
510
- <!-- Corr&#45;&gt;Prompt -->
511
- <g id="edge34" class="edge">
512
- <title>Corr&#45;&gt;Prompt</title>
513
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M748.25,-65.2C758.82,-70.04 769.21,-75.62 778.5,-82 877.97,-150.3 964.64,-267.7 1000.85,-320.66"/>
514
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="998.31,-321.92 1005.12,-326.98 1002.95,-318.78 998.31,-321.92"/>
515
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-188.27" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
516
- </g>
517
- <!-- Store&#45;&gt;Corr -->
518
- <g id="edge36" class="edge">
519
- <title>Store&#45;&gt;Corr</title>
520
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1008.97,-569.44C993.56,-530.57 963.58,-452.27 944,-384 917.15,-290.4 949.89,-251.77 897,-170 865.59,-121.44 809.27,-89.05 760.51,-68.75"/>
521
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="761.79,-66.25 753.32,-65.84 759.68,-71.44 761.79,-66.25"/>
522
- </g>
523
- <!-- Store&#45;&gt;Prompt -->
524
- <g id="edge35" class="edge">
525
- <title>Store&#45;&gt;Prompt</title>
526
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1019.88,-569.58C1019.88,-523.75 1019.88,-425.06 1019.88,-376.36"/>
527
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1022.68,-376.46 1019.88,-368.46 1017.08,-376.46 1022.68,-376.46"/>
528
- <text xml:space="preserve" text-anchor="middle" x="1011.62" y="-464.67" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
529
- </g>
530
- <!-- Mem&#45;&gt;Corr -->
531
- <g id="edge37" class="edge">
532
- <title>Mem&#45;&gt;Corr</title>
533
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M960.83,-1120.12C954.2,-1115.04 948.29,-1109.04 944,-1102 885.25,-1005.72 970.06,-173.93 897,-88 864.26,-49.5 809.15,-37.17 761.35,-34.62"/>
534
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="761.66,-31.83 753.55,-34.31 761.43,-37.43 761.66,-31.83"/>
535
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-100.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">rule (f)</text>
536
- <text xml:space="preserve" text-anchor="middle" x="857.25" y="-89.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">stale :fact</text>
153
+ <title>Context</title>
154
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M642.2,-93.04C642.2,-93.04 291.8,-93.04 291.8,-93.04 285.8,-93.04 279.8,-87.04 279.8,-81.04 279.8,-81.04 279.8,-28 279.8,-28 279.8,-22 285.8,-16 291.8,-16 291.8,-16 642.2,-16 642.2,-16 648.2,-16 654.2,-22 654.2,-28 654.2,-28 654.2,-81.04 654.2,-81.04 654.2,-87.04 648.2,-93.04 642.2,-93.04"/>
155
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-71.07" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extro_correlate: candidate correlations, not causal proof</text>
156
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-57.57" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Join world state with Metrics / Learning / Mistakes / Memory</text>
157
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-44.07" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder: EXTROSPECTION when context is expanded</text>
158
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-30.57" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Budgeted advisory context; recheck before relying on stale data</text>
159
+ </g>
160
+ <!-- Store&#45;&gt;Context -->
161
+ <g id="edge4" class="edge">
162
+ <title>Store&#45;&gt;Context</title>
163
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M467,-140.64C467,-128.83 467,-115.65 467,-103.26"/>
164
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="469.8,-103.49 467,-95.49 464.2,-103.49 469.8,-103.49"/>
165
+ <text xml:space="preserve" text-anchor="middle" x="507.5" y="-113.54" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">read retained state</text>
537
166
  </g>
538
167
  </g>
539
168
  </svg>