Jelajahi Sumber

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.
Dax Raad 15 jam lalu
induk
melakukan
705f792e87
61 mengubah file dengan 101 tambahan dan 145 penghapusan
  1. 42 28
      packages/core/src/global.ts
  2. 1 1
      packages/opencode/src/agent/agent.ts
  3. 1 1
      packages/opencode/src/auth/index.ts
  4. 1 1
      packages/opencode/src/cli/cmd/agent.ts
  5. 1 1
      packages/opencode/src/cli/cmd/debug/index.ts
  6. 1 1
      packages/opencode/src/cli/cmd/mcp.ts
  7. 1 1
      packages/opencode/src/cli/cmd/plug.ts
  8. 1 1
      packages/opencode/src/cli/cmd/providers.ts
  9. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx
  10. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx
  11. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx
  12. 1 1
      packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts
  13. 1 1
      packages/opencode/src/cli/cmd/tui/config/tui.ts
  14. 1 1
      packages/opencode/src/cli/cmd/tui/context/directory.ts
  15. 1 1
      packages/opencode/src/cli/cmd/tui/context/kv.tsx
  16. 1 1
      packages/opencode/src/cli/cmd/tui/context/local.tsx
  17. 1 1
      packages/opencode/src/cli/cmd/tui/context/theme.tsx
  18. 1 1
      packages/opencode/src/cli/cmd/tui/feature-plugins/home/footer.tsx
  19. 1 1
      packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx
  20. 1 1
      packages/opencode/src/cli/cmd/tui/plugin/runtime.ts
  21. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
  22. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx
  23. 1 1
      packages/opencode/src/cli/cmd/uninstall.ts
  24. 1 1
      packages/opencode/src/cli/heap.ts
  25. 1 1
      packages/opencode/src/config/config.ts
  26. 1 1
      packages/opencode/src/config/paths.ts
  27. 1 1
      packages/opencode/src/file/index.ts
  28. 1 1
      packages/opencode/src/file/ripgrep.ts
  29. 0 58
      packages/opencode/src/global/index.ts
  30. 1 1
      packages/opencode/src/index.ts
  31. 1 1
      packages/opencode/src/lsp/server.ts
  32. 1 1
      packages/opencode/src/mcp/auth.ts
  33. 1 1
      packages/opencode/src/plugin/install.ts
  34. 1 1
      packages/opencode/src/plugin/meta.ts
  35. 1 1
      packages/opencode/src/provider/models.ts
  36. 1 1
      packages/opencode/src/provider/provider.ts
  37. 1 1
      packages/opencode/src/server/routes/instance/httpapi/instance.ts
  38. 1 1
      packages/opencode/src/server/routes/instance/index.ts
  39. 1 1
      packages/opencode/src/session/instruction.ts
  40. 1 1
      packages/opencode/src/session/session.ts
  41. 1 1
      packages/opencode/src/skill/discovery.ts
  42. 1 1
      packages/opencode/src/skill/index.ts
  43. 1 1
      packages/opencode/src/snapshot/index.ts
  44. 1 1
      packages/opencode/src/storage/db.ts
  45. 1 1
      packages/opencode/src/storage/json-migration.ts
  46. 1 1
      packages/opencode/src/storage/storage.ts
  47. 1 1
      packages/opencode/src/tool/truncation-dir.ts
  48. 1 1
      packages/opencode/src/util/which.ts
  49. 1 1
      packages/opencode/src/worktree/index.ts
  50. 1 1
      packages/opencode/test/cli/tui/plugin-loader.test.ts
  51. 1 1
      packages/opencode/test/config/config.test.ts
  52. 1 1
      packages/opencode/test/config/tui.test.ts
  53. 1 1
      packages/opencode/test/provider/amazon-bedrock.test.ts
  54. 1 1
      packages/opencode/test/provider/gitlab-duo.test.ts
  55. 1 1
      packages/opencode/test/provider/provider.test.ts
  56. 1 1
      packages/opencode/test/session/instruction.test.ts
  57. 1 1
      packages/opencode/test/skill/discovery.test.ts
  58. 1 1
      packages/opencode/test/storage/db.test.ts
  59. 1 1
      packages/opencode/test/storage/json-migration.test.ts
  60. 1 1
      packages/opencode/test/storage/storage.test.ts
  61. 1 1
      packages/opencode/test/util/log.test.ts

