← Commit history

ship-night: park Try it (copy-only Say it strip); the /ai-threads/run-prompt path stays in code behind TRY_IT_PARKED; 1.3.6

John Lauer ·4a011fd656 ·1mo ago ·parent 7e9d640
4 files changed +20−3
Cargo.lock+1−1
@@ -4,7 +4,7 @@ version = 4  [[package]] name = "adom-chip-fetcher"-version = "1.3.5"+version = "1.3.6" dependencies = [  "anyhow",  "clap",
Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "adom-chip-fetcher"-version = "1.3.5"+version = "1.3.6" edition = "2021" description = "Crawls the web on your behalf to gather everything about the chips you care about (datasheet, symbol, footprint, 3D, stock) into one library, by driving Chrome via pup." 
src/dock.rs+10
@@ -239,6 +239,16 @@ pub fn say_phrases() -> Vec<String> { /// networking; in a cloud container it is not, and copying is the right /// answer there. pub fn try_phrase(phrase: &str) -> Value {+    // TRY_IT_PARKED (ship night 2026-08-23, dock-bar thread ruling, matching+    // adom-parts-search): every /ai-threads call from an app server can wake+    // ah's parked AI Threads backend, and run-prompt's typing path has an+    // unverified crash fix that has killed the whole ah process. Copy-only+    // until the all-clear; flip this to false to bring Try it back.+    const TRY_IT_PARKED: bool = true;+    if TRY_IT_PARKED {+        let _ = phrase;+        return json!({"staged": false, "reason": "Try it is parked tonight (ship-night posture); copy the phrase and paste it to your AI"});+    }     let t = Duration::from_millis(1500);     let get = |path: &str| -> Option<Value> {         http_get(HYDROGEN_CONTROL_PORT, path, t).and_then(|b| serde_json::from_str(&b).ok())
src/ui/index.html+8−1
@@ -561,7 +561,7 @@ dialog.settings{width:min(680px,92vw);overflow:hidden}     <section class="say" id="say" aria-labelledby="sayTitle">       <div class="say-head">         <h2 id="sayTitle">Say it to your AI</h2>-        <span class="say-sub">You do not drive this dashboard by hand. You ask your AI, using the words <b>chip fetcher</b>. Click a phrase to copy it; Try it stages it in this app's AI thread.</span>+        <span class="say-sub">You do not drive this dashboard by hand. You ask your AI, using the words <b>chip fetcher</b>. Click a phrase to copy it, then paste it to your AI.</span>       </div>       <div class="say-list" id="sayList"></div>     </section>@@ -695,6 +695,7 @@ const $id = id => document.getElementById(id); function escapeHtml(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'})[m]); } // Relative paths so the page works behind /proxy/<port>/ and inside a webview. const API_BASE = location.pathname.replace(/index\.html$/, '').replace(/\/$/, '');+const TRY_IT_PARKED = true; // ship-night posture: Say it is copy-only until the ah typing-path fix is certified const DASH = '\u2014'; // the data sentinel inventory.rs emits for "unknown"; never shown to a person const isPhone = () => matchMedia('(hover: none)').matches || window.innerWidth < 720; @@ -1032,6 +1033,12 @@ async function buildSay() {     b.setAttribute('data-tooltip', 'Copy this phrase to your clipboard, then paste it to your AI.');     b.innerHTML = '&ldquo;' + escapeHtml(p).replace(/chip ?fetcher/gi, m => '<em>' + m + '</em>') + '&rdquo;';     b.onclick = async () => { try { await navigator.clipboard.writeText(p); cfToast('Copied: ' + p, { type: 'ok' }); } catch (e) { cfToast('Could not copy: ' + e.message, { type: 'err' }); } };+    // TRY_IT_PARKED (ship night 2026-08-23, dock-bar thread): the Try it path+    // POSTs /ai-threads/run-prompt, and tonight ah parks its AI Threads backend+    // until intent AND the typing path has an unverified crash fix, so one+    // click could crash the app the user is standing in. Copy-only until the+    // all-clear; flip the flag to bring Try it back.+    if (TRY_IT_PARKED) { item.appendChild(b); list.appendChild(item); continue; }     const t = document.createElement('button'); t.className = 'say-try'; t.type = 'button'; t.textContent = 'Try it';     t.setAttribute('data-tooltip', "Stage this phrase in this app's AI thread. It is not sent; you press Enter there.");     t.onclick = async () => {