kodelyth-ecc 1.7.4 → 1.8.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +12 -9
  4. package/SECURITY.md +5 -6
  5. package/VERSION +1 -1
  6. package/brand/concepts.svg +109 -0
  7. package/brand/convert.js +161 -0
  8. package/brand/favicon.svg +7 -0
  9. package/brand/fb-cover.svg +34 -0
  10. package/brand/fb-profile.svg +21 -0
  11. package/brand/kodelyth-dark.svg +24 -0
  12. package/brand/kodelyth-light.svg +24 -0
  13. package/brand/kodelyth-mark.svg +20 -0
  14. package/brand/package.json +12 -0
  15. package/bundles/enterprise.md +1 -1
  16. package/bundles/indie-hacker.md +1 -1
  17. package/bundles/red-team.md +1 -1
  18. package/hooks/hooks.json +13 -0
  19. package/hooks/memory/auto-resolve.js +68 -0
  20. package/hooks/memory/capture-correction.js +16 -0
  21. package/hooks/memory/capture-stop.js +70 -14
  22. package/package.json +1 -1
  23. package/rules/common/agents.md +1 -1
  24. package/rules/common/self-improvement-workflow.md +2 -2
  25. package/scripts/dashboard/data.js +1 -1
  26. package/scripts/dashboard/server.js +1 -1
  27. package/scripts/memory/instincts.js +282 -0
  28. package/scripts/memory/store.js +104 -0
  29. package/social/card-agents.svg +13 -1
  30. package/social/card-install.svg +13 -1
  31. package/social/card-main.svg +13 -1
  32. package/social/facebook-v150.svg +27 -13
  33. package/social/fb-ad-main.svg +128 -0
  34. package/social/fb-post-features.svg +118 -0
  35. package/social/fb-post-launch.svg +144 -0
  36. package/social/fb-post-platforms.svg +135 -0
  37. package/social/github-social-preview.svg +143 -139
  38. package/social/hype-compound-learning.svg +21 -9
  39. package/social/hype-devil-mode.svg +20 -8
  40. package/social/hype-mcp-server.svg +20 -8
  41. package/social/hype-parallel-agents.svg +20 -8
  42. package/social/hype-stats-hero.svg +15 -3
  43. package/social/og-image.svg +151 -0
  44. package/social/readme-agents.svg +14 -2
  45. package/social/readme-hero.svg +17 -4
  46. package/social/section-agents.svg +12 -0
  47. package/social/section-author.svg +12 -0
  48. package/social/section-dashboard.svg +12 -0
  49. package/social/section-devil.svg +12 -0
  50. package/social/section-hooks.svg +12 -0
  51. package/social/section-install.svg +12 -0
  52. package/social/section-learning.svg +12 -0
  53. package/social/section-mcp.svg +13 -1
  54. package/social/section-memory.svg +12 -0
  55. package/social/section-parallel.svg +12 -0
  56. package/social/section-routing.svg +12 -0
  57. package/social/twitter-threads.md +3 -3
  58. package/social/x-card-agents-grid.svg +14 -2
  59. package/social/x-card-free.svg +14 -2
  60. package/social/x-card-hook.svg +17 -5
  61. package/tests/memory/instincts.test.js +258 -0
  62. package/tests/memory/store.test.js +82 -0
  63. package/wiki/FAQ.md +1 -1
  64. package/wiki/Home.md +3 -3
  65. package/wiki/Installation-Guide.md +2 -2
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to Kodelyth ECC are documented here.
4
4
 
