SuperAPI AI 工具集

canvas-course-repo

办公与效率

查看项目

更新于 10-16 08:35

技能介绍

用途:该技能处理 Canvas 课程内容的写入(写侧),页面与各模块事实存放在 git 仓库中,由 canvaslms 命令推送;读取由 canvas-info 负责。课程自身的模块形态、命名与 make 目标应写在该仓库的 CLAUDE.md 中。

主要能力与规则:文件是唯一事实来源,不要从 Canvas 拉回页面;Canvas 会剥离 HTML 注释,生成器标记和 TODO 注释只存在于本地。会话首次推送前要检查 Canvas,因为作者也会在 Web UI 中发布页面、移动条目、重命名;用 modules view --show-position 及各条目的发布状态与文件比对,以作者的新决定为准更新文件。每次写入与验证读取都使用 --no-cache,且放在子命令之前,如 canvaslms --no-cache pages edit ...。首次创建一次,之后常规推送不加 --create,避免重名页面重复;重命名时先用旧正则加新标题推送一次,再改正则。新内容默认未发布(published: false),待作者发布后再改文件。新的写入类型先在沙箱课程中演练并做前后 JSON 快照再还原,不要对扇出路径做写测试。canvaslms 无法完成的事(如创建 FeedbackFruits 等 LTI 内容)属于作者步骤,只列入报告,不要自行用原始 API 调用;缺失功能应提 issue 到 dbosk/canvaslms。写入较慢(约每页 15 秒),批量在后台运行并每文件一行摘要,不要同时对同一模块运行两个批次。

front matter 语义(对照 canvaslms 6.21):regex 用于身份匹配(标题/名称、URL slug 或数字 id),改名中的作业用 '^<id>$';name/title 必填;modules 带条目时为权威,会添加、移动到位置并移除未列出的模块;modules: [] 表示从所有模块分离但保留对象;省略 modules 则不动成员关系;published 存在时发送;body 始终作为页面正文或作业描述发送,空 body 会静默替换为换行(dbosk/canvaslms#488)。只有文件中存在的字段才会发送,未提及的 external_tool_tag_attributes、rubric、分数与日期会保留。

带描述的条目改元数据:空描述的作业可用仅含 front matter 的文件;其他情况需逐字节保留描述,使用 canvaslms --no-cache assignments edit -c '^COURSE$' --html --no-link-translation -f item.html.md,--html 跳过 Markdown 转换,--no-link-translation 保持课程链接不变;不要通过 assignments view 的 Markdown 往返,会有损。

模块形态:模块的形态定义在课程 CLAUDE.md 中,是条目种类与命名模式的有序列表。应用时先盘点模块(scripts/canvas_snapshot.py module)并保留 JSON 作为描述备份;把现有条目映射到槽位(保留、重命名、移动、分离),形态未提及的条目保留在末尾;自上而下应用,位置从 1 开始,插入会使下方移动,因此先创建页面再依次放置,作业按 id 定位。分离而非删除,用 modules: [] 加 published: false。占位符为 SubHeader 文本标题,可用 canvaslms modules add-item / remove-item 增删,add-item 幂等(相同标题,或 -t page|assignment|quiz --content REGEX 相同内容)并在给出 -p 时移动已有条目,可重复执行;新条目默认未发布除非 --publish。remove-item 保留内容并留下位置空隙。审计用 canvaslms --no-cache modules view -c C --show-position '^Module$' 逐行匹配形态。最后将位置写回文件,占位符被多个条目替换时同步更新下方位置。

从 worktree 推送:基于 make 的推送目标把 stamp 文件放在主检出处,从 worktree 时单文件推送(canvaslms --no-cache pages edit -c C -f file.md)并不要动 stamp。

报告:按模块说明创建、重命名、移动、分离了什么,留给作者的步骤(LTI 内容、发布),并链接所提的 canvaslms issue。限制:未提供付费、价格与平台支持等事实。