summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/config/config.ts15
-rw-r--r--packages/opencode/test/config/config.test.ts2
2 files changed, 13 insertions, 4 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index aad0fd76c..71cf43d6d 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -1,6 +1,7 @@
import { Log } from "../util/log"
import path from "path"
-import { pathToFileURL } from "url"
+import { pathToFileURL, fileURLToPath } from "url"
+import { createRequire } from "module"
import os from "os"
import z from "zod"
import { Filesystem } from "../util/filesystem"
@@ -276,7 +277,6 @@ export namespace Config {
"@opencode-ai/plugin": targetVersion,
}
await Filesystem.writeJson(pkg, json)
- await new Promise((resolve) => setTimeout(resolve, 3000))
const gitignore = path.join(dir, ".gitignore")
const hasGitIgnore = await Filesystem.exists(gitignore)
@@ -1332,7 +1332,16 @@ export namespace Config {
const plugin = data.plugin[i]
try {
data.plugin[i] = import.meta.resolve!(plugin, options.path)
- } catch (err) {}
+ } catch (e) {
+ try {
+ // import.meta.resolve sometimes fails with newly created node_modules
+ const require = createRequire(options.path)
+ const resolvedPath = require.resolve(plugin)
+ data.plugin[i] = pathToFileURL(resolvedPath).href
+ } catch {
+ // Ignore, plugin might be a generic string identifier like "mcp-server"
+ }
+ }
}
}
return data
diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts
index 56773570a..2b1ba816e 100644
--- a/packages/opencode/test/config/config.test.ts
+++ b/packages/opencode/test/config/config.test.ts
@@ -689,7 +689,7 @@ test("resolves scoped npm plugins in config", async () => {
const pluginEntries = config.plugin ?? []
const baseUrl = pathToFileURL(path.join(tmp.path, "opencode.json")).href
- const expected = import.meta.resolve("@scope/plugin", baseUrl)
+ const expected = pathToFileURL(path.join(tmp.path, "node_modules", "@scope", "plugin", "index.js")).href
expect(pluginEntries.includes(expected)).toBe(true)