packages/opencode/src/tool/apply_patch.ts |
35 |
(error as any).reason?._tag === "NotFound" — casts unknown error to any to access deeply-nested property without narrowing |
packages/opencode/src/tool/registry.ts |
173 |
def.execute(args as any, pluginCtx) — tool arguments cast to any before passing to plugin-defined execute |
packages/opencode/src/tool/bash.ts |
472 |
(process as any).resourcesPath — accesses Node/Electron-specific property not in NodeJS Process type |
packages/opencode/src/session/session.ts |
700–701 |
existing as unknown as Record<string, unknown> — casts typed message parts to plain records |
packages/opencode/src/provider/transform.ts |
191 |
msg.content = (msg.content as any[]).map(...) — redundant cast after Array.isArray check |
packages/opencode/src/provider/provider.ts |
1357 |
bridge.promise(...) as any — hides real return type of Effect pipeline |
packages/opencode/src/lsp/client.ts |
48–49 |
input.server.process.stdout as any — LSP stream types forced to any |
packages/opencode/src/server/instance/experimental.ts |
261 |
(t.parameters as any)?._def — checks Zod internal _def via any |
packages/opencode/src/mcp/index.ts |
524 |
(client.transport as any)?.pid — accesses implementation-detail property |
packages/opencode/src/lsp/server.ts |
671 |
(await releaseResponse.json()) as any — GitHub release JSON cast to any without schema parsing |
packages/app/src/components/prompt-input/workspace-chip.tsx |
53 |
{ ... } as any — casts button props to any |
packages/app/src/pages/session/file-tabs.tsx |
451 |
onScroll={scrollSync.handleScroll as any} — event handler cast to any |
packages/app/src/utils/server-health.ts |
28 |
(AbortSignal as unknown as { timeout?: ... }).timeout — feature-detects via cast |
Summary
Automated audit found type-safety violations and logic bugs across
packages/app/src/andpackages/opencode/src/.as any/as unknowncasts hiding real type mismatchespackages/opencode/src/tool/apply_patch.ts(error as any).reason?._tag === "NotFound"— castsunknownerror toanyto access deeply-nested property without narrowingpackages/opencode/src/tool/registry.tsdef.execute(args as any, pluginCtx)— tool arguments cast toanybefore passing to plugin-defined executepackages/opencode/src/tool/bash.ts(process as any).resourcesPath— accesses Node/Electron-specific property not in NodeJSProcesstypepackages/opencode/src/session/session.tsexisting as unknown as Record<string, unknown>— casts typed message parts to plain recordspackages/opencode/src/provider/transform.tsmsg.content = (msg.content as any[]).map(...)— redundant cast afterArray.isArraycheckpackages/opencode/src/provider/provider.tsbridge.promise(...) as any— hides real return type of Effect pipelinepackages/opencode/src/lsp/client.tsinput.server.process.stdout as any— LSP stream types forced toanypackages/opencode/src/server/instance/experimental.ts(t.parameters as any)?._def— checks Zod internal_defviaanypackages/opencode/src/mcp/index.ts(client.transport as any)?.pid— accesses implementation-detail propertypackages/opencode/src/lsp/server.ts(await releaseResponse.json()) as any— GitHub release JSON cast toanywithout schema parsingpackages/app/src/components/prompt-input/workspace-chip.tsx{ ... } as any— casts button props toanypackages/app/src/pages/session/file-tabs.tsxonScroll={scrollSync.handleScroll as any}— event handler cast toanypackages/app/src/utils/server-health.ts(AbortSignal as unknown as { timeout?: ... }).timeout— feature-detects via cast@ts-ignore/@ts-expect-errorand what they hidepackages/opencode/src/session/session.tsUsagetypepackages/opencode/src/session/llm.tsargs.params.promptinside middlewarepackages/opencode/src/session/prompt.tsAI_SDK_LOG_WARNINGSpackages/opencode/src/provider/provider.tsmergeDeeptype mismatches; Buntimeout: falsefor fetchpackages/opencode/src/lsp/server.tspackages/opencode/src/file/watcher.ts@parcel/watcherwithout typespackages/opencode/src/plugin/index.tspackages/app/src/components/prompt-input.tsxBoolean parameter order risks
packages/app/src/context/command.tsxsignature(key, ctrl, meta, shift, alt)— 5 consecutive booleanspackages/opencode/src/cli/cmd/github.tspushToNewBranch(summary, branch, commit, isSchedule)— 2 trailing booleanspackages/opencode/src/tool/bash.tsdynamic(text, ps)andpathArgs(list, ps)— ambiguouspsparampackages/opencode/src/id/id.tsgenerateID(prefix, descending, given?)andcreate(prefix, descending, timestamp?)Off-by-one / edge case errors
packages/opencode/src/config/parse.tsbeforeOffset[beforeOffset.length - 1].length + 1without empty-array guardpackages/opencode/src/config/paths.tspackages/opencode/src/tool/edit.tssplit("\n"); empty string becomes empty arraypackages/opencode/src/patch/index.tspackages/app/src/pages/session/terminal-panel.tsxprobe.focus(delays.length + 1)— potential out-of-boundspackages/app/src/context/local.tsxnext = -1Mutable default parameters
packages/app/src/components/session/session-context-metrics.tsconfig: Config = {}packages/app/src/context/global-sync/child-store.tsoptions: ChildOptions = {}packages/app/src/utils/scoped-cache.tsoptions: ScopedCacheOptions<T> = {}packages/opencode/src/tool/truncate.tsoptions: Options = {}packages/opencode/src/util/process.tsopts: Options = {}packages/opencode/src/config/config.tspath: string[] = []packages/opencode/src/provider/pawwork-providers.tsextra: Partial<Model> = {}packages/opencode/src/cli/cmd/github.tsfiles: PromptFiles = []Loose equality (
==)packages/app/src/components/terminal.tsxkey.key == "Enter"should be===packages/opencode/src/session/projectors.tsobj == undefined— ifobjisnull, passes through tofield1 in objwhich throws