更新课评系统代码

This commit is contained in:
qiuyan
2026-06-02 23:01:58 +08:00
parent f8c4b6174f
commit cd05b8a5a7
45 changed files with 8260 additions and 345 deletions

View File

@@ -1,12 +1,126 @@
---
name: keping-advanced
description: 穹狼乐高编程高级课评生成Skill。当用户需要生成个性化课评、写课后反馈、创建学生评价时使用。根据学生画像、课程教案、历史课评、学期周数等多维度信息自动生成180-350字专业课评根据输入丰富度弹性调整。支持自动周数计算和主题关联。采用"生成即自动保存"流程:课评生成后立即自动保存到 feedback/ 个人课评文件课评规范V1.0标准),无需教师确认。支持补课/体验学生的灵活处理。适用于2.5岁-小学四年级学生,支持幼儿积木、少儿编程、机器人竞赛等多种课程类型。触发词:/课评、/keping、/写课评、生成课评。
version: 4.0.0
description: 穹狼乐高编程高级课评生成Skill。当用户需要生成个性化课评、写课后反馈、创建学生评价时使用。根据学生画像、课程教案、历史课评、学期周数等多维度信息自动生成180-350字专业课评根据输入丰富度弹性调整。支持自动周数计算和主题关联。采用"生成即自动保存"流程:课评生成后立即自动保存到 feedback/ 个人课评文件课评规范V1.0标准),无需教师确认。支持补课/体验学生的灵活处理。适用于2.5岁-小学四年级学生,支持幼儿积木、少儿编程、机器人竞赛等多种课程类型。交互式流程:输入 /周几(如 /周六)、/今天 或 /交互式 启动友好的多轮对话流程。触发词:/课评、/keping、/写课评、生成课评、/周六、/今天、/交互式、/批量
version: 4.3.0
author: 穹狼教学团队
---
# 高级课评生成 Skill
## 命令识别与流程选择
本技能根据不同的触发命令,自动选择相应的流程:
| 触发命令 | 流程选择 | 说明 |
|---------|---------|------|
| **`/周几`** | **交互式流程(推荐)** | **按上课日快速索引**,如 `/周六``/周日``/周四` |
| `/今天` | 交互式流程(今天的班级) | 自动判断当天星期几,启动交互式流程 |
| `/交互式` | 交互式流程(通用) | 启动交互式流程,显示完整班级列表 |
| `/批量` | 批量输入模式 | 启动批量输入模式 |
| `/课评`/`/keping`/`/写课评`/`生成课评` | 标准模式 | 需要用户提供日期、班级、学生表现等完整信息 |
## 交互式流程实现v4.3
### 第一步:按上课日快速索引
当用户输入 `/周六`(或 `/今天``/周四` 等)时,执行以下操作:
1. 根据星期几匹配对应班级(如 `/周六` → 匹配所有含"周六"的班级目录)
2. 如果输入的 `/今天`,自动计算当天星期几再匹配
3. 读取 `.claude/memory/class/` 目录,筛选匹配的班级
4. 使用 AskUserQuestions 工具,以单选形式展示匹配的班级选项
5. 添加"其他班级(手动输入)"选项
6. 记录用户选择的班级
**工作日对照表**
| 指令 | 匹配班级示例 |
|:-----|:-------------|
| `/周四` | 发现世界-周四19点 |
| `/周五` | AICODE03小Q周五1900 |
| `/周六` | 发现世界-周六09点、Wedo创造世界-周六1030、AICODE03小Q周六1400 等 |
| `/周日` | 发明世界-周日14点、SPIKE02-周日1030 等 |
**AskUserQuestions 参数配置(以 /周六 为例):**
```
{
"questions": [
{
"question": "请选择今天要写课评的班级",
"header": "班级选择",
"options": [
"发现世界-周六09点",
"Wedo创造世界-周六1030",
"AICODE03小Q周六1400",
"Wedo创造世界-周六16点",
"发现世界-周六19点",
"手动输入其他班级名称"
],
"multiSelect": false
}
]
}
```
### 第二步学生名单加载B模式分开展示
选择班级后:
1. 检查该班级目录:`.claude/memory/class/{班级}/`
2. 查找该班级下的现有学生(有 profile.md 的子目录)
3. 展示学生列表B模式每人独立显示含状态标记按钮
4. 如果无学生,提示教师手动输入学生名单
**B模式展示格式**
```
┌─ 学生1: 乔乔 ─────────────────────────┐
│ 状态:[✅出勤] [🚫请假] [📝体验] [🔄补课] │
│ 表现_____________________________ │
└────────────────────────────────────────┘
┌─ 学生2: 昊昊 ─────────────────────────┐
│ 状态:[✅出勤] [🚫请假] [📝体验] [🔄补课] │
│ 表现_____________________________ │
└────────────────────────────────────────┘
...
```
### 第三步:一次性批量填写学生表现
教师在输入框中一次性输入所有学生表现(多行):
```
乔乔gj5→zd3→zt ↑++
昊昊慢热→zd3→反复调 →
小明 体验
小红搭了3层开心 ↑
```
**标记快捷操作**
- `{学生} 请假` → 标记为请假(不生成课评)
- `{学生} 体验` → 标记为体验学生(仅汇总)
- `{学生} 补课` → 标记为补课学生(跨班级自动保存)
- `{学生} 出勤` → 恢复默认出勤状态
### 第四步:确认并批量生成
展示已填写的所有学生预览汇总表,待教师确认后一次性生成所有课评。
**汇总格式**
```
| 学生 | 状态 | 表现摘要 | 标记 |
|:-----|:----:|:---------|:----:|
| 乔乔 | ✅ 待生成 | gj5→zd3→zt ↑++ | 出勤 |
| 昊昊 | ✅ 待生成 | 慢热→zd3→反复调 → | 出勤 |
| 小明 | 📝 仅汇总 | 体验课 | 体验 |
| 小红 | ✅ 待生成 | 搭3层 ↑ | 出勤 |
[全部生成] → 一次性生成所有课评
```
---
## 功能概述
本Skill根据学生画像、课程教案、历史表现等多维度信息自动生成个性化课后评价180-350字根据输入丰富度弹性调整
@@ -164,7 +278,7 @@ author: 穹狼教学团队
- 评价维度
- 适龄提示
**路径**`memory/lesson/{课程目录}/{课程代码}.md`
**路径**`.claude/memory/lesson/{课程目录}/{课程代码}.md`
**输出**`lesson_content` 对象(含`week_number`周数信息)
@@ -375,9 +489,9 @@ ELSE IF student_type == "guest"(补课/体验学生):
.claude/memory/class/{班级}/{学生}/feedback/
# 课程教案
memory/lesson/01-发现世界-螺丝刀/{课程代码}.md
memory/lesson/08-SPIKE/{课程代码}.md
memory/lesson/09-AICODE-AICODE/{课程代码}.md
.claude/memory/lesson/01-发现世界-螺丝刀/{课程代码}.md
.claude/memory/lesson/08-SPIKE/{课程代码}.md
.claude/memory/lesson/09-AICODE03/{课程代码}.md
# 学期周数与主题映射
.claude/rules/15-semester-weeks.md
@@ -495,6 +609,7 @@ memory/lesson/09-AICODE-AICODE/{课程代码}.md
| 版本 | 日期 | 更新内容 |
|-----|------|---------|
| **v4.3.0** | **2026-05-16** | **交互式流程优化**:新增 `/周几` 快速索引指令B模式分开展示学生 + 独立输入区 + 快捷标记按钮(请假/体验/补课/出勤);批量输入+批量生成 |
| **v4.0.0** | **2026-05-14** | **同步课评规范V1.0**:改用 `.claude/memory/class/` 目录结构feedback/*.md 单次文件统一课程编号AI编程→AICODEC++→CSP补课双向追踪`(补课-去班级名).md`);删除"待确认"步骤,生成即自动保存 |
| v3.1.0 | 2026-05-05 | **生成即双轨保存**:删除"待确认"状态,改为生成后立即自动保存;出勤嵌入班级汇总 |
| v2.5.0 | 2026-05-01 | **统一字数标准**将课评字数统一为弹性范围180-350字与系统规则保持一致 |

View File

@@ -1,8 +1,9 @@
{
"name": "keping-advanced",
"skill_name": "keping-advanced",
"version": "4.0.0",
"description": "高级课评生成Skill v4.0 - 支持学期周数自动计算仅用于后端课程主题匹配、课程主题自动匹配、三段式课评生成、自动保存到feedback/个人文件课评规范V1.0标准)",
"triggers": ["/课评", "/keping", "/写课评", "生成课评"],
"version": "4.3.0",
"description": "高级课评生成Skill v4.3 - 支持交互式流程(/周六、/今天)、学期周数自动计算仅用于后端课程主题匹配、课程主题自动匹配、三段式课评生成、自动保存到feedback/个人文件课评规范V1.0标准)",
"triggers": ["/课评", "/keping", "/写课评", "生成课评", "/周六", "/周日", "/周四", "/周五", "/今天", "/交互式", "/批量"],
"semester_config": {
"baseline_date": "2026-03-02",
"week_calculation": "Floor((current_date - baseline) / 7) + 1",
@@ -10,6 +11,42 @@
"current_week": 11,
"current_date": "2026-05-14"
},
"interactive_workflow": {
"enabled": true,
"default_mode": "interactive",
"weekday_quick_index": {
"enabled": true,
"commands": ["/周一", "/周二", "/周三", "/周四", "/周五", "/周六", "/周日"],
"mapping_method": "匹配班级目录中对应星期关键词"
},
"step_1_weekday_select": {
"title": "选择上课日",
"subtitle": "请选择要处理的星期(或使用 /周几 快速索引)",
"options": ["周四", "周五", "周六", "周日", "其他"],
"custom_input_label": "其他日子",
"allow_custom": true
},
"step_2_class_selected": {
"title": "填写学生表现B模式",
"subtitle": "一次性输入所有学生的表现(每行一个),支持速记符号和快捷标记(请假/体验/补课)",
"default_students": ["乔乔", "昊昊", "小明", "小红"],
"quick_mark_buttons": ["请假", "体验", "补课", "出勤"],
"display_mode": "B_split_view",
"batch_input_hint": "乔乔gj5→zd3→zt ↑++\n昊昊慢热→zd3→反复调 →\n小明 体验\n小红搭了3层开心 ↑"
},
"step_3_batch_generate": {
"title": "确认批量生成",
"subtitle": "预览所有已填写的学生,确认后一次性批量生成课评",
"confirm_label": "全部生成",
"cancel_label": "取消",
"modify_label": "修改学生"
}
},
"batch_workflow": {
"enabled": true,
"header": ["学生", "核心表现", "情绪"],
"default_students": ["乔乔", "昊昊", "小明", "小红"]
},
"course_mapping": {
"发现世界": {"prefix": "DISC", "week_mapping": {"1": "DISC-001", "2": "DISC-002", "3": "DISC-003", "4": "DISC-004", "5": "DISC-005", "6": "DISC-006", "7": "DISC-007", "8": "DISC-008", "9": "DISC-009", "10": "DISC-010", "11": "DISC-011", "12": "DISC-012", "13": "DISC-013", "14": "DISC-014", "15": "DISC-015", "16": "DISC-016", "17": "DISC-017", "18": "DISC-018", "19": "DISC-019", "20": "DISC-020"}},
"SPIKE": {"prefix": "SPIKE", "week_mapping": {"1": "SPIKE-001", "2": "SPIKE-002", "3": "SPIKE-003", "4": "SPIKE-004", "5": "SPIKE-005", "6": "SPIKE-006", "7": "SPIKE-007", "8": "SPIKE-008", "9": "SPIKE-009", "10": "SPIKE-010", "11": "SPIKE-011", "12": "SPIKE-012", "13": "SPIKE-013", "14": "SPIKE-014", "15": "SPIKE-015", "16": "SPIKE-016", "17": "SPIKE-017", "18": "SPIKE-018", "19": "SPIKE-019", "20": "SPIKE-020"}},
@@ -64,7 +101,7 @@
"input": ["学生姓名", "班级"],
"output": ["最近10次课评", "能力发展趋势", "进步轨迹", "反复问题"],
"file_pattern": ".claude/memory/class/{班级}/{学生}/feedback/",
"limit": 10
"limit": 3
},
{
"id": "step5",
@@ -239,5 +276,5 @@
"class_summary_save_failed": {"message": "班级总结保存失败,已加入待补存队列。", "action": "add_to_compensation_queue", "fallback": "下次生成课评前自动补存,或教师输入'补存'手动触发"}
},
"created_at": "2026-03-25",
"updated_at": "2026-05-14"
"updated_at": "2026-05-16"
}

View File

@@ -11,7 +11,7 @@
---
## ⚡ 快速用法v4.0 课评规范V1.0标准)
## ⚡ 快速用法v5.0 课评规范V1.0标准)
### 1. 极简输入(推荐)- 自动计算周数和主题
@@ -64,13 +64,14 @@
| 4月20日-26日 | 第8周 | DISC-008 | SPIKE-008 | AICODE03-008 |
| 4月27日-5月3日 | 第9周 | DISC-009 | SPIKE-009 | AICODE03-009 |
| 5月4日-10日 | 第10周 | DISC-010 | SPIKE-010 | AICODE03-010 |
| **5月11日-17日** | **第11周** | **DISC-011 鳄鱼** | **SPIKE-011 摩天轮** | **AICODE03-008** |
| 5月11日-17日 | 第11周 | DISC-011 鳄鱼 | SPIKE-011 摩天轮 | AICODE03-011 魔幻俄罗斯方块(下) |
| **5月18日-24日** | **第12周** | **DISC-012 数字宝箱** | **SPIKE-012 直升机** | **AICODE03-012 涂鸦PK** |
**当前**2026年5月14日 = **第11**
**当前**2026年5月22日 = **第12**
---
## 📋 8步流程速览v4.0
## 📋 8步流程速览v5.0
| 步骤 | 动作 | 耗时 | 输出 |
|:---:|:-----|:---:|:----|
@@ -79,7 +80,7 @@
| **3** | **计算周数+匹配主题** | **<1s** | **第X周、课程代码、知识点** |
| 4 | 读取历史课评feedback/目录) | <1s | 近10次记录、趋势 |
| 5 | 解析本节课表现 | <1s | 关键行为、情绪 |
| 6 | 生成个性化课评 | 2-3s | 180-350字文本(关联主题 |
| 6 | 生成个性化课评 | 2-3s | 220-300字(标准版)/ 300-400字详细版 |
| 7 | 自动保存 feedback/*.md | <1s | 课评规范V1.0标准文件 |
| 8 | 更新成长记录 | <1s | 更新确认 |
@@ -100,13 +101,13 @@
---
## 📚 第11周主题速查当前周2026年5月14日)
## 📚 第12周主题速查当前周2026年5月22日)
| 班级 | 课程代码 | 主题 | 核心知识点 |
|-----|:-------:|:-----|:-----------|
| 发现世界 | DISC-011 | **鳄鱼** | 嘴巴开合、铰链结构、咬合功能 |
| SPIKE | SPIKE-011 | **摩天轮** | 圆周运动、速度控制、观赏设计 |
| AICODE03 | AICODE03-008 | **我的个人主页(上** | 内容先行、板块化设计、自定义智能体 |
| 发现世界 | DISC-012 | **数字宝箱** | 密码锁、数字认知、空间藏物 |
| SPIKE | SPIKE-012 | **直升机** | 螺旋桨、升力原理、飞行控制 |
| AICODE03 | AICODE03-012 | **涂鸦PK** | 精准需求编写、新窗口审核、角色属性设计 |
---
@@ -117,7 +118,23 @@
| `→` | 行为发展/时间线 | `观望5分钟→主动尝试` |
| `,` | 并列行为 | `搭3层,自己调高度` |
| `→`情绪 | 情绪变化 | `兴奋→烦躁` |
| `比上周` | 纵向对比 | `比上周主动` |
---
## 🎨 Emoji 使用规范
**总数量**:每篇课评使用 **3-5个** Emoji
| 位置 | 数量 | 用途 | 推荐表情 |
|------|:----:|------|----------|
| 第1段知识点 | 1个 | 段尾点缀 | 🔍 💡 ⚙️ 🎯 |
| 第2段掌握与操作 | 1-2个 | 分散插入 | 💪 ✨ 📈 🤝 |
| 第3段亮点与成长 | 1-2个 | 分散插入 | 😊 🌟 💫 🎉 |
| 第4段建议 | 1个 | 段尾点缀 | 🏠 🔧 📚 |
**使用原则**
- 学龄前版2.5-6岁表情丰富增强亲切感
- 小学版6-10岁适度使用保持专业性
---
@@ -125,9 +142,9 @@
| 年龄段 | 字数 | 语气 | 侧重点 |
|-------|:---:|:----|:-------|
| 2.5-6岁 | 180-350 | 温暖具体 | 参与、情绪、兴趣 |
| 6-8岁 | 190-350 | 尊重专业 | 能力、习惯、逻辑 |
| 8-10岁 | 200-350 | 成长数据 | 项目、竞赛、自主 |
| 2.5-6岁 | 220-300标准版<br>300-400详细版 | 温暖具体 | 参与、情绪、兴趣 |
| 6-8岁 | 220-300标准版<br>300-400详细版 | 尊重专业 | 能力、习惯、逻辑 |
| 8-10岁 | 220-300标准版<br>300-400详细版 | 成长数据 | 项目、竞赛、自主 |
---
@@ -147,13 +164,12 @@
生成后自动检查:
- [ ] 字数 180-350 字(根据输入丰富度弹性调整
- [ ] 5个必写模块完整
- [ ] 字数 220-300字标准版/ 300-400字详细版
- [ ] 4个必写模块完整(知识点、掌握与操作、亮点、建议)
- [ ] 学生姓名正确
- [ ] **知识点与当周主题关联**
- [ ] 周数仅在后台使用,正文不显示
- [ ] 无禁用词汇
- [ ] 纵向对比有据
- [ ] 建议可操作
---
@@ -165,7 +181,7 @@
.claude/memory/class/{班级}/{学生}/profile.md ← Step 1
.claude/rules/15-semester-weeks.md ← Step 3周数计算
.claude/rules/10-style.md ← Step 2
memory/lesson/**/{课程代码}.md ← Step 3
.claude/memory/lesson/**/{课程代码}.md ← Step 3
.claude/memory/class/{班级}/{学生}/feedback/ ← Step 4
# 写入课评规范V1.0标准)
@@ -194,4 +210,4 @@ memory/lesson/**/{课程代码}.md ← Step 3
---
*速查卡 v4.0 | 2026-05-14 | 同步课评规范V1.0*
*速查卡 v5.0 | 2026-05-22 | 同步课评规范V1.0*

