Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
Kit Langton
e61fe8e5f8 feat: unwrap file namespaces to flat exports + barrel 2026-04-15 23:49:51 -04:00
35 changed files with 834 additions and 839 deletions

View file

@ -1,7 +1,7 @@
import { EOL } from "os" import { EOL } from "os"
import { AppRuntime } from "@/effect/app-runtime" import { AppRuntime } from "@/effect/app-runtime"
import { File } from "../../../file" import { File } from "../../../file"
import { Ripgrep } from "@/file/ripgrep" import { Ripgrep } from "@/file"
import { bootstrap } from "../../bootstrap" import { bootstrap } from "../../bootstrap"
import { cmd } from "../cmd" import { cmd } from "../cmd"

View file

@ -1,7 +1,7 @@
import { EOL } from "os" import { EOL } from "os"
import { Effect, Stream } from "effect" import { Effect, Stream } from "effect"
import { AppRuntime } from "../../../effect/app-runtime" import { AppRuntime } from "../../../effect/app-runtime"
import { Ripgrep } from "../../../file/ripgrep" import { Ripgrep } from "../../../file"
import { Instance } from "../../../project/instance" import { Instance } from "../../../project/instance"
import { bootstrap } from "../../bootstrap" import { bootstrap } from "../../bootstrap"
import { cmd } from "../cmd" import { cmd } from "../cmd"

View file

@ -8,10 +8,10 @@ import { Auth } from "@/auth"
import { Account } from "@/account" import { Account } from "@/account"
import { Config } from "@/config" import { Config } from "@/config"
import { Git } from "@/git" import { Git } from "@/git"
import { Ripgrep } from "@/file/ripgrep" import { Ripgrep } from "@/file"
import { FileTime } from "@/file/time" import { FileTime } from "@/file"
import { File } from "@/file" import { File } from "@/file"
import { FileWatcher } from "@/file/watcher" import { FileWatcher } from "@/file"
import { Storage } from "@/storage" import { Storage } from "@/storage"
import { Snapshot } from "@/snapshot" import { Snapshot } from "@/snapshot"
import { Plugin } from "@/plugin" import { Plugin } from "@/plugin"

View file

@ -3,7 +3,7 @@ import { memoMap } from "./run-service"
import { Plugin } from "@/plugin" import { Plugin } from "@/plugin"
import { LSP } from "@/lsp" import { LSP } from "@/lsp"
import { FileWatcher } from "@/file/watcher" import { FileWatcher } from "@/file"
import { Format } from "@/format" import { Format } from "@/format"
import { ShareNext } from "@/share" import { ShareNext } from "@/share"
import { File } from "@/file" import { File } from "@/file"

View file

