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
@@ -0,0 +1,93 @@
1
+ digraph "PWN_Mistakes_Negative_Feedback" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Mistakes — Negative-Feedback Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">learn from mistakes · do NOT repeat them · cross-session · self-correcting</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=TB, splines=spline, nodesep=0.6, ranksep=1.0,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ /* L0 ─ ingest sources */
14
+ subgraph cluster_in {
15
+ label="Four ingest paths"; fontcolor="#fecaca"; style="rounded,dashed";
16
+ color="#b91c1c"; bgcolor="#450a0a";
17
+ ToolFail [label=":tool\nDispatch → success:false", fillcolor="#fda4af"];
18
+ LoopFail [label=":loop\niteration budget exhausted", fillcolor="#fda4af"];
19
+ UserCorr [label=":user_correction\n\"no that's wrong\" / \"still broken\"", fillcolor="#fda4af"];
20
+ ModelRec [label=":model\nmistakes_record(tool, error)", fillcolor="#fda4af"];
21
+ }
22
+ {rank=same; ToolFail; LoopFail; UserCorr; ModelRec}
23
+
24
+ /* L1 ─ fingerprint */
25
+ subgraph cluster_fp {
26
+ label="Fingerprint (stable across sessions)"; fontcolor="#a7f3d0"; style=rounded;
27
+ color="#047857"; bgcolor="#022c22"; penwidth=2;
28
+ Norm [label="normalize_error()\nstrip paths · :LINE · 0xADDR\nport N · TIMESTAMP · UUID · pid", fillcolor="#6ee7b7"];
29
+ Sig [label="signature = sha12(tool + norm)\ncount++ (cross-session)", fillcolor="#6ee7b7", penwidth=2];
30
+ }
31
+ {rank=same; Norm; Sig}
32
+
33
+ /* L2 ─ ledger */
34
+ Store [label="~/.pwn/mistakes.json\n{sig → tool·error·count·fix\n resolved·regressed·sessions}",
35
+ shape=cylinder, fillcolor="#fcd34d", penwidth=2];
36
+
37
+ /* L3 ─ reactions */
38
+ subgraph cluster_react {
39
+ label="Reactions inside Loop.run"; fontcolor="#ddd6fe"; style=rounded;
40
+ color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
41
+ Guard [label="guard_repeated_failure\nmax(turn, PERSISTENT count) ≥ 3\n→ trips on 1st recurrence\nin a new session", fillcolor="#c4b5fd"];
42
+ Hint [label="correction_hint\nappend to failed result:\n\"seen N×, sig=…, KNOWN FIX: …\"\n→ self-correct NEXT iter", fillcolor="#c4b5fd"];
43
+ Regr [label="[REGRESSED]\nresolved sig recurs\n→ reopen + tag", fillcolor="#c4b5fd"];
44
+ }
45
+ {rank=same; Guard; Hint; Regr}
46
+
47
+ /* L4 ─ outputs */
48
+ subgraph cluster_out {
49
+ label="Injected into every future prompt"; fontcolor="#fde68a"; style=rounded;
50
+ color="#a16207"; bgcolor="#422006"; penwidth=2;
51
+ KMist [label="KNOWN MISTAKES\n✗ [sig] tool ×N [REPEATING]…", fillcolor="#fcd34d"];
52
+ KFix [label="KNOWN FIXES\n✓ [sig] tool — FIX: …", fillcolor="#fcd34d"];
53
+ Mem [label="PWN::Memory :lesson\n\"AVOID X — FIX: Y\"", fillcolor="#fcd34d"];
54
+ }
55
+ {rank=same; KMist; KFix; Mem}
56
+
57
+ Prompt [label="PromptBuilder\nsystem prompt", fillcolor="#7dd3fc", penwidth=2];
58
+
59
+ /* L0 → L1 */
60
+ ToolFail -> Norm [label="record()", color="#fb7185"];
61
+ LoopFail -> Norm [color="#fb7185"];
62
+ UserCorr -> Sig [label="+ flip_last_outcome", color="#fb7185"];
63
+ ModelRec -> Sig [color="#fb7185"];
64
+ Norm -> Sig [color="#34d399"];
65
+
66
+ /* L1 → L2 */
67
+ Sig -> Store [label="persist", color="#f59e0b", penwidth=2];
68
+
69
+ /* L2 → L3 */
70
+ Store -> Guard [label="count", color="#a78bfa"];
71
+ Store -> Hint [label="fix?", color="#a78bfa"];
72
+ Store -> Regr [label="resolved∧recur", color="#a78bfa"];
73
+
74
+ /* L3 → L4 */
75
+ Guard -> KMist [color="#f59e0b"];
76
+ Hint -> KFix [style=invis];
77
+ Regr -> KMist [color="#f59e0b"];
78
+
79
+ /* resolve path */
80
+ Resolve [label="mistakes_resolve\n(signature, fix)", fillcolor="#6ee7b7", penwidth=2];
81
+ {rank=same; Store; Resolve}
82
+ Resolve -> Store [label="resolved:true\nfix:…", color="#34d399", penwidth=2];
83
+ Resolve -> KFix [color="#f59e0b"];
84
+ Resolve -> Mem [label="promote", color="#f59e0b"];
85
+
86
+ /* L4 → prompt (feedback, dashed) */
87
+ KMist -> Prompt [label="do NOT repeat", style=dashed, color="#fb7185", constraint=false, penwidth=2];
88
+ KFix -> Prompt [label="do THIS instead", style=dashed, color="#fbbf24", constraint=false, penwidth=2];
89
+ Mem -> Prompt [label="MEMORY block", style=dashed, color="#fbbf24", constraint=false];
90
+ KMist -> Prompt [style=invis];
91
+ KFix -> Prompt [style=invis];
92
+ Mem -> Prompt [style=invis];
93
+ }
@@ -37,9 +37,9 @@ digraph "PWN_Overall_Architecture" {
37
37
  label="PWN::AI::Agent"; fontcolor="#ddd6fe";
38
38
  style=rounded; color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
39
39
  Loop [label="Loop\nplan → dispatch → observe", fillcolor="#c4b5fd"];
40
- Registry [label="Registry\n10 toolsets · 45+ tools", fillcolor="#c4b5fd"];
40
+ Registry [label="Registry\n10 toolsets · 52 tools", fillcolor="#c4b5fd"];
41
41
  Swarm [label="Swarm\npersonas · debate · bus", fillcolor="#c4b5fd"];
42
- Prompt [label="PromptBuilder\nMEMORY · SKILLS · EXTRO",fillcolor="#c4b5fd"];
42
+ Prompt [label="PromptBuilder\nMEMORY · SKILLS\nMISTAKES · EXTRO",fillcolor="#c4b5fd"];
43
43
  }
