Paseo 插件实战:用 Timeline Transformer 把 Agent 推理过程改造成内联思维链渲染
【免费下载链接】paseoOrchestrate multiple coding agents from desktop and mobile项目地址https://gitcode.com/gh_mirrors/pa/paseo点击查看免费下载Paseo 的插件系统允许客户端通过 Timeline Transformer 与 Timeline Renderer 接管 Agent 时间线上任意条目的数据与渲染。本文以仓库中inline-thinking示例为核心讲解如何截获 Agent 流式输出的 reasoning推理/思维链条目将其替换为带打字机节奏的内联文本渲染并深入剖析 transform 契约、phase 语义、Zod 数据校验与useRevealedText的配合方式帮助你举一反三地自定义任意时间线条目。这个示例解决什么问题在默认界面中Paseo 时间线上的reasoning条目Agent 思考过程的文本以整段形式出现。inline-thinking插件的目标是只针对第一个流式 delta 产生的推理行做替换随后以按节奏逐字揭示paced text的方式内联渲染出来让推理过程像消息正文一样平滑滚动而不是一次性砸出一大段。原文档对该插件的描述非常精炼完整摘录如下This plugin replaces reasoning rows from the first streaming delta and renders the paced text inline. Install the directory asinline-thinking, then run an agent that streams reasoning.index.client.tsxwires the transformer and renderer to the component inclient/thinking.tsx.它透露了三个关键事实插件只关心流式阶段的 reasoning 条目渲染采用内联 渐显形式整条链路由index.client.tsx组装。下面逐一展开。插件目录结构与安装方式inline-thinking示例位于 plugin-examples/inline-thinking目录结构只有三个文件plugin-examples/inline-thinking/ ├── paseo-plugin.json # 插件元数据与版本要求 ├── index.client.tsx # 客户端贡献入口注册 transformer 与 renderer └── client/ └── thinking.tsx # 内联思维链渲染组件 Zod schema安装时按原文档要求将目录命名为inline-thinking插件 id 必须与目录名一致Paseo 通过目录名识别插件身份。paseo-plugin.json 内容如下{ id: inline-thinking, requirements: { paseo: 0.8.0 } }id固定为inline-thinking与安装目录名保持一致requirements.paseo声明本插件要求 Paseo 客户端版本不低于0.8.0这是 Timeline Transformer / Renderer 能力可用性的最低版本门槛。安装完成后只需启动一个会流式输出推理内容的 Agent即开启 reasoning streaming 的模型插件便会自动生效——因为 Transformer 的query直接订阅了reasoning类型的条目无需任何额外配置。注意该插件只有客户端贡献没有 server 入口也没有子进程属于纯 UI 型插件。核心机制Timeline Transformer 与 Timeline Renderer要理解这个插件先要理解 Paseo 客户端插件系统提供的两条时间线相关能力它们都定义在 PluginClientContext 中interface PluginClientContext extends PluginCommandCapabilities { addTimelineTransformerItemType extends AgentTimelineItem[type]( contribution: PluginTimelineTransformerContributionItemType, ): PluginCleanup; addTimelineRendererSchema extends ZodType( contribution: PluginTimelineRendererContributionSchema, ): PluginCleanup; // ... }两条能力一前一后构成数据替换 → 渲染接管的完整管线Transformer转换器在 Paseo 构建渲染模型时被调用接收原始时间线条目返回一个或多个插件自有条目或undefined表示保留原样Renderer渲染器注册与插件条目kind/version匹配的 React Native 组件Paseo 在渲染前会用注册的 Zod schema 校验item.data校验通过才挂载组件。根据官方插件参考文档 public-docs/plugins/reference.md 的说明整个替换发生在Paseo 拆分原生 Markdown 或对工具进行分组之前且每个流式更新都会重新走一遍 transform这意味着推理文本每新增一个 chunkrenderer 都会收到一次更新——这正是内联打字机效果的来源。phase 语义区分流式与完成Transformer 与 Renderer 共享一个关键入参phase取值仅两种phase含义典型时机streaming条目仍在流式更新中实时的 assistant 消息、运行中的工具调用、加载中的 reasoningcomplete条目已定格已提交或已获取的消息、已完成的工具调用或推理inline-thinking的 renderer 正是利用phase来决定useRevealedText的节流行为流式阶段逐字渐显完成阶段一次性补全剩余文本。index.client.tsx 源码剖析transformer 与 renderer 的接线插件入口 index.client.tsx 完整代码如下import type { PluginClientContext } from getpaseo/plugin/client; import { InlineThinking, inlineThinkingSchema } from ./client/thinking; export default function contribute(client: PluginClientContext) { client.addTimelineTransformer({ id: inline-thinking, query: { itemType: reasoning }, transform: ({ item, phase }) ({ items: [ { type: plugin, kind: inline-thinking, version: 1, data: { text: item.text, phase }, }, ], }), }); client.addTimelineRenderer({ kind: inline-thinking, version: 1, schema: inlineThinkingSchema, Component: InlineThinking, }); return () {}; }逐段拆解contribute(client)是客户端插件的标准入口Paseo 在加载插件时调用注入PluginClientContext返回值是清理函数此处为空函数用于插件卸载时注销贡献。Transformer 注册id为inline-thinkingquery: { itemType: reasoning }是稳定的粗粒度选择器只命中类型为reasoning的条目。在 packages/protocol/src/agent-types.ts 中可以看到该条目类型的确切定义{ type: reasoning; text: string }——它只有一个text字段这解释了为什么 transform 里直接取item.text。transform 返回值把原始 reasoning 条目替换为一个type: plugin的条目携带kind: inline-thinking、version: 1以及{ text, phase }数据。根据参考文档data必须是 JSON 兼容的PluginTimelineData JsonValue见 packages/plugin/src/contracts.ts字符串和枚举值自然满足要求。Renderer 注册kind/version与替换条目完全一致Paseo 据此找到渲染组件schema: inlineThinkingSchema负责挂载前的数据校验。返回 undefined 的兜底语义Transformer 的transform返回类型是PluginTimelineTransformResult | undefined见 PluginTimelineTransformerContribution。参考文档明确了三条规则返回undefined→保留原始条目返回items数组 →替换原条目返回空数组 →移除该条目。inline-thinking的 transform 无条件替换每次返回一个 plugin item。同类示例 plugin-examples/timeline-items 则展示了不确定就不替换的防御写法只有当工具调用name todo且输出可被对应 schema 解析时才返回替换项否则返回undefined让 Paseo 保留原始工具调用条目——这种模式对识别类插件尤为重要。渲染器实现Zod schema、useRevealedText 与主题色核心渲染组件在 client/thinking.tsximport type { PluginTimelineItemProps } from getpaseo/plugin/client; import { useRevealedText } from getpaseo/plugin/client/react-native; import { useMemo } from react; import { Text } from react-native; import { z } from zod; export const inlineThinkingSchema z.object({ text: z.string(), phase: z.enum([streaming, complete]), }); type InlineThinkingData z.outputtypeof inlineThinkingSchema; export function InlineThinking({ item, theme }: PluginTimelineItemPropsInlineThinkingData) { const text useRevealedText(item.data.text, item.data.phase); const style useMemo( () ({ color: theme.colors.foregroundMuted }), [theme.colors.foregroundMuted], ); return Text style{style}{text}/Text; }三个设计要点Schema 与数据契约强绑定。text必须是字符串phase只能是streaming | complete二选一。这与 transform 写入的data: { text: item.text, phase }严格对应任何不符合 schema 的数据都会在渲染前被 Paseo 拦截。类型层面通过z.outputtypeof inlineThinkingSchema保证组件 props 与校验结果一致。useRevealedText(text, phase)是打字机效果的来源。该 hook 由 Paseo 客户端插件库导出声明见 packages/plugin/src/client/react-native.ts。官方参考文档特别强调当渲染器需要像 Paseo 内置 assistant 行那样按节奏显示流式文本时应直接使用这个 hook。它内部根据phase控制揭示进度streaming阶段持续推进complete阶段直接展示全文。这保证了插件渲染的节奏与宿主内置行完全一致。主题令牌而非硬编码颜色。组件从PluginTimelineItemProps中取theme使用theme.colors.foregroundMuted弱化前景色标识这是思考过程不是正式回复并放入useMemo避免无谓重渲染。可用的主题令牌定义在 packages/plugin/src/contracts.ts包括surface0/surface1/surface2、border、foreground、foregroundMuted、accent、statusSuccess/Warning/Danger等插件应始终通过令牌取色以自动适配明暗主题。渲染器的完整 props 契约Renderer 组件收到的 props 由PluginTimelineItemProps定义见 packages/plugin/src/client/contracts.tsinterface PluginTimelineItemPropsData unknown extends PluginHostProps { agentId: string; item: { type: plugin; kind: string; version: number; data: Data; }; timestamp: Date; }其中PluginHostProps提供theme渲染样式、host宿主机 id/label与layout紧凑模式、平台ios | android | web。由于 Paseo 同时面向桌面与移动端组件内也可按layout.platform区分平台表现inline-thinking保持极简仅使用theme。此外参考文档还指出Paseo 会按源条目引用对 transform 结果做 memoization并从源行推导替换身份因此对同一条流式条目的多次更新不会导致 renderer 重新挂载——这正是useRevealedText能连续续写而非每次从头播放的前提。替换条目还可选地设置插件局部id不设置时 Paseo 以该条目在源条目输出中的索引作为身份。运行验证与效果观察要看到插件的真实效果按以下步骤操作将 plugin-examples/inline-thinking 目录整体复制为inline-thinking并安装到 Paseo 插件目录要求 Paseo 版本 ≥ 0.8.0启动一个配置了 reasoning streaming 的 Agent推理文本以流式 delta 到达的模型在时间线中观察原本整段出现的推理行现在以内联形式从第一个流式 delta 开始逐字揭示文字颜色为弱化前景色与正式回复形成视觉区分。判定插件是否生效的关键特征推理文本出现打字机节奏而非瞬间铺满流式结束后文本一次性补全到完整内容对应phase从streaming切换为complete。扩展思路基于同一机制做更多自定义inline-thinking演示的Transformer Renderer 流式文本 hook组合是自定义时间线的通用范式。围绕 reasoning 条目可以继续演化折叠式思维链在 renderer 中用layout.compact或本地状态控制展开/收起仅展示摘要行点击后展开全文阶段感知样式利用phase在流式阶段显示光标或半透明文本完成阶段切换为完整颜色识别式替换仿照 pi-tasks 示例 的模式对tool_call条目做内容识别先z.safeParse解析工具输出解析失败返回undefined保留原条目把原始工具调用渲染成结构化任务卡片。若需将新条目写入服务端历史例如把渲染结果固化为时间线中的正式行可参考 public-docs/plugins/reference.md 中的paseo.agents.ref(agentId).timeline.append()服务端 API传入type: plugin的条目与稳定的插件局部id。小结inline-thinking通过addTimelineTransformer订阅reasoning条目用{ text, phase }数据将其替换为kind: inline-thinking、version: 1的插件条目通过addTimelineRenderer注册同 kind/version 的渲染组件并以 inlineThinkingSchema 做挂载前校验渲染器使用宿主导出的useRevealedText实现与内置消息行一致的内联渐显效果用theme.colors.foregroundMuted保持主题一致整个管线完全发生在客户端纯 UI 替换不依赖 server 贡献插件要求 Paseo ≥ 0.8.0。掌握 transformer/renderer 契约与phase语义后你可以在不修改宿主源码的前提下自由重构 Agent 时间线上任何条目的展示形态。赞分享【免费下载链接】paseoOrchestrate multiple coding agents from desktop and mobile项目地址https://gitcode.com/gh_mirrors/pa/paseo点击查看免费下载相关推荐CopilotKit × LlamaIndex 推理链路实战指南用自定义 reasoningMessage 插槽渲染 Agent 思考过程CopilotKit × LlamaIndex 推理链路实战指南用自定义 reasoningMessage 插槽渲染 Agent 思考过程 导读 本文以 Co人工智能AI AgentAgent 框架前端后端CopilotKit 工具渲染Tool Rendering实战用 useRenderTool 把 Agent 工具调用渲染成 React 组件CopilotKit 工具渲染Tool Rendering实战用 useRenderTool 把 Agent 工具调用渲染成 React 组件 导读 本篇人工智能AI AgentAgent 框架前端后端CopilotKit 工具渲染Tool Rendering实战用 useRenderTool 把 Agent 工具调用渲染为对话内的 React 组件CopilotKit 工具渲染Tool Rendering实战用 useRenderTool 把 Agent 工具调用渲染为对话内的 React 组件 本人工智能AI AgentAgent 框架前端后端上一篇React Aria无障碍测试自动化测试与手动测试下一篇从故障到自愈揭秘Weaviate分布式向量数据库的终极高可用架构创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

