feat(plugin): add v2 tui entrypoint

This commit is contained in:
Dax Raad
2026-07-13 23:08:34 -04:00
parent 2a08cd3b96
commit 9b8282ad3d
5 changed files with 23 additions and 2 deletions
+1 -1
View File
@@ -15,7 +15,7 @@
"./tui": "./src/tui.ts",
"./v2/effect": "./src/v2/effect/index.ts",
"./v2/effect/*": "./src/v2/effect/*.ts",
"./v2/tui/*": "./src/v2/tui/*.ts",
"./v2/tui": "./src/v2/tui/index.ts",
"./v2": "./src/v2/promise/index.ts",
"./v2/*": "./src/v2/promise/*.ts"
},
+1 -1
View File
@@ -105,7 +105,7 @@ export interface UI {
}
export interface Context {
readonly options: Record<string, any>
readonly options: Readonly<Record<string, unknown>>
readonly client: OpenCodeClient
readonly data: Data
readonly ui: UI
+1
View File
@@ -0,0 +1 @@
export * as Plugin from "./plugin.js"
+14
View File
@@ -0,0 +1,14 @@
import type { Context } from "./context.js"
export type { Context }
export type Cleanup = () => Promise<void> | void
export interface Definition {
readonly id: string
readonly setup: (context: Context) => Promise<Cleanup | void> | Cleanup | void
}
export function define(plugin: Definition) {
return plugin
}
@@ -11,6 +11,7 @@ import { Skill } from "@opencode-ai/schema/skill"
const Plugin = await import("../src/v2/effect/index")
const PromisePlugin = await import("../src/v2/promise/index")
const TuiPlugin = await import("../src/v2/tui/index")
test.each([
["effect", Plugin],
@@ -38,3 +39,8 @@ test.each([
"Skill",
])
})
test("tui entrypoint exposes the V2 plugin definition", () => {
const plugin = TuiPlugin.Plugin.define({ id: "demo", setup() {} })
expect(plugin.id).toBe("demo")
})