仓库
pkuinfo 组织下的各个仓库(应用、插件仓库、pkucli、pkubdcard 和本网站),每个仓库包含什么,以及它们之间的依赖关系。
项目的全部代码都开源在 GitHub 组织 pkuinfo 下,分成五个仓库。
| 仓库 | 技术栈 |
|---|---|
pku-harness | Expo SDK 58、React Native 0.88、TypeScript、bun |
pku-harness-plugins | TypeScript、zod、bun workspace |
pkucli | Rust workspace(reqwest、tokio、clap) |
pkubdcard | Go(Gin)+ Preact |
pkuharness-website | Next.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-website | registry.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-server | PKU harness Cloud(云服务)的参考服务器实现(Bun + Hono + SQLite) |
plugins/<id>/PLUGIN.md | 官方插件文档。随应用一起打包(bun run bundle),之后从各自的链接更新 |
plugins/<id>/src | 用 TypeScript 写的内置插件(见 plugins/index.ts 里的 builtinPlugins) |
plugins/shared | 内置插件之间共用的代码 |
scripts | plugin.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。
每个插件的介绍见插件市场。