wip: plugin load from package

This commit is contained in:
Dax Raad
2025-08-03 21:19:03 -04:00
parent 9ab3462821
commit 1bac46612c
6 changed files with 332 additions and 11 deletions

View File

@@ -449,9 +449,9 @@ export namespace Config {
if (data.plugin) {
for (let i = 0; i < data.plugin?.length; i++) {
const plugin = data.plugin[i]
if (typeof plugin === "string") {
data.plugin[i] = path.resolve(path.dirname(filepath), plugin)
}
try {
data.plugin[i] = import.meta.resolve(plugin, filepath)
} catch (err) {}
}
}
return data

View File

@@ -6,6 +6,7 @@ import { Log } from "../util/log"
import { createOpencodeClient } from "@opencode-ai/sdk"
import { Server } from "../server/server"
import { pathOr } from "remeda"
import { BunProc } from "../bun"
export namespace Plugin {
const log = Log.create({ service: "plugin" })
@@ -17,8 +18,12 @@ export namespace Plugin {
})
const config = await Config.get()
const hooks = []
for (const plugin of config.plugin ?? []) {
for (let plugin of config.plugin ?? []) {
log.info("loading plugin", { path: plugin })
if (!plugin.startsWith("file://")) {
const [pkg, version] = plugin.split("@")
plugin = await BunProc.install(pkg, version ?? "latest")
}
const mod = await import(plugin)
for (const [_name, fn] of Object.entries<PluginInstance>(mod)) {
const init = await fn({