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,293 +4,143 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Architecture Pages: 1 -->
7
- <svg width="1135pt" height="986pt"
8
- viewBox="0.00 0.00 1135.00 986.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 942.83)">
7
+ <svg width="751pt" height="796pt"
8
+ viewBox="0.00 0.00 751.00 796.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 766.75)">
10
10
  <title>PWN_Architecture</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-942.83 1092.2,-942.83 1092.2,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="middle" x="524.5" y="-874.73" font-family="sans-Serif" font-size="22.00" fill="#e2e8f0">PWN &#45; runtime ownership and evidence flow</text>
13
- <!-- Operator -->
14
- <g id="node1" class="node">
15
- <title>Operator</title>
16
- <path fill="#7dd3fc" stroke="#334155" d="M78.5,-866.12C78.5,-866.12 23.5,-866.12 23.5,-866.12 17.5,-866.12 11.5,-860.12 11.5,-854.12 11.5,-854.12 11.5,-842.12 11.5,-842.12 11.5,-836.12 17.5,-830.12 23.5,-830.12 23.5,-830.12 78.5,-830.12 78.5,-830.12 84.5,-830.12 90.5,-836.12 90.5,-842.12 90.5,-842.12 90.5,-854.12 90.5,-854.12 90.5,-860.12 84.5,-866.12 78.5,-866.12"/>
17
- <text xml:space="preserve" text-anchor="middle" x="51" y="-844.42" font-family="sans-Serif" font-size="11.00">Operator / CI</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-28.8,28.8 -28.8,-766.75 722.51,-766.75 722.51,28.8 -28.8,28.8"/>
12
+ <text xml:space="preserve" text-anchor="start" x="220.11" y="-715.95" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN &#45; Overall Architecture</text>
13
+ <text xml:space="preserve" text-anchor="start" x="218.98" y="-704.5" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">runtime ownership · evidence flow · verified outcomes</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_entry</title>
16
+ <path fill="#1e293b" stroke="#334155" d="M20,-589.16C20,-589.16 380,-589.16 380,-589.16 386,-589.16 392,-595.16 392,-601.16 392,-601.16 392,-678.95 392,-678.95 392,-684.95 386,-690.95 380,-690.95 380,-690.95 20,-690.95 20,-690.95 14,-690.95 8,-684.95 8,-678.95 8,-678.95 8,-601.16 8,-601.16 8,-595.16 14,-589.16 20,-589.16"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-675.55" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">01 &#160;ACCESS &#160;· &#160;operator / CI</text>
18
+ </g>
19
+ <g id="clust2" class="cluster">
20
+ <title>cluster_control</title>
21
+ <path fill="#1e293b" stroke="#334155" d="M20,-443.87C20,-443.87 380,-443.87 380,-443.87 386,-443.87 392,-449.87 392,-455.87 392,-455.87 392,-547.16 392,-547.16 392,-553.16 386,-559.16 380,-559.16 380,-559.16 20,-559.16 20,-559.16 14,-559.16 8,-553.16 8,-547.16 8,-547.16 8,-455.87 8,-455.87 8,-449.87 14,-443.87 20,-443.87"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-543.76" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">02 &#160;CONTROL &#160;· &#160;request&#45;owned agent runtime</text>
23
+ </g>
24
+ <g id="clust3" class="cluster">
25
+ <title>cluster_execution</title>
26
+ <path fill="#1e293b" stroke="#334155" d="M20,-298.58C20,-298.58 380,-298.58 380,-298.58 386,-298.58 392,-304.58 392,-310.58 392,-310.58 392,-401.87 392,-401.87 392,-407.87 386,-413.87 380,-413.87 380,-413.87 20,-413.87 20,-413.87 14,-413.87 8,-407.87 8,-401.87 8,-401.87 8,-310.58 8,-310.58 8,-304.58 14,-298.58 20,-298.58"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-398.47" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">03 &#160;EXECUTION &#160;· &#160;host&#45;owned tools</text>
28
+ </g>
29
+ <g id="clust4" class="cluster">
30
+ <title>cluster_evidence</title>
31
+ <path fill="#1e293b" stroke="#334155" d="M20,-153.29C20,-153.29 380,-153.29 380,-153.29 386,-153.29 392,-159.29 392,-165.29 392,-165.29 392,-256.58 392,-256.58 392,-262.58 386,-268.58 380,-268.58 380,-268.58 20,-268.58 20,-268.58 14,-268.58 8,-262.58 8,-256.58 8,-256.58 8,-165.29 8,-165.29 8,-159.29 14,-153.29 20,-153.29"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-253.18" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">04 &#160;ACCEPTANCE &#160;· &#160;evidence, not model prose</text>
33
+ </g>
34
+ <g id="clust5" class="cluster">
35
+ <title>cluster_state</title>
36
+ <path fill="#1e293b" stroke="#334155" d="M20,-8C20,-8 380,-8 380,-8 386,-8 392,-14 392,-20 392,-20 392,-111.29 392,-111.29 392,-117.29 386,-123.29 380,-123.29 380,-123.29 20,-123.29 20,-123.29 14,-123.29 8,-117.29 8,-111.29 8,-111.29 8,-20 8,-20 8,-14 14,-8 20,-8"/>
37
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-107.89" font-family="sans-Serif" font-size="12.00" fill="#e2e8f0">05 &#160;RETENTION &#160;· &#160;durable evidence and advisory context</text>
18
38
  </g>
19
39
  <!-- Entry -->
20
- <g id="node2" class="node">
40
+ <g id="node1" class="node">
21
41
  <title>Entry</title>
