core: move Global module to @opencode-ai/core for centralized path management

Move the Global module from packages/opencode/src/global to packages/core/src/global
to provide a unified location for managing XDG directories and application paths.
This eliminates duplicate path definitions across packages and ensures consistent
access to data, config, cache, state, log, and bin directories throughout the codebase.
This commit is contained in:
Dax Raad 2026-04-25 13:51:37 -04:00
parent 716cf74190
commit 705f792e87
61 changed files with 99 additions and 143 deletions

View file

@ -1,7 +1,9 @@
import path from "path"
import fs from "fs/promises"
import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir"
import os from "os"
import { Context, Effect, Layer } from "effect"
import { Flock } from "./util/flock"
const app = "opencode"
const data = path.join(xdgData!, app)
@ -9,7 +11,7 @@ const cache = path.join(xdgCache!, app)
const config = path.join(xdgConfig!, app)
const state = path.join(xdgState!, app)
export const Path = {
const paths = {
get home() {
return process.env.OPENCODE_TEST_HOME ?? os.homedir()
},
@ -21,31 +23,43 @@ export const Path = {
state,
}
export namespace Global {
export class Service extends Context.Service<Service, Interface>()("@opencode/Global") {}
export const Path = paths
export interface Interface {
readonly home: string
readonly data: string
readonly cache: string
readonly config: string
readonly state: string
readonly bin: string
readonly log: string
}
Flock.setGlobal({ state })
export const layer = Layer.effect(
Service,
Effect.gen(function* () {
return Service.of({
home: Path.home,
data: Path.data,
cache: Path.cache,
config: Path.config,
state: Path.state,
bin: Path.bin,
log: Path.log,
})
}),
)
await Promise.all([
fs.mkdir(Path.data, { recursive: true }),
fs.mkdir(Path.config, { recursive: true }),
fs.mkdir(Path.state, { recursive: true }),
fs.mkdir(Path.log, { recursive: true }),
fs.mkdir(Path.bin, { recursive: true }),
])
export class Service extends Context.Service<Service, Interface>()("@opencode/Global") {}
export interface Interface {
readonly home: string
readonly data: string
readonly cache: string
readonly config: string
readonly state: string
readonly bin: string
readonly log: string
}
export const layer = Layer.effect(
Service,
Effect.gen(function* () {
return Service.of({
home: Path.home,
data: Path.data,
cache: Path.cache,
config: Path.config,
state: Path.state,
bin: Path.bin,
log: Path.log,
})
}),
)
export * as Global from "./global"

View file

@ -15,7 +15,7 @@ import PROMPT_SUMMARY from "./prompt/summary.txt"
import PROMPT_TITLE from "./prompt/title.txt"
import { Permission } from "@/permission"
import { mergeDeep, pipe, sortBy, values } from "remeda"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import path from "path"
import { Plugin } from "@/plugin"
import { Skill } from "../skill"

View file

@ -1,7 +1,7 @@
import path from "path"
import { Effect, Layer, Record, Result, Schema, Context } from "effect"
import { zod } from "@/util/effect-zod"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
export const OAUTH_DUMMY_KEY = "opencode-oauth-dummy-key"

View file

@ -2,7 +2,7 @@ import { cmd } from "./cmd"
import * as prompts from "@clack/prompts"
import { AppRuntime } from "@/effect/app-runtime"
import { UI } from "../ui"
import { Global } from "../../global"
import { Global } from "@opencode-ai/core/global"
import { Agent } from "../../agent/agent"
import { Provider } from "../../provider"
import path from "path"

View file

@ -1,4 +1,4 @@
import { Global } from "../../../global"
import { Global } from "@opencode-ai/core/global"
import { bootstrap } from "../../bootstrap"
import { cmd } from "../cmd"
import { ConfigCommand } from "./config"

View file

@ -13,7 +13,7 @@ import { Instance } from "../../project/instance"
import { Installation } from "../../installation"
import { InstallationVersion } from "@opencode-ai/core/installation/version"
import path from "path"
import { Global } from "../../global"
import { Global } from "@opencode-ai/core/global"
import { modify, applyEdits } from "jsonc-parser"
import { Filesystem } from "../../util"
import { Bus } from "../../bus"

View file

@ -2,7 +2,7 @@ import { intro, log, outro, spinner } from "@clack/prompts"
import type { Argv } from "yargs"
import { ConfigPaths } from "../../config"
import { Global } from "../../global"
import { Global } from "@opencode-ai/core/global"
import { installPlugin, patchPluginConfig, readPluginManifest } from "../../plugin/install"
import { resolvePluginTarget } from "../../plugin/shared"
import { Instance } from "../../project/instance"

View file

@ -8,7 +8,7 @@ import { map, pipe, sortBy, values } from "remeda"
import path from "path"
import os from "os"
import { Config } from "../../config"
import { Global } from "../../global"
import { Global } from "@opencode-ai/core/global"
import { Plugin } from "../../plugin"
import { Instance } from "../../project/instance"
import type { Hooks } from "@opencode-ai/plugin"

View file

@ -1,5 +1,5 @@
import path from "path"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { onMount } from "solid-js"
import { createStore } from "solid-js/store"

View file

@ -1,5 +1,5 @@
import path from "path"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { onMount } from "solid-js"
import { createStore, produce, unwrap } from "solid-js/store"

View file

@ -1,5 +1,5 @@
import path from "path"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { onMount } from "solid-js"
import { createStore, produce, unwrap } from "solid-js/store"

View file

@ -4,7 +4,7 @@ import { unique } from "remeda"
import z from "zod"
import { TuiInfo, TuiOptions } from "./tui-schema"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem, Log } from "@/util"
import * as ConfigPaths from "@/config/paths"

View file

@ -9,7 +9,7 @@ import { migrateTuiConfig } from "./tui-migrate"
import { TuiInfo } from "./tui-schema"
import { Flag } from "@opencode-ai/core/flag/flag"
import { isRecord } from "@/util/record"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { CurrentWorkingDirectory } from "./cwd"
import { ConfigPlugin } from "@/config/plugin"

View file

@ -1,7 +1,7 @@
import { createMemo } from "solid-js"
import { useProject } from "./project"
import { useSync } from "./sync"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
export function useDirectory() {
const project = useProject()

View file

@ -1,4 +1,4 @@
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { Flock } from "@opencode-ai/core/util/flock"
import { rename, rm } from "fs/promises"

View file

@ -5,7 +5,7 @@ import { useSync } from "@tui/context/sync"
import { useTheme } from "@tui/context/theme"
import { uniqueBy } from "remeda"
import path from "path"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { iife } from "@/util/iife"
import { useToast } from "../ui/toast"
import { useArgs } from "./args"

View file

@ -39,7 +39,7 @@ import carbonfox from "./theme/carbonfox.json" with { type: "json" }
import { useKV } from "./kv"
import { useRenderer } from "@opentui/solid"
import { createStore, produce } from "solid-js/store"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { useTuiConfig } from "./tui-config"
import { isRecord } from "@/util/record"

View file

@ -1,6 +1,6 @@
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@opencode-ai/plugin/tui"
import { createMemo, Match, Show, Switch } from "solid-js"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
const id = "internal:home-footer"

View file

@ -1,6 +1,6 @@
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@opencode-ai/plugin/tui"
import { createMemo, Show } from "solid-js"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
const id = "internal:sidebar-footer"

View file

@ -29,7 +29,7 @@ import { PluginLoader } from "@/plugin/loader"
import { PluginMeta } from "@/plugin/meta"
import { installPlugin as installModulePlugin, patchPluginConfig, readPluginManifest } from "@/plugin/install"
import { hasTheme, upsertTheme } from "../context/theme"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { Process } from "@/util"
import { Flock } from "@opencode-ai/core/util/flock"

View file

@ -76,7 +76,7 @@ import stripAnsi from "strip-ansi"
import { usePromptRef } from "../../context/prompt"
import { useExit } from "../../context/exit"
import { Filesystem } from "@/util"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { PermissionPrompt } from "./permission"
import { QuestionPrompt } from "./question"
import { DialogExportOptions } from "../../ui/dialog-export-options"

View file

@ -14,7 +14,7 @@ import path from "path"
import { LANGUAGE_EXTENSIONS } from "@/lsp/language"
import { Keybind } from "@/util"
import { Locale } from "@/util"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { useDialog } from "../../ui/dialog"
import { getScrollAcceleration } from "../../util/scroll"
import { useTuiConfig } from "../../context/tui-config"

View file

@ -3,7 +3,7 @@ import { UI } from "../ui"
import * as prompts from "@clack/prompts"
import { AppRuntime } from "@/effect/app-runtime"
import { Installation } from "../../installation"
import { Global } from "../../global"
import { Global } from "@opencode-ai/core/global"
import fs from "fs/promises"
import path from "path"
import os from "os"

View file

@ -1,7 +1,7 @@
import path from "path"
import { writeHeapSnapshot } from "node:v8"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "@/util"
const log = Log.create({ service: "heap" })

View file

@ -4,7 +4,7 @@ import { pathToFileURL } from "url"
import os from "os"
import z from "zod"
import { mergeDeep, pipe } from "remeda"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import fsNode from "fs/promises"
import { NamedError } from "@opencode-ai/core/util/error"
import { Flag } from "@opencode-ai/core/flag/flag"

View file

@ -3,7 +3,7 @@ export * as ConfigPaths from "./paths"
import path from "path"
import { Filesystem } from "@/util"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { unique } from "remeda"
import { JsonError } from "./error"
import * as Effect from "effect/Effect"

View file

@ -9,7 +9,7 @@ import { formatPatch, structuredPatch } from "diff"
import fuzzysort from "fuzzysort"
import ignore from "ignore"
import path from "path"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Instance } from "../project/instance"
import { Log } from "../util"
import { Protected } from "./protected"

View file

@ -7,7 +7,7 @@ import { ChildProcess } from "effect/unstable/process"
import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "@/util"
import { sanitizedProcessEnv } from "@opencode-ai/core/util/opencode-process"
import { which } from "@/util/which"

View file

@ -1,58 +0,0 @@
import fs from "fs/promises"
import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir"
import path from "path"
import os from "os"
import { Filesystem } from "../util"
import { Flock } from "@opencode-ai/core/util/flock"
const app = "opencode"
const data = path.join(xdgData!, app)
const cache = path.join(xdgCache!, app)
const config = path.join(xdgConfig!, app)
const state = path.join(xdgState!, app)
export const Path = {
// Allow override via OPENCODE_TEST_HOME for test isolation
get home() {
return process.env.OPENCODE_TEST_HOME || os.homedir()
},
data,
bin: path.join(cache, "bin"),
log: path.join(data, "log"),
cache,
config,
state,
}
// Initialize Flock with global state path
Flock.setGlobal({ state })
await Promise.all([
fs.mkdir(Path.data, { recursive: true }),
fs.mkdir(Path.config, { recursive: true }),
fs.mkdir(Path.state, { recursive: true }),
fs.mkdir(Path.log, { recursive: true }),
fs.mkdir(Path.bin, { recursive: true }),
])
const CACHE_VERSION = "21"
const version = await Filesystem.readText(path.join(Path.cache, "version")).catch(() => "0")
if (version !== CACHE_VERSION) {
try {
const contents = await fs.readdir(Path.cache)
await Promise.all(
contents.map((item) =>
fs.rm(path.join(Path.cache, item), {
recursive: true,
force: true,
}),
),
)
} catch {}
await Filesystem.write(path.join(Path.cache, "version"), CACHE_VERSION)
}
export * as Global from "."

View file

@ -31,7 +31,7 @@ import { PrCommand } from "./cli/cmd/pr"
import { SessionCommand } from "./cli/cmd/session"
import { DbCommand } from "./cli/cmd/db"
import path from "path"
import { Global } from "./global"
import { Global } from "@opencode-ai/core/global"
import { JsonMigration } from "./storage"
import { Database } from "./storage"
import { errorMessage } from "./util/error"

View file

@ -1,7 +1,7 @@
import type { ChildProcessWithoutNullStreams } from "child_process"
import path from "path"
import os from "os"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import { text } from "node:stream/consumers"
import fs from "fs/promises"

View file

@ -1,6 +1,6 @@
import path from "path"
import z from "zod"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Effect, Layer, Context } from "effect"
import { AppFileSystem } from "@opencode-ai/core/filesystem"

View file

@ -8,7 +8,7 @@ import {
} from "jsonc-parser"
import * as ConfigPaths from "@/config/paths"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { Flock } from "@opencode-ai/core/util/flock"
import { isRecord } from "@/util/record"

View file

@ -2,7 +2,7 @@ import path from "path"
import { fileURLToPath } from "url"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "@/util"
import { Flock } from "@opencode-ai/core/util/flock"

View file

@ -1,4 +1,4 @@
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import path from "path"
import { Schema } from "effect"

View file

@ -16,7 +16,7 @@ import { Flag } from "@opencode-ai/core/flag/flag"
import { zod } from "@/util/effect-zod"
import { namedSchemaError } from "@/util/named-schema-error"
import { iife } from "@/util/iife"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import path from "path"
import { pathToFileURL } from "url"
import { Effect, Layer, Context, Schema, Types } from "effect"

View file

@ -1,4 +1,4 @@
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Vcs } from "@/project"
import * as InstanceState from "@/effect/instance-state"
import { Effect, Layer, Schema } from "effect"