View File

@@ -0,0 +1,456 @@
---
name: keping-optimizer
description: 课评工作流程优化Skill。提供三级备份机制、自动补全缺失信息、路径自动创建、速记符号自动补全、智能班级预加载、实时校验提醒等功能让课评更高效更安全。
version: 1.0.0
author: 穹狼教学团队
---
# 课评工作流程优化 Skill
## 功能概述
本Skill提供一系列工作流程优化功能提升课评生成效率、数据安全性和规范一致性。
### 核心能力
- **三级备份机制**:防止数据丢失,提供完整恢复选项
- **自动补全缺失信息**:日期、课程编号、课次自动填入
- **路径自动创建**:自动创建不存在的目录结构
- **速记符号自动补全**:输入时实时提示和补全
- **实时校验提醒**:保存前检查规范,提前发现问题
- **智能班级预加载**:根据时间自动预加载当天班级
---
## 一、三级备份机制
### 功能说明
确保课评数据安全,防止因系统问题或人为失误导致数据丢失。
### 备份策略
```
┌───────────────────────────────────────────────────────┐
│ 第1级直接保存到目标路径主保存
│ └── 路径:.claude/memory/class/... │
│ │
│ 第2级同时保存到 .backup/ 目录(时间戳备份) │
│ └── 路径:.claude/.backup/YYYYMMDD_HHMMSS_{学生}.md│
│ │
│ 第3级写入前备份现有文件防止覆盖
│ └── 路径:原文件路径 + .md.bak │
└───────────────────────────────────────────────────────┘
```
### 执行流程
```
1. 检查目标路径是否存在 → 不存在则自动创建
2. 检查是否存在旧文件 → 存在则先备份为 .md.bak
3. 写入新文件到主路径
4. 同时写入备份到 .claude/.backup/ 目录
5. 确认两次写入都成功
6. 删除超过7天的旧备份自动清理
```
### 恢复功能
```
指令:/恢复 乔乔
→ 列出该学生的所有备份版本
→ 选择版本恢复
指令:/恢复备份
→ 恢复最近一次备份
```
### 自动清理策略
- 保留最近7天的所有备份
- 保留每月1号的备份长期存档
- 自动删除超过时间的备份
---
## 二、自动补全缺失信息
### 功能说明
教师只需输入核心表现,系统自动补全日期、课程编号、课次等元信息。
### 自动补全规则
| 信息项 | 补全规则 | 默认值 |
|--------|---------|--------|
| **日期** | 取当天日期格式YYYYMMDD | 20260516 |
| **课程编号** | 根据班级名称自动匹配 | 如AICODE03-01 |
| **课次** | 根据学期周数自动计算 | 第11周 = 课次11 |
| **课程主题** | 根据课程代码+周数自动匹配 | 如"蜥蜴" |
### 输入示例
**极简输入**
```
/课评 班级:发现世界-周四19点
乔乔gj5→zd3→zt ↑++
```
**自动补全后**
```
日期20260516
班级:发现世界-周四19点
课程编号DISC-011
课次第11课
课程主题:鳄鱼
```
### 手动覆盖规则
如果教师显式输入了某项信息,优先使用教师输入:
```
日期4月2日 ← 教师指定,优先使用
班级:发现世界-周四19点
乔乔gj5→zd3→zt ↑++
```
---
## 三、路径自动创建
### 功能说明
自动创建不存在的目录结构,避免因目录缺失导致保存失败。
### 自动创建的目录结构
```
.claude/memory/class/
├── {班级名称}/
│ ├── summaries/ ← 自动创建
│ ├── {学生姓名}/
│ │ └── feedback/ ← 自动创建
│ └── 补课/
│ └── {学生姓名}/
│ └── feedback/ ← 自动创建
└── .backup/ ← 自动创建
```
### 执行逻辑
```python
目标路径.claude/memory/class/AICODE03小Q周五1900/乔乔/feedback/
检查.claude/memory/class/ 存在
检查.claude/memory/class/AICODE03小Q周五1900/ 存在
不存在自动创建
检查.claude/memory/class/AICODE03小Q周五1900/乔乔/ 存在
不存在自动创建
检查.claude/memory/class/AICODE03小Q周五1900/乔乔/feedback/ 存在
不存在自动创建
目录完整可以保存
```
### 目录缺失提示
创建目录时提供提示:
```
⚠️ 目录不存在,已自动创建:.claude/memory/class/.../feedback/
```
---
## 四、速记符号自动补全
### 功能说明
输入速记符号时实时提示含义并提供Tab补全功能。
### 速记符号速查表
| 符号 | 含义 | 完整描述 |
|------|------|---------|
| `gj` | 观望 | gj5=观望5分钟 |
| `zd` | 主动搭 | zd3=主动搭3层 |
| `zt` | 自己调整 | 球卡住时自己调整 |
| `wb` | 完成 | 独立完成搭建 |
| `zx` | 专注 | zx15=专注15分钟 |
| `sb` | 失败后调整 | sb2=失败2次后成功 |
| `ts` | 探索 | ts5=探索5分钟 |
| `cz` | 创造 | cz3=3种创意方案 |
| `wt` | 提问 | wt3=提问3次 |
| `hz` | 合作 | 合作完成 |
| `fx` | 分享 | 分享想法/作品 |
### 自动补全交互示例
**示例1自动补全数字**
```
教师输入乔乔gj
系统提示:
├─ gj3 → 观望3分钟
├─ gj5 → 观望5分钟
└─ gj10 → 观望10分钟
教师按Tab键→ gj5
```
**示例2符号理解提示**
```
教师输入乔乔zd3
系统提示:✅ 识别为「主动搭3层」
```
**示例3模糊匹配**
```
教师输入乔乔g5
系统提示:是否是 gj5观望5分钟 [是/否]
```
---
## 五、实时校验提醒
### 功能说明
保存前自动检查课评是否符合规范,提前发现并提醒问题。
### 校验清单
| 检查项 | 规范要求 | 检查方式 |
|--------|---------|---------|
| **课程编号** | CSP/AICODE前缀不是C++/AI | 正则匹配 |
| **日期格式** | YYYYMMDD格式 | 格式验证 |
| **目录结构** | 完整路径存在 | 路径检查 |
| **文件命名** | 符合规范要求 | 正则匹配 |
| **课评正文** | 不提及"补课"等词 | 关键词扫描 |
| **字数范围** | 180-350字 | 字数统计 |
### 校验结果展示
**通过(全部绿色)**
```
✅ 课程编号AICODE03-11符合规范
✅ 日期格式20260516正确
✅ 目录结构:完整存在
✅ 文件命名:规范
✅ 课评正文:无违规词汇
✅ 字数210字符合要求
```
**存在问题(黄色警告)**
```
⚠️ 课程编号AI03-11不是标准格式
→ 建议改为AICODE03-11
⚠️ 课评正文:检测到「补课」词汇
→ 建议删除或替换
```
### 校验时机
- **生成后立即校验**:课评生成完成即检查
- **保存前最终校验**:写入文件前最后检查
- **教师可跳过**:警告不阻塞保存,但记录在待修复列表
---
## 六、智能班级预加载
### 功能说明
每次打开系统时,根据当前时间自动预加载当天的班级。
### 预加载规则
| 当前时间 | 自动预加载班级 |
|---------|----------------|
| 周一上午10点 | 小小班-周一上午10点 |
| 周一下午16点 | 小小班-周一下午16点 |
| 周四晚上19点 | 发现世界-周四19点 |
| 周六上午10点 | SPIKE-周六上午10点 |
| 周六下午14点 | AICODE03-周六下午14点 |
### 快捷指令
| 指令 | 功能 |
|------|------|
| **`/周几`** | **按上课日快速索引(推荐)**,如 `/周六``/周日``/周四` |
| `/今天` | 自动判断当天星期几,选择对应班级 |
| `/本周` | 选择本周的班级列表 |
| `/班级` | 手动选择班级 |
| `/模板 {班级}` | 加载班级学生名单模板 |
### 模板加载示例
**指令**`/模板 周四19点`
**自动生成**
```
班级:发现世界-周四19点
日期20260516
乔乔______
昊昊______
小明______
小红______
```
---
## 七、批量处理优化
### 7.1 并行生成 + 逐份实时保存
**问题**:全部生成后统一保存,一旦中断全部丢失
**优化**:生成一份立即保存一份
```
教师输入5个学生 → 系统并行生成
→ 乔乔课评生成完成 → 立即保存 ✅
→ 昊昊课评生成完成 → 立即保存 ✅
→ 其他继续...
```
**中断恢复**
```
上次中断:乔乔、昊昊已保存,小明、小红未完成
重新运行:检测到已保存的学生,直接跳过,继续处理未完成的
```
### 7.2 批量修改工具
**功能**:一次性修改多个课评的共同内容
**指令格式**
```
/批量修改 {查找内容}→{替换内容}
```
**示例**
```
/批量修改 搭建→拼搭
→ 自动查找并替换本周所有课评中的"搭建"为"拼搭"
/批量添加 继续加油!
→ 自动在所有课评结尾添加"继续加油!"
```
---
## 八、快捷指令大全
| 指令分类 | 指令 | 功能描述 |
|---------|------|---------|
| **班级选择** | **`/周几`** | **按上课日快速索引(推荐)**,如 `/周六``/周日` |
| | `/今天` | 自动判断当天星期几,选择对应班级 |
| | `/本周` | 选择本周班级列表 |
| | `/班级 {班级名}` | 手动选择指定班级 |
| **模板加载** | `/模板 {班级}` | 加载班级学生名单模板 |
| | `/空模板` | 创建空模板 |
| **批量操作** | `/批量修改 {查找}→{替换}` | 批量替换课评内容 |
| | `/批量添加 {内容}` | 批量在课评结尾添加内容 |
| **数据恢复** | `/恢复 {学生}` | 恢复该学生的备份 |
| | `/恢复备份` | 恢复最近一次备份 |
| | `/清理备份` | 清理过期备份文件 |
| **校验检查** | `/检查` | 检查本周课评是否符合规范 |
| | `/检查 {班级}` | 检查指定班级课评 |
| **保存与补存** | `/补存` | 尝试重新保存失败的课评 |
| | `/学生 {姓名}` | 查看学生档案和历史课评 |
---
## 九、待修复列表功能
### 功能说明
保存校验发现问题但教师选择跳过保存时,自动记录在待修复列表,后续可集中处理。
### 待修复列表存储
```
路径:.claude/.tasks/fix-list-YYYYMMDD.md
```
### 待修复项目格式
```markdown
# 待修复列表 - 2026-05-16
## 发现世界-周四19点
- [ ] 乔乔课程编号不规范AI03-11 → 建议改为 AICODE03-11
- [ ] 昊昊:课评正文包含"补课"词汇(需要删除或替换)
- [ ] 小明字数仅140字需要补充内容
## AICODE03-周六14点
- [ ] 小红:文件命名不符合规范
```
### 修复流程
```
指令:/修复
→ 展示待修复列表
→ 逐个处理或批量自动修复
→ 修复完成从列表移除
```
---
## 十、组合使用示例
### 完整优化流程示例
**Step 1智能预加载班级**
```
教师:/周六(或 /今天)
→ 自动加载:发现世界-周六09点
```
**Step 2加载班级模板**
```
教师:/模板 周四19点
→ 自动生成学生名单模板
```
**Step 3速记符号输入自动补全**
```
乔乔gj5→zd3→zt ↑++
昊昊慢热→zd3→反复调 →
```
**Step 4生成并立即保存三级备份**
```
→ 生成乔乔课评 → 立即保存(三级备份)✅
→ 生成昊昊课评 → 立即保存(三级备份)✅
```
**Step 5实时校验提醒**
```
✅ 乔乔:全部通过
⚠️ 昊昊课程编号不规范建议改为DISC-011
→ 教师确认修改 → 自动修复后保存
```
**Step 6完成**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 全部完成!
已保存学生2人
已备份文件4份主文件+备份)
待修复项目0项
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
---
## 依赖文件
```
# 规则文件
.claude/rules/00-core.md
.claude/rules/20-workflow.md
.claude/rules/21-shorthand.md
# 学生数据
.claude/memory/class/{班级}/{学生}/profile.md
.claude/memory/class/{班级}/{学生}/feedback/
# 备份目录(自动创建)
.claude/.backup/
.claude/.tasks/
```
---
## 版本历史
| 版本 | 日期 | 更新内容 |
|-----|------|---------|
| **v1.0.0** | **2026-05-16** | 初始版本:三级备份、自动补全、路径自动创建、速记补全、实时校验、智能预加载、批量处理、待修复列表 |
---
*维护者:穹狼教学团队*
*最后更新2026-05-16*