22
- <path fill="#7dd3fc" stroke="#334155" d="M208.62,-793.12C208.62,-793.12 79.38,-793.12 79.38,-793.12 73.38,-793.12 67.38,-787.12 67.38,-781.12 67.38,-781.12 67.38,-769.12 67.38,-769.12 67.38,-763.12 73.38,-757.12 79.38,-757.12 79.38,-757.12 208.62,-757.12 208.62,-757.12 214.62,-757.12 220.62,-763.12 220.62,-769.12 220.62,-769.12 220.62,-781.12 220.62,-781.12 220.62,-787.12 214.62,-793.12 208.62,-793.12"/>
23
- <text xml:space="preserve" text-anchor="middle" x="144" y="-778.17" font-family="sans-Serif" font-size="11.00">pwn / pwn&#45;ai CLI and curses</text>
24
- <text xml:space="preserve" text-anchor="middle" x="144" y="-764.67" font-family="sans-Serif" font-size="11.00">56 executables total</text>
25
- </g>
26
- <!-- Operator&#45;&gt;Entry -->
27
- <g id="edge1" class="edge">
28
- <title>Operator&#45;&gt;Entry</title>
29
- <path fill="none" stroke="#94a3b8" d="M73.51,-829.94C85.19,-821.02 99.65,-809.98 112.43,-800.23"/>
30
- <polygon fill="#94a3b8" stroke="#94a3b8" points="114.34,-803.17 120.17,-794.32 110.1,-797.6 114.34,-803.17"/>
31
- </g>
32
- <!-- Mesh -->
33
- <g id="node3" class="node">
34
- <title>Mesh</title>
35
- <path fill="#7dd3fc" stroke="#334155" d="M250,-133.62C250,-133.62 12,-133.62 12,-133.62 6,-133.62 0,-127.62 0,-121.62 0,-121.62 0,-97.12 0,-97.12 0,-91.12 6,-85.12 12,-85.12 12,-85.12 250,-85.12 250,-85.12 256,-85.12 262,-91.12 262,-97.12 262,-97.12 262,-121.62 262,-121.62 262,-127.62 256,-133.62 250,-133.62"/>
36
- <text xml:space="preserve" text-anchor="middle" x="131" y="-119.17" font-family="sans-Serif" font-size="11.00">pwn&#45;mesh</text>
37
- <text xml:space="preserve" text-anchor="middle" x="131" y="-105.67" font-family="sans-Serif" font-size="11.00">primary radio or MQTT + optional secondary MQTT</text>
38
- <text xml:space="preserve" text-anchor="middle" x="131" y="-92.17" font-family="sans-Serif" font-size="11.00">@ai / private channel / whitelist gate</text>
39
- </g>
40
- <!-- Operator&#45;&gt;Mesh -->
41
- <g id="edge2" class="edge">
42
- <title>Operator&#45;&gt;Mesh</title>
43
- <path fill="none" stroke="#94a3b8" d="M46.39,-829.76C43.01,-815.47 39,-794.63 39,-776.12 39,-776.12 39,-776.12 39,-197.12 39,-173.73 54.94,-154.78 73.55,-140.63"/>
44
- <polygon fill="#94a3b8" stroke="#94a3b8" points="75.46,-143.57 81.61,-134.94 71.42,-137.85 75.46,-143.57"/>
42
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M371.6,-660.7C371.6,-660.7 28.4,-660.7 28.4,-660.7 22.4,-660.7 16.4,-654.7 16.4,-648.7 16.4,-648.7 16.4,-609.16 16.4,-609.16 16.4,-603.16 22.4,-597.16 28.4,-597.16 28.4,-597.16 371.6,-597.16 371.6,-597.16 377.6,-597.16 383.6,-603.16 383.6,-609.16 383.6,-609.16 383.6,-648.7 383.6,-648.7 383.6,-654.7 377.6,-660.7 371.6,-660.7"/>
43
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-638.73" font-family="sans-Serif" font-size="11.00" fill="#0f172a">pwn / pwn&#45;ai &#160;· &#160;REPL, curses and headless CLI</text>
44
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-625.23" font-family="sans-Serif" font-size="11.00" fill="#0f172a">pwn&#45;mesh: received @ai + private channel + whitelist</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-611.73" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Cron: asynchronous prompt jobs; curriculum opt&#45;in</text>
45
46
  </g>
46
47
  <!-- Runtime -->
47
- <g id="node4" class="node">
48
+ <g id="node2" class="node">
48
49
  <title>Runtime</title>
49
- <path fill="#c4b5fd" stroke="#334155" d="M490.38,-710.62C490.38,-710.62 293.62,-710.62 293.62,-710.62 287.62,-710.62 281.62,-704.62 281.62,-698.62 281.62,-698.62 281.62,-674.12 281.62,-674.12 281.62,-668.12 287.62,-662.12 293.62,-662.12 293.62,-662.12 490.38,-662.12 490.38,-662.12 496.38,-662.12 502.38,-668.12 502.38,-674.12 502.38,-674.12 502.38,-698.62 502.38,-698.62 502.38,-704.62 496.38,-710.62 490.38,-710.62"/>
50
- <text xml:space="preserve" text-anchor="middle" x="392" y="-696.17" font-family="sans-Serif" font-size="11.00">RequestRuntime + Loop</text>
51
- <text xml:space="preserve" text-anchor="middle" x="392" y="-682.67" font-family="sans-Serif" font-size="11.00">original objective / additive steering</text>
52
- <text xml:space="preserve" text-anchor="middle" x="392" y="-669.17" font-family="sans-Serif" font-size="11.00">checkpoint / permissions / uncertain effects</text>
50
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M371.6,-528.91C371.6,-528.91 28.4,-528.91 28.4,-528.91 22.4,-528.91 16.4,-522.91 16.4,-516.91 16.4,-516.91 16.4,-463.87 16.4,-463.87 16.4,-457.87 22.4,-451.87 28.4,-451.87 28.4,-451.87 371.6,-451.87 371.6,-451.87 377.6,-451.87 383.6,-457.87 383.6,-463.87 383.6,-463.87 383.6,-516.91 383.6,-516.91 383.6,-522.91 377.6,-528.91 371.6,-528.91"/>
51
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-506.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RequestRuntime + Loop</text>
52
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-493.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Own objective, additive steering and checkpoints</text>
53
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-479.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder + Registry: context and available tools</text>
54
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-466.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Repeat tool / observation turns; optional Swarm / Solve</text>
53
55
  </g>
54
56
  <!-- Entry&#45;&gt;Runtime -->