@ -13,8 +13,8 @@ import z from "zod"
import { Global } from "../global" import { Global } from "../global"
import { Instance } from "../project/instance" import { Instance } from "../project/instance"
import { Log } from "../util" import { Log } from "../util"
import { Protected } from "./protected" import * as Protected from "./protected"
import { Ripgrep } from "./ripgrep" import * as Ripgrep from "./ripgrep"
export const Info = z export const Info = z
.object({ .object({

View file

@ -1,6 +1,5 @@
import { Glob } from "@opencode-ai/shared/util/glob" import { Glob } from "@opencode-ai/shared/util/glob"
export namespace FileIgnore {
const FOLDERS = new Set([ const FOLDERS = new Set([
"node_modules", "node_modules",
"bower_components", "bower_components",
@ -78,4 +77,3 @@ export namespace FileIgnore {
return false return false
} }
}

View file

@ -1 +1,6 @@
export * as File from "./file" export * as File from "./file"
export * as Protected from "./protected"
export * as FileIgnore from "./ignore"
export * as FileWatcher from "./watcher"
export * as FileTime from "./time"
export * as Ripgrep from "./ripgrep"

View file

@ -37,7 +37,6 @@ const DARWIN_ROOT = ["/.DocumentRevisions-V100", "/.Spotlight-V100", "/.Trashes"
const WIN32_HOME = ["AppData", "Downloads", "Desktop", "Documents", "Pictures", "Music", "Videos", "OneDrive"] const WIN32_HOME = ["AppData", "Downloads", "Desktop", "Documents", "Pictures", "Music", "Videos", "OneDrive"]
export namespace Protected {
/** Directory basenames to skip when scanning the home directory. */ /** Directory basenames to skip when scanning the home directory. */
export function names(): ReadonlySet<string> { export function names(): ReadonlySet<string> {
if (process.platform === "darwin") return new Set(DARWIN_HOME) if (process.platform === "darwin") return new Set(DARWIN_HOME)
@ -56,4 +55,3 @@ export namespace Protected {
if (process.platform === "win32") return WIN32_HOME.map((n) => path.join(home, n)) if (process.platform === "win32") return WIN32_HOME.map((n) => path.join(home, n))
return [] return []
} }
}

View file

@ -8,7 +8,6 @@ import { ripgrep } from "ripgrep"
import { Filesystem } from "@/util" import { Filesystem } from "@/util"
import { Log } from "@/util" import { Log } from "@/util"
export namespace Ripgrep {
const log = Log.create({ service: "ripgrep" }) const log = Log.create({ service: "ripgrep" })
const Stats = z.object({ const Stats = z.object({
@ -572,4 +571,3 @@ export namespace Ripgrep {
) )
export const defaultLayer = layer export const defaultLayer = layer
}

View file

@ -5,7 +5,6 @@ import { Flag } from "@/flag/flag"
import type { SessionID } from "@/session/schema" import type { SessionID } from "@/session/schema"
import { Log } from "../util" import { Log } from "../util"
export namespace FileTime {
const log = Log.create({ service: "file.time" }) const log = Log.create({ service: "file.time" })
export type Stamp = { export type Stamp = {
@ -110,4 +109,3 @@ export namespace FileTime {
).pipe(Layer.orDie) ).pipe(Layer.orDie)
export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer)) export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer))
}

View file

@ -13,13 +13,12 @@ import { Git } from "@/git"
import { Instance } from "@/project/instance" import { Instance } from "@/project/instance"
import { lazy } from "@/util/lazy" import { lazy } from "@/util/lazy"
import { Config } from "../config" import { Config } from "../config"
import { FileIgnore } from "./ignore" import * as FileIgnore from "./ignore"
import { Protected } from "./protected" import * as Protected from "./protected"
import { Log } from "../util" import { Log } from "../util"
declare const OPENCODE_LIBC: string | undefined declare const OPENCODE_LIBC: string | undefined
export namespace FileWatcher {
const log = Log.create({ service: "file.watcher" }) const log = Log.create({ service: "file.watcher" })
const SUBSCRIBE_TIMEOUT_MS = 10_000 const SUBSCRIBE_TIMEOUT_MS = 10_000
@ -160,4 +159,3 @@ export namespace FileWatcher {
) )
export const defaultLayer = layer.pipe(Layer.provide(Config.defaultLayer), Layer.provide(Git.defaultLayer)) export const defaultLayer = layer.pipe(Layer.provide(Config.defaultLayer), Layer.provide(Git.defaultLayer))
}

View file

@ -9,7 +9,7 @@ import { Bus } from "../bus"
import { Command } from "../command" import { Command } from "../command"
import { Instance } from "./instance" import { Instance } from "./instance"
import { Log } from "@/util" import { Log } from "@/util"
import { FileWatcher } from "@/file/watcher" import { FileWatcher } from "@/file"
import { ShareNext } from "@/share" import { ShareNext } from "@/share"
import * as Effect from "effect/Effect" import * as Effect from "effect/Effect"

View file

@ -5,7 +5,7 @@ import { Bus } from "@/bus"
import { BusEvent } from "@/bus/bus-event" import { BusEvent } from "@/bus/bus-event"
import { InstanceState } from "@/effect" import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { FileWatcher } from "@/file/watcher" import { FileWatcher } from "@/file"
import { Git } from "@/git" import { Git } from "@/git"
import { Log } from "@/util" import { Log } from "@/util"
import { Instance } from "./instance" import { Instance } from "./instance"

View file

@ -4,7 +4,7 @@ import { Effect } from "effect"
import z from "zod" import z from "zod"
import { AppRuntime } from "../../effect/app-runtime" import { AppRuntime } from "../../effect/app-runtime"
import { File } from "../../file" import { File } from "../../file"
import { Ripgrep } from "../../file/ripgrep" import { Ripgrep } from "../../file"
import { LSP } from "../../lsp" import { LSP } from "../../lsp"
import { Instance } from "../../project/instance" import { Instance } from "../../project/instance"
import { lazy } from "../../util/lazy" import { lazy } from "../../util/lazy"

View file

@ -22,7 +22,7 @@ import MAX_STEPS from "../session/prompt/max-steps.txt"
import { ToolRegistry } from "../tool/registry" import { ToolRegistry } from "../tool/registry"
import { MCP } from "../mcp" import { MCP } from "../mcp"
import { LSP } from "../lsp" import { LSP } from "../lsp"
import { FileTime } from "../file/time" import { FileTime } from "../file"
import { Flag } from "../flag/flag" import { Flag } from "../flag/flag"
import { ulid } from "ulid" import { ulid } from "ulid"
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process" import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"

View file

@ -3,7 +3,7 @@ import * as path from "path"
import { Effect } from "effect" import { Effect } from "effect"
import { Tool } from "./tool" import { Tool } from "./tool"
import { Bus } from "../bus" import { Bus } from "../bus"
import { FileWatcher } from "../file/watcher" import { FileWatcher } from "../file"
import { Instance } from "../project/instance" import { Instance } from "../project/instance"
import { Patch } from "../patch" import { Patch } from "../patch"
import { createTwoFilesPatch, diffLines } from "diff" import { createTwoFilesPatch, diffLines } from "diff"

View file

@ -11,10 +11,10 @@ import { LSP } from "../lsp"
import { createTwoFilesPatch, diffLines } from "diff" import { createTwoFilesPatch, diffLines } from "diff"
import DESCRIPTION from "./edit.txt" import DESCRIPTION from "./edit.txt"
import { File } from "../file" import { File } from "../file"
import { FileWatcher } from "../file/watcher" import { FileWatcher } from "../file"
import { Bus } from "../bus" import { Bus } from "../bus"
import { Format } from "../format" import { Format } from "../format"
import { FileTime } from "../file/time" import { FileTime } from "../file"
import { Instance } from "../project/instance" import { Instance } from "../project/instance"
import { Snapshot } from "@/snapshot" import { Snapshot } from "@/snapshot"
import { assertExternalDirectoryEffect } from "./external-directory" import { assertExternalDirectoryEffect } from "./external-directory"

View file

@ -4,7 +4,7 @@ import { Effect, Option } from "effect"
import * as Stream from "effect/Stream" import * as Stream from "effect/Stream"
import { InstanceState } from "@/effect" import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Ripgrep } from "../file/ripgrep" import { Ripgrep } from "../file"
import { assertExternalDirectoryEffect } from "./external-directory" import { assertExternalDirectoryEffect } from "./external-directory"
import DESCRIPTION from "./glob.txt" import DESCRIPTION from "./glob.txt"
import { Tool } from "./tool" import { Tool } from "./tool"

View file

@ -3,7 +3,7 @@ import z from "zod"
import { Effect, Option } from "effect" import { Effect, Option } from "effect"
import { InstanceState } from "@/effect" import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Ripgrep } from "../file/ripgrep" import { Ripgrep } from "../file"
import { assertExternalDirectoryEffect } from "./external-directory" import { assertExternalDirectoryEffect } from "./external-directory"
import DESCRIPTION from "./grep.txt" import DESCRIPTION from "./grep.txt"
import { Tool } from "./tool" import { Tool } from "./tool"

View file

@ -7,7 +7,7 @@ import { createInterface } from "readline"
import { Tool } from "./tool" import { Tool } from "./tool"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { LSP } from "../lsp" import { LSP } from "../lsp"
import { FileTime } from "../file/time" import { FileTime } from "../file"
import DESCRIPTION from "./read.txt" import DESCRIPTION from "./read.txt"
import { Instance } from "../project/instance" import { Instance } from "../project/instance"
import { assertExternalDirectoryEffect } from "./external-directory" import { assertExternalDirectoryEffect } from "./external-directory"

View file

@ -33,13 +33,13 @@ import { Effect, Layer, Context } from "effect"
import { FetchHttpClient, HttpClient } from "effect/unstable/http" import { FetchHttpClient, HttpClient } from "effect/unstable/http"
import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner" import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
import { Ripgrep } from "../file/ripgrep" import { Ripgrep } from "../file"
import { Format } from "../format" import { Format } from "../format"
import { InstanceState } from "@/effect" import { InstanceState } from "@/effect"
import { Question } from "../question" import { Question } from "../question"
import { Todo } from "../session/todo" import { Todo } from "../session/todo"
import { LSP } from "../lsp" import { LSP } from "../lsp"
import { FileTime } from "../file/time" import { FileTime } from "../file"
import { Instruction } from "../session/instruction" import { Instruction } from "../session/instruction"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Bus } from "../bus" import { Bus } from "../bus"

View file

@ -4,7 +4,7 @@ import z from "zod"
import { Effect } from "effect" import { Effect } from "effect"
import * as Stream from "effect/Stream" import * as Stream from "effect/Stream"
import { EffectLogger } from "@/effect" import { EffectLogger } from "@/effect"
import { Ripgrep } from "../file/ripgrep" import { Ripgrep } from "../file"
import { Skill } from "../skill" import { Skill } from "../skill"
import { Tool } from "./tool" import { Tool } from "./tool"

View file

@ -7,9 +7,9 @@ import { createTwoFilesPatch } from "diff"
import DESCRIPTION from "./write.txt" import DESCRIPTION from "./write.txt"
import { Bus } from "../bus" import { Bus } from "../bus"
import { File } from "../file" import { File } from "../file"
import { FileWatcher } from "../file/watcher" import { FileWatcher } from "../file"
import { Format } from "../format" import { Format } from "../format"
import { FileTime } from "../file/time" import { FileTime } from "../file"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Instance } from "../project/instance" import { Instance } from "../project/instance"
import { trimDiff } from "./edit" import { trimDiff } from "./edit"

View file

@ -1,5 +1,5 @@
import { test, expect } from "bun:test" import { test, expect } from "bun:test"
import { FileIgnore } from "../../src/file/ignore" import { FileIgnore } from "../../src/file"
test("match nested and non-nested", () => { test("match nested and non-nested", () => {
expect(FileIgnore.match("node_modules/index.js")).toBe(true) expect(FileIgnore.match("node_modules/index.js")).toBe(true)

View file

@ -4,7 +4,7 @@ import * as Stream from "effect/Stream"
import fs from "fs/promises" import fs from "fs/promises"
import path from "path" import path from "path"
import { tmpdir } from "../fixture/fixture" import { tmpdir } from "../fixture/fixture"
import { Ripgrep } from "../../src/file/ripgrep" import { Ripgrep } from "../../src/file"
const run = <A>(effect: Effect.Effect<A, unknown, Ripgrep.Service>) => const run = <A>(effect: Effect.Effect<A, unknown, Ripgrep.Service>) =>
effect.pipe(Effect.provide(Ripgrep.defaultLayer), Effect.runPromise) effect.pipe(Effect.provide(Ripgrep.defaultLayer), Effect.runPromise)

View file

@ -3,7 +3,7 @@ import fs from "fs/promises"
import path from "path" import path from "path"
import { Cause, Deferred, Effect, Exit, Fiber, Layer } from "effect" import { Cause, Deferred, Effect, Exit, Fiber, Layer } from "effect"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"
import { SessionID } from "../../src/session/schema" import { SessionID } from "../../src/session/schema"
import { Filesystem } from "../../src/util" import { Filesystem } from "../../src/util"
@ -43,7 +43,7 @@ const fail = Effect.fn("FileTimeTest.fail")(function* <A, E, R>(self: Effect.Eff
throw new Error("expected file time effect to fail") throw new Error("expected file time effect to fail")
}) })
describe("file/time", () => { describe("file", () => {
describe("read() and get()", () => { describe("read() and get()", () => {
it.live("stores read timestamp", () => it.live("stores read timestamp", () =>
provideTmpdirInstance((dir) => provideTmpdirInstance((dir) =>

View file

@ -6,7 +6,7 @@ import { ConfigProvider, Deferred, Effect, Layer, ManagedRuntime, Option } from
import { tmpdir } from "../fixture/fixture" import { tmpdir } from "../fixture/fixture"
import { Bus } from "../../src/bus" import { Bus } from "../../src/bus"
import { Config } from "../../src/config" import { Config } from "../../src/config"
import { FileWatcher } from "../../src/file/watcher" import { FileWatcher } from "../../src/file"
import { Git } from "../../src/git" import { Git } from "../../src/git"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"

View file

@ -5,7 +5,7 @@ import fs from "fs/promises"
import path from "path" import path from "path"
import { tmpdir } from "../fixture/fixture" import { tmpdir } from "../fixture/fixture"
import { AppRuntime } from "../../src/effect/app-runtime" import { AppRuntime } from "../../src/effect/app-runtime"
import { FileWatcher } from "../../src/file/watcher" import { FileWatcher } from "../../src/file"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"
import { GlobalBus } from "../../src/bus/global" import { GlobalBus } from "../../src/bus/global"
import { Vcs } from "../../src/project" import { Vcs } from "../../src/project"

View file

@ -7,7 +7,7 @@ import { Agent as AgentSvc } from "../../src/agent/agent"
import { Bus } from "../../src/bus" import { Bus } from "../../src/bus"
import { Command } from "../../src/command" import { Command } from "../../src/command"
import { Config } from "../../src/config" import { Config } from "../../src/config"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { LSP } from "../../src/lsp" import { LSP } from "../../src/lsp"
import { MCP } from "../../src/mcp" import { MCP } from "../../src/mcp"
import { Permission } from "../../src/permission" import { Permission } from "../../src/permission"
@ -38,7 +38,7 @@ import { ToolRegistry } from "../../src/tool/registry"
import { Truncate } from "../../src/tool/truncate" import { Truncate } from "../../src/tool/truncate"
import { Log } from "../../src/util" import { Log } from "../../src/util"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Ripgrep } from "../../src/file/ripgrep" import { Ripgrep } from "../../src/file"
import { Format } from "../../src/format" import { Format } from "../../src/format"
import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture" import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture"
import { testEffect } from "../lib/effect" import { testEffect } from "../lib/effect"

View file

@ -33,7 +33,7 @@ import { Agent as AgentSvc } from "../../src/agent/agent"
import { Bus } from "../../src/bus" import { Bus } from "../../src/bus"
import { Command } from "../../src/command" import { Command } from "../../src/command"
import { Config } from "../../src/config" import { Config } from "../../src/config"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { LSP } from "../../src/lsp" import { LSP } from "../../src/lsp"
import { MCP } from "../../src/mcp" import { MCP } from "../../src/mcp"
import { Permission } from "../../src/permission" import { Permission } from "../../src/permission"
@ -54,7 +54,7 @@ import { ToolRegistry } from "../../src/tool/registry"
import { Truncate } from "../../src/tool/truncate" import { Truncate } from "../../src/tool/truncate"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Ripgrep } from "../../src/file/ripgrep" import { Ripgrep } from "../../src/file"
import { Format } from "../../src/format" import { Format } from "../../src/format"
void Log.init({ print: false }) void Log.init({ print: false })

View file

@ -5,7 +5,7 @@ import { Effect, Layer, ManagedRuntime } from "effect"
import { EditTool } from "../../src/tool/edit" import { EditTool } from "../../src/tool/edit"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"
import { tmpdir } from "../fixture/fixture" import { tmpdir } from "../fixture/fixture"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { LSP } from "../../src/lsp" import { LSP } from "../../src/lsp"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Format } from "../../src/format" import { Format } from "../../src/format"
@ -138,7 +138,7 @@ describe("tool.edit", () => {
await Instance.provide({ await Instance.provide({
directory: tmp.path, directory: tmp.path,
fn: async () => { fn: async () => {
const { FileWatcher } = await import("../../src/file/watcher") const { FileWatcher } = await import("../../src/file")
const updated = await onceBus(FileWatcher.Event.Updated) const updated = await onceBus(FileWatcher.Event.Updated)
@ -371,7 +371,7 @@ describe("tool.edit", () => {
fn: async () => { fn: async () => {
await readFileTime(ctx.sessionID, filepath) await readFileTime(ctx.sessionID, filepath)
const { FileWatcher } = await import("../../src/file/watcher") const { FileWatcher } = await import("../../src/file")
const updated = await onceBus(FileWatcher.Event.Updated) const updated = await onceBus(FileWatcher.Event.Updated)

View file

@ -4,7 +4,7 @@ import { Cause, Effect, Exit, Layer } from "effect"
import { GlobTool } from "../../src/tool/glob" import { GlobTool } from "../../src/tool/glob"
import { SessionID, MessageID } from "../../src/session/schema" import { SessionID, MessageID } from "../../src/session/schema"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Ripgrep } from "../../src/file/ripgrep" import { Ripgrep } from "../../src/file"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Truncate } from "../../src/tool/truncate" import { Truncate } from "../../src/tool/truncate"
import { Agent } from "../../src/agent/agent" import { Agent } from "../../src/agent/agent"

View file

@ -7,7 +7,7 @@ import { SessionID, MessageID } from "../../src/session/schema"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { Truncate } from "../../src/tool/truncate" import { Truncate } from "../../src/tool/truncate"
import { Agent } from "../../src/agent/agent" import { Agent } from "../../src/agent/agent"
import { Ripgrep } from "../../src/file/ripgrep" import { Ripgrep } from "../../src/file"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { testEffect } from "../lib/effect" import { testEffect } from "../lib/effect"

View file

@ -4,7 +4,7 @@ import path from "path"
import { Agent } from "../../src/agent/agent" import { Agent } from "../../src/agent/agent"
import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner" import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { LSP } from "../../src/lsp" import { LSP } from "../../src/lsp"
import { Permission } from "../../src/permission" import { Permission } from "../../src/permission"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"

View file

@ -6,7 +6,7 @@ import { WriteTool } from "../../src/tool/write"
import { Instance } from "../../src/project/instance" import { Instance } from "../../src/project/instance"
import { LSP } from "../../src/lsp" import { LSP } from "../../src/lsp"
import { AppFileSystem } from "@opencode-ai/shared/filesystem" import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { FileTime } from "../../src/file/time" import { FileTime } from "../../src/file"
import { Bus } from "../../src/bus" import { Bus } from "../../src/bus"
import { Format } from "../../src/format" import { Format } from "../../src/format"
import { Truncate } from "../../src/tool/truncate" import { Truncate } from "../../src/tool/truncate"