+ 42 - 28
packages/core/src/global.ts

@@ -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 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 const Path = paths
+
+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 }),
+])
+
+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"

+ 1 - 1
packages/opencode/src/agent/agent.ts

@@ -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"

+ 1 - 1
packages/opencode/src/auth/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/agent.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/debug/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/mcp.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/plug.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/providers.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts

@@ -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"
 

+ 1 - 1
packages/opencode/src/cli/cmd/tui/config/tui.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/context/directory.ts

@@ -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()

+ 1 - 1
packages/opencode/src/cli/cmd/tui/context/kv.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/context/local.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/context/theme.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/feature-plugins/home/footer.tsx

@@ -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"
 

+ 1 - 1
packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx

@@ -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"
 

+ 1 - 1
packages/opencode/src/cli/cmd/tui/plugin/runtime.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/routes/session/index.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx

@@ -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"

+ 1 - 1
packages/opencode/src/cli/cmd/uninstall.ts

@@ -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"

+ 1 - 1
packages/opencode/src/cli/heap.ts

@@ -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" })

+ 1 - 1
packages/opencode/src/config/config.ts

@@ -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"

+ 1 - 1
packages/opencode/src/config/paths.ts

@@ -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"

+ 1 - 1
packages/opencode/src/file/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/file/ripgrep.ts

@@ -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"

+ 0 - 58
packages/opencode/src/global/index.ts

@@ -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 "."

+ 1 - 1
packages/opencode/src/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/lsp/server.ts

@@ -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"

+ 1 - 1
packages/opencode/src/mcp/auth.ts

@@ -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"
 

+ 1 - 1
packages/opencode/src/plugin/install.ts

@@ -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"

+ 1 - 1
packages/opencode/src/plugin/meta.ts

@@ -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"
 

+ 1 - 1
packages/opencode/src/provider/models.ts

@@ -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"

+ 1 - 1
packages/opencode/src/provider/provider.ts

@@ -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"

+ 1 - 1
packages/opencode/src/server/routes/instance/httpapi/instance.ts

@@ -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"

+ 1 - 1
packages/opencode/src/server/routes/instance/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/session/instruction.ts

@@ -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"

+ 1 - 1
packages/opencode/src/session/session.ts

@@ -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"

+ 1 - 1
packages/opencode/src/skill/discovery.ts

@@ -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

+ 1 - 1
packages/opencode/src/skill/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/snapshot/index.ts

@@ -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"

+ 1 - 1
packages/opencode/src/storage/db.ts

@@ -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"

+ 1 - 1
packages/opencode/src/storage/json-migration.ts

@@ -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"

+ 1 - 1
packages/opencode/src/storage/storage.ts

@@ -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"

+ 1 - 1
packages/opencode/src/tool/truncation-dir.ts

@@ -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")

+ 1 - 1
packages/opencode/src/util/which.ts

@@ -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 ?? ""

+ 1 - 1
packages/opencode/src/worktree/index.ts

@@ -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"

+ 1 - 1
packages/opencode/test/cli/tui/plugin-loader.test.ts

@@ -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/"
 

+ 1 - 1
packages/opencode/test/config/config.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/config/tui.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/provider/amazon-bedrock.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/provider/gitlab-duo.test.ts

@@ -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 () => {

+ 1 - 1
packages/opencode/test/provider/provider.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/session/instruction.test.ts

@@ -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>) =>

+ 1 - 1
packages/opencode/test/skill/discovery.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/storage/db.test.ts

@@ -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"
 

+ 1 - 1
packages/opencode/test/storage/json-migration.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/storage/storage.test.ts

@@ -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"

+ 1 - 1
packages/opencode/test/util/log.test.ts

@@ -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"