55
- <g id="edge3" class="edge">
57
+ <g id="edge1" class="edge">
56
58
  <title>Entry&#45;&gt;Runtime</title>
57
- <path fill="none" stroke="#94a3b8" d="M193.89,-756.67C228.15,-744.69 274.34,-728.53 313.49,-714.84"/>
58
- <polygon fill="#94a3b8" stroke="#94a3b8" points="314.62,-718.15 322.91,-711.54 312.31,-711.54 314.62,-718.15"/>
59
- </g>
60
- <!-- Mesh&#45;&gt;Runtime -->
61
- <g id="edge4" class="edge">
62
- <title>Mesh&#45;&gt;Runtime</title>
63
- <path fill="none" stroke="#94a3b8" d="M131,-133.94C131,-151.39 131,-175.74 131,-197.12 131,-351.38 131,-351.38 131,-351.38 131,-374.4 127.33,-380.88 133.25,-403.12 161.83,-510.45 181.31,-536.31 248,-625.12 257.78,-638.15 270.91,-648.39 285.28,-656.42"/>
64
- <polygon fill="#94a3b8" stroke="#94a3b8" points="283.56,-659.47 294.05,-660.94 286.77,-653.25 283.56,-659.47"/>
65
- <text xml:space="preserve" text-anchor="middle" x="186.12" y="-394.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">eligible received @ai only</text>
59
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M200,-589.16C200,-582.76 200,-575.92 200,-568.96"/>
60
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="202.8,-569.13 200,-561.13 197.2,-569.13 202.8,-569.13"/>
61
+ <text xml:space="preserve" text-anchor="middle" x="232.25" y="-569.66" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">agent requests</text>
66
62
  </g>
67
- <!-- Prompt -->
68
- <g id="node5" class="node">
69
- <title>Prompt</title>
70
- <path fill="#c4b5fd" stroke="#334155" d="M889.38,-625.12C889.38,-625.12 674.62,-625.12 674.62,-625.12 668.62,-625.12 662.62,-619.12 662.62,-613.12 662.62,-613.12 662.62,-588.62 662.62,-588.62 662.62,-582.62 668.62,-576.62 674.62,-576.62 674.62,-576.62 889.38,-576.62 889.38,-576.62 895.38,-576.62 901.38,-582.62 901.38,-588.62 901.38,-588.62 901.38,-613.12 901.38,-613.12 901.38,-619.12 895.38,-625.12 889.38,-625.12"/>
71
- <text xml:space="preserve" text-anchor="middle" x="782" y="-610.67" font-family="sans-Serif" font-size="11.00">PromptBuilder</text>
72
- <text xml:space="preserve" text-anchor="middle" x="782" y="-597.17" font-family="sans-Serif" font-size="11.00">memory / skills / lessons / mistakes / policy</text>
73
- <text xml:space="preserve" text-anchor="middle" x="782" y="-583.67" font-family="sans-Serif" font-size="11.00">HOST: DetectOS summary + PreflightChecker</text>
74
- </g>
75
- <!-- Runtime&#45;&gt;Prompt -->
76
- <g id="edge5" class="edge">
77
- <title>Runtime&#45;&gt;Prompt</title>
78
- <path fill="none" stroke="#94a3b8" d="M502.72,-661.67C551.91,-651.14 609.98,-638.71 660.38,-627.91"/>
79
- <polygon fill="#94a3b8" stroke="#94a3b8" points="660.82,-631.4 669.87,-625.88 659.35,-624.55 660.82,-631.4"/>
80
- </g>
81
- <!-- Registry -->
82
- <g id="node6" class="node">
83
- <title>Registry</title>
84
- <path fill="#c4b5fd" stroke="#334155" d="M632.5,-618.88C632.5,-618.88 451.5,-618.88 451.5,-618.88 445.5,-618.88 439.5,-612.88 439.5,-606.88 439.5,-606.88 439.5,-594.88 439.5,-594.88 439.5,-588.88 445.5,-582.88 451.5,-582.88 451.5,-582.88 632.5,-582.88 632.5,-582.88 638.5,-582.88 644.5,-588.88 644.5,-594.88 644.5,-594.88 644.5,-606.88 644.5,-606.88 644.5,-612.88 638.5,-618.88 632.5,-618.88"/>
85
- <text xml:space="preserve" text-anchor="middle" x="542" y="-603.92" font-family="sans-Serif" font-size="11.00">Registry: 16 toolsets / 150 tools</text>
86
- <text xml:space="preserve" text-anchor="middle" x="542" y="-590.42" font-family="sans-Serif" font-size="11.00">normal Loop: core&#45;only + relevant MCP</text>
87
- </g>
88
- <!-- Runtime&#45;&gt;Registry -->
89
- <g id="edge6" class="edge">
90
- <title>Runtime&#45;&gt;Registry</title>
91
- <path fill="none" stroke="#94a3b8" d="M434.58,-661.67C455.33,-650.12 480.17,-636.29 500.74,-624.84"/>
92
- <polygon fill="#94a3b8" stroke="#94a3b8" points="502.4,-627.92 509.44,-620 499,-621.81 502.4,-627.92"/>
93
- </g>
94
- <!-- Verify -->
95
- <g id="node12" class="node">
96
- <title>Verify</title>
97
- <path fill="#c4b5fd" stroke="#334155" d="M412.88,-289.12C412.88,-289.12 171.12,-289.12 171.12,-289.12 165.12,-289.12 159.12,-283.12 159.12,-277.12 159.12,-277.12 159.12,-265.12 159.12,-265.12 159.12,-259.12 165.12,-253.12 171.12,-253.12 171.12,-253.12 412.88,-253.12 412.88,-253.12 418.88,-253.12 424.88,-259.12 424.88,-265.12 424.88,-265.12 424.88,-277.12 424.88,-277.12 424.88,-283.12 418.88,-289.12 412.88,-289.12"/>
98
- <text xml:space="preserve" text-anchor="middle" x="292" y="-274.18" font-family="sans-Serif" font-size="11.00">Finalization arbiter + Verification</text>
99
- <text xml:space="preserve" text-anchor="middle" x="292" y="-260.68" font-family="sans-Serif" font-size="11.00">current bytes / authored checks / complete coverage</text>
100
- </g>
101
- <!-- Runtime&#45;&gt;Verify -->
102
- <g id="edge14" class="edge">
103
- <title>Runtime&#45;&gt;Verify</title>
104
- <path fill="none" stroke="#94a3b8" d="M299.4,-661.67C273.36,-649.11 252,-630.18 252,-601.88 252,-601.88 252,-601.88 252,-438.12 252,-388.01 220.04,-372.51 239,-326.12 243.44,-315.27 251.22,-305.42 259.48,-297.2"/>
105
- <polygon fill="#94a3b8" stroke="#94a3b8" points="261.7,-299.91 266.68,-290.56 256.95,-294.77 261.7,-299.91"/>
63
+ <!-- Execute -->
64
+ <g id="node3" class="node">
65
+ <title>Execute</title>
66
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M371.6,-383.62C371.6,-383.62 28.4,-383.62 28.4,-383.62 22.4,-383.62 16.4,-377.62 16.4,-371.62 16.4,-371.62 16.4,-318.58 16.4,-318.58 16.4,-312.58 22.4,-306.58 28.4,-306.58 28.4,-306.58 371.6,-306.58 371.6,-306.58 377.6,-306.58 383.6,-312.58 383.6,-318.58 383.6,-318.58 383.6,-371.62 383.6,-371.62 383.6,-377.62 377.6,-383.62 371.6,-383.62"/>
67
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-361.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch + ToolGuard + confirmation + sandbox</text>
68
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-348.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Plugins / SAST / AWS / WWW / SDR / Blockchain / Reports</text>
69
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-334.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Shell, Ruby and MCP integrations</text>
70
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-321.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Direct REPL / driver calls can also use these capabilities</text>
71
+ </g>
72
+ <!-- Runtime&#45;&gt;Execute -->
73
+ <g id="edge2" class="edge">
74
+ <title>Runtime&#45;&gt;Execute</title>
75
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M200,-443.87C200,-437.34 200,-430.48 200,-423.54"/>
76
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="202.8,-423.83 200,-415.83 197.2,-423.83 202.8,-423.83"/>
77
+ <text xml:space="preserve" text-anchor="middle" x="239.38" y="-424.37" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">selected tool calls</text>
106
78
  </g>
