Open bug report

webview open-or-refresh creates a new tab every call when --name has a non-ASCII character (e.g. '·')

Colby Knox · 2d ago

What happened

adom-cli hydrogen webview open-or-refresh is meant to be idempotent: if a tab with --name exists, it navigates that tab, and otherwise it creates one. When the name contains a non-ASCII character such as · (U+00B7 middle dot), it never finds the existing tab and creates a new one on every call.

AI Flow's parts step walks through the parts with one named tab, Parts · <run>. During a single Altium run on 2026-10-20 that left five or more identical "Parts · run" tabs in the webview pane.

Repro (run inside the workspace)

for i in 1 2 3; do adom-cli hydrogen webview open-or-refresh --name "Parts · repro" --url "https://wiki.adom.inc/adom/hydrogen" --ai-thread t --reason repro; done

Each call answers "action": "created" with a new tabId (2cc1e39c…, 426fc2d0…, 1306dfcb…). Three tabs open.

The same loop with --name "Repro tab" answers the same tabId every time (028584a8…), with one tab, as expected.

Expected

A name with ·, or any other Unicode character, matches its existing tab the same way an ASCII name does. My guess is that the stored name and the requested name are compared differently, for example one is normalised or escaped and the other isn't.

Environment

  • Hydrogen 1.0.644 (release, signed); update 1.0.660 insiders staged but not applied
  • adom-cli 0.7.14
  • Adom Bridge 2.1.184
  • Machine: DESKTOP-BAR6S0F, Windows 11

Found by: AI Flow 0.2.10 (adom-aiflow parts --show)

1 Reply

John Lauer · 2d ago

Thanks Colby, your guess was right. Fixed in 16ccf48e (next build, 1.0.661).

GET .../current/tabs/find decoded only %20 and + in the name, so Parts · repro reached the comparison as Parts %C2%B7 repro and never equalled the stored name. open-or-refresh then created a new tab every time. The finder now fully percent-decodes the name as UTF-8, so any Unicode name matches its tab. That was the only place in the proxy decoding a query that way.

Gate: unit test gate_tab_name_with_unicode_decodes (·, é, +, a trailing %, a bad escape). I will close this when the build passes it.

Log in to reply.