feat: enable type-aware no-floating-promises rule, fix all 177 violations (#22741)

This commit is contained in:
Kit Langton
2026-04-15 23:27:32 -04:00
committed by GitHub
parent 343a564183
commit 80f1f1b5b8
103 changed files with 212 additions and 187 deletions

View File

@@ -112,7 +112,7 @@ async function main() {
}
try {
main()
void main()
} catch (error) {
console.error("Postinstall script error:", error.message)
process.exit(0)

View File

@@ -242,7 +242,7 @@ export namespace ACP {
const newContent = getNewContent(content, diff)
if (newContent) {
this.connection.writeTextFile({
void this.connection.writeTextFile({
sessionId: session.id,
path: filepath,
content: newContent,
@@ -1253,7 +1253,7 @@ export namespace ACP {
)
setTimeout(() => {
this.connection.sessionUpdate({
void this.connection.sessionUpdate({
sessionId,
update: {
sessionUpdate: "available_commands_update",

View File

@@ -350,7 +350,7 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
if (match) {
continued = true
if (args.fork) {
sdk.client.session.fork({ sessionID: match }).then((result) => {
void sdk.client.session.fork({ sessionID: match }).then((result) => {
if (result.data?.id) {
route.navigate({ type: "session", sessionID: result.data.id })
} else {
@@ -370,7 +370,7 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
createEffect(() => {
if (forked || sync.status !== "complete" || !args.sessionID || !args.fork) return
forked = true
sdk.client.session.fork({ sessionID: args.sessionID }).then((result) => {
void sdk.client.session.fork({ sessionID: args.sessionID }).then((result) => {
if (result.data?.id) {
route.navigate({ type: "session", sessionID: result.data.id })
} else {
@@ -818,7 +818,7 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
`Successfully updated to OpenCode v${result.data.version}. Please restart the application.`,
)
exit()
void exit()
})
const plugin = createMemo(() => {

View File

@@ -145,7 +145,7 @@ export function DialogSessionList() {
title: "delete",
onTrigger: async (option) => {
if (toDelete() === option.value) {
sdk.client.session.delete({
void sdk.client.session.delete({
sessionID: option.value,
})
setToDelete(undefined)

View File

@@ -19,7 +19,7 @@ export function DialogSessionRename(props: DialogSessionRenameProps) {
title="Rename Session"
value={session()?.title}
onConfirm={(value) => {
sdk.client.session.update({
void sdk.client.session.update({
sessionID: props.session,
title: value,
})

View File

@@ -26,7 +26,7 @@ export function ErrorComponent(props: {
useKeyboard((evt) => {
if (evt.ctrl && evt.name === "c") {
handleExit()
void handleExit()
}
})
const [copied, setCopied] = createSignal(false)
@@ -56,7 +56,7 @@ export function ErrorComponent(props: {
issueURL.searchParams.set("opencode-version", Installation.VERSION)
const copyIssueURL = () => {
Clipboard.copy(issueURL.toString()).then(() => {
void Clipboard.copy(issueURL.toString()).then(() => {
setCopied(true)
})
}

View File

@@ -235,7 +235,7 @@ export function Prompt(props: PromptProps) {
hidden: true,
onSelect: (dialog) => {
if (!input.focused) return
submit()
void submit()
dialog.clear()
},
},
@@ -280,7 +280,7 @@ export function Prompt(props: PromptProps) {
}, 5000)
if (store.interrupt >= 2) {
sdk.client.session.abort({
void sdk.client.session.abort({
sessionID: props.sessionID,
})
setStore("interrupt", 0)
@@ -429,7 +429,7 @@ export function Prompt(props: PromptProps) {
setStore("extmarkToPartIndex", new Map())
},
submit() {
submit()
void submit()
},
}
@@ -604,12 +604,12 @@ export function Prompt(props: PromptProps) {
if (!store.prompt.input) return
const trimmed = store.prompt.input.trim()
if (trimmed === "exit" || trimmed === "quit" || trimmed === ":q") {
exit()
void exit()
return
}
const selectedModel = local.model.current()
if (!selectedModel) {
promptModelWarning()
void promptModelWarning()
return
}
@@ -660,7 +660,7 @@ export function Prompt(props: PromptProps) {
const variant = local.model.variant.current()
if (store.mode === "shell") {
sdk.client.session.shell({
void sdk.client.session.shell({
sessionID,
agent: local.agent.current().name,
model: {
@@ -685,7 +685,7 @@ export function Prompt(props: PromptProps) {
const restOfInput = firstLineEnd === -1 ? "" : inputText.slice(firstLineEnd + 1)
const args = firstLineArgs.join(" ") + (restOfInput ? "\n" + restOfInput : "")
sdk.client.session.command({
void sdk.client.session.command({
sessionID,
command: command.slice(1),
arguments: args,
@@ -1208,7 +1208,7 @@ export function Prompt(props: PromptProps) {
const r = retry()
if (!r) return
if (isTruncated()) {
DialogAlert.show(dialog, "Retry Error", r.message)
void DialogAlert.show(dialog, "Retry Error", r.message)
}
}

View File

@@ -44,7 +44,7 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({
},
set(key: string, value: any) {
setStore(key, value)
Filesystem.writeJson(filePath, store)
void Filesystem.writeJson(filePath, store)
},
}
return result

View File

@@ -131,7 +131,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
return
}
state.pending = false
Filesystem.writeJson(filePath, {
void Filesystem.writeJson(filePath, {
recent: modelStore.recent,
favorite: modelStore.favorite,
variant: modelStore.variant,

View File

@@ -111,7 +111,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
event.subscribe((event) => {
switch (event.type) {
case "server.instance.disposed":
bootstrap()
void bootstrap()
break
case "permission.replied": {
const requests = store.permission[event.properties.sessionID]
@@ -336,7 +336,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
case "lsp.updated": {
const workspace = project.workspace.current()
sdk.client.lsp.status({ workspace }).then((x) => setStore("lsp", x.data ?? []))
void sdk.client.lsp.status({ workspace }).then((x) => setStore("lsp", x.data ?? []))
break
}
@@ -415,7 +415,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
.then(() => {
if (store.status !== "complete") setStore("status", "partial")
// non-blocking
Promise.all([
void Promise.all([
...(args.continue ? [] : [sessionListPromise.then((sessions) => setStore("session", reconcile(sessions)))]),
consoleStatePromise.then((consoleState) => setStore("console_state", reconcile(consoleState))),
sdk.client.command.list({ workspace }).then((x) => setStore("command", reconcile(x.data ?? []))),

View File

@@ -329,7 +329,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
})
function init() {
Promise.allSettled([
void Promise.allSettled([
resolveSystemTheme(store.mode),
getCustomThemes()
.then((custom) => {
@@ -377,7 +377,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
if (store.mode === mode) return
setStore("mode", mode)
renderer.clearPaletteCache()
resolveSystemTheme(mode)
void resolveSystemTheme(mode)
}
function pin(mode: "dark" | "light" = store.mode) {

View File

@@ -78,7 +78,7 @@ function Install(props: { api: TuiPluginApi }) {
}
setBusy(true)
props.api.plugins
void props.api.plugins
.install(mod, { global: global() })
.then((out) => {
if (!out.ok) {
@@ -188,7 +188,7 @@ function View(props: { api: TuiPluginApi }) {
if (!item) return
setLock(true)
const task = item.active ? props.api.plugins.deactivate(x) : props.api.plugins.activate(x)
task
void task
.then((ok) => {
if (!ok) {
props.api.ui.toast({

View File

@@ -29,7 +29,7 @@ export function DialogMessage(props: {
const msg = message()
if (!msg) return
sdk.client.session.revert({
void sdk.client.session.revert({
sessionID: props.sessionID,
messageID: msg.id,
})

View File

@@ -241,7 +241,7 @@ export function Session() {
if (kv.get(GO_UPSELL_DONT_SHOW)) return
DialogGoUpsell.show(dialog).then((dontShowAgain) => {
void DialogGoUpsell.show(dialog).then((dontShowAgain) => {
if (dontShowAgain) kv.set(GO_UPSELL_DONT_SHOW, true)
kv.set(GO_UPSELL_LAST_SEEN_AT, Date.now())
})
@@ -272,7 +272,7 @@ export function Session() {
useKeyboard((evt) => {
if (!session()?.parentID) return
if (keybind.match("app_exit", evt)) {
exit()
void exit()
}
})
@@ -483,7 +483,7 @@ export function Session() {
})
return
}
sdk.client.session.summarize({
void sdk.client.session.summarize({
sessionID: route.sessionID,
modelID: selectedModel.modelID,
providerID: selectedModel.providerID,
@@ -529,7 +529,7 @@ export function Session() {
const revert = session()?.revert?.messageID
const message = messages().findLast((x) => (!revert || x.id < revert) && x.role === "user")
if (!message) return
sdk.client.session
void sdk.client.session
.revert({
sessionID: route.sessionID,
messageID: message.id,
@@ -568,13 +568,13 @@ export function Session() {
if (!messageID) return
const message = messages().find((x) => x.role === "user" && x.id > messageID)
if (!message) {
sdk.client.session.unrevert({
void sdk.client.session.unrevert({
sessionID: route.sessionID,
})
prompt?.set({ input: "", parts: [] })
return
}
sdk.client.session.revert({
void sdk.client.session.revert({
sessionID: route.sessionID,
messageID: message.id,
})
@@ -1966,7 +1966,7 @@ function Task(props: ToolProps<typeof TaskTool>) {
onMount(() => {
if (props.metadata.sessionId && !sync.data.message[props.metadata.sessionId]?.length)
sync.session.sync(props.metadata.sessionId)
void sync.session.sync(props.metadata.sessionId)
})
const messages = createMemo(() => sync.data.message[props.metadata.sessionId ?? ""] ?? [])

View File

@@ -184,7 +184,7 @@ export function PermissionPrompt(props: { request: PermissionRequest }) {
onSelect={(option) => {
setStore("stage", "permission")
if (option === "cancel") return
sdk.client.permission.reply({
void sdk.client.permission.reply({
reply: "always",
requestID: props.request.id,
})
@@ -194,7 +194,7 @@ export function PermissionPrompt(props: { request: PermissionRequest }) {
<Match when={store.stage === "reject"}>
<RejectPrompt
onConfirm={(message) => {
sdk.client.permission.reply({
void sdk.client.permission.reply({
reply: "reject",
requestID: props.request.id,
message: message || undefined,
@@ -447,13 +447,13 @@ export function PermissionPrompt(props: { request: PermissionRequest }) {
setStore("stage", "reject")
return
}
sdk.client.permission.reply({
void sdk.client.permission.reply({
reply: "reject",
requestID: props.request.id,
})
return
}
sdk.client.permission.reply({
void sdk.client.permission.reply({
reply: "once",
requestID: props.request.id,
})

View File

@@ -45,14 +45,14 @@ export function QuestionPrompt(props: { request: QuestionRequest }) {
function submit() {
const answers = questions().map((_, i) => store.answers[i] ?? [])
sdk.client.question.reply({
void sdk.client.question.reply({
requestID: props.request.id,
answers,
})
}
function reject() {
sdk.client.question.reject({
void sdk.client.question.reject({
requestID: props.request.id,
})
}
@@ -67,7 +67,7 @@ export function QuestionPrompt(props: { request: QuestionRequest }) {
setStore("custom", inputs)
}
if (single()) {
sdk.client.question.reply({
void sdk.client.question.reply({
requestID: props.request.id,
answers: [[answer]],
})

View File

@@ -171,7 +171,7 @@ async function loadCommand(dir: string) {
? err.data.message
: `Failed to parse command ${item}`
const { Session } = await import("@/session")
Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
log.error("failed to load command", { command: item, err })
return undefined
})
@@ -210,7 +210,7 @@ async function loadAgent(dir: string) {
? err.data.message
: `Failed to parse agent ${item}`
const { Session } = await import("@/session")
Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
log.error("failed to load agent", { agent: item, err })
return undefined
})
@@ -248,7 +248,7 @@ async function loadMode(dir: string) {
? err.data.message
: `Failed to parse mode ${item}`
const { Session } = await import("@/session")
Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
log.error("failed to load mode", { mode: item, err })
return undefined
})

View File

@@ -114,7 +114,7 @@ export namespace Workspace {
await adaptor.create(config)
startSync(info)
void startSync(info)
await waitEvent({
timeout: TIMEOUT,
@@ -294,7 +294,7 @@ export namespace Workspace {
)
const spaces = rows.map(fromRow).sort((a, b) => a.id.localeCompare(b.id))
for (const space of spaces) startSync(space)
for (const space of spaces) void startSync(space)
return spaces
}
@@ -307,7 +307,7 @@ export namespace Workspace {
export const get = fn(WorkspaceID.zod, async (id) => {
const space = lookup(id)
if (!space) return
startSync(space)
void startSync(space)
return space
})

View File

@@ -98,9 +98,9 @@ export namespace FileWatcher {
const cb: ParcelWatcher.SubscribeCallback = Instance.bind((err, evts) => {
if (err) return
for (const evt of evts) {
if (evt.type === "create") Bus.publish(Event.Updated, { file: evt.path, event: "add" })
if (evt.type === "update") Bus.publish(Event.Updated, { file: evt.path, event: "change" })
if (evt.type === "delete") Bus.publish(Event.Updated, { file: evt.path, event: "unlink" })
if (evt.type === "create") void Bus.publish(Event.Updated, { file: evt.path, event: "add" })
if (evt.type === "update") void Bus.publish(Event.Updated, { file: evt.path, event: "change" })
if (evt.type === "delete") void Bus.publish(Event.Updated, { file: evt.path, event: "unlink" })
}
})

View File

@@ -59,7 +59,7 @@ export namespace LSPClient {
const exists = diagnostics.has(filePath)
diagnostics.set(filePath, params.diagnostics)
if (!exists && input.serverID === "typescript") return
Bus.publish(Event.Diagnostics, { path: filePath, serverID: input.serverID })
void Bus.publish(Event.Diagnostics, { path: filePath, serverID: input.serverID })
})
connection.onRequest("window/workDoneProgress/create", (params) => {
l.info("window/workDoneProgress/create", params)

View File

@@ -293,7 +293,7 @@ export namespace LSP {
const task = schedule(server, root, root + server.id)
s.spawning.set(root + server.id, task)
task.finally(() => {
void task.finally(() => {
if (s.spawning.get(root + server.id) === task) {
s.spawning.delete(root + server.id)
}
@@ -303,7 +303,7 @@ export namespace LSP {
if (!client) continue
result.push(client)
Bus.publish(Event.Updated, {})
void Bus.publish(Event.Updated, {})
}
return result

View File

@@ -245,7 +245,7 @@ export const layer = Layer.effect(
Stream.runForEach((input) =>
Effect.sync(() => {
for (const hook of hooks) {
hook["event"]?.({ event: input as any })
void hook["event"]?.({ event: input as any })
}
}),
),

View File

@@ -172,7 +172,7 @@ export namespace ModelsDev {
}
if (!Flag.OPENCODE_DISABLE_MODELS_FETCH && !process.argv.includes("--get-yargs-completions")) {
ModelsDev.refresh()
void ModelsDev.refresh()
setInterval(
async () => {
await ModelsDev.refresh()

View File

@@ -898,7 +898,7 @@ export const SessionRoutes = lazy(() =>
const msg = await AppRuntime.runPromise(
SessionPrompt.Service.use((svc) => svc.prompt({ ...body, sessionID })),
)
stream.write(JSON.stringify(msg))
void stream.write(JSON.stringify(msg))
})
},
)
@@ -926,13 +926,15 @@ export const SessionRoutes = lazy(() =>
async (c) => {
const sessionID = c.req.valid("param").sessionID
const body = c.req.valid("json")
AppRuntime.runPromise(SessionPrompt.Service.use((svc) => svc.prompt({ ...body, sessionID }))).catch((err) => {
log.error("prompt_async failed", { sessionID, error: err })
Bus.publish(Session.Event.Error, {
sessionID,
error: new NamedError.Unknown({ message: err instanceof Error ? err.message : String(err) }).toObject(),
})
})
void AppRuntime.runPromise(SessionPrompt.Service.use((svc) => svc.prompt({ ...body, sessionID }))).catch(
(err) => {
log.error("prompt_async failed", { sessionID, error: err })
void Bus.publish(Session.Event.Error, {
sessionID,
error: new NamedError.Unknown({ message: err instanceof Error ? err.message : String(err) }).toObject(),
})
},
)
return c.body(null, 204)
},

View File

@@ -76,7 +76,7 @@ const app = (upgrade: UpgradeWebSocket) =>
queue.length = 0
}
remote.onmessage = (event) => {
send(ws, event.data)
void send(ws, event.data)
}
remote.onerror = () => {
ws.close(1011, "proxy error")

View File

@@ -134,7 +134,7 @@ export namespace Database {
if (err instanceof LocalContext.NotFound) {
const effects: (() => void | Promise<void>)[] = []
const result = ctx.provide({ effects, tx: Client() }, () => callback(Client()))
for (const effect of effects) effect()
for (const effect of effects) void effect()
return result
}
throw err
@@ -146,7 +146,7 @@ export namespace Database {
try {
ctx.use().effects.push(bound)
} catch {
bound()
void bound()
}
}
@@ -165,7 +165,7 @@ export namespace Database {
const effects: (() => void | Promise<void>)[] = []
const txCallback = InstanceState.bind((tx: TxOrDb) => ctx.provide({ tx, effects }, () => callback(tx)))
const result = Client().transaction(txCallback, { behavior: options?.behavior })
for (const effect of effects) effect()
for (const effect of effects) void effect()
return result as NotPromise<T>
}
throw err

View File

@@ -142,11 +142,11 @@ function process<Def extends Definition>(def: Def, event: Event<Def>, options: {
if (options?.publish) {
const result = convertEvent(def.type, event.data)
if (result instanceof Promise) {
result.then((data) => {
ProjectBus.publish({ type: def.type, properties: def.schema }, data)
void result.then((data) => {
void ProjectBus.publish({ type: def.type, properties: def.schema }, data)
})
} else {
ProjectBus.publish({ type: def.type, properties: def.schema }, result)
void ProjectBus.publish({ type: def.type, properties: def.schema }, result)
}
GlobalBus.emit("event", {

View File

@@ -3,7 +3,7 @@ export function defer<T extends () => void | Promise<void>>(
): T extends () => Promise<void> ? { [Symbol.asyncDispose]: () => Promise<void> } : { [Symbol.dispose]: () => void } {
return {
[Symbol.dispose]() {
fn()
void fn()
},
[Symbol.asyncDispose]() {
return Promise.resolve(fn())

View File

@@ -59,7 +59,7 @@ let write = (msg: any) => {
export async function init(options: Options) {
if (options.level) level = options.level
cleanup(Global.Path.log)
void cleanup(Global.Path.log)
if (options.print) return
logpath = path.join(
Global.Path.log,

View File

@@ -209,7 +209,7 @@ test(
const done = await new Promise<string>((resolve) => {
const timer = setTimeout(() => resolve("timeout"), 7000)
TuiPluginRuntime.dispose().then(() => {
void TuiPluginRuntime.dispose().then(() => {
clearTimeout(timer)
resolve("done")
})

View File

@@ -10,7 +10,7 @@ const transportCalls: Array<{
}> = []
// Mock the transport constructors to capture their arguments
mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
StreamableHTTPClientTransport: class MockStreamableHTTP {
constructor(url: URL, options?: { authProvider?: unknown; requestInit?: RequestInit }) {
transportCalls.push({
@@ -25,7 +25,7 @@ mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
},
}))
mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
SSEClientTransport: class MockSSE {
constructor(url: URL, options?: { authProvider?: unknown; requestInit?: RequestInit }) {
transportCalls.push({

View File

@@ -89,19 +89,19 @@ class MockSSE {
}
}
mock.module("@modelcontextprotocol/sdk/client/stdio.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/stdio.js", () => ({
StdioClientTransport: MockStdioTransport,
}))
mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
StreamableHTTPClientTransport: MockStreamableHTTP,
}))
mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
SSEClientTransport: MockSSE,
}))
mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
UnauthorizedError: class extends Error {
constructor() {
super("Unauthorized")
@@ -110,7 +110,7 @@ mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
}))
// Mock Client that delegates to per-name MockClientState
mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
Client: class MockClient {
_state!: MockClientState
transport: any

View File

@@ -22,7 +22,7 @@ let simulateAuthFlow = true
let connectSucceedsImmediately = false
// Mock the transport constructors to simulate OAuth auto-auth on 401
mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
StreamableHTTPClientTransport: class MockStreamableHTTP {
authProvider:
| {
@@ -66,7 +66,7 @@ mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
},
}))
mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
SSEClientTransport: class MockSSE {
constructor(url: URL, options?: { authProvider?: unknown }) {
transportCalls.push({
@@ -82,7 +82,7 @@ mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
}))
// Mock the MCP SDK Client
mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
Client: class MockClient {
async connect(transport: { start: () => Promise<void> }) {
await transport.start()
@@ -99,7 +99,7 @@ mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
}))
// Mock UnauthorizedError in the auth module so instanceof checks work
mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
UnauthorizedError: MockUnauthorizedError,
}))

View File

@@ -7,7 +7,7 @@ import type { MCP as MCPNS } from "../../src/mcp/index"
let openShouldFail = false
let openCalledWith: string | undefined
mock.module("open", () => ({
void mock.module("open", () => ({
default: async (url: string) => {
openCalledWith = url
@@ -39,7 +39,7 @@ const transportCalls: Array<{
}> = []
// Mock the transport constructors
mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
StreamableHTTPClientTransport: class MockStreamableHTTP {
url: string
authProvider: { redirectToAuthorization?: (url: URL) => Promise<void> } | undefined
@@ -65,7 +65,7 @@ mock.module("@modelcontextprotocol/sdk/client/streamableHttp.js", () => ({
},
}))
mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
SSEClientTransport: class MockSSE {
constructor(url: URL) {
transportCalls.push({
@@ -81,7 +81,7 @@ mock.module("@modelcontextprotocol/sdk/client/sse.js", () => ({
}))
// Mock the MCP SDK Client to trigger OAuth flow
mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
Client: class MockClient {
async connect(transport: { start: () => Promise<void> }) {
await transport.start()
@@ -90,7 +90,7 @@ mock.module("@modelcontextprotocol/sdk/client/index.js", () => ({
}))
// Mock UnauthorizedError in the auth module
mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
void mock.module("@modelcontextprotocol/sdk/client/auth.js", () => ({
UnauthorizedError: MockUnauthorizedError,
}))

View File

@@ -44,6 +44,6 @@ try {
const after = heap()
process.stdout.write(JSON.stringify({ baseline, after, growth: after - baseline }))
} finally {
server.stop(true)
void server.stop(true)
process.exit(0)
}

View File

@@ -954,7 +954,7 @@ it.live("pending permission rejects on instance dispose", () =>
}).pipe(run, Effect.forkScoped)
expect(yield* waitForPending(1).pipe(run)).toHaveLength(1)
yield* Effect.promise(() => Instance.provide({ directory: dir, fn: () => Instance.dispose() }))
yield* Effect.promise(() => Instance.provide({ directory: dir, fn: () => void Instance.dispose() }))
const exit = yield* Fiber.await(fiber)
expect(Exit.isFailure(exit)).toBe(true)

View File

@@ -81,7 +81,7 @@ process.env["OPENCODE_DB"] = ":memory:"
const { Log } = await import("../src/util")
const { initProjectors } = await import("../src/server/projectors")
Log.init({
void Log.init({
print: false,
dev: true,
level: "DEBUG",

View File

@@ -10,7 +10,7 @@ import { $ } from "bun"
import { tmpdir } from "../fixture/fixture"
import { Effect } from "effect"
Log.init({ print: false })
void Log.init({ print: false })
function run<A>(fn: (svc: Project.Interface) => Effect.Effect<A>) {
return Effect.runPromise(

View File

@@ -12,7 +12,7 @@ import { NodePath } from "@effect/platform-node"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
Log.init({ print: false })
void Log.init({ print: false })
const encoder = new TextEncoder()

View File

@@ -7,7 +7,7 @@ import { Session as SessionNs } from "../../src/session"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -10,7 +10,7 @@ import { Log } from "../../src/util"
import { resetDatabase } from "../fixture/db"
import { provideInstance, tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
afterEach(async () => {
await resetDatabase()

View File

@@ -7,7 +7,7 @@ import type { SessionID } from "../../src/session/schema"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -5,7 +5,7 @@ import { Session as SessionNs } from "../../src/session"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -8,7 +8,7 @@ import { MessageID, PartID, type SessionID } from "../../src/session/schema"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -7,7 +7,7 @@ import { Instance } from "../../src/project/instance"
import { Server } from "../../src/server/server"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -27,7 +27,7 @@ import { ProviderTest } from "../fake/provider"
import { testEffect } from "../lib/effect"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -229,7 +229,7 @@ beforeEach(() => {
})
afterAll(() => {
state.server?.stop()
void state.server?.stop()
})
function createChatStream(text: string) {

View File

@@ -9,7 +9,7 @@ import { ModelID, ProviderID } from "../../src/provider/schema"
import { Log } from "../../src/util"
const root = path.join(__dirname, "../..")
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))

View File

@@ -24,7 +24,7 @@ import { provideTmpdirServer } from "../fixture/fixture"
import { testEffect } from "../lib/effect"
import { raw, reply, TestLLMServer } from "../lib/llm-server"
Log.init({ print: false })
void Log.init({ print: false })
const summary = Layer.succeed(
SessionSummary.Service,

View File

@@ -44,7 +44,7 @@ import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture"
import { testEffect } from "../lib/effect"
import { reply, TestLLMServer } from "../lib/llm-server"
Log.init({ print: false })
void Log.init({ print: false })
const summary = Layer.succeed(
SessionSummary.Service,

View File

@@ -11,7 +11,7 @@ import { SessionPrompt } from "../../src/session/prompt"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"
Log.init({ print: false })
void Log.init({ print: false })
function run<A, E>(fx: Effect.Effect<A, E, SessionPrompt.Service | Session.Service>) {
return Effect.runPromise(
@@ -316,7 +316,7 @@ describe("session.prompt regression", () => {
),
})
} finally {
server.stop(true)
void server.stop(true)
}
})
@@ -409,7 +409,7 @@ describe("session.prompt regression", () => {
),
})
} finally {
server.stop(true)
void server.stop(true)
}
})
})

View File

@@ -13,7 +13,7 @@ import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { provideTmpdirInstance } from "../fixture/fixture"
import { testEffect } from "../lib/effect"
Log.init({ print: false })
void Log.init({ print: false })
const env = Layer.mergeAll(
Session.defaultLayer,

View File

@@ -10,7 +10,7 @@ import { AppRuntime } from "../../src/effect/app-runtime"
import { tmpdir } from "../fixture/fixture"
const projectRoot = path.join(__dirname, "../..")
Log.init({ print: false })
void Log.init({ print: false })
function create(input?: SessionNs.CreateInput) {
return AppRuntime.runPromise(SessionNs.Service.use((svc) => svc.create(input)))

View File

@@ -57,7 +57,7 @@ import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Ripgrep } from "../../src/file/ripgrep"
import { Format } from "../../src/format"
Log.init({ print: false })
void Log.init({ print: false })
const mcp = Layer.succeed(
MCP.Service,

View File

@@ -8,7 +8,7 @@ import { Instance } from "../../src/project/instance"
import { MessageV2 } from "../../src/session/message-v2"
const projectRoot = path.join(__dirname, "../..")
Log.init({ print: false })
void Log.init({ print: false })
// Skip tests if no API key is available
const hasApiKey = !!process.env.ANTHROPIC_API_KEY

View File

@@ -42,7 +42,7 @@ beforeAll(async () => {
})
afterAll(async () => {
server?.stop()
void server?.stop()
await rm(cacheDir, { recursive: true, force: true })
})