chore: codebase cleanup — remove dead code, consolidate imports, extract constants

- Remove 3 unused exported constants (TRIM_MESSAGES_TO, MAX_TERMINAL_COLS, MAX_TERMINAL_ROWS)
- Consolidate 8 direct util imports into barrel imports (./utils/index.js)
- Extract magic number 8191 to FILE_PEEK_BYTES constant in buffer-limits.ts
- Add explanatory comments to 9 undocumented .catch(() => {}) handlers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
arkon
2026-03-12 15:50:40 +01:00
co-authored by Claude Opus 4.6
parent c46ac30631
commit 98fa55b7b2
12 changed files with 30 additions and 37 deletions
+1 -2
View File
@@ -28,8 +28,7 @@ import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
import { tmpdir } from 'node:os'; import { tmpdir } from 'node:os';
import { join } from 'node:path'; import { join } from 'node:path';
import { EventEmitter } from 'node:events'; import { EventEmitter } from 'node:events';
import { getAugmentedPath } from './utils/claude-cli-resolver.js'; import { getAugmentedPath, ANSI_ESCAPE_PATTERN_SIMPLE } from './utils/index.js';
import { ANSI_ESCAPE_PATTERN_SIMPLE } from './utils/index.js';
import { AI_CHECK_MAX_BACKOFF_MS } from './config/ai-defaults.js'; import { AI_CHECK_MAX_BACKOFF_MS } from './config/ai-defaults.js';
// ========== Security Validation ========== // ========== Security Validation ==========
+11 -5
View File
@@ -56,11 +56,6 @@ export const TRIM_TEXT_TO = 768 * 1024; // 768KB
*/ */
export const MAX_MESSAGES = 1000; export const MAX_MESSAGES = 1000;
/**
* Number of messages to keep when trimming (80% of max).
*/
export const TRIM_MESSAGES_TO = 800;
// ============================================================================ // ============================================================================
// Line Buffer Limits // Line Buffer Limits
// ============================================================================ // ============================================================================
@@ -85,3 +80,14 @@ export const MAX_RESPAWN_BUFFER_SIZE = 1 * 1024 * 1024; // 1MB
* Size to trim respawn buffer to when max is exceeded. * Size to trim respawn buffer to when max is exceeded.
*/ */
export const TRIM_RESPAWN_BUFFER_TO = 512 * 1024; // 512KB export const TRIM_RESPAWN_BUFFER_TO = 512 * 1024; // 512KB
// ============================================================================
// File Peek Limits
// ============================================================================
/**
* Maximum bytes to read when peeking at the beginning of a file.
* Used with `createReadStream({ end })` (inclusive) to read the first 8KB,
* which is enough to extract metadata from the first few JSONL lines.
*/
export const FILE_PEEK_BYTES = 8 * 1024 - 1; // 8KB (inclusive end offset)
-6
View File
@@ -11,11 +11,5 @@
/** Max input length per API request (bytes) */ /** Max input length per API request (bytes) */
export const MAX_INPUT_LENGTH = 64 * 1024; export const MAX_INPUT_LENGTH = 64 * 1024;
/** Max terminal columns for resize requests */
export const MAX_TERMINAL_COLS = 500;
/** Max terminal rows for resize requests */
export const MAX_TERMINAL_ROWS = 200;
/** Max session name length (chars) */ /** Max session name length (chars) */
export const MAX_SESSION_NAME_LENGTH = 128; export const MAX_SESSION_NAME_LENGTH = 128;
+2 -2
View File
@@ -521,7 +521,7 @@ export class PlanOrchestrator {
} finally { } finally {
// Always clean up session and progress interval — centralizing here // Always clean up session and progress interval — centralizing here
// prevents the race where cancel() and catch both try to manage the set // prevents the race where cancel() and catch both try to manage the set
await session.stop().catch(() => {}); await session.stop().catch(() => {}); // Ignore - session cleanup is best-effort in finally block
this.runningSessions.delete(session); this.runningSessions.delete(session);
clearInterval(progressInterval); clearInterval(progressInterval);
} }
@@ -651,7 +651,7 @@ export class PlanOrchestrator {
} finally { } finally {
// Always clean up session and progress interval — centralizing here // Always clean up session and progress interval — centralizing here
// prevents the race where cancel() and catch both try to manage the set // prevents the race where cancel() and catch both try to manage the set
await session.stop().catch(() => {}); await session.stop().catch(() => {}); // Ignore - session cleanup is best-effort in finally block
this.runningSessions.delete(session); this.runningSessions.delete(session);
clearInterval(progressInterval); clearInterval(progressInterval);
} }
+1 -2
View File
@@ -49,8 +49,7 @@ import { Session } from './session.js';
import { AiIdleChecker, type AiCheckResult, type AiCheckState } from './ai-idle-checker.js'; import { AiIdleChecker, type AiCheckResult, type AiCheckState } from './ai-idle-checker.js';
import { AiPlanChecker, type AiPlanCheckResult } from './ai-plan-checker.js'; import { AiPlanChecker, type AiPlanCheckResult } from './ai-plan-checker.js';
import type { TeamWatcher } from './team-watcher.js'; import type { TeamWatcher } from './team-watcher.js';
import { BufferAccumulator } from './utils/buffer-accumulator.js'; import { BufferAccumulator, ANSI_ESCAPE_PATTERN_SIMPLE, assertNever, CleanupManager } from './utils/index.js';
import { ANSI_ESCAPE_PATTERN_SIMPLE, assertNever, CleanupManager } from './utils/index.js';
import { MAX_RESPAWN_BUFFER_SIZE, TRIM_RESPAWN_BUFFER_TO as RESPAWN_BUFFER_TRIM_SIZE } from './config/buffer-limits.js'; import { MAX_RESPAWN_BUFFER_SIZE, TRIM_RESPAWN_BUFFER_TO as RESPAWN_BUFFER_TRIM_SIZE } from './config/buffer-limits.js';
import { import {
isCompletionMessage, isCompletionMessage,
+1 -1
View File
@@ -9,7 +9,7 @@
*/ */
import type { ClaudeMode } from './types.js'; import type { ClaudeMode } from './types.js';
import { getAugmentedPath } from './utils/claude-cli-resolver.js'; import { getAugmentedPath } from './utils/index.js';
/** /**
* Build Claude CLI permission flags based on the configured mode. * Build Claude CLI permission flags based on the configured mode.
+1 -1
View File
@@ -48,8 +48,8 @@ import type { TerminalMultiplexer, MuxSession } from './mux-interface.js';
import { TaskTracker, type BackgroundTask } from './task-tracker.js'; import { TaskTracker, type BackgroundTask } from './task-tracker.js';
import { RalphTracker } from './ralph-tracker.js'; import { RalphTracker } from './ralph-tracker.js';
import { BashToolParser } from './bash-tool-parser.js'; import { BashToolParser } from './bash-tool-parser.js';
import { BufferAccumulator } from './utils/buffer-accumulator.js';
import { import {
BufferAccumulator,
ANSI_ESCAPE_PATTERN_FULL, ANSI_ESCAPE_PATTERN_FULL,
TOKEN_PATTERN, TOKEN_PATTERN,
SPINNER_PATTERN, SPINNER_PATTERN,
+5 -4
View File
@@ -17,7 +17,7 @@
* Tracks per-agent: status, token counts, model, description, tool call count, liveness (PID). * Tracks per-agent: status, token counts, model, description, tool call count, liveness (PID).
* *
* @dependencies config/map-limits (MAX_TRACKED_AGENTS, PENDING_TOOL_CALL_TTL_MS), * @dependencies config/map-limits (MAX_TRACKED_AGENTS, PENDING_TOOL_CALL_TTL_MS),
* utils (CleanupManager, KeyedDebouncer) * config/buffer-limits (FILE_PEEK_BYTES), utils (CleanupManager, KeyedDebouncer)
* @consumedby web/server (SSE broadcast), session (subagent-session correlation) * @consumedby web/server (SSE broadcast), session (subagent-session correlation)
* @emits subagent:discovered, subagent:updated, subagent:tool_call, subagent:tool_result, * @emits subagent:discovered, subagent:updated, subagent:tool_call, subagent:tool_result,
* subagent:progress, subagent:message, subagent:completed * subagent:progress, subagent:message, subagent:completed
@@ -35,6 +35,7 @@ import { execFile } from 'node:child_process';
import { readFile, readdir, stat as statAsync } from 'node:fs/promises'; import { readFile, readdir, stat as statAsync } from 'node:fs/promises';
import { PENDING_TOOL_CALL_TTL_MS, MAX_PENDING_TOOL_CALLS, MAX_TRACKED_AGENTS } from './config/map-limits.js'; import { PENDING_TOOL_CALL_TTL_MS, MAX_PENDING_TOOL_CALLS, MAX_TRACKED_AGENTS } from './config/map-limits.js';
import { STALE_DATA_MAX_AGE_MS } from './config/server-timing.js'; import { STALE_DATA_MAX_AGE_MS } from './config/server-timing.js';
import { FILE_PEEK_BYTES } from './config/buffer-limits.js';
import { CleanupManager, KeyedDebouncer } from './utils/index.js'; import { CleanupManager, KeyedDebouncer } from './utils/index.js';
// ========== Types ========== // ========== Types ==========
@@ -1009,7 +1010,7 @@ export class SubagentWatcher extends EventEmitter {
private async extractDescriptionFromFile(filePath: string): Promise<string | undefined> { private async extractDescriptionFromFile(filePath: string): Promise<string | undefined> {
try { try {
// Only read the first 8KB — more than enough for 5 JSONL lines // Only read the first 8KB — more than enough for 5 JSONL lines
const stream = createReadStream(filePath, { end: 8191 }); const stream = createReadStream(filePath, { end: FILE_PEEK_BYTES });
const rl = createInterface({ input: stream }); const rl = createInterface({ input: stream });
return await new Promise<string | undefined>((resolve) => { return await new Promise<string | undefined>((resolve) => {
@@ -1141,10 +1142,10 @@ export class SubagentWatcher extends EventEmitter {
if (this.fileAgentContext.has(filePath)) { if (this.fileAgentContext.has(filePath)) {
// Known file — handle content change // Known file — handle content change
this.handleFileChange(filePath).catch(() => {}); this.handleFileChange(filePath).catch(() => {}); // Ignore - errors logged internally, don't crash watcher callback
} else { } else {
// New file — register it // New file — register it
this.registerAgentFile(filePath, projectHash, sessionId).catch(() => {}); this.registerAgentFile(filePath, projectHash, sessionId).catch(() => {}); // Ignore - errors logged internally, don't crash watcher callback
} }
}); });
}); });
+5 -5
View File
@@ -61,7 +61,7 @@ export class TeamWatcher extends EventEmitter {
persistent: false, persistent: false,
}); });
const teamsHandler = () => this.pollAsync().catch(() => {}); const teamsHandler = () => this.pollAsync().catch(() => {}); // Ignore - poll errors are non-fatal, next poll will retry
this.teamsWatcher.on('add', teamsHandler); this.teamsWatcher.on('add', teamsHandler);
this.teamsWatcher.on('change', teamsHandler); this.teamsWatcher.on('change', teamsHandler);
this.teamsWatcher.on('unlink', teamsHandler); this.teamsWatcher.on('unlink', teamsHandler);
@@ -82,8 +82,8 @@ export class TeamWatcher extends EventEmitter {
persistent: false, persistent: false,
}); });
this.tasksWatcher.on('add', () => this.pollTasks().catch(() => {})); this.tasksWatcher.on('add', () => this.pollTasks().catch(() => {})); // Ignore - poll errors are non-fatal, next poll will retry
this.tasksWatcher.on('change', () => this.pollTasks().catch(() => {})); this.tasksWatcher.on('change', () => this.pollTasks().catch(() => {})); // Ignore - poll errors are non-fatal, next poll will retry
this.tasksWatcher.on('error', (err) => { this.tasksWatcher.on('error', (err) => {
console.warn('[TeamWatcher] chokidar tasks watcher error:', err); console.warn('[TeamWatcher] chokidar tasks watcher error:', err);
}); });
@@ -95,11 +95,11 @@ export class TeamWatcher extends EventEmitter {
stop(): void { stop(): void {
// Close chokidar watchers // Close chokidar watchers
if (this.teamsWatcher) { if (this.teamsWatcher) {
this.teamsWatcher.close().catch(() => {}); this.teamsWatcher.close().catch(() => {}); // Ignore - watcher cleanup is best-effort during shutdown
this.teamsWatcher = null; this.teamsWatcher = null;
} }
if (this.tasksWatcher) { if (this.tasksWatcher) {
this.tasksWatcher.close().catch(() => {}); this.tasksWatcher.close().catch(() => {}); // Ignore - watcher cleanup is best-effort during shutdown
this.tasksWatcher = null; this.tasksWatcher = null;
} }
if (this.pollTimer) { if (this.pollTimer) {
+1 -7
View File
@@ -40,8 +40,7 @@ import {
type SessionMode, type SessionMode,
type OpenCodeConfig, type OpenCodeConfig,
} from './types.js'; } from './types.js';
import { wrapWithNice } from './utils/nice-wrapper.js'; import { wrapWithNice, SAFE_PATH_PATTERN, findClaudeDir, resolveOpenCodeDir } from './utils/index.js';
import { SAFE_PATH_PATTERN } from './utils/regex-patterns.js';
import type { import type {
TerminalMultiplexer, TerminalMultiplexer,
MuxSession, MuxSession,
@@ -50,11 +49,6 @@ import type {
RespawnPaneOptions, RespawnPaneOptions,
} from './mux-interface.js'; } from './mux-interface.js';
// Claude CLI PATH resolution — shared utility
import { findClaudeDir } from './utils/claude-cli-resolver.js';
// OpenCode CLI PATH resolution
import { resolveOpenCodeDir } from './utils/opencode-cli-resolver.js';
// ============================================================================ // ============================================================================
// Timing Constants // Timing Constants
// ============================================================================ // ============================================================================
+1 -1
View File
@@ -505,7 +505,7 @@ export function registerRalphRoutes(
settings.lastUsedCase = caseName; settings.lastUsedCase = caseName;
const dir = dirname(SETTINGS_PATH); const dir = dirname(SETTINGS_PATH);
if (!existsSync(dir)) mkdirSync(dir, { recursive: true }); if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
fs.writeFile(SETTINGS_PATH, JSON.stringify(settings, null, 2)).catch(() => {}); fs.writeFile(SETTINGS_PATH, JSON.stringify(settings, null, 2)).catch(() => {}); // Ignore - persisting lastUsedCase is non-critical
} catch { } catch {
/* non-critical */ /* non-critical */
} }
+1 -1
View File
@@ -8,7 +8,7 @@
*/ */
import { z } from 'zod'; import { z } from 'zod';
import { SAFE_PATH_PATTERN } from '../utils/regex-patterns.js'; import { SAFE_PATH_PATTERN } from '../utils/index.js';
// ========== Path Validation ========== // ========== Path Validation ==========