kodelyth-ecc 1.4.0 → 1.5.0

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.
@@ -1,94 +1,118 @@
1
1
  <svg width="1200" height="675" viewBox="0 0 1200 675" xmlns="http://www.w3.org/2000/svg" font-family="'Segoe UI', system-ui, -apple-system, sans-serif">
2
2
  <defs>
3
3
  <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#0a0a0f"/>
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
5
  <stop offset="100%" style="stop-color:#0d1117"/>
6
6
  </linearGradient>
7
- <linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="0%">
7
+ <linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
8
8
  <stop offset="0%" style="stop-color:#7c3aed"/>
9
9
  <stop offset="100%" style="stop-color:#2563eb"/>
10
10
  </linearGradient>
11
+ <linearGradient id="mem" x1="0%" y1="0%" x2="100%" y2="0%">
12
+ <stop offset="0%" style="stop-color:#059669"/>
13
+ <stop offset="100%" style="stop-color:#0891b2"/>
14
+ </linearGradient>
15
+ <linearGradient id="card" x1="0%" y1="0%" x2="0%" y2="100%">
16
+ <stop offset="0%" style="stop-color:#161b22"/>
17
+ <stop offset="100%" style="stop-color:#0d1117"/>
18
+ </linearGradient>
11
19
  </defs>
12
20
 
13
21
  <rect width="1200" height="675" fill="url(#bg)"/>
14
- <rect x="0" y="0" width="1200" height="4" fill="url(#purple)"/>
22
+ <rect x="0" y="0" width="1200" height="5" fill="url(#accent)"/>
15
23
 
16
24
  <!-- Header -->
17
- <text x="60" y="60" font-size="13" font-weight="700" letter-spacing="4" fill="#7c3aed">6 KODELYTH-EXCLUSIVE AGENTS</text>
18
- <text x="60" y="105" font-size="42" font-weight="900" fill="#ffffff" letter-spacing="-1">Your new AI engineering team.</text>
19
- <text x="60" y="135" font-size="16" fill="#475569">Each one a decade-experienced specialist. Each one free.</text>
20
-
21
- <rect x="60" y="155" width="1080" height="1" fill="#1e293b"/>
22
-
23
- <!-- Row 1 — 3 cards -->
24
- <!-- kodelyth-advisor -->
25
- <rect x="60" y="170" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
26
- <rect x="60" y="170" width="4" height="150" rx="2" fill="#7c3aed"/>
27
- <text x="80" y="205" font-size="15" font-weight="700" fill="#a78bfa">kodelyth-advisor</text>
28
- <text x="80" y="227" font-size="12" fill="#334155">The Master Guide</text>
29
- <text x="80" y="257" font-size="13" fill="#94a3b8">Reads your situation.</text>
30
- <text x="80" y="277" font-size="13" fill="#94a3b8">Tells you exactly what to do.</text>
31
- <text x="80" y="297" font-size="13" fill="#94a3b8">No hand-holding. No noise.</text>
32
- <text x="80" y="314" font-size="11" fill="#1e3a5f">Guidance · Clarity · Direction</text>
25
+ <text x="80" y="72" font-size="48" font-weight="900" letter-spacing="-2" fill="#ffffff">61 agents. One install.</text>
26
+ <text x="80" y="110" font-size="20" fill="#6e7681">Intent routing picks the right expert from your first message — no agent names needed.</text>
33
27
 
28
+ <!-- Agent grid 3x3 -->
29
+ <!-- Row 1 -->
34
30
  <!-- debug-detective -->
35
- <rect x="430" y="170" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
36
- <rect x="430" y="170" width="4" height="150" rx="2" fill="#dc2626"/>
37
- <text x="450" y="205" font-size="15" font-weight="700" fill="#f87171">debug-detective</text>
38
- <text x="450" y="227" font-size="12" fill="#334155">The Root Cause Hunter</text>
39
- <text x="450" y="257" font-size="13" fill="#94a3b8">Never guesses. Traces every</text>
40
- <text x="450" y="277" font-size="13" fill="#94a3b8">bug to its exact origin.</text>
41
- <text x="450" y="297" font-size="13" fill="#94a3b8">Formal hypothesis protocol.</text>
42
- <text x="450" y="314" font-size="11" fill="#3b1212">Debugging · Evidence · Root Cause</text>
31
+ <rect x="80" y="134" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
32
+ <rect x="80" y="134" width="4" height="120" rx="2" fill="#dc2626"/>
33
+ <text x="100" y="162" font-size="15" font-weight="700" fill="#f87171">debug-detective</text>
34
+ <text x="100" y="183" font-size="13" fill="#6e7681">Root cause analyst. Never patches</text>
35
+ <text x="100" y="200" font-size="13" fill="#6e7681">symptoms. Traces every bug to</text>
36
+ <text x="100" y="217" font-size="13" fill="#6e7681">its exact origin.</text>
37
+ <text x="100" y="245" font-size="11" fill="#30363d">Debugging · Evidence</text>
43
38
 
