chore: bump version to 0.1585

This commit is contained in:
arkon
2026-02-21 07:12:57 +01:00
parent 85ee601b5b
commit 0fe6251424
8 changed files with 48 additions and 57 deletions
+2 -4
View File
@@ -28,6 +28,7 @@ import { LRUMap } from './utils/lru-map.js';
import {
ANSI_ESCAPE_PATTERN_FULL,
TOKEN_PATTERN,
SPINNER_PATTERN,
MAX_SESSION_TOKENS,
} from './utils/index.js';
import {
@@ -1036,10 +1037,7 @@ export class Session extends EventEmitter {
// Detect when Claude starts working (thinking, writing, etc)
// Fast path: check spinner characters on raw data (Unicode, never in ANSI sequences)
const hasSpinner = data.includes('⠋') || data.includes('⠙') ||
data.includes('⠹') || data.includes('⠸') ||
data.includes('⠼') || data.includes('⠴') ||
data.includes('⠦') || data.includes('⠧');
const hasSpinner = SPINNER_PATTERN.test(data);
if (hasSpinner) {
if (!this._isWorking) {
this._isWorking = true;
+3 -3
View File
@@ -74,7 +74,7 @@ export class TeamWatcher extends EventEmitter {
getTeamForSession(sessionId: string): TeamConfig | undefined {
const teamName = this.sessionToTeam.get(sessionId);
if (teamName) {
const team = this.teams.get(teamName);
const team = this.teams.peek(teamName);
if (team) return team;
// Stale reverse index entry — clean up
this.sessionToTeam.delete(sessionId);
@@ -210,7 +210,7 @@ export class TeamWatcher extends EventEmitter {
}
// Detect removed teams
for (const name of Array.from(this.teams.keys())) {
for (const name of this.teams.keys()) {
if (!currentTeamNames.has(name)) {
const removed = this.teams.get(name);
this.teams.delete(name);
@@ -221,7 +221,7 @@ export class TeamWatcher extends EventEmitter {
}
// Prune stale mtime entries for removed teams
this.taskMtimes.delete(name);
for (const key of Array.from(this.inboxMtimes.keys())) {
for (const key of this.inboxMtimes.keys()) {
if (key.startsWith(`${name}/`)) {
this.inboxMtimes.delete(key);
}
+1
View File
@@ -14,6 +14,7 @@ export {
ANSI_ESCAPE_PATTERN_FULL,
ANSI_ESCAPE_PATTERN_SIMPLE,
TOKEN_PATTERN,
SPINNER_PATTERN,
createAnsiPatternFull,
createAnsiPatternSimple,
stripAnsi,
+7
View File
@@ -67,5 +67,12 @@ export function stripAnsi(text: string): string {
* Regex to validate safe file paths (no shell metacharacters).
* Shared by schemas.ts and tmux-manager.ts for consistent path validation.
*/
/**
* Braille spinner characters used by Claude Code's Ink UI.
* Matches any of: ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧
* Used on the hot path (every PTY chunk) — pre-compiled for performance.
*/
export const SPINNER_PATTERN = /[⠋⠙⠹⠸⠼⠴⠦⠧]/;
export const SAFE_PATH_PATTERN = /^[a-zA-Z0-9_\/\-. ~]+$/;
+2 -13
View File
@@ -189,6 +189,7 @@ body {
.session-tabs::-webkit-scrollbar {
width: 4px;
height: 0;
}
.session-tabs::-webkit-scrollbar-track {
@@ -204,10 +205,6 @@ body {
background: var(--border-light);
}
.session-tabs::-webkit-scrollbar {
height: 0;
}
.session-tab {
display: flex;
align-items: center;
@@ -795,10 +792,6 @@ body {
color: var(--accent);
}
.respawn-action-entry.action-command .action-detail {
color: var(--accent-hover);
}
.respawn-action-entry.action-command .action-type {
color: var(--accent);
font-weight: 600;
@@ -1384,6 +1377,7 @@ body {
border-radius: 4px;
border-left: 2px solid var(--text-muted);
transition: border-color 0.2s, background 0.2s;
position: relative;
}
.ralph-task-card.task-pending {
@@ -7315,11 +7309,6 @@ kbd {
background: var(--bg-card);
}
/* Runtime task card enhancements */
.ralph-task-card {
position: relative;
}
.ralph-task-attempts {
position: absolute;
top: 2px;