Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
b91d1d4
feat(ai): cursor + chat() resume seam, shared locks capability, CUSTO…
AlemTuzlak Jun 18, 2026
aacddbf
feat(persistence): @tanstack/ai-persistence + SQL core + backends + s…
AlemTuzlak Jun 18, 2026
d2462d6
feat(ai-client): in-session auto-resume
AlemTuzlak Jun 18, 2026
fb45b01
docs(persistence): overview page, ai-persistence skill, changeset, kn…
AlemTuzlak Jun 18, 2026
b141e4b
ci: apply automated fixes
autofix-ci[bot] Jun 18, 2026
d0d8672
feat: finalize ai persistence
AlemTuzlak Jul 2, 2026
fc45b4c
feat: add mysql persistence chat example
AlemTuzlak Jul 3, 2026
3a75f11
fix: quote mysql usage column
AlemTuzlak Jul 3, 2026
0d661c8
feat: add cloudflare r2 artifact persistence
AlemTuzlak Jul 3, 2026
253a2eb
feat: add cloudflare blob persistence primitives
AlemTuzlak Jul 3, 2026
a46c9bc
docs: split persistence guide by scenario
AlemTuzlak Jul 3, 2026
c864d51
feat(persistence): client resume + framework use-chat persistence upd…
AlemTuzlak Jul 3, 2026
17e9b93
feat(sandbox): consume persistence without bridge
AlemTuzlak Jul 6, 2026
8d61c54
feat(persistence): add orm migration CLIs
AlemTuzlak Jul 6, 2026
a4470f5
Merge remote-tracking branch 'origin/main' into feat/persistence
AlemTuzlak Jul 6, 2026
39ce14a
feat(sandbox): persist managed workspace files
AlemTuzlak Jul 6, 2026
6ce5403
fix(ai): tolerate seed messages without parts
AlemTuzlak Jul 6, 2026
276faea
docs(persistence): type-check persistence examples
AlemTuzlak Jul 6, 2026
173fcc5
fix(client): preserve pending interrupts on mount
AlemTuzlak Jul 6, 2026
c94d5b8
ci: apply automated fixes
autofix-ci[bot] Jul 6, 2026
356188b
feat: add generation persistence and resumability
AlemTuzlak Jul 7, 2026
50b2314
ci: apply automated fixes
autofix-ci[bot] Jul 7, 2026
e3d928d
Merge remote-tracking branch 'origin/main' into feat/persistence
AlemTuzlak Jul 8, 2026
e46b990
Merge remote-tracking branch 'origin/feat/persistence' into feat/pers…
AlemTuzlak Jul 8, 2026
174eeb3
fix: address persistence ci failures
AlemTuzlak Jul 8, 2026
52e2b2e
ci: apply automated fixes
autofix-ci[bot] Jul 8, 2026
0271f9a
fix(persistence): default migrations to opt-in
AlemTuzlak Jul 8, 2026
c6cccfa
feat(persistence): add SQL migration CLI docs
AlemTuzlak Jul 8, 2026
9981da4
docs(persistence): reorganize persistence guides
AlemTuzlak Jul 8, 2026
d580018
fix(persistence): document internals and r2 prefixes
AlemTuzlak Jul 8, 2026
bbf2d2a
Use shared base64 utils
tombeckenham Jul 9, 2026
d681407
feat(persistence): split chat and generation middleware
tombeckenham Jul 9, 2026
39ea98f
ci: apply automated fixes
autofix-ci[bot] Jul 9, 2026
d5e8af7
feat: split persistence into state (middleware) + delivery (transport…
AlemTuzlak Jul 9, 2026
f9db0af
refactor(ai)!: group batch under durability option ({ adapter, batch })
AlemTuzlak Jul 9, 2026
d4361b1
Merge origin/main into feat/persistence
AlemTuzlak Jul 10, 2026
61026d5
feat: add persistence and delivery durability
AlemTuzlak Jul 10, 2026
f976890
docs: design full AG-UI interrupt support
AlemTuzlak Jul 13, 2026
d735e85
docs: plan full AG-UI interrupt support
AlemTuzlak Jul 13, 2026
659464a
feat(ai-persistence-drizzle): user-owned schemas via injection + sche…
tombeckenham Jul 14, 2026
f6558ee
feat: implement AG-UI interrupt lifecycle
AlemTuzlak Jul 14, 2026
45d4141
test: allow slow persistence integration setup
AlemTuzlak Jul 14, 2026
b772728
Merge remote-tracking branch 'origin/feat/persistence' into codex/ag-…
AlemTuzlak Jul 14, 2026
004180c
feat(ai-persistence-prisma): renameable models via delegate mapping
tombeckenham Jul 15, 2026
5c766fd
fix: support interrupts without persistence
AlemTuzlak Jul 15, 2026
e5bc7d1
Merge remote-tracking branch 'origin/feat/persistence' into codex/ag-…
AlemTuzlak Jul 15, 2026
0a09c7f
feat: add interrupt testing labs
AlemTuzlak Jul 15, 2026
78d993c
fix: complete interrupt resume workflows
AlemTuzlak Jul 16, 2026
75a53eb
docs: split interrupts into its own section
AlemTuzlak Jul 16, 2026
d3bf2e4
docs: clarify interrupt kinds are pauses, not tool categories
AlemTuzlak Jul 16, 2026
18823d4
docs(interrupts): render examples by looping interrupts, not find+narrow
AlemTuzlak Jul 16, 2026
647ae24
docs: stop presenting client-tool execution as a resolvable interrupt
AlemTuzlak Jul 16, 2026
31111a5
feat(interrupts)!: remove client-tool-execution from the public inter…
AlemTuzlak Jul 16, 2026
bebb982
feat(interrupts): AG-UI interrupt lifecycle (ephemeral), extracted fr…
AlemTuzlak Jul 20, 2026
b9fe7c6
fix: make interrupts build/typecheck/lint/test/docs green (ephemeral-…
AlemTuzlak Jul 20, 2026
2981b2a
fix(interrupts): ephemeral resume wiring + drop persistence-era e2e
AlemTuzlak Jul 20, 2026
0883ecb
ci: apply automated fixes
autofix-ci[bot] Jul 20, 2026
2d26b39
refactor(interrupts): remove persistence residue from ephemeral inter…
jherr Jul 21, 2026
912d006
ci: apply automated fixes
autofix-ci[bot] Jul 21, 2026
47a31e0
chore(interrupts): drop non-interrupt residue from PR surface
tombeckenham Jul 21, 2026
8c4ef83
chore(interrupts): strip test noise and storage unit tests
tombeckenham Jul 21, 2026
3f12314
fix(interrupts): resume race, error surfacing, docs/lab, bound API demos
tombeckenham Jul 21, 2026
3be7e05
refactor(ai-client): drop storage-adapters and persistence controller…
tombeckenham Jul 21, 2026
f06570e
fix(interrupts): resume client tools with history results; fix generi…
tombeckenham Jul 21, 2026
329d67c
Merge origin/main into feat/interrupts-overhaul-slim
tombeckenham Jul 21, 2026
e315591
fix(ai): typecheck after main merge with typed tool-call events
tombeckenham Jul 21, 2026
ab154ff
chore: reset pnpm-lock to main and reinstall for branch deps
tombeckenham Jul 21, 2026
dd0add9
ci: apply automated fixes
autofix-ci[bot] Jul 21, 2026
0868b31
fix: clear knip, lint, and example typecheck after interrupts merge
tombeckenham Jul 21, 2026
948d42f
fix(interrupts): clear resume state after approve; fix e2e approval h…
tombeckenham Jul 21, 2026
ee8fef2
fix(e2e): repair tools-test deny onClick syntax and format
tombeckenham Jul 21, 2026
c54eb33
docs(interrupts): overhaul interrupt guides and strip persistence lef…
AlemTuzlak Jul 21, 2026
0a89e8b
Fixed hyphen
tombeckenham Jul 21, 2026
a20e904
fix(ai): restore tool-call output after MESSAGES_SNAPSHOT
tombeckenham Jul 21, 2026
300efdc
test(ai): expect tool-call complete+output after snapshot anchor
tombeckenham Jul 21, 2026
39d2037
fix(ai): satisfy no-unnecessary-condition in snapshot enrichment
tombeckenham Jul 21, 2026
76cd05a
ci: apply automated fixes
autofix-ci[bot] Jul 21, 2026
02a6d01
docs(interrupts): show error/recovery handling with a real component
AlemTuzlak Jul 21, 2026
20c4379
docs(interrupts): show how the server consumes the approval decision
AlemTuzlak Jul 21, 2026
1a45db4
refactor(interrupts): app owns wire-schema validation; drop ajv and @…
AlemTuzlak Jul 21, 2026
d9ba452
example(ts-react-chat): rebuild interrupt playground as a wildlife sa…
AlemTuzlak Jul 21, 2026
dd7eddd
fix(interrupts): recover a denied approval on ephemeral resume
AlemTuzlak Jul 21, 2026
77d564b
example(ts-react-chat): real animal photos + interrupt transparency
AlemTuzlak Jul 21, 2026
c1cc030
example(ts-react-chat): restyle interrupt playground with a dark theme
jherr Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .changeset/ag-ui-interrupts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
'@tanstack/ai': minor
'@tanstack/ai-client': minor
'@tanstack/ai-react': minor
'@tanstack/ai-preact': minor
'@tanstack/ai-solid': minor
'@tanstack/ai-vue': minor
'@tanstack/ai-svelte': minor
'@tanstack/ai-angular': minor
---

Adopt the AG-UI interrupt lifecycle for tool approvals, generic responses, and
client-tool execution, with typed bound resolvers, atomic batches, and
structured errors. Interrupts run ephemerally by resuming from the full client
message history in a fresh child run — no persistence required.

This changes native approval and client-tool streams from legacy custom events
to snapshot-plus-`RUN_FINISHED` interrupt outcomes. Deprecated
`pendingInterrupts`, `addToolApprovalResponse`, raw `resumeInterrupts`, and
legacy event readers remain as limited compatibility surfaces for migration;
`addToolResult` remains supported.
20 changes: 20 additions & 0 deletions .changeset/interrupts-validation-ownership.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
'@tanstack/ai': minor
'@tanstack/ai-client': minor
---

Interrupts: the application owns wire-schema validation, and the hashing
dependency is gone.

The library no longer transforms a generic interrupt's wire JSON Schema into a
validator or validates the resolved value against it, on either the client or
the server. Whatever you pass to `resolveInterrupt` (client) or send in the
`resume` batch (server) flows through as-is. Validate it yourself if you need to
trust it, e.g. with `z.fromJSONSchema(interrupt.responseSchema).safeParse(value)`
on the client and your own check on the server. Validation of a tool's
code-authored Standard Schema (`approvalSchema` / `inputSchema`) is unchanged.

This drops the `ajv` and `ajv-formats` dependencies. Interrupt binding hashes and
resolution fingerprints now use a small bundled SHA-256 instead of
`@noble/hashes`, so that dependency is gone too. The wire hash shape
(`sha256:<hex>`) is unchanged.
Loading