Purpose
Define type-safe message envelope types and configure package.json exports for server and TUI entry points.
Scope
Types (src/types.ts)
interface BusEnvelope<C extends string = string, P = unknown> {
channel: C;
payload: P;
ts: number; // Date.now() when published
}
type BusCallback<C extends string, P> = (msg: BusEnvelope<C, P>) => void;
Package exports
{
"exports": {
".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
"./tui": { "types": "./dist/tui.d.ts", "import": "./dist/tui.js" }
}
}
Channel namespace types (optional, for consumers)
// Consumers can define their own:
type TbgStatusChannel = "tbg" | "status";
type TbgStatusPayload = { cumulative: number; softLimit: number; hardLimit: number; percentage: number; status: string };
Build
bun build for server (./index)
tsc for types (.d.ts)
bun build for tui (./tui)
Files
- src/types.ts
- src/index.ts (re-export BusClient)
- src/tui.ts (re-export BusTui)
- package.json (exports map)
Acceptance
bun build succeeds
- Import test:
import { BusClient } from "@four-bytes/opencode-plugin-lib" resolves
- Import test:
import { BusTui } from "@four-bytes/opencode-plugin-lib/tui" resolves
Purpose
Define type-safe message envelope types and configure package.json exports for server and TUI entry points.
Scope
Types (src/types.ts)
Package exports
{ "exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" }, "./tui": { "types": "./dist/tui.d.ts", "import": "./dist/tui.js" } } }Channel namespace types (optional, for consumers)
Build
bun buildfor server (./index)tscfor types (.d.ts)bun buildfor tui (./tui)Files
Acceptance
bun buildsucceedsimport { BusClient } from "@four-bytes/opencode-plugin-lib"resolvesimport { BusTui } from "@four-bytes/opencode-plugin-lib/tui"resolves