107
79
  <!-- Provider -->
108
- <g id="node7" class="node">
80
+ <g id="node6" class="node">
109
81
  <title>Provider</title>
110
- <path fill="#fda4af" stroke="#334155" d="M680.88,-539.62C680.88,-539.62 493.12,-539.62 493.12,-539.62 487.12,-539.62 481.12,-533.62 481.12,-527.62 481.12,-527.62 481.12,-515.62 481.12,-515.62 481.12,-509.62 487.12,-503.62 493.12,-503.62 493.12,-503.62 680.88,-503.62 680.88,-503.62 686.88,-503.62 692.88,-509.62 692.88,-515.62 692.88,-515.62 692.88,-527.62 692.88,-527.62 692.88,-533.62 686.88,-539.62 680.88,-539.62"/>
111
- <text xml:space="preserve" text-anchor="middle" x="587" y="-524.67" font-family="sans-Serif" font-size="11.00">Configured provider adapter</text>
112
- <text xml:space="preserve" text-anchor="middle" x="587" y="-511.18" font-family="sans-Serif" font-size="11.00">request&#45;local routing and retry ownership</text>
113
- </g>
114
- <!-- Prompt&#45;&gt;Provider -->
115
- <g id="edge7" class="edge">
116
- <title>Prompt&#45;&gt;Provider</title>
117
- <path fill="none" stroke="#94a3b8" d="M722.17,-576.17C696.4,-565.97 666.49,-554.12 641.37,-544.16"/>
118
- <polygon fill="#94a3b8" stroke="#94a3b8" points="642.91,-541.01 632.33,-540.58 640.34,-547.52 642.91,-541.01"/>
82
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M681.72,-528.91C681.72,-528.91 514.28,-528.91 514.28,-528.91 508.28,-528.91 502.28,-522.91 502.28,-516.91 502.28,-516.91 502.28,-463.87 502.28,-463.87 502.28,-457.87 508.28,-451.87 514.28,-451.87 514.28,-451.87 681.72,-451.87 681.72,-451.87 687.72,-451.87 693.72,-457.87 693.72,-463.87 693.72,-463.87 693.72,-516.91 693.72,-516.91 693.72,-522.91 687.72,-528.91 681.72,-528.91"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="598" y="-506.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MODEL BOUNDARY</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="598" y="-493.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Configured provider adapter</text>
85
+ <text xml:space="preserve" text-anchor="middle" x="598" y="-479.94" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Request&#45;local routing and retries</text>
86
+ <text xml:space="preserve" text-anchor="middle" x="598" y="-466.44" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Model output is not host evidence</text>
119
87
  </g>