44
- <!-- ux-reviewer -->
45
- <rect x="800" y="170" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
46
- <rect x="800" y="170" width="4" height="150" rx="2" fill="#0891b2"/>
47
- <text x="820" y="205" font-size="15" font-weight="700" fill="#67e8f9">ux-reviewer</text>
48
- <text x="820" y="227" font-size="12" fill="#334155">The Interface Guardian</text>
49
- <text x="820" y="257" font-size="13" fill="#94a3b8">Reviews UX and accessibility.</text>
50
- <text x="820" y="277" font-size="13" fill="#94a3b8">WCAG 2.1 AA. Never touches</text>
51
- <text x="820" y="297" font-size="13" fill="#94a3b8">your visual design. Ever.</text>
52
- <text x="820" y="314" font-size="11" fill="#0c2a33">UX · Accessibility · Behavior</text>
39
+ <!-- security-reviewer -->
40
+ <rect x="420" y="134" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
41
+ <rect x="420" y="134" width="4" height="120" rx="2" fill="#f59e0b"/>
42
+ <text x="440" y="162" font-size="15" font-weight="700" fill="#fcd34d">security-reviewer</text>
43
+ <text x="440" y="183" font-size="13" fill="#6e7681">OWASP Top 10. Flags secrets,</text>
44
+ <text x="440" y="200" font-size="13" fill="#6e7681">injection, SSRF, unsafe crypto</text>
45
+ <text x="440" y="217" font-size="13" fill="#6e7681">before you commit.</text>
46
+ <text x="440" y="245" font-size="11" fill="#30363d">Security · OWASP</text>
53
47
 
54
- <!-- Row 2 — 3 cards -->
55
- <!-- api-guardian -->
56
- <rect x="60" y="338" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
57
- <rect x="60" y="338" width="4" height="150" rx="2" fill="#f59e0b"/>
58
- <text x="80" y="373" font-size="15" font-weight="700" fill="#fcd34d">api-guardian</text>
59
- <text x="80" y="395" font-size="12" fill="#334155">The Contract Protector</text>
60
- <text x="80" y="425" font-size="13" fill="#94a3b8">Catches BREAKING changes</text>
61
- <text x="80" y="445" font-size="13" fill="#94a3b8">before they reach production.</text>
62
- <text x="80" y="465" font-size="13" fill="#94a3b8">BREAKING / SAFE / WARN.</text>
63
- <text x="80" y="482" font-size="11" fill="#2d1f00">API · Versioning · Contracts</text>
48
+ <!-- kodelyth-memory (NEW) -->
49
+ <rect x="760" y="134" width="360" height="120" rx="8" fill="#0d2b1d" stroke="#059669" stroke-opacity="0.4" stroke-width="1"/>
50
+ <rect x="760" y="134" width="4" height="120" rx="2" fill="url(#mem)"/>
51
+ <text x="780" y="162" font-size="15" font-weight="700" fill="#10b981">kodelyth-memory</text>
52
+ <rect x="926" y="140" width="46" height="18" rx="9" fill="#059669" fill-opacity="0.3" stroke="#059669" stroke-opacity="0.5" stroke-width="1"/>
53
+ <text x="949" y="153" font-size="10" fill="#10b981" text-anchor="middle" font-weight="700">NEW</text>
54
+ <text x="780" y="183" font-size="13" fill="#6e7681">Captures past solutions locally.</text>
55
+ <text x="780" y="200" font-size="13" fill="#6e7681">BM25 auto-recall on every prompt.</text>
56
+ <text x="780" y="217" font-size="13" fill="#6e7681">Zero cloud. Zero telemetry.</text>
57
+ <text x="780" y="245" font-size="11" fill="#30363d">Memory · BM25 · Auto-Recall</text>
64
58
 
59
+ <!-- Row 2 -->
65
60
  <!-- pair-programmer -->
