TypeScript 终端 Agent PaiCLI 上线了,类 Claude Code 和Qoder CLI
大家好,我是二哥呀。
PaiCLI 的 TypeScript 版本也上线了。目前 PaiCLI 已经有 Java 版、TypeScript 版和 Python 版了,三个版本的核心架构完全一致,区别只在语言和生态层面。
和 Python 版一样,PaiCLI-TS 不是要造一个 Claude Code,咱没那水平。哈哈。
对于前端背景的小伙伴来说,TS 版就是学习终端 Agent 最好的入口。
代码已经同步到 gitcode 上了。

01、TypeScript 版有什么值得学的?
PaiCLI-TS 用 Ink + React 搭了一套声明式 TUI,核心依赖有 8 个。
Ink + React, 终端 UI 框架。Ink 让你可以用 React 组件的方式写终端界面,状态变了 UI 自动重渲染,和写 Web 前端的体验一致。PaiCLI 的流式输出、工具调用状态展示、进度面板,全部是 React 组件。对熟悉前端的小伙伴来说,上手成本几乎为零。

undici, Node.js 官方高性能 HTTP 客户端。和 node-fetch 相比,undici 直接走 Node.js 底层的 HTTP 解析器,性能更好。PaiCLI 所有和大模型 API 的通信、SSE 流式解析都走 undici。
commander, CLI 框架。用链式调用定义命令和选项,比手写 process.argv 解析省不少工作量。PaiCLI 的所有子命令都用 commander 定义。
zod, 运行时类型校验。TypeScript 的类型只在编译期生效,运行时就没了。zod 填的就是这个坑,用来校验 LLM 返回的 JSON 结构、用户配置文件格式、工具输入参数。Agent 系统里模型输出的结构不可控,没有运行时校验很容易崩。
@modelcontextprotocol/sdk, Anthropic 官方 MCP SDK 的 TypeScript 版本。直接用官方 SDK 接入 MCP 生态,支持 stdio 和 HTTP 两种传输协议。
better-sqlite3, 同步 SQLite 驱动。better-sqlite3 是同步 API,用起来比异步的 sqlite3 包简洁,记忆系统和代码索引都用它做持久化存储。
fast-glob, 文件匹配库。比 Node.js 原生的 glob 模块快 2-3 倍,PaiCLI 的 Glob 工具和 Skill 发现都依赖它。
chalk, 终端着色。和 Ink 配合使用,给日志、错误信息、状态提示加颜色。

整个项目用 pnpm 做包管理,tsup 做打包构建,vitest 做单元测试。TypeScript 5.5+ 的类型推断能力在写工具注册、事件系统这类泛型密集的代码时帮助很大。
02、实现了哪些功能?
每个模块的源码都是独立文件,想学哪个就看哪个。
ReAct 推理循环。接收用户输入 → 调用大模型推理 → 判断是否需要工具 → 执行工具 → 把结果喂回模型 → 继续推理。整个循环基于 AsyncGenerator 实现流式事件输出,上层可以按事件消费。
Plan-and-Execute。 接到复杂任务后,先调用 LLM 生成一份分步计划,然后逐步执行每个步骤,每步执行完把结果带入下一步的上下文。适合“重构整个模块”“迁移数据库”这类多步骤任务。
Multi-Agent 编排。内置了 4 个预定义角色:架构师(负责设计决策)、开发者(负责代码实现)、审查者(负责质量把控)、研究员(负责信息搜集)。可以把一个大任务拆成子任务分配给不同角色的 Agent,支持任务之间的依赖关系。

Skill 系统。支持三级 Skill 加载:内置 Skill、用户级 Skill(~/.paicli/skills/)、项目级 Skill。每个 Skill 是一个目录,里面放 SKI...
真诚点赞 诚不我欺
回复