feat: reuse existing tabs when opening sessions instead of always creating new ones

Use named window targets (session-{id}, instance-{id}) instead of _blank:
- use-instance-actions.ts: window.open(..., 'session-{id}') for programmatic opens
- session-card.tsx: <a target='session-{id}'> for direct link opens (mobile + desktop)
- workspace-instance-chips.tsx: <a target='instance-{id}'> for chip links
- instance-list.tsx: <a target='instance-{id}'> for instance open links

Browser behavior: if a tab with that target name exists, it navigates/focuses
that tab instead of opening a new one.

Quality gates: tsc --noEmit pass, npm run build pass, 80/80 tests pass
This commit is contained in:
Developer
2026-06-09 11:01:40 +00:00
parent 152f87a254
commit 486f3cbc44
5 changed files with 136 additions and 102 deletions
@@ -43,7 +43,7 @@ export function WorkspaceInstanceChips({
{inst.status === "running" && inst.url && (
<a
href={inst.url}
target="_blank"
target={`instance-${inst.id}`}
rel="noopener noreferrer"
onClick={(e) => e.stopPropagation()}
>