Skip to content

Commit 4dd0d1f

Browse files
authored
refactor(opencode): use AppFileSystem path helpers (#22637)
1 parent 672ee28 commit 4dd0d1f

5 files changed

Lines changed: 14 additions & 17 deletions

File tree

packages/opencode/src/config/tui.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { Flag } from "@/flag/flag"
1010
import { Log } from "@/util/log"
1111
import { isRecord } from "@/util/record"
1212
import { Global } from "@/global"
13-
import { Filesystem } from "@/util/filesystem"
1413
import { InstanceState } from "@/effect/instance-state"
1514
import { makeRuntime } from "@/effect/run-service"
1615
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
@@ -42,8 +41,8 @@ export namespace TuiConfig {
4241
export class Service extends Context.Service<Service, Interface>()("@opencode/TuiConfig") {}
4342

4443
function pluginScope(file: string, ctx: { directory: string; worktree: string }): Config.PluginScope {
45-
if (Filesystem.contains(ctx.directory, file)) return "local"
46-
if (ctx.worktree !== "/" && Filesystem.contains(ctx.worktree, file)) return "local"
44+
if (AppFileSystem.contains(ctx.directory, file)) return "local"
45+
if (ctx.worktree !== "/" && AppFileSystem.contains(ctx.worktree, file)) return "local"
4746
return "global"
4847
}
4948

packages/opencode/src/file/time.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { InstanceState } from "@/effect/instance-state"
33
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
44
import { Flag } from "@/flag/flag"
55
import type { SessionID } from "@/session/schema"
6-
import { Filesystem } from "@/util/filesystem"
76
import { Log } from "../util/log"
87

98
export namespace FileTime {
@@ -62,7 +61,7 @@ export namespace FileTime {
6261
)
6362

6463
const getLock = Effect.fn("FileTime.lock")(function* (filepath: string) {
65-
filepath = Filesystem.normalizePath(filepath)
64+
filepath = AppFileSystem.normalizePath(filepath)
6665
const locks = (yield* InstanceState.get(state)).locks
6766
const lock = locks.get(filepath)
6867
if (lock) return lock
@@ -73,21 +72,21 @@ export namespace FileTime {
7372
})
7473

7574
const read = Effect.fn("FileTime.read")(function* (sessionID: SessionID, file: string) {
76-
file = Filesystem.normalizePath(file)
75+
file = AppFileSystem.normalizePath(file)
7776
const reads = (yield* InstanceState.get(state)).reads
7877
log.info("read", { sessionID, file })
7978
session(reads, sessionID).set(file, yield* stamp(file))
8079
})
8180

8281
const get = Effect.fn("FileTime.get")(function* (sessionID: SessionID, file: string) {
83-
file = Filesystem.normalizePath(file)
82+
file = AppFileSystem.normalizePath(file)
8483
const reads = (yield* InstanceState.get(state)).reads
8584
return reads.get(sessionID)?.get(file)?.read
8685
})
8786

8887
const assert = Effect.fn("FileTime.assert")(function* (sessionID: SessionID, filepath: string) {
8988
if (disableCheck) return
90-
filepath = Filesystem.normalizePath(filepath)
89+
filepath = AppFileSystem.normalizePath(filepath)
9190

9291
const reads = (yield* InstanceState.get(state)).reads
9392
const time = reads.get(sessionID)?.get(filepath)

packages/opencode/src/project/instance.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { GlobalBus } from "@/bus/global"
22
import { disposeInstance } from "@/effect/instance-registry"
33
import { makeRuntime } from "@/effect/run-service"
4-
import { Filesystem } from "@/util/filesystem"
4+
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
55
import { iife } from "@/util/iife"
66
import { Log } from "@/util/log"
77
import { LocalContext } from "../util/local-context"
@@ -56,7 +56,7 @@ function track(directory: string, next: Promise<InstanceContext>) {
5656

5757
export const Instance = {
5858
async provide<R>(input: { directory: string; init?: () => Promise<any>; fn: () => R }): Promise<R> {
59-
const directory = Filesystem.resolve(input.directory)
59+
const directory = AppFileSystem.resolve(input.directory)
6060
let existing = cache.get(directory)
6161
if (!existing) {
6262
Log.Default.info("creating instance", { directory })
@@ -93,11 +93,11 @@ export const Instance = {
9393
*/
9494
containsPath(filepath: string, ctx?: InstanceContext) {
9595
const instance = ctx ?? Instance
96-
if (Filesystem.contains(instance.directory, filepath)) return true
96+
if (AppFileSystem.contains(instance.directory, filepath)) return true
9797
// Non-git projects set worktree to "/" which would match ANY absolute path.
9898
// Skip worktree check in this case to preserve external_directory permissions.
9999
if (Instance.worktree === "/") return false
100-
return Filesystem.contains(instance.worktree, filepath)
100+
return AppFileSystem.contains(instance.worktree, filepath)
101101
},
102102
/**
103103
* Captures the current instance ALS context and returns a wrapper that
@@ -117,7 +117,7 @@ export const Instance = {
117117
return context.provide(ctx, fn)
118118
},
119119
async reload(input: { directory: string; init?: () => Promise<any>; project?: Project.Info; worktree?: string }) {
120-
const directory = Filesystem.resolve(input.directory)
120+
const directory = AppFileSystem.resolve(input.directory)
121121
Log.Default.info("reloading instance", { directory })
122122
await disposeInstance(directory)
123123
cache.delete(directory)

packages/opencode/src/server/instance/middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import { getAdaptor } from "@/control-plane/adaptors"
44
import { WorkspaceID } from "@/control-plane/schema"
55
import { Workspace } from "@/control-plane/workspace"
66
import { ServerProxy } from "../proxy"
7-
import { Filesystem } from "@/util/filesystem"
87
import { Instance } from "@/project/instance"
98
import { InstanceBootstrap } from "@/project/bootstrap"
109
import { Session } from "@/session"
1110
import { SessionID } from "@/session/schema"
1211
import { WorkspaceContext } from "@/control-plane/workspace-context"
1312
import { AppRuntime } from "@/effect/app-runtime"
1413
import { Log } from "@/util/log"
14+
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
1515

1616
type Rule = { method?: string; path: string; exact?: boolean; action: "local" | "forward" }
1717

@@ -53,7 +53,7 @@ export function WorkspaceRouterMiddleware(upgrade: UpgradeWebSocket): Middleware
5353

5454
return async (c, next) => {
5555
const raw = c.req.query("directory") || c.req.header("x-opencode-directory") || process.cwd()
56-
const directory = Filesystem.resolve(
56+
const directory = AppFileSystem.resolve(
5757
(() => {
5858
try {
5959
return decodeURIComponent(raw)

packages/opencode/src/tool/edit.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { FileWatcher } from "../file/watcher"
1515
import { Bus } from "../bus"
1616
import { Format } from "../format"
1717
import { FileTime } from "../file/time"
18-
import { Filesystem } from "../util/filesystem"
1918
import { Instance } from "../project/instance"
2019
import { Snapshot } from "@/snapshot"
2120
import { assertExternalDirectoryEffect } from "./external-directory"
@@ -169,7 +168,7 @@ export const EditTool = Tool.define(
169168
let output = "Edit applied successfully."
170169
yield* lsp.touchFile(filePath, true)
171170
const diagnostics = yield* lsp.diagnostics()
172-
const normalizedFilePath = Filesystem.normalizePath(filePath)
171+
const normalizedFilePath = AppFileSystem.normalizePath(filePath)
173172
const block = LSP.Diagnostic.report(filePath, diagnostics[normalizedFilePath] ?? [])
174173
if (block) output += `\n\nLSP errors detected in this file, please fix:\n${block}`
175174

0 commit comments

Comments
 (0)