feat(gateway): complete openclaw phase1 queue parity v2
This commit is contained in:
+46
-6
@@ -205,14 +205,54 @@ export class GatewayServer {
|
||||
sessionBridge: this.sessionBridge,
|
||||
laneQueue: this.laneQueue,
|
||||
resolveQueuePolicy: ({ sessionId, channel }) => {
|
||||
const sessionPolicy = sessionId
|
||||
? this.config.queue?.overrides?.sessions?.[sessionId]
|
||||
: undefined;
|
||||
if (sessionPolicy) {
|
||||
return sessionPolicy;
|
||||
const resolved: Partial<LaneQueueConfig> = {};
|
||||
const channelPolicy = this.config.queue?.overrides?.channels?.[channel];
|
||||
if (channelPolicy) {
|
||||
Object.assign(resolved, channelPolicy);
|
||||
}
|
||||
|
||||
return this.config.queue?.overrides?.channels?.[channel];
|
||||
const configuredSessionPolicy = sessionId
|
||||
? this.config.queue?.overrides?.sessions?.[sessionId]
|
||||
: undefined;
|
||||
if (configuredSessionPolicy) {
|
||||
Object.assign(resolved, configuredSessionPolicy);
|
||||
}
|
||||
|
||||
if (sessionId) {
|
||||
const runtimeMode = this.config.sessionManager.getSessionConfig('ws', sessionId, 'queue.mode');
|
||||
const runtimeCap = this.config.sessionManager.getSessionConfig('ws', sessionId, 'queue.cap');
|
||||
const runtimeOverflow = this.config.sessionManager.getSessionConfig('ws', sessionId, 'queue.overflow');
|
||||
const runtimeDebounce = this.config.sessionManager.getSessionConfig('ws', sessionId, 'queue.debounce_ms');
|
||||
const runtimeSummarize = this.config.sessionManager.getSessionConfig('ws', sessionId, 'queue.summarize_overflow');
|
||||
|
||||
if (runtimeMode && ['collect', 'followup', 'steer', 'steer_backlog', 'interrupt'].includes(runtimeMode)) {
|
||||
resolved.mode = runtimeMode as LaneQueueConfig['mode'];
|
||||
}
|
||||
|
||||
if (runtimeCap) {
|
||||
const cap = Number.parseInt(runtimeCap, 10);
|
||||
if (Number.isFinite(cap) && cap >= 1 && cap <= 1000) {
|
||||
resolved.cap = cap;
|
||||
}
|
||||
}
|
||||
|
||||
if (runtimeOverflow && (runtimeOverflow === 'drop_old' || runtimeOverflow === 'drop_new')) {
|
||||
resolved.overflow = runtimeOverflow;
|
||||
}
|
||||
|
||||
if (runtimeDebounce) {
|
||||
const debounceMs = Number.parseInt(runtimeDebounce, 10);
|
||||
if (Number.isFinite(debounceMs) && debounceMs >= 0 && debounceMs <= 60_000) {
|
||||
resolved.debounceMs = debounceMs;
|
||||
}
|
||||
}
|
||||
|
||||
if (runtimeSummarize === 'true' || runtimeSummarize === 'false') {
|
||||
resolved.summarizeOverflow = runtimeSummarize === 'true';
|
||||
}
|
||||
}
|
||||
|
||||
return resolved;
|
||||
},
|
||||
metrics: this.metrics,
|
||||
sessionManager: this.config.sessionManager,
|
||||
|
||||
Reference in New Issue
Block a user