为 OpenLearnV2 教学平台开发插件。通过读取 https://openlearn-next-v2.readthedocs.io/zh-cn/latest/ 在线文档获取最新插件开发文档,与开发者讨论需求后指导开发相应插件。支持三类插件模板(server-only / full-stack / frontend-only)。当用户提到开发 OpenLearn 插件、openlearn-next 插件、教学平台插件、或课堂工具时使用此 skill。
OpenLearnV2 插件开发是一项面向实际任务的技能,主要用于在线文档是权威来源,本地缓存加速读取;skill 自带三份文档的本地快照( references/ ),每次使用前通过索引页探活;
它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
在线文档是权威来源,本地缓存加速读取。 skill 自带三份文档的本地快照(references/),每次使用前通过索引页探活。缓存未过期则直接用本地,发现远端更新才重新拉取——将月消耗从 ~100K token 降至 ~22K token。
webfetch 索引页检查「最后更新」日期:
https://openlearn-next-v2.readthedocs.io/zh-cn/latest/
提取文档底部的「最后更新:YYYY-MM-DD」。
读取 references/.cache-meta.json 中的 lastUpdated 字段:
references/ 目录下的本地快照(0 额外 token)如果缓存不存在或已过期,按以下优先级拉取:
| 要做什么 | 拉取哪份 | 估算 token | 本地文件 |
|---|---|---|---|
| 查 API 签名、Action/Handler/Event 怎么写 | 插件开发完全指南 | ~12,000 | references/plugin-development-tutorial.md |
| 理解架构原理、安全模型 | 架构总览 | ~8,000 | references/architecture.md |
| 初始化项目、构建打包、CLI 命令 | 脚手架指南 | ~4,000 | references/scaffold.md |
拉取后更新 references/ 和 .cache-meta.json。
references/ 中的本地快照已包含:
典型的"开发新插件"场景可直接使用缓存,只有遇到以下情况才需要在线拉取:文档版本不一致、用户提到新 SDK/CLI 版本、缓存中找不到需要的 API。
Token 消耗对比:
| 场景 | 纯在线方案 | 缓存+探活方案 |
|---|---|---|
| 日常开发(命中缓存) | ~10,000 | ~200 |
| 文档更新后首次 | ~10,000 | ~12,200 |
| 月均(10 次使用,1 次更新) | ~100,000 | ~14,000 |
获取最新文档后,与开发者进行结构化讨论,逐项确认:
server-only:纯后端(AI 工具 + 命令 + 事件,无 UI)full-stack:全栈(后端逻辑 + React 前端)frontend-only:纯前端(仅 UI 面板或课堂工具)teacher.tab — 教师侧边栏标签页(管理页)teacher.dashboard.widget — 白板可拖拽卡片(课堂交互,需匹配 teacherWidgetId)teacher.panel — 教师独立全宽面板(v5.1+)student.view — 学生端全屏视图student.fullscreen — 学生全屏视图/考试模式(v5.1+)classroom.tool — 课堂工具架按钮global.setting — 全局设置页扩展(v5.1+)manifest.engines.openlearn 中的版本方案确认后,根据插件类型选择对应模板生成代码。
| 模板 | 位置 | 生成文件 |
|---|---|---|
| server-only | assets/server-only/ |
package.json, tsconfig.json, src/index.ts |
| full-stack | assets/full-stack/ |
package.json, tsconfig.json, src/index.ts, src/frontend.tsx |
| frontend-only | assets/frontend-only/ |
package.json, tsconfig.json, src/index.ts, src/frontend.tsx |
使用 Create-React-App: 读取对应模板文件,将 {{placeholder}} 替换为用户确认的参数:
{{pluginId}} → 如 @teacher-li/class-polls{{pluginName}} → 显示名称{{description}} → 功能描述{{author}} → 作者名{{commandPrefix}} → 命令前缀(如 classpolls){{toolId}} / {{toolName}} → classroomTools 配置{{tabId}} → 前端 tab ID模板提供了启动代码骨架,需要在 TODO 标记处填充根据需求讨论确认的实际业务逻辑。
编写代码时,结合在线文档确认以下规范:
ctx.db.ensureTable() + ctx.db.table(),不要手动拼接{commandPrefix}.action_donefunction 声明不用箭头函数;jsx: "react" 经典模式;default export 是 { activate, deactivate }crypto.randomUUID() 替代 import { randomUUID } from 'crypto';用 VFS API 替代 fs生成代码后,给出构建和验证指令:
cdnpm install npx @openlearn/plugin-sdk build
检查清单:
dist/index.js 无非法裸导入:grep -E '^import .+ from "[^@./]' dist/index.js 应无输出react/jsx-runtime 引用)manifest.json 与代码中 manifest 一致classroomTools[].commandType 都有对应的 handler提醒开发者在 OpenLearn 管理后台上传 dist/:
classroomTools,进入课堂白板查看工具栏[Plugin:] 前缀以下是最常被问到的基础概念,在线文档提供完整细节。
export default {
manifest: {
id: '@scope/name', // 全局唯一
name: '名称', version: '0.1.0',
engines: { openlearn: '>=5.0.0' },
requires: ['@openlearn/core:ICommandBusService@^1.0.0'],
capabilitiesProposed: ['lesson:read'],
},
async activate(ctx) { /* 注册 Action、Handler、Event */ },
async deactivate() { /* 清理 */ },
};
Action → actionRegistry.register() AI 可调用 ↓ (关联 commandType) Command → commandBus.registerHandler() 业务逻辑 ↓ (执行后发布) Event → eventBus.publish() 审计日志 + 实时推送
| 服务 | ctx.services.xxx |
用途 |
|---|---|---|
| CommandBus | .commandBus |
注册/执行命令 |
| EventBus | .eventBus |
发布/订阅事件 |
| ActionRegistry | .actionRegistry |
注册 AI 工具 |
| Capability | .capability |
权限管理 |
| Process | .processManager |
后台进程 |
| Storage | .storage |
K-V 存储 |
| AI | .ai |
文本生成 |
其他通过 ctx.resolve(Token) 获取:IDatabaseToken、IPluginHostToken 等。
{resource}:{action},如 lesson:read、lesson:write、whiteboard:*
| 文件 | 说明 |
|---|---|
references/.cache-meta.json |
缓存元信息(lastUpdated 日期),用于探活比对 |
references/plugin-development-tutorial.md |
插件开发完全指南本地快照(API、Action/Handler/Event、前端、安全) |
references/architecture.md |
架构总览本地快照(CommandBus、生命周期、Worker Thread、DI、安全模型) |
references/scaffold.md |
脚手架指南本地快照(CLI 命令、模板、常见问题) |
assets/server-only/ |
server-only 插件模板 |
assets/full-stack/ |
full-stack 插件模板 |
assets/frontend-only/ |
frontend-only 插件模板 |
| 文档 | URL |
|---|---|
| 索引页(探活用) | https://openlearn-next-v2.readthedocs.io/zh-cn/latest/ |
| 插件开发完全指南 | https://openlearn-next-v2.readthedocs.io/zh-cn/latest/plugin-development-tutorial.html |
| 架构总览 | https://openlearn-next-v2.readthedocs.io/zh-cn/latest/architecture_review_report.html |
| 脚手架指南 | https://openlearn-next-v2.readthedocs.io/zh-cn/latest/scaffold.html |
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章