mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 13:55:50 +00:00
fix(types): replace all as any with proper type assertions
Eliminate unsafe `as any` casts across 21 non-test source files, replacing them with specific type annotations: - Bridge transport: use StdoutMessage type for write/writeBatch calls - print.ts: type msg.request as Record<string, unknown> for unknown SDK control subtypes; use StdoutMessage for output.enqueue() - API providers (openai/grok/gemini): import ChatCompletion types, type streams as AsyncIterable<ChatCompletionChunk>, type request bodies as ChatCompletionCreateParamsStreaming - Computer use executor: use Partial<ResolvePrepareCaptureResult> for cross-platform screenshot result - Components: replace Ink color string casts with proper typing - Win32 bridge: type stdin as Writable after null check All 2453 tests pass with 0 failures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -423,18 +423,21 @@ export function createCliExecutor(opts: {
|
||||
targetW,
|
||||
targetH,
|
||||
opts.preferredDisplayId,
|
||||
opts.autoResolve,
|
||||
opts.doHide,
|
||||
),
|
||||
)
|
||||
// Ensure the result has fields expected by toolCalls.ts (hidden, displayId).
|
||||
// macOS native returns these from Swift; our cross-platform ComputerUseAPI
|
||||
// returns {base64, width, height} — fill in the missing fields.
|
||||
const baseResult = raw as Partial<ResolvePrepareCaptureResult> & { width?: number; height?: number }
|
||||
return {
|
||||
...raw,
|
||||
hidden: (raw as any).hidden ?? [],
|
||||
displayId: (raw as any).displayId ?? opts.preferredDisplayId ?? d.displayId,
|
||||
}
|
||||
displayWidth: baseResult.displayWidth ?? baseResult.width,
|
||||
displayHeight: baseResult.displayHeight ?? baseResult.height,
|
||||
originX: baseResult.originX ?? 0,
|
||||
originY: baseResult.originY ?? 0,
|
||||
hidden: baseResult.hidden ?? [],
|
||||
displayId: baseResult.displayId ?? opts.preferredDisplayId ?? d.displayId,
|
||||
} as ResolvePrepareCaptureResult
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
import * as path from 'path'
|
||||
import type { Writable } from 'stream'
|
||||
|
||||
interface BridgeRequest {
|
||||
id: number
|
||||
@@ -48,7 +49,7 @@ export function ensureBridge(): boolean {
|
||||
})
|
||||
|
||||
// Read stdout lines asynchronously
|
||||
const reader = bridgeProc.stdout.getReader()
|
||||
const reader = (bridgeProc.stdout as ReadableStream<Uint8Array>).getReader()
|
||||
const readLoop = async () => {
|
||||
try {
|
||||
while (true) {
|
||||
@@ -114,12 +115,12 @@ export async function call<T = unknown>(
|
||||
}, timeoutMs)
|
||||
|
||||
// Clear timeout on resolve/reject
|
||||
const origResolve = resolve
|
||||
const origResolve = resolve as (v: unknown) => void
|
||||
const origReject = reject
|
||||
pendingRequests.set(id, {
|
||||
resolve: v => {
|
||||
clearTimeout(timer)
|
||||
;(origResolve as any)(v)
|
||||
origResolve(v)
|
||||
},
|
||||
reject: e => {
|
||||
clearTimeout(timer)
|
||||
@@ -128,8 +129,14 @@ export async function call<T = unknown>(
|
||||
})
|
||||
|
||||
try {
|
||||
bridgeProc!.stdin.write(JSON.stringify(req) + '\n')
|
||||
bridgeProc!.stdin.flush()
|
||||
const stdin = bridgeProc!.stdin
|
||||
if (stdin) {
|
||||
const writable = stdin as Writable
|
||||
writable.write(JSON.stringify(req) + '\n')
|
||||
if (typeof writable.flush === 'function') {
|
||||
writable.flush()
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
clearTimeout(timer)
|
||||
pendingRequests.delete(id)
|
||||
@@ -176,7 +183,13 @@ export function callSync<T = unknown>(
|
||||
export function stopBridge(): void {
|
||||
if (bridgeProc) {
|
||||
try {
|
||||
bridgeProc.stdin.end()
|
||||
const stdin = bridgeProc.stdin
|
||||
if (stdin) {
|
||||
const writable = stdin as Writable
|
||||
if (typeof writable.end === 'function') {
|
||||
writable.end()
|
||||
}
|
||||
}
|
||||
bridgeProc.kill()
|
||||
} catch {}
|
||||
bridgeProc = null
|
||||
|
||||
Reference in New Issue
Block a user