Browse Source

feat(plugin): add v2 tui entrypoint

Dax Raad 4 weeks ago
parent
commit
9b8282ad3d

+ 1 - 1
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"
   },

+ 1 - 1
packages/plugin/src/v2/tui/context.ts

@@ -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 - 0
packages/plugin/src/v2/tui/index.ts

@@ -0,0 +1 @@
+export * as Plugin from "./plugin.js"

+ 14 - 0
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> | void
+
+export interface Definition {
+  readonly id: string
+  readonly setup: (context: Context) => Promise<Cleanup | void> | Cleanup | void
+}
+
+export function define(plugin: Definition) {
+  return plugin
+}

+ 6 - 0
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")
+})