From 214a6c6cf13038ae2a6e5a89a3d59fbf23e5be5a Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 20 Mar 2026 16:55:46 -0400 Subject: [PATCH] fix: switch consumers to service imports to break bundle cycles (#18438) --- packages/opencode/src/agent/agent.ts | 2 +- packages/opencode/src/cli/cmd/tui/context/sync.tsx | 2 +- packages/opencode/src/server/routes/session.ts | 2 +- packages/opencode/src/session/index.ts | 4 ++-- packages/opencode/src/session/llm.ts | 2 +- packages/opencode/src/session/message-v2.ts | 2 +- packages/opencode/src/session/processor.ts | 2 +- packages/opencode/src/session/session.sql.ts | 4 ++-- packages/opencode/src/session/system.ts | 2 +- packages/opencode/src/tool/apply_patch.ts | 2 +- packages/opencode/src/tool/edit.ts | 4 ++-- packages/opencode/src/tool/question.ts | 5 +++-- packages/opencode/src/tool/task.ts | 2 +- packages/opencode/src/tool/tool.ts | 2 +- packages/opencode/src/tool/write.ts | 2 +- 15 files changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index fd07ebc85..5a629c73e 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -14,7 +14,7 @@ import PROMPT_COMPACTION from "./prompt/compaction.txt" import PROMPT_EXPLORE from "./prompt/explore.txt" import PROMPT_SUMMARY from "./prompt/summary.txt" import PROMPT_TITLE from "./prompt/title.txt" -import { PermissionNext } from "@/permission" +import { Permission as PermissionNext } from "@/permission/service" import { mergeDeep, pipe, sortBy, values } from "remeda" import { Global } from "@/global" import path from "path" diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 3b296a927..d06987734 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -22,7 +22,7 @@ import { createStore, produce, reconcile } from "solid-js/store" import { useSDK } from "@tui/context/sdk" import { Binary } from "@opencode-ai/util/binary" import { createSimpleContext } from "./helper" -import type { Snapshot } from "@/snapshot" +import type { Snapshot } from "@/snapshot/service" import { useExit } from "./exit" import { useArgs } from "./args" import { batch, onMount } from "solid-js" diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index 613c8b05c..564bb496b 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -12,7 +12,7 @@ import { SessionStatus } from "@/session/status" import { SessionSummary } from "@/session/summary" import { Todo } from "../../session/todo" import { Agent } from "../../agent/agent" -import { Snapshot } from "@/snapshot" +import { Snapshot } from "@/snapshot/service" import { Log } from "../../util/log" import { PermissionNext } from "@/permission" import { PermissionID } from "@/permission/schema" diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 01fd214e0..bbb7c97fd 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -20,7 +20,7 @@ import { Instance } from "../project/instance" import { SessionPrompt } from "./prompt" import { fn } from "@/util/fn" import { Command } from "../command" -import { Snapshot } from "@/snapshot" +import { Snapshot } from "@/snapshot/service" import { WorkspaceContext } from "../control-plane/workspace-context" import { ProjectID } from "../project/schema" import { WorkspaceID } from "../control-plane/schema" @@ -28,7 +28,7 @@ import { SessionID, MessageID, PartID } from "./schema" import type { Provider } from "@/provider/provider" import { ModelID, ProviderID } from "@/provider/schema" -import { PermissionNext } from "@/permission" +import { Permission as PermissionNext } from "@/permission/service" import { Global } from "@/global" import type { LanguageModelV2Usage } from "@ai-sdk/provider" import { iife } from "@/util/iife" diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 748fd3eb2..b28a595e1 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -21,7 +21,7 @@ import type { MessageV2 } from "./message-v2" import { Plugin } from "@/plugin" import { SystemPrompt } from "./system" import { Flag } from "@/flag/flag" -import { PermissionNext } from "@/permission" +import { Permission as PermissionNext } from "@/permission/service" import { Auth } from "@/auth" export namespace LLM { diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index f1335f6f2..3e1816e68 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -4,7 +4,7 @@ import z from "zod" import { NamedError } from "@opencode-ai/util/error" import { APICallError, convertToModelMessages, LoadAPIKeyError, type ModelMessage, type UIMessage } from "ai" import { LSP } from "../lsp" -import { Snapshot } from "@/snapshot" +import { Snapshot } from "@/snapshot/service" import { fn } from "@/util/fn" import { Database, NotFoundError, and, desc, eq, inArray, lt, or } from "@/storage/db" import { MessageTable, PartTable, SessionTable } from "./session.sql" diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 8200dea75..2fe3310ca 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -13,7 +13,7 @@ import { LLM } from "./llm" import { Config } from "@/config/config" import { SessionCompaction } from "./compaction" import { PermissionNext } from "@/permission" -import { Question } from "@/question" +import { Question } from "@/question/service" import { PartID } from "./schema" import type { SessionID, MessageID } from "./schema" diff --git a/packages/opencode/src/session/session.sql.ts b/packages/opencode/src/session/session.sql.ts index ea1c4dafb..f73e16804 100644 --- a/packages/opencode/src/session/session.sql.ts +++ b/packages/opencode/src/session/session.sql.ts @@ -1,8 +1,8 @@ import { sqliteTable, text, integer, index, primaryKey } from "drizzle-orm/sqlite-core" import { ProjectTable } from "../project/project.sql" import type { MessageV2 } from "./message-v2" -import type { Snapshot } from "../snapshot" -import type { PermissionNext } from "../permission" +import type { Snapshot } from "../snapshot/service" +import type { Permission as PermissionNext } from "../permission/service" import type { ProjectID } from "../project/schema" import type { SessionID, MessageID, PartID } from "./schema" import type { WorkspaceID } from "../control-plane/schema" diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index 80c89618e..ead715cfb 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -11,7 +11,7 @@ import PROMPT_CODEX from "./prompt/codex.txt" import PROMPT_TRINITY from "./prompt/trinity.txt" import type { Provider } from "@/provider/provider" import type { Agent } from "@/agent/agent" -import { PermissionNext } from "@/permission" +import { Permission as PermissionNext } from "@/permission/service" import { Skill } from "@/skill" export namespace SystemPrompt { diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index 06293b6eb..66c8b181b 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -12,7 +12,7 @@ import { trimDiff } from "./edit" import { LSP } from "../lsp" import { Filesystem } from "../util/filesystem" import DESCRIPTION from "./apply_patch.txt" -import { File } from "../file" +import { File } from "../file/service" const PatchParams = z.object({ patchText: z.string().describe("The full patch text that describes all changes to be made"), diff --git a/packages/opencode/src/tool/edit.ts b/packages/opencode/src/tool/edit.ts index 1a7614fc1..982095cd5 100644 --- a/packages/opencode/src/tool/edit.ts +++ b/packages/opencode/src/tool/edit.ts @@ -9,13 +9,13 @@ import { Tool } from "./tool" import { LSP } from "../lsp" import { createTwoFilesPatch, diffLines } from "diff" import DESCRIPTION from "./edit.txt" -import { File } from "../file" +import { File } from "../file/service" import { FileWatcher } from "../file/watcher" import { Bus } from "../bus" import { FileTime } from "../file/time" import { Filesystem } from "../util/filesystem" import { Instance } from "../project/instance" -import { Snapshot } from "@/snapshot" +import { Snapshot } from "@/snapshot/service" import { assertExternalDirectory } from "./external-directory" const MAX_DIAGNOSTICS_PER_FILE = 20 diff --git a/packages/opencode/src/tool/question.ts b/packages/opencode/src/tool/question.ts index a2887546d..27a988e56 100644 --- a/packages/opencode/src/tool/question.ts +++ b/packages/opencode/src/tool/question.ts @@ -1,6 +1,7 @@ import z from "zod" import { Tool } from "./tool" -import { Question } from "../question" +import { Question } from "../question/service" +import { Question as QuestionApi } from "../question" import DESCRIPTION from "./question.txt" export const QuestionTool = Tool.define("question", { @@ -9,7 +10,7 @@ export const QuestionTool = Tool.define("question", { questions: z.array(Question.Info.omit({ custom: true })).describe("Questions to ask"), }), async execute(params, ctx) { - const answers = await Question.ask({ + const answers = await QuestionApi.ask({ sessionID: ctx.sessionID, questions: params.questions, tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined, diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 9cabf47eb..79bec7560 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -10,7 +10,7 @@ import { SessionPrompt } from "../session/prompt" import { iife } from "@/util/iife" import { defer } from "@/util/defer" import { Config } from "../config/config" -import { PermissionNext } from "@/permission" +import { Permission as PermissionNext } from "@/permission/service" const parameters = z.object({ description: z.string().describe("A short (3-5 words) description of the task"), diff --git a/packages/opencode/src/tool/tool.ts b/packages/opencode/src/tool/tool.ts index d29af86f8..c34bdbc50 100644 --- a/packages/opencode/src/tool/tool.ts +++ b/packages/opencode/src/tool/tool.ts @@ -1,7 +1,7 @@ import z from "zod" import type { MessageV2 } from "../session/message-v2" import type { Agent } from "../agent/agent" -import type { PermissionNext } from "../permission" +import type { Permission as PermissionNext } from "../permission/service" import type { SessionID, MessageID } from "../session/schema" import { Truncate } from "./truncate" diff --git a/packages/opencode/src/tool/write.ts b/packages/opencode/src/tool/write.ts index 83474a543..abfab6d48 100644 --- a/packages/opencode/src/tool/write.ts +++ b/packages/opencode/src/tool/write.ts @@ -5,7 +5,7 @@ import { LSP } from "../lsp" import { createTwoFilesPatch } from "diff" import DESCRIPTION from "./write.txt" import { Bus } from "../bus" -import { File } from "../file" +import { File } from "../file/service" import { FileWatcher } from "../file/watcher" import { FileTime } from "../file/time" import { Filesystem } from "../util/filesystem"