<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>chip-fetcher — Tool Map</title>
<style>
  :root{
    --bg:#0a0e14; --panel:#0d1117; --ink:#e6edf3; --muted:#8b949e;
    --local:#34d17e;  --local-bg:rgba(52,209,126,.08); --local-bd:rgba(52,209,126,.35);
    --remote:#ff9a4a; --remote-bg:rgba(255,154,74,.09); --remote-bd:rgba(255,154,74,.40);
    --desktop:#8c6bf7;--desktop-bg:rgba(140,107,247,.10);--desktop-bd:rgba(140,107,247,.40);
    --lib:#64abff;    --lib-bg:rgba(100,171,255,.09); --lib-bd:rgba(100,171,255,.38);
    --hub:#00e6dc;    --hub-bg:rgba(0,230,220,.10);  --hub-bd:rgba(0,230,220,.45);
    --new:#ffd23f;
  }
  *{box-sizing:border-box}
  body{margin:0;background:
      radial-gradient(1200px 700px at 85% -10%,rgba(0,184,177,.10),transparent 60%),
      radial-gradient(900px 600px at -5% 110%,rgba(140,107,247,.10),transparent 55%),
      linear-gradient(155deg,#0a0e14,#0d1117 45%,#071318);
    color:var(--ink);font-family:'Familjen Grotesk',system-ui,-apple-system,Segoe UI,sans-serif;
    -webkit-font-smoothing:antialiased;padding:24px 16px 60px}
  h1{font-size:26px;margin:0 0 2px;letter-spacing:-.5px}
  h1 span{background:linear-gradient(100deg,#00e6dc,#39b8ff 60%,#8c6bf7);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
  .sub{color:var(--muted);font-size:14px;margin:0 0 18px}
  .wrap{max-width:1100px;margin:0 auto}

  /* legend */
  .legend{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 22px}
  .lg{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);
      border:1px solid #222a33;border-radius:999px;padding:5px 11px;background:#0e141c}
  .dot{width:11px;height:11px;border-radius:3px;flex:none}

  /* tiers */
  .tier{margin:0 0 14px}
  .tier-h{display:flex;align-items:baseline;gap:8px;margin:0 0 8px}
  .tier-h b{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}
  .tier-h em{font-style:normal;color:var(--muted);font-size:12px}
  .row{display:flex;flex-wrap:wrap;gap:10px}

  .node{border-radius:12px;padding:10px 12px;min-width:150px;flex:1 1 150px;max-width:230px;
        border:1px solid #222a33;background:#0e141c;position:relative}
  .node .nm{font-weight:700;font-size:14px;display:flex;align-items:center;gap:6px}
  .node .dsc{color:var(--muted);font-size:11.5px;margin-top:3px;line-height:1.35}
  .node .calls{margin-top:7px;font-size:11px;color:#aeb8c4}
  .node .calls b{color:var(--remote)}
  .tag{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 6px;border-radius:5px;text-transform:uppercase}
  .t-local{color:var(--local);background:var(--local-bg);border:1px solid var(--local-bd)}
  .t-remote{color:var(--remote);background:var(--remote-bg);border:1px solid var(--remote-bd)}
  .t-desktop{color:var(--desktop);background:var(--desktop-bg);border:1px solid var(--desktop-bd)}
  .t-lib{color:var(--lib);background:var(--lib-bg);border:1px solid var(--lib-bd)}
  .new-pill{font-size:9px;font-weight:800;color:#0a0e14;background:var(--new);border-radius:5px;padding:1px 5px;letter-spacing:.03em}

  .local{border-color:var(--local-bd)}
  .remote{border-color:var(--remote-bd);background:var(--remote-bg)}
  .desktop{border-color:var(--desktop-bd);background:var(--desktop-bg)}
  .lib{border-color:var(--lib-bd);background:var(--lib-bg)}

  .hub{border:1.5px solid var(--hub-bd);background:var(--hub-bg);max-width:none;flex-basis:100%}
  .hub .nm{font-size:18px;color:var(--hub)}

  .arrow{text-align:center;color:#3a4452;font-size:18px;margin:2px 0;line-height:1}

  /* explainer cards */
  .ex{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:26px 0 6px}
  @media(max-width:680px){.ex{grid-template-columns:1fr}}
  .card{border:1px solid #222a33;border-radius:14px;padding:14px 16px;background:#0e141c}
  .card h3{margin:0 0 6px;font-size:15px;display:flex;align-items:center;gap:8px}
  .card p{margin:0 0 8px;font-size:13px;color:#c4cdd8;line-height:1.5}
  .card .k{font-size:12px;color:var(--muted)}
  code{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:11.5px;background:#11181f;border:1px solid #1c242d;padding:1px 5px;border-radius:5px;color:#cfe}

  .count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;
    padding:0 6px;border-radius:7px;background:var(--hub-bg);border:1px solid var(--hub-bd);color:var(--hub);font-weight:800;font-size:13px}
  .note{font-size:12px;color:var(--muted);margin-top:14px;line-height:1.5}
</style>
</head>
<body>
<div class="wrap">
  <h1><span>chip-fetcher</span> — tool map</h1>
  <p class="sub">What runs <em>in your container</em> vs. what we <em>call over the network</em>. Generated 2026-06-24.</p>

  <div class="legend">
    <span class="lg"><span class="dot" style="background:var(--hub)"></span>orchestrator</span>
    <span class="lg"><span class="dot" style="background:var(--local)"></span>local CLI — runs in your container</span>
    <span class="lg"><span class="dot" style="background:var(--lib)"></span>local library (Rust crate, not a separate app)</span>
    <span class="lg"><span class="dot" style="background:var(--remote)"></span>remote service container — we call it over HTTPS</span>
    <span class="lg"><span class="dot" style="background:var(--desktop)"></span>your laptop — reached via adom-desktop bridge</span>
  </div>

  <!-- HUB -->
  <div class="tier">
    <div class="row">
      <div class="node hub">
        <div class="nm">⬢ adom-chip-fetcher</div>
        <div class="dsc">The orchestrator. Pulls every CAD format off the internet, converts + renders each, and shows them side-by-side so you can pick what to export.</div>
      </div>
    </div>
  </div>
  <div class="arrow">▼ &nbsp; shells out to (all local CLIs) &nbsp; ▼</div>

  <!-- CONVERSION + RENDER -->
  <div class="tier">
    <div class="tier-h"><b>Convert &amp; render</b><em>turn each downloaded format into geometry + thumbnails</em></div>
    <div class="row">
      <div class="node local"><div class="nm">adom-sfconvert <span class="new-pill">NEW</span></div><div class="dsc">EAGLE/Fusion .lbr → KiCad (pure Rust). Altium → KiCad.</div><div class="calls">uses lib <b style="color:var(--lib)">altium-pcblib</b> · symbols → <b>service-kicad</b></div></div>
      <div class="node local"><div class="nm">adom-symbol</div><div class="dsc">Renders the schematic symbol (with 3D chip embossed).</div><div class="calls">→ <b>service-kicad</b></div></div>
      <div class="node local"><div class="nm">adom-footprint</div><div class="dsc">Renders the PCB footprint SVG.</div><div class="calls">→ <b>service-kicad</b></div></div>
      <div class="node local"><div class="nm">adom-ds2sf</div><div class="dsc">Extracts sym+footprint from the datasheet PDF.</div><div class="calls">local (uses <code>claude</code> + pdf tools)</div></div>
      <div class="node local"><div class="nm">adom-concur</div><div class="dsc">Cross-checks all sources for agreement.</div><div class="calls">uses lib <b style="color:var(--lib)">altium-pcblib</b></div></div>
      <div class="node local"><div class="nm">adom-step</div><div class="dsc">Handles the 3D STEP model.</div><div class="calls">→ <b>step2glb</b></div></div>
      <div class="node local"><div class="nm">adom-lbr</div><div class="dsc">Side-by-side sym/fp/3D embeddable.</div><div class="calls">→ <b>wiki</b></div></div>
      <div class="node local"><div class="nm">adom-chip-thumbnailer</div><div class="dsc">Bakes the card thumbnails (sym/fp/3D icons).</div><div class="calls">local (OCCT + xvfb)</div></div>
      <div class="node local"><div class="nm">adom-chipsmith</div><div class="dsc">Validates the 3D chip against its footprint.</div><div class="calls">→ <b>service-kicad</b>, <b>step2glb</b></div></div>
    </div>
  </div>

  <!-- LIBS -->
  <div class="tier">
    <div class="tier-h"><b>Local libraries</b><em>Rust crates compiled in — not separate apps</em></div>
    <div class="row">
      <div class="node lib"><div class="nm">altium-pcblib <span class="tag t-lib">lib</span></div><div class="dsc"><b>The Altium reader you built.</b> Parses .PcbLib/.IntLib binary → KiCad pad JSON + SVG. 100% local, no network.</div></div>
      <div class="node lib"><div class="nm">eagle parser <span class="tag t-lib">lib</span></div><div class="dsc">Inside adom-sfconvert. Parses EAGLE/Fusion .lbr XML → KiCad. 100% local.</div></div>
    </div>
  </div>

  <!-- SOURCING -->
  <div class="tier">
    <div class="tier-h"><b>Sourcing</b><em>find the part &amp; its data — each has a baked-in API key in its own service</em></div>
    <div class="row">
      <div class="node local"><div class="nm">adom-parts-search</div><div class="dsc">The umbrella search.</div><div class="calls">→ <b>mouser</b>, <b>digikey</b>, <b>jlcpcb</b></div></div>
      <div class="node local"><div class="nm">adom-mouser</div><div class="calls">→ <b>mouser service</b></div></div>
      <div class="node local"><div class="nm">adom-digikey</div><div class="calls">→ <b>digikey service</b></div></div>
      <div class="node local"><div class="nm">adom-jlcpcb</div><div class="calls">→ <b>jlcpcb service</b></div></div>
    </div>
  </div>

  <!-- BRIDGE -->
  <div class="tier">
    <div class="tier-h"><b>Bridge &amp; infra</b><em>reach your laptop / the platform</em></div>
    <div class="row">
      <div class="node local"><div class="nm">adom-desktop</div><div class="dsc">Bridge to your real laptop.</div><div class="calls">→ <b style="color:var(--desktop)">your laptop</b></div></div>
      <div class="node local"><div class="nm">adom-cli</div><div class="dsc">Adom platform (containers, wiki, carbon).</div></div>
      <div class="node local"><div class="nm">adom-vscode</div><div class="dsc">Reveal files in the editor.</div></div>
    </div>
  </div>

  <div class="arrow">▼ &nbsp; the heavy lifting lives OFF your container &nbsp; ▼</div>

  <!-- REMOTE SERVICES -->
  <div class="tier">
    <div class="tier-h"><b>Remote service containers</b><em>shared, always-on, big installs you never put on your own container</em></div>
    <div class="row">
      <div class="node remote"><div class="nm">🌐 service-kicad <span class="tag t-remote">remote</span></div><div class="dsc"><b>KiCad 10</b> (~2 GB) headless. DRC/ERC, SVG/Gerber/STEP/GLB export, <b>and the Altium symbol importer</b>.</div><div class="k" style="font-size:11px;color:var(--muted);margin-top:5px">kicad-rk5ue5pcfemi.adom.cloud</div></div>
      <div class="node remote"><div class="nm">🌐 step2glb <span class="tag t-remote">remote</span></div><div class="dsc">STEP → GLB 3D conversion (OCCT).</div><div class="k" style="font-size:11px;color:var(--muted);margin-top:5px">step2glb-…adom.cloud</div></div>
      <div class="node remote"><div class="nm">🌐 mouser / digikey / jlcpcb <span class="tag t-remote">remote ×3</span></div><div class="dsc">One service each, with the vendor API key baked in — so you never need a key.</div><div class="k" style="font-size:11px;color:var(--muted);margin-top:5px">mouser-… · digikey-… · jlcpcb-…</div></div>
      <div class="node remote"><div class="nm">🌐 wiki <span class="tag t-remote">remote</span></div><div class="dsc">Publish &amp; install pages/skills.</div><div class="k" style="font-size:11px;color:var(--muted);margin-top:5px">wiki.adom.inc</div></div>
    </div>
  </div>

  <!-- DESKTOP -->
  <div class="tier">
    <div class="tier-h"><b>Your laptop</b><em>via the adom-desktop bridge — not a cloud service</em></div>
    <div class="row">
      <div class="node desktop"><div class="nm">🖥 real Chrome <span class="tag t-desktop">laptop</span></div><div class="dsc">Native-browser / pup automation for vendor downloads (your real logins).</div></div>
      <div class="node desktop"><div class="nm">🖥 KiCad / Fusion <span class="tag t-desktop">laptop</span></div><div class="dsc">Open the finished library in your actual EDA app.</div></div>
    </div>
  </div>

  <!-- EXPLAINERS -->
  <div class="ex">
    <div class="card">
      <h3>🟢 What's a “local CLI”?</h3>
      <p>A small command that's <b>installed in your cloud container</b> (in <code>~/.local/bin</code>) and runs right there. Fast, no network, nothing big to install. Example: <code>adom-sfconvert</code>, <code>adom-symbol</code>.</p>
      <p class="k">These are tiny Rust binaries (a few MB). They do the orchestration, parsing, and file-shuffling.</p>
    </div>
    <div class="card">
      <h3>🟠 What's a “remote service container”?</h3>
      <p>A <b>shared, always-on container we call over HTTPS</b>. It holds the heavy software (KiCad is ~2 GB) so it lives in <b>one</b> place instead of on every user's container.</p>
      <p class="k">When a local CLI needs KiCad, it POSTs a file to <code>service-kicad</code> and gets the result back. <b>Nothing ever installs KiCad on your container.</b></p>
    </div>
  </div>

  <div class="card" style="margin-top:14px">
    <h3><span class="count">15</span> &nbsp;apps chip-fetcher depends on</h3>
    <p>adom-sfconvert <span class="new-pill">NEW</span> · adom-symbol · adom-footprint · adom-ds2sf · adom-concur · adom-step · adom-lbr · adom-chip-thumbnailer · adom-chipsmith · adom-parts-search · adom-mouser · adom-digikey · adom-jlcpcb · adom-desktop · adom-cli &nbsp;(+ adom-vscode for editor reveal).</p>
    <p class="k">All 15 are <b style="color:var(--local)">local CLIs</b>. Between them they reach only <b style="color:var(--remote)">6 remote services</b> (service-kicad, step2glb, mouser, digikey, jlcpcb, wiki) and your laptop. The 2 GB KiCad never touches your container.</p>
  </div>

  <div class="note">
    <b>On Altium specifically:</b> only <b style="color:var(--lib)">altium-pcblib</b> <i>reads</i> Altium libraries (footprints, native/local). <code>adom-altium</code> is an empty stub. The other Altium pages on the wiki — <code>adom-altium-library-importer</code>, <code>altium-part-importer</code>, <code>adom-desktop-altium-bridge</code> (all barrett-land) — go the <b>opposite</b> direction: they write parts <i>into</i> Altium Designer on the desktop. For reading Altium <b>symbols</b> (.SchLib) there's still no native parser, so that one path uses <code>service-kicad</code>.
  </div>
</div>
</body>
</html>