使用 MXNet C++ API 加载预训练模型完成图像分类推理:从模型文件到端到端预测的完整实战

使用 MXNet C++ API 加载预训练模型完成图像分类推理:从模型文件到端到端预测的完整实战

使用 MXNet C API 加载预训练模型完成图像分类推理:从模型文件到端到端预测的完整实战 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Sc…

2026/9/21 7:37:43 阅读更多 →
Nomad 与 CGO:为什么 Linux 上的 Nomad 二进制必须启用 CGO

Nomad 与 CGO:为什么 Linux 上的 Nomad 二进制必须启用 CGO

Nomad 与 CGO:为什么 Linux 上的 Nomad 二进制必须启用 CGO 【免费下载链接】nomad Nomad is an easy-to-use, flexible, and performant workload orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications…

2026/9/21 7:37:43 阅读更多 →
gbrain Ingest Skill 完全指南:把会议、文章、媒体与对话结构化沉淀进个人大脑

gbrain Ingest Skill 完全指南:把会议、文章、媒体与对话结构化沉淀进个人大脑

gbrain Ingest Skill 完全指南:把会议、文章、媒体与对话结构化沉淀进个人大脑 【免费下载链接】gbrain Garrys Opinionated OpenClaw/Hermes Agent Brain 项目地址: https://gitcode.com/gh_mirrors/gb/gbrain Ingest 是 gbrain 技能体系中面向"输入侧…