View file

@ -9,7 +9,7 @@ import { Instance } from "@/project/instance"
import { Vcs } from "@/project"
import { Agent } from "@/agent/agent"
import { Skill } from "@/skill"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { LSP } from "@/lsp"
import { Command } from "@/command"
import { QuestionRoutes } from "./question"

View file

@ -7,7 +7,7 @@ import { InstanceState } from "@/effect"
import { Flag } from "@opencode-ai/core/flag/flag"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { withTransientReadRetry } from "@/util/effect-http-client"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import type { MessageV2 } from "./message-v2"
import type { MessageID } from "./schema"

View file

@ -25,7 +25,7 @@ import { SessionID, MessageID, PartID } from "./schema"
import type { Provider } from "@/provider"
import { Permission } from "@/permission"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Effect, Layer, Option, Context, Schema, Types } from "effect"
import { zod } from "@/util/effect-zod"
import { withStatics } from "@/util/schema"

View file

@ -3,7 +3,7 @@ import { Effect, Layer, Path, Schema, Context } from "effect"
import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
import { withTransientReadRetry } from "@/util/effect-http-client"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
const skillConcurrency = 4

View file

@ -8,7 +8,7 @@ import type { Agent } from "@/agent/agent"
import { Bus } from "@/bus"
import { InstanceState } from "@/effect"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Global } from "@/global"
import { Global } from "@opencode-ai/core/global"
import { Permission } from "@/permission"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { Config } from "../config"