120
- <!-- Registry&#45;&gt;Provider -->
121
- <g id="edge8" class="edge">
122
- <title>Registry&#45;&gt;Provider</title>
123
- <path fill="none" stroke="#94a3b8" d="M551.99,-582.73C557.6,-573.1 564.73,-560.85 571.1,-549.93"/>
124
- <polygon fill="#94a3b8" stroke="#94a3b8" points="574.11,-551.7 576.12,-541.3 568.07,-548.18 574.11,-551.7"/>
125
- </g>
126
- <!-- Dispatch -->
127
- <g id="node8" class="node">
128
- <title>Dispatch</title>
129
- <path fill="#c4b5fd" stroke="#334155" d="M675.75,-457.12C675.75,-457.12 466.25,-457.12 466.25,-457.12 460.25,-457.12 454.25,-451.12 454.25,-445.12 454.25,-445.12 454.25,-433.12 454.25,-433.12 454.25,-427.12 460.25,-421.12 466.25,-421.12 466.25,-421.12 675.75,-421.12 675.75,-421.12 681.75,-421.12 687.75,-427.12 687.75,-433.12 687.75,-433.12 687.75,-445.12 687.75,-445.12 687.75,-451.12 681.75,-457.12 675.75,-457.12"/>
130
- <text xml:space="preserve" text-anchor="middle" x="571" y="-435.43" font-family="sans-Serif" font-size="11.00">Dispatch / ToolGuard / confirmation / sandbox</text>
131
- </g>
132
- <!-- Provider&#45;&gt;Dispatch -->
133
- <g id="edge9" class="edge">
134
- <title>Provider&#45;&gt;Dispatch</title>
135
- <path fill="none" stroke="#94a3b8" d="M583.53,-503.16C581.54,-493.14 578.99,-480.31 576.71,-468.84"/>
136
- <polygon fill="#94a3b8" stroke="#94a3b8" points="580.14,-468.17 574.76,-459.04 573.28,-469.53 580.14,-468.17"/>
137
- <text xml:space="preserve" text-anchor="middle" x="597.96" y="-477.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool calls</text>
138
- </g>
139
- <!-- Capabilities -->
140
- <g id="node9" class="node">
141
- <title>Capabilities</title>
142
- <path fill="#6ee7b7" stroke="#334155" d="M878.88,-374.62C878.88,-374.62 697.12,-374.62 697.12,-374.62 691.12,-374.62 685.12,-368.62 685.12,-362.62 685.12,-362.62 685.12,-338.12 685.12,-338.12 685.12,-332.12 691.12,-326.12 697.12,-326.12 697.12,-326.12 878.88,-326.12 878.88,-326.12 884.88,-326.12 890.88,-332.12 890.88,-338.12 890.88,-338.12 890.88,-362.62 890.88,-362.62 890.88,-368.62 884.88,-374.62 878.88,-374.62"/>
143
- <text xml:space="preserve" text-anchor="middle" x="788" y="-360.18" font-family="sans-Serif" font-size="11.00">107 plugin modules / 48 SAST modules</text>
144
- <text xml:space="preserve" text-anchor="middle" x="788" y="-346.68" font-family="sans-Serif" font-size="11.00">90 AWS wrappers / 22 WWW drivers</text>
145
- <text xml:space="preserve" text-anchor="middle" x="788" y="-333.18" font-family="sans-Serif" font-size="11.00">SDR / blockchain / reports / FFI</text>
146
- </g>
147
- <!-- Dispatch&#45;&gt;Capabilities -->
148
- <g id="edge10" class="edge">
149
- <title>Dispatch&#45;&gt;Capabilities</title>
150
- <path fill="none" stroke="#94a3b8" d="M614.65,-420.67C644.38,-408.79 684.35,-392.81 718.43,-379.19"/>
151
- <polygon fill="#94a3b8" stroke="#94a3b8" points="719.4,-382.57 727.39,-375.61 716.8,-376.07 719.4,-382.57"/>
152
- </g>
153
- <!-- Evidence -->
154
- <g id="node11" class="node">
155
- <title>Evidence</title>
156
- <path fill="#fcd34d" stroke="#334155" d="M667.38,-370.06C667.38,-372.48 620.59,-374.44 563,-374.44 505.41,-374.44 458.62,-372.48 458.62,-370.06 458.62,-370.06 458.62,-330.69 458.62,-330.69 458.62,-328.27 505.41,-326.31 563,-326.31 620.59,-326.31 667.38,-328.27 667.38,-330.69 667.38,-330.69 667.38,-370.06 667.38,-370.06"/>
157
- <path fill="none" stroke="#334155" d="M667.38,-370.06C667.38,-367.65 620.59,-365.69 563,-365.69 505.41,-365.69 458.62,-367.65 458.62,-370.06"/>
158
- <text xml:space="preserve" text-anchor="middle" x="563" y="-353.43" font-family="sans-Serif" font-size="11.00">Host observations / exact&#45;target artifacts</text>
159
- <text xml:space="preserve" text-anchor="middle" x="563" y="-339.93" font-family="sans-Serif" font-size="11.00">Sessions / request checkpoints</text>
160
- </g>
161
- <!-- Dispatch&#45;&gt;Evidence -->
162
- <g id="edge12" class="edge">
163
- <title>Dispatch&#45;&gt;Evidence</title>
164
- <path fill="none" stroke="#94a3b8" d="M569.42,-420.99C568.49,-410.96 567.29,-397.93 566.18,-385.87"/>
165
- <polygon fill="#94a3b8" stroke="#94a3b8" points="569.7,-385.86 565.29,-376.23 562.72,-386.51 569.7,-385.86"/>
166
- </g>
167
- <!-- Swarm -->
168
- <g id="node16" class="node">
169
- <title>Swarm</title>
170
- <path fill="#c4b5fd" stroke="#334155" d="M428.5,-368.38C428.5,-368.38 259.5,-368.38 259.5,-368.38 253.5,-368.38 247.5,-362.38 247.5,-356.38 247.5,-356.38 247.5,-344.38 247.5,-344.38 247.5,-338.38 253.5,-332.38 259.5,-332.38 259.5,-332.38 428.5,-332.38 428.5,-332.38 434.5,-332.38 440.5,-338.38 440.5,-344.38 440.5,-344.38 440.5,-356.38 440.5,-356.38 440.5,-362.38 434.5,-368.38 428.5,-368.38"/>
171
- <text xml:space="preserve" text-anchor="middle" x="344" y="-353.43" font-family="sans-Serif" font-size="11.00">Swarm nested Loop / Solve</text>
172
- <text xml:space="preserve" text-anchor="middle" x="344" y="-339.93" font-family="sans-Serif" font-size="11.00">parent rechecks child artifact receipts</text>
88
+ <!-- Runtime&#45;&gt;Provider -->
89
+ <g id="edge5" class="edge">
90
+ <title>Runtime&#45;&gt;Provider</title>
91
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M393.7,-490.39C427.63,-490.39 461.77,-490.39 492.16,-490.39"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="394.11,-487.59 386.11,-490.39 394.11,-493.19 394.11,-487.59"/>
93
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="491.92,-493.19 499.92,-490.39 491.92,-487.59 491.92,-493.19"/>
94
+ <text xml:space="preserve" text-anchor="middle" x="442.94" y="-495.89" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">context / proposals</text>
173
95
  </g>
