Merge branch 'claude-code-best:main' into main

This commit is contained in:
HitMargin
2026-04-05 17:02:07 +08:00
committed by GitHub
3 changed files with 31 additions and 7 deletions

View File

@@ -528,19 +528,20 @@ function highlightLine(
// hljs throws on unknown language despite ignoreIllegals
return [[defaultStyle(theme), code]]
}
if (!hasRootNode(result.emitter)) {
const emitter = result._emitter || {};
if (!hasRootNode(emitter)) {
if (!loggedEmitterShapeError) {
loggedEmitterShapeError = true
logError(
new Error(
`color-diff: hljs emitter shape mismatch (keys: ${Object.keys(result.emitter).join(',')}). Syntax highlighting disabled.`,
`color-diff: hljs emitter shape mismatch (keys: ${Object.keys(emitter).join(',')}). Syntax highlighting disabled.`,
),
)
}
return [[defaultStyle(theme), code]]
}
const blocks: Block[] = []
flattenHljs(result.emitter.rootNode, theme, undefined, blocks)
flattenHljs(emitter.rootNode, theme, undefined, blocks)
return blocks
}

View File

@@ -34,7 +34,18 @@ export class FileStateCache {
this.cache = new LRUCache<string, FileState>({
max: maxEntries,
maxSize: maxSizeBytes,
sizeCalculation: value => Math.max(1, Buffer.byteLength(value.content)),
sizeCalculation: value => {
const c = value.content
const s =
typeof c === 'string'
? c
: c === null || c === undefined
? ''
: typeof c === 'object'
? JSON.stringify(c)
: String(c)
return Math.max(1, Buffer.byteLength(s, 'utf8'))
},
})
}

View File

@@ -45,6 +45,14 @@ export type PermissionPromptTool = Tool<
// during permission prompts or limited tool operations
const ASK_READ_FILE_STATE_CACHE_SIZE = 10
/** Transcript JSON may deserialize Write tool `content` as a nested object — LRU needs strings. */
function coerceToolContentToString(value: unknown): string {
if (typeof value === 'string') return value
if (value === null || value === undefined) return ''
if (typeof value === 'object') return JSON.stringify(value)
return String(value)
}
/**
* Checks if the result should be considered successful based on the last message.
* Returns true if:
@@ -402,14 +410,18 @@ export function extractReadFilesFromMessages(
) {
// Extract file_path and content from the Write tool use input
const input = content.input as
| { file_path?: string; content?: string }
| { file_path?: string; content?: unknown }
| undefined
if (input?.file_path && input?.content) {
if (
input?.file_path &&
input.content !== undefined &&
input.content !== null
) {
// Normalize to absolute path for consistent cache lookups
const absolutePath = expandPath(input.file_path, cwd)
fileWriteToolUseIds.set(content.id, {
filePath: absolutePath,
content: input.content,
content: coerceToolContentToString(input.content),
})
}
} else if (