feat(automation): add isolated job delivery mode

This commit is contained in:
William Valentin
2026-02-15 19:23:15 -08:00
parent 0470647ee7
commit 421942f66d
13 changed files with 183 additions and 11 deletions
+23
View File
@@ -132,6 +132,29 @@ describe('ChannelRegistry', () => {
expect(adapter.sendFn).toHaveBeenCalledWith('user-42', { text: 'pong' });
});
it('routes reply using metadata.replyPeerId when provided', async () => {
const adapter = createMockAdapter('test-channel');
registry.register(adapter);
const handler = vi.fn(async (_msg: InboundMessage, reply: (r: OutboundMessage) => Promise<void>) => {
await reply({ text: 'pong' });
});
registry.setMessageHandler(handler);
const msg = {
...makeMessage('test-channel'),
senderId: 'isolated-run-1',
metadata: { replyPeerId: 'job-a' },
};
adapter.triggerMessage(msg);
await vi.waitFor(() => {
expect(handler).toHaveBeenCalledOnce();
});
expect(adapter.sendFn).toHaveBeenCalledWith('job-a', { text: 'pong' });
});
it('unregisters adapter', () => {
const adapter = createMockAdapter('removeme');
registry.register(adapter);
+5 -1
View File
@@ -105,7 +105,11 @@ export class ChannelRegistry {
// Create a reply function bound to this message's channel and sender
const reply = async (response: OutboundMessage): Promise<void> => {
await adapter.send(msg.senderId, response);
const metadata = msg.metadata as Record<string, unknown> | undefined;
const replyPeerId = typeof metadata?.replyPeerId === 'string' && metadata.replyPeerId.length > 0
? metadata.replyPeerId
: msg.senderId;
await adapter.send(replyPeerId, response);
};
// Fire and forget — errors are logged, not propagated