174
- <!-- Dispatch&#45;&gt;Swarm -->
175
- <g id="edge20" class="edge">
176
- <title>Dispatch&#45;&gt;Swarm</title>
177
- <path fill="none" stroke="#94a3b8" d="M525.34,-420.67C489.24,-406.88 438.69,-387.56 400.13,-372.82"/>
178
- <polygon fill="#94a3b8" stroke="#94a3b8" points="401.6,-369.64 391,-369.34 399.1,-376.18 401.6,-369.64"/>
96
+ <!-- Accept -->
97
+ <g id="node4" class="node">
98
+ <title>Accept</title>
99
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M371.6,-238.33C371.6,-238.33 28.4,-238.33 28.4,-238.33 22.4,-238.33 16.4,-232.33 16.4,-226.33 16.4,-226.33 16.4,-173.29 16.4,-173.29 16.4,-167.29 22.4,-161.29 28.4,-161.29 28.4,-161.29 371.6,-161.29 371.6,-161.29 377.6,-161.29 383.6,-167.29 383.6,-173.29 383.6,-173.29 383.6,-226.33 383.6,-226.33 383.6,-232.33 377.6,-238.33 371.6,-238.33"/>
100
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-216.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Host observations + exact&#45;target artifact receipts</text>
101
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-202.86" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Finalization arbiter + Verification: all obligations</text>
102
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-189.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Parent rechecks child artifacts; authored checks / current bytes</text>
103
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-175.86" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Release verified, failed, or unknown / incomplete result</text>
104
+ </g>
105
+ <!-- Execute&#45;&gt;Accept -->
106
+ <g id="edge3" class="edge">
107
+ <title>Execute&#45;&gt;Accept</title>
108
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M200,-298.58C200,-292.05 200,-285.19 200,-278.25"/>
109
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="202.8,-278.54 200,-270.54 197.2,-278.54 202.8,-278.54"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="257.75" y="-279.08" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">observed results / receipts</text>
179
111
  </g>
180
112
  <!-- Target -->
181
- <g id="node10" class="node">
113
+ <g id="node7" class="node">
182
114
  <title>Target</title>
183
- <path fill="#fda4af" stroke="#334155" d="M878.62,-289.12C878.62,-289.12 665.38,-289.12 665.38,-289.12 659.38,-289.12 653.38,-283.12 653.38,-277.12 653.38,-277.12 653.38,-265.12 653.38,-265.12 653.38,-259.12 659.38,-253.12 665.38,-253.12 665.38,-253.12 878.62,-253.12 878.62,-253.12 884.62,-253.12 890.62,-259.12 890.62,-265.12 890.62,-265.12 890.62,-277.12 890.62,-277.12 890.62,-283.12 884.62,-289.12 878.62,-289.12"/>
184
- <text xml:space="preserve" text-anchor="middle" x="772" y="-274.18" font-family="sans-Serif" font-size="11.00">Authorized target / external service / hardware</text>
185
- <text xml:space="preserve" text-anchor="middle" x="772" y="-260.68" font-family="sans-Serif" font-size="11.00">requires separate live validation</text>
186
- </g>
187
- <!-- Capabilities&#45;&gt;Target -->
188
- <g id="edge11" class="edge">
189
- <title>Capabilities&#45;&gt;Target</title>
190
- <path fill="none" stroke="#94a3b8" d="M783.11,-325.78C781.46,-317.82 779.61,-308.84 777.89,-300.55"/>
191
- <polygon fill="#94a3b8" stroke="#94a3b8" points="781.35,-300.01 775.9,-290.93 774.5,-301.43 781.35,-300.01"/>
192
- </g>
193
- <!-- Evidence&#45;&gt;Runtime -->
194
- <g id="edge13" class="edge">
195
- <title>Evidence&#45;&gt;Runtime</title>
196
- <path fill="none" stroke="#94a3b8" d="M466.31,-373.2C436.33,-386.09 411,-406.37 411,-438.12 411,-601.88 411,-601.88 411,-601.88 411,-618.34 407.44,-636.19 403.41,-651.14"/>
197
- <polygon fill="#94a3b8" stroke="#94a3b8" points="400.12,-649.91 400.7,-660.49 406.84,-651.86 400.12,-649.91"/>
198
- <text xml:space="preserve" text-anchor="middle" x="437.25" y="-518.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">observations</text>
199
- </g>
200
- <!-- Evidence&#45;&gt;Verify -->
201
- <g id="edge15" class="edge">
202
- <title>Evidence&#45;&gt;Verify</title>
203
- <path fill="none" stroke="#94a3b8" d="M483.89,-326.82C445.92,-316 400.77,-303.13 363.8,-292.59"/>
204
- <polygon fill="#94a3b8" stroke="#94a3b8" points="365.14,-289.33 354.56,-289.96 363.22,-296.07 365.14,-289.33"/>
115
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M675.34,-383.62C675.34,-383.62 478.66,-383.62 478.66,-383.62 472.66,-383.62 466.66,-377.62 466.66,-371.62 466.66,-371.62 466.66,-318.58 466.66,-318.58 466.66,-312.58 472.66,-306.58 478.66,-306.58 478.66,-306.58 675.34,-306.58 675.34,-306.58 681.34,-306.58 687.34,-312.58 687.34,-318.58 687.34,-318.58 687.34,-371.62 687.34,-371.62 687.34,-377.62 681.34,-383.62 675.34,-383.62"/>
116
+ <text xml:space="preserve" text-anchor="middle" x="577" y="-361.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">WORLD BOUNDARY</text>
117
+ <text xml:space="preserve" text-anchor="middle" x="577" y="-348.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">External services / targets / hardware</text>
118
+ <text xml:space="preserve" text-anchor="middle" x="577" y="-334.65" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Live behavior needs separate validation</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="577" y="-321.15" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Radio submission is not RF delivery</text>
205
120
  </g>
