diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 40e4d90a..234d1457 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -15,6 +15,8 @@ import { Auth } from "../auth" import { type ParseError as JsoncParseError, parse as parseJsonc, printParseErrorCode } from "jsonc-parser" import { Instance } from "../project/instance" import { LSPServer } from "../lsp/server" +import { BunProc } from "@/bun" +import { Installation } from "@/installation" export namespace Config { const log = Log.create({ service: "config" }) @@ -61,6 +63,7 @@ export namespace Config { for (const dir of directories) { await assertValid(dir).catch(() => {}) + installDependencies(dir) result.command = mergeDeep(result.command ?? {}, await loadCommand(dir)) result.agent = mergeDeep(result.agent, await loadAgent(dir)) result.agent = mergeDeep(result.agent, await loadMode(dir)) @@ -137,6 +140,17 @@ export namespace Config { } } + async function installDependencies(dir: string) { + await Bun.write(path.join(dir, "package.json"), "{}") + await Bun.write(path.join(dir, ".gitignore"), ["node_modules", "package.json", "bun.lock", ".gitignore"].join("\n")) + await BunProc.run( + ["add", "@opencode-ai/plugin@" + (Installation.isDev() ? "latest" : Installation.VERSION), "--exact"], + { + cwd: dir, + }, + ) + } + const COMMAND_GLOB = new Bun.Glob("command/**/*.md") async function loadCommand(dir: string) { const result: Record = {}