← Commit history

Publish 1.0.80

John Lauer ·d6b1407d73 ·1mo ago ·parent 9b73076
3 files changed +25−6
dashboard/kicad_dashboard.py+23−4
@@ -49,7 +49,7 @@ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path from urllib.parse import unquote, urlparse -VERSION = "3.3.0"+VERSION = "3.3.1" AI_THREAD = "kicad-dashboard" DEFAULT_PORT = 8931 UI_DIR = Path(__file__).resolve().parent / "ui"@@ -177,15 +177,34 @@ def say_send(phrase):      d = res.get("data") if isinstance(res.get("data"), dict) else res     # VERIFY BY DELIVERY, never by the thread's name (issue #59: a correctly-    # named tab that delivered nothing, and an unnamed tab that delivered).-    delivered = d.get("delivered_to") or d.get("delivered_in_conversation")+    # named tab that delivered nothing, and an unnamed tab that delivered -+    # measured live on AdomLapper 2026-08-25, where a successful send came back+    # with "title": null).+    #+    # BUT delivered_to ALONE PRODUCES FALSE FAILURES. The API's own hint calls+    # it "a diff, not a guess" that is "empty ... if verification has not caught+    # up", and that is exactly what my first live send hit: an empty array on a+    # prompt that had in fact been typed and submitted. Accept EITHER the+    # transcript diff or the injector's own confirmation.+    inject = d.get("inject") if isinstance(d.get("inject"), dict) else {}+    delivered = (d.get("delivered_to")+                 or inject.get("delivered_in_conversation")+                 or d.get("delivered_in_conversation"))     if not delivered:         hint = d.get("_hints") or d.get("_hint") or res.get("_hints") or ""         if isinstance(hint, dict):             hint = " ".join(str(v) for v in hint.values())+        # ok:true with no delivery signal YET is "opened but unconfirmed", which+        # is not the same as failed. Say that precisely.+        if d.get("ok") or res.get("ok"):+            return {"ok": False, "unconfirmed": True,+                    "why": "the thread opened and the prompt was submitted, but delivery is "+                           "not confirmed yet. Check the new AI tab; the phrase was also "+                           "copied so you can paste it if it did not land."}         return {"ok": False, "why": ("the AI panel opened a thread but did not confirm "                                      "delivery. " + (str(hint)[:200] if hint else "")).strip()}-    return {"ok": True, "deliveredTo": str(delivered), "sid": d.get("sid")}+    return {"ok": True, "deliveredTo": str(delivered)[:200],+            "tid": d.get("tid"), "sid": d.get("sid")}   def ab(target, verb, args=None, timeout=140):
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "kicad-bridge",-  "version": "1.0.79",+  "version": "1.0.80",   "type": "app",   "description": "Skills for your container so your AI knows how to drive the KiCad bridge. The bridge runtime itself is the release zip; Adom Bridge loads that.",   "tags": [
page.json+1−1
@@ -4,7 +4,7 @@   "slug": "kicad-bridge",   "title": "KiCad - the KiCad Bridge",   "brief": "Reference implementation of the KiCad bridge — multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.",-  "version": "1.0.79",+  "version": "1.0.80",   "tags": [     "kicad",     "pcb",