@celljs/ta-extensions
A pi package for Ta: the page of extensions, where the user makes one by saying what it should do, and hands extensions on or takes them in as one file
Package details
Install @celljs/ta-extensions from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@celljs/ta-extensions- Package
@celljs/ta-extensions- Version
4.8.0- Published
- Nov 11, 2026
- Downloads
- 278/mo · 278/wk
- Author
- muxiangqiu
- License
- MIT
- Types
- skill
- Size
- 267.1 KB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"web": [
"./web/index.js"
],
"host": "./host/index.mjs",
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Cell - Ta Extensions
Ta 自带的 pi 包(默认开启,可在 设置 → 扩展 关闭):告诉用户可以用自然语言做扩展,负责扩展的分享,并提供扩展市场。不改 Ta 的核心,由三部分组成:
- 技能(
pi.skills,skills/ta-package):Ta 按用户的描述做、改 pi 包(pi 扩展、Web 扩展、技能、提示模板),以及按用户的话导出、导入扩展。终端里的 Ta 也有;关掉这个包,技能也随之去掉。 - Web 扩展(
pi.web,web-src/index.tsx→web/index.js):导航栏里的"扩展"页,顶部两个标签:"我的"和"市场"(页面右上角菜单也能直接打开市场)。- 顶部一句话说明回答结束就生效;输入框下是四种扩展(卡片、页面、命令、技能)的示意图(
web-src/pictures.tsx,只用页面的 CSS 变量,跟随主题),点一个就做它的示例。发出后开一个新对话(openSession+switchSession)把"做一个扩展:……"发给 Ta。 - "我的扩展":
extensions/目录里的包(Ta 做的、从文件导入的),显示名称、版本、内容标签和说明,右侧是开关(setPackageEnabled,停用的变淡);悬停出现修改(问一句想怎么改,再开新对话交给 Ta)、导出、移除。 - "安装的扩展":
packages设置里的包(npm、Git),同样有开关,可复制来源、移除。 - 导入:按钮、页面右上角菜单或把文件拖到页面上;弹窗里选
.tgz文件,或填npm:…/ Git 地址安装(installPackage,即ta install)。导入、安装、移除后调用reloadExtensions,当前对话和页面马上用上。 - "分享给别人":导出 → 发送 .tgz 文件 → 对方导入 三步图示,下面一行说明也支持 npm、Git 来源或直接对 Ta 说。
- "市场"(
market-view.tsx、market-detail.tsx):npm 上带pi-package关键词的包,也就是 pi 官网包目录收录的那些。- 搜索框(输入停 300 ms 后搜索)和几个常用话题;没有关键词时按 npm 的综合排序(下载量占大头)列出,滚动到底自动加载下一页。
- 每张卡片是名字首字母头像(同名同色)、名称(scope 变淡)、作者、月下载量、说明、类别标签和发布时间,右侧一个"安装"按钮:一键安装为用户级的
npm:<名字>(installPackage,不锁版本,ta update能更新),安装中转圈,装好后显示"已安装",随 Ta 提供的显示"内置"。安装在离开页面后继续。 - 点卡片进入详情页(
Esc或"返回"回到列表,滚动位置不变):头像、名称、说明、作者/版本/下载量/许可证/时间、安装或移除、npm/源代码/主页链接,pi.video/pi.image预览,以及 README。
- 顶部一句话说明回答结束就生效;输入框下是四种扩展(卡片、页面、命令、技能)的示意图(
- 服务端(
pi.host,web-src/host.ts→host/index.mjs):页面经callHost(TaPackageServer.callPackageHost)调用。exportPackage(id):把包目录打成一个.tgz(gzip 的 tar,顶层是包目录,去掉node_modules、.git和链接),用 base64 交给页面下载。和tar -czf <名字>.tgz <名字>的格式相同,没有 Ta 也能用tar解开。searchMarket(query, from?)、marketPackage(name)(market.ts):在服务端查 npm,因为包也装在服务端;结果缓存 5 分钟,同一请求合并。搜索走/-/v1/search?text=<词> keywords:pi-package;npm 对有关键词的搜索仍会把所有pi-package排在后面,所以只保留名称、说明或关键词里含有每个词的包,出现第一个不相关的就结束分页。详情不取 npm 的整份包文档(发版频繁的包有几十 MB),只取/<名字>/latest清单、上月下载量,README 先从 jsDelivr 取发布的那一版,没有再取 GitHub 仓库的;README 里的 HTML 图片、链接、标题转成 Markdown(Ta 的 Markdown 不渲染 HTML),去掉徽章,相对链接指向 GitHub 仓库。importPackage(data, overwrite?):检查文件(只有一个顶层目录、里面有package.json、路径不出目录、不超过 5000 个文件和 20 MB;跳过链接和 macOS tar 附带的._*),放进 agent 目录的extensions/<包名去掉 scope>,pi 无需设置就会加载。同名目录已存在时返回exists,页面问过用户再带overwrite重来;先写到隐藏的临时目录再换上,会话不会加载到一半的文件。npm pack打出的包(顶层是package/)也能导入。
限制
- 导出、导入文件需要 ta serve(页面和服务端都在 ta serve 里);单独运行
ta时,按技能里的说明让 Ta 用tar和ta install完成。 - 从文件导入的扩展只放进用户的
extensions/;要给一个项目用,把目录放进项目的.ta/extensions/并提交。 - 扩展会在本机运行代码:导入别人给的扩展前,页面提示只导入信任的来源,技能也要求 Ta 先读一遍再说明它做什么。市场的安装是一键的(照 pi 的做法不弹审批),列表底部和详情里都可以先看介绍和源代码。
- 市场只认 npm 官方源(搜索、清单、下载量都在 registry.npmjs.org),README 依赖 jsDelivr 或 GitHub;连不上时页面显示原因和"重试",不影响已安装的扩展。安装仍走 pi 的 npm 安装,遵循用户自己的 npm 配置。
- npm 的数据大多是英文,按中文搜不到;话题按钮用英文关键词。