feat: 大规模清理 claude 的类型问题及依赖

This commit is contained in:
claude-code-best
2026-03-31 22:21:35 +08:00
parent 2c759fe6fa
commit 4c0a655a1c
38 changed files with 1154 additions and 718 deletions

View File

@@ -1,20 +1,22 @@
import type { BetaUsage as Usage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
import { roughTokenCountEstimationForMessages } from '../services/tokenEstimation.js'
import type { AssistantMessage, Message } from '../types/message.js'
import type { AssistantMessage, ContentItem, Message } from '../types/message.js'
import { SYNTHETIC_MESSAGES, SYNTHETIC_MODEL } from './messages.js'
import { jsonStringify } from './slowOperations.js'
export function getTokenUsage(message: Message): Usage | undefined {
if (
message?.type === 'assistant' &&
message.message &&
'usage' in message.message &&
!(
message.message.content[0]?.type === 'text' &&
SYNTHETIC_MESSAGES.has(message.message.content[0].text)
Array.isArray(message.message.content) &&
(message.message.content as ContentItem[])[0]?.type === 'text' &&
SYNTHETIC_MESSAGES.has((message.message.content as Array<ContentItem & { text: string }>)[0]!.text)
) &&
message.message.model !== SYNTHETIC_MODEL
) {
return message.message.usage
return message.message.usage as Usage
}
return undefined
}
@@ -184,15 +186,17 @@ export function getAssistantMessageContentLength(
message: AssistantMessage,
): number {
let contentLength = 0
for (const block of message.message.content) {
const content = message.message?.content
if (!Array.isArray(content)) return contentLength
for (const block of content as ContentItem[]) {
if (block.type === 'text') {
contentLength += block.text.length
contentLength += (block as ContentItem & { text: string }).text.length
} else if (block.type === 'thinking') {
contentLength += block.thinking.length
contentLength += (block as ContentItem & { thinking: string }).thinking.length
} else if (block.type === 'redacted_thinking') {
contentLength += block.data.length
contentLength += (block as ContentItem & { data: string }).data.length
} else if (block.type === 'tool_use') {
contentLength += jsonStringify(block.input).length
contentLength += jsonStringify((block as ContentItem & { input: unknown }).input).length
}
}
return contentLength
@@ -252,10 +256,10 @@ export function tokenCountWithEstimation(messages: readonly Message[]): number {
}
return (
getTokenCountFromUsage(usage) +
roughTokenCountEstimationForMessages(messages.slice(i + 1))
roughTokenCountEstimationForMessages(messages.slice(i + 1) as Parameters<typeof roughTokenCountEstimationForMessages>[0])
)
}
i--
}
return roughTokenCountEstimationForMessages(messages)
return roughTokenCountEstimationForMessages(messages as Parameters<typeof roughTokenCountEstimationForMessages>[0])
}