app
Parts Search
Public Made by Adomby adom
One search box across Mouser, DigiKey and JLCPCB: parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time.
← Commit history
v2.0.1: The panel mount now retries, and its failures are visible
6 files changed
+32−103
Cargo.lock+1−1@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adom-parts-search"-version = "2.0.0"+version = "2.0.1" dependencies = [ "base64", "clap",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-parts-search"-version = "2.0.0"+version = "2.0.1" edition = "2021" description = "Parts Search Electronics component search — CLI, backend HTTP service, and Hydrogen webview app" license = "MIT"
VERSION+1−1@@ -1 +1 @@-2.0.0+2.0.1
package.json+1−40@@ -38,44 +38,5 @@ "SKILL.md", "BUILD-SKILL.md", "CHANGELOG.md"- ],- "changelog": "The panel mount now retries, and its failures are visible",- "discovery_triggers": [- "parts search",- "find part",- "source component",- "source part",- "compare distributors",- "compare vendors",- "Mouser or DigiKey",- "BOM sourcing",- "price this part",- "where can I get",- "check stock",- "parts availability",- "fastest delivery",- "cheapest part",- "component search",- "part lookup",- "price breaks"- ],- "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.",- "sample_prompts": [- {- "label": "source an STM32F103RBT6",- "prompt": "source an STM32F103RBT6"- },- {- "label": "where can I get an ESP32-S3-WROOM cheape",- "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"- },- {- "label": "compare Mouser, DigiKey and JLCPCB for a",- "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"- },- {- "label": "price this BOM across distributors",- "prompt": "price this BOM across distributors"- } ]-}+}
page.json+8−49@@ -33,25 +33,13 @@ }, "hero": { "type": "image",- "path": "screenshots/hero.png"+ "path": "docs/hero.png" }, "sample_prompts": [- {- "label": "source an STM32F103RBT6",- "prompt": "source an STM32F103RBT6"- },- {- "label": "where can I get an ESP32-S3-WROOM cheape",- "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"- },- {- "label": "compare Mouser, DigiKey and JLCPCB for a",- "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"- },- {- "label": "price this BOM across distributors",- "prompt": "price this BOM across distributors"- }+ "source an STM32F103RBT6",+ "where can I get an ESP32-S3-WROOM cheapest and fastest",+ "compare Mouser, DigiKey and JLCPCB for an LM555",+ "price this BOM across distributors" ], "discovery_triggers": [ "parts search",@@ -66,41 +54,12 @@ "where can I get", "check stock", "parts availability",- "fastest delivery",- "cheapest part",- "component search",- "part lookup",- "price breaks"+ "fastest delivery" ],- "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.",+ "discovery_pitch": "Search Mouser + DigiKey + JLCPCB in parallel from one interface, with product photos and a Mouser-preferred best-source pick.", "metadata": { "platform": "linux" }, "category": "tools",- "org": "adom",- "description": "One search box across Mouser, DigiKey and JLCPCB. Parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time. Dock Bar ready: serve, health, settings, Say it.",- "dependencies": {- "adom/adom-mouser": "*",- "adom/adom-digikey": "*",- "adom/adom-jlcpcb": "*"- },- "needs_sudo": false,- "scripts": {- "install": "./install.sh",- "uninstall": "./uninstall.sh"- },- "files": [- "bin/**",- "skills/**",- "docs/icon.svg",- "dockbar.json",- "install.sh",- "uninstall.sh",- "package.json",- "README.md",- "SKILL.md",- "BUILD-SKILL.md",- "CHANGELOG.md"- ],- "changelog": "The panel mount now retries, and its failures are visible"+ "org": "adom" }
src/app/ui.html+20−11@@ -711,18 +711,27 @@ window.__tooltipAssert=function(){const r=tip.getBoundingClientRect();return r.l // memory. We own only our phrases, our noun, and what the demo button does. let SAY=[],panelApi=null; function renderSay(list){- if(!list||!list.length||JSON.stringify(list)===JSON.stringify(SAY))return;- SAY=list;- if(panelApi||!window.AdomNewbiePanel)return;- panelApi=AdomNewbiePanel.mount({- mount:'#newbie', app:'parts search', appName:'Parts Search', slug:'adom-parts-search',- toggleButton:'#btnHelp',- demo:{label:'Play the demo', meta:'8 steps, about 2 minutes', onPlay:function(){demo.start();}},- phrases:SAY- });- if(panelApi&&panelApi.overBudget&&panelApi.overBudget.length)- console.warn('newbie panel: phrases over budget: '+JSON.stringify(panelApi.overBudget));+ if(!list||!list.length)return;+ if(panelApi&&JSON.stringify(list)===JSON.stringify(SAY))return;+ if(!window.AdomNewbiePanel){console.warn('newbie panel: module not loaded yet, will retry on the next poll');return;}+ try{+ const api=AdomNewbiePanel.mount({+ mount:'#newbie', app:'parts search', appName:'Parts Search', slug:'adom-parts-search',+ toggleButton:'#btnHelp',+ demo:{label:'Play the demo', meta:'8 steps, about 2 minutes', onPlay:function(){demo.start();}},+ phrases:list+ });+ // Only commit SAY once the mount SUCCEEDS. Committing first disabled the+ // retry: every later poll short-circuited on the equality check, and+ // pollState's bare catch swallowed the reason.+ panelApi=api; SAY=list;+ if(api&&api.overBudget&&api.overBudget.length)+ console.warn('newbie panel: phrases over budget: '+JSON.stringify(api.overBudget));+ }catch(e){+ console.error('newbie panel mount failed: '+(e&&e.message||e)+' (retrying next poll)');+ } }+ function countGreenLaunch(){} // ---- Status pill row (status-leds skill): pills at rest, prose on tap ----