Handy validation utilities landed in @convex 1.29:
v.object({name: v.string(), age: v.string()})
.pick("name")
.extend({id: v.id("users")})
.partial();
I'll be working on the core API in addition to convex-helpers & components
Grok did a decent job, but to make it more concrete I've built two components to do this.
Workpool - durable functions with steps, suspension until time/event & more
Workpool - general-purpose queues w/ parallelism limits, retry configs, exactly-once execution of onComplete
I feel clever subbing `return await fn()` with `return fn()`
But gotchas don't seem worth it anymore
• Breaks try/catch/finally expectations
• Loses stack trace context
My default is now to always await. Change my mind.
Big updates to the Agent Component:
- Abort an async stream remotely
- Pending, failed, and aborted streamed messages auto-save
- AI SDK v5 support
- Easier to use alongside AI SDK vs. wrapping
- Type-safe custom context passed to tools
- <SmoothText>msg.text</SmoothText>