Merge pull request #4040 from code-yeongyu/cleanup/typescript-ai-slop-20260515
Refactor TypeScript cleanup patterns
This commit is contained in:
@@ -6,7 +6,11 @@ import type { DependencyInfo } from "../types"
|
||||
import { spawnWithTimeout } from "../spawn-with-timeout"
|
||||
import { getCachedBinaryPath } from "../../../hooks/comment-checker/downloader"
|
||||
|
||||
async function checkBinaryExists(binary: string): Promise<{ exists: boolean; path: string | null }> {
|
||||
type BinaryCheck =
|
||||
| { exists: true; path: string }
|
||||
| { exists: false; path: null }
|
||||
|
||||
async function checkBinaryExists(binary: string): Promise<BinaryCheck> {
|
||||
try {
|
||||
const path = Bun.which(binary)
|
||||
if (path) {
|
||||
@@ -44,7 +48,7 @@ export async function checkAstGrepCli(): Promise<DependencyInfo> {
|
||||
}
|
||||
}
|
||||
|
||||
const version = await getBinaryVersion(binary.path!)
|
||||
const version = await getBinaryVersion(binary.path)
|
||||
|
||||
return {
|
||||
name: "AST-Grep CLI",
|
||||
|
||||
@@ -2,7 +2,7 @@ import pc from "picocolors"
|
||||
import type { RunContext } from "./types"
|
||||
import type { EventState } from "./events"
|
||||
import { checkCompletionConditions } from "./completion"
|
||||
import { normalizeSDKResponse } from "../../shared"
|
||||
import { isRecord, normalizeSDKResponse } from "../../shared"
|
||||
|
||||
const DEFAULT_POLL_INTERVAL_MS = 500
|
||||
const DEFAULT_REQUIRED_CONSECUTIVE = 1
|
||||
@@ -11,6 +11,17 @@ const MIN_STABILIZATION_MS = 1_000
|
||||
const DEFAULT_EVENT_WATCHDOG_MS = 30_000 // 30 seconds
|
||||
const DEFAULT_SECONDARY_MEANINGFUL_WORK_TIMEOUT_MS = 60_000 // 60 seconds
|
||||
|
||||
type SessionStatusMap = Record<string, { type?: string }>
|
||||
|
||||
function isIncompleteTodo(value: unknown): boolean {
|
||||
if (!isRecord(value)) {
|
||||
return true
|
||||
}
|
||||
|
||||
const status = value.status
|
||||
return status !== "completed" && status !== "cancelled"
|
||||
}
|
||||
|
||||
export interface PollOptions {
|
||||
pollIntervalMs?: number
|
||||
requiredConsecutive?: number
|
||||
@@ -123,22 +134,18 @@ export async function pollForCompletion(
|
||||
path: { id: ctx.sessionID },
|
||||
query: { directory: ctx.directory },
|
||||
})
|
||||
const children = normalizeSDKResponse(childrenRes, [] as unknown[])
|
||||
const children = normalizeSDKResponse<unknown[]>(childrenRes, [])
|
||||
const todosRes = await ctx.client.session.todo({
|
||||
path: { id: ctx.sessionID },
|
||||
query: { directory: ctx.directory },
|
||||
})
|
||||
const todos = normalizeSDKResponse(todosRes, [] as unknown[])
|
||||
const todos = normalizeSDKResponse<unknown[]>(todosRes, [])
|
||||
|
||||
const hasActiveChildren =
|
||||
Array.isArray(children) && children.length > 0
|
||||
const hasActiveTodos =
|
||||
Array.isArray(todos) &&
|
||||
todos.some(
|
||||
(t: unknown) =>
|
||||
(t as { status?: string })?.status !== "completed" &&
|
||||
(t as { status?: string })?.status !== "cancelled"
|
||||
)
|
||||
todos.some(isIncompleteTodo)
|
||||
const hasActiveWork = hasActiveChildren || hasActiveTodos
|
||||
|
||||
if (hasActiveWork) {
|
||||
@@ -189,10 +196,7 @@ async function getMainSessionStatus(
|
||||
const statusesRes = await ctx.client.session.status({
|
||||
query: { directory: ctx.directory },
|
||||
})
|
||||
const statuses = normalizeSDKResponse(
|
||||
statusesRes,
|
||||
{} as Record<string, { type?: string }>
|
||||
)
|
||||
const statuses = normalizeSDKResponse<SessionStatusMap>(statusesRes, {})
|
||||
if (!(ctx.sessionID in statuses)) {
|
||||
return "idle"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user