From 9e92201206b9674120b63fe9f2fc848e289bb926 Mon Sep 17 00:00:00 2001 From: Yejun Su Date: Sun, 22 Mar 2026 00:46:45 +0800 Subject: [PATCH] feat(statusbar): show cwd with home abbreviated to ~ --- extensions/pi-remote-control/html.ts | 16 ++++++++++++++++ extensions/pi-remote-control/messages.ts | 9 ++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/extensions/pi-remote-control/html.ts b/extensions/pi-remote-control/html.ts index 29d2960..4e624c5 100644 --- a/extensions/pi-remote-control/html.ts +++ b/extensions/pi-remote-control/html.ts @@ -69,6 +69,16 @@ return /* html */ ` } #statusbar .dot.connected { background: var(--asst); } #statusbar .dot.streaming { background: var(--streaming); animation: pulse 1s infinite; } + #cwd-label { + font-family: "Menlo", "Monaco", "Consolas", monospace; + font-size: 11px; + color: var(--muted); + opacity: 0.8; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 55vw; + } @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } } /* ── Messages ── */ @@ -377,6 +387,7 @@ return /* html */ `
Connecting\u2026 +
@@ -396,12 +407,14 @@ return /* html */ ` tools: {}, streaming: false, model: null, + cwd: null, }; var $msgs = document.getElementById("messages"); var $active = document.getElementById("active-tools"); var $dot = document.getElementById("dot"); var $connLabel = document.getElementById("conn-label"); + var $cwdLabel = document.getElementById("cwd-label"); var $prompt = document.getElementById("prompt"); var $sendBtn = document.getElementById("send-btn"); @@ -564,6 +577,8 @@ return /* html */ ` $connLabel.textContent = connected ? (S.streaming ? "Agent working\u2026" : "Connected") : "Disconnected \u2014 reconnecting\u2026"; + var cwd = connected && S.cwd ? S.cwd : null; + $cwdLabel.textContent = cwd || ""; $sendBtn.disabled = !connected; if (!connected) { $sendBtn.classList.remove("ready"); @@ -613,6 +628,7 @@ return /* html */ ` S.msgs = msg.messages || []; S.streaming = !!(msg.state && msg.state.isStreaming); S.model = msg.state && msg.state.model; + S.cwd = (msg.state && msg.state.cwd) || null; S.pending = null; S.tools = {}; renderAll(); diff --git a/extensions/pi-remote-control/messages.ts b/extensions/pi-remote-control/messages.ts index 549ba6a..1ffbeee 100644 --- a/extensions/pi-remote-control/messages.ts +++ b/extensions/pi-remote-control/messages.ts @@ -80,6 +80,13 @@ export function getBranchMessages(ctx: ExtensionContext): RenderMsg[] { return out; } +function abbreviateHome(p: string): string { + const home = process.env.HOME; + if (home && p === home) return "~"; + if (home && p.startsWith(home + "/")) return "~" + p.slice(home.length); + return p; +} + export function buildSyncMessage(ctx: ExtensionContext): { type: "sync"; messages: RenderMsg[]; @@ -96,7 +103,7 @@ export function buildSyncMessage(ctx: ExtensionContext): { state: { isStreaming: !ctx.isIdle(), model: ctx.model?.id, - cwd: ctx.cwd, + cwd: abbreviateHome(ctx.cwd), sessionName: ctx.sessionManager.getSessionName(), }, };