66
- <rect x="430" y="338" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
67
- <rect x="430" y="338" width="4" height="150" rx="2" fill="#10b981"/>
68
- <text x="450" y="373" font-size="15" font-weight="700" fill="#6ee7b7">pair-programmer</text>
69
- <text x="450" y="395" font-size="12" fill="#334155">The Pre-Code Thinker</text>
70
- <text x="450" y="425" font-size="13" fill="#94a3b8">Catches the wrong approach</text>
71
- <text x="450" y="445" font-size="13" fill="#94a3b8">before you write a single line.</text>
72
- <text x="450" y="465" font-size="13" fill="#94a3b8">Thinks. Then codes.</text>
73
- <text x="450" y="482" font-size="11" fill="#052e16">Planning · Prevention · Design</text>
61
+ <rect x="80" y="274" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
62
+ <rect x="80" y="274" width="4" height="120" rx="2" fill="#10b981"/>
63
+ <text x="100" y="302" font-size="15" font-weight="700" fill="#6ee7b7">pair-programmer</text>
64
+ <text x="100" y="323" font-size="13" fill="#6e7681">Pre-code thinking partner.</text>
65
+ <text x="100" y="340" font-size="13" fill="#6e7681">Catches wrong approaches before</text>
66
+ <text x="100" y="357" font-size="13" fill="#6e7681">you write a single line.</text>
67
+ <text x="100" y="385" font-size="11" fill="#30363d">Planning · Prevention</text>
68
+
69
+ <!-- ux-reviewer -->
70
+ <rect x="420" y="274" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
71
+ <rect x="420" y="274" width="4" height="120" rx="2" fill="#0891b2"/>
72
+ <text x="440" y="302" font-size="15" font-weight="700" fill="#67e8f9">ux-reviewer</text>
73
+ <text x="440" y="323" font-size="13" fill="#6e7681">WCAG 2.1 AA UX reviewer.</text>
74
+ <text x="440" y="340" font-size="13" fill="#6e7681">Interaction behavior, not</text>
75
+ <text x="440" y="357" font-size="13" fill="#6e7681">visual aesthetics.</text>
76
+ <text x="440" y="385" font-size="11" fill="#30363d">UX · Accessibility · A11y</text>
77
+
78
+ <!-- git-rescue -->
79
+ <rect x="760" y="274" width="360" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
80
+ <rect x="760" y="274" width="4" height="120" rx="2" fill="#22d3ee"/>
81
+ <text x="780" y="302" font-size="15" font-weight="700" fill="#a5f3fc">git-rescue</text>
82
+ <text x="780" y="323" font-size="13" fill="#6e7681">Recovers broken git states.</text>
83
+ <text x="780" y="340" font-size="13" fill="#6e7681">Lost commits, bad rebases,</text>
84
+ <text x="780" y="357" font-size="13" fill="#6e7681">force-push damage.</text>
85
+ <text x="780" y="385" font-size="11" fill="#30363d">Git · Recovery · Rebase</text>
74
86
 
75
- <!-- migration-guide -->
76
- <rect x="800" y="338" width="350" height="150" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
77
- <rect x="800" y="338" width="4" height="150" rx="2" fill="#8b5cf6"/>
78
- <text x="820" y="373" font-size="15" font-weight="700" fill="#c4b5fd">migration-guide</text>
79
- <text x="820" y="395" font-size="12" fill="#334155">The Migration Specialist</text>
80
- <text x="820" y="425" font-size="13" fill="#94a3b8">React, Next.js, Python, Node,</text>
81
- <text x="820" y="445" font-size="13" fill="#94a3b8">TypeScript, Java. Full playbooks.</text>
82
- <text x="820" y="465" font-size="13" fill="#94a3b8">Phase by phase. No guessing.</text>
83
- <text x="820" y="482" font-size="11" fill="#1e1040">Upgrades · Migrations · Planning</text>
87
+ <!-- Row 3 -->
88
+ <!-- release-captain -->
89
+ <rect x="80" y="414" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
90
+ <rect x="80" y="414" width="4" height="120" rx="2" fill="#f97316"/>
91
+ <text x="100" y="442" font-size="15" font-weight="700" fill="#fdba74">release-captain</text>
92
+ <text x="100" y="463" font-size="13" fill="#6e7681">Owns the full release ritual.</text>
93
+ <text x="100" y="480" font-size="13" fill="#6e7681">Semver, changelog, tag,</text>
94
+ <text x="100" y="497" font-size="13" fill="#6e7681">publish, rollback rehearsal.</text>
95
+ <text x="100" y="525" font-size="11" fill="#30363d">Release · Semver · Publish</text>
84
96
 
85
- <!-- Bottom -->
86
- <text x="60" y="540" font-size="14" fill="#334155">Plus 47 more agents — reviewers, build resolvers, security experts, testers, open source tools.</text>
87
- <text x="60" y="564" font-size="14" fill="#1e293b">All free. All open source. github.com/sifxprime/kodelyth-ecc</text>
97
+ <!-- flake-hunter -->
98
+ <rect x="420" y="414" width="320" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
99
+ <rect x="420" y="414" width="4" height="120" rx="2" fill="#8b5cf6"/>
100
+ <text x="440" y="442" font-size="15" font-weight="700" fill="#c4b5fd">flake-hunter</text>
101
+ <text x="440" y="463" font-size="13" fill="#6e7681">Stabilizes flaky tests.</text>
102
+ <text x="440" y="480" font-size="13" fill="#6e7681">6-class taxonomy. Real fixes.</text>
103
+ <text x="440" y="497" font-size="13" fill="#6e7681">Never adds blind retries.</text>
104
+ <text x="440" y="525" font-size="11" fill="#30363d">Tests · Reliability</text>
88
105
 
89
- <!-- Kodelyth -->
90
- <text x="60" y="640" font-size="13" fill="#334155" font-weight="600">Kodelyth ECC v1.1.0</text>
91
- <text x="1140" y="640" font-size="13" fill="#334155" text-anchor="end">@sifxprime</text>
106
+ <!-- more badge -->
107
+ <rect x="760" y="414" width="360" height="120" rx="8" fill="url(#card)" stroke="#21262d" stroke-width="1"/>
108
+ <text x="940" y="465" font-size="38" font-weight="900" fill="#ffffff" text-anchor="middle">+51</text>
109
+ <text x="940" y="495" font-size="13" fill="#484f58" text-anchor="middle">more agents</text>
110
+ <text x="940" y="516" font-size="12" fill="#30363d" text-anchor="middle">dependency-doctor · env-debugger</text>
111
+ <text x="940" y="534" font-size="12" fill="#30363d" text-anchor="middle">build fixers · language reviewers · and more</text>
92
112
 
