Просмотр исходного кода

refactor: remove module barrels (#24554)

Dax 3 месяцев назад
Родитель
Сommit
f25f1485d5
100 измененных файлов с 221 добавлено и 222 удалено
  1. 1 1
      packages/opencode/script/schema.ts
  2. 1 1
      packages/opencode/src/account/repo.ts
  3. 4 4
      packages/opencode/src/acp/agent.ts
  4. 1 1
      packages/opencode/src/acp/session.ts
  5. 5 5
      packages/opencode/src/agent/agent.ts
  6. 3 3
      packages/opencode/src/bus/index.ts
  7. 1 1
      packages/opencode/src/cli/cmd/acp.ts
  8. 2 2
      packages/opencode/src/cli/cmd/agent.ts
  9. 2 2
      packages/opencode/src/cli/cmd/db.ts
  10. 3 3
      packages/opencode/src/cli/cmd/debug/agent.ts
  11. 1 1
      packages/opencode/src/cli/cmd/debug/config.ts
  12. 2 2
      packages/opencode/src/cli/cmd/debug/lsp.ts
  13. 2 2
      packages/opencode/src/cli/cmd/debug/scrap.ts
  14. 1 1
      packages/opencode/src/cli/cmd/export.ts
  15. 6 6
      packages/opencode/src/cli/cmd/github.ts
  16. 4 4
      packages/opencode/src/cli/cmd/import.ts
  17. 2 2
      packages/opencode/src/cli/cmd/mcp.ts
  18. 2 2
      packages/opencode/src/cli/cmd/models.ts
  19. 3 3
      packages/opencode/src/cli/cmd/plug.ts
  20. 1 1
      packages/opencode/src/cli/cmd/pr.ts
  21. 3 3
      packages/opencode/src/cli/cmd/providers.ts
  22. 4 4
      packages/opencode/src/cli/cmd/run.ts
  23. 4 4
      packages/opencode/src/cli/cmd/session.ts
  24. 3 3
      packages/opencode/src/cli/cmd/stats.ts
  25. 5 3
      packages/opencode/src/cli/cmd/tui/app.tsx
  26. 1 1
      packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx
  27. 2 2
      packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx
  28. 1 1
      packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx
  29. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx
  30. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx
  31. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx
  32. 2 2
      packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
  33. 1 1
      packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx
  34. 1 1
      packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts
  35. 2 1
      packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts
  36. 2 1
      packages/opencode/src/cli/cmd/tui/config/tui.ts
  37. 1 1
      packages/opencode/src/cli/cmd/tui/context/editor-zed.ts
  38. 1 1
      packages/opencode/src/cli/cmd/tui/context/keybind.tsx
  39. 1 1
      packages/opencode/src/cli/cmd/tui/context/kv.tsx
  40. 1 1
      packages/opencode/src/cli/cmd/tui/context/local.tsx
  41. 1 1
      packages/opencode/src/cli/cmd/tui/context/sync.tsx
  42. 1 1
      packages/opencode/src/cli/cmd/tui/context/theme.tsx
  43. 1 1
      packages/opencode/src/cli/cmd/tui/feature-plugins/system/plugins.tsx
  44. 0 3
      packages/opencode/src/cli/cmd/tui/plugin/index.ts
  45. 3 3
      packages/opencode/src/cli/cmd/tui/plugin/runtime.ts
  46. 1 1
      packages/opencode/src/cli/cmd/tui/routes/home.tsx
  47. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx
  48. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx
  49. 4 4
      packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
  50. 2 2
      packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx
  51. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
  52. 1 1
      packages/opencode/src/cli/cmd/tui/routes/session/subagent-footer.tsx
  53. 3 3
      packages/opencode/src/cli/cmd/tui/thread.ts
  54. 1 1
      packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx
  55. 2 2
      packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx
  56. 2 0
      packages/opencode/src/cli/cmd/tui/util/clipboard.ts
  57. 4 2
      packages/opencode/src/cli/cmd/tui/util/editor.ts
  58. 0 4
      packages/opencode/src/cli/cmd/tui/util/index.ts
  59. 2 0
      packages/opencode/src/cli/cmd/tui/util/selection.ts
  60. 3 1
      packages/opencode/src/cli/cmd/tui/util/sound.ts
  61. 1 1
      packages/opencode/src/cli/cmd/tui/util/transcript.ts
  62. 3 3
      packages/opencode/src/cli/cmd/tui/worker.ts
  63. 2 2
      packages/opencode/src/cli/cmd/uninstall.ts
  64. 1 1
      packages/opencode/src/cli/heap.ts
  65. 1 1
      packages/opencode/src/cli/network.ts
  66. 1 1
      packages/opencode/src/cli/upgrade.ts
  67. 3 3
      packages/opencode/src/command/index.ts
  68. 3 3
      packages/opencode/src/config/agent.ts
  69. 2 2
      packages/opencode/src/config/command.ts
  70. 4 2
      packages/opencode/src/config/config.ts
  71. 0 16
      packages/opencode/src/config/index.ts
  72. 2 1
      packages/opencode/src/config/managed.ts
  73. 3 1
      packages/opencode/src/config/markdown.ts
  74. 1 1
      packages/opencode/src/config/paths.ts
  75. 1 1
      packages/opencode/src/config/variable.ts
  76. 1 1
      packages/opencode/src/control-plane/workspace-context.ts
  77. 8 5
      packages/opencode/src/control-plane/workspace.ts
  78. 12 12
      packages/opencode/src/effect/app-runtime.ts
  79. 4 4
      packages/opencode/src/effect/bootstrap-runtime.ts
  80. 3 1
      packages/opencode/src/effect/bridge.ts
  81. 0 5
      packages/opencode/src/effect/index.ts
  82. 3 1
      packages/opencode/src/effect/instance-state.ts
  83. 1 1
      packages/opencode/src/effect/run-service.ts
  84. 2 0
      packages/opencode/src/effect/runner.ts
  85. 1 1
      packages/opencode/src/env/index.ts
  86. 2 2
      packages/opencode/src/file/index.ts
  87. 1 1
      packages/opencode/src/file/ripgrep.ts
  88. 3 3
      packages/opencode/src/file/watcher.ts
  89. 2 2
      packages/opencode/src/format/formatter.ts
  90. 3 3
      packages/opencode/src/format/index.ts
  91. 2 2
      packages/opencode/src/ide/index.ts
  92. 4 4
      packages/opencode/src/index.ts
  93. 1 1
      packages/opencode/src/installation/index.ts
  94. 5 3
      packages/opencode/src/lsp/client.ts
  95. 0 3
      packages/opencode/src/lsp/index.ts
  96. 1 1
      packages/opencode/src/lsp/launch.ts
  97. 6 4
      packages/opencode/src/lsp/lsp.ts
  98. 4 4
      packages/opencode/src/lsp/server.ts
  99. 4 4
      packages/opencode/src/mcp/index.ts
  100. 1 1
      packages/opencode/src/mcp/oauth-callback.ts

+ 1 - 1
packages/opencode/script/schema.ts

@@ -1,7 +1,7 @@
 #!/usr/bin/env bun
 
 import { z } from "zod"
-import { Config } from "../src/config"
+import { Config } from "@/config/config"
 import { TuiConfig } from "../src/cli/cmd/tui/config/tui"
 
 function generate(schema: z.ZodType) {

+ 1 - 1
packages/opencode/src/account/repo.ts

@@ -1,7 +1,7 @@
 import { eq } from "drizzle-orm"
 import { Effect, Layer, Option, Schema, Context } from "effect"
 
-import { Database } from "@/storage"
+import { Database } from "@/storage/db"
 import { AccountStateTable, AccountTable } from "./account.sql"
 import { AccessToken, AccountID, AccountRepoError, Info, OrgID, RefreshToken } from "./schema"
 import { normalizeServerUrl } from "./url"

+ 4 - 4
packages/opencode/src/acp/agent.ts

@@ -31,19 +31,19 @@ import {
   type Usage,
 } from "@agentclientprotocol/sdk"
 
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { pathToFileURL } from "url"
-import { Filesystem } from "../util"
+import { Filesystem } from "@/util/filesystem"
 import { Hash } from "@opencode-ai/core/util/hash"
 import { ACPSessionManager } from "./session"
 import type { ACPConfig } from "./types"
-import { Provider } from "../provider"
+import { Provider } from "@/provider/provider"
 import { ModelID, ProviderID } from "../provider/schema"
 import { Agent as AgentModule } from "../agent/agent"
 import { AppRuntime } from "@/effect/app-runtime"
 import { Installation } from "@/installation"
 import { MessageV2 } from "@/session/message-v2"
-import { Config } from "@/config"
+import { Config } from "@/config/config"
 import { ConfigMCP } from "@/config/mcp"
 import { Todo } from "@/session/todo"
 import { Result, Schema } from "effect"

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

@@ -1,6 +1,6 @@
 import { RequestError, type McpServer } from "@agentclientprotocol/sdk"
 import type { ACPSessionState } from "./types"
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import type { OpencodeClient } from "@opencode-ai/sdk/v2"
 
 const log = Log.create({ service: "acp-session-manager" })

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

@@ -1,11 +1,11 @@
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import z from "zod"
-import { Provider } from "../provider"
+import { Provider } from "@/provider/provider"
 import { ModelID, ProviderID } from "../provider/schema"
 import { generateObject, streamObject, type ModelMessage } from "ai"
-import { Truncate } from "../tool"
+import { Truncate } from "@/tool/truncate"
 import { Auth } from "../auth"
-import { ProviderTransform } from "../provider"
+import { ProviderTransform } from "@/provider/transform"
 
 import PROMPT_GENERATE from "./generate.txt"
 import PROMPT_COMPACTION from "./prompt/compaction.txt"
@@ -19,7 +19,7 @@ import path from "path"
 import { Plugin } from "@/plugin"
 import { Skill } from "../skill"
 import { Effect, Context, Layer, Schema } from "effect"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import * as Option from "effect/Option"
 import * as OtelTracer from "@effect/opentelemetry/Tracer"
 import { zod } from "@/util/effect-zod"

+ 3 - 3
packages/opencode/src/bus/index.ts

@@ -1,9 +1,9 @@
 import { Effect, Exit, Layer, PubSub, Scope, Context, Stream, Schema } from "effect"
-import { EffectBridge } from "@/effect"
-import { Log } from "../util"
+import { EffectBridge } from "@/effect/bridge"
+import * as Log from "@opencode-ai/core/util/log"
 import { BusEvent } from "./bus-event"
 import { GlobalBus } from "./global"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import { makeRuntime } from "@/effect/run-service"
 
 const log = Log.create({ service: "bus" })

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

@@ -1,4 +1,4 @@
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import { bootstrap } from "../bootstrap"
 import { cmd } from "./cmd"
 import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"

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

@@ -4,10 +4,10 @@ import { AppRuntime } from "@/effect/app-runtime"
 import { UI } from "../ui"
 import { Global } from "@opencode-ai/core/global"
 import { Agent } from "../../agent/agent"
-import { Provider } from "../../provider"
+import { Provider } from "@/provider/provider"
 import path from "path"
 import fs from "fs/promises"
-import { Filesystem } from "../../util"
+import { Filesystem } from "@/util/filesystem"
 import matter from "gray-matter"
 import { Instance } from "../../project/instance"
 import { EOL } from "os"

+ 2 - 2
packages/opencode/src/cli/cmd/db.ts

@@ -1,11 +1,11 @@
 import type { Argv } from "yargs"
 import { spawn } from "child_process"
-import { Database } from "../../storage"
+import { Database } from "@/storage/db"
 import { drizzle } from "drizzle-orm/bun-sqlite"
 import { Database as BunDatabase } from "bun:sqlite"
 import { UI } from "../ui"
 import { cmd } from "./cmd"
-import { JsonMigration } from "../../storage"
+import { JsonMigration } from "@/storage/json-migration"
 import { EOL } from "os"
 import { errorMessage } from "../../util/error"
 

+ 3 - 3
packages/opencode/src/cli/cmd/debug/agent.ts

@@ -2,11 +2,11 @@ import { EOL } from "os"
 import { basename } from "path"
 import { Effect } from "effect"
 import { Agent } from "../../../agent/agent"
-import { Provider } from "../../../provider"
-import { Session } from "../../../session"
+import { Provider } from "@/provider/provider"
+import { Session } from "@/session/session"
 import type { MessageV2 } from "../../../session/message-v2"
 import { MessageID, PartID } from "../../../session/schema"
-import { ToolRegistry } from "../../../tool"
+import { ToolRegistry } from "@/tool/registry"
 import { Instance } from "../../../project/instance"
 import { Permission } from "../../../permission"
 import { iife } from "../../../util/iife"

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

@@ -1,5 +1,5 @@
 import { EOL } from "os"
-import { Config } from "../../../config"
+import { Config } from "@/config/config"
 import { AppRuntime } from "@/effect/app-runtime"
 import { bootstrap } from "../../bootstrap"
 import { cmd } from "../cmd"

+ 2 - 2
packages/opencode/src/cli/cmd/debug/lsp.ts

@@ -1,9 +1,9 @@
-import { LSP } from "../../../lsp"
+import { LSP } from "@/lsp/lsp"
 import { AppRuntime } from "../../../effect/app-runtime"
 import { Effect } from "effect"
 import { bootstrap } from "../../bootstrap"
 import { cmd } from "../cmd"
-import { Log } from "../../../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { EOL } from "os"
 
 export const LSPCommand = cmd({

+ 2 - 2
packages/opencode/src/cli/cmd/debug/scrap.ts

@@ -1,6 +1,6 @@
 import { EOL } from "os"
-import { Project } from "../../../project"
-import { Log } from "../../../util"
+import { Project } from "@/project/project"
+import * as Log from "@opencode-ai/core/util/log"
 import { cmd } from "../cmd"
 
 export const ScrapCommand = cmd({

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

@@ -1,5 +1,5 @@
 import type { Argv } from "yargs"
-import { Session } from "../../session"
+import { Session } from "@/session/session"
 import { MessageV2 } from "../../session/message-v2"
 import { SessionID } from "../../session/schema"
 import { cmd } from "./cmd"

+ 6 - 6
packages/opencode/src/cli/cmd/github.ts

@@ -1,6 +1,6 @@
 import path from "path"
 import { exec } from "child_process"
-import { Filesystem } from "../../util"
+import { Filesystem } from "@/util/filesystem"
 import * as prompts from "@clack/prompts"
 import { map, pipe, sortBy, values } from "remeda"
 import { Octokit } from "@octokit/rest"
@@ -18,21 +18,21 @@ import type {
 } from "@octokit/webhooks-types"
 import { UI } from "../ui"
 import { cmd } from "./cmd"
-import { ModelsDev } from "../../provider"
+import { ModelsDev } from "@/provider/models"
 import { Instance } from "@/project/instance"
 import { bootstrap } from "../bootstrap"
-import { SessionShare } from "@/share"
-import { Session } from "../../session"
+import { SessionShare } from "@/share/session"
+import { Session } from "@/session/session"
 import type { SessionID } from "../../session/schema"
 import { MessageID, PartID } from "../../session/schema"
-import { Provider } from "../../provider"
+import { Provider } from "@/provider/provider"
 import { Bus } from "../../bus"
 import { MessageV2 } from "../../session/message-v2"
 import { SessionPrompt } from "@/session/prompt"
 import { AppRuntime } from "@/effect/app-runtime"
 import { Git } from "@/git"
 import { setTimeout as sleep } from "node:timers/promises"
-import { Process } from "@/util"
+import { Process } from "@/util/process"
 import { Effect } from "effect"
 
 type GitHubAuthor = {

+ 4 - 4
packages/opencode/src/cli/cmd/import.ts

@@ -1,15 +1,15 @@
 import type { Argv } from "yargs"
 import type { Session as SDKSession, Message, Part } from "@opencode-ai/sdk/v2"
-import { Session } from "../../session"
+import { Session } from "@/session/session"
 import { MessageV2 } from "../../session/message-v2"
 import { cmd } from "./cmd"
 import { bootstrap } from "../bootstrap"
-import { Database } from "../../storage"
+import { Database } from "@/storage/db"
 import { SessionTable, MessageTable, PartTable } from "../../session/session.sql"
 import { Instance } from "../../project/instance"
-import { ShareNext } from "../../share"
+import { ShareNext } from "@/share/share-next"
 import { EOL } from "os"
-import { Filesystem } from "../../util"
+import { Filesystem } from "@/util/filesystem"
 import { AppRuntime } from "@/effect/app-runtime"
 import { Schema } from "effect"
 

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

@@ -7,7 +7,7 @@ import { UI } from "../ui"
 import { MCP } from "../../mcp"
 import { McpAuth } from "../../mcp/auth"
 import { McpOAuthProvider } from "../../mcp/oauth-provider"
-import { Config } from "../../config"
+import { Config } from "@/config/config"
 import { ConfigMCP } from "../../config/mcp"
 import { Instance } from "../../project/instance"
 import { Installation } from "../../installation"
@@ -15,7 +15,7 @@ import { InstallationVersion } from "@opencode-ai/core/installation/version"
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
 import { modify, applyEdits } from "jsonc-parser"
-import { Filesystem } from "../../util"
+import { Filesystem } from "@/util/filesystem"
 import { Bus } from "../../bus"
 import { AppRuntime } from "../../effect/app-runtime"
 import { Effect } from "effect"

+ 2 - 2
packages/opencode/src/cli/cmd/models.ts

@@ -1,8 +1,8 @@
 import type { Argv } from "yargs"
 import { Instance } from "../../project/instance"
-import { Provider } from "../../provider"
+import { Provider } from "@/provider/provider"
 import { ProviderID } from "../../provider/schema"
-import { ModelsDev } from "../../provider"
+import { ModelsDev } from "@/provider/models"
 import { cmd } from "./cmd"
 import { UI } from "../ui"
 import { EOL } from "os"

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

@@ -1,14 +1,14 @@
 import { intro, log, outro, spinner } from "@clack/prompts"
 import type { Argv } from "yargs"
 
-import { ConfigPaths } from "../../config"
+import { ConfigPaths } from "@/config/paths"
 import { Global } from "@opencode-ai/core/global"
 import { installPlugin, patchPluginConfig, readPluginManifest } from "../../plugin/install"
 import { resolvePluginTarget } from "../../plugin/shared"
 import { Instance } from "../../project/instance"
 import { errorMessage } from "../../util/error"
-import { Filesystem } from "../../util"
-import { Process } from "../../util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 import { UI } from "../ui"
 import { cmd } from "./cmd"
 

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

@@ -3,7 +3,7 @@ import { cmd } from "./cmd"
 import { AppRuntime } from "@/effect/app-runtime"
 import { Git } from "@/git"
 import { Instance } from "@/project/instance"
-import { Process } from "@/util"
+import { Process } from "@/util/process"
 
 export const PrCommand = cmd({
   command: "pr <number>",

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

@@ -3,16 +3,16 @@ import { AppRuntime } from "../../effect/app-runtime"
 import { cmd } from "./cmd"
 import * as prompts from "@clack/prompts"
 import { UI } from "../ui"
-import { ModelsDev } from "../../provider"
+import { ModelsDev } from "@/provider/models"
 import { map, pipe, sortBy, values } from "remeda"
 import path from "path"
 import os from "os"
-import { Config } from "../../config"
+import { Config } from "@/config/config"
 import { Global } from "@opencode-ai/core/global"
 import { Plugin } from "../../plugin"
 import { Instance } from "../../project/instance"
 import type { Hooks } from "@opencode-ai/plugin"
-import { Process } from "../../util"
+import { Process } from "@/util/process"
 import { text } from "node:stream/consumers"
 import { Effect } from "effect"
 

+ 4 - 4
packages/opencode/src/cli/cmd/run.ts

@@ -6,13 +6,13 @@ import { cmd } from "./cmd"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { bootstrap } from "../bootstrap"
 import { EOL } from "os"
-import { Filesystem } from "../../util"
+import { Filesystem } from "@/util/filesystem"
 import { createOpencodeClient, type OpencodeClient, type ToolPart } from "@opencode-ai/sdk/v2"
 import { Server } from "../../server/server"
-import { Provider } from "../../provider"
+import { Provider } from "@/provider/provider"
 import { Agent } from "../../agent/agent"
 import { Permission } from "../../permission"
-import { Tool } from "../../tool"
+import { Tool } from "@/tool/tool"
 import { GlobTool } from "../../tool/glob"
 import { GrepTool } from "../../tool/grep"
 import { ReadTool } from "../../tool/read"
@@ -25,7 +25,7 @@ import { TaskTool } from "../../tool/task"
 import { SkillTool } from "../../tool/skill"
 import { BashTool } from "../../tool/bash"
 import { TodoWriteTool } from "../../tool/todo"
-import { Locale } from "../../util"
+import { Locale } from "@/util/locale"
 import { AppRuntime } from "@/effect/app-runtime"
 
 type ToolProps<T> = {

+ 4 - 4
packages/opencode/src/cli/cmd/session.ts

@@ -1,13 +1,13 @@
 import type { Argv } from "yargs"
 import { cmd } from "./cmd"
-import { Session } from "../../session"
+import { Session } from "@/session/session"
 import { SessionID } from "../../session/schema"
 import { bootstrap } from "../bootstrap"
 import { UI } from "../ui"
-import { Locale } from "../../util"
+import { Locale } from "@/util/locale"
 import { Flag } from "@opencode-ai/core/flag/flag"
-import { Filesystem } from "../../util"
-import { Process } from "../../util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 import { EOL } from "os"
 import path from "path"
 import { which } from "../../util/which"

+ 3 - 3
packages/opencode/src/cli/cmd/stats.ts

@@ -1,10 +1,10 @@
 import type { Argv } from "yargs"
 import { cmd } from "./cmd"
-import { Session } from "../../session"
+import { Session } from "@/session/session"
 import { bootstrap } from "../bootstrap"
-import { Database } from "../../storage"
+import { Database } from "@/storage/db"
 import { SessionTable } from "../../session/session.sql"
-import { Project } from "../../project"
+import { Project } from "@/project/project"
 import { Instance } from "../../project/instance"
 import { AppRuntime } from "@/effect/app-runtime"
 

+ 5 - 3
packages/opencode/src/cli/cmd/tui/app.tsx

@@ -50,16 +50,18 @@ import { DialogAlert } from "./ui/dialog-alert"
 import { DialogConfirm } from "./ui/dialog-confirm"
 import { ToastProvider, useToast } from "./ui/toast"
 import { ExitProvider, useExit } from "./context/exit"
-import { Session as SessionApi } from "@/session"
+import { Session as SessionApi } from "@/session/session"
 import { TuiEvent } from "./event"
 import { KVProvider, useKV } from "./context/kv"
-import { Provider } from "@/provider"
+import { Provider } from "@/provider/provider"
 import { ArgsProvider, useArgs, type Args } from "./context/args"
 import open from "open"
 import { PromptRefProvider, usePromptRef } from "./context/prompt"
 import { TuiConfigProvider, useTuiConfig } from "./context/tui-config"
 import { TuiConfig } from "@/cli/cmd/tui/config/tui"
-import { createTuiApi, TuiPluginRuntime, type RouteMap } from "./plugin"
+import { createTuiApi } from "@/cli/cmd/tui/plugin/api"
+import { TuiPluginRuntime } from "@/cli/cmd/tui/plugin/runtime"
+import type { RouteMap } from "@/cli/cmd/tui/plugin/api"
 import { FormatError, FormatUnknownError } from "@/cli/error"
 
 import type { EventSource } from "./context/sdk"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx

@@ -4,7 +4,7 @@ import { useSync } from "@tui/context/sync"
 import { map, pipe, entries, sortBy } from "remeda"
 import { DialogSelect, type DialogSelectRef, type DialogSelectOption } from "@tui/ui/dialog-select"
 import { useTheme } from "../context/theme"
-import { Keybind } from "@/util"
+import { Keybind } from "@/util/keybind"
 import { TextAttributes } from "@opentui/core"
 import { useSDK } from "@tui/context/sdk"
 

+ 2 - 2
packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx

@@ -3,14 +3,14 @@ import { DialogSelect } from "@tui/ui/dialog-select"
 import { useRoute } from "@tui/context/route"
 import { useSync } from "@tui/context/sync"
 import { createMemo, createResource, createSignal, onMount } from "solid-js"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { useProject } from "@tui/context/project"
 import { useKeybind } from "../context/keybind"
 import { useTheme } from "../context/theme"
 import { useSDK } from "../context/sdk"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { DialogSessionRename } from "./dialog-session-rename"
-import { Keybind } from "@/util"
+import { Keybind } from "@/util/keybind"
 import { createDebouncedSignal } from "../util/signal"
 import { useToast } from "../ui/toast"
 import { DialogWorkspaceCreate, openWorkspaceSession, restoreWorkspaceSession } from "./dialog-workspace-create"

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

@@ -1,7 +1,7 @@
 import { useDialog } from "@tui/ui/dialog"
 import { DialogSelect } from "@tui/ui/dialog-select"
 import { createMemo, createSignal } from "solid-js"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { useTheme } from "../context/theme"
 import { useKeybind } from "../context/keybind"
 import { usePromptStash, type StashEntry } from "./prompt/stash"

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

@@ -14,7 +14,7 @@ import { useTheme, selectedForeground } from "@tui/context/theme"
 import { SplitBorder } from "@tui/component/border"
 import { useCommandDialog } from "@tui/component/dialog-command"
 import { useTerminalDimensions } from "@opentui/solid"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import type { PromptInfo } from "./history"
 import { useFrecency } from "./frecency"
 

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

@@ -1,6 +1,6 @@
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { onMount } from "solid-js"
 import { createStore } from "solid-js/store"
 import { createSimpleContext } from "../../context/helper"

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

@@ -1,6 +1,6 @@
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { onMount } from "solid-js"
 import { createStore, produce, unwrap } from "solid-js/store"
 import { createSimpleContext } from "../../context/helper"

+ 2 - 2
packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx

@@ -3,7 +3,7 @@ import { createEffect, createMemo, onMount, createSignal, onCleanup, on, Show, S
 import "opentui-spinner/solid"
 import path from "path"
 import { fileURLToPath } from "url"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { useLocal } from "@tui/context/local"
 import { tint, useTheme } from "@tui/context/theme"
 import { EmptyBorder, SplitBorder } from "@tui/component/border"
@@ -29,7 +29,7 @@ import * as Clipboard from "../../util/clipboard"
 import type { AssistantMessage, FilePart, UserMessage } from "@opencode-ai/sdk/v2"
 import { TuiEvent } from "../../event"
 import { iife } from "@/util/iife"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { formatDuration } from "@/util/format"
 import { createColors, createFrames } from "../../ui/spinner.ts"
 import { useDialog } from "@tui/ui/dialog"

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

@@ -1,6 +1,6 @@
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { onMount } from "solid-js"
 import { createStore, produce, unwrap } from "solid-js/store"
 import { createSimpleContext } from "../../context/helper"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts

@@ -1,7 +1,7 @@
 import { createMemo } from "solid-js"
 import type { KeyBinding } from "@opentui/core"
 import { useKeybind } from "../context/keybind"
-import { Keybind } from "@/util"
+import { Keybind } from "@/util/keybind"
 
 const TEXTAREA_ACTIONS = [
   "submit",

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

@@ -5,7 +5,8 @@ import z from "zod"
 import { TuiInfo, TuiOptions } from "./tui-schema"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem, Log } from "@/util"
+import { Filesystem } from "@/util/filesystem"
+import * as Log from "@opencode-ai/core/util/log"
 import * as ConfigPaths from "@/config/paths"
 
 const log = Log.create({ service: "tui.migrate" })

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

@@ -16,7 +16,8 @@ import { ConfigPlugin } from "@/config/plugin"
 import { ConfigKeybinds } from "@/config/keybinds"
 import { InstallationLocal, InstallationVersion } from "@opencode-ai/core/installation/version"
 import { makeRuntime } from "@opencode-ai/core/effect/runtime"
-import { Filesystem, Log } from "@/util"
+import { Filesystem } from "@/util/filesystem"
+import * as Log from "@opencode-ai/core/util/log"
 import { ConfigVariable } from "@/config/variable"
 import { Npm } from "@opencode-ai/core/npm"
 

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

@@ -2,7 +2,7 @@ import { Database } from "bun:sqlite"
 import os from "node:os"
 import path from "node:path"
 import z from "zod"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import type { EditorSelection } from "./editor"
 
 const ZedEditorRowSchema = z.object({

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

@@ -1,5 +1,5 @@
 import { createMemo } from "solid-js"
-import { Keybind } from "@/util"
+import { Keybind } from "@/util/keybind"
 import { pipe, mapValues } from "remeda"
 import type { TuiConfig } from "@/cli/cmd/tui/config/tui"
 import type { ParsedKey, Renderable } from "@opentui/core"

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

@@ -1,5 +1,5 @@
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { Flock } from "@opencode-ai/core/util/flock"
 import { rename, rm } from "fs/promises"
 import { createSignal, type Setter } from "solid-js"

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

@@ -11,7 +11,7 @@ import { useToast } from "../ui/toast"
 import { useArgs } from "./args"
 import { useSDK } from "./sdk"
 import { RGBA } from "@opentui/core"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 
 export function parseModel(model: string) {
   const [providerID, ...rest] = model.split("/")

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

@@ -28,7 +28,7 @@ import type { Snapshot } from "@/snapshot"
 import { useExit } from "./exit"
 import { useArgs } from "./args"
 import { batch, onMount } from "solid-js"
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import { emptyConsoleState, type ConsoleState } from "@/config/console-state"
 
 export const { use: useSync, provider: SyncProvider } = createSimpleContext({

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

@@ -40,7 +40,7 @@ import { useKV } from "./kv"
 import { useRenderer } from "@opentui/solid"
 import { createStore, produce } from "solid-js/store"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { useTuiConfig } from "./tui-config"
 import { isRecord } from "@/util/record"
 import type { TuiThemeCurrent } from "@opencode-ai/plugin/tui"

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

@@ -1,4 +1,4 @@
-import { Keybind } from "@/util"
+import { Keybind } from "@/util/keybind"
 import type { TuiPlugin, TuiPluginApi, TuiPluginModule, TuiPluginStatus } from "@opencode-ai/plugin/tui"
 import { useKeyboard, useTerminalDimensions } from "@opentui/solid"
 import { fileURLToPath } from "url"

+ 0 - 3
packages/opencode/src/cli/cmd/tui/plugin/index.ts

@@ -1,3 +0,0 @@
-export { TuiPluginRuntime } from "./runtime"
-export { createTuiApi } from "./api"
-export type { RouteMap } from "./api"

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

@@ -13,7 +13,7 @@ import {
 import path from "path"
 import { fileURLToPath } from "url"
 import { TuiConfig } from "@/cli/cmd/tui/config/tui"
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import { errorData, errorMessage } from "@/util/error"
 import { isRecord } from "@/util/record"
 import { Instance } from "@/project/instance"
@@ -30,8 +30,8 @@ import { PluginMeta } from "@/plugin/meta"
 import { installPlugin as installModulePlugin, patchPluginConfig, readPluginManifest } from "@/plugin/install"
 import { hasTheme, upsertTheme } from "../context/theme"
 import { Global } from "@opencode-ai/core/global"
-import { Filesystem } from "@/util"
-import { Process } from "@/util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 import { Flock } from "@opencode-ai/core/util/flock"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { INTERNAL_TUI_PLUGINS, type InternalTuiPlugin } from "./internal"

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

@@ -8,7 +8,7 @@ import { useArgs } from "../context/args"
 import { useRouteData } from "@tui/context/route"
 import { usePromptRef } from "../context/prompt"
 import { useLocal } from "../context/local"
-import { TuiPluginRuntime } from "../plugin"
+import { TuiPluginRuntime } from "@/cli/cmd/tui/plugin/runtime"
 
 let once = false
 const placeholder = {

+ 1 - 1
packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx

@@ -2,7 +2,7 @@ import { createMemo, onMount } from "solid-js"
 import { useSync } from "@tui/context/sync"
 import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select"
 import type { TextPart } from "@opencode-ai/sdk/v2"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { useSDK } from "@tui/context/sdk"
 import { useRoute } from "@tui/context/route"
 import { useDialog, type DialogContext } from "../../ui/dialog"

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

@@ -2,7 +2,7 @@ import { createMemo, onMount } from "solid-js"
 import { useSync } from "@tui/context/sync"
 import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select"
 import type { TextPart } from "@opencode-ai/sdk/v2"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { DialogMessage } from "./dialog-message"
 import { useDialog } from "../../ui/dialog"
 import type { PromptInfo } from "../../component/prompt/history"

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

@@ -33,8 +33,8 @@ import type {
   ReasoningPart,
 } from "@opencode-ai/sdk/v2"
 import { useLocal } from "@tui/context/local"
-import { Locale } from "@/util"
-import type { Tool } from "@/tool"
+import { Locale } from "@/util/locale"
+import type { Tool } from "@/tool/tool"
 import type { ReadTool } from "@/tool/read"
 import type { WriteTool } from "@/tool/write"
 import { BashTool } from "@/tool/bash"
@@ -75,7 +75,7 @@ import * as Editor from "../../util/editor"
 import stripAnsi from "strip-ansi"
 import { usePromptRef } from "../../context/prompt"
 import { useExit } from "../../context/exit"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { Global } from "@opencode-ai/core/global"
 import { PermissionPrompt } from "./permission"
 import { QuestionPrompt } from "./question"
@@ -85,7 +85,7 @@ import { formatTranscript } from "../../util/transcript"
 import { UI } from "@/cli/ui.ts"
 import { useTuiConfig } from "../../context/tui-config"
 import { getScrollAcceleration } from "../../util/scroll"
-import { TuiPluginRuntime } from "../../plugin"
+import { TuiPluginRuntime } from "@/cli/cmd/tui/plugin/runtime"
 import { DialogGoUpsell } from "../../component/dialog-go-upsell"
 import { SessionRetry } from "@/session/retry"
 import { getRevertDiffFiles } from "../../util/revert-diff"

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

@@ -12,8 +12,8 @@ import { useTextareaKeybindings } from "../../component/textarea-keybindings"
 import { useProject } from "../../context/project"
 import path from "path"
 import { LANGUAGE_EXTENSIONS } from "@/lsp/language"
-import { Keybind } from "@/util"
-import { Locale } from "@/util"
+import { Keybind } from "@/util/keybind"
+import { Locale } from "@/util/locale"
 import { Global } from "@opencode-ai/core/global"
 import { useDialog } from "../../ui/dialog"
 import { getScrollAcceleration } from "../../util/scroll"

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

@@ -4,7 +4,7 @@ import { createMemo, Show } from "solid-js"
 import { useTheme } from "../../context/theme"
 import { useTuiConfig } from "../../context/tui-config"
 import { InstallationChannel, InstallationVersion } from "@opencode-ai/core/installation/version"
-import { TuiPluginRuntime } from "../../plugin"
+import { TuiPluginRuntime } from "@/cli/cmd/tui/plugin/runtime"
 
 import { getScrollAcceleration } from "../../util/scroll"
 

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

@@ -6,7 +6,7 @@ import { SplitBorder } from "@tui/component/border"
 import type { AssistantMessage } from "@opencode-ai/sdk/v2"
 import { useCommandDialog } from "@tui/component/dialog-command"
 import { useKeybind } from "../../context/keybind"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import { useTerminalDimensions } from "@opentui/solid"
 
 export function SubagentFooter() {

+ 3 - 3
packages/opencode/src/cli/cmd/tui/thread.ts

@@ -1,15 +1,15 @@
 import { cmd } from "@/cli/cmd/cmd"
 import { tui } from "./app"
-import { Rpc } from "@/util"
+import { Rpc } from "@/util/rpc"
 import { type rpc } from "./worker"
 import path from "path"
 import { fileURLToPath } from "url"
 import { UI } from "@/cli/ui"
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import { errorMessage } from "@/util/error"
 import { withTimeout } from "@/util/timeout"
 import { withNetworkOptions, resolveNetworkOptionsNoConfig } from "@/cli/network"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import type { GlobalEvent } from "@opencode-ai/sdk/v2"
 import type { EventSource } from "./context/sdk"
 import { win32DisableProcessedInput, win32InstallCtrlCGuard } from "./win32"

+ 1 - 1
packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx

@@ -4,7 +4,7 @@ import { useDialog, type DialogContext } from "./dialog"
 import { createStore } from "solid-js/store"
 import { For } from "solid-js"
 import { useKeyboard } from "@opentui/solid"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 
 export type DialogConfirmProps = {
   title: string

+ 2 - 2
packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx

@@ -8,8 +8,8 @@ import * as fuzzysort from "fuzzysort"
 import { isDeepEqual } from "remeda"
 import { useDialog, type DialogContext } from "@tui/ui/dialog"
 import { useKeybind } from "@tui/context/keybind"
-import { Keybind } from "@/util"
-import { Locale } from "@/util"
+import { Keybind } from "@/util/keybind"
+import { Locale } from "@/util/locale"
 import { getScrollAcceleration } from "../util/scroll"
 import { useTuiConfig } from "../context/tui-config"
 

+ 2 - 0
packages/opencode/src/cli/cmd/tui/util/clipboard.ts

@@ -201,3 +201,5 @@ export async function copy(text: string): Promise<void> {
   const method = await getCopyMethod()
   await method(text)
 }
+
+export * as Clipboard from "./clipboard"

+ 4 - 2
packages/opencode/src/cli/cmd/tui/util/editor.ts

@@ -3,8 +3,8 @@ import { rm } from "node:fs/promises"
 import { tmpdir } from "node:os"
 import { join } from "node:path"
 import { CliRenderer } from "@opentui/core"
-import { Filesystem } from "@/util"
-import { Process } from "@/util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 
 export async function open(opts: { value: string; renderer: CliRenderer }): Promise<string | undefined> {
   const editor = process.env["VISUAL"] || process.env["EDITOR"]
@@ -33,3 +33,5 @@ export async function open(opts: { value: string; renderer: CliRenderer }): Prom
     opts.renderer.requestRender()
   }
 }
+
+export * as Editor from "./editor"

+ 0 - 4
packages/opencode/src/cli/cmd/tui/util/index.ts

@@ -1,4 +0,0 @@
-export * as Editor from "./editor"
-export * as Selection from "./selection"
-export * as Sound from "./sound"
-export * as Clipboard from "./clipboard"

+ 2 - 0
packages/opencode/src/cli/cmd/tui/util/selection.ts

@@ -21,3 +21,5 @@ export function copy(renderer: Renderer, toast: Toast): boolean {
   renderer.clearSelection()
   return true
 }
+
+export * as Selection from "./selection"

+ 3 - 1
packages/opencode/src/cli/cmd/tui/util/sound.ts

@@ -2,7 +2,7 @@ import { Player } from "cli-sound"
 import { mkdirSync } from "node:fs"
 import { tmpdir } from "node:os"
 import { basename, join } from "node:path"
-import { Process } from "@/util"
+import { Process } from "@/util/process"
 import { which } from "@/util/which"
 import pulseA from "../asset/pulse-a.wav" with { type: "file" }
 import pulseB from "../asset/pulse-b.wav" with { type: "file" }
@@ -152,3 +152,5 @@ export function pulse(scale = 1) {
 export function dispose() {
   stop()
 }
+
+export * as Sound from "./sound"

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

@@ -1,5 +1,5 @@
 import type { AssistantMessage, Part, Provider, UserMessage } from "@opencode-ai/sdk/v2"
-import { Locale } from "@/util"
+import { Locale } from "@/util/locale"
 import * as Model from "./model"
 
 export type TranscriptOptions = {

+ 3 - 3
packages/opencode/src/cli/cmd/tui/worker.ts

@@ -1,11 +1,11 @@
 import { Installation } from "@/installation"
 import { Server } from "@/server/server"
-import { Log } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
 import { Instance } from "@/project/instance"
 import { InstanceBootstrap } from "@/project/bootstrap"
-import { Rpc } from "@/util"
+import { Rpc } from "@/util/rpc"
 import { upgrade } from "@/cli/upgrade"
-import { Config } from "@/config"
+import { Config } from "@/config/config"
 import { GlobalBus } from "@/bus/global"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { writeHeapSnapshot } from "node:v8"

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

@@ -6,8 +6,8 @@ import { Global } from "@opencode-ai/core/global"
 import fs from "fs/promises"
 import path from "path"
 import os from "os"
-import { Filesystem } from "../../util"
-import { Process } from "../../util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 
 interface UninstallArgs {
   keepConfig: boolean

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

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

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

@@ -1,5 +1,5 @@
 import type { Argv, InferredOptionTypes } from "yargs"
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import { AppRuntime } from "@/effect/app-runtime"
 
 const options = {

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

@@ -1,5 +1,5 @@
 import { Bus } from "@/bus"
-import { Config } from "@/config"
+import { Config } from "@/config/config"
 import { AppRuntime } from "@/effect/app-runtime"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { Installation } from "@/installation"

+ 3 - 3
packages/opencode/src/command/index.ts

@@ -1,13 +1,13 @@
 import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect"
-import { EffectBridge } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
+import { EffectBridge } from "@/effect/bridge"
 import type { InstanceContext } from "@/project/instance"
 import { SessionID, MessageID } from "@/session/schema"
 import { Effect, Layer, Context, Schema } from "effect"
 import z from "zod"
 import { zod, ZodOverride } from "@/util/effect-zod"
 import { withStatics } from "@/util/schema"
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import { MCP } from "../mcp"
 import { Skill } from "../skill"
 import PROMPT_INITIALIZE from "./template/initialize.txt"

+ 3 - 3
packages/opencode/src/config/agent.ts

@@ -4,7 +4,7 @@ import { Exit, Schema, SchemaGetter } from "effect"
 import { Bus } from "@/bus"
 import { zod } from "@/util/effect-zod"
 import { PositiveInt, withStatics } from "@/util/schema"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { NamedError } from "@opencode-ai/core/util/error"
 import { Glob } from "@opencode-ai/core/util/glob"
 import { configEntryNameFromPath } from "./entry-name"
@@ -119,7 +119,7 @@ export async function load(dir: string) {
       const message = ConfigMarkdown.FrontmatterError.isInstance(err)
         ? err.data.message
         : `Failed to parse agent ${item}`
-      const { Session } = await import("@/session")
+      const { Session } = await import("@/session/session")
       void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
       log.error("failed to load agent", { agent: item, err })
       return undefined
@@ -151,7 +151,7 @@ export async function loadMode(dir: string) {
       const message = ConfigMarkdown.FrontmatterError.isInstance(err)
         ? err.data.message
         : `Failed to parse mode ${item}`
-      const { Session } = await import("@/session")
+      const { Session } = await import("@/session/session")
       void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
       log.error("failed to load mode", { mode: item, err })
       return undefined

+ 2 - 2
packages/opencode/src/config/command.ts

@@ -1,6 +1,6 @@
 export * as ConfigCommand from "./command"
 
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { Schema } from "effect"
 import { NamedError } from "@opencode-ai/core/util/error"
 import { Glob } from "@opencode-ai/core/util/glob"
@@ -36,7 +36,7 @@ export async function load(dir: string) {
       const message = ConfigMarkdown.FrontmatterError.isInstance(err)
         ? err.data.message
         : `Failed to parse command ${item}`
-      const { Session } = await import("@/session")
+      const { Session } = await import("@/session/session")
       void Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
       log.error("failed to load command", { command: item, err })
       return undefined

+ 4 - 2
packages/opencode/src/config/config.ts

@@ -1,4 +1,4 @@
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import path from "path"
 import { pathToFileURL } from "url"
 import os from "os"
@@ -20,7 +20,7 @@ import { Account } from "@/account/account"
 import { isRecord } from "@/util/record"
 import type { ConsoleState } from "./console-state"
 import { AppFileSystem } from "@opencode-ai/core/filesystem"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import { Context, Duration, Effect, Exit, Fiber, Layer, Option, Schema } from "effect"
 import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
 import { InstanceRef } from "@/effect/instance-ref"
@@ -795,3 +795,5 @@ export const defaultLayer = layer.pipe(
   Layer.provide(Account.defaultLayer),
   Layer.provide(Npm.defaultLayer),
 )
+
+export * as Config from "./config"

+ 0 - 16
packages/opencode/src/config/index.ts

@@ -1,16 +0,0 @@
-export * as Config from "./config"
-export * as ConfigAgent from "./agent"
-export * as ConfigCommand from "./command"
-export * as ConfigError from "./error"
-export * as ConfigFormatter from "./formatter"
-export * as ConfigLSP from "./lsp"
-export * as ConfigVariable from "./variable"
-export { ConfigManaged } from "./managed"
-export * as ConfigMarkdown from "./markdown"
-export * as ConfigMCP from "./mcp"
-export { ConfigModelID } from "./model-id"
-export * as ConfigParse from "./parse"
-export * as ConfigPermission from "./permission"
-export * as ConfigPaths from "./paths"
-export * as ConfigProvider from "./provider"
-export * as ConfigSkills from "./skills"

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

@@ -3,7 +3,8 @@ export * as ConfigManaged from "./managed"
 import { existsSync } from "fs"
 import os from "os"
 import path from "path"
-import { Log, Process } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
+import { Process } from "@/util/process"
 import { warn } from "console"
 
 const log = Log.create({ service: "config" })

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

@@ -1,7 +1,7 @@
 import { NamedError } from "@opencode-ai/core/util/error"
 import matter from "gray-matter"
 import { z } from "zod"
-import { Filesystem } from "../util"
+import { Filesystem } from "@/util/filesystem"
 
 export const FILE_REGEX = /(?<![\w`])@(\.?[^\s`,.]*(?:\.[^\s`,.]+)*)/g
 export const SHELL_REGEX = /!`([^`]+)`/g
@@ -95,3 +95,5 @@ export const FrontmatterError = NamedError.create(
     message: z.string(),
   }),
 )
+
+export * as ConfigMarkdown from "./markdown"

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

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

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

@@ -2,7 +2,7 @@ export * as ConfigVariable from "./variable"
 
 import path from "path"
 import os from "os"
-import { Filesystem } from "@/util"
+import { Filesystem } from "@/util/filesystem"
 import { InvalidError } from "./error"
 
 type ParseSource =

+ 1 - 1
packages/opencode/src/control-plane/workspace-context.ts

@@ -1,4 +1,4 @@
-import { LocalContext } from "../util"
+import { LocalContext } from "@/util/local-context"
 import type { WorkspaceID } from "../control-plane/schema"
 
 export interface WorkspaceContext {

+ 8 - 5
packages/opencode/src/control-plane/workspace.ts

@@ -1,16 +1,19 @@
 import { Schema } from "effect"
 import { setTimeout as sleep } from "node:timers/promises"
 import { fn } from "@/util/fn"
-import { Database, asc, eq, inArray } from "@/storage"
-import { Project } from "@/project"
+import { Database } from "@/storage/db"
+import { asc } from "drizzle-orm"
+import { eq } from "drizzle-orm"
+import { inArray } from "drizzle-orm"
+import { Project } from "@/project/project"
 import { BusEvent } from "@/bus/bus-event"
 import { GlobalBus } from "@/bus/global"
 import { Auth } from "@/auth"
 import { SyncEvent } from "@/sync"
 import { EventSequenceTable, EventTable } from "@/sync/event.sql"
 import { Flag } from "@opencode-ai/core/flag/flag"
-import { Log } from "@/util"
-import { Filesystem } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
+import { Filesystem } from "@/util/filesystem"
 import { ProjectID } from "@/project/schema"
 import { Slug } from "@opencode-ai/core/util/slug"
 import { WorkspaceTable } from "./workspace.sql"
@@ -18,7 +21,7 @@ import { getAdaptor } from "./adaptors"
 import { type WorkspaceInfo, WorkspaceInfo as WorkspaceInfoSchema } from "./types"
 import { WorkspaceID } from "./schema"
 import { parseSSE } from "./sse"
-import { Session } from "@/session"
+import { Session } from "@/session/session"
 import { SessionTable } from "@/session/session.sql"
 import { SessionID } from "@/session/schema"
 import { errorData } from "@/util/error"

+ 12 - 12
packages/opencode/src/effect/app-runtime.ts

@@ -6,23 +6,23 @@ import { AppFileSystem } from "@opencode-ai/core/filesystem"
 import { Bus } from "@/bus"
 import { Auth } from "@/auth"
 import { Account } from "@/account/account"
-import { Config } from "@/config"
+import { Config } from "@/config/config"
 import { Git } from "@/git"
 import { Ripgrep } from "@/file/ripgrep"
 import { File } from "@/file"
 import { FileWatcher } from "@/file/watcher"
-import { Storage } from "@/storage"
+import { Storage } from "@/storage/storage"
 import { Snapshot } from "@/snapshot"
 import { Plugin } from "@/plugin"
-import { Provider } from "@/provider"
-import { ProviderAuth } from "@/provider"
+import { Provider } from "@/provider/provider"
+import { ProviderAuth } from "@/provider/auth"
 import { Agent } from "@/agent/agent"
 import { Skill } from "@/skill"
 import { Discovery } from "@/skill/discovery"
 import { Question } from "@/question"
 import { Permission } from "@/permission"
 import { Todo } from "@/session/todo"
-import { Session } from "@/session"
+import { Session } from "@/session/session"
 import { SessionStatus } from "@/session/status"
 import { SessionRunState } from "@/session/run-state"
 import { SessionProcessor } from "@/session/processor"
@@ -32,20 +32,20 @@ import { SessionSummary } from "@/session/summary"
 import { SessionPrompt } from "@/session/prompt"
 import { Instruction } from "@/session/instruction"
 import { LLM } from "@/session/llm"
-import { LSP } from "@/lsp"
+import { LSP } from "@/lsp/lsp"
 import { MCP } from "@/mcp"
 import { McpAuth } from "@/mcp/auth"
 import { Command } from "@/command"
-import { Truncate } from "@/tool"
-import { ToolRegistry } from "@/tool"
+import { Truncate } from "@/tool/truncate"
+import { ToolRegistry } from "@/tool/registry"
 import { Format } from "@/format"
-import { Project } from "@/project"
-import { Vcs } from "@/project"
+import { Project } from "@/project/project"
+import { Vcs } from "@/project/vcs"
 import { Worktree } from "@/worktree"
 import { Pty } from "@/pty"
 import { Installation } from "@/installation"
-import { ShareNext } from "@/share"
-import { SessionShare } from "@/share"
+import { ShareNext } from "@/share/share-next"
+import { SessionShare } from "@/share/session"
 import { Npm } from "@opencode-ai/core/npm"
 import { memoMap } from "@opencode-ai/core/effect/memo-map"
 

+ 4 - 4
packages/opencode/src/effect/bootstrap-runtime.ts

@@ -1,15 +1,15 @@
 import { Layer, ManagedRuntime } from "effect"
 
 import { Plugin } from "@/plugin"
-import { LSP } from "@/lsp"
+import { LSP } from "@/lsp/lsp"
 import { FileWatcher } from "@/file/watcher"
 import { Format } from "@/format"
-import { ShareNext } from "@/share"
+import { ShareNext } from "@/share/share-next"
 import { File } from "@/file"
-import { Vcs } from "@/project"
+import { Vcs } from "@/project/vcs"
 import { Snapshot } from "@/snapshot"
 import { Bus } from "@/bus"
-import { Config } from "@/config"
+import { Config } from "@/config/config"
 import * as Observability from "@opencode-ai/core/effect/observability"
 import { memoMap } from "@opencode-ai/core/effect/memo-map"
 

+ 3 - 1
packages/opencode/src/effect/bridge.ts

@@ -2,7 +2,7 @@ import { Effect, Fiber } from "effect"
 import { WorkspaceContext } from "@/control-plane/workspace-context"
 import { Instance, type InstanceContext } from "@/project/instance"
 import type { WorkspaceID } from "@/control-plane/schema"
-import { LocalContext } from "@/util"
+import { LocalContext } from "@/util/local-context"
 import { InstanceRef, WorkspaceRef } from "./instance-ref"
 import { attachWith } from "./run-service"
 
@@ -46,3 +46,5 @@ export function make(): Effect.Effect<Shape> {
     } satisfies Shape
   })
 }
+
+export * as EffectBridge from "./bridge"

+ 0 - 5
packages/opencode/src/effect/index.ts

@@ -1,5 +0,0 @@
-export * as InstanceState from "./instance-state"
-export * as EffectBridge from "./bridge"
-export * as Runner from "./runner"
-export * as Observability from "@opencode-ai/core/effect/observability"
-export * as EffectLogger from "@opencode-ai/core/effect/logger"

+ 3 - 1
packages/opencode/src/effect/instance-state.ts

@@ -1,7 +1,7 @@
 import { Effect, Fiber, ScopedCache, Scope, Context } from "effect"
 import * as EffectLogger from "@opencode-ai/core/effect/logger"
 import { Instance, type InstanceContext } from "@/project/instance"
-import { LocalContext } from "@/util"
+import { LocalContext } from "@/util/local-context"
 import { InstanceRef, WorkspaceRef } from "./instance-ref"
 import { registerDisposer } from "./instance-registry"
 import { WorkspaceContext } from "@/control-plane/workspace-context"
@@ -79,3 +79,5 @@ export const invalidate = <A, E, R>(self: InstanceState<A, E, R>) =>
   Effect.gen(function* () {
     return yield* ScopedCache.invalidate(self.cache, yield* directory)
   })
+
+export * as InstanceState from "./instance-state"

+ 1 - 1
packages/opencode/src/effect/run-service.ts

@@ -1,7 +1,7 @@
 import { Effect, Layer, ManagedRuntime } from "effect"
 import * as Context from "effect/Context"
 import { Instance } from "@/project/instance"
-import { LocalContext } from "@/util"
+import { LocalContext } from "@/util/local-context"
 import { InstanceRef, WorkspaceRef } from "./instance-ref"
 import * as Observability from "@opencode-ai/core/effect/observability"
 import { WorkspaceContext } from "@/control-plane/workspace-context"

+ 2 - 0
packages/opencode/src/effect/runner.ts

@@ -204,3 +204,5 @@ export const make = <A, E = never>(
     cancel,
   }
 }
+
+export * as Runner from "./runner"

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

@@ -1,5 +1,5 @@
 import { Context, Effect, Layer } from "effect"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 
 type State = Record<string, string | undefined>
 

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

@@ -1,5 +1,5 @@
 import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 
 import { AppFileSystem } from "@opencode-ai/core/filesystem"
 import { Git } from "@/git"
@@ -11,7 +11,7 @@ import ignore from "ignore"
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
 import { Instance } from "../project/instance"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { Protected } from "./protected"
 import { Ripgrep } from "./ripgrep"
 import { zod } from "@/util/effect-zod"

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

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

+ 3 - 3
packages/opencode/src/file/watcher.ts

@@ -7,15 +7,15 @@ import path from "path"
 import z from "zod"
 import { Bus } from "@/bus"
 import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import { Flag } from "@opencode-ai/core/flag/flag"
 import { Git } from "@/git"
 import { Instance } from "@/project/instance"
 import { lazy } from "@/util/lazy"
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import { FileIgnore } from "./ignore"
 import { Protected } from "./protected"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 
 declare const OPENCODE_LIBC: string | undefined
 

+ 2 - 2
packages/opencode/src/format/formatter.ts

@@ -1,7 +1,7 @@
 import { Npm } from "@opencode-ai/core/npm"
 import type { InstanceContext } from "../project/instance"
-import { Filesystem } from "../util"
-import { Process } from "../util"
+import { Filesystem } from "@/util/filesystem"
+import { Process } from "@/util/process"
 import { which } from "../util/which"
 import { Flag } from "@opencode-ai/core/flag/flag"
 

+ 3 - 3
packages/opencode/src/format/index.ts

@@ -1,11 +1,11 @@
 import { Effect, Layer, Context, Schema } from "effect"
 import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
 import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import path from "path"
 import { mergeDeep } from "remeda"
-import { Config } from "../config"
-import { Log } from "../util"
+import { Config } from "@/config/config"
+import * as Log from "@opencode-ai/core/util/log"
 import * as Formatter from "./formatter"
 import { zod } from "@/util/effect-zod"
 import { withStatics } from "@/util/schema"

+ 2 - 2
packages/opencode/src/ide/index.ts

@@ -2,8 +2,8 @@ import { BusEvent } from "@/bus/bus-event"
 import z from "zod"
 import { Schema } from "effect"
 import { NamedError } from "@opencode-ai/core/util/error"
-import { Log } from "../util"
-import { Process } from "@/util"
+import * as Log from "@opencode-ai/core/util/log"
+import { Process } from "@/util/process"
 
 const SUPPORTED_IDES = [
   { name: "Windsurf" as const, cmd: "windsurf" },

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

@@ -2,7 +2,7 @@ import yargs from "yargs"
 import { hideBin } from "yargs/helpers"
 import { RunCommand } from "./cli/cmd/run"
 import { GenerateCommand } from "./cli/cmd/generate"
-import { Log } from "./util"
+import * as Log from "@opencode-ai/core/util/log"
 import { ConsoleCommand } from "./cli/cmd/account"
 import { ProvidersCommand } from "./cli/cmd/providers"
 import { AgentCommand } from "./cli/cmd/agent"
@@ -15,7 +15,7 @@ import { InstallationVersion } from "@opencode-ai/core/installation/version"
 import { NamedError } from "@opencode-ai/core/util/error"
 import { FormatError } from "./cli/error"
 import { ServeCommand } from "./cli/cmd/serve"
-import { Filesystem } from "./util"
+import { Filesystem } from "@/util/filesystem"
 import { DebugCommand } from "./cli/cmd/debug"
 import { StatsCommand } from "./cli/cmd/stats"
 import { McpCommand } from "./cli/cmd/mcp"
@@ -32,8 +32,8 @@ import { SessionCommand } from "./cli/cmd/session"
 import { DbCommand } from "./cli/cmd/db"
 import path from "path"
 import { Global } from "@opencode-ai/core/global"
-import { JsonMigration } from "./storage"
-import { Database } from "./storage"
+import { JsonMigration } from "@/storage/json-migration"
+import { Database } from "@/storage/db"
 import { errorMessage } from "./util/error"
 import { PluginCommand } from "./cli/cmd/plug"
 import { Heap } from "./cli/heap"

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

@@ -7,7 +7,7 @@ import path from "path"
 import z from "zod"
 import { BusEvent } from "@/bus/bus-event"
 import { Flag } from "@opencode-ai/core/flag/flag"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { makeRuntime } from "@opencode-ai/core/effect/runtime"
 import semver from "semver"
 import { InstallationChannel, InstallationVersion } from "@opencode-ai/core/installation/version"

+ 5 - 3
packages/opencode/src/lsp/client.ts

@@ -4,15 +4,15 @@ import path from "path"
 import { pathToFileURL, fileURLToPath } from "url"
 import { createMessageConnection, StreamMessageReader, StreamMessageWriter } from "vscode-jsonrpc/node"
 import type { Diagnostic as VSCodeDiagnostic } from "vscode-languageserver-types"
-import { Log } from "../util"
-import { Process } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
+import { Process } from "@/util/process"
 import { LANGUAGE_EXTENSIONS } from "./language"
 import z from "zod"
 import { Schema } from "effect"
 import type * as LSPServer from "./server"
 import { NamedError } from "@opencode-ai/core/util/error"
 import { withTimeout } from "../util/timeout"
-import { Filesystem } from "../util"
+import { Filesystem } from "@/util/filesystem"
 
 const DIAGNOSTICS_DEBOUNCE_MS = 150
 const DIAGNOSTICS_DOCUMENT_WAIT_TIMEOUT_MS = 5_000
@@ -693,3 +693,5 @@ export async function create(input: { serverID: string; server: LSPServer.Handle
 
   return result
 }
+
+export * as LSPClient from "./client"

+ 0 - 3
packages/opencode/src/lsp/index.ts

@@ -1,3 +0,0 @@
-export * as LSP from "./lsp"
-export * as LSPClient from "./client"
-export * as LSPServer from "./server"

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

@@ -1,5 +1,5 @@
 import type { ChildProcessWithoutNullStreams } from "child_process"
-import { Process } from "../util"
+import { Process } from "@/util/process"
 
 type Child = Process.Child & ChildProcessWithoutNullStreams
 

+ 6 - 4
packages/opencode/src/lsp/lsp.ts

@@ -1,17 +1,17 @@
 import { BusEvent } from "@/bus/bus-event"
 import { Bus } from "@/bus"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import * as LSPClient from "./client"
 import path from "path"
 import { pathToFileURL, fileURLToPath } from "url"
 import * as LSPServer from "./server"
 import z from "zod"
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import { Flag } from "@opencode-ai/core/flag/flag"
-import { Process } from "../util"
+import { Process } from "@/util/process"
 import { spawn as lspspawn } from "./launch"
 import { Effect, Layer, Context, Schema } from "effect"
-import { InstanceState } from "@/effect"
+import { InstanceState } from "@/effect/instance-state"
 import { AppFileSystem } from "@opencode-ai/core/filesystem"
 import { withStatics } from "@/util/schema"
 import { zod, ZodOverride } from "@/util/effect-zod"
@@ -518,3 +518,5 @@ export const layer = Layer.effect(
 export const defaultLayer = layer.pipe(Layer.provide(Config.defaultLayer))
 
 export * as Diagnostic from "./diagnostic"
+
+export * as LSP from "./lsp"

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

@@ -2,14 +2,14 @@ import type { ChildProcessWithoutNullStreams } from "child_process"
 import path from "path"
 import os from "os"
 import { Global } from "@opencode-ai/core/global"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { text } from "node:stream/consumers"
 import fs from "fs/promises"
-import { Filesystem } from "../util"
+import { Filesystem } from "@/util/filesystem"
 import type { InstanceContext } from "../project/instance"
 import { Flag } from "@opencode-ai/core/flag/flag"
-import { Archive } from "../util"
-import { Process } from "../util"
+import { Archive } from "@/util/archive"
+import { Process } from "@/util/process"
 import { which } from "../util/which"
 import { Module } from "@opencode-ai/core/util/module"
 import { spawn } from "./launch"

+ 4 - 4
packages/opencode/src/mcp/index.ts

@@ -9,9 +9,9 @@ import {
   type Tool as MCPToolDef,
   ToolListChangedNotificationSchema,
 } from "@modelcontextprotocol/sdk/types.js"
-import { Config } from "../config"
+import { Config } from "@/config/config"
 import { ConfigMCP } from "../config/mcp"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { NamedError } from "@opencode-ai/core/util/error"
 import z from "zod/v4"
 import { Installation } from "../installation"
@@ -26,8 +26,8 @@ import { Bus } from "@/bus"
 import { TuiEvent } from "@/cli/cmd/tui/event"
 import open from "open"
 import { Effect, Exit, Layer, Option, Context, Schema, Stream } from "effect"
-import { EffectBridge } from "@/effect"
-import { InstanceState } from "@/effect"
+import { EffectBridge } from "@/effect/bridge"
+import { InstanceState } from "@/effect/instance-state"
 import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
 import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
 import { zod as effectZod } from "@/util/effect-zod"

+ 1 - 1
packages/opencode/src/mcp/oauth-callback.ts

@@ -1,6 +1,6 @@
 import { createConnection } from "net"
 import { createServer } from "http"
-import { Log } from "../util"
+import * as Log from "@opencode-ai/core/util/log"
 import { OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_PATH, parseRedirectUri } from "./oauth-provider"
 
 const log = Log.create({ service: "mcp.oauth-callback" })

Некоторые файлы не были показаны из-за большого количества измененных файлов