pipeline: uniform column headers, auto-process queue toggle, reopen → inbox
Build and Push Docker Image / build (push) Successful in 4m3s

column headers are now a fixed three-row layout (title / subtitle / button
row). every column always reserves all three rows so headers line up
regardless of contents; actions render disabled when their column is
empty instead of disappearing, which keeps the header height stable as
state changes.

the processing column gets a new "Auto-process Queue" checkbox that
mirrors the inbox's "Auto-process Inbox" toggle. backend adds an
auto_process_queue config, a maybeStartQueueProcessor() helper, a
POST /api/settings/auto-process-queue endpoint, and a hook in
enqueueAudioJob so approvals drain the queue hands-off when the toggle
is on.

reopen-all and per-item reopen now send items to the Inbox (sorted=0)
instead of back to Review. the done column's label and tooltip become
"← Back to inbox" to match, and the clear button moves to the right
slot so the header pattern (left=backward, right=forward) stays
consistent across columns.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 21:57:13 +02:00
parent a21bcefb54
commit 0fd3624d9f
14 changed files with 186 additions and 81 deletions
+18
View File
@@ -137,6 +137,24 @@ app.post("/auto-processing", async (c) => {
return c.json({ ok: true, enabled: false });
});
// Toggle the auto-process-queue flag. When flipped on, kick the queue
// processor so any already-pending jobs start draining immediately without
// waiting for the next approval to trigger it.
app.post("/auto-process-queue", async (c) => {
const body = await c.req.json<{ enabled?: unknown }>().catch(() => ({ enabled: null }));
if (typeof body.enabled !== "boolean") {
return c.json({ ok: false, error: "enabled must be a boolean" }, 400);
}
setConfig("auto_process_queue", body.enabled ? "1" : "0");
if (body.enabled) {
const { maybeStartQueueProcessor } = await import("./execute");
const started = maybeStartQueueProcessor();
return c.json({ ok: true, enabled: true, started });
}
return c.json({ ok: true, enabled: false });
});
app.get("/schedule", (c) => {
return c.json(getScheduleConfig());
});