import type { CommandApi } from "@opencode-ai/client/effect/api" import type { PromptInput } from "@opencode-ai/schema/prompt-input" import type { Session } from "@opencode-ai/schema/session" import type { SessionInbox } from "@opencode-ai/schema/session-inbox" import type { Effect } from "effect" import type { Transform } from "./registration.js" export interface CommandInvocation { readonly sessionID: Session.ID readonly prompt: PromptInput.Prompt readonly delivery: SessionInbox.Delivery } export interface CommandDefinition { readonly name: string readonly description?: string readonly execute: (input: CommandInvocation) => Effect.Effect } export interface CommandDraft { add(definition: CommandDefinition): void } export interface CommandDomain extends Pick, "list"> { readonly transform: Transform readonly reload: () => Effect.Effect }