2026/9/21 7:37:43 阅读更多 →

最新新闻

3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查 域名服务器搞不懂,是无数运营推广人员接手“网页制作模板中文”项目时的噩梦。你手里拿着一个看起来很漂亮的模板,后台却像个黑盒,更别提那些藏在代码深处的安全隐患。…

2026/9/21 8:30:15 阅读更多 →
汽车之家网页版地址排查指南:3步定位挂马源,附前端布局对比评测

汽车之家网页版地址排查指南:3步定位挂马源,附前端布局对比评测

汽车之家网页版地址排查指南:3步定位挂马源,附前端布局对比评测 网站被黑挂马,后台却一片空白,这种绝望感每个运维和前端都懂。别慌,这通常不是代码逻辑错误,而是服务器环境或静态资源被篡改。今天不聊虚的,直接上干货,用 对比评测 的思路,带你从 汽车之家网页版地址…

2026/9/21 8:14:36 阅读更多 →
企业网站做电脑营销避坑指南:选哪家好别只看价格,看这套设计规范

企业网站做电脑营销避坑指南:选哪家好别只看价格,看这套设计规范

企业网站做电脑营销避坑指南:选哪家好别只看价格,看这套设计规范 改个需求建站公司拖一周,这种憋屈事谁没经历过?很多老板找企业网站做电脑营销,问得最多的一句话就是“哪家好”。其实,网站好不好用,营销转不转化,核心不在你付了多少钱,而在前端代码写得够不够规范,设计逻辑是否支撑你的业务目标。…

2026/9/21 8:00:00 阅读更多 →
做品管圈网站哪家好?3步避开被黑挂马陷阱

做品管圈网站哪家好?3步避开被黑挂马陷阱

做品管圈网站哪家好?3步避开被黑挂马陷阱 网站上线三天,后台突然多了个奇怪的脚本,页面弹出一堆博彩广告,SEO排名一夜清零。如果你正面临这种“网站被黑挂马不知道怎么办”的噩梦,先别慌着删库重装。很多站长在找做品管圈网站哪家好时,只盯着价格和功能,却忽略了最底层的代码安全与架构选型。今天咱们不聊虚的,…

2026/9/21 7:44:43 阅读更多 →
Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」

Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」

AI 应用前端 【免费下载链接】voyager Enhancement suite for Gemini, AI Studio, Claude & ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件;其中的提示词管理器可用…

2026/9/21 7:41:44 阅读更多 →
gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层

gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层

前端静态站点Web框架 【免费下载链接】gatsby React-based framework with performance, scalability, and security built in. 项目地址: https://gitcode.com/gh_mirrors/ga/gatsby 点击查看 免费下载 本篇技术指南以 gatsby-source-graphql 插件的 CHANGELOG 版…

2026/9/21 7:41:44 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →