mirror of
https://github.com/lukaszraczylo/harness-sync.git
synced 2026-10-13 00:48:30 +00:00
docs: presentation-deck README with SVG logo, banner, and architecture diagram
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 560" width="1200" height="560" role="img" aria-label="harness-sync architecture diagram">
|
||||
<title>harness-sync architecture</title>
|
||||
<desc>Flow diagram: canonical config in a git repository renders through per-harness adapters via a three-way merge into each harness's native config layout.</desc>
|
||||
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#0ea5e9"/>
|
||||
</marker>
|
||||
<marker id="arrowGrey" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/>
|
||||
</marker>
|
||||
<style>
|
||||
.box {
|
||||
fill: #f8fafc;
|
||||
stroke: #cbd5e1;
|
||||
stroke-width: 1.5;
|
||||
rx: 8;
|
||||
}
|
||||
.box-accent {
|
||||
fill: #e0f2fe;
|
||||
stroke: #0ea5e9;
|
||||
stroke-width: 2;
|
||||
}
|
||||
.box-state {
|
||||
fill: #fef3c7;
|
||||
stroke: #f59e0b;
|
||||
stroke-width: 1.5;
|
||||
}
|
||||
.label {
|
||||
font-family: ui-sans-serif, system-ui, sans-serif;
|
||||
font-size: 14px;
|
||||
fill: #0f172a;
|
||||
}
|
||||
.label-bold {
|
||||
font-weight: 600;
|
||||
}
|
||||
.mono {
|
||||
font-family: ui-monospace, 'SF Mono', Menlo, monospace;
|
||||
font-size: 12px;
|
||||
fill: #334155;
|
||||
}
|
||||
.caption {
|
||||
font-family: ui-sans-serif, system-ui, sans-serif;
|
||||
font-size: 12px;
|
||||
fill: #64748b;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<!-- Canonical box (left) -->
|
||||
<g>
|
||||
<rect class="box-accent" x="40" y="60" width="280" height="440" rx="8"/>
|
||||
<text class="label label-bold" x="180" y="92" text-anchor="middle">canonical (git repo)</text>
|
||||
<text class="caption" x="180" y="110" text-anchor="middle">~/.config/harness-sync/</text>
|
||||
|
||||
<g class="mono">
|
||||
<text x="60" y="155">config.yaml</text>
|
||||
<text x="60" y="180">profiles/</text>
|
||||
<text x="80" y="200">home.yaml</text>
|
||||
<text x="80" y="220">work.yaml</text>
|
||||
<text x="60" y="250">instructions/global.md</text>
|
||||
<text x="60" y="280">skills/<name>/SKILL.md</text>
|
||||
<text x="60" y="305">agents/<name>.md</text>
|
||||
<text x="60" y="330">mcp.yaml</text>
|
||||
</g>
|
||||
|
||||
<rect class="box-state" x="60" y="370" width="240" height="105" rx="6"/>
|
||||
<text class="label label-bold" x="180" y="395" text-anchor="middle">state/</text>
|
||||
<text class="caption" x="180" y="415" text-anchor="middle">last-rendered snapshots</text>
|
||||
<text class="caption" x="180" y="435" text-anchor="middle">(git HEAD)</text>
|
||||
<text class="caption" x="180" y="460" text-anchor="middle">used as 3-way merge base</text>
|
||||
</g>
|
||||
|
||||
<!-- Adapter box (middle) -->
|
||||
<g>
|
||||
<rect class="box" x="450" y="180" width="300" height="200" rx="8"/>
|
||||
<text class="label label-bold" x="600" y="210" text-anchor="middle">adapter.Render(bundle)</text>
|
||||
<text class="caption" x="600" y="228" text-anchor="middle">internal/adapters/<name>/</text>
|
||||
|
||||
<g class="mono">
|
||||
<text x="470" y="265">→ canonical types</text>
|
||||
<text x="470" y="288">→ native schema</text>
|
||||
<text x="470" y="311">→ FileSet (symlink | rendered)</text>
|
||||
<text x="470" y="345">common.BuildProviders()</text>
|
||||
<text x="470" y="362">common.BuildMCPMapStyled()</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- 3-way merge box (top right inflow) -->
|
||||
<g>
|
||||
<rect class="box" x="820" y="60" width="320" height="160" rx="8"/>
|
||||
<text class="label label-bold" x="980" y="90" text-anchor="middle">3-way merge</text>
|
||||
<text class="caption" x="980" y="108" text-anchor="middle">git merge-file</text>
|
||||
|
||||
<g class="mono">
|
||||
<text x="840" y="140">base = state/<harness>/<path></text>
|
||||
<text x="840" y="160">ours = rendered_new</text>
|
||||
<text x="840" y="180">theirs = target on disk</text>
|
||||
<text x="840" y="205" fill="#dc2626">conflict → write <file>.rej</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Target harnesses (right side, stacked) -->
|
||||
<g>
|
||||
<rect class="box" x="820" y="260" width="320" height="240" rx="8"/>
|
||||
<text class="label label-bold" x="980" y="290" text-anchor="middle">harness target</text>
|
||||
<text class="caption" x="980" y="308" text-anchor="middle">filesystem write + symlink</text>
|
||||
|
||||
<g class="mono">
|
||||
<text x="840" y="340">~/.claude/ (claude-code)</text>
|
||||
<text x="840" y="362">~/.config/crush/ (crush)</text>
|
||||
<text x="840" y="384">~/.config/kilo/ (kilo)</text>
|
||||
<text x="840" y="406">~/.config/opencode/ (opencode)</text>
|
||||
<text x="840" y="428">~/.config/goose/ (goose)</text>
|
||||
<text x="840" y="450">~/.config/cagent/ (cagent)</text>
|
||||
<text x="840" y="472">~/.config/zed/ (zed)</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Arrows -->
|
||||
<!-- canonical -> adapter -->
|
||||
<path d="M 320 280 L 450 280" fill="none" stroke="#0ea5e9" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<!-- adapter -> 3-way merge -->
|
||||
<path d="M 750 230 L 820 160" fill="none" stroke="#0ea5e9" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<!-- state -> 3-way merge -->
|
||||
<path d="M 300 410 C 600 410, 820 200, 820 180" fill="none" stroke="#64748b" stroke-width="1.5" stroke-dasharray="5 4" marker-end="url(#arrowGrey)"/>
|
||||
<!-- 3-way merge -> target -->
|
||||
<path d="M 980 220 L 980 260" fill="none" stroke="#0ea5e9" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<!-- target -> state (snapshot write-back) -->
|
||||
<path d="M 820 380 C 600 380, 300 380, 300 360" fill="none" stroke="#94a3b8" stroke-width="1.5" stroke-dasharray="3 3" marker-end="url(#arrowGrey)"/>
|
||||
|
||||
<!-- Legend / labels along arrows -->
|
||||
<g class="caption">
|
||||
<text x="385" y="270" text-anchor="middle">load</text>
|
||||
<text x="780" y="190">render</text>
|
||||
<text x="985" y="245" text-anchor="middle">write</text>
|
||||
<text x="560" y="375">snapshot back to state/</text>
|
||||
</g>
|
||||
|
||||
<!-- Bottom strip: apply pipeline -->
|
||||
<g>
|
||||
<rect class="box" x="40" y="525" width="1100" height="0" rx="8" opacity="0"/>
|
||||
<text class="caption" x="600" y="540" text-anchor="middle">
|
||||
apply: for each detected adapter → Render → 3-way merge against state → write target → commit new state in canonical repo
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,78 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 320" width="1200" height="320" role="img" aria-label="harness-sync banner">
|
||||
<title>harness-sync</title>
|
||||
<desc>harness-sync banner: a sync hub connecting seven LLM harnesses with a wordmark and tagline.</desc>
|
||||
|
||||
<defs>
|
||||
<linearGradient id="bgGradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#0f172a"/>
|
||||
<stop offset="100%" stop-color="#1e293b"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="hubGradient2" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#38bdf8"/>
|
||||
<stop offset="100%" stop-color="#0284c7"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="textGradient" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0%" stop-color="#f0f9ff"/>
|
||||
<stop offset="100%" stop-color="#7dd3fc"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Background -->
|
||||
<rect width="1200" height="320" fill="url(#bgGradient)" rx="16"/>
|
||||
|
||||
<!-- Subtle grid -->
|
||||
<g stroke="#1e3a5f" stroke-width="1" opacity="0.4">
|
||||
<line x1="0" y1="80" x2="1200" y2="80"/>
|
||||
<line x1="0" y1="160" x2="1200" y2="160"/>
|
||||
<line x1="0" y1="240" x2="1200" y2="240"/>
|
||||
</g>
|
||||
|
||||
<!-- Logo group: hub + 7 nodes, centered around (200, 160), radius 110 -->
|
||||
<g transform="translate(200,160)">
|
||||
<!-- Connections -->
|
||||
<g stroke="#38bdf8" stroke-width="1.5" stroke-opacity="0.5" stroke-dasharray="4 3" fill="none">
|
||||
<line x1="0" y1="0" x2="0" y2="-110"/>
|
||||
<line x1="0" y1="0" x2="85.99" y2="-68.59"/>
|
||||
<line x1="0" y1="0" x2="107.24" y2="24.48"/>
|
||||
<line x1="0" y1="0" x2="47.73" y2="99.1"/>
|
||||
<line x1="0" y1="0" x2="-47.73" y2="99.1"/>
|
||||
<line x1="0" y1="0" x2="-107.24" y2="24.48"/>
|
||||
<line x1="0" y1="0" x2="-85.99" y2="-68.59"/>
|
||||
</g>
|
||||
|
||||
<!-- Satellite nodes -->
|
||||
<g fill="#0f172a" stroke="#7dd3fc" stroke-width="2">
|
||||
<circle cx="0" cy="-110" r="12"/>
|
||||
<circle cx="85.99" cy="-68.59" r="12"/>
|
||||
<circle cx="107.24" cy="24.48" r="12"/>
|
||||
<circle cx="47.73" cy="99.1" r="12"/>
|
||||
<circle cx="-47.73" cy="99.1" r="12"/>
|
||||
<circle cx="-107.24" cy="24.48" r="12"/>
|
||||
<circle cx="-85.99" cy="-68.59" r="12"/>
|
||||
</g>
|
||||
|
||||
<!-- Hub -->
|
||||
<circle cx="0" cy="0" r="38" fill="url(#hubGradient2)" stroke="#0c4a6e" stroke-width="2"/>
|
||||
|
||||
<!-- Sync arrows -->
|
||||
<g fill="none" stroke="#f0f9ff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M -16 -6 A 15 15 0 0 1 12 -10"/>
|
||||
<polyline points="8,-17 13,-10 5,-7"/>
|
||||
<path d="M 16 6 A 15 15 0 0 1 -12 10"/>
|
||||
<polyline points="-8,17 -13,10 -5,7"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Wordmark -->
|
||||
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, monospace">
|
||||
<text x="400" y="155" font-size="72" font-weight="700" fill="url(#textGradient)" letter-spacing="-2">
|
||||
harness-sync
|
||||
</text>
|
||||
<text x="400" y="200" font-size="22" font-weight="400" fill="#94a3b8" letter-spacing="1">
|
||||
one config, every harness
|
||||
</text>
|
||||
<text x="400" y="240" font-size="14" font-weight="400" fill="#64748b" font-family="ui-sans-serif, system-ui, sans-serif">
|
||||
claude-code · crush · kilo · opencode · goose · cagent · zed
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,53 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" width="320" height="320" role="img" aria-label="harness-sync logo">
|
||||
<title>harness-sync</title>
|
||||
<desc>A central hub connected to seven satellite nodes representing supported LLM harnesses.</desc>
|
||||
|
||||
<defs>
|
||||
<linearGradient id="hubGradient" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#0ea5e9"/>
|
||||
<stop offset="100%" stop-color="#0369a1"/>
|
||||
</linearGradient>
|
||||
<filter id="softGlow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Connections from hub to each node -->
|
||||
<g stroke="#38bdf8" stroke-width="1.5" stroke-opacity="0.55" stroke-dasharray="4 3" fill="none">
|
||||
<line x1="160" y1="160" x2="160" y2="30"/>
|
||||
<line x1="160" y1="160" x2="261.6" y2="78.9"/>
|
||||
<line x1="160" y1="160" x2="286.7" y2="188.9"/>
|
||||
<line x1="160" y1="160" x2="216.4" y2="277.1"/>
|
||||
<line x1="160" y1="160" x2="103.6" y2="277.1"/>
|
||||
<line x1="160" y1="160" x2="33.3" y2="188.9"/>
|
||||
<line x1="160" y1="160" x2="58.4" y2="78.9"/>
|
||||
</g>
|
||||
|
||||
<!-- Satellite nodes -->
|
||||
<g fill="#f1f5f9" stroke="#0ea5e9" stroke-width="2">
|
||||
<circle cx="160" cy="30" r="14"/>
|
||||
<circle cx="261.6" cy="78.9" r="14"/>
|
||||
<circle cx="286.7" cy="188.9" r="14"/>
|
||||
<circle cx="216.4" cy="277.1" r="14"/>
|
||||
<circle cx="103.6" cy="277.1" r="14"/>
|
||||
<circle cx="33.3" cy="188.9" r="14"/>
|
||||
<circle cx="58.4" cy="78.9" r="14"/>
|
||||
</g>
|
||||
|
||||
<!-- Hub -->
|
||||
<g filter="url(#softGlow)">
|
||||
<circle cx="160" cy="160" r="46" fill="url(#hubGradient)" stroke="#0c4a6e" stroke-width="2"/>
|
||||
</g>
|
||||
|
||||
<!-- Sync arrows inside hub -->
|
||||
<g fill="none" stroke="#f0f9ff" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M 140 152 A 18 18 0 0 1 174 148"/>
|
||||
<polyline points="170,140 175,148 167,151"/>
|
||||
<path d="M 180 168 A 18 18 0 0 1 146 172"/>
|
||||
<polyline points="150,180 145,172 153,169"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
Reference in New Issue
Block a user