helixevo 0.2.30 → 0.2.32
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 +133 -0
- package/dashboard/app/changelog/page.tsx +143 -0
- package/dashboard/app/layout.tsx +18 -5
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to HelixEvo are documented here.
|
|
4
|
+
|
|
5
|
+
## [0.2.30] - 2026-03-23
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Duplicate key error on Evolution page when iteration IDs collide
|
|
9
|
+
- Update reload timing: 12s countdown + polling for reliable auto-reload
|
|
10
|
+
|
|
11
|
+
## [0.2.29] - 2026-03-23
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- Auto-reload dashboard after update: touches next.config.mjs to trigger Next.js dev mode restart
|
|
15
|
+
- No more manual Ctrl+C + restart needed after clicking "Update Now"
|
|
16
|
+
- Shows countdown timer with progress bar during recompilation
|
|
17
|
+
|
|
18
|
+
## [0.2.28] - 2026-03-23
|
|
19
|
+
|
|
20
|
+
### Added — Skill Network Interconnection
|
|
21
|
+
- Graph view nodes are clickable — opens detail panel
|
|
22
|
+
- Detail panel persists across tab switches
|
|
23
|
+
- CoEvolution view fully clickable (parents, children, enhancement pairs, conflict pairs)
|
|
24
|
+
- "Ready to specialize" button runs `helixevo specialize` for that project
|
|
25
|
+
- Cross-link navigation in detail panel (View in Graph, View in Skills, Co-Evolution)
|
|
26
|
+
- Connection badges (inherits, enhances, conflicts) clickable to navigate to connected skills
|
|
27
|
+
|
|
28
|
+
## [0.2.26] - 2026-03-23
|
|
29
|
+
|
|
30
|
+
### Added — Graph-Aware Evolution
|
|
31
|
+
- Evolve command reads skill graph and uses relationships for smarter proposals
|
|
32
|
+
- Cluster prompt receives graph context (edges, clusters, relationships)
|
|
33
|
+
- Proposer prompt receives related skill summaries and hierarchical structure guidance
|
|
34
|
+
- Propagation suggestions: LLM can recommend applying fixes to related skills
|
|
35
|
+
- Graph auto-updates after evolution (nodes get new generation/score)
|
|
36
|
+
- ProposalOutput type extended with `propagationSuggestions` field
|
|
37
|
+
|
|
38
|
+
## [0.2.25] - 2026-03-23
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- Real-time streaming output for CLI commands via Server-Sent Events (SSE)
|
|
42
|
+
- CLI output appears line-by-line as each step processes
|
|
43
|
+
- Auto-scroll output panel to bottom as new lines arrive
|
|
44
|
+
|
|
45
|
+
## [0.2.24] - 2026-03-23
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
- All dashboard elements clickable: stat cards link to relevant pages
|
|
49
|
+
- Flow diagram arrows wrap properly (no more clipping)
|
|
50
|
+
- Pareto Frontier card links to /frontier, Evolution card links to /evolution
|
|
51
|
+
|
|
52
|
+
## [0.2.23] - 2026-03-23
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
- Quick Action cards with visual flow diagrams (input → process → output)
|
|
56
|
+
- Research tab rebuilt: pipeline visualization, "Run Research" button, streaming output
|
|
57
|
+
- Context-aware labels on Quick Actions (e.g., "Analyze 10 skills", "Use 7 corrections")
|
|
58
|
+
|
|
59
|
+
## [0.2.22] - 2026-03-23
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- Descriptions under each Quick Action button explaining what it does
|
|
63
|
+
- Unresolved Corrections section on Overview page showing pending corrections
|
|
64
|
+
- Evolve button shows pending count: "Evolve (7)"
|
|
65
|
+
|
|
66
|
+
## [0.2.20] - 2026-03-22
|
|
67
|
+
|
|
68
|
+
### Changed — Warm Premium Theme
|
|
69
|
+
- Complete redesign with warm palette (#f4f2ee backgrounds, #ddd9d1 borders)
|
|
70
|
+
- Light sidebar matching warm theme (replaced dark sidebar)
|
|
71
|
+
- Teal accent color (#0d7c5f) as primary action color
|
|
72
|
+
- Fixed network page stat badges covering page title
|
|
73
|
+
- Tokyo Night palette for code blocks
|
|
74
|
+
|
|
75
|
+
## [0.2.16] - 2026-03-22
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- Stop button for running commands (red "Stop" button during execution)
|
|
79
|
+
- /api/run rewritten with spawn (async, killable) instead of execSync (blocking)
|
|
80
|
+
|
|
81
|
+
## [0.2.13] - 2026-03-22
|
|
82
|
+
|
|
83
|
+
### Added
|
|
84
|
+
- Quick Actions bar on Overview page (Organize Skills, Generalize, Evolve, Health Check, Optimize, Research)
|
|
85
|
+
- Commands tab with full reference for all 13 CLI commands
|
|
86
|
+
- /api/run endpoint with whitelisted CLI commands
|
|
87
|
+
- Typical workflow pipeline visualization
|
|
88
|
+
|
|
89
|
+
## [0.2.12] - 2026-03-22
|
|
90
|
+
|
|
91
|
+
### Added
|
|
92
|
+
- One-click "Update Now" button on dashboard
|
|
93
|
+
- /api/upgrade endpoint that runs npm install -g helixevo@latest
|
|
94
|
+
|
|
95
|
+
## [0.2.11] - 2026-03-22
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
- Dashboard auto-discovers skills when launching (`helixevo dashboard`)
|
|
99
|
+
- Generates skill-graph.json if missing so dashboard shows skills immediately
|
|
100
|
+
|
|
101
|
+
## [0.2.10] - 2026-03-22
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
- Dashboard version display: reads from .helixevo-version marker, env var, or .env.local
|
|
105
|
+
- CLI passes HELIXEVO_VERSION env var when spawning dashboard
|
|
106
|
+
|
|
107
|
+
## [0.2.9] - 2026-03-22
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
- Dynamic version display: CLI, dashboard sidebar, and guide page all read from package.json
|
|
111
|
+
- Postinstall script shows version + quick start guide after npm install
|
|
112
|
+
- CLI update check with colored banner (cached 24h, non-blocking)
|
|
113
|
+
- Dashboard UpdateBanner component (bottom-right toast)
|
|
114
|
+
- Skill graph generation during init for immediate dashboard data
|
|
115
|
+
- Version-based dashboard update detection (replaces unreliable mtime comparison)
|
|
116
|
+
|
|
117
|
+
## [0.2.8] - 2026-03-22
|
|
118
|
+
|
|
119
|
+
### Changed
|
|
120
|
+
- Renamed "golden cases" to "skill tests" across entire codebase
|
|
121
|
+
|
|
122
|
+
## [0.2.0] - 2026-03-22
|
|
123
|
+
|
|
124
|
+
### Added — Initial Release
|
|
125
|
+
- Core evolution pipeline: capture → cluster → propose → replay → judge → regress → canary → frontier
|
|
126
|
+
- 3 independent LLM judges (Task Completion, Correction Alignment, Side-Effect Check)
|
|
127
|
+
- Pareto frontier with top-K optimal skill configurations
|
|
128
|
+
- Proactive web research (`helixevo research`)
|
|
129
|
+
- Skill network graph with Mermaid + terminal TUI
|
|
130
|
+
- Next.js dashboard with 6 tabs (Overview, Network, Evolution, Research, Frontier, Guide)
|
|
131
|
+
- `helixevo watch` — always-on learning mode
|
|
132
|
+
- Network health scoring and auto-generalization
|
|
133
|
+
- 13 CLI commands
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'fs'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { homedir } from 'os'
|
|
4
|
+
import { VERSION } from '@/lib/version'
|
|
5
|
+
|
|
6
|
+
export const dynamic = 'force-dynamic'
|
|
7
|
+
|
|
8
|
+
function findChangelog(): string {
|
|
9
|
+
const candidates = [
|
|
10
|
+
join(process.cwd(), 'CHANGELOG.md'),
|
|
11
|
+
join(homedir(), 'Documents', 'GitHub', 'helixevo', 'CHANGELOG.md'),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
// Also check npm global install
|
|
15
|
+
try {
|
|
16
|
+
const { execSync } = require('child_process')
|
|
17
|
+
const globalPrefix = execSync('npm prefix -g', { encoding: 'utf-8' }).trim()
|
|
18
|
+
candidates.push(join(globalPrefix, 'lib', 'node_modules', 'helixevo', 'CHANGELOG.md'))
|
|
19
|
+
candidates.push(join(globalPrefix, 'node_modules', 'helixevo', 'CHANGELOG.md'))
|
|
20
|
+
} catch {}
|
|
21
|
+
|
|
22
|
+
for (const p of candidates) {
|
|
23
|
+
if (existsSync(p)) {
|
|
24
|
+
return readFileSync(p, 'utf-8')
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return ''
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface ChangelogEntry {
|
|
31
|
+
version: string
|
|
32
|
+
date: string
|
|
33
|
+
sections: { title: string; items: string[] }[]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function parseChangelog(md: string): ChangelogEntry[] {
|
|
37
|
+
const entries: ChangelogEntry[] = []
|
|
38
|
+
const lines = md.split('\n')
|
|
39
|
+
let current: ChangelogEntry | null = null
|
|
40
|
+
let currentSection: { title: string; items: string[] } | null = null
|
|
41
|
+
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
const versionMatch = line.match(/^## \[(\d+\.\d+\.\d+)\]\s*-?\s*(.*)/)
|
|
44
|
+
if (versionMatch) {
|
|
45
|
+
if (current) entries.push(current)
|
|
46
|
+
current = { version: versionMatch[1], date: versionMatch[2].trim(), sections: [] }
|
|
47
|
+
currentSection = null
|
|
48
|
+
continue
|
|
49
|
+
}
|
|
50
|
+
const sectionMatch = line.match(/^### (.+)/)
|
|
51
|
+
if (sectionMatch && current) {
|
|
52
|
+
currentSection = { title: sectionMatch[1], items: [] }
|
|
53
|
+
current.sections.push(currentSection)
|
|
54
|
+
continue
|
|
55
|
+
}
|
|
56
|
+
if (line.startsWith('- ') && current) {
|
|
57
|
+
if (!currentSection) {
|
|
58
|
+
currentSection = { title: 'Changes', items: [] }
|
|
59
|
+
current.sections.push(currentSection)
|
|
60
|
+
}
|
|
61
|
+
currentSection.items.push(line.slice(2))
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (current) entries.push(current)
|
|
65
|
+
return entries
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export default function ChangelogPage() {
|
|
69
|
+
const md = findChangelog()
|
|
70
|
+
const entries = parseChangelog(md)
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<div>
|
|
74
|
+
<div className="page-header">
|
|
75
|
+
<h1 className="page-title">Changelog</h1>
|
|
76
|
+
<p className="page-desc">
|
|
77
|
+
What changed in each version of HelixEvo — currently on v{VERSION}
|
|
78
|
+
</p>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
{entries.length === 0 ? (
|
|
82
|
+
<div className="card">
|
|
83
|
+
<div className="empty-state">
|
|
84
|
+
<div className="empty-state-title">No changelog found</div>
|
|
85
|
+
<div className="empty-state-desc">
|
|
86
|
+
CHANGELOG.md was not found in the package installation.
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
) : (
|
|
91
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
|
|
92
|
+
{entries.map((entry, i) => (
|
|
93
|
+
<div key={entry.version} className="card" style={{
|
|
94
|
+
borderLeft: i === 0 ? '3px solid var(--green)' : undefined,
|
|
95
|
+
}}>
|
|
96
|
+
<div className="card-body">
|
|
97
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 12 }}>
|
|
98
|
+
<span style={{
|
|
99
|
+
fontSize: 15, fontWeight: 700, color: 'var(--text)',
|
|
100
|
+
fontFamily: 'var(--font-mono)',
|
|
101
|
+
}}>
|
|
102
|
+
v{entry.version}
|
|
103
|
+
</span>
|
|
104
|
+
{i === 0 && (
|
|
105
|
+
<span className="badge badge-green">latest</span>
|
|
106
|
+
)}
|
|
107
|
+
{entry.version === VERSION && (
|
|
108
|
+
<span className="badge badge-blue">installed</span>
|
|
109
|
+
)}
|
|
110
|
+
{entry.date && (
|
|
111
|
+
<span style={{ fontSize: 11, color: 'var(--text-muted)' }}>{entry.date}</span>
|
|
112
|
+
)}
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
{entry.sections.map((section, j) => (
|
|
116
|
+
<div key={j} style={{ marginBottom: j < entry.sections.length - 1 ? 12 : 0 }}>
|
|
117
|
+
<div style={{
|
|
118
|
+
fontSize: 10, fontWeight: 700, color: 'var(--text-muted)',
|
|
119
|
+
textTransform: 'uppercase', letterSpacing: 1.2, marginBottom: 6,
|
|
120
|
+
}}>
|
|
121
|
+
{section.title}
|
|
122
|
+
</div>
|
|
123
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
|
|
124
|
+
{section.items.map((item, k) => (
|
|
125
|
+
<div key={k} style={{
|
|
126
|
+
fontSize: 12, color: 'var(--text-secondary)', lineHeight: 1.5,
|
|
127
|
+
paddingLeft: 12,
|
|
128
|
+
borderLeft: '2px solid var(--border)',
|
|
129
|
+
}}>
|
|
130
|
+
{item}
|
|
131
|
+
</div>
|
|
132
|
+
))}
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
))}
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
))}
|
|
139
|
+
</div>
|
|
140
|
+
)}
|
|
141
|
+
</div>
|
|
142
|
+
)
|
|
143
|
+
}
|
package/dashboard/app/layout.tsx
CHANGED
|
@@ -62,12 +62,25 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
62
62
|
</div>
|
|
63
63
|
|
|
64
64
|
{/* Footer */}
|
|
65
|
-
<div className="sidebar-footer">
|
|
66
|
-
<div style={{ display: 'flex', alignItems: 'center',
|
|
67
|
-
<div style={{
|
|
68
|
-
|
|
65
|
+
<div className="sidebar-footer" style={{ flexDirection: 'column', gap: 8 }}>
|
|
66
|
+
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%' }}>
|
|
67
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
|
68
|
+
<div style={{ width: 6, height: 6, borderRadius: '50%', background: 'var(--green)' }} />
|
|
69
|
+
<span>System Active</span>
|
|
70
|
+
</div>
|
|
71
|
+
<code style={{ fontSize: 10, background: 'var(--bg-section)', padding: '2px 7px', borderRadius: 4, color: 'var(--text-dim)' }}>v{VERSION}</code>
|
|
69
72
|
</div>
|
|
70
|
-
<
|
|
73
|
+
<Link href="/changelog" style={{
|
|
74
|
+
textDecoration: 'none', display: 'flex', alignItems: 'center', gap: 5,
|
|
75
|
+
fontSize: 10, color: 'var(--text-muted)', width: '100%',
|
|
76
|
+
padding: '4px 0', transition: 'color 0.15s',
|
|
77
|
+
}}>
|
|
78
|
+
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
|
79
|
+
<path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z" />
|
|
80
|
+
<path d="M14 2v6h6M16 13H8M16 17H8M10 9H8" />
|
|
81
|
+
</svg>
|
|
82
|
+
Changelog
|
|
83
|
+
</Link>
|
|
71
84
|
</div>
|
|
72
85
|
</nav>
|
|
73
86
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "helixevo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.32",
|
|
4
4
|
"description": "Self-evolving skill ecosystem for AI agents. Skills and projects co-evolve through multi-judge evaluation and a Pareto frontier.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"dashboard/next-env.d.ts",
|
|
17
17
|
"dashboard/next.config.mjs",
|
|
18
18
|
"README.md",
|
|
19
|
-
"LICENSE"
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"CHANGELOG.md"
|
|
20
21
|
],
|
|
21
22
|
"scripts": {
|
|
22
23
|
"build": "bun build src/cli.ts --outdir dist --target node && bun build src/postinstall.ts --outdir dist --target node --entry-naming postinstall.js",
|