Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
1b6b829
fix(windows): add posix path normalizer and shim
Hona Jan 29, 2026
f134ae3
fix(windows): make Filesystem.contains drive-aware
Hona Jan 29, 2026
78d2bf0
fix(windows): normalize Instance directory paths
Hona Jan 29, 2026
7900d75
fix(windows): use posix path shim across opencode
Hona Jan 29, 2026
a74ccc0
fix(windows): normalize desktop/app paths to posix
Hona Jan 29, 2026
d479bc1
test(opencode): guard against native path imports
Hona Jan 29, 2026
24bd867
fix(windows): normalize bash tool external directory patterns
Hona Jan 29, 2026
d1f13d9
fix(windows): canonicalize watcher and permission home paths
Hona Jan 29, 2026
a3313b1
fix(windows): prefer Git Bash for BashTool
Hona Jan 29, 2026
a5e0c2a
fix(windows): remove path.sep assumptions in tui/storage
Hona Jan 29, 2026
2b0faa2
fix(windows): set ripgrep path separator to '/'
Hona Jan 29, 2026
4bad0bb
fix(windows): trim UNC root trailing slash
Hona Jan 29, 2026
319874b
test: extend native path import guard to app/desktop
Hona Jan 29, 2026
6c78208
fix(windows): normalize configured path permission patterns
Hona Jan 29, 2026
faca888
fix(windows): normalize ReadTool absolute paths
Hona Jan 29, 2026
9b61da7
fix(windows): normalize WriteTool file paths
Hona Jan 29, 2026
647c9e0
fix(windows): normalize EditTool file paths
Hona Jan 29, 2026
9129db6
fix(windows): normalize Filesystem.globUp outputs
Hona Jan 29, 2026
4a765be
fix(windows): normalize glob/grep tool paths
Hona Jan 29, 2026
8adae66
fix(windows): normalize LspTool file paths
Hona Jan 29, 2026
b19ed83
fix(windows): normalize instruction paths
Hona Jan 29, 2026
e35fd1c
fix(windows): normalize external_directory targets
Hona Jan 29, 2026
f789c95
fix(windows): normalize discovered skill locations
Hona Jan 29, 2026
b8e95d6
fix(windows): normalize session.list directory filter
Hona Jan 29, 2026
6c72a14
fix(windows): parse apply_patch headers with drive letters
Hona Jan 29, 2026
86795e6
fix(windows): normalize config path scans and plugin resolution
Hona Jan 29, 2026
d15502e
fix(windows): normalize MultiEditTool file paths
Hona Jan 29, 2026
ac9832d
fix(windows): normalize file URLs and LSP paths
Hona Jan 29, 2026
44cdc4c
fix(windows): stabilize markdown and ide tests
Hona Jan 29, 2026
cd4113d
test(windows): normalize path expectations
Hona Jan 29, 2026
3cc9266
fix(i18n): remove duplicate zh keys
Hona Jan 29, 2026
e9557a9
ci: run opencode unit tests on Windows
Hona Jan 29, 2026
8a808f0
fix(windows): normalize permission matching and config file refs
Hona Jan 29, 2026
87d833b
fix(windows): handle extended-length paths in toPosix
Hona Jan 29, 2026
0251437
fix(windows): canonicalize Instance directory with realpath
Hona Jan 29, 2026
f16c7c6
Merge remote-tracking branch 'upstream/dev' into feat/v2-bash-path-wi…
Hona Feb 3, 2026
ce64d51
align
Hona Feb 3, 2026
2f59476
fix(ci): stabilize test hooks
Hona Feb 3, 2026
bc08548
test(plugin): stabilize auth override
Hona Feb 3, 2026
f334318
test(opencode): isolate plugin mock and git commits
Hona Feb 3, 2026
7096c2f
fix(opencode): normalize Windows paths for bash/lsp/session
Hona Feb 4, 2026
1f11cee
Merge remote-tracking branch 'upstream/dev' into feat/v2-bash-path-wi…
Hona Feb 4, 2026
47fe7d0
test(opencode): expect posix skill paths
Hona Feb 4, 2026
74a614f
ci(test): align windows e2e setup with linux
Hona Feb 4, 2026
0596b83
ci(test): run turbo tests on windows
Hona Feb 4, 2026
dc027bc
fix(sdk): run build script with bun
Hona Feb 4, 2026
3152595
fix desktop and other things
Hona Feb 4, 2026
bf9d9c1
fix(ui): keep file search results visible on Windows
Hona Feb 4, 2026
1e48300
clean
Hona Feb 4, 2026
5e03416
Merge remote-tracking branch 'upstream/dev' into feat/v2-bash-path-wi…
Hona Feb 4, 2026
d438206
test(opencode): prevent Windows path mismatches in instruction tests
Hona Feb 4, 2026
f9ee5a2
consolidate + pit of success
Hona Feb 4, 2026
5e0d3b7
ci: align Windows tests with release runner
Hona Feb 4, 2026
922d9b4
test(opencode): keep worktree matching case-insensitive on Windows
Hona Feb 4, 2026
66b0452
fix(opencode): honor OPENCODE_CONFIG_CONTENT at runtime
Hona Feb 4, 2026
a811463
test(opencode): avoid plugin mock leakage
Hona Feb 4, 2026
77a1ef2
fix(opencode): accept absolute Windows paths in apply_patch
Hona Feb 4, 2026
04ac138
Revert "fix(opencode): accept absolute Windows paths in apply_patch"
Hona Feb 4, 2026
ea7ca8d
fix(app): normalize UI absolute paths
Hona Feb 4, 2026
5c7d7e2
fix(opencode): preserve file mention order
Hona Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@ jobs:
playwright: bunx playwright install --with-deps
workdir: .
command: |
git config --global user.email "bot@opencode.ai"
git config --global user.name "opencode"
bun turbo test
- name: windows
host: windows-latest
host: blacksmith-4vcpu-windows-2025
playwright: bunx playwright install
workdir: packages/app
command: bun test:e2e:local
workdir: .
command: |
bun turbo test
runs-on: ${{ matrix.settings.host }}
defaults:
run:
Expand All @@ -39,6 +38,11 @@ jobs:
- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Configure git user
run: |
git config --global user.email "bot@opencode.ai"
git config --global user.name "opencode"