View File

@@ -0,0 +1,30 @@
{
"name": "keping-optimizer",
"version": "1.0.0",
"description": "课评工作流程优化Skill",
"triggers": [
"/优化",
"/optimizer",
"/备份",
"/恢复",
"/检查",
"/补存",
"/周几",
"/周一",
"/周二",
"/周三",
"/周四",
"/周五",
"/周六",
"/周日",
"/今天",
"/本周",
"/模板",
"/批量修改",
"/修复"
],
"enabled": false,
"auto_load": true,
"created_at": "2026-03-25",
"updated_at": "2026-05-16"
}

View File

@@ -0,0 +1,219 @@
# 课评优化工具速查卡
## 一、核心优化功能
| 功能 | 说明 | 使用场景 |
|------|------|---------|
| **三级备份** | 防止数据丢失,主文件+备份+bak文件 | 所有保存操作自动执行 |
| **自动补全** | 日期、课程编号、课次自动填入 | 教师只需输入学生表现 |
| **路径自动创建** | 自动创建不存在的目录 | 首次保存新学生/新班级 |
| **速记补全** | 输入过程中实时提示速记含义 | 快速输入时 |
| **实时校验** | 保存前检查规范,提前发现问题 | 生成完成后 |
| **智能预加载** | 根据时间自动预加载当天班级 | 开始工作时 |
---
## 二、速记符号表
### 核心符号(必记)
| 符号 | 含义 | 完整描述 |
|------|------|---------|
| `gj` | 观望 | gj5=观望5分钟 |
| `zd` | 主动搭 | zd3=主动搭3层 |
| `zt` | 自己调整 | 球卡住时自己调整高度 |
| `wb` | 完成 | 独立完成搭建 |
| `↑` | 开心/积极 | 情绪良好 |
| `→` | 稳定/平和 | 情绪稳定 |
| `++` | 比上周进步 | 表现更好 |
### 扩展符号
| 符号 | 含义 | 完整描述 |
|------|------|---------|
| `zx` | 专注 | zx15=专注15分钟 |
| `sb` | 失败后调整 | sb2=失败2次后成功 |
| `ts` | 探索 | ts5=探索5分钟 |
| `cz` | 创造 | cz3=3种创意方案 |
| `wt` | 提问 | wt3=提问3次 |
| `hz` | 合作 | 合作完成 |
| `fx` | 分享 | 分享想法/作品 |
---
## 三、快捷指令
### 班级选择
| 指令 | 功能 |
|------|------|
| **`/周几`** | **按上课日快速索引(推荐)**,如 `/周六``/周日` |
| `/今天` | 自动判断当天星期几,选择对应班级 |
| `/本周` | 选择本周班级列表 |
| `/班级 {班级名}` | 手动选择指定班级 |
### 模板工具
| 指令 | 功能 |
|------|------|
| `/模板 {班级}` | 加载班级学生名单模板 |
| `/空模板` | 创建空模板 |
### 批量操作
| 指令 | 功能 |
|------|------|
| `/批量修改 {查找}→{替换}` | 批量替换课评内容 |
| `/批量添加 {内容}` | 批量在课评结尾添加内容 |
### 数据恢复
| 指令 | 功能 |
|------|------|
| `/恢复 {学生}` | 恢复该学生的备份 |
| `/恢复备份` | 恢复最近一次备份 |
| `/清理备份` | 清理过期备份文件 |
### 校验检查
| 指令 | 功能 |
|------|------|
| `/检查` | 检查本周课评是否符合规范 |
| `/检查 {班级}` | 检查指定班级课评 |
### 保存与补存
| 指令 | 功能 |
|------|------|
| `/补存` | 尝试重新保存失败的课评 |
| `/学生 {姓名}` | 查看学生档案和历史课评 |
### 修复工具
| 指令 | 功能 |
|------|------|
| `/修复` | 处理待修复列表中的项目 |
---
## 四、规范检查要点
### 课程编号规范
| 错误 | 正确 |
|------|------|
| C++ | CSP |
| AI03 | AICODE03 |
| AI编程 | AICODE |
### 日期格式
- ✅ 正确20260516
- ❌ 错误2026/05/16、5月16日、05/16
### 文件命名
- ✅ 正确20260516_DISC-011.md
- ❌ 错误5月16日课评.md、第11周课评.md
### 禁用词汇(课评正文)
- ❌ 补课、来补课、作为补课学生
- ❌ 第一次上课(除非教师明确说明)
- ❌ C++、AI编程使用标准编号
---
## 五、备份与恢复
### 备份位置
```
主文件:.claude/memory/class/{班级}/{学生}/feedback/YYYYMMDD_课程编号-课次.md
备份文件:.claude/.backup/YYYYMMDD_HHMMSS_{学生}.md
旧文件备份:原文件路径.md.bak
```
### 恢复流程
1. 输入 `/恢复 {学生姓名}`
2. 从列出的备份版本中选择
3. 确认恢复
---
## 六、待修复列表
### 位置
```
.claude/.tasks/fix-list-YYYYMMDD.md
```
### 查看与修复
```
指令:/修复
→ 展示待修复列表
→ 逐个处理或批量自动修复
```
---
## 七、完整工作流程示例
### 高效课后流程
```
1. 打开系统
└─ /周六(或 /今天)→ 自动加载发现世界-周六09点
2. 加载学生模板
└─ /模板 周四19点 → 显示学生名单
3. 速记输入(自动补全)
└─ 乔乔gj5→zd3→zt ↑ ++
系统提示gj5→zd3→zt ↑++
4. 生成课评
└─ 并行生成 → 实时保存一份一份
5. 自动校验
└─ ✅ 全部通过 ⚠️ 或 警告提示
6. 保存完成
└─ 三级备份同时保存 ✅
7. 查看待修复
└─ /修复 处理未完成项目
```
---
## 八、常见问题
### Q: 备份会占用空间吗?
A: 自动保留最近7天备份每月1号备份长期保留自动清理超过时间的备份。
### Q: 速记符号记不住怎么办?
A: 不用记住输入时系统会自动提示含义按Tab键可自动补全。
### Q: 校验警告可以跳过吗?
A: 可以,警告不阻塞保存,但会记录在待修复列表,后续可集中处理。
### Q: 目录不存在怎么办?
A: 系统会自动逐级创建完整目录结构,无需手动操作。
---
## 九、情绪符号对照表
| 符号 | 含义 | 对应表述 |
|------|------|---------|
| `↑` | 开心/积极/投入 | 开心、投入、积极、热情、参与度高 |
| `→` | 稳定/平和/正常 | 稳定、平和、正常、专注、认真 |
| `↓` | 低落/烦躁 | 低落、烦躁、不开心、需要关注 |
| `~` | 波动/反复 | 情绪波动、反复不定 |
| `++` | 进步/提升 | 比上周好、进步明显、状态提升 |
| `↑↑` | 非常开心/兴奋 | 特别开心、非常投入、状态极佳 |
| `↓↓` | 特别低落/需要关注 | 非常低落、需要关注、情绪不好 |
| `gd` | 孤独/独自玩 | 喜欢独自玩、独自活动 |
| `jl` | 焦虑/紧张/不安 | 紧张、焦虑、不安 |
---
## 十、示例速记组合
```
乔乔gj5→zd3→zt ↑++ → 观望5分钟→主动搭3层→自己调整开心比上周进步
昊昊慢热→zd3→反复调 → → 慢热主动搭3层反复调整稳定
小明专注15→完成→分享→合作 ↔ 专注15分钟→完成→分享→合作
```
---
*速查卡版本v1.0.0*
*最后更新2026-05-16*