44
44
  {rank=same; Loop; Registry; Swarm; Prompt}
45
45
 
@@ -51,7 +51,7 @@ digraph "PWN_Overall_Architecture" {
51
51
  SAST [label="SAST\n48 rules", fillcolor="#6ee7b7"];
52
52
  WWW [label="WWW\n21 site drivers", fillcolor="#6ee7b7"];
53
53
  AWS [label="AWS\n90 services", fillcolor="#6ee7b7"];
54
- SDR [label="SDR\nGQRX · Flipper · RFID", fillcolor="#6ee7b7"];
54
+ SDR [label="SDR\nGQRX · Flipper · RFID\nDecoder::* (20)", fillcolor="#6ee7b7"];
55
55
  Chain [label="Blockchain\nBTC · ETH", fillcolor="#6ee7b7"];
56
56
  Bounty [label="Bounty\nlifecycle replay", fillcolor="#6ee7b7"];
57
57
  Reports [label="Reports\nHTML · JSON", fillcolor="#6ee7b7"];
@@ -66,12 +66,13 @@ digraph "PWN_Overall_Architecture" {
66
66
  Skills [label="skills/*.md", shape=cylinder, fillcolor="#fcd34d"];
67
67
  Learn [label="learning.jsonl", shape=cylinder, fillcolor="#fcd34d"];
68
68
  Metrics [label="metrics.json", shape=cylinder, fillcolor="#fcd34d"];
69
- Extro [label="extrospection.json", shape=cylinder, fillcolor="#fcd34d"];
69
+ MistF [label="mistakes.json", shape=cylinder, fillcolor="#fcd34d"];
70
+ Extro [label="extrospection.json\n+ rf snapshot", shape=cylinder, fillcolor="#fcd34d"];
70
71
  Sessions [label="sessions/*.jsonl", shape=cylinder, fillcolor="#fcd34d"];
71
72
  SwarmB [label="swarm/*/bus.jsonl", shape=cylinder, fillcolor="#fcd34d"];
72
73
  CronF [label="cron/jobs.yml", shape=cylinder, fillcolor="#fcd34d"];
73
74
  }
74
- {rank=same; Memory; Skills; Learn; Metrics; Extro; Sessions; SwarmB; CronF}
75
+ {rank=same; Memory; Skills; Learn; Metrics; MistF; Extro; Sessions; SwarmB; CronF}
75
76
 
76
77
  /* ── L0 → L1 ── */
77
78
  User -> REPL [color="#38bdf8"];
@@ -102,6 +103,7 @@ digraph "PWN_Overall_Architecture" {
102
103
  SAST -> Skills [color="#f59e0b"];
103
104
  WWW -> Learn [color="#f59e0b"];
104
105
  AWS -> Metrics [color="#f59e0b"];
106
+ SDR -> MistF [style=invis];
105
107
  SDR -> Extro [color="#f59e0b"];
106
108
  Chain -> Sessions [color="#f59e0b"];
107
109
  Bounty -> SwarmB [color="#f59e0b"];
@@ -16,14 +16,15 @@ digraph "PWN_Persistence" {
16
16
  mem [label="memory.json\nfacts · prefs · lessons · env"];
17
17
  skl [label="skills/*.md\nreusable procedures + refs"];
18
18
  lrn [label="learning.jsonl\ntask outcomes"];
19
+ mis [label="mistakes.json\nfailure fingerprints · fixes\n[REPEATING] · [REGRESSED]"];
19
20
  met [label="metrics.json\nper-tool telemetry"];
20
- ext [label="extrospection.json\nhost snapshot + observations"];
21
+ ext [label="extrospection.json\nhost snapshot + rf + observations"];
21
22
  ses [label="sessions/*.jsonl\ntranscripts"];
22
23
  crn [label="cron/jobs.yml\nscheduled jobs + logs"];
23
24
  agt [label="agents.yml\npersona registry"];
24
25
  swm [label="swarm/<id>/bus.jsonl\nmulti-agent chat"];
25
26
  hist [label="~/.pwn_history\nREPL history"];
26
27
 
27
- Root->cfg; Root->mem; Root->skl; Root->lrn; Root->met; Root->ext;
28
+ Root->cfg; Root->mem; Root->skl; Root->lrn; Root->mis; Root->met; Root->ext;
28
29
  Root->ses; Root->crn; Root->agt; Root->swm; Root->hist;
29
30
  }
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_AI_Feedback_Learning_Loop" {
2
2
  graph [
3
- label=<<B>pwn-ai — Closed Self-Improvement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">Introspection (self) ⟷ Extrospection (world)</FONT>>,
3
+ label=<<B>pwn-ai — Closed Self-Improvement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">Introspection (self) ⟷ Extrospection (world) · Mistakes (negative feedback)</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=TB, splines=spline, nodesep=0.6, ranksep=1.0,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
@@ -13,7 +13,7 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
13
13
  /* L0 ─ actors */
14
14
  User [label="👤 Researcher", fillcolor="#7dd3fc"];
15
15
  LLM [label="🤖 LLM Provider", fillcolor="#c4b5fd"];
16
- World [label="🌍 Host · Net · Repo\nToolchain · Intel feeds", fillcolor="#fda4af"];
16
+ World [label="🌍 Host · Net · Repo\nToolchain · RF · Intel", fillcolor="#fda4af"];
17
17
  {rank=same; User; LLM; World}
18
18
 
19
19
  /* L1 ─ agent core */
@@ -26,20 +26,21 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
26
26
  }
27
27
  {rank=same; Prompt; Dispatch; Result}
28
28
 
29
- /* L2 ─ dual engines */
29
+ /* L2 ─ triple engines */
30
30
  subgraph cluster_intro {
31
31
  label="INTROSPECTION (self)"; fontcolor="#a7f3d0";
32
32
  style=rounded; color="#047857"; bgcolor="#022c22"; penwidth=2;
33
33
  Metrics [label="Metrics\nper-tool success · avg ms", fillcolor="#6ee7b7"];
34
34
  Learning [label="Learning\nnote_outcome · reflect\nconsolidate · distill_skill", fillcolor="#6ee7b7"];
35
+ Mistakes [label="Mistakes\nrecord · resolve\nguard · correction_hint\n[REPEATING] · [REGRESSED]", fillcolor="#6ee7b7", penwidth=2];
35
36
  }
36
37
  subgraph cluster_extro {
37
38
  label="EXTROSPECTION (world)"; fontcolor="#fde68a";
38
39
  style=rounded; color="#a16207"; bgcolor="#422006"; penwidth=2;
39
- Snapshot [label="snapshot · drift\nhost/net/toolchain/repo", fillcolor="#fcd34d"];
40
- Observe [label="observe · intel\nrecon facts · CVE feed", fillcolor="#fcd34d"];
40
+ Snapshot [label="snapshot · drift\nhost/net/toolchain\nrepo/env/rf", fillcolor="#fcd34d"];
41
+ Observe [label="observe · intel\nrecon facts · CVE feed", fillcolor="#fcd34d"];
41
42
  }
42
- {rank=same; Metrics; Learning; Snapshot; Observe}
43
+ {rank=same; Metrics; Learning; Mistakes; Snapshot; Observe}
43
44
 
44
45
  /* L3 ─ correlate */
45
46
  Correlate [label="extro_correlate()\n\"I did it wrong\" vs \"the world changed\"",
@@ -51,11 +52,12 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
51
52
  style="rounded,dashed"; color="#334155"; bgcolor="#1e293b";
52
53
  Fmet [label="metrics.json", shape=cylinder, fillcolor="#fcd34d"];
53
54
  Flrn [label="learning.jsonl", shape=cylinder, fillcolor="#fcd34d"];
55
+ Fmis [label="mistakes.json", shape=cylinder, fillcolor="#fcd34d"];
54
56
  Fmem [label="memory.json", shape=cylinder, fillcolor="#fcd34d"];
55
57
  Fskl [label="skills/*.md", shape=cylinder, fillcolor="#fcd34d"];
56
58
  Fext [label="extrospection.json", shape=cylinder, fillcolor="#fcd34d"];
57
59
  }
58
- {rank=same; Fmet; Flrn; Fmem; Fskl; Fext}
60
+ {rank=same; Fmet; Flrn; Fmis; Fmem; Fskl; Fext}
59
61
 
60
62
  /* L0 → L1 */
61
63
  User -> Prompt [label="task", color="#38bdf8", penwidth=2];
@@ -69,6 +71,9 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
69
71
  /* L1 → L2 */
70
72
  Dispatch -> Metrics [label="record()", color="#34d399"];
71
73
  Result -> Learning [label="auto_reflect", color="#34d399"];
74
+ Dispatch -> Mistakes [label="on failure\nrecord()", color="#fb7185", penwidth=2];
75
+ User -> Mistakes [label="\"that's wrong\"\ncheck_user_correction", color="#fb7185",
76
+ style=dashed, constraint=false];
72
77
  Dispatch -> Snapshot [label="probe", color="#f59e0b"];
73
78
  Result -> Observe [label="auto_extrospect", color="#f59e0b"];
74
79
  World -> Snapshot [color="#fb7185", constraint=false];
@@ -77,6 +82,7 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
77
82
  /* L2 → L3 */
78
83
  Metrics -> Correlate [color="#34d399"];
79
84
  Learning -> Correlate [color="#34d399"];
85
+ Mistakes -> Correlate [color="#34d399"];
80
86
  Snapshot -> Correlate [color="#f59e0b"];
81
87
  Observe -> Correlate [color="#f59e0b"];
82
88
 
@@ -84,6 +90,8 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
84
90
  Correlate -> Fmet [style=invis];
85
91
  Metrics -> Fmet [color="#94a3b8"];
86
92
  Learning -> Flrn [color="#94a3b8"];
93
+ Mistakes -> Fmis [color="#94a3b8"];
94
+ Mistakes -> Fmem [label="resolve→lesson", color="#94a3b8"];
87
95
  Learning -> Fmem [label="lesson", color="#94a3b8"];
88
96
  Learning -> Fskl [label="skill", color="#94a3b8"];
89
97
  Observe -> Fext [color="#94a3b8"];
@@ -91,7 +99,11 @@ digraph "PWN_AI_Feedback_Learning_Loop" {
91
99
  /* feedback (dashed, non-constraining) */
92
100
  Fmem -> Prompt [label="MEMORY block", style=dashed, color="#fbbf24", constraint=false];
93
101
  Fskl -> Prompt [label="SKILLS block", style=dashed, color="#fbbf24", constraint=false];
102
+ Fmis -> Prompt [label="KNOWN MISTAKES\n+ KNOWN FIXES", style=dashed, color="#fb7185",
103
+ constraint=false, penwidth=2];
94
104
  Fext -> Prompt [label="EXTRO block", style=dashed, color="#fbbf24", constraint=false];
105
+ Mistakes -> Dispatch [label="correction_hint\n(inline, next iter)", style=dashed,
106
+ color="#fb7185", constraint=false, penwidth=2];
95
107
  Correlate -> Prompt [label="findings → next run", style=dashed, color="#fb7185",
96
108
  constraint=false, penwidth=2];
97
109
  Result -> User [label="answer", color="#38bdf8", constraint=false, penwidth=2];
@@ -1,6 +1,6 @@
1
1
  digraph "PWN_SDR" {
2
2
  graph [
3
- label=<<B>PWN::SDR — Software-Defined Radio &amp; RF Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">GQRX · FlipperZero · RFIDler · SonMicro · FrequencyAllocation</FONT>>,
3
+ label=<<B>PWN::SDR — Software-Defined Radio &amp; RF Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">GQRX · FlipperZero · RFIDler · SonMicro · FrequencyAllocation · Decoder::* (20 protocols)</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
5
  rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
6
6
  bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
@@ -15,22 +15,23 @@ digraph "PWN_SDR" {
15
15
  subgraph cluster_hw {
16
16
  label="Hardware"; fontcolor="#a7f3d0"; style=rounded;
17
17
  color="#047857"; bgcolor="#022c22";
18
- SDRhw [label="RTL-SDR / HackRF\n(via GQRX)", fillcolor="#6ee7b7"];
19
- Flipper [label="SDR::FlipperZero", fillcolor="#6ee7b7"];
20
- RFID [label="SDR::RFIDler\nSonMicroRFID", fillcolor="#6ee7b7"];
18
+ SDRhw [label="RTL-SDR / HackRF\n(via GQRX / SoapySDR)", fillcolor="#6ee7b7"];
19
+ Flipper [label="SDR::FlipperZero", fillcolor="#6ee7b7"];
20
+ RFID [label="SDR::RFIDler\nSonMicroRFID", fillcolor="#6ee7b7"];
21
21
  }
22
22
  subgraph cluster_ctrl {
23
- label="Control"; fontcolor="#fde68a"; style=rounded;
23
+ label="Control · Scan"; fontcolor="#fde68a"; style=rounded;
24
24
  color="#a16207"; bgcolor="#422006";
25
- GQRX [label="SDR::GQRX\nremote control · scan\nspectrum snapshot", fillcolor="#fcd34d"];
26
- Freq [label="SDR::FrequencyAllocation\nband lookup", fillcolor="#fcd34d"];
27
- Scan [label="bin/pwn_gqrx_scanner\nfast · iterative", fillcolor="#fcd34d"];
25
+ GQRX [label="SDR::GQRX\nremote control\nspectrum snapshot\n(median floor · DC null)", fillcolor="#fcd34d"];
26
+ Freq [label="SDR::FrequencyAllocation\nband lookup", fillcolor="#fcd34d"];
27
+ Scan [label="bin/pwn_gqrx_scanner\n--fft-scan · iterative\n--min-snr-db · --avg", fillcolor="#fcd34d"];
28
28
  }
29
29
  subgraph cluster_dec {
30
- label="Decode"; fontcolor="#ddd6fe"; style=rounded;
30
+ label="Decode · Record"; fontcolor="#ddd6fe"; style=rounded;
31
31
  color="#6d28d9"; bgcolor="#2e1065";
32
- Dec [label="SDR::Decoder::*\ndemod · protocol", fillcolor="#c4b5fd"];
33
- Obs [label="extro_observe\nrecord signal intel", fillcolor="#c4b5fd"];
32
+ Dec [label="SDR::Decoder::*\nADSB · APT · BT · DECT · GPS\nGSM · Iridium · LoRa · LTE\nMorse · P25 · POCSAG/FLEX\nRDS · RFID · rtl_433 · RTTY\nWiFi · ZigBee", fillcolor="#c4b5fd"];
33
+ Obs [label="extro_observe\ncategory: :rf\nrecord signal intel", fillcolor="#c4b5fd"];
34
+ Xrf [label="extro_snapshot :rf\nprobe_rf → hw inventory", fillcolor="#c4b5fd"];
34
35
  }
35
36
 
36
37
  RF -> SDRhw [color="#fb7185"];
@@ -42,4 +43,5 @@ digraph "PWN_SDR" {
42
43
  GQRX -> Dec [color="#a78bfa"];
43
44
  Freq -> Dec [color="#a78bfa"];
44
45
  Scan -> Obs [color="#a78bfa"];
46
+ SDRhw -> Xrf [style=dashed, color="#fbbf24", constraint=false];
45
47
  }