feat: 问就是封包

This commit is contained in:
claude-code-best
2026-03-31 23:32:58 +08:00
parent d7a729ca68
commit dd9cd782a7
67 changed files with 423 additions and 172 deletions

View File

@@ -159,7 +159,7 @@ export async function getAnthropicClient({
? process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
: getAWSRegion()
const bedrockArgs: ConstructorParameters<typeof AnthropicBedrock>[0] = {
const bedrockArgs: any = {
...ARGS,
awsRegion,
...(isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH) && {
@@ -290,7 +290,7 @@ export async function getAnthropicClient({
const vertexArgs: ConstructorParameters<typeof AnthropicVertex>[0] = {
...ARGS,
region: getVertexRegionForModel(model),
googleAuth,
googleAuth: googleAuth as any,
...(isDebugToStdErr() && { logger: createStderrLogger() }),
}
// we have always been lying about the return type - this doesn't support batching or models

View File

@@ -108,7 +108,7 @@ export function getPromptTooLongTokenGap(
return undefined
}
const { actualTokens, limitTokens } = parsePromptTooLongTokenCounts(
msg.errorDetails,
msg.errorDetails as string,
)
if (actualTokens === undefined || limitTokens === undefined) {
return undefined
@@ -148,7 +148,7 @@ export function isMediaSizeErrorMessage(msg: AssistantMessage): boolean {
return (
msg.isApiErrorMessage === true &&
msg.errorDetails !== undefined &&
isMediaSizeError(msg.errorDetails)
isMediaSizeError(msg.errorDetails as string)
)
}
export const CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = 'Credit balance is too low'

View File

@@ -1279,7 +1279,7 @@ export async function getAllMcpConfigs(): Promise<{
// Keys never collide (`slack` vs `claude.ai Slack`) so the merge below
// won't catch this — need content-based dedup by URL signature.
const { servers: dedupedClaudeAi } = dedupClaudeAiMcpServers(
claudeaiMcpServers,
claudeaiMcpServers as Record<string, ScopedMcpServerConfig>,
claudeCodeServers,
)
@@ -1351,6 +1351,7 @@ export function parseMcpConfig(params: {
if (
getPlatform() === 'windows' &&
(!configToCheck.type || configToCheck.type === 'stdio') &&
('command' in configToCheck) &&
(configToCheck.command === 'npx' ||
configToCheck.command.endsWith('\\npx') ||
configToCheck.command.endsWith('/npx'))

View File

@@ -99,7 +99,7 @@ export async function* runPostToolUseHooks<Input extends AnyObject, Output>(
result.message.attachment.type === 'hook_blocking_error'
)
) {
yield { message: result.message }
yield { message: result.message as AttachmentMessage | ProgressMessage<HookProgress> }
}
if (result.blockingError) {
@@ -251,7 +251,7 @@ export async function* runPostToolUseFailureHooks<Input extends AnyObject>(
result.message.attachment.type === 'hook_blocking_error'
)
) {
yield { message: result.message }
yield { message: result.message as AttachmentMessage | ProgressMessage<HookProgress> }
}
if (result.blockingError) {
@@ -476,7 +476,7 @@ export async function* runPreToolUseHooks(
)) {
try {
if (result.message) {
yield { type: 'message', message: { message: result.message } }
yield { type: 'message', message: { message: result.message as AttachmentMessage | ProgressMessage<HookProgress> } }
}
if (result.blockingError) {
const denialMessage = getPreToolHookBlockingMessage(

View File

@@ -1,4 +1,4 @@
import type { BetaContentBlock } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
import type { BetaContentBlock, BetaUsage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
import { createHash, randomUUID, type UUID } from 'crypto'
import { mkdir, readFile, writeFile } from 'fs/promises'
import isPlainObject from 'lodash-es/isPlainObject.js'
@@ -166,8 +166,8 @@ function addCachedCostToTotalSessionCost(
if (message.type === 'stream_event') {
return
}
const model = message.message.model
const usage = message.message.usage
const model = (message as AssistantMessage).message.model as string
const usage = (message as AssistantMessage).message.usage as BetaUsage
const costUSD = calculateUSDCost(model, usage)
addToTotalSessionCost(costUSD, usage, model)
}
@@ -251,7 +251,7 @@ function mapAssistantMessage(
timestamp: message.timestamp,
message: {
...message.message,
content: message.message.content
content: (message.message.content as BetaContentBlock[])
.map(_ => {
switch (_.type) {
case 'text':
@@ -269,7 +269,7 @@ function mapAssistantMessage(
return _ // Handle other block types unchanged
}
})
.filter(Boolean) as BetaContentBlock[],
.filter(Boolean) as any,
},
type: 'assistant',
}
@@ -282,7 +282,7 @@ function mapMessage(
uuid?: UUID,
): AssistantMessage | SystemAPIErrorMessage | StreamEvent {
if (message.type === 'assistant') {
return mapAssistantMessage(message, f, index, uuid)
return mapAssistantMessage(message as AssistantMessage, f, index, uuid)
} else {
return message
}