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.
- package/CHANGELOG.md +18 -1
- package/CLAUDE.md +1 -1
- package/README.md +12 -9
- package/SECURITY.md +5 -6
- package/VERSION +1 -1
- package/brand/concepts.svg +109 -0
- package/brand/convert.js +161 -0
- package/brand/favicon.svg +7 -0
- package/brand/fb-cover.svg +34 -0
- package/brand/fb-profile.svg +21 -0
- package/brand/kodelyth-dark.svg +24 -0
- package/brand/kodelyth-light.svg +24 -0
- package/brand/kodelyth-mark.svg +20 -0
- package/brand/package.json +12 -0
- package/bundles/enterprise.md +1 -1
- package/bundles/indie-hacker.md +1 -1
- package/bundles/red-team.md +1 -1
- package/hooks/hooks.json +13 -0
- package/hooks/memory/auto-resolve.js +68 -0
- package/hooks/memory/capture-correction.js +16 -0
- package/hooks/memory/capture-stop.js +70 -14
- package/package.json +1 -1
- package/rules/common/agents.md +1 -1
- package/rules/common/self-improvement-workflow.md +2 -2
- package/scripts/dashboard/data.js +1 -1
- package/scripts/dashboard/server.js +1 -1
- package/scripts/memory/instincts.js +282 -0
- package/scripts/memory/store.js +104 -0
- package/social/card-agents.svg +13 -1
- package/social/card-install.svg +13 -1
- package/social/card-main.svg +13 -1
- package/social/facebook-v150.svg +27 -13
- package/social/fb-ad-main.svg +128 -0
- package/social/fb-post-features.svg +118 -0
- package/social/fb-post-launch.svg +144 -0
- package/social/fb-post-platforms.svg +135 -0
- package/social/github-social-preview.svg +143 -139
- package/social/hype-compound-learning.svg +21 -9
- package/social/hype-devil-mode.svg +20 -8
- package/social/hype-mcp-server.svg +20 -8
- package/social/hype-parallel-agents.svg +20 -8
- package/social/hype-stats-hero.svg +15 -3
- package/social/og-image.svg +151 -0
- package/social/readme-agents.svg +14 -2
- package/social/readme-hero.svg +17 -4
- package/social/section-agents.svg +12 -0
- package/social/section-author.svg +12 -0
- package/social/section-dashboard.svg +12 -0
- package/social/section-devil.svg +12 -0
- package/social/section-hooks.svg +12 -0
- package/social/section-install.svg +12 -0
- package/social/section-learning.svg +12 -0
- package/social/section-mcp.svg +13 -1
- package/social/section-memory.svg +12 -0
- package/social/section-parallel.svg +12 -0
- package/social/section-routing.svg +12 -0
- package/social/twitter-threads.md +3 -3
- package/social/x-card-agents-grid.svg +14 -2
- package/social/x-card-free.svg +14 -2
- package/social/x-card-hook.svg +17 -5
- package/tests/memory/instincts.test.js +258 -0
- package/tests/memory/store.test.js +82 -0
- package/wiki/FAQ.md +1 -1
- package/wiki/Home.md +3 -3
- 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 →
|
|
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/ →
|
|
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
|
[](https://www.npmjs.com/package/kodelyth-ecc)
|
|
7
7
|
[](https://github.com/sifxprime/kodelyth-ecc/stargazers)
|
|
8
8
|
[](LICENSE)
|
|
9
|
-

|
|
10
10
|

|
|
11
11
|

|
|
12
12
|

|
|
@@ -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 | ✅
|
|
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.
|
|
792
|
+
See [CHANGELOG.md](CHANGELOG.md). v1.8.0 highlights:
|
|
789
793
|
|
|
790
|
-
- **
|
|
791
|
-
- **
|
|
792
|
-
-
|
|
793
|
-
- **
|
|
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 4× 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
|
|
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.
|
|
8
|
-
| 1.
|
|
9
|
-
| 1.
|
|
10
|
-
| 1.
|
|
11
|
-
| 1.
|
|
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.
|
|
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>
|
package/brand/convert.js
ADDED
|
@@ -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>
|
package/bundles/enterprise.md
CHANGED
package/bundles/indie-hacker.md
CHANGED
package/bundles/red-team.md
CHANGED
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": [
|