93
- <rect x="0" y="671" width="1200" height="4" fill="url(#purple)"/>
113
+ <!-- Footer -->
114
+ <rect x="0" y="570" width="1200" height="5" fill="#21262d"/>
115
+ <text x="80" y="606" font-size="16" fill="#484f58">$ npx kodelyth-ecc</text>
116
+ <text x="80" y="638" font-size="14" fill="#30363d">github.com/sifxprime/kodelyth-ecc · MIT License</text>
117
+ <rect x="0" y="670" width="1200" height="5" fill="url(#mem)"/>
94
118
  </svg>
@@ -1,95 +1,49 @@
1
1
  <svg width="1200" height="675" viewBox="0 0 1200 675" xmlns="http://www.w3.org/2000/svg" font-family="'Segoe UI', system-ui, -apple-system, sans-serif">
2
2
  <defs>
3
3
  <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#0a0a0f"/>
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
5
  <stop offset="100%" style="stop-color:#0d1117"/>
6
6
  </linearGradient>
7
- <linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="0%">
8
- <stop offset="0%" style="stop-color:#059669"/>
9
- <stop offset="100%" style="stop-color:#0891b2"/>
10
- </linearGradient>
11
- <linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="0%">
7
+ <linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
12
8
  <stop offset="0%" style="stop-color:#7c3aed"/>
13
9
  <stop offset="100%" style="stop-color:#2563eb"/>
14
10
  </linearGradient>
11
+ <linearGradient id="mem" x1="0%" y1="0%" x2="100%" y2="0%">
12
+ <stop offset="0%" style="stop-color:#059669"/>
13
+ <stop offset="100%" style="stop-color:#0891b2"/>
14
+ </linearGradient>
15
15
  </defs>
16
16
 
17
17
  <rect width="1200" height="675" fill="url(#bg)"/>
18
- <rect x="0" y="0" width="1200" height="4" fill="url(#green)"/>
19
-
20
- <!-- Big FREE -->
21
- <text x="60" y="280" font-size="240" font-weight="900" fill="#ffffff" opacity="0.03" letter-spacing="-10">FREE</text>
22
-
23
- <!-- Left content -->
24
- <text x="60" y="110" font-size="14" font-weight="700" letter-spacing="4" fill="#059669">OPEN SOURCE · MIT LICENSE</text>
25
-
26
- <text x="60" y="185" font-size="72" font-weight="900" letter-spacing="-2" fill="#ffffff">Free for</text>
27
- <text x="60" y="270" font-size="72" font-weight="900" letter-spacing="-2" fill="#ffffff">every</text>
28
- <text x="60" y="355" font-size="72" font-weight="900" letter-spacing="-2">
29
- <tspan fill="url(#green)">developer.</tspan>
30
- </text>
31
-
32
- <text x="60" y="410" font-size="19" fill="#64748b" font-weight="400">A junior in a 3-person team gets the same</text>
33
- <text x="60" y="436" font-size="19" fill="#64748b">thinking power as an engineer at a top tech company.</text>
34
- <text x="60" y="462" font-size="19" fill="#64748b">That is the point.</text>
35
-
36
- <!-- Install box -->
37
- <rect x="60" y="500" width="560" height="110" rx="8" fill="#0d1117" stroke="#1e293b" stroke-width="1"/>
38
- <text x="84" y="530" font-size="12" font-family="'Courier New', monospace" fill="#475569"># Install in 30 seconds</text>
39
- <text x="84" y="556" font-size="14" font-family="'Courier New', monospace">
40
- <tspan fill="#10b981">$ </tspan><tspan fill="#e2e8f0">git clone github.com/sifxprime/kodelyth-ecc</tspan>
41
- </text>
42
- <text x="84" y="578" font-size="14" font-family="'Courier New', monospace">
43
- <tspan fill="#10b981">$ </tspan><tspan fill="#e2e8f0">cd kodelyth-ecc &amp;&amp; ./install.sh</tspan>
44
- </text>
45
- <text x="84" y="600" font-size="14" font-family="'Courier New', monospace" fill="#10b981"> ARMED AND OPERATIONAL.</text>
46
-
47
- <!-- Right: what you get -->
48
- <rect x="700" y="80" width="460" height="530" rx="12" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
49
- <text x="730" y="122" font-size="14" font-weight="700" fill="#475569" letter-spacing="2">WHAT YOU GET</text>
50
-
51
- <g font-family="'Segoe UI', sans-serif">
52
- <text x="730" y="165" font-size="15" fill="#94a3b8">53 specialist agents</text>
53
- <text x="1130" y="165" font-size="15" fill="#10b981" text-anchor="end">free</text>
54
- <line x1="730" y1="175" x2="1140" y2="175" stroke="#1e293b" stroke-width="1"/>
55
-
56
- <text x="730" y="210" font-size="15" fill="#94a3b8">185 knowledge skills</text>
57
- <text x="1130" y="210" font-size="15" fill="#10b981" text-anchor="end">free</text>
58
- <line x1="730" y1="220" x2="1140" y2="220" stroke="#1e293b" stroke-width="1"/>
59
-
60
- <text x="730" y="255" font-size="15" fill="#94a3b8">79 slash commands</text>
61
- <text x="1130" y="255" font-size="15" fill="#10b981" text-anchor="end">free</text>
62
- <line x1="730" y1="265" x2="1140" y2="265" stroke="#1e293b" stroke-width="1"/>
63
-
64
- <text x="730" y="300" font-size="15" fill="#94a3b8">18+ automated hooks</text>
65
- <text x="1130" y="300" font-size="15" fill="#10b981" text-anchor="end">free</text>
66
- <line x1="730" y1="310" x2="1140" y2="310" stroke="#1e293b" stroke-width="1"/>
67
-
68
- <text x="730" y="345" font-size="15" fill="#94a3b8">5 platform support</text>
69
- <text x="1130" y="345" font-size="15" fill="#10b981" text-anchor="end">free</text>
70
- <line x1="730" y1="355" x2="1140" y2="355" stroke="#1e293b" stroke-width="1"/>
71
-
72
- <text x="730" y="390" font-size="15" fill="#94a3b8">Any language support</text>
73
- <text x="1130" y="390" font-size="15" fill="#10b981" text-anchor="end">free</text>
74
- <line x1="730" y1="400" x2="1140" y2="400" stroke="#1e293b" stroke-width="1"/>
75
-
76
- <text x="730" y="435" font-size="15" fill="#94a3b8">9 core principles</text>
77
- <text x="1130" y="435" font-size="15" fill="#10b981" text-anchor="end">free</text>
78
- <line x1="730" y1="445" x2="1140" y2="445" stroke="#1e293b" stroke-width="1"/>
79
-
80
- <text x="730" y="480" font-size="15" fill="#94a3b8">MIT license</text>
81
- <text x="1130" y="480" font-size="15" fill="#10b981" text-anchor="end">free</text>
82
- <line x1="730" y1="490" x2="1140" y2="490" stroke="#1e293b" stroke-width="1"/>
83
-
84
- <text x="730" y="525" font-size="15" fill="#94a3b8">Updates forever</text>
85
- <text x="1130" y="525" font-size="15" fill="#10b981" text-anchor="end">free</text>
86
- </g>
87
-
88
- <rect x="730" y="555" width="380" height="40" rx="6" fill="#059669" opacity="0.1"/>
89
- <rect x="730" y="555" width="380" height="40" rx="6" fill="none" stroke="#059669" stroke-width="1"/>
90
- <text x="920" y="581" font-size="14" font-weight="700" fill="#34d399" text-anchor="middle">Total cost: $0.00</text>
91
-
92
- <text x="60" y="648" font-size="13" fill="#334155">github.com/sifxprime/kodelyth-ecc · Kodelyth · @sifxprime</text>
93
-
94
- <rect x="0" y="671" width="1200" height="4" fill="url(#purple)"/>
18
+ <rect x="0" y="0" width="1200" height="5" fill="url(#accent)"/>
19
+
20
+ <!-- Glow orbs -->
21
+ <circle cx="200" cy="200" r="300" fill="#7c3aed" opacity="0.04"/>
22
+ <circle cx="1000" cy="475" r="260" fill="#059669" opacity="0.04"/>
23
+
24
+ <!-- Main headline -->
25
+ <text x="100" y="180" font-size="96" font-weight="900" letter-spacing="-4" fill="#ffffff">Free.</text>
26
+ <text x="100" y="280" font-size="96" font-weight="900" letter-spacing="-4" fill="#ffffff">Open source.</text>
27
+ <text x="100" y="380" font-size="96" font-weight="900" letter-spacing="-4" fill="url(#accent)">MIT license.</text>
28
+
29
+ <!-- Sub-copy -->
30
+ <text x="100" y="448" font-size="28" fill="#6e7681" font-weight="400">61 specialist agents. Local self-learning memory.</text>
31
+ <text x="100" y="482" font-size="28" fill="#6e7681">Zero cloud. Zero telemetry. Zero cost.</text>
32
+
33
+ <!-- Install pill -->
34
+ <rect x="100" y="520" width="460" height="72" rx="12" fill="#161b22" stroke="#21262d" stroke-width="2"/>
35
+ <text x="140" y="562" font-family="'Courier New', Courier, monospace" font-size="26" fill="#57c454">$</text>
36
+ <text x="164" y="562" font-family="'Courier New', Courier, monospace" font-size="26" fill="#e6edf3"> npx kodelyth-ecc</text>
37
+
38
+ <!-- Stats -->
39
+ <text x="640" y="540" font-size="72" font-weight="900" fill="#ffffff">61</text>
40
+ <text x="640" y="570" font-size="13" fill="#484f58" letter-spacing="3">AGENTS</text>
41
+ <text x="780" y="540" font-size="72" font-weight="900" fill="#ffffff">188</text>
42
+ <text x="780" y="570" font-size="13" fill="#484f58" letter-spacing="3">SKILLS</text>
43
+ <text x="950" y="540" font-size="72" font-weight="900" fill="#ffffff">80</text>
44
+ <text x="950" y="570" font-size="13" fill="#484f58" letter-spacing="3">COMMANDS</text>
45
+
46
+ <!-- Bottom -->
47
+ <text x="100" y="640" font-size="18" fill="#30363d">github.com/sifxprime/kodelyth-ecc</text>
48
+ <rect x="0" y="670" width="1200" height="5" fill="url(#mem)"/>
95
49
  </svg>
