bunqueue 2.6.55 → 2.6.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,15 @@
1
1
  /**
2
- * WebSocket Sender
3
- * Maintains a persistent outbound WebSocket to the dashboard for real-time events.
2
+ * WebSocket Command Channel
3
+ * Persistent WebSocket connection for receiving commands from the dashboard.
4
4
  *
5
5
  * Features:
6
6
  * - Auth via HTTP upgrade headers (Bun-specific) — no handshake message needed
7
- * - Ring buffer: events are buffered when disconnected, flushed on reconnect
8
- * - Binary frame handling: works behind Cloudflare (text + ArrayBuffer)
9
- * - Local socket ref: pong always replies on the correct socket after reconnect
7
+ * - MessagePack + zstd: binary frames with ~95% compression
8
+ * - Commands only: all data goes via HTTP, WS is for remote commands
10
9
  * - Keepalive: server sends ping every 25s, bunqueue responds pong
11
10
  */
11
+ import { pack, unpack } from 'msgpackr';
12
12
  import { cloudLog } from './logger';
13
- const EVENT_BUFFER_MAX = 1000;
14
13
  export class WsSender {
15
14
  config;
16
15
  instanceId;
@@ -20,8 +19,6 @@ export class WsSender {
20
19
  stopped = false;
21
20
  connected = false;
22
21
  reconnectTimer = null;
23
- /** Ring buffer for events while disconnected */
24
- eventBuffer = [];
25
22
  onCommand = null;
26
23
  constructor(config, instanceId) {
27
24
  this.config = config;
@@ -35,17 +32,17 @@ export class WsSender {
35
32
  connect() {
36
33
  if (this.stopped)
37
34
  return;
38
- // Close previous socket if still lingering
39
35
  this.cleanup();
40
- const wsUrl = this.config.url.replace(/^http/, 'ws').concat('/api/v1/stream');
36
+ const wsUrl = this.config.url.replace(/^http/, 'ws').concat('/api/v1/commands');
41
37
  let ws;
42
38
  try {
43
- // Auth via HTTP upgrade headers (Bun-specific extension) — no handshake message needed
44
39
  ws = new WebSocket(wsUrl, {
45
40
  headers: {
46
41
  Authorization: `Bearer ${this.config.apiKey}`,
47
42
  'X-Instance-Id': this.instanceId,
48
43
  'X-Remote-Commands': this.config.remoteCommands ? '1' : '0',
44
+ 'X-Protocol': 'msgpack',
45
+ 'X-Encoding': 'zstd',
49
46
  },
50
47
  });
51
48
  }
@@ -55,65 +52,23 @@ export class WsSender {
55
52
  return;
56
53
  }
57
54
  this.ws = ws;
55
+ ws.binaryType = 'arraybuffer';
58
56
  ws.onopen = () => {
59
57
  this.connected = true;
60
58
  this.reconnectDelay = 1000;
61
- cloudLog.info('WebSocket stream connected');
62
- // Flush buffered events immediately — auth already done via headers
63
- this.flushBuffer(ws);
59
+ cloudLog.info('Command channel connected (msgpack+zstd)');
64
60
  };
65
- // Handle incoming messages (pings + commands from dashboard)
66
- // Uses local `ws` ref — NOT `this.ws` — to always reply on the correct socket
67
61
  ws.onmessage = (event) => {
68
- try {
69
- let raw;
70
- const d = event.data;
71
- if (typeof d === 'string') {
72
- raw = d;
73
- }
74
- else if (d instanceof ArrayBuffer) {
75
- raw = new TextDecoder().decode(d);
76
- }
77
- else if (d instanceof Buffer) {
78
- raw = d.toString('utf-8');
79
- }
80
- else {
81
- raw = String(d);
82
- }
83
- const msg = JSON.parse(raw);
84
- // Server heartbeat — respond immediately on the SAME socket
85
- if (msg.type === 'ping') {
86
- ws.send(JSON.stringify({ type: 'pong' }));
87
- return;
88
- }
89
- // Server pong (in case we add client ping back later)
90
- if (msg.type === 'pong') {
91
- return;
92
- }
93
- if (msg.type === 'handshake_ack') {
94
- cloudLog.debug('Handshake acknowledged');
95
- return;
96
- }
97
- // Commands
98
- if (this.onCommand &&
99
- this.config.remoteCommands &&
100
- msg.type === 'command' &&
101
- msg.action &&
102
- msg.id) {
103
- this.onCommand(msg);
104
- }
105
- }
106
- catch (err) {
62
+ this.handleMessage(ws, event.data).catch((err) => {
107
63
  cloudLog.debug('WS message parse error', {
108
64
  dataType: typeof event.data,
109
65
  isArrayBuffer: event.data instanceof ArrayBuffer,
110
- preview: String(event.data).slice(0, 100),
111
66
  error: String(err),
112
67
  });
113
- }
68
+ });
114
69
  };
115
70
  ws.onclose = (ev) => {
116
- cloudLog.info('WebSocket closed', { code: ev.code, reason: ev.reason });
71
+ cloudLog.info('Command channel closed', { code: ev.code, reason: ev.reason });
117
72
  this.connected = false;
118
73
  if (!this.stopped) {
119
74
  this.scheduleReconnect();
@@ -123,47 +78,13 @@ export class WsSender {
123
78
  this.connected = false;
124
79
  };
125
80
  }
126
- /** Send an event. Buffers in ring buffer if disconnected. */
127
- send(event) {
128
- if (this.connected && this.ws) {
129
- try {
130
- this.ws.send(JSON.stringify(event));
131
- return;
132
- }
133
- catch {
134
- // Fall through to buffer
135
- }
136
- }
137
- // Buffer when disconnected (ring buffer — drop oldest)
138
- if (this.eventBuffer.length >= EVENT_BUFFER_MAX) {
139
- this.eventBuffer.shift();
140
- }
141
- this.eventBuffer.push(event);
142
- }
143
- /** Send any JSON payload on the WebSocket */
81
+ /** Send a command result back to dashboard */
144
82
  sendRaw(data) {
145
83
  if (!this.connected || !this.ws)
146
84
  return;
147
- try {
148
- this.ws.send(JSON.stringify(data));
149
- }
150
- catch {
85
+ this.sendBinary(this.ws, data).catch(() => {
151
86
  // Best-effort: dropped
152
- }
153
- }
154
- /**
155
- * Drain buffered events for HTTP fallback (dual-channel).
156
- * Returns and clears all buffered events.
157
- */
158
- drainBufferedEvents() {
159
- if (this.eventBuffer.length === 0)
160
- return [];
161
- const events = this.eventBuffer.splice(0);
162
- return events;
163
- }
164
- /** Number of buffered events */
165
- getBufferSize() {
166
- return this.eventBuffer.length;
87
+ });
167
88
  }
168
89
  /** Graceful shutdown */
169
90
  stop() {
@@ -178,25 +99,56 @@ export class WsSender {
178
99
  isConnected() {
179
100
  return this.connected;
180
101
  }
181
- /** Flush buffered events on reconnect */
182
- flushBuffer(ws) {
183
- if (this.eventBuffer.length === 0)
102
+ /** Handle incoming WS message (async for zstd decompression) */
103
+ async handleMessage(ws, data) {
104
+ const msg = await this.decodeMessage(data);
105
+ if (!msg)
184
106
  return;
185
- const count = this.eventBuffer.length;
186
- cloudLog.info('Flushing buffered events', { count });
187
- while (this.eventBuffer.length > 0) {
188
- const event = this.eventBuffer.shift();
189
- if (!event)
190
- break;
191
- try {
192
- ws.send(JSON.stringify(event));
193
- }
194
- catch {
195
- // Re-buffer remaining events
196
- this.eventBuffer.unshift(event);
197
- break;
198
- }
107
+ if (msg.type === 'ping') {
108
+ await this.sendBinary(ws, { type: 'pong' });
109
+ return;
110
+ }
111
+ if (msg.type === 'pong')
112
+ return;
113
+ if (msg.type === 'handshake_ack') {
114
+ cloudLog.debug('Handshake acknowledged');
115
+ return;
116
+ }
117
+ if (this.onCommand &&
118
+ this.config.remoteCommands &&
119
+ msg.type === 'command' &&
120
+ msg.action &&
121
+ msg.id) {
122
+ this.onCommand(msg);
123
+ }
124
+ }
125
+ /** Encode and send as zstd(msgpack) binary frame */
126
+ async sendBinary(ws, data) {
127
+ ws.send(await Bun.zstdCompress(pack(data)));
128
+ }
129
+ /** Decode incoming message — supports zstd+msgpack, plain msgpack, and JSON (text) */
130
+ decodeMessage(data) {
131
+ if (data instanceof ArrayBuffer) {
132
+ return this.decodeBinary(Buffer.from(data));
133
+ }
134
+ if (typeof data === 'string') {
135
+ return Promise.resolve(JSON.parse(data));
136
+ }
137
+ if (data instanceof Buffer) {
138
+ return this.decodeBinary(data);
139
+ }
140
+ return Promise.resolve(null);
141
+ }
142
+ /** Decode binary buffer — auto-detect zstd (magic bytes 28 b5 2f fd) vs plain msgpack */
143
+ async decodeBinary(buf) {
144
+ if (buf.length >= 4 &&
145
+ buf[0] === 0x28 &&
146
+ buf[1] === 0xb5 &&
147
+ buf[2] === 0x2f &&
148
+ buf[3] === 0xfd) {
149
+ return unpack(Buffer.from(await Bun.zstdDecompress(buf)));
199
150
  }
151
+ return unpack(buf);
200
152
  }
201
153
  /** Clean up socket handlers and close */
202
154
  cleanup() {
@@ -216,7 +168,6 @@ export class WsSender {
216
168
  scheduleReconnect() {
217
169
  if (this.stopped)
218
170
  return;
219
- // Prevent duplicate reconnect timers
220
171
  if (this.reconnectTimer)
221
172
  return;
222
173
  const jitter = Math.random() * 1000;
@@ -1 +1 @@
1
- {"version":3,"file":"wsSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,MAAM,OAAO,QAAQ;IAcA;IACA;IAdX,EAAE,GAAqB,IAAI,CAAC;IAC5B,cAAc,GAAG,IAAI,CAAC;IACb,iBAAiB,GAAG,MAAM,CAAC;IACpC,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,KAAK,CAAC;IAClB,cAAc,GAAyC,IAAI,CAAC;IAEpE,gDAAgD;IAC/B,WAAW,GAAiB,EAAE,CAAC;IAExC,SAAS,GAAyC,IAAI,CAAC;IAE/D,YACmB,MAAmB,EACnB,UAAkB;QADlB,WAAM,GAAN,MAAM,CAAa;QACnB,eAAU,GAAV,UAAU,CAAQ;IAClC,CAAC;IAEJ,uDAAuD;IACvD,iBAAiB,CAAC,OAAoC;QACpD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,OAAO;QACL,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,2CAA2C;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE9E,IAAI,EAAa,CAAC;QAClB,IAAI,CAAC;YACH,uFAAuF;YACvF,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE;gBACxB,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC7C,eAAe,EAAE,IAAI,CAAC,UAAU;oBAChC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;iBAC5D;aACqB,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAE5C,oEAAoE;YACpE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,6DAA6D;QAC7D,8EAA8E;QAC9E,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,IAAI,GAAW,CAAC;gBAChB,MAAM,CAAC,GAAY,KAAK,CAAC,IAAI,CAAC;gBAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC1B,GAAG,GAAG,CAAC,CAAC;gBACV,CAAC;qBAAM,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;oBACpC,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;qBAAM,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC;oBAC/B,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;gBAEvD,4DAA4D;gBAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACxB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;gBAED,sDAAsD;gBACtD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAED,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACjC,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBAED,WAAW;gBACX,IACE,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,MAAM,CAAC,cAAc;oBAC1B,GAAG,CAAC,IAAI,KAAK,SAAS;oBACtB,GAAG,CAAC,MAAM;oBACV,GAAG,CAAC,EAAE,EACN,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,GAA8B,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACvC,QAAQ,EAAE,OAAO,KAAK,CAAC,IAAI;oBAC3B,aAAa,EAAE,KAAK,CAAC,IAAI,YAAY,WAAW;oBAChD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACzC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE;YAClB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAiB;QACpB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,6CAA6C;IAC7C,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAExC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gCAAgC;IAChC,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,wBAAwB;IACxB,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,yCAAyC;IACjC,WAAW,CAAC,EAAa;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,MAAM;YAClB,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;gBAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACjC,OAAO;QACb,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,qCAAqC;QACrC,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAE3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClF,CAAC;CACF"}
1
+ {"version":3,"file":"wsSender.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/wsSender.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "2.6.55",
3
+ "version": "2.6.56",
4
4
  "description": "High-performance job queue for Bun & AI agents. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks, native MCP server. Zero external dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",