- name: Install Playwright browsers
working-directory: packages/app
run: ${{ matrix.settings.playwright }}
Expand All @@ -62,7 +66,6 @@ jobs:
fi

- name: Seed opencode data
if: matrix.settings.name != 'windows'
working-directory: packages/opencode
run: bun script/seed-e2e.ts
env:
Expand All @@ -81,7 +84,6 @@ jobs:
OPENCODE_E2E_MODEL: "opencode/gpt-5-nano"

- name: Run opencode server
if: matrix.settings.name != 'windows'
working-directory: packages/opencode
run: bun dev -- --print-logs --log-level WARN serve --port 4096 --hostname 127.0.0.1 &
env:
Expand All @@ -97,7 +99,6 @@ jobs:
OPENCODE_CLIENT: "app"

- name: Wait for opencode server
if: matrix.settings.name != 'windows'
run: |
for i in {1..120}; do
curl -fsS "http://127.0.0.1:4096/global/health" > /dev/null && exit 0
Expand Down
1 change: 1 addition & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/app/src/components/dialog-select-directory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useDialog } from "@opencode-ai/ui/context/dialog"
import { Dialog } from "@opencode-ai/ui/dialog"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { List } from "@opencode-ai/ui/list"
import { getDirectory, getFilename } from "@opencode-ai/util/path"
import { getDirectory, getFilename, toPosix } from "@opencode-ai/util/path"
import fuzzysort from "fuzzysort"
import { createMemo, createResource, createSignal } from "solid-js"
import { useGlobalSDK } from "@/context/global-sdk"
Expand Down Expand Up @@ -58,7 +58,7 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) {
}