206
- <!-- Outcome -->
207
- <g id="node13" class="node">
208
- <title>Outcome</title>
209
- <path fill="#7dd3fc" stroke="#334155" d="M361.25,-216.12C361.25,-216.12 178.75,-216.12 178.75,-216.12 172.75,-216.12 166.75,-210.12 166.75,-204.12 166.75,-204.12 166.75,-192.12 166.75,-192.12 166.75,-186.12 172.75,-180.12 178.75,-180.12 178.75,-180.12 361.25,-180.12 361.25,-180.12 367.25,-180.12 373.25,-186.12 373.25,-192.12 373.25,-192.12 373.25,-204.12 373.25,-204.12 373.25,-210.12 367.25,-216.12 361.25,-216.12"/>
210
- <text xml:space="preserve" text-anchor="middle" x="270" y="-201.18" font-family="sans-Serif" font-size="11.00">Verified / failed / unknown or incomplete</text>
211
- <text xml:space="preserve" text-anchor="middle" x="270" y="-187.68" font-family="sans-Serif" font-size="11.00">not model prose alone</text>
212
- </g>
213
- <!-- Verify&#45;&gt;Outcome -->
214
- <g id="edge16" class="edge">
215
- <title>Verify&#45;&gt;Outcome</title>
216
- <path fill="none" stroke="#94a3b8" d="M286.67,-252.94C284.27,-245.18 281.37,-235.81 278.66,-227.07"/>
217
- <polygon fill="#94a3b8" stroke="#94a3b8" points="282.03,-226.12 275.72,-217.6 275.34,-228.19 282.03,-226.12"/>
218
- </g>
219
- <!-- Outcome&#45;&gt;Entry -->
220
- <g id="edge24" class="edge">
221
- <title>Outcome&#45;&gt;Entry</title>
222
- <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M177.17,-216.58C127.73,-228.63 77,-246.7 77,-270.12 77,-687.38 77,-687.38 77,-687.38 77,-712.07 94.22,-734.02 111.19,-749.66"/>
223
- <polygon fill="#94a3b8" stroke="#94a3b8" points="108.44,-751.91 118.29,-755.82 113.04,-746.62 108.44,-751.91"/>
224
- <text xml:space="preserve" text-anchor="middle" x="104.75" y="-477.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">release result</text>
225
- </g>
226
- <!-- Outcome&#45;&gt;Mesh -->
227
- <g id="edge25" class="edge">
228
- <title>Outcome&#45;&gt;Mesh</title>
229
- <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M242.21,-179.78C224,-168.42 199.73,-153.27 178.51,-140.03"/>
230
- <polygon fill="#94a3b8" stroke="#94a3b8" points="180.63,-137.23 170.3,-134.9 176.93,-143.16 180.63,-137.23"/>
231
- <text xml:space="preserve" text-anchor="middle" x="305.2" y="-153.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">origin&#45;bound reply; submission != RF delivery</text>
232
- </g>
233
- <!-- Learn -->
234
- <g id="node14" class="node">
235
- <title>Learn</title>
236
- <path fill="#c4b5fd" stroke="#334155" d="M878.88,-133.62C878.88,-133.62 703.12,-133.62 703.12,-133.62 697.12,-133.62 691.12,-127.62 691.12,-121.62 691.12,-121.62 691.12,-97.12 691.12,-97.12 691.12,-91.12 697.12,-85.12 703.12,-85.12 703.12,-85.12 878.88,-85.12 878.88,-85.12 884.88,-85.12 890.88,-91.12 890.88,-97.12 890.88,-97.12 890.88,-121.62 890.88,-121.62 890.88,-127.62 884.88,-133.62 878.88,-133.62"/>
237
- <text xml:space="preserve" text-anchor="middle" x="791" y="-119.17" font-family="sans-Serif" font-size="11.00">Reward / Learning / Mistakes / Metrics</text>
238
- <text xml:space="preserve" text-anchor="middle" x="791" y="-105.67" font-family="sans-Serif" font-size="11.00">claim and verified&#45;completion fields</text>
239
- <text xml:space="preserve" text-anchor="middle" x="791" y="-92.17" font-family="sans-Serif" font-size="11.00">Policy positive credit needs attribution</text>
240
- </g>
241
- <!-- Outcome&#45;&gt;Learn -->
242
- <g id="edge17" class="edge">
243
- <title>Outcome&#45;&gt;Learn</title>
244
- <path fill="none" stroke="#94a3b8" d="M373.56,-179.88C462.01,-165.15 588.95,-144.02 679.59,-128.93"/>
245
- <polygon fill="#94a3b8" stroke="#94a3b8" points="679.96,-132.41 689.25,-127.32 678.81,-125.51 679.96,-132.41"/>
246
- </g>
247
- <!-- Stores -->
248
- <g id="node15" class="node">
249
- <title>Stores</title>
250
- <path fill="#fcd34d" stroke="#334155" d="M945.12,-43.75C945.12,-46.16 904.73,-48.12 855,-48.12 805.27,-48.12 764.88,-46.16 764.88,-43.75 764.88,-43.75 764.88,-4.38 764.88,-4.38 764.88,-1.96 805.27,0 855,0 904.73,0 945.12,-1.96 945.12,-4.38 945.12,-4.38 945.12,-43.75 945.12,-43.75"/>
251
- <path fill="none" stroke="#334155" d="M945.12,-43.75C945.12,-41.34 904.73,-39.38 855,-39.38 805.27,-39.38 764.88,-41.34 764.88,-43.75"/>
252
- <text xml:space="preserve" text-anchor="middle" x="855" y="-27.11" font-family="sans-Serif" font-size="11.00">Default ~/.pwn stores</text>
253
- <text xml:space="preserve" text-anchor="middle" x="855" y="-13.61" font-family="sans-Serif" font-size="11.00">plus explicit artifact/worktree paths</text>
254
- </g>
255
- <!-- Learn&#45;&gt;Stores -->
256
- <g id="edge18" class="edge">
257
- <title>Learn&#45;&gt;Stores</title>
258
- <path fill="none" stroke="#94a3b8" d="M809.17,-84.72C815.64,-76.3 823.05,-66.65 830,-57.61"/>
259
- <polygon fill="#94a3b8" stroke="#94a3b8" points="832.77,-59.75 836.09,-49.68 827.22,-55.48 832.77,-59.75"/>
260
- </g>
261
- <!-- Stores&#45;&gt;Prompt -->
262
- <g id="edge19" class="edge">
263
- <title>Stores&#45;&gt;Prompt</title>
264
- <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M886.25,-48.51C902.5,-63.55 919,-84.66 919,-108.38 919,-522.62 919,-522.62 919,-522.62 919,-543.9 906.31,-559.38 888.65,-570.62"/>
265
- <polygon fill="#94a3b8" stroke="#94a3b8" points="887.27,-567.38 880.32,-575.38 890.74,-573.46 887.27,-567.38"/>
266
- </g>
267
- <!-- Swarm&#45;&gt;Runtime -->
268
- <g id="edge21" class="edge">
269
- <title>Swarm&#45;&gt;Runtime</title>
270
- <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M341.79,-368.62C339.73,-386.11 337,-413.95 337,-438.12 337,-601.88 337,-601.88 337,-601.88 337,-620.85 347.03,-638.85 358.52,-653.24"/>
271
- <polygon fill="#94a3b8" stroke="#94a3b8" points="355.64,-655.25 364.8,-660.56 360.95,-650.69 355.64,-655.25"/>
272
- <text xml:space="preserve" text-anchor="middle" x="355.75" y="-518.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">child turn</text>
273
- </g>
274
- <!-- Cron -->
275
- <g id="node17" class="node">
276
- <title>Cron</title>
277
- <path fill="#c4b5fd" stroke="#334155" d="M886.5,-793.12C886.5,-793.12 753.5,-793.12 753.5,-793.12 747.5,-793.12 741.5,-787.12 741.5,-781.12 741.5,-781.12 741.5,-769.12 741.5,-769.12 741.5,-763.12 747.5,-757.12 753.5,-757.12 753.5,-757.12 886.5,-757.12 886.5,-757.12 892.5,-757.12 898.5,-763.12 898.5,-769.12 898.5,-769.12 898.5,-781.12 898.5,-781.12 898.5,-787.12 892.5,-793.12 886.5,-793.12"/>
278
- <text xml:space="preserve" text-anchor="middle" x="820" y="-778.17" font-family="sans-Serif" font-size="11.00">Cron scheduler</text>
279
- <text xml:space="preserve" text-anchor="middle" x="820" y="-764.67" font-family="sans-Serif" font-size="11.00">hygiene on / curriculum opt&#45;in</text>
280
- </g>
281
- <!-- Cron&#45;&gt;Runtime -->
282
- <g id="edge22" class="edge">
283
- <title>Cron&#45;&gt;Runtime</title>
284
- <path fill="none" stroke="#94a3b8" d="M741.5,-758.21C677.8,-745.3 586.89,-726.88 513.76,-712.05"/>
285
- <polygon fill="#94a3b8" stroke="#94a3b8" points="514.62,-708.66 504.13,-710.1 513.23,-715.52 514.62,-708.66"/>
286
- <text xml:space="preserve" text-anchor="middle" x="668.34" y="-730.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">prompt jobs</text>
121
+ <!-- Execute&#45;&gt;Target -->
122
+ <g id="edge6" class="edge">
123
+ <title>Execute&#45;&gt;Target</title>
124
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M393.94,-345.1C415.21,-345.1 436.38,-345.1 456.38,-345.1"/>
125
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="394.05,-342.3 386.05,-345.1 394.05,-347.9 394.05,-342.3"/>
126
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="456.13,-347.9 464.13,-345.1 456.13,-342.3 456.13,-347.9"/>
127
+ <text xml:space="preserve" text-anchor="middle" x="425.13" y="-350.6" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">as required</text>
287
128
  </g>
