fix(plugins): log plugin handler errors, warn on double-init
Address Greptile review feedback: - Log plugin event handler errors via logger.warn instead of silently discarding the emit() result - Warn if setPluginEventBus is called more than once Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import type { PluginEvent } from "@paperclipai/plugin-sdk";
|
|||||||
import { publishLiveEvent } from "./live-events.js";
|
import { publishLiveEvent } from "./live-events.js";
|
||||||
import { redactCurrentUserValue } from "../log-redaction.js";
|
import { redactCurrentUserValue } from "../log-redaction.js";
|
||||||
import { sanitizeRecord } from "../redaction.js";
|
import { sanitizeRecord } from "../redaction.js";
|
||||||
|
import { logger } from "../middleware/logger.js";
|
||||||
import type { PluginEventBus } from "./plugin-event-bus.js";
|
import type { PluginEventBus } from "./plugin-event-bus.js";
|
||||||
|
|
||||||
const PLUGIN_EVENT_SET: ReadonlySet<string> = new Set(PLUGIN_EVENT_TYPES);
|
const PLUGIN_EVENT_SET: ReadonlySet<string> = new Set(PLUGIN_EVENT_TYPES);
|
||||||
@@ -14,6 +15,9 @@ let _pluginEventBus: PluginEventBus | null = null;
|
|||||||
|
|
||||||
/** Wire the plugin event bus so domain events are forwarded to plugins. */
|
/** Wire the plugin event bus so domain events are forwarded to plugins. */
|
||||||
export function setPluginEventBus(bus: PluginEventBus): void {
|
export function setPluginEventBus(bus: PluginEventBus): void {
|
||||||
|
if (_pluginEventBus) {
|
||||||
|
logger.warn("setPluginEventBus called more than once, replacing existing bus");
|
||||||
|
}
|
||||||
_pluginEventBus = bus;
|
_pluginEventBus = bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,6 +79,10 @@ export async function logActivity(db: Db, input: LogActivityInput) {
|
|||||||
runId: input.runId ?? null,
|
runId: input.runId ?? null,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
void _pluginEventBus.emit(event).catch(() => {});
|
void _pluginEventBus.emit(event).then(({ errors }) => {
|
||||||
|
for (const { pluginId, error } of errors) {
|
||||||
|
logger.warn({ pluginId, eventType: event.eventType, err: error }, "plugin event handler failed");
|
||||||
|
}
|
||||||
|
}).catch(() => {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user