@@ -1,77 +1,48 @@
1
1
  <svg width="1200" height="675" viewBox="0 0 1200 675" xmlns="http://www.w3.org/2000/svg" font-family="'Segoe UI', system-ui, -apple-system, sans-serif">
2
2
  <defs>
3
3
  <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#0a0a0f"/>
5
- <stop offset="60%" style="stop-color:#0d0d1a"/>
6
- <stop offset="100%" style="stop-color:#0a0a0f"/>
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
+ <stop offset="100%" style="stop-color:#020a05"/>
7
6
  </linearGradient>
8
- <linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="0%">
7
+ <linearGradient id="mem" x1="0%" y1="0%" x2="100%" y2="0%">
8
+ <stop offset="0%" style="stop-color:#059669"/>
9
+ <stop offset="100%" style="stop-color:#0891b2"/>
10
+ </linearGradient>
11
+ <linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
9
12
  <stop offset="0%" style="stop-color:#7c3aed"/>
10
13
  <stop offset="100%" style="stop-color:#2563eb"/>
11
14
  </linearGradient>
12
- <linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="0%">
13
- <stop offset="0%" style="stop-color:#dc2626"/>
14
- <stop offset="100%" style="stop-color:#7c3aed"/>
15
- </linearGradient>
16
- <filter id="glow">
17
- <feGaussianBlur stdDeviation="8" result="blur"/>
18
- <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
19
- </filter>
20
15
  </defs>
21
16
 
22
17
  <rect width="1200" height="675" fill="url(#bg)"/>
23
-
24
- <!-- Glow orb top left -->
25
- <circle cx="100" cy="100" r="200" fill="#7c3aed" opacity="0.06"/>
26
- <!-- Glow orb bottom right -->
27
- <circle cx="1100" cy="580" r="250" fill="#2563eb" opacity="0.06"/>
28
-
29
- <!-- Top bar -->
30
- <rect x="0" y="0" width="1200" height="5" fill="url(#red)"/>
31
-
32
- <!-- DANGER badge -->
33
- <rect x="80" y="60" width="340" height="40" rx="4" fill="none" stroke="#dc2626" stroke-width="1.5"/>
34
- <rect x="80" y="60" width="340" height="40" rx="4" fill="#dc2626" opacity="0.1"/>
35
- <text x="250" y="86" font-size="14" font-weight="800" letter-spacing="4" fill="#ef4444" text-anchor="middle">DANGER LEVEL: GOD TIER</text>
36
-
37
- <!-- Big number -->
38
- <text x="80" y="230" font-size="140" font-weight="900" fill="#ffffff" opacity="0.04" letter-spacing="-8">53</text>
39
-
40
- <!-- Main headline -->
41
- <text x="80" y="200" font-size="68" font-weight="900" letter-spacing="-2" fill="#ffffff">I just open-sourced</text>
42
- <text x="80" y="282" font-size="68" font-weight="900" letter-spacing="-2">
43
- <tspan fill="url(#purple)">53 AI agents</tspan>
44
- </text>
45
- <text x="80" y="364" font-size="68" font-weight="900" letter-spacing="-2" fill="#ffffff">for developers.</text>
46
-
47
- <!-- Sub -->
48
- <text x="80" y="420" font-size="22" fill="#64748b">Free. Open source. Dangerous.</text>
49
-
50
- <!-- Stats bar -->
51
- <rect x="80" y="460" width="1040" height="1" fill="#1e293b"/>
52
-
53
- <g transform="translate(80, 490)">
54
- <text x="0" y="0" font-size="36" font-weight="800" fill="#ffffff">53</text>
55
- <text x="0" y="22" font-size="12" fill="#475569" letter-spacing="2">AGENTS</text>
56
-
57
- <text x="130" y="0" font-size="36" font-weight="800" fill="#ffffff">185</text>
58
- <text x="130" y="22" font-size="12" fill="#475569" letter-spacing="2">SKILLS</text>
59
-
60
- <text x="270" y="0" font-size="36" font-weight="800" fill="#ffffff">79</text>
61
- <text x="270" y="22" font-size="12" fill="#475569" letter-spacing="2">COMMANDS</text>
62
-
63
- <text x="390" y="0" font-size="36" font-weight="800" fill="#ffffff">5</text>
64
- <text x="390" y="22" font-size="12" fill="#475569" letter-spacing="2">PLATFORMS</text>
65
-
66
- <text x="480" y="0" font-size="36" font-weight="800" fill="#ffffff">Any</text>
67
- <text x="480" y="22" font-size="12" fill="#475569" letter-spacing="2">LANGUAGE</text>
68
- </g>
69
-
70
- <!-- GitHub -->
71
- <text x="80" y="612" font-size="16" fill="#475569">github.com/sifxprime/kodelyth-ecc</text>
72
-
73
- <!-- Kodelyth brand -->
74
- <text x="1120" y="612" font-size="15" fill="#334155" text-anchor="end" font-weight="600">Kodelyth</text>
75
-
76
- <rect x="0" y="670" width="1200" height="5" fill="url(#purple)"/>
18
+ <rect x="0" y="0" width="1200" height="5" fill="url(#mem)"/>
19
+
20
+ <!-- Glow -->
21
+ <circle cx="600" cy="300" r="400" fill="#059669" opacity="0.03"/>
22
+
23
+ <!-- Label -->
24
+ <rect x="100" y="70" width="220" height="32" rx="4" fill="#059669" opacity="0.12"/>
25
+ <rect x="100" y="70" width="220" height="32" rx="4" fill="none" stroke="#059669" stroke-width="1"/>
26
+ <text x="210" y="92" font-size="11" font-weight="700" letter-spacing="3" fill="#10b981" text-anchor="middle">SELF-LEARNING MEMORY</text>
27
+
28
+ <!-- Headline -->
29
+ <text x="100" y="190" font-size="74" font-weight="900" letter-spacing="-2" fill="#ffffff">Your AI remembers</text>
30
+ <text x="100" y="270" font-size="74" font-weight="900" letter-spacing="-2" fill="url(#mem)">every solution.</text>
31
+
32
+ <!-- Sub-copy -->
33
+ <text x="100" y="340" font-size="24" fill="#6e7681">Kodelyth ECC v1.4 introduces local self-learning memory.</text>
34
+ <text x="100" y="372" font-size="24" fill="#6e7681">Every problem you solve gets captured. Every relevant past</text>
35
+ <text x="100" y="404" font-size="24" fill="#6e7681">solution gets injected — automatically, on every prompt.</text>
36
+
37
+ <!-- Terminal demo -->
38
+ <rect x="100" y="434" width="1000" height="120" rx="10" fill="#0d2b1d" stroke="#059669" stroke-opacity="0.3" stroke-width="1.5"/>
39
+ <text x="126" y="465" font-family="'Courier New', Courier, monospace" font-size="16" fill="#484f58"># You typed: "add Stripe webhook for subscription renewal"</text>
40
+ <text x="126" y="493" font-family="'Courier New', Courier, monospace" font-size="16" fill="#10b981">→ Memory auto-recall fired — 1 match from March 2026</text>
41
+ <text x="126" y="517" font-family="'Courier New', Courier, monospace" font-size="16" fill="#6e7681"> raw body parser · validate with constructEvent · stripe-cli test</text>
42
+ <text x="126" y="541" font-family="'Courier New', Courier, monospace" font-size="16" fill="#484f58"> (You never typed /memory recall. The AI just knew.)</text>
43
+
44
+ <!-- Bottom -->
45
+ <text x="100" y="612" font-size="18" fill="#30363d">Local-only. BM25 search. Zero cloud. Zero telemetry.</text>
46
+ <text x="100" y="640" font-size="16" fill="#21262d">github.com/sifxprime/kodelyth-ecc</text>
47
+ <rect x="0" y="670" width="1200" height="5" fill="url(#accent)"/>
77
48
  </svg>
@@ -0,0 +1,132 @@
1
+ // Tests for hooks/memory/auto-recall.js — UserPromptSubmit auto chat detection
2
+ 'use strict';
3
+
4
+ const test = require('node:test');
5
+ const assert = require('node:assert/strict');
6
+ const fs = require('fs');
7
+ const os = require('os');
8
+ const path = require('path');
9
+ const { spawnSync } = require('child_process');
10
+
11
+ const TMP = fs.mkdtempSync(path.join(os.tmpdir(), 'kodelyth-recall-'));
12
+ process.env.KODELYTH_MEMORY_DIR = TMP;
13
+
14
+ const HOOK = path.join(__dirname, '..', '..', 'hooks', 'memory', 'auto-recall.js');
15
+ const store = require('../../scripts/memory/store');
16
+
17
+ function runHook(payload) {
18
+ const res = spawnSync(process.execPath, [HOOK], {
19
+ input: JSON.stringify(payload),
20
+ encoding: 'utf8',
21
+ env: { ...process.env, KODELYTH_MEMORY_DIR: TMP },
22
+ timeout: 5000,
23
+ });
24
+ return { stdout: res.stdout || '', stderr: res.stderr || '', status: res.status };
25
+ }
26
+
27
+ // Seed memory once
28
+ store.capture({
29
+ problem: 'Stripe webhook signature failed in production',
30
+ approach: 'Switched body parser from json to raw, validated with constructEvent',
31
+ tags: ['payments', 'stripe', 'webhooks'],
32
+ project: '/test/payments',
33
+ language: 'typescript',
34
+ });
35
+ store.capture({
36
+ problem: 'Redis cluster split-brain after AZ failover',
37
+ approach: 'Configured min-slaves-to-write to 2 to prevent stale primary writes',
38
+ tags: ['redis', 'cluster', 'reliability'],
39
+ project: '/test/payments',
40
+ language: 'typescript',
41
+ });
42
+
43
+ test('auto-recall: returns nothing for empty prompt', () => {
44
+ const r = runHook({ prompt: '', cwd: '/test/payments', session_id: 's1' });
45
+ assert.equal(r.status, 0);
46
+ assert.equal(r.stdout, '');
47
+ });
48
+
49
+ test('auto-recall: skips trivial prompts', () => {
50
+ for (const trivial of ['ok', 'yes', 'thanks', 'cool']) {
51
+ const r = runHook({ prompt: trivial, cwd: '/test/payments', session_id: 's-trivial' });
52
+ assert.equal(r.stdout, '', `should skip "${trivial}"`);
53
+ }
54
+ });
55
+
56
+ test('auto-recall: skips agent invocation prompts', () => {
57
+ for (const cmd of ['use debug-detective', '@code-reviewer', '/help', 'invoke security-reviewer']) {
58
+ const r = runHook({ prompt: cmd, cwd: '/test/payments', session_id: 's-cmd' });
59
+ assert.equal(r.stdout, '', `should skip "${cmd}"`);
60
+ }
61
+ });
62
+
63
+ test('auto-recall: skips short prompts', () => {
64
+ const r = runHook({ prompt: 'fix bug', cwd: '/test/payments', session_id: 's-short' });
65
+ assert.equal(r.stdout, '');
66
+ });
67
+
68
+ test('auto-recall: surfaces relevant memory for a real query', () => {
69
+ const r = runHook({
70
+ prompt: 'I need to add Stripe webhooks for subscription renewal events',
71
+ cwd: '/test/payments',
72
+ session_id: 's-fire-1',
73
+ });
74
+ assert.equal(r.status, 0);
75
+ assert.ok(r.stdout.length > 0, 'should produce output');
76
+ const out = JSON.parse(r.stdout);
77
+ assert.ok(out.additionalContext.includes('Stripe webhook'));
78
+ assert.equal(out.meta.source, 'kodelyth-memory:auto-recall');
79
+ assert.equal(out.meta.recalledCount, 1);
80
+ });
81
+
82
+ test('auto-recall: suppresses repeat in same session', () => {
83
+ // First call surfaces the memory
84
+ runHook({
85
+ prompt: 'help with stripe webhook integration',
86
+ cwd: '/test/payments',
87
+ session_id: 's-repeat',
88
+ });
89
+ // Second call same topic — should NOT surface again
90
+ const r2 = runHook({
91
+ prompt: 'about that stripe webhook problem, what about retries',
92
+ cwd: '/test/payments',
93
+ session_id: 's-repeat',
94
+ });
95
+ assert.equal(r2.stdout, '', 'repeat should be suppressed');
96
+ });
97
+
98
+ test('auto-recall: surfaces different memory for different topic in same session', () => {
99
+ runHook({
100
+ prompt: 'how do I handle stripe webhook errors',
101
+ cwd: '/test/payments',
102
+ session_id: 's-multi',
103
+ });
104
+ // Different topic — redis — should surface
105
+ const r2 = runHook({
106
+ prompt: 'redis cluster is acting weird after failover today',
107
+ cwd: '/test/payments',
108
+ session_id: 's-multi',
109
+ });
110
+ assert.ok(r2.stdout.length > 0, 'different topic should surface');
111
+ const out = JSON.parse(r2.stdout);
112
+ assert.ok(out.additionalContext.toLowerCase().includes('redis'));
113
+ });
114
+
115
+ test('auto-recall: returns nothing when no memory matches', () => {
116
+ const r = runHook({
117
+ prompt: 'what is the meaning of life and quantum entanglement',
118
+ cwd: '/test/payments',
119
+ session_id: 's-nomatch',
120
+ });
121
+ assert.equal(r.stdout, '');
122
+ });
123
+
124
+ test('auto-recall: never crashes on malformed payload', () => {
125
+ const res = spawnSync(process.execPath, [HOOK], {
126
+ input: 'not-json-at-all',
127
+ encoding: 'utf8',
128
+ env: { ...process.env, KODELYTH_MEMORY_DIR: TMP },
129
+ timeout: 3000,
130
+ });
131
+ assert.equal(res.status, 0, 'must exit 0 even on garbage input');
132
+ });