fix: address coderabbit review feedback on PR #413

- performanceShim: add no-arg getEntries() so the 'as typeof performance'
  cast is accurate for callers (Bun, OTel, dev tooling).
- scripts/dev: make production NODE_ENV opt-in via CLAUDE_CODE_FORCE_NODE_ENV
  so dev-only diagnostics (DevBar, doctorDiagnostic, AutoUpdater dev
  branches, etc.) keep working by default.
- gemini/index: switch deep-relative Tools import to the src/* path alias.
- screens/REPL: drop the unnecessary 'as any' on the getPipeIpc selector to
  match other call sites.
This commit is contained in:
claude-code-best
2026-05-05 13:23:35 +00:00
parent 872ee280e3
commit a5ca2c1a97
4 changed files with 19 additions and 5 deletions

View File

@@ -14,11 +14,20 @@ const __dirname = dirname(__filename)
const projectRoot = join(__dirname, '..')
const cliPath = join(projectRoot, 'src/entrypoints/cli.tsx')
// React production mode — prevents 6,889+ _debugStack Error objects
// (12MB) from accumulating during long-running sessions.
// Opt-in via CLAUDE_CODE_FORCE_NODE_ENV=production for dev sessions that
// need the memory optimization. Default keeps NODE_ENV='development' so
// dev-only diagnostics (DevBar, doctorDiagnostic, AutoUpdater dev branches,
// etc.) continue to work.
const forcedNodeEnv =
process.env.CLAUDE_CODE_FORCE_NODE_ENV ??
process.env.NODE_ENV ??
'development'
const defines = {
...getMacroDefines(),
// React production mode — prevents 6,889+ _debugStack Error objects
// (12MB) from accumulating during long-running sessions.
'process.env.NODE_ENV': JSON.stringify('production'),
'process.env.NODE_ENV': JSON.stringify(forcedNodeEnv),
}
const defineArgs = Object.entries(defines).flatMap(([k, v]) => [

View File

@@ -4937,7 +4937,7 @@ export function REPL({
useMailboxBridge({ isLoading, onSubmitMessage: handleIncomingPrompt });
useMasterMonitor();
useSlaveNotifications();
const _pipeIpcState = useAppState(s => getPipeIpc(s as any));
const _pipeIpcState = useAppState(s => getPipeIpc(s));
usePipePermissionForward({ store, tools, setMessages, setToolUseConfirmQueue, getToolUseContext, mainLoopModel });
usePipeMuteSync({ setToolUseConfirmQueue });

View File

@@ -6,7 +6,7 @@ import type {
StreamEvent,
SystemAPIErrorMessage,
} from '../../../types/message.js'
import { type Tools } from '../../../Tool.js'
import type { Tools } from 'src/Tool.js'
import { toolToAPISchema } from '../../../utils/api.js'
import { logForDebugging } from '../../../utils/debug.js'
import {

View File

@@ -105,6 +105,10 @@ function getEntriesByName(name: string, type?: string): PerformanceEntryLike[] {
return entries.filter(e => e.name === name)
}
function getEntries(): PerformanceEntryLike[] {
return [...getEntriesByType('mark'), ...getEntriesByType('measure')]
}
function clearMarks(name?: string): void {
if (name !== undefined) {
marks.delete(name)
@@ -128,6 +132,7 @@ const shim = {
now,
mark,
measure: measure as typeof performance.measure,
getEntries: getEntries as typeof performance.getEntries,
getEntriesByType: getEntriesByType as typeof performance.getEntriesByType,
getEntriesByName: getEntriesByName as typeof performance.getEntriesByName,
clearMarks: clearMarks as typeof performance.clearMarks,