Skip to content

plugin events are fired multiple times #3744

@maxandron

Description

@maxandron

Description

Happening since the update - each plugin event is fired multiple times

OpenCode version

v1.0.11

Steps to reproduce

  1. Create a simple plugin that writes the event type into a file.
export const NotificationPlugin: Plugin = async ({ client, $ }) => {
  return {
    event: async ({ event }) => {
      await $`echo ${event.type} >> /tmp/events.txt`;
    },
  }
}
  1. Run opencode, and start a conversation. e.g. hi

  2. Look at the file in /tmp/events.txt

This is the output:

session.created
session.created
session.created
session.created
session.created
session.created
session.created
session.created
session.created
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.part.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
session.idle
session.idle
session.idle
session.idle
session.idle
session.idle
session.idle
session.idle
session.idle
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
session.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated
message.updated

Screenshot and/or share link

No response

Operating System

macOS 26.0.1

Terminal

tmux inside ghostty

Metadata

Metadata

Labels

bugSomething isn't workingopentuiThis relates to changes in v1.0, now that opencode uses opentui

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