PKU harness

仓库

pkuinfo 组织下的各个仓库(应用、插件仓库、pkucli、pkubdcard 和本网站),每个仓库包含什么,以及它们之间的依赖关系。

项目的全部代码都开源在 GitHub 组织 pkuinfo 下,分成五个仓库。

仓库技术栈
pku-harnessExpo SDK 58、React Native 0.88、TypeScript、bun
pku-harness-pluginsTypeScript、zod、bun workspace
pkucliRust workspace(reqwest、tokio、clap)
pkubdcardGo(Gin)+ Preact
pkuharness-websiteNext.js 16 + Fumadocs 16、bun

各仓库的用途

pku-harness 是应用本身。它包含运行 AI 助手循环、承载各个插件的核心(我们称为 harness),以及设计系统、宿主服务、校园会话和调度器。应用优先支持 Android。

pku-harness-plugins 包含编写插件所需的一切:SDK(@pku-harness/sdk)、所有内置插件(@pku-harness/plugins)、插件市场清单(@pku-harness/registry)、云服务协议(@pku-harness/cloud-protocol)、远程插件模板和一些示例。想写插件的话,从这个仓库开始。

pkucli 是一组访问北大各类网站的命令行工具。应用对接的每个校园服务都以它为协议参考:应用需要某个登录流程或接口时,就从这里移植。这个仓库还提供了一些 Agent 技能(skills)。

pkubdcard 是一个分享校园卡付款码的网页应用,也是 pkucli 校园卡流程更早的一个移植版本。云服务插件 card-share 的界面和限流设计都参考了它。

pkuharness-website 就是本网站,提供首页、下载、这份文档和插件市场。

仓库之间的关系

所有校园登录都要经过 IAAA(iaaa.pku.edu.cn),也就是北大的统一身份认证服务。pkucli 记录了各个校园服务的协议,应用按照这些协议实现。应用把 pku-harness-plugins 作为 git 子模块引入。远程插件通过 MCP(Model Context Protocol,模型上下文协议)连接到应用;PKU harness Cloud(云服务)则基于插件仓库里的云服务协议和参考服务器实现。

仓库用到什么方式
pku-harness(应用)北大 IAAA(iaaa.pku.edu.cn)所有校园登录都经过它
pku-harness(应用)pkucli按 pkucli 记录的协议实现校园服务
pku-harness(应用)pku-harness-plugins作为 git 子模块引入 SDK 和插件
远程插件(任何人都可以写)pku-harness-plugins 的 templates/remote-plugin从模板开始,通过 MCP 连接到应用
PKU harness Cloud 服务pku-harness-plugins 的 cloud-protocol 和 cloud-server实现云服务协议,cloud-server 是参考实现
pkuharness-websiteregistry.json、已收录的插件仓库、GitHub Releases生成文档、插件市场和下载页

网站独立于其他仓库。它的插件市场读取 registry.json 和已收录的插件仓库,下载页列出应用在 GitHub 上发布的版本。

pku-harness-plugins 的目录结构

目录内容
packages/sdk@pku-harness/sdk:插件接口约定、纯函数工具和插件语言(src/lang:schema、解释器、宿主能力、加载器)
packages/cloud-protocol@pku-harness/cloud-protocol:云服务通信协议的 schema、信封加密、分享链接
packages/cloud-serverPKU harness Cloud(云服务)的参考服务器实现(Bun + Hono + SQLite)
plugins/<id>/PLUGIN.md官方插件文档。随应用一起打包(bun run bundle),之后从各自的链接更新
plugins/<id>/src用 TypeScript 写的内置插件(见 plugins/index.ts 里的 builtinPlugins)
plugins/shared内置插件之间共用的代码
scriptsplugin.ts(作者命令行:bun run plugin validate|test|run)、bundle-docs.ts、validate-registry.ts
registry插件市场的 schema 和 registry.json
templates/remote-plugin、examples/*远程插件模板,以及 demo-canteen 和 mock-llm 两个示例

这些包只在 workspace 内部使用,都不会发布到 npm。应用把整个仓库作为 git 子模块 plugins/ 引入。

插件文档的分享方式和 Agent 技能一样,是一个文件夹或一个链接,由应用读取并解释执行。详见声明式插件。

目前的内置插件

应用目前内置了以下插件文档:classrooms、campus-events、grades、canteen、shuttle 和 notices。

另外还内置了这些 TypeScript 插件:ui(生成式界面)、dashboard、scheduler、todo、schedule、timetable、course-sync、authenticator(手机令牌)、calendar(校历)、wallet(校园卡、网费、宿舍水电)、card-share(通过云服务分享付款码)、courses(教学网)、course-catalog、treehole、elective、finance、library、room-booking、memory、plugins(插件管理和 AI 编写插件)、deepseek 和 openai-compatible。

每个插件的介绍见插件市场。

本页目录