email sync: API passes full config at enqueue, auto-reconnect on IMAP drops
Sidecar/queue runner no longer needs job-specific context. API server resolves account details, IMAP auth, and user email at enqueue time — all persisted in the job file. Handler reads directly from job meta. Removed "Load account" step. Sync step auto-reconnects up to 10 times when Gmail drops the connection, resuming from saved UIDs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -73,6 +73,12 @@ async function resumeInterruptedJobs() {
|
||||
console.log(`[sidecar:queue] reset interrupted job ${job.id} back to queued`);
|
||||
lanesToKick.add(job.lane);
|
||||
} else if (job.status === 'queued') {
|
||||
// Clear retry delay on restart — no reason to wait after a sidecar restart
|
||||
if (job.retryAt) {
|
||||
job.retryAt = undefined;
|
||||
await writeJob(job);
|
||||
console.log(`[sidecar:queue] cleared retry delay for job ${job.id}`);
|
||||
}
|
||||
lanesToKick.add(job.lane);
|
||||
}
|
||||
}
|
||||
@@ -187,6 +193,7 @@ async function runJob(job: Job) {
|
||||
await writeJob(fresh);
|
||||
} catch (err) {
|
||||
const errorMessage = err instanceof Error ? err.message : String(err);
|
||||
console.error(`[sidecar:queue] step "${step.name}" failed: ${errorMessage}`);
|
||||
step.status = 'failed';
|
||||
step.error = errorMessage;
|
||||
step.completedAt = Date.now();
|
||||
|
||||
Reference in New Issue
Block a user