pi-claude-code-ui 1.0.72 → 1.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -1
- package/extensions/index.ts +14 -13
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,11 +3,18 @@
|
|
|
3
3
|
> [!IMPORTANT]
|
|
4
4
|
> **1.0.69 — package rename (permanent).** Canonical npm name is now [`pi-claude-code-ui`](https://www.npmjs.com/package/pi-claude-code-ui). `pi-claude-style-tools` is legacy and will not receive further releases. Install with `pi install npm:pi-claude-code-ui` or `npm i pi-claude-code-ui`.
|
|
5
5
|
|
|
6
|
+
## 1.0.73 — 2026-07-18
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- **Agent rows align with other tools again** — removed the extra leading indent that only applied to Agent-family tool rows.
|
|
11
|
+
- **Agent breathe stays centered** — drop double-width `⬤` (it walked the baseline). Cycle is now single-cell glyphs `● → • → · → (invisible) → · → •` so the optical center never moves.
|
|
12
|
+
|
|
6
13
|
## 1.0.72 — 2026-07-18
|
|
7
14
|
|
|
8
15
|
### Changed
|
|
9
16
|
|
|
10
|
-
- **Agent tools breathe** — `Agent` / subagent tools use a size cycle while pending
|
|
17
|
+
- **Agent tools breathe** — `Agent` / subagent tools use a size cycle while pending instead of the ordinary on/off `●` blink, so agent work reads as a different kind of tool.
|
|
11
18
|
|
|
12
19
|
## 1.0.71 — 2026-07-18
|
|
13
20
|
|
package/extensions/index.ts
CHANGED
|
@@ -440,12 +440,6 @@ function isAgentFamilyToolName(name: unknown): boolean {
|
|
|
440
440
|
return typeof name === "string" && AGENT_FAMILY_TOOL_NAMES.has(name);
|
|
441
441
|
}
|
|
442
442
|
|
|
443
|
-
function shouldIndentToolExecution(value: unknown): boolean {
|
|
444
|
-
if (!value || typeof value !== "object") return false;
|
|
445
|
-
const toolName = (value as Record<string, unknown>).toolName;
|
|
446
|
-
return isAgentFamilyToolName(toolName);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
443
|
function isTerminalImageLine(line: string): boolean {
|
|
450
444
|
return line.includes(KITTY_IMAGE_PREFIX) || line.includes(ITERM2_IMAGE_PREFIX);
|
|
451
445
|
}
|
|
@@ -550,8 +544,11 @@ function getToolGroupOverallStatus(tools: any[]): ToolStatus {
|
|
|
550
544
|
// spot for ordinary tools. Agent-family tools use a breathing size cycle.
|
|
551
545
|
const STATUS_DOT_FILLED = "●";
|
|
552
546
|
const STATUS_DOT_BOLD = "\x1b[1m";
|
|
553
|
-
//
|
|
554
|
-
|
|
547
|
+
// Single-cell glyphs only (⬤ is often double-width and walks the baseline).
|
|
548
|
+
// Optical sizes share the same cell so the center stays put while breathing:
|
|
549
|
+
// big ● → medium • → small · → invisible → small · → medium •
|
|
550
|
+
const AGENT_BREATHE_GLYPHS = ["●", "•", "·", " ", "·", "•"] as const;
|
|
551
|
+
const AGENT_BREATHE_LEN = AGENT_BREATHE_GLYPHS.length;
|
|
555
552
|
|
|
556
553
|
function paintStatusDot(colorAnsi: string): string {
|
|
557
554
|
return `${colorAnsi}${STATUS_DOT_BOLD}${STATUS_DOT_FILLED}${TRANSPARENT_RESET}`;
|
|
@@ -563,9 +560,12 @@ function themeStatusDot(theme: Theme, colorKey: "success" | "error" | "dim" | "m
|
|
|
563
560
|
}
|
|
564
561
|
|
|
565
562
|
function agentBreatheDot(theme: Theme): string {
|
|
566
|
-
|
|
563
|
+
// Always exactly one display cell — matches ordinary tool dots, keeps titles aligned.
|
|
564
|
+
const glyph = AGENT_BREATHE_GLYPHS[_globalBlinkPhaseIndex % AGENT_BREATHE_LEN];
|
|
567
565
|
if (glyph === " ") return " ";
|
|
568
|
-
|
|
566
|
+
// Bold only on the largest frame so weight changes without shifting the cell.
|
|
567
|
+
const bold = glyph === "●" ? STATUS_DOT_BOLD : "";
|
|
568
|
+
return theme.fg("success", `${bold}${glyph}`);
|
|
569
569
|
}
|
|
570
570
|
|
|
571
571
|
function groupStatusLight(status: ToolStatus): string {
|
|
@@ -1018,10 +1018,11 @@ function patchGlobalToolBorders(): void {
|
|
|
1018
1018
|
(this as any)[TOOL_RENDER_CACHE] = { width, mode: toolBackgroundMode, lines: rendered, ...branchCache };
|
|
1019
1019
|
return rendered;
|
|
1020
1020
|
}
|
|
1021
|
-
|
|
1021
|
+
// Agent-family tools stay column-aligned with every other tool row — no extra
|
|
1022
|
+
// leading indent (the old nested pad made Agent look offset from Read/Bash).
|
|
1022
1023
|
const core = textLines.map((line) => {
|
|
1023
1024
|
const normalized = normalizeLeadingCheckGlyph(line);
|
|
1024
|
-
return clampLineWidth(stripOuterBackgroundAnsi(
|
|
1025
|
+
return clampLineWidth(stripOuterBackgroundAnsi(normalized), width);
|
|
1025
1026
|
});
|
|
1026
1027
|
const spacerLine = " ".repeat(width);
|
|
1027
1028
|
let result: string[];
|
|
@@ -2681,7 +2682,7 @@ function _scheduleGlobalBlinkTimer(): void {
|
|
|
2681
2682
|
_clearAllBlinkContexts();
|
|
2682
2683
|
return;
|
|
2683
2684
|
}
|
|
2684
|
-
_globalBlinkPhaseIndex = (_globalBlinkPhaseIndex + 1) %
|
|
2685
|
+
_globalBlinkPhaseIndex = (_globalBlinkPhaseIndex + 1) % AGENT_BREATHE_LEN;
|
|
2685
2686
|
_globalBlinkPhase = _globalBlinkPhaseIndex % 2 === 0;
|
|
2686
2687
|
for (const entry of getBlinkingEntries()) {
|
|
2687
2688
|
try { entry.invalidate(); } catch { /* noop */ }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-claude-code-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.73",
|
|
4
4
|
"description": "Claude Code-style grouped tool rows for pi with Ctrl+O/Ctrl+Shift+O previews, math rendering, and consistent built-in, MCP, and custom tool rendering",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|