Skip to content

[P17b] Add type-safe message contracts and package exports #3

@four-bytes-robby

Description

@four-bytes-robby

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions