pwn 0.5.682 → 0.5.684
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.
- checksums.yaml +4 -4
- data/README.md +11 -10
- data/documentation/Agent-Tool-Registry.md +13 -9
- data/documentation/CLI-Drivers.md +27 -28
- data/documentation/Configuration.md +7 -5
- data/documentation/Contributing.md +2 -2
- data/documentation/Cron.md +11 -7
- data/documentation/Diagrams.md +2 -2
- data/documentation/General-PWN-Usage.md +1 -1
- data/documentation/Home.md +7 -6
- data/documentation/How-PWN-Works.md +9 -9
- data/documentation/Installation.md +1 -1
- data/documentation/Persistence.md +2 -1
- data/documentation/Plugins.md +3 -3
- data/documentation/Reinforcement-Learning.md +103 -101
- data/documentation/SAST.md +1 -1
- data/documentation/Session-Workflow.md +152 -0
- data/documentation/Sessions.md +2 -1
- data/documentation/Troubleshooting.md +2 -2
- data/documentation/What-is-PWN.md +3 -3
- data/documentation/diagrams/agent-tool-registry.svg +152 -152
- data/documentation/diagrams/cron-scheduling.svg +141 -121
- data/documentation/diagrams/dot/agent-tool-registry.dot +4 -4
- data/documentation/diagrams/dot/cron-scheduling.dot +10 -7
- data/documentation/diagrams/dot/driver-framework.dot +1 -1
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +4 -4
- data/documentation/diagrams/dot/persistence-filesystem.dot +1 -1
- data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
- data/documentation/diagrams/dot/task-summarizer.dot +18 -16
- data/documentation/diagrams/driver-framework.svg +1 -1
- data/documentation/diagrams/overall-pwn-architecture.svg +93 -93
- data/documentation/diagrams/persistence-filesystem.svg +4 -4
- data/documentation/diagrams/plugin-ecosystem.svg +101 -100
- data/documentation/diagrams/task-summarizer.svg +166 -156
- data/documentation/pwn-ai-Agent.md +9 -4
- data/lib/pwn/ai/agent/dispatch.rb +52 -1
- data/lib/pwn/ai/agent/loop.rb +198 -159
- data/lib/pwn/ai/agent/open_goal.rb +83 -0
- data/lib/pwn/ai/agent/policy.rb +2 -3
- data/lib/pwn/ai/agent/prompt_builder.rb +16 -13
- data/lib/pwn/ai/agent/registry.rb +6 -9
- data/lib/pwn/ai/agent/tools/sessions.rb +32 -0
- data/lib/pwn/ai/agent/tools/skills.rb +56 -0
- data/lib/pwn/ai/agent.rb +1 -0
- data/lib/pwn/ai/anthropic.rb +0 -1
- data/lib/pwn/ai/gemini.rb +0 -1
- data/lib/pwn/ai/grok.rb +0 -1
- data/lib/pwn/ai/ollama.rb +0 -1
- data/lib/pwn/ai/open_ai.rb +0 -1
- data/lib/pwn/ai/open_web_ui.rb +0 -1
- data/lib/pwn/config.rb +2 -2
- data/lib/pwn/cron.rb +18 -5
- data/lib/pwn/plugins/repl.rb +43 -1
- data/lib/pwn/plugins/tty_spinner.rb +109 -13
- data/lib/pwn/sessions.rb +82 -0
- data/lib/pwn/version.rb +1 -1
- data/spec/integration/persistence_roundtrip_spec.rb +2 -1
- data/spec/integration/prompt_builder_spec.rb +3 -3
- data/spec/integration/reinforced_feedback_loop_spec.rb +6 -11
- data/spec/lib/pwn/ai/agent/dispatch_spec.rb +38 -82
- data/spec/lib/pwn/ai/agent/loop_spec.rb +284 -11
- data/spec/lib/pwn/ai/agent/open_goal_spec.rb +37 -0
- data/spec/lib/pwn/ai/agent/prompt_builder_spec.rb +7 -3
- data/spec/lib/pwn/ai/agent/registry_spec.rb +16 -9
- data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +5 -0
- data/spec/lib/pwn/ai/agent/tools/skills_spec.rb +16 -0
- data/spec/lib/pwn/ai/red_team/test_case_engine_spec.rb +20 -0
- data/spec/lib/pwn/cron_spec.rb +13 -3
- data/spec/lib/pwn/plugins/repl_spec.rb +26 -0
- data/spec/lib/pwn/plugins/tty_spinner_spec.rb +44 -0
- data/spec/lib/pwn/sessions_spec.rb +29 -0
- data/spec/spec_helper.rb +6 -0
- data/third_party/pwn_rdoc.jsonl +28 -1
- metadata +4 -1
|
@@ -13,18 +13,18 @@
|
|
|
13
13
|
<text xml:space="preserve" text-anchor="start" x="770" y="-726.18" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Overall Architecture · lib/pwn/*</text>
|
|
14
14
|
<g id="clust1" class="cluster">
|
|
15
15
|
<title>cluster_actors</title>
|
|
16
|
-
<path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="
|
|
17
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
16
|
+
<path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M495,-614.62C495,-614.62 1120,-614.62 1120,-614.62 1126,-614.62 1132,-620.62 1132,-626.62 1132,-626.62 1132,-700.62 1132,-700.62 1132,-706.62 1126,-712.62 1120,-712.62 1120,-712.62 495,-712.62 495,-712.62 489,-712.62 483,-706.62 483,-700.62 483,-700.62 483,-626.62 483,-626.62 483,-620.62 489,-614.62 495,-614.62"/>
|
|
17
|
+
<text xml:space="preserve" text-anchor="middle" x="807.5" y="-687.73" font-family="sans-Serif" font-size="22.00" fill="#94a3b8">Actors</text>
|
|
18
18
|
</g>
|
|
19
19
|
<g id="clust3" class="cluster">
|
|
20
20
|
<title>cluster_entry</title>
|
|
21
|
-
<path fill="#0c4a6e" stroke="#0369a1" stroke-width="2" d="
|
|
22
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
21
|
+
<path fill="#0c4a6e" stroke="#0369a1" stroke-width="2" d="M359,-476.62C359,-476.62 881,-476.62 881,-476.62 887,-476.62 893,-482.62 893,-488.62 893,-488.62 893,-550.12 893,-550.12 893,-556.12 887,-562.12 881,-562.12 881,-562.12 359,-562.12 359,-562.12 353,-562.12 347,-556.12 347,-550.12 347,-550.12 347,-488.62 347,-488.62 347,-482.62 353,-476.62 359,-476.62"/>
|
|
22
|
+
<text xml:space="preserve" text-anchor="middle" x="620" y="-537.23" font-family="sans-Serif" font-size="22.00" fill="#7dd3fc">Entry Points  (bin/)</text>
|
|
23
23
|
</g>
|
|
24
24
|
<g id="clust5" class="cluster">
|
|
25
25
|
<title>cluster_agent</title>
|
|
26
|
-
<path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="
|
|
27
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
26
|
+
<path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M278,-299.12C278,-299.12 1024,-299.12 1024,-299.12 1030,-299.12 1036,-305.12 1036,-311.12 1036,-311.12 1036,-412.12 1036,-412.12 1036,-418.12 1030,-424.12 1024,-424.12 1024,-424.12 278,-424.12 278,-424.12 272,-424.12 266,-418.12 266,-412.12 266,-412.12 266,-311.12 266,-311.12 266,-305.12 272,-299.12 278,-299.12"/>
|
|
27
|
+
<text xml:space="preserve" text-anchor="middle" x="651" y="-399.23" font-family="sans-Serif" font-size="22.00" fill="#ddd6fe">PWN::AI::Agent</text>
|
|
28
28
|
</g>
|
|
29
29
|
<g id="clust7" class="cluster">
|
|
30
30
|
<title>cluster_caps</title>
|
|
@@ -39,129 +39,129 @@
|
|
|
39
39
|
<!-- User -->
|
|
40
40
|
<g id="node1" class="node">
|
|
41
41
|
<title>User</title>
|
|
42
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
43
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
44
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
42
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M609,-664.88C609,-664.88 503,-664.88 503,-664.88 497,-664.88 491,-658.88 491,-652.88 491,-652.88 491,-640.88 491,-640.88 491,-634.88 497,-628.88 503,-628.88 503,-628.88 609,-628.88 609,-628.88 615,-628.88 621,-634.88 621,-640.88 621,-640.88 621,-652.88 621,-652.88 621,-658.88 615,-664.88 609,-664.88"/>
|
|
43
|
+
<text xml:space="preserve" text-anchor="middle" x="556" y="-649.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤  Researcher</text>
|
|
44
|
+
<text xml:space="preserve" text-anchor="middle" x="556" y="-636.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Red Team · Bug Hunter</text>
|
|
45
45
|
</g>
|
|
46
46
|
<!-- REPL -->
|
|
47
47
|
<g id="node5" class="node">
|
|
48
48
|
<title>REPL</title>
|
|
49
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
50
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
51
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
49
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M459.25,-520.62C459.25,-520.62 366.75,-520.62 366.75,-520.62 360.75,-520.62 354.75,-514.62 354.75,-508.62 354.75,-508.62 354.75,-496.62 354.75,-496.62 354.75,-490.62 360.75,-484.62 366.75,-484.62 366.75,-484.62 459.25,-484.62 459.25,-484.62 465.25,-484.62 471.25,-490.62 471.25,-496.62 471.25,-496.62 471.25,-508.62 471.25,-508.62 471.25,-514.62 465.25,-520.62 459.25,-520.62"/>
|
|
50
|
+
<text xml:space="preserve" text-anchor="middle" x="413" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🐚  pwn REPL</text>
|
|
51
|
+
<text xml:space="preserve" text-anchor="middle" x="413" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Pry + PWN:: preload</text>
|
|
52
52
|
</g>
|
|
53
53
|
<!-- User->REPL -->
|
|
54
54
|
<g id="edge1" class="edge">
|
|
55
55
|
<title>User->REPL</title>
|
|
56
|
-
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="
|
|
57
|
-
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="
|
|
56
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M538.47,-628.43C513.16,-603.26 466.31,-556.65 437.57,-528.07"/>
|
|
57
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="439.72,-526.25 432.07,-522.6 435.77,-530.23 439.72,-526.25"/>
|
|
58
58
|
</g>
|
|
59
59
|
<!-- PwnAI -->
|
|
60
60
|
<g id="node6" class="node">
|
|
61
61
|
<title>PwnAI</title>
|
|
62
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
63
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
64
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
62
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M612.75,-520.62C612.75,-520.62 523.25,-520.62 523.25,-520.62 517.25,-520.62 511.25,-514.62 511.25,-508.62 511.25,-508.62 511.25,-496.62 511.25,-496.62 511.25,-490.62 517.25,-484.62 523.25,-484.62 523.25,-484.62 612.75,-484.62 612.75,-484.62 618.75,-484.62 624.75,-490.62 624.75,-496.62 624.75,-496.62 624.75,-508.62 624.75,-508.62 624.75,-514.62 618.75,-520.62 612.75,-520.62"/>
|
|
63
|
+
<text xml:space="preserve" text-anchor="middle" x="568" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">✨  pwn-ai</text>
|
|
64
|
+
<text xml:space="preserve" text-anchor="middle" x="568" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Agent TUI · pwn --ai</text>
|
|
65
65
|
</g>
|
|
66
66
|
<!-- User->PwnAI -->
|
|
67
67
|
<g id="edge2" class="edge">
|
|
68
68
|
<title>User->PwnAI</title>
|
|
69
|
-
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="
|
|
70
|
-
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="
|
|
69
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M557.47,-628.43C559.52,-604.12 563.26,-559.79 565.69,-531.03"/>
|
|
70
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="568.47,-531.38 566.35,-523.17 562.89,-530.91 568.47,-531.38"/>
|
|
71
71
|
</g>
|
|
72
72
|
<!-- CI -->
|
|
73
73
|
<g id="node2" class="node">
|
|
74
74
|
<title>CI</title>
|
|
75
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
76
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
77
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
75
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M755,-664.88C755,-664.88 673,-664.88 673,-664.88 667,-664.88 661,-658.88 661,-652.88 661,-652.88 661,-640.88 661,-640.88 661,-634.88 667,-628.88 673,-628.88 673,-628.88 755,-628.88 755,-628.88 761,-628.88 767,-634.88 767,-640.88 767,-640.88 767,-652.88 767,-652.88 767,-658.88 761,-664.88 755,-664.88"/>
|
|
76
|
+
<text xml:space="preserve" text-anchor="middle" x="714" y="-649.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⚙️  CI / CD</text>
|
|
77
|
+
<text xml:space="preserve" text-anchor="middle" x="714" y="-636.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Headless pipelines</text>
|
|
78
78
|
</g>
|
|
79
79
|
<!-- CLI -->
|
|
80
80
|
<g id="node7" class="node">
|
|
81
81
|
<title>CLI</title>
|
|
82
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
83
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
84
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
82
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M741,-520.62C741,-520.62 677,-520.62 677,-520.62 671,-520.62 665,-514.62 665,-508.62 665,-508.62 665,-496.62 665,-496.62 665,-490.62 671,-484.62 677,-484.62 677,-484.62 741,-484.62 741,-484.62 747,-484.62 753,-490.62 753,-496.62 753,-496.62 753,-508.62 753,-508.62 753,-514.62 747,-520.62 741,-520.62"/>
|
|
83
|
+
<text xml:space="preserve" text-anchor="middle" x="709" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">📜  bin/pwn_*</text>
|
|
84
|
+
<text xml:space="preserve" text-anchor="middle" x="709" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">54 executables</text>
|
|
85
85
|
</g>
|
|
86
86
|
<!-- CI->CLI -->
|
|
87
87
|
<g id="edge3" class="edge">
|
|
88
88
|
<title>CI->CLI</title>
|
|
89
|
-
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="
|
|
90
|
-
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="
|
|
89
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M713.39,-628.43C712.53,-604.12 710.97,-559.79 709.96,-531.03"/>
|
|
90
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="712.77,-531.07 709.69,-523.18 707.17,-531.27 712.77,-531.07"/>
|
|
91
91
|
</g>
|
|
92
92
|
<!-- Cronb -->
|
|
93
93
|
<g id="node8" class="node">
|
|
94
94
|
<title>Cronb</title>
|
|
95
|
-
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="
|
|
96
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
97
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
95
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M872.88,-520.62C872.88,-520.62 805.12,-520.62 805.12,-520.62 799.12,-520.62 793.12,-514.62 793.12,-508.62 793.12,-508.62 793.12,-496.62 793.12,-496.62 793.12,-490.62 799.12,-484.62 805.12,-484.62 805.12,-484.62 872.88,-484.62 872.88,-484.62 878.88,-484.62 884.88,-490.62 884.88,-496.62 884.88,-496.62 884.88,-508.62 884.88,-508.62 884.88,-514.62 878.88,-520.62 872.88,-520.62"/>
|
|
96
|
+
<text xml:space="preserve" text-anchor="middle" x="839" y="-505.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">⏱  PWN::Cron</text>
|
|
97
|
+
<text xml:space="preserve" text-anchor="middle" x="839" y="-492.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Scheduled jobs</text>
|
|
98
98
|
</g>
|
|
99
99
|
<!-- CI->Cronb -->
|
|
100
100
|
<g id="edge4" class="edge">
|
|
101
101
|
<title>CI->Cronb</title>
|
|
102
|
-
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="
|
|
103
|
-
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="
|
|
104
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
102
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M729.33,-628.43C751.35,-603.37 792.06,-557.05 817.2,-528.43"/>
|
|
103
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="819.07,-530.55 822.25,-522.69 814.86,-526.85 819.07,-530.55"/>
|
|
104
|
+
<text xml:space="preserve" text-anchor="middle" x="795.62" y="-572.08" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">crontab</text>
|
|
105
105
|
</g>
|
|
106
106
|
<!-- LLM -->
|
|
107
107
|
<g id="node3" class="node">
|
|
108
108
|
<title>LLM</title>
|
|
109
|
-
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="
|
|
110
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
111
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
112
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
109
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M959.25,-671.12C959.25,-671.12 818.75,-671.12 818.75,-671.12 812.75,-671.12 806.75,-665.12 806.75,-659.12 806.75,-659.12 806.75,-634.62 806.75,-634.62 806.75,-628.62 812.75,-622.62 818.75,-622.62 818.75,-622.62 959.25,-622.62 959.25,-622.62 965.25,-622.62 971.25,-628.62 971.25,-634.62 971.25,-634.62 971.25,-659.12 971.25,-659.12 971.25,-665.12 965.25,-671.12 959.25,-671.12"/>
|
|
110
|
+
<text xml:space="preserve" text-anchor="middle" x="889" y="-656.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖  LLM Providers</text>
|
|
111
|
+
<text xml:space="preserve" text-anchor="middle" x="889" y="-643.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">OpenAI · Anthropic · Grok</text>
|
|
112
|
+
<text xml:space="preserve" text-anchor="middle" x="889" y="-629.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Gemini · Ollama · Open WebUI</text>
|
|
113
113
|
</g>
|
|
114
114
|
<!-- Target -->
|
|
115
115
|
<g id="node4" class="node">
|
|
116
116
|
<title>Target</title>
|
|
117
|
-
<path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="
|
|
118
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
119
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
120
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
117
|
+
<path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M1112.38,-671.12C1112.38,-671.12 1023.62,-671.12 1023.62,-671.12 1017.62,-671.12 1011.62,-665.12 1011.62,-659.12 1011.62,-659.12 1011.62,-634.62 1011.62,-634.62 1011.62,-628.62 1017.62,-622.62 1023.62,-622.62 1023.62,-622.62 1112.38,-622.62 1112.38,-622.62 1118.38,-622.62 1124.38,-628.62 1124.38,-634.62 1124.38,-634.62 1124.38,-659.12 1124.38,-659.12 1124.38,-665.12 1118.38,-671.12 1112.38,-671.12"/>
|
|
118
|
+
<text xml:space="preserve" text-anchor="middle" x="1068" y="-656.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🎯  Attack Surface</text>
|
|
119
|
+
<text xml:space="preserve" text-anchor="middle" x="1068" y="-643.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Hosts · Web · Cloud</text>
|
|
120
|
+
<text xml:space="preserve" text-anchor="middle" x="1068" y="-629.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Radio · Hardware</text>
|
|
121
121
|
</g>
|
|
122
122
|
<!-- Loop -->
|
|
123
123
|
<g id="node9" class="node">
|
|
124
124
|
<title>Loop</title>
|
|
125
|
-
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="
|
|
126
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
127
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
128
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
129
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
130
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
125
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M446,-382.62C446,-382.62 286,-382.62 286,-382.62 280,-382.62 274,-376.62 274,-370.62 274,-370.62 274,-319.12 274,-319.12 274,-313.12 280,-307.12 286,-307.12 286,-307.12 446,-307.12 446,-307.12 452,-307.12 458,-313.12 458,-319.12 458,-319.12 458,-370.62 458,-370.62 458,-376.62 452,-382.62 446,-382.62"/>
|
|
126
|
+
<text xml:space="preserve" text-anchor="middle" x="366" y="-368.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Loop</text>
|
|
127
|
+
<text xml:space="preserve" text-anchor="middle" x="366" y="-354.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TaskSummarizer briefs</text>
|
|
128
|
+
<text xml:space="preserve" text-anchor="middle" x="366" y="-341.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">plan → dispatch → observe</text>
|
|
129
|
+
<text xml:space="preserve" text-anchor="middle" x="366" y="-327.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">max_iters 777 (scars do not shrink)</text>
|
|
130
|
+
<text xml:space="preserve" text-anchor="middle" x="366" y="-314.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">last-iter tools only if done</text>
|
|
131
131
|
</g>
|
|
132
132
|
<!-- REPL->Loop -->
|
|
133
133
|
<g id="edge5" class="edge">
|
|
134
134
|
<title>REPL->Loop</title>
|
|
135
|
-
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="
|
|
136
|
-
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="
|
|
135
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M407.7,-484.06C401.04,-462 389.36,-423.3 380.06,-392.45"/>
|
|
136
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="382.81,-391.89 377.82,-385.04 377.45,-393.51 382.81,-391.89"/>
|
|
137
137
|
</g>
|
|
138
138
|
<!-- PwnAI->Loop -->
|
|
139
139
|
<g id="edge6" class="edge">
|
|
140
140
|
<title>PwnAI->Loop</title>
|
|
141
|
-
<path fill="none" stroke="#a78bfa" stroke-width="2" d="
|
|
142
|
-
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="
|
|
143
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
141
|
+
<path fill="none" stroke="#a78bfa" stroke-width="2" d="M543.77,-484.01C527.88,-472.39 506.71,-456.76 488.25,-442.62 466.05,-425.64 441.87,-406.61 420.92,-389.96"/>
|
|
142
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="422.82,-387.89 414.82,-385.1 419.34,-392.28 422.82,-387.89"/>
|
|
143
|
+
<text xml:space="preserve" text-anchor="middle" x="523.12" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">natural language</text>
|
|
144
144
|
</g>
|
|
145
145
|
<!-- Registry -->
|
|
146
146
|
<g id="node10" class="node">
|
|
147
147
|
<title>Registry</title>
|
|
148
|
-
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="
|
|
149
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
150
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
151
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
148
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M625.88,-369.12C625.88,-369.12 510.12,-369.12 510.12,-369.12 504.12,-369.12 498.12,-363.12 498.12,-357.12 498.12,-357.12 498.12,-332.62 498.12,-332.62 498.12,-326.62 504.12,-320.62 510.12,-320.62 510.12,-320.62 625.88,-320.62 625.88,-320.62 631.88,-320.62 637.88,-326.62 637.88,-332.62 637.88,-332.62 637.88,-357.12 637.88,-357.12 637.88,-363.12 631.88,-369.12 625.88,-369.12"/>
|
|
149
|
+
<text xml:space="preserve" text-anchor="middle" x="568" y="-354.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
|
|
150
|
+
<text xml:space="preserve" text-anchor="middle" x="568" y="-341.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">13 toolsets · 87 tools</text>
|
|
151
|
+
<text xml:space="preserve" text-anchor="middle" x="568" y="-327.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool_router (CORE+topK)</text>
|
|
152
152
|
</g>
|
|
153
153
|
<!-- PwnAI->Registry -->
|
|
154
154
|
<g id="edge7" class="edge">
|
|
155
155
|
<title>PwnAI->Registry</title>
|
|
156
|
-
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="
|
|
157
|
-
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="
|
|
156
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M568,-484.06C568,-458.79 568,-411.69 568,-379.58"/>
|
|
157
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="570.8,-379.69 568,-371.69 565.2,-379.69 570.8,-379.69"/>
|
|
158
158
|
</g>
|
|
159
159
|
<!-- Swarm -->
|
|
160
160
|
<g id="node11" class="node">
|
|
161
161
|
<title>Swarm</title>
|
|
162
|
-
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="
|
|
163
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
164
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
162
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M794.25,-362.88C794.25,-362.88 689.75,-362.88 689.75,-362.88 683.75,-362.88 677.75,-356.88 677.75,-350.88 677.75,-350.88 677.75,-338.88 677.75,-338.88 677.75,-332.88 683.75,-326.88 689.75,-326.88 689.75,-326.88 794.25,-326.88 794.25,-326.88 800.25,-326.88 806.25,-332.88 806.25,-338.88 806.25,-338.88 806.25,-350.88 806.25,-350.88 806.25,-356.88 800.25,-362.88 794.25,-362.88"/>
|
|
163
|
+
<text xml:space="preserve" text-anchor="middle" x="742" y="-347.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Swarm</text>
|
|
164
|
+
<text xml:space="preserve" text-anchor="middle" x="742" y="-334.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">personas · debate · bus</text>
|
|
165
165
|
</g>
|
|
166
166
|
<!-- CLI->Swarm -->
|
|
167
167
|
<!-- Plugins -->
|
|
@@ -169,37 +169,37 @@
|
|
|
169
169
|
<title>Plugins</title>
|
|
170
170
|
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M277.75,-198.88C277.75,-198.88 230.25,-198.88 230.25,-198.88 224.25,-198.88 218.25,-192.88 218.25,-186.88 218.25,-186.88 218.25,-174.88 218.25,-174.88 218.25,-168.88 224.25,-162.88 230.25,-162.88 230.25,-162.88 277.75,-162.88 277.75,-162.88 283.75,-162.88 289.75,-168.88 289.75,-174.88 289.75,-174.88 289.75,-186.88 289.75,-186.88 289.75,-192.88 283.75,-198.88 277.75,-198.88"/>
|
|
171
171
|
<text xml:space="preserve" text-anchor="middle" x="254" y="-183.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Plugins</text>
|
|
172
|
-
<text xml:space="preserve" text-anchor="middle" x="254" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">
|
|
172
|
+
<text xml:space="preserve" text-anchor="middle" x="254" y="-170.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">67 modules</text>
|
|
173
173
|
</g>
|
|
174
174
|
<!-- CLI->Plugins -->
|
|
175
175
|
<g id="edge18" class="edge">
|
|
176
176
|
<title>CLI->Plugins</title>
|
|
177
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
177
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M750.98,-484.02C758.25,-481.32 765.79,-478.73 773,-476.62 870.43,-448.16 897.12,-450.19 997,-432.12 1007.86,-430.16 1038.85,-432.53 1046,-424.12 1081.98,-381.79 1083.86,-339.78 1046,-299.12 1018.06,-269.13 346.65,-264.99 310,-246.62 292.78,-238 278.65,-221.52 268.89,-207.34"/>
|
|
178
178
|
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="271.45,-206.15 264.73,-200.99 266.77,-209.21 271.45,-206.15"/>
|
|
179
179
|
</g>
|
|
180
180
|
<!-- Prompt -->
|
|
181
181
|
<g id="node12" class="node">
|
|
182
182
|
<title>Prompt</title>
|
|
183
|
-
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="
|
|
184
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
185
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
186
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
187
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
183
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1015.88,-375.88C1015.88,-375.88 858.12,-375.88 858.12,-375.88 852.12,-375.88 846.12,-369.88 846.12,-363.88 846.12,-363.88 846.12,-325.88 846.12,-325.88 846.12,-319.88 852.12,-313.88 858.12,-313.88 858.12,-313.88 1015.88,-313.88 1015.88,-313.88 1021.88,-313.88 1027.88,-319.88 1027.88,-325.88 1027.88,-325.88 1027.88,-363.88 1027.88,-363.88 1027.88,-369.88 1021.88,-375.88 1015.88,-375.88"/>
|
|
184
|
+
<text xml:space="preserve" text-anchor="middle" x="937" y="-361.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
|
|
185
|
+
<text xml:space="preserve" text-anchor="middle" x="937" y="-347.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">engine-budgeted blocks</text>
|
|
186
|
+
<text xml:space="preserve" text-anchor="middle" x="937" y="-334.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MEMORY · SKILLS · POLICY</text>
|
|
187
|
+
<text xml:space="preserve" text-anchor="middle" x="937" y="-320.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">MemoryIndex → relevance-ranked</text>
|
|
188
188
|
</g>
|
|
189
189
|
<!-- Cronb->Prompt -->
|
|
190
190
|
<!-- Loop->LLM -->
|
|
191
191
|
<g id="edge29" class="edge">
|
|
192
192
|
<title>Loop->LLM</title>
|
|
193
|
-
<path fill="none" stroke="#c4b5fd" stroke-width="2" d="
|
|
194
|
-
<polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="2" points="
|
|
195
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
193
|
+
<path fill="none" stroke="#c4b5fd" stroke-width="2" d="M408.22,-383.26C428.04,-398.63 452.81,-414.95 478,-424.12 515.73,-437.87 528.09,-427.7 568,-432.12 642.64,-440.4 853.52,-420.13 903,-476.62 935.41,-513.62 919.64,-574.27 904.71,-612.03"/>
|
|
194
|
+
<polygon fill="#c4b5fd" stroke="#c4b5fd" stroke-width="2" points="902.2,-610.78 901.73,-619.24 907.37,-612.93 902.2,-610.78"/>
|
|
195
|
+
<text xml:space="preserve" text-anchor="middle" x="946.73" y="-499.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool-use API</text>
|
|
196
196
|
</g>
|
|
197
197
|
<!-- Loop->Plugins -->
|
|
198
198
|
<g id="edge10" class="edge">
|
|
199
199
|
<title>Loop->Plugins</title>
|
|
200
|
-
<path fill="none" stroke="#34d399" stroke-width="2" d="
|
|
201
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="
|
|
202
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
200
|
+
<path fill="none" stroke="#34d399" stroke-width="2" d="M340.06,-306.65C330.94,-293.53 320.63,-278.68 311.25,-265.12 298.16,-246.19 283.44,-224.79 272.21,-208.43"/>
|
|
201
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="274.58,-206.94 267.75,-201.93 269.97,-210.11 274.58,-206.94"/>
|
|
202
|
+
<text xml:space="preserve" text-anchor="middle" x="331.12" y="-256.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">pwn_eval</text>
|
|
203
203
|
</g>
|
|
204
204
|
<!-- SAST -->
|
|
205
205
|
<g id="node14" class="node">
|
|
@@ -211,8 +211,8 @@
|
|
|
211
211
|
<!-- Loop->SAST -->
|
|
212
212
|
<g id="edge11" class="edge">
|
|
213
213
|
<title>Loop->SAST</title>
|
|
214
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
215
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="
|
|
214
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M363.94,-306.71C362.29,-277.02 360.01,-236.09 358.52,-209.31"/>
|
|
215
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="361.33,-209.25 358.09,-201.42 355.73,-209.57 361.33,-209.25"/>
|
|
216
216
|
</g>
|
|
217
217
|
<!-- WWW -->
|
|
218
218
|
<g id="node15" class="node">
|
|
@@ -224,8 +224,8 @@
|
|
|
224
224
|
<!-- Registry->WWW -->
|
|
225
225
|
<g id="edge12" class="edge">
|
|
226
226
|
<title>Registry->WWW</title>
|
|
227
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
228
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="484.
|
|
227
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M552.95,-319.97C534.01,-289.88 501.6,-238.41 482.15,-207.52"/>
|
|
228
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="484.71,-206.33 478.08,-201.05 479.97,-209.32 484.71,-206.33"/>
|
|
229
229
|
</g>
|
|
230
230
|
<!-- AWS -->
|
|
231
231
|
<g id="node16" class="node">
|
|
@@ -237,8 +237,8 @@
|
|
|
237
237
|
<!-- Registry->AWS -->
|
|
238
238
|
<g id="edge13" class="edge">
|
|
239
239
|
<title>Registry->AWS</title>
|
|
240
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
241
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="582.
|
|
240
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M570.07,-319.97C572.62,-290.4 576.96,-240.16 579.65,-209.12"/>
|
|
241
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="582.42,-209.56 580.32,-201.35 576.84,-209.08 582.42,-209.56"/>
|
|
242
242
|
</g>
|
|
243
243
|
<!-- SDR -->
|
|
244
244
|
<g id="node17" class="node">
|
|
@@ -251,8 +251,8 @@
|
|
|
251
251
|
<!-- Swarm->SDR -->
|
|
252
252
|
<g id="edge14" class="edge">
|
|
253
253
|
<title>Swarm->SDR</title>
|
|
254
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
255
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="
|
|
254
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M740.8,-326.23C739.01,-299.77 735.58,-249.34 733.29,-215.65"/>
|
|
255
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="736.09,-215.54 732.76,-207.74 730.51,-215.92 736.09,-215.54"/>
|
|
256
256
|
</g>
|
|
257
257
|
<!-- Chain -->
|
|
258
258
|
<g id="node18" class="node">
|
|
@@ -264,8 +264,8 @@
|
|
|
264
264
|
<!-- Swarm->Chain -->
|
|
265
265
|
<g id="edge15" class="edge">
|
|
266
266
|
<title>Swarm->Chain</title>
|
|
267
|
-
<path fill="none" stroke="#34d399" stroke-width="1.3" d="
|
|
268
|
-
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="860.
|
|
267
|
+
<path fill="none" stroke="#34d399" stroke-width="1.3" d="M757.01,-326.32C773.64,-306.85 801.26,-274.51 825,-246.62 836.14,-233.54 848.53,-218.96 858.72,-206.95"/>
|
|
268
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="860.76,-208.88 863.8,-200.97 856.49,-205.26 860.76,-208.88"/>
|
|
269
269
|
</g>
|
|
270
270
|
<!-- Bounty -->
|
|
271
271
|
<g id="node19" class="node">
|
|
@@ -293,16 +293,16 @@
|
|
|
293
293
|
<!-- Prompt->Memory -->
|
|
294
294
|
<g id="edge31" class="edge">
|
|
295
295
|
<title>Prompt->Memory</title>
|
|
296
|
-
<path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="
|
|
297
|
-
<polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="
|
|
298
|
-
<text xml:space="preserve" text-anchor="middle" x="1214.
|
|
296
|
+
<path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1038.12,-331.03C1090.67,-318.66 1150.55,-294.35 1183,-246.62 1207.49,-210.61 1213.17,-180.04 1183,-148.62 1141.83,-105.76 167.89,-130.69 114,-105.62 92.66,-95.7 75.53,-74.13 65.34,-58.65"/>
|
|
297
|
+
<polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1037.51,-328.3 1030.32,-332.78 1038.73,-333.76 1037.51,-328.3"/>
|
|
298
|
+
<text xml:space="preserve" text-anchor="middle" x="1214.43" y="-177.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">inject</text>
|
|
299
299
|
</g>
|
|
300
300
|
<!-- Plugins->Target -->
|
|
301
301
|
<g id="edge30" class="edge">
|
|
302
302
|
<title>Plugins->Target</title>
|
|
303
|
-
<path fill="none" stroke="#fb7185" stroke-width="2" d="M263.58,-199.
|
|
304
|
-
<polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="
|
|
305
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
303
|
+
<path fill="none" stroke="#fb7185" stroke-width="2" d="M263.58,-199.49C273.09,-215.01 289.24,-236.63 310,-246.62 330.34,-256.41 490.47,-253.31 513,-254.62 577.3,-258.37 1047.24,-251.86 1091,-299.12 1171.51,-386.08 1114.94,-543.72 1084.24,-612.4"/>
|
|
304
|
+
<polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1081.78,-611.06 1081,-619.5 1086.87,-613.38 1081.78,-611.06"/>
|
|
305
|
+
<text xml:space="preserve" text-anchor="middle" x="1143.95" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">attack</text>
|
|
306
306
|
</g>
|
|
307
307
|
<!-- Plugins->Memory -->
|
|
308
308
|
<g id="edge19" class="edge">
|
|
@@ -400,9 +400,9 @@
|
|
|
400
400
|
<!-- Reports->User -->
|
|
401
401
|
<g id="edge32" class="edge">
|
|
402
402
|
<title>Reports->User</title>
|
|
403
|
-
<path fill="none" stroke="#38bdf8" stroke-width="2" d="
|
|
404
|
-
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="
|
|
405
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
403
|
+
<path fill="none" stroke="#38bdf8" stroke-width="2" d="M1134.52,-199.46C1143.96,-213.15 1158.13,-232.17 1173,-246.62 1177.34,-250.84 1180.28,-249.86 1184,-254.62 1230.64,-314.32 1238.74,-357.87 1202,-424.12 1074.31,-654.41 895.95,-548.78 641,-614.62 630.5,-617.34 619.48,-620.86 608.99,-624.55"/>
|
|
404
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="608.12,-621.89 601.56,-627.25 610.03,-627.15 608.12,-621.89"/>
|
|
405
|
+
<text xml:space="preserve" text-anchor="middle" x="1212.2" y="-434.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings</text>
|
|
406
406
|
</g>
|
|
407
407
|
<!-- CronF -->
|
|
408
408
|
<g id="node30" class="node">
|
|
@@ -225,11 +225,11 @@
|
|
|
225
225
|
<!-- crn -->
|
|
226
226
|
<g id="node16" class="node">
|
|
227
227
|
<title>crn</title>
|
|
228
|
-
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="
|
|
229
|
-
<path fill="none" stroke="#334155" stroke-width="1.3" d="
|
|
228
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M416.88,-450.75C416.88,-453.78 379,-456.25 332.38,-456.25 285.75,-456.25 247.88,-453.78 247.88,-450.75 247.88,-450.75 247.88,-401.25 247.88,-401.25 247.88,-398.22 285.75,-395.75 332.38,-395.75 379,-395.75 416.88,-398.22 416.88,-401.25 416.88,-401.25 416.88,-450.75 416.88,-450.75"/>
|
|
229
|
+
<path fill="none" stroke="#334155" stroke-width="1.3" d="M416.88,-450.75C416.88,-447.72 379,-445.25 332.38,-445.25 285.75,-445.25 247.88,-447.72 247.88,-450.75"/>
|
|
230
230
|
<text xml:space="preserve" text-anchor="middle" x="332.38" y="-434.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron/jobs.yml + log/</text>
|
|
231
|
-
<text xml:space="preserve" text-anchor="middle" x="332.38" y="-422.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">
|
|
232
|
-
<text xml:space="preserve" text-anchor="middle" x="332.38" y="-410.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">
|
|
231
|
+
<text xml:space="preserve" text-anchor="middle" x="332.38" y="-422.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">hygiene ON: consolidate + lean</text>
|
|
232
|
+
<text xml:space="preserve" text-anchor="middle" x="332.38" y="-410.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum practice/judge/train OFF</text>
|
|
233
233
|
</g>
|
|
234
234
|
<!-- Root->crn -->
|
|
235
235
|
<g id="edge15" class="edge">
|