function normalize(input: string) {
const v = input.replaceAll("\\", "/")
const v = toPosix(input)
if (v.startsWith("//") && !v.startsWith("///")) return "//" + v.slice(2).replace(/\/+/g, "/")
return v.replace(/\/+/g, "/")
}
Expand Down
3 changes: 2 additions & 1 deletion packages/app/src/components/dialog-select-file.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Icon } from "@opencode-ai/ui/icon"
import { Keybind } from "@opencode-ai/ui/keybind"
import { List } from "@opencode-ai/ui/list"
import { base64Encode } from "@opencode-ai/util/encode"
import { getDirectory, getFilename } from "@opencode-ai/util/path"
import { getDirectory, getFilename, toPosix } from "@opencode-ai/util/path"
import { useNavigate, useParams } from "@solidjs/router"
import { createMemo, createSignal, Match, onCleanup, Show, Switch } from "solid-js"
import { formatKeybind, useCommand, type CommandOption } from "@/context/command"
Expand Down Expand Up @@ -326,6 +326,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
emptyMessage={language.t("palette.empty")}
loadingMessage={language.t("common.loading")}
items={items}
normalizeFilter={toPosix}
key={(item) => item.id}
filterKeys={["title", "description", "category"]}
groupBy={grouped() ? (item) => item.category : () => ""}
Expand Down
11 changes: 8 additions & 3 deletions packages/app/src/components/prompt-input.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import type { IconName } from "@opencode-ai/ui/icons/provider"
import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Select } from "@opencode-ai/ui/select"
import { getDirectory, getFilename, getFilenameTruncated } from "@opencode-ai/util/path"
import { getDirectory, getFilename, getFilenameTruncated, normalizeDirectory, toPosix } from "@opencode-ai/util/path"
import { useDialog } from "@opencode-ai/ui/context/dialog"
import { ImagePreview } from "@opencode-ai/ui/image-preview"
import { ModelSelectorPopover } from "@/components/dialog-select-model"
Expand Down Expand Up @@ -482,6 +482,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
.map((path) => ({ type: "file", path, display: path }))
return [...agents, ...pinned, ...fileOptions]
},
normalizeFilter: toPosix,
key: atKey,
filterKeys: ["display"],
groupBy: (item) => {
Expand Down Expand Up @@ -1302,8 +1303,12 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
}
}

const toAbsolutePath = (path: string) =>
path.startsWith("/") ? path : (sessionDirectory + "/" + path).replace("//", "/")
const toAbsolutePath = (input: string) => {
if (input.startsWith("/") || /^[a-zA-Z]:/.test(input)) return toPosix(input)
const base = normalizeDirectory(sessionDirectory)
const suffix = input.startsWith("/") ? input.slice(1) : input
return toPosix(`${base}/${suffix}`)
}

const fileAttachments = currentPrompt.filter((part) => part.type === "file") as FileAttachmentPart[]
const agentAttachments = currentPrompt.filter((part) => part.type === "agent") as AgentPart[]
Expand Down
1 change: 1 addition & 0 deletions packages/app/src/context/command.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
}

const handleKeyDown = (event: KeyboardEvent) => {
if (event.defaultPrevented) return
if (suspended() || dialog.active) return

const sig = signatureFromEvent(event)
Expand Down
6 changes: 3 additions & 3 deletions packages/app/src/context/file.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import type { FileContent, FileNode } from "@opencode-ai/sdk/v2"
import { showToast } from "@opencode-ai/ui/toast"
import { useParams } from "@solidjs/router"
import { getFilename } from "@opencode-ai/util/path"
import { getFilename, toPosix } from "@opencode-ai/util/path"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
import { useLanguage } from "@/context/language"
Expand Down Expand Up @@ -280,10 +280,10 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
const directory = createMemo(() => sync.data.path.directory)

function normalize(input: string) {
const root = directory()
const root = toPosix(directory())
const prefix = root.endsWith("/") ? root : root + "/"

let path = unquoteGitPath(stripQueryAndHash(stripFileProtocol(input)))
let path = toPosix(unquoteGitPath(stripQueryAndHash(stripFileProtocol(input))))

if (path.startsWith(prefix)) {
path = path.slice(prefix.length)
Expand Down
8 changes: 7 additions & 1 deletion packages/app/src/context/sync.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { batch, createMemo } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
import { Binary } from "@opencode-ai/util/binary"
import { retry } from "@opencode-ai/util/retry"
import { normalizeDirectory, toPosix } from "@opencode-ai/util/path"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { useGlobalSync } from "./global-sync"
import { useSDK } from "./sdk"
Expand All @@ -21,7 +22,12 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
type Setter = Child[1]

const current = createMemo(() => globalSync.child(sdk.directory))
const absolute = (path: string) => (current()[0].path.directory + "/" + path).replace("//", "/")
const absolute = (input: string) => {
if (input.startsWith("/") || /^[a-zA-Z]:/.test(input)) return toPosix(input)
const base = normalizeDirectory(current()[0].path.directory)
const suffix = input.startsWith("/") ? input.slice(1) : input
return toPosix(`${base}/${suffix}`)
}
const chunk = 400
const inflight = new Map<string, Promise<void>>()
const inflightDiff = new Map<string, Promise<void>>()
Expand Down
4 changes: 2 additions & 2 deletions packages/app/src/pages/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import { Collapsible } from "@opencode-ai/ui/collapsible"
import { DiffChanges } from "@opencode-ai/ui/diff-changes"
import { Spinner } from "@opencode-ai/ui/spinner"
import { Dialog } from "@opencode-ai/ui/dialog"
import { getFilename } from "@opencode-ai/util/path"
import { getFilename, normalizeDirectory } from "@opencode-ai/util/path"
import { Session, type Message, type TextPart } from "@opencode-ai/sdk/v2/client"
import { usePlatform } from "@/context/platform"
import { useSettings } from "@/context/settings"
Expand Down Expand Up @@ -595,7 +595,7 @@ export default function Layout(props: ParentProps) {
),
)

const workspaceKey = (directory: string) => directory.replace(/[\\/]+$/, "")
const workspaceKey = (directory: string) => normalizeDirectory(directory)

const workspaceName = (directory: string, projectId?: string, branch?: string) => {
const key = workspaceKey(directory)
Expand Down
5 changes: 2 additions & 3 deletions packages/app/src/pages/session.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import { useLayout } from "@/context/layout"
import { Terminal } from "@/components/terminal"
import { checksum, base64Encode } from "@opencode-ai/util/encode"
import { findLast } from "@opencode-ai/util/array"
import { normalizeDirectory } from "@opencode-ai/util/path"
import { useDialog } from "@opencode-ai/ui/context/dialog"
import { DialogSelectFile } from "@/components/dialog-select-file"
import FileTree from "@/components/file-tree"
Expand Down Expand Up @@ -495,11 +496,9 @@ export default function Page() {
return "mix" as const
}

const normalize = (p: string) => p.replaceAll("\\\\", "/").replace(/\/+$/, "")

const out = new Map<string, "add" | "del" | "mix">()
for (const diff of diffs()) {
const file = normalize(diff.file)
const file = normalizeDirectory(diff.file)
const kind = diff.status === "added" ? "add" : diff.status === "deleted" ? "del" : "mix"

out.set(file, kind)
Expand Down
13 changes: 7 additions & 6 deletions packages/app/src/utils/worktree.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const normalize = (directory: string) => directory.replace(/[\\/]+$/, "")
import { toPosix } from "@opencode-ai/util/path"
import { normalizeDirectory } from "@opencode-ai/util/path"

type State =
| {
Expand Down Expand Up @@ -31,16 +32,16 @@ function deferred() {

export const Worktree = {
get(directory: string) {
return state.get(normalize(directory))
return state.get(normalizeDirectory(directory))
},
pending(directory: string) {
const key = normalize(directory)
const key = normalizeDirectory(directory)
const current = state.get(key)
if (current && current.status !== "pending") return
state.set(key, { status: "pending" })
},
ready(directory: string) {
const key = normalize(directory)
const key = normalizeDirectory(directory)
const next = { status: "ready" } as const
state.set(key, next)
const waiter = waiters.get(key)
Expand All @@ -49,7 +50,7 @@ export const Worktree = {
waiter.resolve(next)
},
failed(directory: string, message: string) {
const key = normalize(directory)
const key = normalizeDirectory(directory)
const next = { status: "failed", message } as const
state.set(key, next)
const waiter = waiters.get(key)
Expand All @@ -58,7 +59,7 @@ export const Worktree = {
waiter.resolve(next)
},
wait(directory: string) {
const key = normalize(directory)
const key = normalizeDirectory(directory)
const current = state.get(key)
if (current && current.status !== "pending") return Promise.resolve(current)

Expand Down
1 change: 1 addition & 0 deletions packages/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
"@opencode-ai/util": "workspace:*",
"@solid-primitives/i18n": "2.2.1",
"@solid-primitives/storage": "catalog:",
"@tauri-apps/api": "^2",
Expand Down
9 changes: 6 additions & 3 deletions packages/desktop/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { fetch as tauriFetch } from "@tauri-apps/plugin-http"
import { Store } from "@tauri-apps/plugin-store"
import { Splash } from "@opencode-ai/ui/logo"
import { createSignal, Show, Accessor, JSX, createResource, onMount, onCleanup } from "solid-js"
import { toPosix } from "@opencode-ai/util/path"

import { UPDATER_ENABLED } from "./updater"
import { createMenu } from "./menu"
Expand Down Expand Up @@ -74,7 +75,8 @@ const createPlatform = (password: Accessor<string | null>): Platform => ({
multiple: opts?.multiple ?? false,
title: opts?.title ?? t("desktop.dialog.chooseFolder"),
})
return result
if (Array.isArray(result)) return result.map((x) => toPosix(x))
return result ? toPosix(result) : result
},

async openFilePickerDialog(opts) {
Expand All @@ -83,15 +85,16 @@ const createPlatform = (password: Accessor<string | null>): Platform => ({
multiple: opts?.multiple ?? false,
title: opts?.title ?? t("desktop.dialog.chooseFile"),
})
return result
if (Array.isArray(result)) return result.map((x) => toPosix(x))
return result ? toPosix(result) : result
},

async saveFilePickerDialog(opts) {
const result = await save({
title: opts?.title ?? t("desktop.dialog.saveFile"),
defaultPath: opts?.defaultPath,
})
return result
return result ? toPosix(result) : result
},

openLink(url: string) {
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/agent/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import PROMPT_TITLE from "./prompt/title.txt"
import { PermissionNext } from "@/permission/next"
import { mergeDeep, pipe, sortBy, values } from "remeda"
import { Global } from "@/global"
import path from "path"
import path from "@/util/path"
import { Plugin } from "@/plugin"
import { Skill } from "../skill"

Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/auth/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import path from "path"
import path from "@/util/path"
import { Global } from "../global"
import z from "zod"

Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/bun/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import z from "zod"
import { Global } from "../global"
import { Log } from "../util/log"
import path from "path"
import path from "@/util/path"
import { Filesystem } from "../util/filesystem"
import { NamedError } from "@opencode-ai/util/error"
import { readableStreamToText } from "bun"
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/cli/cmd/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { UI } from "../ui"
import { Global } from "../../global"
import { Agent } from "../../agent/agent"
import { Provider } from "../../provider/provider"
import path from "path"
import path from "@/util/path"
import fs from "fs/promises"
import matter from "gray-matter"
import { Instance } from "../../project/instance"
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/cli/cmd/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as prompts from "@clack/prompts"
import { UI } from "../ui"
import { ModelsDev } from "../../provider/models"
import { map, pipe, sortBy, values } from "remeda"
import path from "path"
import path from "@/util/path"
import os from "os"
import { Config } from "../../config/config"
import { Global } from "../../global"
Expand Down
5 changes: 3 additions & 2 deletions packages/opencode/src/cli/cmd/debug/agent.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { EOL } from "os"
import { basename } from "path"
import path from "@/util/path"
import { Agent } from "../../../agent/agent"
import { Provider } from "../../../provider/provider"
import { Session } from "../../../session"
Expand Down Expand Up @@ -36,7 +36,8 @@ export const AgentCommand = cmd({
const agent = await Agent.get(agentName)
if (!agent) {
process.stderr.write(
`Agent ${agentName} not found, run '${basename(process.execPath)} agent list' to get an agent list` + EOL,
`Agent ${agentName} not found, run '${path.basename(process.execPath)} agent list' to get an agent list` +
EOL,
)
process.exit(1)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/cli/cmd/github.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import path from "path"
import path from "@/util/path"
import { exec } from "child_process"
import * as prompts from "@clack/prompts"
import { map, pipe, sortBy, values } from "remeda"
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/cli/cmd/mcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { McpOAuthProvider } from "../../mcp/oauth-provider"
import { Config } from "../../config/config"
import { Instance } from "../../project/instance"
import { Installation } from "../../installation"
import path from "path"
import path from "@/util/path"
import { Global } from "../../global"
import { modify, applyEdits } from "jsonc-parser"
import { Bus } from "../../bus"
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/cli/cmd/run.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { Argv } from "yargs"
import path from "path"
import path from "@/util/path"
import { UI } from "../ui"
import { cmd } from "./cmd"
import { Flag } from "../../flag/flag"
Expand Down
Loading
Loading