import Ablo from '@abloatai/ablo';
import { defineSchema, model, z } from '@abloatai/ablo/schema';
const schema = defineSchema({
tasks: model({
title: z.string(),
status: z.enum(['todo', 'doing', 'done']),
}),
});
const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY });
export async function markDone(taskId: string) {
await ablo.ready();
// Acquire the claim; anyone editing the same task queues behind us.
await using claim = await ablo.tasks.claim({ id: taskId, action: 'update' });
if (!claim.data) return { status: 'not_found' };
if (claim.data.status === 'done') return { status: 'noop' };
const updated = await ablo.tasks.update({
id: taskId,
data: { status: 'done' },
wait: 'confirmed',
});
return { status: 'done', task: updated };
// claim auto-releases as this function returns
}