View File

@@ -0,0 +1,227 @@
---
name: keping-simplified
description: 超级简化版课评生成器!只需输入 "/课评" 即可启动表单直连提交AI自动检测并生成。为穹狼乐高编程设计。
version: 5.1.0
author: 穹狼教学团队
---
# keping-simplified — 超级简化版课评生成器
## 🚀 核心特点
**超级简单!一键启动!**
- 只需输入 `/课评` 即可启动,无需记住一堆命令
- 启动即显示当前周数+班级选择
- 自动匹配课程主题(基于学期周数映射表)
- 本地网页表单:学生状态快捷选择 + 速记输入 + 进度条
- **直连提交**:表单直接 POST 到本地服务器,无需复制粘贴
- AI 自动检测信号文件 → 生成课评 → 双轨保存
- 完成后自动清理临时数据
---
## 📋 完整工作流程
### 第一步:启动(只需一个命令!)
```
用户输入:/课评
```
立即执行以下操作:
1. ✅ 计算当前周数基于3月2日开学
2. ✅ 显示当天对应周几的班级列表
3. ✅ 自动匹配每个班级的当周课程主题
---
### 第二步:班级选择
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 选择班级 | 第X周 YYYY-MM-DD
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
可选班级:
[1] 发现世界-周四19点DISC-011 鳄鱼)
[2] Wed创造世界-周六1030CREATE-011 推磨机器人)
[3] AICODE03小Q周六1400AICODE03-011 AI文档写作
[4] SPIKE02-周日1030SPIKE-011 摩天轮)
[5] 手动输入班级名称
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
用户选择班级后,系统自动:
1. 启动本地表单服务器(`python src/form_server.py`
2. 读取该班级目录,加载学生名单和画像
3. 匹配当周课程主题(从学期周数映射表)
---
### 第三步:打开网页表单 + 直连提交
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🖥️ 表单服务器已启动!
👉 http://localhost:8088/form?class=发现世界-周四19点&week=11&course=DISC-011&theme=鳄鱼&date=2026-05-16
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**表单已自动填入:班级、周数、日期、课程主题、学生名单(含画像摘要)**
用户在浏览器中:
1. 为每位学生选择状态(出勤/请假/补课/体验)
2. 填写课堂表现(支持速记符号)
3. 点击「🚀 提交并保存」
4. 看到「✅ 提交成功」→ 可关闭页面
**数据自动 POST 到本地服务器 → 保存为 JSON → 写入信号文件**
**表单预览**
```
┌──────────────────────────────────────────┐
│ 📝 课评填写表单 - 发现世界-周四19点 │
│ 第11周 · DISC-011 鳄鱼 · 2026-05-16 │
├──────────────────────────────────────────┤
│ 📊 填写进度3/6 · █████░░ 50% │
├──────────────────────────────────────────┤
│ ┌─梁昕乔───────────────────────┐ │
│ │ 📋 性格内向,需鼓励... │ │
│ │ [出勤] [请假] [补课] [体验] │ │
│ │ 表现____________________ │ │
│ │ (速记提示gj=观望、zd=主动) │ │
│ └──────────────────────────────┘ │
│ ┌─钟昀昊───────────────────────┐ │
│ │ [出勤] [请假] [补课] [体验] │ │
│ │ 表现____________________ │ │
│ └──────────────────────────────┘ │
│ ┌─+ 添加临时学生──────────────┐ │
│ │ 姓名____ 状态:[补课/体验] │ │
│ └──────────────────────────────┘ │
├──────────────────────────────────────────┤
│ [🚀 提交并保存] │
└──────────────────────────────────────────┘
```
---
### 第四步AI 自动检测 → 生成并保存
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔔 检测到表单提交 | 发现世界-周四19点 | DISC-011 鳄鱼
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[1/3] 生成梁昕乔课评... ✅ 已保存
[2/3] 生成钟昀昊课评... ✅ 已保存
[3/3] 生成林瀚丞课评... ✅ 已保存
📝 其他学生请假,不生成课评
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 全部完成!已保存 3 人 | 请假 2 人
🗑️ 已清理临时数据文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
点击「提交」后:
1. ✅ 数据自动 POST 到本地服务器
2. ✅ 服务器保存为 `.claude/.tmp/evaluation_input_{班级}.json`
3. ✅ 写入信号文件 `EVALUATION_READY.txt`
4. ✅ AI 检测到信号,读取 JSON 数据
5. ✅ 批量生成所有学生课评180-350字三段式
6. ✅ 自动保存到标准路径(双轨)
7. ✅ 清理临时数据文件
---
## 📋 课评生成规则
### 学生状态处理
- **出勤** → 正常生成课评,保存到 `feedback/`
- **请假** → 仅生成请假记录 `(请假).md`
- **补课** → 保存到 `补课/feedback/`
- **体验** → 保存到 `补课/feedback/`
### 三段式结构(固定不变)
```
第1段30-55字课程知识点末尾1个emoji
第2段100-220字弹性掌握+环节+亮点1-3个emoji分散插入
第3段30-55字课后建议末尾1个emoji
```
### 称呼规则
- 优先用小名/昵称
- 其次用去姓称名
- 单字名叠字化
### Emoji规则
- 第1段🔍 💡 ⚙️(根据课程类型)
- 第2段💪 ✨ 📈 🎯(根据亮点)
- 第3段🏠 🔧(根据建议)
---
## 💾 自动保存规则
### 文件路径课评规范V1.0标准)
```
.claude/memory/class/{班级}/
├── summaries/YYYYMMDD_{课程编号}_{班级反馈}.md
├── {学生}/
│ └── feedback/YYYYMMDD_{课程编号}_{课次}.md
└──补课/{学生}/
└── feedback/YYYYMMDD_{课程编号}.md
```
### 无需确认,自动保存!
课评生成后立即保存,无需教师点击确认。
---
## 📊 速记符号对照表
| 速记 | 含义 |
|------|------|
| gj# | 观望#分钟 |
| zd# | 主动搭#层 |
| zt | 自己调整 |
| wb | 完成 |
| ↑ | 开心 |
| → | 稳定 |
| ++ | 比上周进步 |
| -- | 需关注 |
---
## 📝 触发方式
**主触发词:**
- `/课评` → 启动超级简化流程
- `/keping-simple` → 别名
**不触发其他技能:**
- 不要触发 `keping-advanced``keping-optimizer`
---
## ⚙️ 关键配置
### 学期周数计算基准
- 开学日期2026年3月2日
- 周数公式Floor((当天-3月2日)/7) +1
### 班级目录路径
```
.claude/memory/class/{班级名称}/
```
---
## ✅ 质量检查清单
- [ ] 字数180-350根据输入丰富度
- [ ] 三段式结构完整
- [ ] Emoji位置正确段末/分散插入)
- [ ] 称呼正确(不用全名)
- [ ] 无周数显示(正文)
- [ ] 路径符合课评规范V1.0
---
*版本v5.1.0(表单直连提交)*
*维护者:穹狼教学团队*
*最后更新2026-05-20*

