@durable-streams/tanstack-ai-transport

中文文档
0.0.10发布于 2026/09/11Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 1.2万

TanStack AI 持久流适配器

中文使用文档
文档目录20 节
  1. 这个软件包做什么
  2. 安装
  3. 快开始
  4. 客户端: 创建持久会话连接
  5. 服务器: 将模型块写入可持久流
  6. 整合指南(建议聊天会话流程)
  7. (1) 客户端连接
  8. 2) POST路线( /api/chat (中文(简体) )
  9. 3)获取代理路线( /api/chat-stream (中文(简体) )
  10. (4) SSR水合物+还原
  11. API 参考
  12. 客户端 APIs
  13. 服务器 APIs
  14. 共享类型
  15. 反应合同
  16. toDurableStreamResponse(..., { mode: "immediate" })
  17. toDurableStreamResponse(..., { mode: "await" })
  18. toDurableChatSessionResponse(..., { mode: "immediate" })
  19. toDurableChatSessionResponse(..., { mode: "await" })
  20. waitUntil 使用量

@可持久流/tanstack-ai-交通

TanStack AI 持久流的适配器.

这个软件包做什么

这个包裹给你:

  • TanStack 兼容客户端 connection (单位:千美元)subscribe + 键 send(中文(简体) )
  • 服务器帮助将 TanStack 块写入持久流
  • 用于回声用户提示和执行 JSON 流格式的聊天会话助手
  • SSR水合+还原抵消

如果您想要聊天会话在刷新/重新连接中幸存下来,并且可以在多个客户端之间共享,请使用此功能.

安装

pnpm add @durable-streams/tanstack-ai-transport @durable-streams/client

快开始

客户端: 创建持久会话连接

import { durableStreamConnection } from "@durable-streams/tanstack-ai-transport"

const connection = durableStreamConnection({
  sendUrl: "/api/chat?id=chat_123",
  readUrl: "/api/chat-stream?id=chat_123",
  initialOffset: undefined,
})

将此连接传递给 useChat 从 @tanstack/ai-react。 。 。 .

服务器: 将模型块写入可持久流

import { toDurableChatSessionResponse } from "@durable-streams/tanstack-ai-transport"

return toDurableChatSessionResponse({
  stream: {
    writeUrl,
    headers,
  },
  newMessages: [latestUserMessage],
  responseStream, // AsyncIterable<TanStackChunk>
})

此选项将新用户消息附加到耐用流, 管道 AI 响应块, 并返回空成功响应 .

(1) 客户端连接

const connection = durableStreamConnection({
  sendUrl: `/api/chat?id=${chatId}`,
  readUrl: `/api/chat-stream?id=${encodeURIComponent(chatId)}`,
  initialOffset: resumeOffsetFromSSR,
})

使用方式 useChat({ id: chatId, connection, live: true })。 。 。 .

2) POST路线(/api/chat(中文(简体) )

  • 验证聊天 ID
  • 构建可持久流写入 URL
  • 保留 newMessages 明确( 通常是最新的用户消息)
  • 启动您的模型流( E)responseStream(中文(简体) )
  • 返回时 toDurableChatSessionResponse(...)

3)获取代理路线(/api/chat-stream(中文(简体) )

  • 接受聊天 id 查询段落
  • 在服务器上从此 id 创建上游持久读取的 URL
  • 转发查询等参数 offset, (中文(简体) ), live等 (中文(简体) ).
  • 在服务器上添加可持久读取的认证信头
  • 向客户交回上游身体/头部

(4) SSR水合物+还原

聊天页面加载器 :

  • materializeSnapshotFromDurableStream({ readUrl, headers })
  • 发送 messages + 键 offset 到客户端
  • 用那个 offset 作为 initialOffset 打开 durableStreamConnection

这样可以避免在第一个订阅时重放整个历史.

API 参考

客户端 APIs

durableStreamConnection(options)

创建与 TanStack 兼容的程序 connection 对象为:

  • subscribe(abortSignal?) => AsyncIterable<TanStackChunk>
  • send(messages, data?, abortSignal?) => Promise<void>

DurableStreamConnectionOptions数字 :

  • sendUrl: string (要求) - 地点 send(...) 职位
  • readUrl?: string - 在哪里,没有 subscribe(...) 读取( 默认为 sendUrl(中文(简体) )
  • initialOffset?: string - 用于恢复的初步持久抵销
  • emitSnapshotOnSubscribe?: boolean (默认) true- 发射合成 MESSAGES_SNAPSHOT 初次补习
  • headers?: HeadersInit - 既适用于阅读请求,也适用于写作请求
  • fetchClient?: typeof fetch - 自定义获取执行

行为:

  • send(...) 职位 { messages, data } 改为 sendUrl
  • subscribe(...) 读取耐用的 JSON 流批量并生成 TanStack 块
  • 内部抵销随着批次的到来而得到更新,因此以后的订阅将继续从最近看到的抵销中进行

materializeSnapshotFromDurableStream(options)

读取非活性可持久流并实现 TanStack 消息状态 .

输入 :

  • readUrl: string
  • headers?: HeadersInit
  • offset?: string

回返情况:

  • { messages: Array<any>; offset?: string }

sanitizeChunkForStorage(chunk)

删除重复 content 打开 TEXT_MESSAGE_CONTENT 块( 维护) delta减少所储存的有效载荷尺寸.

服务器 APIs

toDurableChatSessionResponse(options)

聊天会话的高级助手写作.

ToDurableChatSessionResponseOptions数字 :

  • stream: DurableChatSessionStreamTarget (单位:千美元)writeUrl, (中文(简体) ), headers, (中文(简体) ), createIfMissing(中文(简体) )
  • newMessages: DurableSessionMessage[] - 明确附上迅速信息
  • responseStream: AsyncIterable<TanStackChunk> - 模型块源
  • mode?: "immediate" | "await" (默认) immediate(中文(简体) )
  • waitUntil?: (promise: Promise<unknown>) => void

注释:

  • 聊天会话流总是 application/json
  • 附录 newMessages 使用 toMessageEchoChunks(...)
  • 在写前先消毒块

toDurableStreamResponse(source, options)

用于任意 Aync 块源的下级通用写法 .

ToDurableStreamResponseOptions数字 :

  • stream: DurableStreamTarget
  • mode?: "immediate" | "await"
  • waitUntil?: (promise: Promise<unknown>) => void
  • exposeLocationHeader?: boolean

ensureDurableChatSessionStream(streamTarget)

使用聊天会话时确保存在可持久流,执行 application/json。 。 。 .

toMessageEchoChunks(message)

将用户/系统/助理消息转换为:

  • TEXT_MESSAGE_START
  • TEXT_MESSAGE_CONTENT (如果文本存在)
  • TEXT_MESSAGE_END

这在提供时保留了明确的消息ID.

appendSanitizedChunksToStream(stream, chunks, contentType?)

附加块数组 sanitizeChunkForStorage 应用.

pipeSanitizedChunksToStream(source, stream, contentType?)

管道合成块源 sanitizeChunkForStorage 应用.

共享类型

  • TanStackChunk
  • DurableSessionConnection
  • DurableStreamConnection (别名)
  • DurableStreamConnectionOptions
  • DurableChatSessionStreamTarget
  • DurableStreamTarget
  • ToDurableStreamResponseMode
  • ToDurableStreamResponseOptions
  • ToDurableChatSessionResponseOptions
  • DurableSessionMessage
  • DurableSessionMessagePart
  • WaitUntil

反应合同

toDurableStreamResponse(..., { mode: "immediate" })

  • 状态 : 201
  • 页眉 : Location: <read-url>
  • 车身 : { "streamUrl": "<read-url>" }

toDurableStreamResponse(..., { mode: "await" })

  • 状态 : 200
  • 页眉 : Location: <read-url>
  • 车身 : { "streamUrl": "<read-url>", "finalOffset": "<offset>" }

toDurableChatSessionResponse(..., { mode: "immediate" })

  • 状态 : 202
  • 体 : 空

toDurableChatSessionResponse(..., { mode: "await" })

  • 状态 : 200
  • 体 : 空

waitUntil 使用量

return toDurableChatSessionResponse({
  stream: { writeUrl, headers },
  newMessages,
  responseStream,
  waitUntil: ctx.waitUntil.bind(ctx),
})

使用 waitUntil 在工人风格的运行时间中,背景写在返回指针响应后继续.

版本与发布记录

@durable-streams/tanstack-ai-transport 共发布 10 个版本,首次发布于 2026/03/24;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.10latest2026/09/112 个月前
0.0.92026/07/173 个月前
0.0.82026/06/015 个月前
0.0.72026/05/285 个月前
0.0.62026/05/205 个月前
0.0.52026/05/195 个月前

关于 @durable-streams/tanstack-ai-transport 的常见问题

@durable-streams/tanstack-ai-transport 是什么?

TanStack AI 持久流适配器

如何安装 @durable-streams/tanstack-ai-transport?

在项目目录运行 npm install @durable-streams/tanstack-ai-transport,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 intent,可以用 npx intent 直接运行。

@durable-streams/tanstack-ai-transport 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@durable-streams/tanstack-ai-transport 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@durable-streams/tanstack-ai-transport 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@durable-streams/tanstack-ai-transport 可以商用吗?

@durable-streams/tanstack-ai-transport 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@durable-streams/tanstack-ai-transport 的下载量有多少?

根据 npm 官方下载统计,@durable-streams/tanstack-ai-transport 在 2026/10/13 – 2026/11/11 这 30 天内被下载 12,217 次,日均约 407 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@durable-streams/tanstack-ai-transport 还在维护吗?

最新版本 0.0.10 发布于 2026/09/11(2 个月前);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/03/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。