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.
- package/.github/workflows/ci.yml +7 -8
- package/AGENTS.md +5 -3
- package/CHANGELOG.md +88 -0
- package/CLAUDE.md +1 -1
- package/KODELYTH.md +46 -8
- package/README.md +29 -8
- package/VERSION +1 -1
- package/agents/incident-commander.md +227 -0
- package/agents/load-tester.md +283 -0
- package/hooks/hooks.json +15 -0
- package/hooks/memory/auto-recall.js +141 -0
- package/package.json +5 -2
- package/rules/common/agent-intent-routing.md +33 -1
- package/social/card-agents.svg +71 -76
- package/social/card-install.svg +43 -77
- package/social/card-main.svg +36 -109
- package/social/github-social-preview.svg +110 -103
- package/social/readme-agents.svg +125 -138
- package/social/readme-hero.svg +91 -92
- package/social/x-card-agents-grid.svg +94 -70
- package/social/x-card-free.svg +37 -83
- package/social/x-card-hook.svg +37 -66
- package/tests/memory/auto-recall.test.js +132 -0
- package/wiki/Agent-Reference.md +317 -119
- package/wiki/FAQ.md +158 -72
- package/wiki/Home.md +91 -28
- package/wiki/Hook-Reference.md +148 -53
- package/wiki/Installation-Guide.md +147 -66
- package/wiki/Platform-Support.md +136 -56
- package/wiki/Skill-Reference.md +167 -60
|
@@ -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:#
|
|
4
|
+
<stop offset="0%" style="stop-color:#050811"/>
|
|
5
5
|
<stop offset="100%" style="stop-color:#0d1117"/>
|
|
6
6
|
</linearGradient>
|
|
7
|
-
<linearGradient id="
|
|
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="
|
|
22
|
+
<rect x="0" y="0" width="1200" height="5" fill="url(#accent)"/>
|
|
15
23
|
|
|
16
24
|
<!-- Header -->
|
|
17
|
-
<text x="
|
|
18
|
-
<text x="
|
|
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="
|
|
36
|
-
<rect x="
|
|
37
|
-
<text x="
|
|
38
|
-
<text x="
|
|
39
|
-
<text x="
|
|
40
|
-
<text x="
|
|
41
|
-
<text x="
|
|
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
|
-
<!--
|
|
45
|
-
<rect x="
|
|
46
|
-
<rect x="
|
|
47
|
-
<text x="
|
|
48
|
-
<text x="
|
|
49
|
-
<text x="
|
|
50
|
-
<text x="
|
|
51
|
-
<text x="
|
|
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
|
-
<!--
|
|
55
|
-
|
|
56
|
-
<rect x="
|
|
57
|
-
<
|
|
58
|
-
<
|
|
59
|
-
<text x="
|
|
60
|
-
<text x="
|
|
61
|
-
<text x="
|
|
62
|
-
<text x="
|
|
63
|
-
<text x="
|
|
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="
|
|
67
|
-
<rect x="
|
|
68
|
-
<text x="
|
|
69
|
-
<text x="
|
|
70
|
-
<text x="
|
|
71
|
-
<text x="
|
|
72
|
-
<text x="
|
|
73
|
-
|
|
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
|
-
<!--
|
|
76
|
-
|
|
77
|
-
<rect x="
|
|
78
|
-
<
|
|
79
|
-
<text x="
|
|
80
|
-
<text x="
|
|
81
|
-
<text x="
|
|
82
|
-
<text x="
|
|
83
|
-
<text x="
|
|
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
|
-
<!--
|
|
86
|
-
<
|
|
87
|
-
<
|
|
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
|
-
<!--
|
|
90
|
-
<
|
|
91
|
-
<text x="
|
|
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
|
-
|
|
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>
|
package/social/x-card-free.svg
CHANGED
|
@@ -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:#
|
|
4
|
+
<stop offset="0%" style="stop-color:#050811"/>
|
|
5
5
|
<stop offset="100%" style="stop-color:#0d1117"/>
|
|
6
6
|
</linearGradient>
|
|
7
|
-
<linearGradient id="
|
|
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="
|
|
19
|
-
|
|
20
|
-
<!--
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<text x="
|
|
27
|
-
<text x="
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<text x="
|
|
40
|
-
|
|
41
|
-
</text>
|
|
42
|
-
<text x="
|
|
43
|
-
|
|
44
|
-
</text>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
<rect x="
|
|
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>
|
package/social/x-card-hook.svg
CHANGED
|
@@ -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:#
|
|
5
|
-
<stop offset="
|
|
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="
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<rect x="
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<
|
|
35
|
-
<text x="
|
|
36
|
-
|
|
37
|
-
<!--
|
|
38
|
-
<text x="
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</text>
|
|
45
|
-
<text x="
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<
|
|
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
|
+
});
|