chore: Enable "curly" rule to avoid single-statement if confusion/errors.

This commit is contained in:
cpojer
2026-01-31 16:19:20 +09:00
parent 009b16fab8
commit 5ceff756e1
1266 changed files with 27871 additions and 9393 deletions

View File

@@ -16,7 +16,9 @@ export function clearSessionQueues(keys: Array<string | undefined>): ClearSessio
for (const key of keys) {
const cleaned = key?.trim();
if (!cleaned || seen.has(cleaned)) continue;
if (!cleaned || seen.has(cleaned)) {
continue;
}
seen.add(cleaned);
clearedKeys.push(cleaned);
followupCleared += clearFollowupQueue(cleaned);

View File

@@ -3,10 +3,14 @@ import { normalizeQueueDropPolicy, normalizeQueueMode } from "./normalize.js";
import type { QueueDropPolicy, QueueMode } from "./types.js";
function parseQueueDebounce(raw?: string): number | undefined {
if (!raw) return undefined;
if (!raw) {
return undefined;
}
try {
const parsed = parseDurationMs(raw.trim(), { defaultUnit: "ms" });
if (!parsed || parsed < 0) return undefined;
if (!parsed || parsed < 0) {
return undefined;
}
return Math.round(parsed);
} catch {
return undefined;
@@ -14,11 +18,17 @@ function parseQueueDebounce(raw?: string): number | undefined {
}
function parseQueueCap(raw?: string): number | undefined {
if (!raw) return undefined;
if (!raw) {
return undefined;
}
const num = Number(raw);
if (!Number.isFinite(num)) return undefined;
if (!Number.isFinite(num)) {
return undefined;
}
const cap = Math.floor(num);
if (cap < 1) return undefined;
if (cap < 1) {
return undefined;
}
return cap;
}
@@ -37,10 +47,14 @@ function parseQueueDirectiveArgs(raw: string): {
} {
let i = 0;
const len = raw.length;
while (i < len && /\s/.test(raw[i])) i += 1;
while (i < len && /\s/.test(raw[i])) {
i += 1;
}
if (raw[i] === ":") {
i += 1;
while (i < len && /\s/.test(raw[i])) i += 1;
while (i < len && /\s/.test(raw[i])) {
i += 1;
}
}
let consumed = i;
let queueMode: QueueMode | undefined;
@@ -54,17 +68,27 @@ function parseQueueDirectiveArgs(raw: string): {
let rawDrop: string | undefined;
let hasOptions = false;
const takeToken = (): string | null => {
if (i >= len) return null;
if (i >= len) {
return null;
}
const start = i;
while (i < len && !/\s/.test(raw[i])) i += 1;
if (start === i) return null;
while (i < len && !/\s/.test(raw[i])) {
i += 1;
}
if (start === i) {
return null;
}
const token = raw.slice(start, i);
while (i < len && /\s/.test(raw[i])) i += 1;
while (i < len && /\s/.test(raw[i])) {
i += 1;
}
return token;
};
while (i < len) {
const token = takeToken();
if (!token) break;
if (!token) {
break;
}
const lowered = token.trim().toLowerCase();
if (lowered === "default" || lowered === "reset" || lowered === "clear") {
queueReset = true;

View File

@@ -14,7 +14,9 @@ export function scheduleFollowupDrain(
runFollowup: (run: FollowupRun) => Promise<void>,
): void {
const queue = FOLLOWUP_QUEUES.get(key);
if (!queue || queue.draining) return;
if (!queue || queue.draining) {
return;
}
queue.draining = true;
void (async () => {
try {
@@ -28,7 +30,9 @@ export function scheduleFollowupDrain(
// Debug: `pnpm test src/auto-reply/reply/queue.collect-routing.test.ts`
if (forceIndividualCollect) {
const next = queue.items.shift();
if (!next) break;
if (!next) {
break;
}
await runFollowup(next);
continue;
}
@@ -55,7 +59,9 @@ export function scheduleFollowupDrain(
if (isCrossChannel) {
forceIndividualCollect = true;
const next = queue.items.shift();
if (!next) break;
if (!next) {
break;
}
await runFollowup(next);
continue;
}
@@ -63,7 +69,9 @@ export function scheduleFollowupDrain(
const items = queue.items.splice(0, queue.items.length);
const summary = buildQueueSummaryPrompt({ state: queue, noun: "message" });
const run = items.at(-1)?.run ?? queue.lastRun;
if (!run) break;
if (!run) {
break;
}
// Preserve originating channel from items when collecting same-channel.
const originatingChannel = items.find((i) => i.originatingChannel)?.originatingChannel;
@@ -96,7 +104,9 @@ export function scheduleFollowupDrain(
const summaryPrompt = buildQueueSummaryPrompt({ state: queue, noun: "message" });
if (summaryPrompt) {
const run = queue.lastRun;
if (!run) break;
if (!run) {
break;
}
await runFollowup({
prompt: summaryPrompt,
run,
@@ -106,7 +116,9 @@ export function scheduleFollowupDrain(
}
const next = queue.items.shift();
if (!next) break;
if (!next) {
break;
}
await runFollowup(next);
}
} catch (err) {

View File

@@ -17,7 +17,9 @@ function isRunAlreadyQueued(
if (messageId) {
return items.some((item) => item.messageId?.trim() === messageId && hasSameRouting(item));
}
if (!allowPromptFallback) return false;
if (!allowPromptFallback) {
return false;
}
return items.some((item) => item.prompt === run.prompt && hasSameRouting(item));
}
@@ -35,7 +37,9 @@ export function enqueueFollowupRun(
isRunAlreadyQueued(item, items, dedupeMode === "prompt");
// Deduplicate: skip if the same message is already queued.
if (shouldSkipQueueItem({ item: run, items: queue.items, dedupe })) return false;
if (shouldSkipQueueItem({ item: run, items: queue.items, dedupe })) {
return false;
}
queue.lastEnqueuedAt = Date.now();
queue.lastRun = run.run;
@@ -44,7 +48,9 @@ export function enqueueFollowupRun(
queue,
summarize: (item) => item.summaryLine?.trim() || item.prompt.trim(),
});
if (!shouldEnqueue) return false;
if (!shouldEnqueue) {
return false;
}
queue.items.push(run);
return true;
@@ -52,8 +58,12 @@ export function enqueueFollowupRun(
export function getFollowupQueueDepth(key: string): number {
const cleaned = key.trim();
if (!cleaned) return 0;
if (!cleaned) {
return 0;
}
const queue = FOLLOWUP_QUEUES.get(cleaned);
if (!queue) return 0;
if (!queue) {
return 0;
}
return queue.items.length;
}

View File

@@ -1,25 +1,44 @@
import type { QueueDropPolicy, QueueMode } from "./types.js";
export function normalizeQueueMode(raw?: string): QueueMode | undefined {
if (!raw) return undefined;
if (!raw) {
return undefined;
}
const cleaned = raw.trim().toLowerCase();
if (cleaned === "queue" || cleaned === "queued") return "steer";
if (cleaned === "interrupt" || cleaned === "interrupts" || cleaned === "abort")
if (cleaned === "queue" || cleaned === "queued") {
return "steer";
}
if (cleaned === "interrupt" || cleaned === "interrupts" || cleaned === "abort") {
return "interrupt";
if (cleaned === "steer" || cleaned === "steering") return "steer";
if (cleaned === "followup" || cleaned === "follow-ups" || cleaned === "followups")
}
if (cleaned === "steer" || cleaned === "steering") {
return "steer";
}
if (cleaned === "followup" || cleaned === "follow-ups" || cleaned === "followups") {
return "followup";
if (cleaned === "collect" || cleaned === "coalesce") return "collect";
if (cleaned === "steer+backlog" || cleaned === "steer-backlog" || cleaned === "steer_backlog")
}
if (cleaned === "collect" || cleaned === "coalesce") {
return "collect";
}
if (cleaned === "steer+backlog" || cleaned === "steer-backlog" || cleaned === "steer_backlog") {
return "steer-backlog";
}
return undefined;
}
export function normalizeQueueDropPolicy(raw?: string): QueueDropPolicy | undefined {
if (!raw) return undefined;
if (!raw) {
return undefined;
}
const cleaned = raw.trim().toLowerCase();
if (cleaned === "old" || cleaned === "oldest") return "old";
if (cleaned === "new" || cleaned === "newest") return "new";
if (cleaned === "summarize" || cleaned === "summary") return "summarize";
if (cleaned === "old" || cleaned === "oldest") {
return "old";
}
if (cleaned === "new" || cleaned === "newest") {
return "new";
}
if (cleaned === "summarize" || cleaned === "summary") {
return "summarize";
}
return undefined;
}

View File

@@ -13,13 +13,17 @@ function resolveChannelDebounce(
byChannel: InboundDebounceByProvider | undefined,
channelKey: string | undefined,
): number | undefined {
if (!channelKey || !byChannel) return undefined;
if (!channelKey || !byChannel) {
return undefined;
}
const value = byChannel[channelKey];
return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : undefined;
}
function resolvePluginDebounce(channelKey: string | undefined): number | undefined {
if (!channelKey) return undefined;
if (!channelKey) {
return undefined;
}
const plugin = getChannelPlugin(channelKey);
const value = plugin?.defaults?.queue?.debounceMs;
return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : undefined;

View File

@@ -58,9 +58,13 @@ export function getFollowupQueue(key: string, settings: QueueSettings): Followup
export function clearFollowupQueue(key: string): number {
const cleaned = key.trim();
if (!cleaned) return 0;
if (!cleaned) {
return 0;
}
const queue = FOLLOWUP_QUEUES.get(cleaned);
if (!queue) return 0;
if (!queue) {
return 0;
}
const cleared = queue.items.length + queue.droppedCount;
queue.items.length = 0;
queue.droppedCount = 0;