View File

@@ -0,0 +1,232 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>课评填写表单 - 穹狼乐高编程</title>
<style>
:root {
--primary:#6366f1; --secondary:#8b5cf6; --accent:#f59e0b; --success:#10b981;
--bg:#f8fafc; --card:#ffffff; --text:#1e293b;
}
body { font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif; background:var(--bg); color:var(--text); margin:0; padding:20px; }
.container { max-width:900px; margin:0 auto; }
.card { background:var(--card); border-radius:16px; padding:24px; box-shadow:0 4px 20px rgba(0,0,0,0.08); margin-bottom:16px; }
.header { text-align:center; padding:16px 0; }
.header h1 { font-size:24px; margin:0 0 8px 0; }
.header .meta { color:#64748b; font-size:14px; }
.progress { margin:16px 0; }
.progress-bar { display:flex; gap:8px; align-items:center; }
.progress-text { font-weight:600; min-width:80px; }
.progress-track { flex:1; height:12px; background:#e2e8f0; border-radius:999px; overflow:hidden; }
.progress-fill { height:100%; background:linear-gradient(90deg,var(--primary),var(--secondary)); border-radius:999px; transition:width 0.3s ease; }
.student { display:flex; gap:12px; align-items:start; padding:16px; background:#fafafa; border-radius:12px; margin-bottom:12px; }
.student-header { min-width:140px; }
.student-name { font-weight:700; font-size:18px; margin-bottom:8px; }
.student-profile { font-size:12px; color:#94a3b8; margin-bottom:6px; max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.status-buttons { display:flex; gap:6px; flex-wrap:wrap; }
.status-btn { padding:6px 12px; border-radius:999px; border:2px solid #e2e8f0; background:#fff; cursor:pointer; font-weight:600; font-size:13px; transition:all 0.2s; }
.status-btn:hover { border-color:#cbd5e1; }
.status-btn.active { background:#ecfdf5; border-color:#10b981; color:#059669; }
.status-btn[data-status=请假].active { background:#fef2f2; border-color:#f87171; color:#dc2626; }
.status-btn[data-status=补课].active { background:#fffbeb; border-color:#f59e0b; color:#d97706; }
.status-btn[data-status=体验].active { background:#eff6ff; border-color:#3b82f6; color:#2563eb; }
.input-group { flex:1; display:flex; flex-direction:column; gap:8px; }
.input-group label { font-size:13px; font-weight:600; color:#475569; }
.input-group textarea { width:100%; padding:12px; border:2px solid #e2e8f0; border-radius:10px; min-height:80px; resize:vertical; font-size:14px; transition:border-color 0.2s; }
.input-group textarea:focus { outline:none; border-color:var(--primary); }
.symbols { font-size:12px; color:#94a3b8; display:flex; gap:12px; flex-wrap:wrap; }
.add-student { border:2px dashed #cbd5e1; padding:16px; border-radius:12px; text-align:center; cursor:pointer; color:#64748b; transition:all 0.2s; }
.add-student:hover { border-color:var(--primary); color:var(--primary); background:#eef2ff; }
.actions { display:flex; gap:12px; justify-content:center; padding-top:16px; flex-wrap:wrap; }
.btn { padding:14px 32px; border-radius:10px; font-weight:700; font-size:16px; cursor:pointer; border:none; transition:transform 0.1s,opacity 0.2s; }
.btn-primary { background:linear-gradient(135deg,var(--primary),var(--secondary)); color:#fff; }
.btn-success { background:linear-gradient(135deg,var(--success),#059669); color:#fff; }
.btn:hover { transform:translateY(-2px); }
.btn:active { transform:translateY(0); }
.btn:disabled { opacity:0.5; cursor:not-allowed; transform:none; }
.course-card { background:linear-gradient(135deg,#6366f115,#8b5cf615); border-left:4px solid var(--primary); }
.course-title { font-size:18px; font-weight:700; margin:0 0 8px 0; }
.course-details { color:#475569; line-height:1.6; }
.toast { position:fixed; top:20px; left:50%; transform:translateX(-50%); padding:16px 32px; border-radius:12px; color:#fff; font-weight:600; z-index:1000; display:none; animation:fadeIn 0.3s; }
.toast.success { background:var(--success); }
.toast.error { background:#ef4444; }
.toast.info { background:var(--primary); }
@keyframes fadeIn { from{opacity:0;transform:translateX(-50%) translateY(-10px);} to{opacity:1;transform:translateX(-50%) translateY(0);} }
.spinner { display:inline-block; width:16px; height:16px; border:2px solid #fff; border-top-color:transparent; border-radius:50%; animation:spin 0.6s linear infinite; margin-right:8px; vertical-align:middle; }
@keyframes spin { to{transform:rotate(360deg);} }
</style>
</head>
<body>
<div class="container">
<div class="card header">
<h1>📝 课评填写表单</h1>
<div class="meta" id="classInfo">班级:发现世界-周四19点 | 第11周 | 2026-05-16</div>
<div class="progress">
<div class="progress-bar">
<div class="progress-text" id="progressText">0/5 完成</div>
<div class="progress-track"><div class="progress-fill" id="progressFill" style="width:0%"></div></div>
</div>
</div>
</div>
<div class="card course-card">
<div class="course-title" id="courseTitle">📚 课程目标DISC-011 蜥蜴</div>
<div class="course-details" id="courseDetails">
核心知识点:关节连接、可动结构、仿生设计<br>
课时长度60分钟
</div>
</div>
<div id="studentsList"></div>
<div class="add-student" id="addStudentBtn">+ 添加临时学生(补课/体验)</div>
<div class="actions">
<button class="btn btn-primary" id="submitBtn">🚀 提交并保存</button>
</div>
</div>
<div class="toast" id="toast"></div>
<script>
const SERVER_URL = window.location.origin;
const templateStudents = [{name:"梁家铭", status:"出勤", performance:""},{name:"简思瑜", status:"出勤", performance:""},{name:"简思霖", status:"请假", performance:""},{name:"罗钧龄", status:"出勤", performance:""},{name:"黄晓瑜", status:"出勤", performance:""},{name:"黄馨宸", status:"请假", performance:""}];
let students = [...templateStudents];
let currentClass = "发现世界-周四19点";
let currentWeek = 11;
let currentDate = "2026-05-16";
let courseInfo = {code:"DISC-011", title:"蜥蜴", knowledge:["关节连接","可动结构","仿生设计"], duration:"60分钟"};
function showToast(msg, type) {
const t = document.getElementById("toast");
t.textContent = msg;
t.className = "toast " + type;
t.style.display = "block";
setTimeout(function(){ t.style.display = "none"; }, 3000);
}
function init() {
renderStudents();
updateProgress();
}
function renderStudents() {
var container = document.getElementById("studentsList");
container.innerHTML = "";
students.forEach(function(s, idx) {
var el = document.createElement("div");
el.className = "student";
var profileHtml = s.profile ? '<div class="student-profile" title="' + s.profile.replace(/"/g,'&quot;') + '">📋 ' + s.profile.substring(0,40) + '...</div>' : '';
el.innerHTML =
'<div class="student-header">' +
'<div class="student-name">' + s.name + '</div>' +
profileHtml +
'<div class="status-buttons">' +
'<button class="status-btn' + (s.status=='出勤'?' active':'') + '" data-status="出勤" data-idx="' + idx + '">出勤</button>' +
'<button class="status-btn' + (s.status=='请假'?' active':'') + '" data-status="请假" data-idx="' + idx + '">请假</button>' +
'<button class="status-btn' + (s.status=='补课'?' active':'') + '" data-status="补课" data-idx="' + idx + '">补课</button>' +
'<button class="status-btn' + (s.status=='体验'?' active':'') + '" data-status="体验" data-idx="' + idx + '">体验</button>' +
'</div></div>' +
'<div class="input-group">' +
'<label>课堂表现支持速记gj观望、zd主动</label>' +
'<textarea id="perf-' + idx + '" placeholder="例如gj5观望5分钟→zd3主动搭3层→zt自己调整开心↑">' + (s.performance||'') + '</textarea>' +
'<div class="symbols">' +
'<span>💡 gj#=观望#分钟</span><span>💡 zd#=主动搭#层</span><span>💡 zt=自己调整</span>' +
'<span>💡 ↑=开心</span><span>💡 →=稳定</span><span>💡 ++=进步</span>' +
'</div></div>';
container.appendChild(el);
});
document.querySelectorAll(".status-btn").forEach(function(b) {
b.addEventListener("click", function(e) {
var idx = parseInt(b.dataset.idx);
students[idx].status = b.dataset.status;
renderStudents();
updateProgress();
});
});
document.querySelectorAll(".input-group textarea").forEach(function(t) {
t.addEventListener("input", function(e) {
var idx = parseInt(t.id.replace("perf-",""));
students[idx].performance = t.value;
updateProgress();
});
});
}
function updateProgress() {
var done = students.filter(function(x) {
return x.status !== '出勤' || (x.performance && x.performance.trim());
}).length;
var total = students.length;
var pct = Math.round((done/total)*100);
document.getElementById("progressText").textContent = done + '/' + total + ' 完成';
document.getElementById("progressFill").style.width = pct + '%';
}
function addStudent() {
students.push({name:"新学生", status:"体验", performance:"", profile:""});
renderStudents();
updateProgress();
}
function submitForm() {
var btn = document.getElementById("submitBtn");
var origText = btn.textContent;
// 检查出勤学生是否都填了表现
var unfilled = students.filter(function(s) {
return s.status === '出勤' && (!s.performance || !s.performance.trim());
});
if (unfilled.length > 0) {
var names = unfilled.map(function(s){ return s.name; }).join('、');
showToast('⚠️ 出勤学生 ' + names + ' 还未填写表现', 'error');
return;
}
// 按钮loading状态
btn.disabled = true;
btn.innerHTML = '<span class="spinner"></span>提交中...';
var payload = {
class: currentClass,
week: currentWeek,
date: currentDate,
course: courseInfo,
students: students.map(function(s) {
return {
name: s.name,
status: s.status,
performance: s.performance || ''
};
})
};
fetch(SERVER_URL + '/api/submit', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(payload)
})
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.success) {
showToast('✅ 提交成功!' + data.message, 'success');
btn.innerHTML = '✅ 已保存 — 可关闭此页面';
btn.className = 'btn btn-success';
} else {
showToast('❌ 提交失败:' + data.message, 'error');
btn.disabled = false;
btn.textContent = origText;
}
})
.catch(function(err) {
showToast('❌ 网络错误:无法连接服务器,请确认服务器已启动', 'error');
btn.disabled = false;
btn.textContent = origText;
});
}
document.getElementById("addStudentBtn").addEventListener("click", addStudent);
document.getElementById("submitBtn").addEventListener("click", submitForm);
init();
</script>
</body>
</html>

View File

@@ -0,0 +1,34 @@
{
"name": "keping-simplified",
"skill_name": "keping-simplified",
"version": "5.0.0",
"description": "超级简化版课评生成器!只需输入 \"/课评\" 即可启动,一键生成,自动保存。支持周数选择、班级选择、学生状态选择、速记输入、进度条显示。为穹狼乐高编程设计。",
"triggers": [
"/课评",
"/keping-simple",
"/简单课评",
"生成课评",
"写课评"
],
"semester_config": {
"baseline_date": "2026-03-02",
"week_calculation": "Floor((current_date - 2026-03-02) / 7) + 1",
"total_weeks": 20,
"current_week": 11,
"current_date": "2026-05-17"
},
"class_types": {
"DISC": { "prefix": "DISC", "age_group": "preschool", "style": "warm" },
"CREATE": { "prefix": "CREATE", "age_group": "preschool", "style": "warm" },
"INVENT": { "prefix": "INVENT", "age_group": "preschool", "style": "warm" },
"TUBE": { "prefix": "TUBE", "age_group": "preschool", "style": "warm" },
"SPIKE": { "prefix": "SPIKE", "age_group": "elementary", "style": "concise" },
"AICODE03": { "prefix": "AICODE03", "age_group": "elementary", "style": "technical" },
"CSP": { "prefix": "CSP", "age_group": "elementary", "style": "technical" }
},
"paths": {
"class_root": ".claude/memory/class",
"lesson_root": ".claude/memory/lesson",
"template": ".claude/skills/keping-simplified/assets/form_template.html"
}
}

View File

@@ -0,0 +1,285 @@
# keping-simplified — 生成规则详解
## 1⃣ 启动流程规则
### 第一步:响应 /课评 命令
当用户输入 `/课评`,立即启动简化流程。**跳过任何其他判断**。
```python
用户输入/课评
执行启动简化流程
目标一周数+日期选择界面
```
---
## 2⃣ 周数与日期计算规则
### 基准设置
- **学期开学日**2026-03-02第1周周一
- **当前日期**:自动获取今天的日期
- **周数计算公式**
```
周数 = Floor((当前日期 - 2026-03-02) / 7) + 1
```
### 日期选择界面示例
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 第11周 | 选择日期
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
当前日期2026-05-16
请选择周几:
[1] 周一
[2] 周二
[3] 周三
[4] 周四
[5] 周五
[6] 周六
[7] 周日
[其他日期] 手动输入 YYYY-MM-DD
```
### 用户选择后
- 根据周几推算具体日期(基于当前周)
- 进入班级选择
---
## 3⃣ 班级选择规则
### 读取班级列表
1. 扫描 `.claude/memory/class/` 目录
2. 列出所有班级文件夹名称
3. 按字母/时间排序显示
### 界面示例
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 选择班级 | 第11周 · 2026-05-16
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
可选班级:
[1] 发现世界-周四19点
[2] Wedo创造世界-周六1030
[3] AICODE03小Q周六1400
[4] SPIKE02-周日1030
[5] 手动输入班级名称
```
---
## 4⃣ 课程目标加载规则
### 策略 A找到课程教案优先
按顺序查找:
1. 班级目录下是否有历史课程记录
2. memory/lesson/ 目录下查找第X周课程
3. 基于班级类型匹配课程编号
**匹配成功后显示:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 课程目标确认
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
课程代码DISC-011
课程主题:蜥蜴
核心知识点:关节连接、可动结构、仿生设计
课时长度60分钟
[1] 确认使用这个
[2] 修改课程目标
```
### 策略 B没找到课程教案降级
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 未找到课程教案,请手动输入
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
请填写本周课程目标:
课程主题:
核心知识点:
[1] 跳过,用通用模板
[2] 保存为常用课程
```
---
## 5⃣ HTML 表单启动规则
### 创建并打开表单
1. 复制模板 `assets/form_template.html`
2. 替换占位符:
- `CLASS_NAME` → 班级名
- `WEEK_NUM` → 周数
- `DATE_STR` → 日期
- `COURSE_CODE` → 课程代码
- `COURSE_TITLE` → 课程主题
- `STUDENTS_LIST` → 学生JSON
3. 保存为临时文件(例如 `temp_form_YYYYMMDD_HHMMSS.html`
4. 自动在浏览器打开
### 学生列表加载
从班级目录读取:
- `.claude/memory/class/{班级}/` 下的子文件夹
- 每个子文件夹是一个学生
- 读取 `profile.md` 获取小名/昵称(如果有)
```json
{
"students": [
{ "name": "梁家铭", "nickname": null },
{ "name": "简思瑜", "nickname": "小鱼" },
...
]
}
```
---
## 6⃣ 速记符号解析规则
### 速记对照表
| 速记 | 解析为中文描述 |
|------|--------------|
| `gj#` | 观望#分钟 |
| `zd#` | 主动搭#层 |
| `zt` | 自己调整 |
| `wb` | 完成 |
| `zx#` | 专注#分钟 |
| `sb#` | 失败#次后调整 |
| `ts#` | 探索#分钟 |
| `cz#` | 创造#种方案 |
| `wt#` | 提问#次 |
| `hz` | 合作 |
| `fx` | 分享 |
| `tq` | 求助 |
| `mr` | 融入 |
| `ms` | 模仿 |
| `jy` | 建议给同伴 |
| `bd` | 被带动 |
| `zl` | 孤立/独自 |
| `cq` | 冲突/争执 |
| `` or `kx` | 开心 |
| `` or `wd` | 稳定 |
| `` or `fd` | 烦躁/低落 |
| `~` or `bd` | 情绪波动 |
| `↑↑` or `kc` | 非常开心/兴奋 |
| `→→` or `wa` | 非常稳定/沉浸 |
| `gd` | 孤独/独自玩 |
| `jl` | 焦虑/紧张 |
| `++` | 比上周进步 |
| `--` | 需关注 |
### 解析示例
```
输入gj5→zd3→zt ↑++
解析观望5分钟后主动搭3层自己调整开心比上周进步
```
---
## 7⃣ 课评生成规则
### 三段式结构(固定不变)
**第1段课程知识点30-55字**
- 包含主题、1-2个核心知识点
- 末尾1个emoji🔍 💡 ⚙️(根据类型)
**第2段课堂细节100-220字弹性**
- 整合:掌握程度+环节表现+成长亮点
- emoji1-3个自然分散插入
**第3段课后建议30-55字**
- 具体可操作的家庭活动
- 末尾1个emoji🏠 🔧
### 字数弹性规则
| 输入丰富度 | 目标字数范围 |
|----------|-----------|
| 很简洁只有1-2个速记| 180-220 |
| 中等3-5个速记| 220-280 |
| 详细5个以上+情绪+对比)| 280-350 |
### 称呼规则
1. 优先用小名/昵称(从 `profile.md` 读取)
2. 其次用去姓称名(双字名 → 去掉姓)
3. 单字名 → 叠字化
### Emoji 分配
| 位置 | 表情库 |
|------|-------|
| 第1段末尾 | 🔍 💡 ⚙️ |
| 第2段亮点处 | 💪 ✨ 📈 🎯 🤝 😊 |
| 第3段末尾 | 🏠 🔧 |
---
## 8⃣ 保存规则
### 文件路径标准
```
.claude/memory/class/{班级名称}/
├── summaries/
│ └── YYYYMMDD_{课程代码}_{班级反馈}.md
├── {学生姓名}/
│ └── feedback/
│ └── YYYYMMDD_{课程代码}_{课次}.md
└──补课/{学生姓名}/
└── feedback/
└── YYYYMMDD_{课程代码}.md
```
### 学生类型-保存路径映射
| 学生状态 | 保存位置 |
|---------|--------|
| 出勤 | {班级}/{学生}/feedback/ |
| 请假 | {班级}/{学生}/feedback/(带 `(请假)` 标记)|
| 补课 | {班级}/补课/{学生}/feedback/ |
| 体验 | {班级}/补课/{学生}/feedback/ |
### 自动保存时机
课评生成完成后立即保存,无需教师确认。
---
## 9⃣ 请假/补课/体验处理
### 请假
- 生成:请假记录文件
- 路径:`feedback/YYYYMMDD_{课程编号}(请假).md`
- 内容:简洁说明请假
### 补课
- 路径:`补课/{学生}/feedback/YYYYMMDD_{课程编号}.md`
- 课评正文:不提及"补课"二字
- 文件名:可标记来源
### 体验
- 路径:`补课/{学生}/feedback/YYYYMMDD_{课程编号}.md`
- 课评:正常写(不提"体验"
---
*最后更新2026-05-16*

View File

@@ -0,0 +1,67 @@
# 🚀 keping-simplified — 快速参考卡
## 💡 如何启动(只需一个命令!)
```
输入:/周六(或 /课评)
```
## 📋 完整流程v5.0 直连提交版)
```
1⃣ /周六
2⃣ 选择班级(已显示当周课程主题)
3⃣ 打开浏览器表单 → 填写学生表现 → 点击「提交并保存」
↓ (数据 POST 到本地服务器,无需复制粘贴!)
4⃣ AI 自动检测信号文件 → 生成课评 → 双轨保存
5⃣ 完成!🗑️ 自动清理临时文件
```
## ⌨️ 速记符号(最常用的)
| 速记 | 含义 |
|------|------|
| gj# | 观望#分钟 |
| zd# | 主动搭#层 |
| zt | 自己调整 |
| ↑ | 开心 |
| → | 稳定 |
| ++ | 比上周进步 |
## 📂 保存路径(自动)
```
.claude/memory/class/{班级}/
├── summaries/
│ └── YYYYMMDD_{课程}_班级反馈.md
├── {学生}/
│ └── feedback/
│ └── YYYYMMDD_{课程}.md
└──补课/{学生}/
└── feedback/
└── YYYYMMDD_{课程}.md
```
## ⚙️ 四段式结构(输出固定)
| 段落 | 内容 | 字数 | Emoji |
|------|------|------|------|
| 1⃣ | 课程知识点 | 30-55 | 1个末尾 |
| 2⃣ | 掌握程度与操作细节 | 80-150 | 1-2个分散插入 |
| 3⃣ | 课堂亮点与成长 | 60-120 | 1-2个分散插入 |
| 4⃣ | 课后建议 | 30-55 | 1个末尾 |
**总字数**:标准版 220-300字详细版 300-400字
**总Emoji数**3-5个
## 🎨 Emoji 使用规范
**总数量**:每篇课评使用 **3-5个** Emoji
| 位置 | 数量 | 用途 | 推荐表情 |
|------|:----:|------|----------|
| 第1段知识点 | 1个 | 段尾点缀 | 🔍 💡 ⚙️ 🎯 |
| 第2段掌握与操作 | 1-2个 | 分散插入 | 💪 ✨ 📈 🤝 |
| 第3段亮点与成长 | 1-2个 | 分散插入 | 😊 🌟 💫 🎉 |
| 第4段建议 | 1个 | 段尾点缀 | 🏠 🔧 📚 |
---
*版本v5.0 | 最后更新2026-05-22*