From 9b8282ad3db97bd2f4dc7ba2dede5aaebbd9b2fc Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 13 Jul 2026 23:08:34 -0400 Subject: [PATCH] feat(plugin): add v2 tui entrypoint --- packages/plugin/package.json | 2 +- packages/plugin/src/v2/tui/context.ts | 2 +- packages/plugin/src/v2/tui/index.ts | 1 + packages/plugin/src/v2/tui/plugin.ts | 14 ++++++++++++++ packages/plugin/test/contract-identity.test.ts | 6 ++++++ 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 packages/plugin/src/v2/tui/index.ts create mode 100644 packages/plugin/src/v2/tui/plugin.ts diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 65b6bcb9d6..69a6a3417b 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -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" }, diff --git a/packages/plugin/src/v2/tui/context.ts b/packages/plugin/src/v2/tui/context.ts index 5989bb34dc..ad0d782b61 100644 --- a/packages/plugin/src/v2/tui/context.ts +++ b/packages/plugin/src/v2/tui/context.ts @@ -105,7 +105,7 @@ export interface UI { } export interface Context { - readonly options: Record + readonly options: Readonly> readonly client: OpenCodeClient readonly data: Data readonly ui: UI diff --git a/packages/plugin/src/v2/tui/index.ts b/packages/plugin/src/v2/tui/index.ts new file mode 100644 index 0000000000..8020216abc --- /dev/null +++ b/packages/plugin/src/v2/tui/index.ts @@ -0,0 +1 @@ +export * as Plugin from "./plugin.js" diff --git a/packages/plugin/src/v2/tui/plugin.ts b/packages/plugin/src/v2/tui/plugin.ts new file mode 100644 index 0000000000..2ab1e4faad --- /dev/null +++ b/packages/plugin/src/v2/tui/plugin.ts @@ -0,0 +1,14 @@ +import type { Context } from "./context.js" + +export type { Context } + +export type Cleanup = () => Promise | void + +export interface Definition { + readonly id: string + readonly setup: (context: Context) => Promise | Cleanup | void +} + +export function define(plugin: Definition) { + return plugin +} diff --git a/packages/plugin/test/contract-identity.test.ts b/packages/plugin/test/contract-identity.test.ts index 79e97a22f7..243a7aa89b 100644 --- a/packages/plugin/test/contract-identity.test.ts +++ b/packages/plugin/test/contract-identity.test.ts @@ -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") +})