View file

@ -8,7 +8,7 @@ import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { Hash } from "@opencode-ai/core/util/hash"
import { Config } from "../config"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import { withStatics } from "@/util/schema"
import { zod } from "@/util/effect-zod"

View file

@ -4,7 +4,7 @@ import { type SQLiteTransaction } from "drizzle-orm/sqlite-core"
export * from "drizzle-orm"
import { LocalContext } from "../util"
import { lazy } from "../util/lazy"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import { NamedError } from "@opencode-ai/core/util/error"
import z from "zod"

View file

@ -1,6 +1,6 @@
import type { SQLiteBunDatabase } from "drizzle-orm/bun-sqlite"
import type { NodeSQLiteDatabase } from "drizzle-orm/node-sqlite"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../util"
import { ProjectTable } from "../project/project.sql"
import { SessionTable, MessageTable, PartTable, TodoTable, PermissionTable } from "../session/session.sql"

View file

@ -1,6 +1,6 @@
import { Log } from "../util"
import path from "path"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { NamedError } from "@opencode-ai/core/util/error"
import z from "zod"
import { AppFileSystem } from "@opencode-ai/core/filesystem"

View file

@ -1,4 +1,4 @@
import path from "path"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
export const TRUNCATION_DIR = path.join(Global.Path.data, "tool-output")

