kodelyth-ecc 1.7.2 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +41 -0
  3. package/.github/ISSUE_TEMPLATE/good_first_issue.md +36 -0
  4. package/CHANGELOG.md +59 -0
  5. package/GITHUB_SETUP.md +553 -0
  6. package/README.md +51 -6
  7. package/VERSION +1 -1
  8. package/actions/ecc-review/README.md +7 -7
  9. package/bundles/enterprise.md +1 -1
  10. package/bundles/indie-hacker.md +1 -1
  11. package/bundles/red-team.md +1 -1
  12. package/docs/supply-chain.md +1 -1
  13. package/package.json +4 -1
  14. package/rules/common/memory-protocol.md +35 -4
  15. package/scripts/dashboard/data.js +261 -4
  16. package/scripts/dashboard/server.js +28 -3
  17. package/scripts/dashboard/static/index.html +63 -3
  18. package/social/card-install.svg +1 -1
  19. package/social/card-main.svg +2 -2
  20. package/social/facebook-v150.svg +4 -4
  21. package/social/github-social-preview.svg +3 -3
  22. package/social/hype-compound-learning.svg +117 -0
  23. package/social/hype-devil-mode.svg +228 -0
  24. package/social/hype-mcp-server.svg +136 -0
  25. package/social/hype-parallel-agents.svg +150 -0
  26. package/social/hype-stats-hero.svg +126 -0
  27. package/social/readme-hero.svg +4 -4
  28. package/social/section-mcp.svg +1 -1
  29. package/social/twitter-threads.md +621 -0
  30. package/social/x-card-agents-grid.svg +2 -2
  31. package/social/x-card-free.svg +2 -2
  32. package/social/x-card-hook.svg +5 -5
  33. package/tests/dashboard/data.test.js +156 -0
  34. package/tests/dashboard/server.test.js +17 -0
  35. package/wiki/FAQ.md +1 -1
  36. package/wiki/Home.md +5 -3
  37. package/wiki/Installation-Guide.md +2 -2
  38. package/MARKETING_PLAN.md +0 -893
  39. package/cat +0 -0
  40. package/social/facebook-group/POST.md +0 -121
  41. package/social/facebook-group/fb-1-3am-debug.png +0 -0
  42. package/social/facebook-group/fb-1-3am-debug.svg +0 -97
  43. package/social/facebook-group/fb-2-cpu-upgrade.png +0 -0
  44. package/social/facebook-group/fb-2-cpu-upgrade.svg +0 -132
  45. package/social/facebook-group/fb-3-before-after.png +0 -0
  46. package/social/facebook-group/fb-3-before-after.svg +0 -94
@@ -213,7 +213,7 @@
213
213
  <div class="brand">
214
214
  <span class="dot" id="liveDot"></span>
215
215
  <h1>Kodelyth ECC</h1>
216
- <span class="sub" id="hostLabel">— dashboard v1.7.0 · localhost</span>
216
+ <span class="sub" id="hostLabel">— dashboard v1.7.4 · localhost</span>
217
217
  </div>
218
218
  <div class="header-right">
219
219
  <span id="connBadge" class="pill ok" title="Real-time SSE connection status">LIVE</span>
@@ -310,6 +310,12 @@
310
310
 
311
311
  <!-- ───────── SESSIONS ───────── -->
312
312
  <section data-panel="sessions" hidden>
313
+ <div class="card">
314
+ <h2>Live IDE activity</h2>
315
+ <p class="muted" style="margin-top:-4px;font-size:12.5px;">Most recently modified Claude Code / Windsurf / Antigravity session files. Updates every 3 seconds via SSE.</p>
316
+ <div id="ideSessionsList">loading…</div>
317
+ </div>
318
+ <hr class="sep">
313
319
  <div class="card">
314
320
  <h2>Orchestration / swarm sessions</h2>
315
321
  <div id="sessionsList">loading…</div>
@@ -372,7 +378,7 @@
372
378
  async function loadOverview() {
373
379
  try {
374
380
  const o = await api('/api/overview');
375
- $('#hostLabel').textContent = `— dashboard v1.7.0 · ${location.host} · ${o.package_root.split('/').slice(-2).join('/')}`;
381
+ $('#hostLabel').textContent = `— dashboard v1.7.4 · ${location.host} · ${o.package_root.split('/').slice(-2).join('/')}`;
376
382
  $('#overviewCards').innerHTML = [
377
383
  statCard(o.catalog.agents, 'Agents'),
378
384
  statCard(o.catalog.skills, 'Skills'),
@@ -570,13 +576,67 @@
570
576
  }
571
577
  }
572
578
 
579
+ // ───── ide sessions (claude code / windsurf / antigravity) ─────
580
+ function formatBytes(n) {
581
+ if (!n || n < 0) return '—';
582
+ if (n < 1024) return n + ' B';
583
+ if (n < 1024 * 1024) return (n / 1024).toFixed(1) + ' KB';
584
+ if (n < 1024 * 1024 * 1024) return (n / (1024 * 1024)).toFixed(1) + ' MB';
585
+ return (n / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
586
+ }
587
+
588
+ function relativeTime(iso) {
589
+ if (!iso) return '—';
590
+ const ms = Date.now() - new Date(iso).getTime();
591
+ if (ms < 0) return 'just now';
592
+ const s = Math.floor(ms / 1000);
593
+ if (s < 60) return s + 's ago';
594
+ if (s < 3600) return Math.floor(s / 60) + 'm ago';
595
+ if (s < 86400) return Math.floor(s / 3600) + 'h ago';
596
+ return Math.floor(s / 86400) + 'd ago';
597
+ }
598
+
599
+ async function loadIdeSessions() {
600
+ try {
601
+ const r = await api('/api/ide-sessions');
602
+ if (!r.sessions.length) {
603
+ $('#ideSessionsList').innerHTML = `<div class="empty">No active IDE sessions detected. Open Claude Code, Windsurf, Cursor, or an Antigravity workspace and check back. <br><span style="font-size:11px;">Add custom paths via <code>KODELYTH_EXTRA_IDE_WATCH</code> env var.</span></div>`;
604
+ return;
605
+ }
606
+ const rows = r.sessions.map(s => {
607
+ const platformColor = s.platform === 'claude-code' ? '#a855f7'
608
+ : s.platform === 'windsurf' ? '#06b6d4'
609
+ : s.platform === 'windsurf-next' ? '#0ea5e9'
610
+ : s.platform === 'cursor' ? '#f97316'
611
+ : s.platform === 'antigravity' ? '#10b981'
612
+ : s.platform === 'custom' ? '#94a3b8'
613
+ : '#64748b';
614
+ const project = s.project ? `<code style="font-size:11px;color:#94a3b8;word-break:break-all;">${escapeHtml(s.project)}</code>` : '<span class="muted">—</span>';
615
+ return `<tr>
616
+ <td><span class="pill" style="background:${platformColor}22;color:${platformColor};border-color:${platformColor}55;">${escapeHtml(s.platform)}</span></td>
617
+ <td>${project}</td>
618
+ <td class="muted" title="${escapeHtml(s.modified)}">${escapeHtml(relativeTime(s.modified))}</td>
619
+ <td class="muted">${escapeHtml(formatBytes(s.size_bytes))}</td>
620
+ <td><code style="font-size:10.5px;color:#64748b;">${escapeHtml(s.session_id.slice(0, 8))}…</code></td>
621
+ </tr>`;
622
+ }).join('');
623
+ $('#ideSessionsList').innerHTML = `<table>
624
+ <thead><tr><th>Platform</th><th>Project</th><th>Last activity</th><th>Size</th><th>Session</th></tr></thead>
625
+ <tbody>${rows}</tbody>
626
+ </table>`;
627
+ setLastUpdated();
628
+ } catch (e) {
629
+ $('#ideSessionsList').innerHTML = `<div class="empty">failed: ${escapeHtml(e.message)}</div>`;
630
+ }
631
+ }
632
+
573
633
  // ───── tab dispatcher ─────
574
634
  function onTabShown(tab) {
575
635
  if (tab === 'overview') loadOverview();
576
636
  if (tab === 'memory') loadMemory();
577
637
  if (tab === 'evolve') loadEvolve();
578
638
  if (tab === 'catalog') loadCatalog();
579
- if (tab === 'sessions') loadSessions();
639
+ if (tab === 'sessions') { loadIdeSessions(); loadSessions(); }
580
640
  }
581
641
 
582
642
  // ───── real-time: SSE connection ─────
@@ -37,7 +37,7 @@
37
37
  <text x="48" y="200" font-family="'Courier New', Courier, monospace" font-size="12" fill="#e6edf3"> npx kodelyth-ecc --target windsurf-project</text>
38
38
  <text x="48" y="216" font-family="'Courier New', Courier, monospace" font-size="11" fill="#484f58"> # or Antigravity:</text>
39
39
  <text x="48" y="232" font-family="'Courier New', Courier, monospace" font-size="12" fill="#e6edf3"> npx kodelyth-ecc --target antigravity</text>
40
- <text x="48" y="256" font-family="'Courier New', Courier, monospace" font-size="11" fill="#10b981"> Installing v1.7.0 — 70 agents, 194 skills, 97 commands...</text>
40
+ <text x="48" y="256" font-family="'Courier New', Courier, monospace" font-size="11" fill="#10b981"> Installing v1.7.4 — 70 agents, 194 skills, 97 commands...</text>
41
41
  <text x="48" y="292" font-family="'Courier New', Courier, monospace" font-size="11" fill="#10b981"> Done. Type /kodelyth-quickstart to begin.</text>
42
42
 
43
43
  <!-- Footer -->
@@ -17,7 +17,7 @@
17
17
 
18
18
  <!-- Badge -->
19
19
  <rect x="28" y="24" width="72" height="20" rx="10" fill="#a78bfa" fill-opacity="0.15" stroke="#a78bfa" stroke-opacity="0.4" stroke-width="1"/>
20
- <text x="64" y="38" font-size="9" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.5.3</text>
20
+ <text x="64" y="38" font-size="9" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.7.4</text>
21
21
 
22
22
  <!-- Title -->
23
23
  <text x="28" y="88" font-size="38" font-weight="900" letter-spacing="-1.5" fill="#ffffff">Kodelyth</text>
@@ -29,7 +29,7 @@
29
29
  <line x1="28" y1="172" x2="572" y2="172" stroke="#21262d" stroke-width="1"/>
30
30
 
31
31
  <!-- Feature list -->
32
- <text x="28" y="196" font-size="12" fill="#e6edf3">→ 62 specialist agents, auto-routed by intent</text>
32
+ <text x="28" y="196" font-size="12" fill="#e6edf3">→ 70 specialist agents, auto-routed by intent</text>
33
33
  <text x="28" y="216" font-size="12" fill="#e6edf3">→ Compound learning — corrections encoded permanently</text>
34
34
  <text x="28" y="236" font-size="12" fill="#e6edf3">→ Parallel commands — 5 agents, 10 min</text>
35
35
  <text x="28" y="256" font-size="12" fill="#e6edf3">→ AI image gen — Gemini / DALL-E / SVG fallback</text>
@@ -25,7 +25,7 @@
25
25
 
26
26
  <!-- Version + NEW badges -->
27
27
  <rect x="80" y="28" width="76" height="24" rx="12" fill="#a78bfa" fill-opacity="0.15" stroke="#a78bfa" stroke-opacity="0.5" stroke-width="1"/>
28
- <text x="118" y="44" font-size="11" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.7.1</text>
28
+ <text x="118" y="44" font-size="11" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.7.4</text>
29
29
 
30
30
  <!-- Title -->
31
31
  <text x="80" y="120" font-size="52" font-weight="900" letter-spacing="-2" fill="#ffffff">Kodelyth ECC</text>
@@ -37,7 +37,7 @@
37
37
  <!-- Card 1: Compound Learning -->
38
38
  <rect x="80" y="250" width="315" height="120" rx="10" fill="url(#card1)" stroke="#059669" stroke-opacity="0.35" stroke-width="1"/>
39
39
  <rect x="80" y="250" width="4" height="120" rx="2" fill="#059669"/>
40
- <text x="100" y="275" font-size="10" font-weight="700" fill="#10b981" letter-spacing="1">COMPOUND LEARNING v1.5.1</text>
40
+ <text x="100" y="275" font-size="10" font-weight="700" fill="#10b981" letter-spacing="1">COMPOUND LEARNING v1.7.4</text>
41
41
  <text x="100" y="296" font-size="13" fill="#e6edf3">Corrections → tasks/lessons.md</text>
42
42
  <text x="100" y="313" font-size="13" fill="#e6edf3">Next session: never repeats the mistake</text>
43
43
  <text x="100" y="334" font-size="11" fill="#484f58">capture-correction.js · read-lessons.js</text>
@@ -46,7 +46,7 @@
46
46
  <!-- Card 2: Parallel Agents -->
47
47
  <rect x="410" y="250" width="315" height="120" rx="10" fill="#161b22" stroke="#f59e0b" stroke-opacity="0.35" stroke-width="1"/>
48
48
  <rect x="410" y="250" width="4" height="120" rx="2" fill="#f59e0b"/>
49
- <text x="430" y="275" font-size="10" font-weight="700" fill="#f59e0b" letter-spacing="1">PARALLEL AGENTS v1.5.2</text>
49
+ <text x="430" y="275" font-size="10" font-weight="700" fill="#f59e0b" letter-spacing="1">PARALLEL AGENTS v1.7.4</text>
50
50
  <text x="430" y="296" font-size="13" fill="#e6edf3">/project-launch → 5 agents, 10 min</text>
51
51
  <text x="430" y="313" font-size="13" fill="#e6edf3">/team-review → 4 agents, 15 min</text>
52
52
  <text x="430" y="334" font-size="11" fill="#484f58">image-architect: Gemini / DALL-E / SVG</text>
@@ -55,7 +55,7 @@
55
55
  <!-- Card 3: Semantic Routing -->
56
56
  <rect x="740" y="250" width="380" height="120" rx="10" fill="url(#card2)" stroke="#38bdf8" stroke-opacity="0.4" stroke-width="1"/>
57
57
  <rect x="740" y="250" width="4" height="120" rx="2" fill="#38bdf8"/>
58
- <text x="760" y="275" font-size="10" font-weight="700" fill="#38bdf8" letter-spacing="1">SEMANTIC ROUTING v1.5.3+</text>
58
+ <text x="760" y="275" font-size="10" font-weight="700" fill="#38bdf8" letter-spacing="1">SEMANTIC ROUTING v1.7.4</text>
59
59
  <text x="760" y="296" font-size="13" fill="#e6edf3">Paste code → auto-routes to code-reviewer</text>
60
60
  <text x="760" y="313" font-size="13" fill="#e6edf3">Paste error → auto-routes to debug-detective</text>
61
61
  <text x="760" y="334" font-size="11" fill="#484f58">Emotion as signal · 2–3× more patterns</text>
@@ -44,7 +44,7 @@
44
44
 
45
45
  <!-- Version badge -->
46
46
  <rect x="60" y="60" width="88" height="26" rx="13" fill="#a78bfa" fill-opacity="0.15" stroke="#a78bfa" stroke-opacity="0.5" stroke-width="1"/>
47
- <text x="104" y="77" font-size="11" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.7.1 NEW</text>
47
+ <text x="104" y="77" font-size="11" fill="#a78bfa" text-anchor="middle" font-weight="700" letter-spacing="0.5">v1.7.4 NEW</text>
48
48
 
49
49
  <!-- Title -->
50
50
  <text x="60" y="160" font-size="72" font-weight="900" letter-spacing="-3" fill="#ffffff">Kodelyth</text>
@@ -112,7 +112,7 @@
112
112
  <text x="668" y="118" font-size="12" fill="#484f58" font-family="'Courier New', monospace">$</text>
113
113
  <text x="682" y="118" font-size="12" fill="#34d399" font-family="'Courier New', monospace">npx kodelyth-ecc</text>
114
114
 
115
- <text x="668" y="148" font-size="11" fill="#a78bfa" font-family="'Courier New', monospace">✓ Kodelyth ECC v1.7.1</text>
115
+ <text x="668" y="148" font-size="11" fill="#a78bfa" font-family="'Courier New', monospace">✓ Kodelyth ECC v1.7.4</text>
116
116
  <text x="668" y="166" font-size="11" fill="#6e7681" font-family="'Courier New', monospace"> Installing 70 agents, 194 skills, 97 commands...</text>
117
117
  <text x="668" y="184" font-size="11" fill="#6e7681" font-family="'Courier New', monospace"> Wiring 22+ hooks · 14 rules · local memory</text>
118
118
  <text x="668" y="202" font-size="11" fill="#34d399" font-family="'Courier New', monospace"> Done in 2.1s</text>
@@ -142,6 +142,6 @@
142
142
  <text x="668" y="486" font-size="11" fill="#38bdf8" font-family="'Courier New', monospace">✓ Dashboard → http://127.0.0.1:5747</text>
143
143
  <text x="668" y="504" font-size="11" fill="#6e7681" font-family="'Courier New', monospace"> SSE live · zero telemetry · localhost only</text>
144
144
 
145
- <text x="668" y="540" font-size="10" fill="#484f58" font-family="'Courier New', monospace">336 tests passing · MIT · Node 18+</text>
145
+ <text x="668" y="540" font-size="10" fill="#484f58" font-family="'Courier New', monospace">348 tests passing · MIT · Node 18+</text>
146
146
  <text x="668" y="558" font-size="10" fill="#484f58" font-family="'Courier New', monospace">npm i -g kodelyth-ecc OR npx kodelyth-ecc</text>
147
147
  </svg>
@@ -0,0 +1,117 @@
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
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
+ <stop offset="100%" style="stop-color:#020d08"/>
6
+ </linearGradient>
7
+ <linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="0%">
8
+ <stop offset="0%" style="stop-color:#10b981"/>
9
+ <stop offset="100%" style="stop-color:#059669"/>
10
+ </linearGradient>
11
+ <linearGradient id="termBg" x1="0%" y1="0%" x2="0%" y2="100%">
12
+ <stop offset="0%" style="stop-color:#060d07"/>
13
+ <stop offset="100%" style="stop-color:#040808"/>
14
+ </linearGradient>
15
+ <linearGradient id="accentFade" x1="0%" y1="0%" x2="100%" y2="0%">
16
+ <stop offset="0%" style="stop-color:#10b981" stop-opacity="0.8"/>
17
+ <stop offset="100%" style="stop-color:#10b981" stop-opacity="0"/>
18
+ </linearGradient>
19
+ <linearGradient id="layerPurple" x1="0%" y1="0%" x2="100%" y2="0%">
20
+ <stop offset="0%" style="stop-color:#a78bfa"/>
21
+ <stop offset="100%" style="stop-color:#7c3aed"/>
22
+ </linearGradient>
23
+ <linearGradient id="layerBlue" x1="0%" y1="0%" x2="100%" y2="0%">
24
+ <stop offset="0%" style="stop-color:#38bdf8"/>
25
+ <stop offset="100%" style="stop-color:#0284c7"/>
26
+ </linearGradient>
27
+ </defs>
28
+
29
+ <rect width="1200" height="675" fill="url(#bg)"/>
30
+ <radialGradient id="glowG" cx="10%" cy="10%" r="50%">
31
+ <stop offset="0%" style="stop-color:#10b981" stop-opacity="0.06"/>
32
+ <stop offset="100%" style="stop-color:#10b981" stop-opacity="0"/>
33
+ </radialGradient>
34
+ <rect width="1200" height="675" fill="url(#glowG)"/>
35
+ <rect x="0" y="0" width="3" height="675" fill="url(#green)"/>
36
+
37
+ <!-- Badge -->
38
+ <rect x="56" y="40" width="228" height="28" rx="4" fill="#0a1a0a" stroke="#10b981" stroke-opacity="0.5" stroke-width="1"/>
39
+ <text x="66" y="59" font-size="11" font-weight="700" fill="#10b981" letter-spacing="1.5">COMPOUND LEARNING</text>
40
+ <rect x="228" y="47" width="1" height="14" fill="#10b981" opacity="0.4"/>
41
+ <text x="236" y="59" font-size="11" font-weight="500" fill="#484f58">v1.7.4</text>
42
+
43
+ <!-- Headline -->
44
+ <text x="56" y="126" font-size="52" font-weight="900" letter-spacing="-2" fill="#ffffff">Gets smarter</text>
45
+ <text x="56" y="184" font-size="52" font-weight="900" letter-spacing="-2" fill="url(#green)">every session.</text>
46
+ <text x="56" y="222" font-size="16" fill="#8b949e">Three layers that stack. Corrections become rules. Rules become instinct.</text>
47
+
48
+ <rect x="56" y="244" width="480" height="1" fill="url(#accentFade)"/>
49
+
50
+ <!-- Session flow diagram -->
51
+ <rect x="56" y="260" width="660" height="340" rx="8" fill="url(#termBg)" stroke="#0d1f0d" stroke-width="1"/>
52
+ <rect x="56" y="260" width="660" height="32" rx="8" fill="#07100a"/>
53
+ <rect x="56" y="280" width="660" height="12" fill="#07100a"/>
54
+ <circle cx="80" cy="276" r="5" fill="#0a180a"/>
55
+ <circle cx="98" cy="276" r="5" fill="#0a1208"/>
56
+ <circle cx="116" cy="276" r="5" fill="#0a1a0a"/>
57
+ <text x="576" y="281" font-size="11" fill="#484f58" text-anchor="middle" font-family="'Consolas', 'SF Mono', monospace">compound learning flow</text>
58
+
59
+ <!-- Session 1 -->
60
+ <text x="80" y="316" font-size="11" fill="#484f58" font-weight="700" letter-spacing="1" font-family="'Consolas', 'SF Mono', monospace">SESSION 1</text>
61
+ <text x="80" y="338" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#8b949e">User: "use pnpm not npm"</text>
62
+ <text x="80" y="358" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192; capture-correction.js writes to</text>
63
+ <text x="80" y="374" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#10b981" font-weight="600"> tasks/lessons.md</text>
64
+
65
+ <line x1="80" y1="390" x2="690" y2="390" stroke="#0d2010" stroke-width="1"/>
66
+
67
+ <!-- Session 2 -->
68
+ <text x="80" y="410" font-size="11" fill="#484f58" font-weight="700" letter-spacing="1" font-family="'Consolas', 'SF Mono', monospace">SESSION 2 (next day)</text>
69
+ <text x="80" y="432" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192; read-lessons.js fires at start</text>
70
+ <text x="80" y="452" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#10b981" font-weight="600">&#x2192; "PROJECT LESSONS — use pnpm not npm"</text>
71
+ <text x="80" y="472" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#8b949e">Claude uses pnpm. Always. Without being told.</text>
72
+
73
+ <line x1="80" y1="488" x2="690" y2="488" stroke="#0d2010" stroke-width="1"/>
74
+
75
+ <!-- Month 3 -->
76
+ <text x="80" y="508" font-size="11" fill="#10b981" font-weight="700" letter-spacing="1" font-family="'Consolas', 'SF Mono', monospace">MONTH 3 (compounding)</text>
77
+ <text x="80" y="530" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#8b949e">Lessons stack. Memory recalls cross-project solutions.</text>
78
+ <text x="80" y="550" font-size="13" font-family="'Consolas', 'SF Mono', monospace" fill="#10b981" font-weight="600">Claude works like a teammate who has been here for years.</text>
79
+ <text x="80" y="580" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">Zero cloud. Zero telemetry. Everything stays on your machine.</text>
80
+
81
+ <!-- Right panel — 3 layers -->
82
+ <!-- Layer 1 -->
83
+ <rect x="748" y="260" width="400" height="104" rx="8" fill="#0a1a0a" stroke="#10b981" stroke-opacity="0.3" stroke-width="1"/>
84
+ <rect x="748" y="260" width="3" height="104" rx="1" fill="url(#green)"/>
85
+ <text x="770" y="285" font-size="10" font-weight="700" fill="#10b981" letter-spacing="1.5">LAYER 1 — PROJECT LESSONS</text>
86
+ <text x="770" y="306" font-size="13" fill="#8b949e">tasks/lessons.md · per-project</text>
87
+ <text x="770" y="324" font-size="12" fill="#484f58">Corrections encoded as hard rules.</text>
88
+ <text x="770" y="340" font-size="12" fill="#484f58">Injected at session start. Always.</text>
89
+ <text x="770" y="356" font-size="11" fill="#2d5a2d">capture-correction.js · read-lessons.js</text>
90
+
91
+ <!-- Layer 2 -->
92
+ <rect x="748" y="378" width="400" height="104" rx="8" fill="#0c0c1a" stroke="#a78bfa" stroke-opacity="0.3" stroke-width="1"/>
93
+ <rect x="748" y="378" width="3" height="104" rx="1" fill="url(#layerPurple)"/>
94
+ <text x="770" y="403" font-size="10" font-weight="700" fill="#a78bfa" letter-spacing="1.5">LAYER 2 — GLOBAL MEMORY</text>
95
+ <text x="770" y="424" font-size="13" fill="#8b949e">~/.kodelyth/memory/ · cross-project</text>
96
+ <text x="770" y="442" font-size="12" fill="#484f58">BM25 recall of past solutions.</text>
97
+ <text x="770" y="460" font-size="12" fill="#484f58">Auto-recalled on every prompt you type.</text>
98
+ <text x="770" y="474" font-size="11" fill="#2a1e4a">memory-capture.js · auto-recall.js</text>
99
+
100
+ <!-- Layer 3 -->
101
+ <rect x="748" y="496" width="400" height="104" rx="8" fill="#091520" stroke="#38bdf8" stroke-opacity="0.3" stroke-width="1"/>
102
+ <rect x="748" y="496" width="3" height="104" rx="1" fill="url(#layerBlue)"/>
103
+ <text x="770" y="521" font-size="10" font-weight="700" fill="#38bdf8" letter-spacing="1.5">LAYER 3 — SEMANTIC ROUTING</text>
104
+ <text x="770" y="542" font-size="13" fill="#8b949e">70 specialist agents · always-on</text>
105
+ <text x="770" y="560" font-size="12" fill="#484f58">Routes every message to the right expert.</text>
106
+ <text x="770" y="578" font-size="12" fill="#484f58">No agent names needed — just describe it.</text>
107
+ <text x="770" y="592" font-size="11" fill="#0a2030">agent-intent-routing.md</text>
108
+
109
+ <!-- Bottom bar -->
110
+ <rect x="0" y="637" width="1200" height="38" fill="#07080f"/>
111
+ <line x1="0" y1="637" x2="1200" y2="637" stroke="#1e1e2e" stroke-width="1"/>
112
+ <text x="56" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#10b981" font-weight="600">npx kodelyth-ecc</text>
113
+ <text x="206" y="661" font-size="12" fill="#2d3340">&#xB7;</text>
114
+ <text x="222" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">github.com/sifxprime/kodelyth-ecc</text>
115
+ <text x="562" y="661" font-size="12" fill="#2d3340">&#xB7;</text>
116
+ <text x="578" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">MIT · zero cloud · zero telemetry</text>
117
+ </svg>
@@ -0,0 +1,228 @@
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
+ <defs>
3
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
+ <stop offset="60%" style="stop-color:#0a0508"/>
6
+ <stop offset="100%" style="stop-color:#060309"/>
7
+ </linearGradient>
8
+ <linearGradient id="redGrad" x1="0%" y1="0%" x2="100%" y2="0%">
9
+ <stop offset="0%" style="stop-color:#ef4444"/>
10
+ <stop offset="100%" style="stop-color:#dc2626"/>
11
+ </linearGradient>
12
+ <linearGradient id="termBg" x1="0%" y1="0%" x2="0%" y2="100%">
13
+ <stop offset="0%" style="stop-color:#0c0c14"/>
14
+ <stop offset="100%" style="stop-color:#080810"/>
15
+ </linearGradient>
16
+ <linearGradient id="badgeGrad" x1="0%" y1="0%" x2="100%" y2="0%">
17
+ <stop offset="0%" style="stop-color:#2d0a0a"/>
18
+ <stop offset="100%" style="stop-color:#1a0505"/>
19
+ </linearGradient>
20
+ <linearGradient id="barCrit" x1="0%" y1="0%" x2="100%" y2="0%">
21
+ <stop offset="0%" style="stop-color:#ef4444"/>
22
+ <stop offset="100%" style="stop-color:#b91c1c"/>
23
+ </linearGradient>
24
+ <linearGradient id="barHigh" x1="0%" y1="0%" x2="100%" y2="0%">
25
+ <stop offset="0%" style="stop-color:#f97316"/>
26
+ <stop offset="100%" style="stop-color:#ea580c"/>
27
+ </linearGradient>
28
+ <linearGradient id="barClear" x1="0%" y1="0%" x2="100%" y2="0%">
29
+ <stop offset="0%" style="stop-color:#22c55e"/>
30
+ <stop offset="100%" style="stop-color:#16a34a"/>
31
+ </linearGradient>
32
+ <linearGradient id="accentLine" x1="0%" y1="0%" x2="100%" y2="0%">
33
+ <stop offset="0%" style="stop-color:#ef4444" stop-opacity="0.8"/>
34
+ <stop offset="50%" style="stop-color:#dc2626" stop-opacity="0.4"/>
35
+ <stop offset="100%" style="stop-color:#ef4444" stop-opacity="0"/>
36
+ </linearGradient>
37
+ </defs>
38
+
39
+ <!-- Background -->
40
+ <rect width="1200" height="675" fill="url(#bgGrad)"/>
41
+
42
+ <!-- Subtle background texture — faint grid lines -->
43
+ <line x1="0" y1="225" x2="1200" y2="225" stroke="#ef4444" stroke-opacity="0.025" stroke-width="1"/>
44
+ <line x1="0" y1="450" x2="1200" y2="450" stroke="#ef4444" stroke-opacity="0.025" stroke-width="1"/>
45
+ <line x1="400" y1="0" x2="400" y2="675" stroke="#ef4444" stroke-opacity="0.02" stroke-width="1"/>
46
+ <line x1="800" y1="0" x2="800" y2="675" stroke="#ef4444" stroke-opacity="0.02" stroke-width="1"/>
47
+
48
+ <!-- Ambient red glow — top-left corner, very subtle -->
49
+ <radialGradient id="glowTL" cx="0%" cy="0%" r="60%">
50
+ <stop offset="0%" style="stop-color:#ef4444" stop-opacity="0.07"/>
51
+ <stop offset="100%" style="stop-color:#ef4444" stop-opacity="0"/>
52
+ </radialGradient>
53
+ <rect width="1200" height="675" fill="url(#glowTL)"/>
54
+
55
+ <!-- Left border accent line -->
56
+ <rect x="0" y="0" width="3" height="675" fill="url(#redGrad)"/>
57
+
58
+ <!-- ============================================================ -->
59
+ <!-- TOP BADGE -->
60
+ <!-- ============================================================ -->
61
+ <rect x="56" y="40" width="198" height="28" rx="4" fill="url(#badgeGrad)" stroke="#ef4444" stroke-opacity="0.5" stroke-width="1"/>
62
+ <text x="66" y="59" font-size="11" font-weight="700" fill="#ef4444" letter-spacing="1.5">DEVIL MODE</text>
63
+ <rect x="164" y="47" width="1" height="14" fill="#ef4444" opacity="0.4"/>
64
+ <text x="172" y="59" font-size="11" font-weight="500" fill="#484f58" letter-spacing="0.5">v1.7.4</text>
65
+
66
+ <!-- ============================================================ -->
67
+ <!-- MAIN HEADLINE -->
68
+ <!-- ============================================================ -->
69
+ <text x="56" y="126" font-size="52" font-weight="900" letter-spacing="-2" fill="#ffffff">8 agents read your code</text>
70
+ <text x="56" y="184" font-size="52" font-weight="900" letter-spacing="-2" fill="url(#redGrad)">like an attacker.</text>
71
+
72
+ <!-- Subline -->
73
+ <text x="56" y="220" font-size="16" font-weight="400" fill="#8b949e" letter-spacing="0.2">Prompt injection. Supply chain. Secrets. Backdoors. Jailbreaks. All parallel.</text>
74
+
75
+ <!-- Separator line -->
76
+ <rect x="56" y="242" width="500" height="1" fill="url(#accentLine)"/>
77
+
78
+ <!-- ============================================================ -->
79
+ <!-- TERMINAL BLOCK — left panel -->
80
+ <!-- ============================================================ -->
81
+ <rect x="56" y="258" width="680" height="348" rx="8" fill="url(#termBg)" stroke="#1e1e2e" stroke-width="1"/>
82
+ <!-- Terminal top bar -->
83
+ <rect x="56" y="258" width="680" height="32" rx="8" fill="#0f0f1a"/>
84
+ <rect x="56" y="278" width="680" height="12" fill="#0f0f1a"/>
85
+ <!-- Traffic lights -->
86
+ <circle cx="80" cy="274" r="5" fill="#2d1b1b"/>
87
+ <circle cx="98" cy="274" r="5" fill="#2a1a10"/>
88
+ <circle cx="116" cy="274" r="5" fill="#0f1a10"/>
89
+ <!-- Terminal title -->
90
+ <text x="600" y="279" font-size="11" fill="#484f58" text-anchor="middle" font-family="'Consolas', 'SF Mono', monospace">bash — devil-mode</text>
91
+
92
+ <!-- Command line -->
93
+ <text x="80" y="314" font-size="13" font-family="'Consolas', 'SF Mono', 'Courier New', monospace" fill="#ef4444" font-weight="700">/devil-mode --all</text>
94
+
95
+ <!-- Agent rows — each row: arrow + name + progress bar + status label -->
96
+ <!-- Row 1: prompt-injection-hunter CRITICAL: 2 -->
97
+ <text x="80" y="343" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
98
+ <text x="100" y="343" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">prompt-injection-hunter</text>
99
+ <rect x="330" y="331" width="186" height="9" rx="2" fill="#1a1a2a"/>
100
+ <rect x="330" y="331" width="186" height="9" rx="2" fill="url(#barCrit)"/>
101
+ <text x="526" y="342" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#ef4444" font-weight="700"> CRITICAL: 2</text>
102
+
103
+ <!-- Row 2: supply-chain-auditor HIGH: 1 -->
104
+ <text x="80" y="368" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
105
+ <text x="100" y="368" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">supply-chain-auditor</text>
106
+ <rect x="330" y="356" width="186" height="9" rx="2" fill="#1a1a2a"/>
107
+ <rect x="330" y="356" width="186" height="9" rx="2" fill="url(#barHigh)"/>
108
+ <text x="526" y="367" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#f97316" font-weight="700"> HIGH: 1</text>
109
+
110
+ <!-- Row 3: secret-hunter CLEAR -->
111
+ <text x="80" y="393" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
112
+ <text x="100" y="393" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">secret-hunter</text>
113
+ <rect x="330" y="381" width="186" height="9" rx="2" fill="#1a1a2a"/>
114
+ <rect x="330" y="381" width="186" height="9" rx="2" fill="url(#barClear)"/>
115
+ <text x="526" y="392" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#22c55e" font-weight="700"> CLEAR</text>
116
+
117
+ <!-- Row 4: backdoor-hunter CLEAR -->
118
+ <text x="80" y="418" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
119
+ <text x="100" y="418" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">backdoor-hunter</text>
120
+ <rect x="330" y="406" width="186" height="9" rx="2" fill="#1a1a2a"/>
121
+ <rect x="330" y="406" width="186" height="9" rx="2" fill="url(#barClear)"/>
122
+ <text x="526" y="417" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#22c55e" font-weight="700"> CLEAR</text>
123
+
124
+ <!-- Row 5: jailbreak-tester HIGH: 1 -->
125
+ <text x="80" y="443" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
126
+ <text x="100" y="443" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">jailbreak-tester</text>
127
+ <rect x="330" y="431" width="186" height="9" rx="2" fill="#1a1a2a"/>
128
+ <rect x="330" y="431" width="186" height="9" rx="2" fill="url(#barHigh)"/>
129
+ <text x="526" y="442" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#f97316" font-weight="700"> HIGH: 1</text>
130
+
131
+ <!-- Row 6: license-violation-finder CLEAR -->
132
+ <text x="80" y="468" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
133
+ <text x="100" y="468" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">license-violation-finder</text>
134
+ <rect x="330" y="456" width="186" height="9" rx="2" fill="#1a1a2a"/>
135
+ <rect x="330" y="456" width="186" height="9" rx="2" fill="url(#barClear)"/>
136
+ <text x="526" y="467" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#22c55e" font-weight="700"> CLEAR</text>
137
+
138
+ <!-- Row 7: code-stealer-detector CLEAR -->
139
+ <text x="80" y="493" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
140
+ <text x="100" y="493" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">code-stealer-detector</text>
141
+ <rect x="330" y="481" width="186" height="9" rx="2" fill="#1a1a2a"/>
142
+ <rect x="330" y="481" width="186" height="9" rx="2" fill="url(#barClear)"/>
143
+ <text x="526" y="492" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#22c55e" font-weight="700"> CLEAR</text>
144
+
145
+ <!-- Row 8: chaos-engineer HIGH: 3 -->
146
+ <text x="80" y="518" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">&#x2192;</text>
147
+ <text x="100" y="518" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#e6edf3">chaos-engineer</text>
148
+ <rect x="330" y="506" width="186" height="9" rx="2" fill="#1a1a2a"/>
149
+ <rect x="330" y="506" width="186" height="9" rx="2" fill="url(#barHigh)"/>
150
+ <text x="526" y="517" font-size="11" font-family="'Consolas', 'SF Mono', monospace" fill="#f97316" font-weight="700"> HIGH: 3</text>
151
+
152
+ <!-- Summary line -->
153
+ <line x1="80" y1="536" x2="710" y2="536" stroke="#1e1e2e" stroke-width="1"/>
154
+ <text x="80" y="556" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">60 min</text>
155
+ <text x="138" y="556" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#ef4444" font-weight="700">&#x2192;</text>
156
+ <text x="158" y="556" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#22c55e" font-weight="700">8 min</text>
157
+ <text x="214" y="556" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58"> &#xB7; 3 issues need your attention</text>
158
+
159
+ <!-- ============================================================ -->
160
+ <!-- RIGHT PANEL — stats / context -->
161
+ <!-- ============================================================ -->
162
+
163
+ <!-- Stat box 1: Agents -->
164
+ <rect x="768" y="258" width="392" height="100" rx="8" fill="#0c0c16" stroke="#1e1a28" stroke-width="1"/>
165
+ <rect x="768" y="258" width="3" height="100" rx="1" fill="url(#redGrad)"/>
166
+ <text x="788" y="292" font-size="40" font-weight="900" fill="#ef4444" letter-spacing="-1">8</text>
167
+ <text x="836" y="292" font-size="15" font-weight="700" fill="#e6edf3">adversarial agents</text>
168
+ <text x="836" y="314" font-size="12" fill="#484f58">firing simultaneously in parallel</text>
169
+ <text x="836" y="332" font-size="12" fill="#484f58">— no sequential bottleneck</text>
170
+
171
+ <!-- Stat box 2: Time -->
172
+ <rect x="768" y="374" width="392" height="100" rx="8" fill="#0c0c16" stroke="#1e1a28" stroke-width="1"/>
173
+ <rect x="768" y="374" width="3" height="100" rx="1" fill="url(#redGrad)"/>
174
+ <text x="788" y="408" font-size="40" font-weight="900" fill="#ef4444" letter-spacing="-1">7x</text>
175
+ <text x="850" y="408" font-size="15" font-weight="700" fill="#e6edf3">faster than sequential</text>
176
+ <text x="788" y="430" font-size="12" fill="#484f58">8 min full adversarial sweep</text>
177
+ <text x="788" y="448" font-size="12" fill="#484f58">vs. 60 min doing each by hand</text>
178
+
179
+ <!-- Stat box 3: Coverage -->
180
+ <rect x="768" y="490" width="392" height="116" rx="8" fill="#0c0c16" stroke="#1e1a28" stroke-width="1"/>
181
+ <rect x="768" y="490" width="3" height="116" rx="1" fill="url(#redGrad)"/>
182
+ <text x="788" y="520" font-size="13" font-weight="700" fill="#e6edf3">Attack surface covered</text>
183
+ <!-- Tag pills -->
184
+ <rect x="788" y="530" width="78" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
185
+ <text x="796" y="544" font-size="10" fill="#ef4444">AI injection</text>
186
+
187
+ <rect x="874" y="530" width="92" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
188
+ <text x="882" y="544" font-size="10" fill="#ef4444">supply chain</text>
189
+
190
+ <rect x="974" y="530" width="62" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
191
+ <text x="982" y="544" font-size="10" fill="#ef4444">secrets</text>
192
+
193
+ <rect x="788" y="558" width="72" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
194
+ <text x="796" y="572" font-size="10" fill="#ef4444">backdoors</text>
195
+
196
+ <rect x="868" y="558" width="80" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
197
+ <text x="876" y="572" font-size="10" fill="#ef4444">jailbreaks</text>
198
+
199
+ <rect x="956" y="558" width="60" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
200
+ <text x="964" y="572" font-size="10" fill="#ef4444">licenses</text>
201
+
202
+ <rect x="788" y="586" width="94" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
203
+ <text x="796" y="600" font-size="10" fill="#ef4444">code provenance</text>
204
+
205
+ <rect x="890" y="586" width="56" height="20" rx="3" fill="#2d0a0a" stroke="#ef4444" stroke-opacity="0.35" stroke-width="1"/>
206
+ <text x="898" y="600" font-size="10" fill="#ef4444">chaos</text>
207
+
208
+ <!-- ============================================================ -->
209
+ <!-- BOTTOM BAR -->
210
+ <!-- ============================================================ -->
211
+ <rect x="0" y="637" width="1200" height="38" fill="#07080f"/>
212
+ <line x1="0" y1="637" x2="1200" y2="637" stroke="#1e1e2e" stroke-width="1"/>
213
+
214
+ <!-- Left: npx install command -->
215
+ <text x="56" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#ef4444" font-weight="600">npx kodelyth-ecc</text>
216
+
217
+ <!-- Dot separator -->
218
+ <text x="206" y="661" font-size="12" fill="#2d3340">&#xB7;</text>
219
+
220
+ <!-- GitHub URL -->
221
+ <text x="222" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">github.com/sifxprime/kodelyth-ecc</text>
222
+
223
+ <!-- Dot separator -->
224
+ <text x="562" y="661" font-size="12" fill="#2d3340">&#xB7;</text>
225
+
226
+ <!-- MIT license -->
227
+ <text x="578" y="661" font-size="12" font-family="'Consolas', 'SF Mono', monospace" fill="#484f58">MIT</text>
228
+ </svg>