opencode icon indicating copy to clipboard operation
opencode copied to clipboard

Plugin package not using latest SDK types

Open jbuckmccready opened this issue 1 week ago • 1 comments

Description

@opencode-ai/plugin used for plugins is using @opencode-ai/sdk but with latest changes in v1.1.x opencode now uses @opencode-ai/sdk/v2.

E.g., event.type === "permission.asked" will give type errors when using the @opencode-ai/plugin package.

My simple plugin with hacky cast workaround:

import type { Plugin } from "@opencode-ai/plugin";
import type { Event, EventSessionStatus } from "@opencode-ai/sdk/v2";

const NOTIFY_SCRIPT = "~/.claude/hooks/notify.sh";
const DELAY_MS = 15_000; // 15 seconds

export const NotificationPlugin: Plugin = async ({ $ }) => {
  let timeout: ReturnType<typeof setTimeout> | null = null;

  const clearPendingTimeout = () => {
    if (timeout) {
      clearTimeout(timeout);
      timeout = null;
    }
  };

  const scheduleNotification = (message: string) => {
    clearPendingTimeout();
    timeout = setTimeout(async () => {
      await $`echo '{"message": "${message}"}' | ${NOTIFY_SCRIPT}`
        .quiet()
        .nothrow();
      timeout = null;
    }, DELAY_MS);
  };

  return {
    event: async ({ event: _event }) => {
      // HACK: cast to v2 Event type (Plugin package not yet updated for permission.asked)
      const event = _event as Event;

      // Cancel on any user activity
      if (
        // Session became busy
        (event.type === "session.status" &&
          (event as EventSessionStatus).properties.status.type === "busy") ||
        // User replied to permission prompt
        event.type === "permission.replied"
      ) {
        clearPendingTimeout();
        return;
      }

      // Schedule delayed notification on idle or permission request
      if (event.type === "session.idle") {
        scheduleNotification("OpenCode finished");
      } else if (event.type === "permission.asked") {
        scheduleNotification("OpenCode awaiting permission");
      }
    },
  };
};

Plugins

No response

OpenCode version

v1.1.4

Steps to reproduce

No response

Screenshot and/or share link

No response

Operating System

No response

Terminal

No response

jbuckmccready avatar Jan 07 '26 01:01 jbuckmccready