View file

@ -1,6 +1,6 @@
import whichPkg from "which"
import path from "path"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
export function which(cmd: string, env?: NodeJS.ProcessEnv) {
const base = env?.PATH ?? env?.Path ?? process.env.PATH ?? process.env.Path ?? ""

View file

@ -1,6 +1,6 @@
import z from "zod"
import { NamedError } from "@opencode-ai/core/util/error"
import { Global } from "../global"
import { Global } from "@opencode-ai/core/global"
import { Instance } from "../project/instance"
import { InstanceBootstrap } from "../project/bootstrap"
import { Project } from "../project"

View file

@ -4,7 +4,7 @@ import path from "path"
import { pathToFileURL } from "url"
import { tmpdir } from "../../fixture/fixture"
import { createTuiPluginApi } from "../../fixture/tui-plugin"
import { Global } from "../../../src/global"
import { Global } from "@opencode-ai/core/global"
import { TuiConfig } from "../../../src/cli/cmd/tui/config/tui"
import { Filesystem } from "../../../src/util/"

View file

@ -23,7 +23,7 @@ const infra = CrossSpawnSpawner.defaultLayer.pipe(
import path from "path"
import fs from "fs/promises"
import { pathToFileURL } from "url"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { ProjectID } from "../../src/project/schema"
import { Filesystem } from "../../src/util"
import { ConfigPlugin } from "@/config/plugin"

View file

@ -5,7 +5,7 @@ import { tmpdir } from "../fixture/fixture"
import { Instance } from "../../src/project/instance"
import { TuiConfig } from "../../src/cli/cmd/tui/config/tui"
import { Config } from "../../src/config"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "../../src/util"
import { AppRuntime } from "../../src/effect/app-runtime"
import { Effect, Layer } from "effect"

View file

@ -7,7 +7,7 @@ import { tmpdir } from "../fixture/fixture"
import { Instance } from "../../src/project/instance"
import { Provider } from "../../src/provider"
import { Env } from "../../src/env"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "../../src/util"
import { Effect } from "effect"
import { AppRuntime } from "../../src/effect/app-runtime"

View file

@ -11,7 +11,7 @@ export {}
// import { Instance } from "../../src/project/instance"
// import { Provider } from "../../src/provider"
// import { Env } from "../../src/env"
// import { Global } from "../../src/global"
// import { Global } from "@opencode-ai/core/global"
// import { GitLabWorkflowLanguageModel } from "gitlab-ai-provider"
// test("GitLab Duo: loads provider with API key from environment", async () => {

View file

@ -3,7 +3,7 @@ import { mkdir, unlink } from "fs/promises"
import path from "path"
import { tmpdir } from "../fixture/fixture"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Instance } from "../../src/project/instance"
import { Plugin } from "../../src/plugin/index"
import { ModelsDev } from "../../src/provider"

View file

@ -6,7 +6,7 @@ import { Instruction } from "../../src/session/instruction"
import type { MessageV2 } from "../../src/session/message-v2"
import { Instance } from "../../src/project/instance"
import { MessageID, PartID, SessionID } from "../../src/session/schema"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { tmpdir } from "../fixture/fixture"
const run = <A>(effect: Effect.Effect<A, any, Instruction.Service>) =>

View file

@ -1,7 +1,7 @@
import { describe, test, expect, beforeAll, afterAll } from "bun:test"
import { Effect } from "effect"
import { Discovery } from "../../src/skill/discovery"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Filesystem } from "../../src/util"
import { rm } from "fs/promises"
import path from "path"

View file

@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"
import path from "path"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { InstallationChannel } from "@opencode-ai/core/installation/version"
import { Database } from "../../src/storage"

View file

@ -6,7 +6,7 @@ import path from "path"
import fs from "fs/promises"
import { readFileSync, readdirSync } from "fs"
import { JsonMigration } from "../../src/storage"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { ProjectTable } from "../../src/project/project.sql"
import { ProjectID } from "../../src/project/schema"
import { SessionTable, MessageTable, PartTable, TodoTable, PermissionTable } from "../../src/session/session.sql"

View file

@ -4,7 +4,7 @@ import { Effect, Exit, Layer } from "effect"
import { AppFileSystem } from "@opencode-ai/core/filesystem"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Git } from "../../src/git"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Storage } from "../../src/storage"
import { tmpdirScoped } from "../fixture/fixture"
import { testEffect } from "../lib/effect"

View file

@ -1,7 +1,7 @@
import { afterEach, expect, test } from "bun:test"
import fs from "fs/promises"
import path from "path"
import { Global } from "../../src/global"
import { Global } from "@opencode-ai/core/global"
import { Log } from "../../src/util"
import { tmpdir } from "../fixture/fixture"