@automagik/omni 2.260703.2 → 2.260703.3
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.
- package/db/drizzle/0037_message_debounce_max_wait.sql +22 -0
- package/db/drizzle/meta/_journal.json +7 -0
- package/dist/commands/instances.d.ts.map +1 -1
- package/dist/index.js +14 -7
- package/dist/sdk/types.generated.d.ts +27 -9
- package/dist/sdk/types.generated.d.ts.map +1 -1
- package/dist/server/index.js +60 -18
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -23404,11 +23404,12 @@ var init_agent_route = __esm(() => {
|
|
|
23404
23404
|
agentGateEnabled: exports_external.boolean().nullable(),
|
|
23405
23405
|
agentGateModel: exports_external.string().max(120).nullable(),
|
|
23406
23406
|
agentGatePrompt: exports_external.string().nullable(),
|
|
23407
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable(),
|
|
23407
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).nullable(),
|
|
23408
23408
|
messageDebounceMinMs: exports_external.number().int().nonnegative().nullable(),
|
|
23409
23409
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().nullable(),
|
|
23410
23410
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().nullable(),
|
|
23411
23411
|
messageDebounceRestartOnTyping: exports_external.boolean().nullable(),
|
|
23412
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().nullable(),
|
|
23412
23413
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable(),
|
|
23413
23414
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().nullable(),
|
|
23414
23415
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().nullable(),
|
|
@@ -23439,11 +23440,12 @@ var init_agent_route = __esm(() => {
|
|
|
23439
23440
|
agentGateEnabled: exports_external.boolean().optional(),
|
|
23440
23441
|
agentGateModel: exports_external.string().max(120).optional(),
|
|
23441
23442
|
agentGatePrompt: exports_external.string().optional(),
|
|
23442
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional(),
|
|
23443
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).optional(),
|
|
23443
23444
|
messageDebounceMinMs: exports_external.number().int().nonnegative().optional(),
|
|
23444
23445
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().optional(),
|
|
23445
23446
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().optional(),
|
|
23446
23447
|
messageDebounceRestartOnTyping: exports_external.boolean().optional(),
|
|
23448
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().optional(),
|
|
23447
23449
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional(),
|
|
23448
23450
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().optional(),
|
|
23449
23451
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().optional(),
|
|
@@ -23473,11 +23475,12 @@ var init_agent_route = __esm(() => {
|
|
|
23473
23475
|
agentGateEnabled: exports_external.boolean().optional().nullable(),
|
|
23474
23476
|
agentGateModel: exports_external.string().max(120).optional().nullable(),
|
|
23475
23477
|
agentGatePrompt: exports_external.string().optional().nullable(),
|
|
23476
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional().nullable(),
|
|
23478
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).optional().nullable(),
|
|
23477
23479
|
messageDebounceMinMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
23478
23480
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
23479
23481
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
23480
23482
|
messageDebounceRestartOnTyping: exports_external.boolean().optional().nullable(),
|
|
23483
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
23481
23484
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional().nullable(),
|
|
23482
23485
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
23483
23486
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().optional().nullable(),
|
|
@@ -225291,7 +225294,7 @@ var init_sentry_scrub = __esm(() => {
|
|
|
225291
225294
|
var require_package7 = __commonJS((exports, module) => {
|
|
225292
225295
|
module.exports = {
|
|
225293
225296
|
name: "@omni/api",
|
|
225294
|
-
version: "2.260703.
|
|
225297
|
+
version: "2.260703.3",
|
|
225295
225298
|
type: "module",
|
|
225296
225299
|
exports: {
|
|
225297
225300
|
".": {
|
|
@@ -277533,7 +277536,7 @@ var init_schema2 = __esm(() => {
|
|
|
277533
277536
|
agentTypes = ["agent", "team", "workflow"];
|
|
277534
277537
|
agentSystems = ["claude", "agno", "openai", "gemini", "custom", "omni-internal"];
|
|
277535
277538
|
agentEntityTypes = ["assistant", "workflow", "team", "tool"];
|
|
277536
|
-
debounceMode = ["disabled", "fixed", "randomized"];
|
|
277539
|
+
debounceMode = ["disabled", "fixed", "randomized", "presence"];
|
|
277537
277540
|
splitDelayMode = ["disabled", "fixed", "randomized"];
|
|
277538
277541
|
replyFilterMode = ["all", "filtered"];
|
|
277539
277542
|
agentSessionStrategies = ["per_user", "per_chat", "per_thread"];
|
|
@@ -277669,6 +277672,7 @@ var init_schema2 = __esm(() => {
|
|
|
277669
277672
|
messageDebounceMaxMs: integer("message_debounce_max_ms"),
|
|
277670
277673
|
messageDebounceGroupMs: integer("message_debounce_group_ms"),
|
|
277671
277674
|
messageDebounceRestartOnTyping: boolean("message_debounce_restart_on_typing"),
|
|
277675
|
+
messageDebounceMaxWaitMs: integer("message_debounce_max_wait_ms"),
|
|
277672
277676
|
messageSplitDelayMode: varchar("message_split_delay_mode", { length: 20 }).$type(),
|
|
277673
277677
|
messageSplitDelayFixedMs: integer("message_split_delay_fixed_ms"),
|
|
277674
277678
|
messageSplitDelayMinMs: integer("message_split_delay_min_ms"),
|
|
@@ -277822,6 +277826,7 @@ var init_schema2 = __esm(() => {
|
|
|
277822
277826
|
messageDebounceGroupMs: integer("message_debounce_group_ms"),
|
|
277823
277827
|
messageDebounceMaxMs: integer("message_debounce_max_ms").notNull().default(0),
|
|
277824
277828
|
messageDebounceRestartOnTyping: boolean("message_debounce_restart_on_typing").notNull().default(false),
|
|
277829
|
+
messageDebounceMaxWaitMs: integer("message_debounce_max_wait_ms"),
|
|
277825
277830
|
agentGateEnabled: boolean("agent_gate_enabled").notNull().default(false),
|
|
277826
277831
|
agentGateModel: varchar("agent_gate_model", { length: 120 }),
|
|
277827
277832
|
agentGatePrompt: text("agent_gate_prompt"),
|
|
@@ -337464,9 +337469,12 @@ class MessageDebouncer {
|
|
|
337464
337469
|
buffers = new Map;
|
|
337465
337470
|
timers = new Map;
|
|
337466
337471
|
inFlight = new Set;
|
|
337472
|
+
firstBufferedAt = new Map;
|
|
337467
337473
|
onFlush;
|
|
337468
|
-
|
|
337474
|
+
now;
|
|
337475
|
+
constructor(onFlush, now = Date.now) {
|
|
337469
337476
|
this.onFlush = onFlush;
|
|
337477
|
+
this.now = now;
|
|
337470
337478
|
}
|
|
337471
337479
|
getChatKey(instanceId, chatId) {
|
|
337472
337480
|
return `${instanceId}:${chatId}`;
|
|
@@ -337476,6 +337484,8 @@ class MessageDebouncer {
|
|
|
337476
337484
|
const buffer3 = this.buffers.get(chatKey) ?? [];
|
|
337477
337485
|
buffer3.push(message2);
|
|
337478
337486
|
this.buffers.set(chatKey, buffer3);
|
|
337487
|
+
if (!this.firstBufferedAt.has(chatKey))
|
|
337488
|
+
this.firstBufferedAt.set(chatKey, this.now());
|
|
337479
337489
|
if (this.inFlight.has(chatKey))
|
|
337480
337490
|
return;
|
|
337481
337491
|
this.restartTimer(chatKey, config4);
|
|
@@ -337484,14 +337494,16 @@ class MessageDebouncer {
|
|
|
337484
337494
|
const chatKey = this.getChatKey(instanceId, chatId);
|
|
337485
337495
|
if (this.inFlight.has(chatKey))
|
|
337486
337496
|
return;
|
|
337487
|
-
|
|
337497
|
+
const restarts = config4.restartOnTyping || config4.mode === "presence";
|
|
337498
|
+
if (restarts && this.buffers.has(chatKey)) {
|
|
337488
337499
|
log97.debug("Restarting debounce timer on user typing", { chatKey });
|
|
337489
337500
|
this.restartTimer(chatKey, config4, true);
|
|
337490
337501
|
}
|
|
337491
337502
|
}
|
|
337492
337503
|
restartTimer(chatKey, config4, force = false) {
|
|
337493
337504
|
const existing = this.timers.get(chatKey);
|
|
337494
|
-
|
|
337505
|
+
const fixedWindow = config4.mode === "fixed" || config4.mode === "presence";
|
|
337506
|
+
if (fixedWindow && existing && !force)
|
|
337495
337507
|
return;
|
|
337496
337508
|
if (existing)
|
|
337497
337509
|
clearTimeout(existing);
|
|
@@ -337501,6 +337513,7 @@ class MessageDebouncer {
|
|
|
337501
337513
|
delay2 = 0;
|
|
337502
337514
|
break;
|
|
337503
337515
|
case "fixed":
|
|
337516
|
+
case "presence":
|
|
337504
337517
|
delay2 = config4.minMs;
|
|
337505
337518
|
break;
|
|
337506
337519
|
case "randomized":
|
|
@@ -337509,14 +337522,25 @@ class MessageDebouncer {
|
|
|
337509
337522
|
default:
|
|
337510
337523
|
delay2 = 0;
|
|
337511
337524
|
}
|
|
337525
|
+
delay2 = this.applyMaxWaitCap(chatKey, config4, delay2);
|
|
337512
337526
|
const timer2 = setTimeout(() => this.flush(chatKey), delay2);
|
|
337513
337527
|
this.timers.set(chatKey, timer2);
|
|
337514
337528
|
}
|
|
337529
|
+
applyMaxWaitCap(chatKey, config4, delay2) {
|
|
337530
|
+
if (config4.maxWaitMs == null || config4.maxWaitMs <= 0)
|
|
337531
|
+
return delay2;
|
|
337532
|
+
const firstAt = this.firstBufferedAt.get(chatKey);
|
|
337533
|
+
if (firstAt == null)
|
|
337534
|
+
return delay2;
|
|
337535
|
+
const remaining = firstAt + config4.maxWaitMs - this.now();
|
|
337536
|
+
return Math.max(0, Math.min(delay2, remaining));
|
|
337537
|
+
}
|
|
337515
337538
|
async flush(chatKey) {
|
|
337516
337539
|
const messages4 = this.buffers.get(chatKey);
|
|
337517
337540
|
const timer2 = this.timers.get(chatKey);
|
|
337518
337541
|
this.buffers.delete(chatKey);
|
|
337519
337542
|
this.timers.delete(chatKey);
|
|
337543
|
+
this.firstBufferedAt.delete(chatKey);
|
|
337520
337544
|
if (timer2)
|
|
337521
337545
|
clearTimeout(timer2);
|
|
337522
337546
|
if (!messages4?.length)
|
|
@@ -337534,11 +337558,20 @@ class MessageDebouncer {
|
|
|
337534
337558
|
}
|
|
337535
337559
|
}
|
|
337536
337560
|
}
|
|
337561
|
+
async flushAll() {
|
|
337562
|
+
const chatKeys = [...this.buffers.keys()];
|
|
337563
|
+
await Promise.all(chatKeys.map((chatKey) => this.flush(chatKey)));
|
|
337564
|
+
for (const timer2 of this.timers.values())
|
|
337565
|
+
clearTimeout(timer2);
|
|
337566
|
+
this.timers.clear();
|
|
337567
|
+
this.firstBufferedAt.clear();
|
|
337568
|
+
}
|
|
337537
337569
|
clear() {
|
|
337538
337570
|
for (const timer2 of this.timers.values())
|
|
337539
337571
|
clearTimeout(timer2);
|
|
337540
337572
|
this.buffers.clear();
|
|
337541
337573
|
this.timers.clear();
|
|
337574
|
+
this.firstBufferedAt.clear();
|
|
337542
337575
|
this.inFlight.clear();
|
|
337543
337576
|
}
|
|
337544
337577
|
}
|
|
@@ -338413,12 +338446,15 @@ class ReactionDedup {
|
|
|
338413
338446
|
}
|
|
338414
338447
|
}
|
|
338415
338448
|
function getDebounceConfig(instance4) {
|
|
338449
|
+
const mode = instance4.messageDebounceMode ?? "disabled";
|
|
338450
|
+
const isPresence = mode === "presence";
|
|
338416
338451
|
return {
|
|
338417
|
-
mode
|
|
338418
|
-
minMs: instance4.messageDebounceMinMs
|
|
338452
|
+
mode,
|
|
338453
|
+
minMs: instance4.messageDebounceMinMs || (isPresence ? PRESENCE_DEFAULT_MIN_MS : 0),
|
|
338419
338454
|
maxMs: instance4.messageDebounceMaxMs ?? 0,
|
|
338420
|
-
restartOnTyping: instance4.messageDebounceRestartOnTyping ?? false,
|
|
338421
|
-
groupMs: instance4.messageDebounceGroupMs
|
|
338455
|
+
restartOnTyping: isPresence ? true : instance4.messageDebounceRestartOnTyping ?? false,
|
|
338456
|
+
groupMs: instance4.messageDebounceGroupMs,
|
|
338457
|
+
maxWaitMs: instance4.messageDebounceMaxWaitMs ?? (isPresence ? PRESENCE_DEFAULT_MAX_WAIT_MS : null)
|
|
338422
338458
|
};
|
|
338423
338459
|
}
|
|
338424
338460
|
function buildSlackMessageContext(rawPayload, text3) {
|
|
@@ -340514,6 +340550,7 @@ function mergeRouteOverrides(instance4, route) {
|
|
|
340514
340550
|
messageDebounceMaxMs: route.messageDebounceMaxMs ?? instance4.messageDebounceMaxMs,
|
|
340515
340551
|
messageDebounceGroupMs: route.messageDebounceGroupMs ?? instance4.messageDebounceGroupMs,
|
|
340516
340552
|
messageDebounceRestartOnTyping: route.messageDebounceRestartOnTyping ?? instance4.messageDebounceRestartOnTyping,
|
|
340553
|
+
messageDebounceMaxWaitMs: route.messageDebounceMaxWaitMs ?? instance4.messageDebounceMaxWaitMs,
|
|
340517
340554
|
messageSplitDelayMode: route.messageSplitDelayMode ?? instance4.messageSplitDelayMode,
|
|
340518
340555
|
messageSplitDelayFixedMs: route.messageSplitDelayFixedMs ?? instance4.messageSplitDelayFixedMs,
|
|
340519
340556
|
messageSplitDelayMinMs: route.messageSplitDelayMinMs ?? instance4.messageSplitDelayMinMs,
|
|
@@ -341282,7 +341319,7 @@ async function setupAgentDispatcher(eventBus, services, db2) {
|
|
|
341282
341319
|
return async () => {
|
|
341283
341320
|
log99.info("Shutting down agent dispatcher");
|
|
341284
341321
|
clearInterval(mediaCleanupInterval);
|
|
341285
|
-
debouncer.
|
|
341322
|
+
await debouncer.flushAll();
|
|
341286
341323
|
for (const [mediaId, pending] of mediaCompletions.entries()) {
|
|
341287
341324
|
pending.reject(new Error("dispatcher shutting down"));
|
|
341288
341325
|
mediaCompletions.delete(mediaId);
|
|
@@ -341326,7 +341363,7 @@ async function setupAgentDispatcher(eventBus, services, db2) {
|
|
|
341326
341363
|
log99.info("Agent dispatcher shutdown complete");
|
|
341327
341364
|
};
|
|
341328
341365
|
}
|
|
341329
|
-
var import_api32, log99, agentDispatchLimiter, _natsGenieProviderCtor, QUOTED_MESSAGE_MAX_CHARS = 4000, DM_HISTORY_LIMIT = 20, LIFECYCLE_PREVIEW_MAX_CHARS = 160, LIFECYCLE_SENSITIVE_KEY_PARTS, DEFAULT_DISPATCH_ERROR_MESSAGE = "\u26A0\uFE0F Sorry, I ran into an issue processing your message. Please try again.", DEFAULT_ERROR_HANDOFF_MESSAGE = "T\xF4 com um probleminha t\xE9cnico aqui agora. Logo algu\xE9m do time vai entrar em contato com voc\xEA.", TRANSIENT_DISPATCH_ERROR_PATTERNS, TRANSIENT_DISPATCH_RETRY_DELAYS_MS, CHANNEL_MESSAGE_LIMITS, DEFAULT_MESSAGE_LIMIT = 4000, MEDIA_BASE_PATH3, MEDIA_ICONS, MEDIA_WAIT_NULL, mediaCompletions, mediaResultCache, MEDIA_WAIT_TIMEOUT_MS = 30000, DEFAULT_SEND_MEDIA_PATH_TYPES, BOT_PREFIX = "\uD83E\uDD16 ", activeStreams, sessionActivityStore, PROC_REACT_START, PROC_REACT_DONE = "\u2705", providerCache, openclawClientPool, nullFilterWarnedInstances, ACTIVE_OWNER_IDENTIFIER_CACHE_TTL_MS = 1e4, cachedActiveOwnerIdentifiers = null, cachedActiveOwnerIdentifiersAt = 0, DEFAULT_GATE_MODEL = "gemini-3-flash-preview", GATE_TIMEOUT_MS = 3000, setupAgentResponder;
|
|
341366
|
+
var import_api32, log99, agentDispatchLimiter, _natsGenieProviderCtor, QUOTED_MESSAGE_MAX_CHARS = 4000, DM_HISTORY_LIMIT = 20, LIFECYCLE_PREVIEW_MAX_CHARS = 160, LIFECYCLE_SENSITIVE_KEY_PARTS, PRESENCE_DEFAULT_MIN_MS = 5000, PRESENCE_DEFAULT_MAX_WAIT_MS = 30000, DEFAULT_DISPATCH_ERROR_MESSAGE = "\u26A0\uFE0F Sorry, I ran into an issue processing your message. Please try again.", DEFAULT_ERROR_HANDOFF_MESSAGE = "T\xF4 com um probleminha t\xE9cnico aqui agora. Logo algu\xE9m do time vai entrar em contato com voc\xEA.", TRANSIENT_DISPATCH_ERROR_PATTERNS, TRANSIENT_DISPATCH_RETRY_DELAYS_MS, CHANNEL_MESSAGE_LIMITS, DEFAULT_MESSAGE_LIMIT = 4000, MEDIA_BASE_PATH3, MEDIA_ICONS, MEDIA_WAIT_NULL, mediaCompletions, mediaResultCache, MEDIA_WAIT_TIMEOUT_MS = 30000, DEFAULT_SEND_MEDIA_PATH_TYPES, BOT_PREFIX = "\uD83E\uDD16 ", activeStreams, sessionActivityStore, PROC_REACT_START, PROC_REACT_DONE = "\u2705", providerCache, openclawClientPool, nullFilterWarnedInstances, ACTIVE_OWNER_IDENTIFIER_CACHE_TTL_MS = 1e4, cachedActiveOwnerIdentifiers = null, cachedActiveOwnerIdentifiersAt = 0, DEFAULT_GATE_MODEL = "gemini-3-flash-preview", GATE_TIMEOUT_MS = 3000, setupAgentResponder;
|
|
341330
341367
|
var init_agent_dispatcher = __esm(() => {
|
|
341331
341368
|
init_src2();
|
|
341332
341369
|
init_src();
|
|
@@ -341640,6 +341677,7 @@ class RouteService {
|
|
|
341640
341677
|
messageDebounceMaxMs: data.messageDebounceMaxMs ?? null,
|
|
341641
341678
|
messageDebounceGroupMs: data.messageDebounceGroupMs ?? null,
|
|
341642
341679
|
messageDebounceRestartOnTyping: data.messageDebounceRestartOnTyping ?? null,
|
|
341680
|
+
messageDebounceMaxWaitMs: data.messageDebounceMaxWaitMs ?? null,
|
|
341643
341681
|
messageSplitDelayMode: data.messageSplitDelayMode ?? null,
|
|
341644
341682
|
messageSplitDelayFixedMs: data.messageSplitDelayFixedMs ?? null,
|
|
341645
341683
|
messageSplitDelayMinMs: data.messageSplitDelayMinMs ?? null,
|
|
@@ -345227,11 +345265,12 @@ var init_agent_routes = __esm(() => {
|
|
|
345227
345265
|
agentGateEnabled: exports_external.boolean().nullable().openapi({ description: "Response gate enabled override" }),
|
|
345228
345266
|
agentGateModel: exports_external.string().max(120).nullable().openapi({ description: "Response gate model override" }),
|
|
345229
345267
|
agentGatePrompt: exports_external.string().nullable().openapi({ description: "Response gate prompt override" }),
|
|
345230
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable().openapi({ description: "Debounce mode override" }),
|
|
345268
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).nullable().openapi({ description: "Debounce mode override" }),
|
|
345231
345269
|
messageDebounceMinMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Debounce min delay (ms) override" }),
|
|
345232
345270
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Debounce max delay (ms) override" }),
|
|
345233
345271
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Debounce group chat delay (ms) override" }),
|
|
345234
345272
|
messageDebounceRestartOnTyping: exports_external.boolean().nullable().openapi({ description: "Restart debounce on typing override" }),
|
|
345273
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Presence-mode hard cap (ms) override; null = no cap" }),
|
|
345235
345274
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable().openapi({ description: "Split delay mode override" }),
|
|
345236
345275
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Split delay fixed (ms) override" }),
|
|
345237
345276
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().nullable().openapi({ description: "Split delay min (ms) override" }),
|
|
@@ -345262,11 +345301,12 @@ var init_agent_routes = __esm(() => {
|
|
|
345262
345301
|
agentGateEnabled: exports_external.boolean().optional().openapi({ description: "Enable LLM response gate" }),
|
|
345263
345302
|
agentGateModel: exports_external.string().max(120).optional().openapi({ description: "Response gate model" }),
|
|
345264
345303
|
agentGatePrompt: exports_external.string().optional().openapi({ description: "Response gate prompt" }),
|
|
345265
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional().openapi({ description: "Debounce mode" }),
|
|
345304
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).optional().openapi({ description: "Debounce mode" }),
|
|
345266
345305
|
messageDebounceMinMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Debounce min delay (ms)" }),
|
|
345267
345306
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Debounce max delay (ms)" }),
|
|
345268
345307
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Debounce group chat delay (ms)" }),
|
|
345269
345308
|
messageDebounceRestartOnTyping: exports_external.boolean().optional().openapi({ description: "Restart debounce on typing" }),
|
|
345309
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Presence-mode hard cap (ms); null = no cap" }),
|
|
345270
345310
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).optional().openapi({ description: "Split delay mode" }),
|
|
345271
345311
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Split delay fixed (ms)" }),
|
|
345272
345312
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().optional().openapi({ description: "Split delay min (ms)" }),
|
|
@@ -345292,11 +345332,12 @@ var init_agent_routes = __esm(() => {
|
|
|
345292
345332
|
agentGateEnabled: exports_external.boolean().nullable().optional().openapi({ description: "Enable LLM response gate" }),
|
|
345293
345333
|
agentGateModel: exports_external.string().max(120).nullable().optional().openapi({ description: "Response gate model" }),
|
|
345294
345334
|
agentGatePrompt: exports_external.string().nullable().optional().openapi({ description: "Response gate prompt" }),
|
|
345295
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable().optional().openapi({ description: "Debounce mode" }),
|
|
345335
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).nullable().optional().openapi({ description: "Debounce mode" }),
|
|
345296
345336
|
messageDebounceMinMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Debounce min delay (ms)" }),
|
|
345297
345337
|
messageDebounceMaxMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Debounce max delay (ms)" }),
|
|
345298
345338
|
messageDebounceGroupMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Debounce group chat delay (ms)" }),
|
|
345299
345339
|
messageDebounceRestartOnTyping: exports_external.boolean().nullable().optional().openapi({ description: "Restart debounce on typing" }),
|
|
345340
|
+
messageDebounceMaxWaitMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Presence-mode hard cap (ms); null = no cap" }),
|
|
345300
345341
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).nullable().optional().openapi({ description: "Split delay mode" }),
|
|
345301
345342
|
messageSplitDelayFixedMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Split delay fixed (ms)" }),
|
|
345302
345343
|
messageSplitDelayMinMs: exports_external.number().int().nonnegative().nullable().optional().openapi({ description: "Split delay min (ms)" }),
|
|
@@ -353712,11 +353753,12 @@ var init_instances3 = __esm(() => {
|
|
|
353712
353753
|
agentWaitForMedia: exports_external.boolean().default(true).describe("Wait for media processing before dispatching to agent"),
|
|
353713
353754
|
agentSendMediaPath: exports_external.boolean().default(true).describe("Include file path in formatted media text sent to agent"),
|
|
353714
353755
|
agentSendMediaPathTypes: exports_external.array(exports_external.string()).optional().nullable().describe("Content types that receive file path (e.g. image, video, document). Default: all except audio"),
|
|
353715
|
-
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized"]).default("randomized").describe("Message debounce mode: disabled, fixed delay, or
|
|
353756
|
+
messageDebounceMode: exports_external.enum(["disabled", "fixed", "randomized", "presence"]).default("randomized").describe("Message debounce mode: disabled, fixed delay, randomized delay, or presence (typing-aware)"),
|
|
353716
353757
|
messageDebounceMinMs: exports_external.number().int().min(0).default(0).describe("Minimum debounce delay in milliseconds (0 = no debounce)"),
|
|
353717
353758
|
messageDebounceMaxMs: exports_external.number().int().min(0).default(0).describe("Maximum debounce delay in milliseconds (0 = no debounce)"),
|
|
353718
353759
|
messageDebounceRestartOnTyping: exports_external.boolean().default(false).describe("Restart debounce timer when user is typing"),
|
|
353719
353760
|
messageDebounceGroupMs: exports_external.number().int().min(0).nullable().default(null).describe("Debounce delay for group chats in milliseconds (null = use messageDebounceMinMs)"),
|
|
353761
|
+
messageDebounceMaxWaitMs: exports_external.number().int().min(0).nullable().default(null).describe("Presence-mode hard cap in milliseconds \u2014 flush at firstBuffered + this even under continuous typing (null = no cap)"),
|
|
353720
353762
|
messageSplitDelayMode: exports_external.enum(["disabled", "fixed", "randomized"]).default("randomized").describe("Between-chunk delay when agent responses are split into multiple messages"),
|
|
353721
353763
|
messageSplitDelayFixedMs: exports_external.number().int().min(0).default(0).describe('Fixed delay between split chunks in milliseconds (used when messageSplitDelayMode="fixed")'),
|
|
353722
353764
|
messageSplitDelayMinMs: exports_external.number().int().min(0).default(300).describe('Minimum delay between split chunks in milliseconds (used when messageSplitDelayMode="randomized")'),
|