split EventBus into DaemonBus + MessageBus
DaemonBus (was EventBus): typed events for system/IPC layer. MessageBus: channel-based pub/sub for UI/extension coordination. Messages carry publisher (auto-stamped from extension ID), channel (required), timestamp, and payload. Subscribe by publisher, channel, or both — zero collision across extensions. Extension context gains publish() and subscribe() convenience methods that auto-stamp the extension's ID as publisher. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import 'package:clide/kernel/src/commands/palette.dart';
|
||||
import 'package:clide/kernel/src/commands/registry.dart';
|
||||
import 'package:clide/kernel/src/dialog.dart';
|
||||
import 'package:clide/kernel/src/events/bus.dart';
|
||||
import 'package:clide/kernel/src/events/message_bus.dart';
|
||||
import 'package:clide/kernel/src/files.dart';
|
||||
import 'package:clide/kernel/src/focus.dart';
|
||||
import 'package:clide/kernel/src/i18n/i18n.dart';
|
||||
@@ -53,7 +54,8 @@ abstract class ClideExtensionContext {
|
||||
String get id;
|
||||
|
||||
Logger get log;
|
||||
EventBus get events;
|
||||
DaemonBus get events;
|
||||
MessageBus get messages;
|
||||
SettingsStore get settings;
|
||||
ThemeController get theme;
|
||||
I18n get i18n;
|
||||
@@ -74,6 +76,17 @@ abstract class ClideExtensionContext {
|
||||
DaemonClient get ipc;
|
||||
}
|
||||
|
||||
/// Sugar for message bus scoped to this extension's publisher ID.
|
||||
extension ClideExtensionContextMessages on ClideExtensionContext {
|
||||
void publish(String channel, Map<String, Object?> data) {
|
||||
messages.publish(id, channel, data);
|
||||
}
|
||||
|
||||
Stream<Message> subscribe({String? publisher, String? channel}) {
|
||||
return messages.subscribe(publisher: publisher, channel: channel);
|
||||
}
|
||||
}
|
||||
|
||||
/// Sugar for i18n lookups scoped to this extension's namespace.
|
||||
extension ClideExtensionContextI18n on ClideExtensionContext {
|
||||
/// `ctx.t('welcome.title', placeholder: 'clide')` →
|
||||
|
||||
Reference in New Issue
Block a user