5
+ ## v1.8.0 — Visual system overhaul + SVG polish (May 2026)
6
+
7
+ Comprehensive overhaul of all 31 social assets. GitHub social preview and OG image rebuilt with two-panel stat card layout. All text overflow issues fixed across the full SVG set. Test counts updated to 373. PNG exports regenerated at 4K only.
8
+
9
+ ### Changed
10
+
11
+ - `github-social-preview.svg`, `og-image.svg` — full redesign: two-panel layout (brand mark left, 2×2 stat cards right), dot grid texture, amber accent on SKILLS card and AGENTS top bar, platform rows in footer
12
+ - `og-image.svg`, `github-social-preview.svg` — KODELYTH wordmark font-size/letter-spacing reduced so text stays within the left panel (no overflow past separator)
13
+ - `facebook-v150.svg` — stat section overflow fix: "70" numeral baseline raised so cap-top sits below separator line; divider lines extended to fully contain the numeral
14
+ - `hype-compound-learning.svg`, `hype-devil-mode.svg`, `hype-mcp-server.svg`, `hype-parallel-agents.svg` — bottom bar rect and text shifted up 8 px to give descenders safe margin from canvas edge
15
+ - `hype-stats-hero.svg`, `fb-post-platforms.svg` — test counts updated: 336/348 → 373, 24 → 25 test files
16
+ - All 31 social SVGs: v1.7.5 → v1.8.0 version badge
17
+ - Ghost Depth Mark applied across all social assets; favicon and og-image added for kodelyth.com (carried from v1.7.5)
18
+ - PNG exports: all 31 assets regenerated at 4× scale (4K); fullhd 2× exports removed
19
+ - README test badge: 336 → 373 passing
20
+ - SECURITY.md supported versions table updated to reflect 1.8.x as current stable
21
+
5
22
  ## v1.7.4 — Real-time IDE-aware dashboard + cross-IDE memory protocol (May 2026)
6
23
 
7
24
  The dashboard now sees what every IDE on the machine is doing in real time, not just Claude Code. Memory continuity across IDEs is documented and operationalised through the universal `memory-protocol.md` rule and the existing MCP tool surface.
@@ -13,7 +30,7 @@ The dashboard now sees what every IDE on the machine is doing in real time, not
13
30
  - New `KODELYTH_EXTRA_IDE_WATCH` env var (comma / semicolon / colon separated) so power users can wire arbitrary directories into the realtime watcher
14
31
  - New `KODELYTH_WINDSURF_NEXT_DIR`, `KODELYTH_CURSOR_DIR`, `KODELYTH_ANTIGRAVITY_DIR` env-var overrides for non-default IDE install paths
15
32
  - New section in `README.md` — **"Memory & dashboard reality per IDE"** — explicit truth table of what auto-recall, auto-capture, manual recall, and dashboard activity look like per platform
16
- - 12 new tests (`tests/dashboard/data.test.js` + `server.test.js`) covering windsurf-next, cursor, antigravity, custom watch paths, and SSE behaviour. Total: **336 → 348 tests, all passing**
33
+ - 12 new tests (`tests/dashboard/data.test.js` + `server.test.js`) covering windsurf-next, cursor, antigravity, custom watch paths, and SSE behaviour. Total: **336 → 373 tests, all passing**
17
34
 
18
35
  ### Changed
19
36
 
package/CLAUDE.md CHANGED
@@ -26,7 +26,7 @@ scripts/ → Node.js utilities: MCP server, dashboard, swarm, replay, router
26
26
  bundles/ → 3 power bundles (indie-hacker, red-team, enterprise)
27
27
  actions/ → GitHub Action (CI/CD integration for PR review)
28
28
  docs/ → Feature docs (mcp.md, dashboard.md, swarm.md, replay.md, evolve.md, supply-chain.md)