288
- <!-- Cron&#45;&gt;Learn -->
289
- <g id="edge23" class="edge">
290
- <title>Cron&#45;&gt;Learn</title>
291
- <path fill="none" stroke="#94a3b8" d="M898.86,-756.65C932.87,-744.02 965,-722.72 965,-687.38 965,-687.38 965,-687.38 965,-197.12 965,-161.95 936.16,-141.03 901.97,-128.6"/>
292
- <polygon fill="#94a3b8" stroke="#94a3b8" points="903.24,-125.33 892.64,-125.49 901.02,-131.97 903.24,-125.33"/>
293
- <text xml:space="preserve" text-anchor="middle" x="1007" y="-435.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit maintenance</text>
129
+ <!-- State -->
130
+ <g id="node5" class="node">
131
+ <title>State</title>
132
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M371.6,-93.04C371.6,-93.04 28.4,-93.04 28.4,-93.04 22.4,-93.04 16.4,-87.04 16.4,-81.04 16.4,-81.04 16.4,-28 16.4,-28 16.4,-22 22.4,-16 28.4,-16 28.4,-16 371.6,-16 371.6,-16 377.6,-16 383.6,-22 383.6,-28 383.6,-28 383.6,-81.04 383.6,-81.04 383.6,-87.04 377.6,-93.04 371.6,-93.04"/>
133
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-71.07" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Sessions / Learning / Mistakes / Metrics / Policy</text>
134
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-57.57" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Default ~/.pwn stores; explicit artifacts may live elsewhere</text>
135
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-44.07" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Later PromptBuilder reads memory, skills, lessons and policy</text>
136
+ <text xml:space="preserve" text-anchor="middle" x="200" y="-30.57" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Cron hygiene is asynchronous; improvement is not automatic</text>
137
+ </g>
138
+ <!-- Accept&#45;&gt;State -->
139
+ <g id="edge4" class="edge">
140
+ <title>Accept&#45;&gt;State</title>
141
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M200,-153.29C200,-146.76 200,-139.9 200,-132.96"/>
142
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="202.8,-133.25 200,-125.25 197.2,-133.25 202.8,-133.25"/>
143
+ <text xml:space="preserve" text-anchor="middle" x="266.75" y="-133.79" font-family="sans-Serif" font-size="10.00" fill="#cbd5e1">record outcomes and evidence</text>
294
144
  </g>
295
145
  </g>
296
146
  </svg>