@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

Packages

Package details

skill

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 的数据大多是英文,按中文搜不到;话题按钮用英文关键词。