29
- tests/ → 336 passing tests across 24 test files
29
+ tests/ → 373 passing tests across 25 test files
30
30
  ```
31
31
 
32
32
  ## Running Tests
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![npm downloads](https://img.shields.io/npm/dm/kodelyth-ecc.svg)](https://www.npmjs.com/package/kodelyth-ecc)
7
7
  [![GitHub Stars](https://img.shields.io/github/stars/sifxprime/kodelyth-ecc?style=social)](https://github.com/sifxprime/kodelyth-ecc/stargazers)
8
8
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9
- ![Tests](https://img.shields.io/badge/tests-336%20passing-brightgreen)
9
+ ![Tests](https://img.shields.io/badge/tests-373%20passing-brightgreen)
10
10
  ![Claude Code](https://img.shields.io/badge/Claude%20Code-Ready-8A2BE2)
11
11
  ![Windsurf](https://img.shields.io/badge/Windsurf-Ready-06b6d4)
12
12
  ![Antigravity](https://img.shields.io/badge/Antigravity-Ready-00ADD8)
@@ -77,7 +77,7 @@ You never typed `use debug-detective`. You didn't have to. The toolkit read the
77
77
  | Quality hooks | ✅ 22+ | Some | ❌ | ❌ |
78
78
  | IDE platforms | **11** (Claude Code, Windsurf, Cursor, Codex, Antigravity, OpenCode, Cline, Roo Code, Aider, Kimi, Gemini CLI) | 1-2 | 1 | Varies |
79
79
  | Telemetry | ❌ none | Varies | ❌ | Varies |
80
- | Test coverage | ✅ 348 tests | ❌ | ❌ | ❌ |
80
+ | Test coverage | ✅ 373 tests | ❌ | ❌ | ❌ |
81
81
  | Distributed via | `npx`, curl, clone | Manual | Manual | Manual |
82
82
 
83
83
  ---
@@ -545,6 +545,10 @@ Project: **my-app**
545
545
  <img src="social/section-agents.svg" alt="70 specialist agents — one for every situation" width="900"/>
546
546
  </div>
547
547
 
548
+ <div align="center">
549
+ <img src="social/readme-agents.svg" alt="70 specialist agents — agent grid preview" width="900"/>
550
+ </div>
551
+
548
552
  ### Kodelyth Exclusives — The 16 Agents That Make ECC
549
553
 
550
554
  | Agent | One-line job |
@@ -785,13 +789,12 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for templates, checklists, and the full K
785
789
 
786
790
  ## Changelog
787
791
 
788
- See [CHANGELOG.md](CHANGELOG.md). v1.7.4 highlights:
792
+ See [CHANGELOG.md](CHANGELOG.md). v1.8.0 highlights:
789
793
 
790
- - **Real-time IDE-aware dashboard** — Sessions tab now surfaces live Claude Code / Windsurf / Windsurf-Next / Cursor / Antigravity activity; SSE poll 10 s 3 s; new `/api/ide-sessions` endpoint
791
- - **Cross-IDE memory protocol** — `rules/common/memory-protocol.md` now explicitly instructs non-Claude IDEs (Windsurf, Cursor, Codex, Antigravity) to call the `recall_memory` and `capture_memory` MCP tools proactively
792
- - **`KODELYTH_EXTRA_IDE_WATCH` env var** — add custom watch paths to the dashboard (comma/semicolon/colon-separated)
793
- - **Watch-path fixes** — broken `proposals.jsonl`-only watch now also watches `routing-misses.jsonl` and the `token-budget/` directory
794
- - **+12 dashboard tests** for IDE platform coverage and cross-platform path resolution
794
+ - **Visual system overhaul** — `github-social-preview.svg` and `og-image.svg` fully redesigned with two-panel layout: brand left, 2×2 stat cards right, dot grid texture, amber accent
795
+ - **SVG overflow fixes** — KODELYTH wordmark, bottom bar text, and stats numerals all corrected to stay within canvas bounds across all 31 social assets
796
+ - **Test count update** — 373 tests across 25 test files (up from 348)
797
+ - **4K PNG exports** — all 31 social assets regenerated at scale; fullhd exports removed
795
798
 
796
799
  v1.7.3 highlights:
797
800
 
@@ -802,7 +805,7 @@ v1.7.0 highlights:
802
805
  - **MCP Server** — 16 tools, 6 prompts, 377 resources; stdio JSON-RPC; zero telemetry; works with Claude Desktop, LangGraph, AutoGen, CrewAI, OpenAI Agents SDK
803
806
  - **Dashboard hardening** — DNS rebinding protection, shell injection fix (`execFileSync`), CSP on all responses, SSE client cap (max 10), TOCTOU fixes
804
807
  - **Devil Mode** — 8 adversarial agents, `--pre-public` / `--pre-launch` / `--all` flags, real bash-grep patterns and remediation playbooks
805
- - **336 tests** passing across 24 test files (now 348 at v1.7.4)
808
+ - **336 tests** passing across 25 test files (now 373 at v1.8.0)
806
809
 
807
810
  v1.5.8 highlights:
808
811
 
package/SECURITY.md CHANGED
@@ -4,12 +4,11 @@
4
4
 
5
5
  | Version | Supported |
6
6
  |---------|-----------|
7
- | 1.5.x | Yes — current stable |
8
- | 1.4.x | Yes — security fixes only |
9
- | 1.3.x | Yes — security fixes only |
10
- | 1.2.x | No — upgrade to 1.5.x |
11
- | 1.1.x | No — upgrade to 1.5.x |
12
- | 1.0.x | No — upgrade to 1.5.x |
7
+ | 1.8.x | Yes — current stable |
8
+ | 1.7.x | Yes — security fixes only |
9
+ | 1.6.x | Yes — security fixes only |
10
+ | 1.5.x | No — upgrade to 1.8.x |
11
+ | < 1.5 | No — upgrade to 1.8.x |
13
12
  | < 1.0 | No |
14
13
 
15
14
  ---
package/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.4
1
+ 1.7.5
@@ -0,0 +1,109 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 400" width="920" height="400"
2
+ font-family="'Space Grotesk','Inter',system-ui,-apple-system,sans-serif">
3
+
4
+ <rect width="920" height="400" fill="#ffffff"/>
5
+
6
+ <!-- grid lines -->
7
+ <line x1="230" y1="0" x2="230" y2="400" stroke="#f1f5f9" stroke-width="1"/>
8
+ <line x1="460" y1="0" x2="460" y2="400" stroke="#f1f5f9" stroke-width="1"/>
9
+ <line x1="690" y1="0" x2="690" y2="400" stroke="#f1f5f9" stroke-width="1"/>
10
+ <line x1="0" y1="195" x2="920" y2="195" stroke="#f1f5f9" stroke-width="1"/>
11
+
12
+
13
+ <!-- ═══ ROW 1 ═══════════════════════════════════════════════════════════ -->
14
+
15
+ <!-- 01 · Stroke chevron — the baseline -->
16
+ <text x="115" y="26" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">01</text>
17
+ <g transform="translate(115,95)">
18
+ <polyline points="-16,-28 16,0 -16,28"
19
+ stroke="#0f172a" stroke-width="7.5"
20
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
21
+ </g>
22
+ <text x="115" y="158" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
23
+ <text x="115" y="175" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">STROKE</text>
24
+
25
+
26
+ <!-- 02 · Filled chevron (open back) -->
27
+ <text x="345" y="26" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">02</text>
28
+ <g transform="translate(345,95)">
29
+ <polygon points="-14,-29 18,0 -14,29 -3,29 11,0 -3,-29" fill="#0f172a"/>
30
+ </g>
31
+ <text x="345" y="158" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
32
+ <text x="345" y="175" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">FILLED OPEN</text>
33
+
34
+
35
+ <!-- 03 · Filled triangle (closed back — most Vercel) -->
36
+ <text x="575" y="26" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">03</text>
37
+ <g transform="translate(575,95)">
38
+ <polygon points="-18,-28 20,0 -18,28" fill="#0f172a"/>
39
+ </g>
40
+ <text x="575" y="158" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
41
+ <text x="575" y="175" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">SOLID WEDGE</text>
42
+
43
+
44
+ <!-- 04 · Double chevron >> -->
45
+ <text x="805" y="26" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">04</text>
46
+ <g transform="translate(805,95)">
47
+ <polyline points="-22,-26 -2,0 -22,26"
48
+ stroke="#0f172a" stroke-width="5.5"
49
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
50
+ <polyline points="-4,-26 16,0 -4,26"
51
+ stroke="#0f172a" stroke-width="5.5"
52
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
53
+ </g>
54
+ <text x="805" y="158" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
55
+ <text x="805" y="175" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">DOUBLE</text>
56
+
57
+
58
+ <!-- ═══ ROW 2 ═══════════════════════════════════════════════════════════ -->
59
+
60
+ <!-- 05 · Chevron + apex dot -->
61
+ <text x="115" y="216" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">05</text>
62
+ <g transform="translate(115,285)">
63
+ <polyline points="-18,-27 10,0 -18,27"
64
+ stroke="#0f172a" stroke-width="6.5"
65
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
66
+ <circle cx="20" cy="0" r="6" fill="#0f172a"/>
67
+ </g>
68
+ <text x="115" y="348" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
69
+ <text x="115" y="365" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">CHEVRON + NODE</text>
70
+
71
+
72
+ <!-- 06 · Bracket form — chevron with horizontal arms -->
73
+ <text x="345" y="216" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">06</text>
74
+ <g transform="translate(345,285)">
75
+ <line x1="-20" y1="-26" x2="0" y2="-26" stroke="#0f172a" stroke-width="5.5" stroke-linecap="round"/>
76
+ <polyline points="0,-26 18,0 0,26"
77
+ stroke="#0f172a" stroke-width="5.5"
78
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
79
+ <line x1="0" y1="26" x2="-20" y2="26" stroke="#0f172a" stroke-width="5.5" stroke-linecap="round"/>
80
+ </g>
81
+ <text x="345" y="348" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
82
+ <text x="345" y="365" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">BRACKET</text>
83
+
84
+
85
+ <!-- 07 · Upward caret ^ (Vercel-adjacent, growth direction) -->
86
+ <text x="575" y="216" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">07</text>
87
+ <g transform="translate(575,285)">
88
+ <polyline points="-26,20 0,-22 26,20"
89
+ stroke="#0f172a" stroke-width="7.5"
90
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
91
+ </g>
92
+ <text x="575" y="348" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
93
+ <text x="575" y="365" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">CARET UP</text>
94
+
95
+
96
+ <!-- 08 · Ghost depth — bold front + faint back -->
97
+ <text x="805" y="216" font-size="9" font-weight="600" fill="#cbd5e1" text-anchor="middle" letter-spacing="3">08</text>
98
+ <g transform="translate(805,285)">
99
+ <polyline points="-26,-26 -6,0 -26,26"
100
+ stroke="#0f172a" stroke-width="4" opacity="0.2"
101
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
102
+ <polyline points="-12,-27 14,0 -12,27"
103
+ stroke="#0f172a" stroke-width="7.5"
104
+ stroke-linecap="round" stroke-linejoin="round" fill="none"/>
105
+ </g>
106
+ <text x="805" y="348" font-size="13" font-weight="700" fill="#0f172a" text-anchor="middle" letter-spacing="1.5">KODELYTH</text>
107
+ <text x="805" y="365" font-size="8.5" fill="#94a3b8" text-anchor="middle" letter-spacing="2.5">DEPTH</text>
108
+
109
+ </svg>
@@ -0,0 +1,161 @@
1
+ /**
2
+ * brand/convert.js
3
+ * Converts all Kodelyth SVG brand assets to high-quality PNG
4
+ * Uses Chrome (puppeteer-core) for pixel-perfect font + geometry rendering
5
+ *
6
+ * Usage: node brand/convert.js
7
+ */
8
+
9
+ const puppeteer = require('puppeteer-core');
10
+ const path = require('path');
11
+ const fs = require('fs');
12
+
13
+ const CHROME = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
14
+ const BRAND_DIR = __dirname;
15
+
16
+ const ASSETS = [
17
+ // Facebook social assets — 2× for retina sharpness
18
+ {
19
+ input: 'fb-profile.svg',
20
+ output: 'fb-profile.png',
21
+ width: 800,
22
+ height: 800,
23
+ label: 'Facebook profile picture (800×800 @2x)',
24
+ },
25
+ {
26
+ input: 'fb-cover.svg',
27
+ output: 'fb-cover.png',
28
+ width: 1640,
29
+ height: 624,
30
+ label: 'Facebook cover photo (1640×624 @2x)',
31
+ },
32
+
33
+ // Standalone mark — 3× for print + high-res usage
34
+ {
35
+ input: 'kodelyth-mark.svg',
36
+ output: 'kodelyth-mark.png',
37
+ width: 1200,
38
+ height: 1200,
39
+ label: 'Kodelyth mark (1200×1200 @3x)',
40
+ },
41
+
42
+ // Horizontal lockups — 3×
43
+ {
44
+ input: 'kodelyth-dark.svg',
45
+ output: 'kodelyth-dark.png',
46
+ width: 1380,
47
+ height: 360,
48
+ label: 'Lockup dark (1380×360 @3x)',
49
+ },
50
+ {
51
+ input: 'kodelyth-light.svg',
52
+ output: 'kodelyth-light.png',
53
+ width: 1380,
54
+ height: 360,
55
+ label: 'Lockup light (1380×360 @3x)',
56
+ },
57
+
58
+ // Favicon — all required sizes
59
+ {
60
+ input: 'favicon.svg',
61
+ output: 'favicon-16.png',
62
+ width: 16,
63
+ height: 16,
64
+ label: 'Favicon 16×16',
65
+ },
66
+ {
67
+ input: 'favicon.svg',
68
+ output: 'favicon-32.png',
69
+ width: 32,
70
+ height: 32,
71
+ label: 'Favicon 32×32',
72
+ },
73
+ {
74
+ input: 'favicon.svg',
75
+ output: 'favicon-180.png',
76
+ width: 180,
77
+ height: 180,
78
+ label: 'Apple Touch Icon 180×180',
79
+ },
80
+ ];
81
+
82
+ async function convertAsset(page, asset) {
83
+ const inputPath = path.join(BRAND_DIR, asset.input);
84
+ const outputPath = path.join(BRAND_DIR, asset.output);
85
+
86
+ if (!fs.existsSync(inputPath)) {
87
+ console.error(` SKIP ${asset.input} — file not found`);
88
+ return;
89
+ }
90
+
91
+ const svgContent = fs.readFileSync(inputPath, 'utf8');
92
+
93
+ await page.setViewport({
94
+ width: asset.width,
95
+ height: asset.height,
96
+ deviceScaleFactor: 2, // render at 2× internal resolution for anti-aliasing
97
+ });
98
+
99
+ // Wrap SVG in a minimal HTML page — more reliable than opening SVG directly
100
+ const html = `<!DOCTYPE html>
101
+ <html>
102
+ <head>
103
+ <meta charset="utf-8">
104
+ <style>
105
+ * { margin: 0; padding: 0; box-sizing: border-box; }
106
+ html, body { width: ${asset.width}px; height: ${asset.height}px; overflow: hidden; background: transparent; }
107
+ svg { display: block; width: ${asset.width}px !important; height: ${asset.height}px !important; }
108
+ </style>
109
+ </head>
110
+ <body>${svgContent}</body>
111
+ </html>`;
112
+
113
+ await page.setContent(html, { waitUntil: 'domcontentloaded', timeout: 10000 });
114
+
115
+ await page.screenshot({
116
+ path: outputPath,
117
+ type: 'png',
118
+ clip: { x: 0, y: 0, width: asset.width, height: asset.height },
119
+ omitBackground: false,
120
+ });
121
+
122
+ const kb = Math.round(fs.statSync(outputPath).size / 1024);
123
+ console.log(` [DONE] ${asset.output.padEnd(28)} ${asset.label} (${kb} KB)`);
124
+ }
125
+
126
+ async function main() {
127
+ console.log('\nKodelyth Brand — SVG → PNG Converter');
128
+ console.log('--------------------------------------');
129
+
130
+ const browser = await puppeteer.launch({
131
+ executablePath: CHROME,
132
+ headless: 'new',
133
+ args: [
134
+ '--no-sandbox',
135
+ '--disable-setuid-sandbox',
136
+ '--disable-web-security', // allow file:// access
137
+ '--force-device-scale-factor=1',
138
+ ],
139
+ });
140
+
141
+ const page = await browser.newPage();
142
+
143
+ // Disable all animations so screenshots are clean
144
+ await page.addStyleTag({
145
+ content: '*, *::before, *::after { animation: none !important; transition: none !important; }',
146
+ });
147
+
148
+ for (const asset of ASSETS) {
149
+ await convertAsset(page, asset);
150
+ }
151
+
152
+ await browser.close();
153
+
154
+ console.log('\nAll PNGs written to brand/');
155
+ console.log('--------------------------------------\n');
156
+ }
157
+
158
+ main().catch(err => {
159
+ console.error('Conversion failed:', err.message);
160
+ process.exit(1);
161
+ });
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
+ <rect width="32" height="32" fill="#0a0a0a"/>
3
+ <polyline points="7,5 23,16 7,27"
4
+ stroke="#ffffff" stroke-width="5"
5
+ stroke-linecap="round" stroke-linejoin="round"
6
+ fill="none"/>
7
+ </svg>
@@ -0,0 +1,34 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 312" width="820" height="312"
2
+ font-family="'Space Grotesk','Inter',system-ui,-apple-system,sans-serif">
3
+
4
+ <!-- Facebook Page Cover Photo — 820×312px -->
5
+ <!-- Safe zone for mobile: center 640×312 — all content within 90px left/right margins -->
6
+
7
+ <rect width="820" height="312" fill="#0a0a0a"/>
8
+
9
+ <!-- Ghost Depth mark — centered, optically balanced in 312px height -->
10
+ <g stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#ffffff">
11
+
12
+ <!-- ghost — trails left, recedes behind -->
13
+ <polyline points="370,67 401,120 370,173"
14
+ stroke-width="5.5" stroke-opacity="0.22"/>
15
+
16
+ <!-- solid — primary mark -->
17
+ <polyline points="395,65 443,120 395,175"
18
+ stroke-width="18"/>
19
+
20
+ </g>
21
+
22
+ <!-- Wordmark -->
23
+ <text x="410" y="232"
24
+ text-anchor="middle"
25
+ font-size="44" font-weight="700" fill="#ffffff"
26
+ letter-spacing="3.5">KODELYTH</text>
27
+
28
+ <!-- Tagline -->
29
+ <text x="410" y="257"
30
+ text-anchor="middle"
31
+ font-size="18" font-weight="400" fill="#ffffff" fill-opacity="0.58"
32
+ letter-spacing="3">Build everything.</text>
33
+
34
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400">
2
+
3
+ <!-- Facebook Page Profile Picture — 400×400 -->
4
+ <!-- Facebook crops to circle — mark centered within circular safe zone -->
5
+
6
+ <rect width="400" height="400" fill="#0a0a0a"/>
7
+
8
+ <!-- Kodelyth Mark — Ghost Depth (white on dark) -->
9
+ <g stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#ffffff">
10
+
11
+ <!-- ghost — trails left, recedes behind solid -->
12
+ <polyline points="128,104 184,200 128,296"
13
+ stroke-width="10" stroke-opacity="0.22"/>
14
+
15
+ <!-- solid — primary mark -->
16
+ <polyline points="172,100 260,200 172,300"
17
+ stroke-width="32"/>
18
+
19
+ </g>
20
+
21
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 120" width="460" height="120"
2
+ font-family="'Space Grotesk','Inter',system-ui,-apple-system,sans-serif">
3
+
4
+ <rect width="460" height="120" fill="#0a0a0a"/>
5
+
6
+ <!-- Kodelyth Mark — Ghost Depth (white on dark) -->
7
+ <g stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#ffffff">
8
+
9
+ <!-- ghost — reduced arm span, tighter stroke, optical depth layer -->
10
+ <polyline points="49,38 68,60 49,82"
11
+ stroke-width="3.5" stroke-opacity="0.2"/>
12
+
13
+ <!-- solid — reduced arm to balance mark:cap ratio 2.4:1 -->
14
+ <polyline points="64,35 95,60 64,85"
15
+ stroke-width="11"/>
16
+
17
+ </g>
18
+
19
+ <!-- Wordmark — baseline lifted to optically align with mark center y=60 -->
20
+ <text x="125" y="73"
21
+ font-size="36" font-weight="700" fill="#ffffff"
22
+ letter-spacing="3">KODELYTH</text>
23
+
24
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 120" width="460" height="120"
2
+ font-family="'Space Grotesk','Inter',system-ui,-apple-system,sans-serif">
3
+
4
+ <rect width="460" height="120" fill="#ffffff"/>
5
+
6
+ <!-- Kodelyth Mark — Ghost Depth (dark on light) -->
7
+ <g stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#0f172a">
8
+
9
+ <!-- ghost — reduced arm span, tighter stroke, optical depth layer -->
10
+ <polyline points="49,38 68,60 49,82"
11
+ stroke-width="3.5" stroke-opacity="0.15"/>
12
+
13
+ <!-- solid — reduced arm to balance mark:cap ratio 2.4:1 -->
14
+ <polyline points="64,35 95,60 64,85"
15
+ stroke-width="11"/>
16
+
17
+ </g>
18
+
19
+ <!-- Wordmark — baseline lifted to optically align with mark center y=60 -->
20
+ <text x="125" y="73"
21
+ font-size="36" font-weight="700" fill="#0f172a"
22
+ letter-spacing="3">KODELYTH</text>
23
+
24
+ </svg>
@@ -0,0 +1,20 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400">
2
+
3
+ <rect width="400" height="400" fill="#ffffff"/>
4
+
5
+ <!-- Kodelyth Mark — Ghost Depth -->
6
+ <!-- Ghost trails LEFT of the solid — peeks out from behind the left arms -->
7
+ <!-- Solid is the dominant forward-facing mark -->
8
+ <g stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#0f172a">
9
+
10
+ <!-- ghost — left of solid, lighter stroke, recedes behind -->
11
+ <polyline points="128,104 184,200 128,296"
12
+ stroke-width="10" stroke-opacity="0.15"/>
13
+
14
+ <!-- solid — primary mark, full weight, forward -->
15
+ <polyline points="172,100 260,200 172,300"
16
+ stroke-width="32"/>
17
+
18
+ </g>
19
+
20
+ </svg>
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "kodelyth-brand",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "description": "Brand asset conversion tools for Kodelyth",
6
+ "scripts": {
7
+ "convert": "node convert.js"
8
+ },
9
+ "dependencies": {
10
+ "puppeteer-core": "^24.43.1"
11
+ }
12
+ }
@@ -169,4 +169,4 @@ These provide additional audit playbooks on top of the enterprise baseline.
169
169
 
170
170
  ---
171
171
 
172
- **Powered by Kodelyth ECC v1.7.4 · Enterprise bundle**
172
+ **Powered by Kodelyth ECC v1.8.0 · Enterprise bundle**
@@ -103,4 +103,4 @@ Run `/devil-mode --all` or `use <agent-name>` any time to access the full crew.
103
103
 
104
104
  ---
105
105
 
106
- **Powered by Kodelyth ECC v1.7.4 · Indie Hacker bundle**
106
+ **Powered by Kodelyth ECC v1.8.0 · Indie Hacker bundle**
@@ -135,4 +135,4 @@ Each ~300 lines of real audit logic, not theatrical persona.
135
135
 
136
136
  ---
137
137
 
138
- **Powered by Kodelyth ECC v1.7.4 · Red Team bundle**
138
+ **Powered by Kodelyth ECC v1.8.0 · Red Team bundle**
package/hooks/hooks.json CHANGED
@@ -233,6 +233,19 @@
233
233
  }
234
234
  ],
235
235
  "PostToolUse": [
236
+ {
237
+ "matcher": "Edit|Write|MultiEdit",
238
+ "hooks": [
239
+ {
240
+ "type": "command",
241
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/memory/auto-resolve.js\"",
242
+ "async": true,
243
+ "timeout": 5
244
+ }
245
+ ],
246
+ "description": "Kodelyth Memory: mark unresolved memories as failed when a follow-up edit touches the same file (Improvement C — outcome tracking)",
247
+ "id": "kodelyth:post:edit:memory-auto-resolve"
248
+ },
236
249
  {
237
250
  "matcher": "Edit|Write|MultiEdit",
238
251
  "hooks": [