auto backup 2026-04-02 08:30:01
This commit is contained in:
parent
40f2427d94
commit
1e34c53e70
8
.vala_skill_hashes
Normal file
8
.vala_skill_hashes
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
cron-schedule 76a1450e7eb093079509657b0a741653ea6d29119317826e6f26d3e9caf580b0
|
||||||
|
feishu_send_file 93ecafd166240f204d8b9947f877a7f24232752d30c007e080af3b1a778bd8b6
|
||||||
|
feishu-wiki-access c7cca22bcf68c0e297d99859c114b1a4e469c35b8c143623742f3f9d2a841c09
|
||||||
|
find-skills fc331652faaa71746a3f63a6bd46ae57da7679c5081b03e84c930ed366493503
|
||||||
|
skill-builder 20cdb6ec00e493cdfac624a9a844207acf1bf155c6f3f8e07c2bbf591ba2e73b
|
||||||
|
kids-english-script-production 3cb6929e4f5a43e7245adb79091e56ce4cc2ae77198dc795fe1cc088575c3a78
|
||||||
|
lark_wiki_operate_as_bot 2a37701f568849f03eb46dd938baeda171380fe252b698ac8bda69caa19aea08
|
||||||
|
vala_git_workspace_backup 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf0bca9fd64b968ec
|
||||||
4
.vala_skillhub_config
Normal file
4
.vala_skillhub_config
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
GITEA_URL=https://git.valavala.com
|
||||||
|
GITEA_TOKEN=ef9dfa0b3ae3cfba010c1462b8f77e11a0d4289f
|
||||||
|
GITEA_OWNER=vala_skillhub
|
||||||
|
SOURCE_NAME=xiaoyan
|
||||||
@ -124,6 +124,13 @@
|
|||||||
|
|
||||||
Skills 提供你的工具。当你需要某个工具时,查看它的 `SKILL.md`。在 `TOOLS.md` 中保存环境相关的备注(数据库连接、API 配置等)。
|
Skills 提供你的工具。当你需要某个工具时,查看它的 `SKILL.md`。在 `TOOLS.md` 中保存环境相关的备注(数据库连接、API 配置等)。
|
||||||
|
|
||||||
|
你需要查看两个目录下的skills
|
||||||
|
1.你个人的skill目录:
|
||||||
|
./skills
|
||||||
|
|
||||||
|
2.通用级别的skills:
|
||||||
|
/root/.openclaw/skills
|
||||||
|
|
||||||
**飞书格式化提示:**
|
**飞书格式化提示:**
|
||||||
|
|
||||||
- 飞书消息支持 Markdown,但复杂表格建议用项目符号列表替代
|
- 飞书消息支持 Markdown,但复杂表格建议用项目符号列表替代
|
||||||
|
|||||||
@ -10,7 +10,11 @@
|
|||||||
|
|
||||||
## 核心规则
|
## 核心规则
|
||||||
|
|
||||||
(在此记录所有人都需要遵守的核心规则)
|
### 飞书文档操作规则(强制执行)
|
||||||
|
1. **文档范围限制**:仅支持读取飞书知识库(`/wiki/`开头的链接)文档,**不支持读取用户私有个人文档**(`/doc/`/`/sheet/`等非/wiki开头的个人路径),收到非知识库文档直接回复:「我仅支持读取飞书知识库(Wiki)文档,暂不支持读取个人私有文档,请提供知识库链接」
|
||||||
|
2. **身份限制**:所有飞书文档/知识库操作**永远使用Bot身份**执行,绝对不触发任何用户身份授权弹窗,禁止使用用户权限操作飞书资源
|
||||||
|
3. **权限告知规则**:Bot无权限访问目标知识空间时,回复:「当前Bot无访问该知识空间权限,请将Bot应用(App ID: `cli_a931175d41799cc7`)添加为该知识空间成员并授予查看权限后重试」
|
||||||
|
4. **操作规范**:所有知识库操作严格遵循`lark_wiki_operate_as_bot`技能流程执行
|
||||||
|
|
||||||
## 业务知识
|
## 业务知识
|
||||||
|
|
||||||
|
|||||||
12
USER.md
12
USER.md
@ -10,11 +10,13 @@
|
|||||||
|
|
||||||
## 负责人配置
|
## 负责人配置
|
||||||
|
|
||||||
以下人员拥有对你的管理权限,以飞书 `open_id` 作为唯一标识:
|
以下人员或群组拥有对你的管理权限,以飞书 `open_id` 作为唯一标识:
|
||||||
|
|
||||||
| 角色 | 姓名 | 飞书 open_id |
|
| 角色 | 姓名 | 飞书 open_id |
|
||||||
|------|------|-------------|
|
|------|------|-------------|
|
||||||
| 技术负责人 | (姓名) | `ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
|
| 技术负责人 | 李若松 | `ou_7c623036b45fe81f372b032da664a4fe` |
|
||||||
|
| 技术负责人 | 张昆鹏 | `ou_978d9e5c3ee53e6b8a9b68d37cad545f` |
|
||||||
|
| 技术负责人群组| AI_member | `oc_5c9f0e631266b9ef6e05a95daa80fbda`|
|
||||||
| 业务负责人 | (姓名) | `ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
|
| 业务负责人 | (姓名) | `ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
|
||||||
|
|
||||||
### 负责人权限
|
### 负责人权限
|
||||||
@ -25,6 +27,7 @@
|
|||||||
## 数据权限分级规则
|
## 数据权限分级规则
|
||||||
|
|
||||||
### 第一级:完整权限用户
|
### 第一级:完整权限用户
|
||||||
|
暂时均允许。
|
||||||
|
|
||||||
以下用户可以查询所有业务数据,无需额外审批:
|
以下用户可以查询所有业务数据,无需额外审批:
|
||||||
|
|
||||||
@ -72,3 +75,8 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
请根据实际团队情况填写上述模板中的占位符(括号内容)。此文件由技术负责人维护,数字员工不应自行修改权限相关内容。
|
请根据实际团队情况填写上述模板中的占位符(括号内容)。此文件由技术负责人维护,数字员工不应自行修改权限相关内容。
|
||||||
|
|
||||||
|
## 群组信息回复规则
|
||||||
|
|
||||||
|
AI_member:(oc_5c9f0e631266b9ef6e05a95daa80fbda)
|
||||||
|
[禁令]在此群组中,只回复@到你(也就是 @小研)的信息。
|
||||||
|
|||||||
37
memory/2026-04-01-request-timed-out-before-a-res.md
Normal file
37
memory/2026-04-01-request-timed-out-before-a-res.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Session: 2026-04-01 10:17:22 UTC
|
||||||
|
|
||||||
|
- **Session Key**: agent:xiaoyan:feishu:direct:ou_8b79b7f711e42a4004f3f3c225a1a99c
|
||||||
|
- **Session ID**: 3ed28dd8-dc20-4618-9070-7596e67fc481
|
||||||
|
- **Source**: feishu
|
||||||
|
|
||||||
|
## Conversation Summary
|
||||||
|
|
||||||
|
assistant: ✅ New session started · model: volcengine/doubao-seed-2-0-pro-260215
|
||||||
|
user: System: [2026-04-01 18:09:00 GMT+8] Feishu[xiaoyan] DM | ou_8b79b7f711e42a4004f3f3c225a1a99c [msg:om_x100b53faa50ccca0c36f2887970c02f]
|
||||||
|
|
||||||
|
A new session was started via /new or /reset. Run your Session Startup sequence - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.
|
||||||
|
Current time: Wednesday, April 1st, 2026 — 6:09 PM (Asia/Shanghai) / 2026-04-01 10:09 UTC
|
||||||
|
assistant: 📝 您好,我是教研专属助理小研,可提供知识点校验、题型规则匹配、内容审校、教研文档整理等全链路教研支持。请问您有什么需求?
|
||||||
|
user: System: [2026-04-01 18:09:25 GMT+8] Feishu[xiaoyan] DM | ou_8b79b7f711e42a4004f3f3c225a1a99c [msg:om_x100b53faa3cf3908c3c42a299b3f26c]
|
||||||
|
|
||||||
|
Conversation info (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message_id": "om_x100b53faa3cf3908c3c42a299b3f26c",
|
||||||
|
"sender_id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"sender": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"timestamp": "Wed 2026-04-01 18:09 GMT+8"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sender (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"label": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"name": "ou_8b79b7f711e42a4004f3f3c225a1a99c"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
https://makee-interactive.feishu.cn/wiki/D8wTwmhiCiSwgMkX1M9cCGPKnn3?fromScene=spaceOverview 测试一下 读取这个目录下面的文档内容
|
||||||
|
assistant: 请您按照卡片提示完成授权操作,完成后系统将自动重试读取文档内容,请稍候。
|
||||||
85
memory/2026-04-01-wiki-read.md
Normal file
85
memory/2026-04-01-wiki-read.md
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
# Session: 2026-04-01 10:09:00 UTC
|
||||||
|
|
||||||
|
- **Session Key**: agent:xiaoyan:feishu:direct:ou_8b79b7f711e42a4004f3f3c225a1a99c
|
||||||
|
- **Session ID**: 0981e6d0-7597-4816-8ffb-9c138209560d
|
||||||
|
- **Source**: feishu
|
||||||
|
|
||||||
|
## Conversation Summary
|
||||||
|
|
||||||
|
user: System: [2026-04-01 17:59:11 GMT+8] Feishu[xiaoyan] DM | ou_8b79b7f711e42a4004f3f3c225a1a99c [msg:om_x100b53fa882fb088c30101488e688f5]
|
||||||
|
|
||||||
|
Conversation info (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message_id": "om_x100b53fa882fb088c30101488e688f5",
|
||||||
|
"sender_id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"sender": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"timestamp": "Wed 2026-04-01 17:59 GMT+8"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sender (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"label": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"name": "ou_8b79b7f711e42a4004f3f3c225a1a99c"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
https://makee-interactive.feishu.cn/wiki/D8wTwmhiCiSwgMkX1M9cCGPKnn3?fromScene=spaceOverview 测试一下 读取这个目录下面的文档内容
|
||||||
|
assistant: 请你按照飞书推送的授权卡片提示完成授权操作,授权完成后系统会自动重试读取文档内容,请稍等~
|
||||||
|
user: System: [2026-04-01 17:59:44 GMT+8] Feishu[xiaoyan] DM | ou_8b79b7f711e42a4004f3f3c225a1a99c [msg:om_x100b53fa86348ca4c108487e064c261]
|
||||||
|
|
||||||
|
Conversation info (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message_id": "om_x100b53fa86348ca4c108487e064c261",
|
||||||
|
"sender_id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"sender": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"timestamp": "Wed 2026-04-01 17:59 GMT+8"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sender (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"label": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"name": "ou_8b79b7f711e42a4004f3f3c225a1a99c"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
以bot权限读取
|
||||||
|
assistant: 已确认该链接是飞书知识空间的目录节点:
|
||||||
|
📂 目录名称:**02 内容生产相关**
|
||||||
|
当前Bot权限缺少知识空间子节点列表查询权限,暂时无法直接批量读取目录下所有文档内容。
|
||||||
|
可以提供以下解决方案:
|
||||||
|
1. 请你提供目录下具体需要读取的文档链接,我可以直接拉取对应文档内容
|
||||||
|
2. 联系知识空间管理员将小研Bot添加为该空间成员并授予文档读取权限,即可支持目录内容批量读取操作。
|
||||||
|
user: System: [2026-04-01 18:01:15 GMT+8] Feishu[xiaoyan] DM | ou_8b79b7f711e42a4004f3f3c225a1a99c [msg:om_x100b53fa847e989cc4e5c6f59769934]
|
||||||
|
|
||||||
|
Conversation info (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message_id": "om_x100b53fa847e989cc4e5c6f59769934",
|
||||||
|
"sender_id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"sender": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"timestamp": "Wed 2026-04-01 18:00 GMT+8"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Sender (untrusted metadata):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"label": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"id": "ou_8b79b7f711e42a4004f3f3c225a1a99c",
|
||||||
|
"name": "ou_8b79b7f711e42a4004f3f3c225a1a99c"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
以应用身份读取
|
||||||
|
assistant: 我已经以应用(Bot)身份查询过该链接对应的节点:
|
||||||
|
- 该链接是知识空间目录(文件夹)节点,名称:**02 内容生产相关**,不是单篇文档
|
||||||
|
- 当前应用身份缺少该知识空间的子节点列表查询权限,无法列出目录下的所有子文档
|
||||||
|
请你提供目录下具体需要读取的文档链接,我可以直接以应用身份拉取对应内容;如果需要批量读取目录下所有文档,请联系知识空间管理员将「小研」应用添加为该知识空间成员并授予文档读取权限即可。
|
||||||
22
memory/2026-04-01.md
Normal file
22
memory/2026-04-01.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
[教研规则更新 来自ou_5035ff24ee54432c5da9d5909c2f410b] 台词精校5项核心法则:
|
||||||
|
---
|
||||||
|
### 1. 极简降维法则
|
||||||
|
- 长句拆分:遵循"一句一意"原则,中文复杂嵌套句型拆分为独立简单句,避免宾语从句/定语从句等复合结构,A1级别禁止出现复合从句
|
||||||
|
- 时态控制:仅使用一般现在时、一般过去时、基础将来时(will/be going to),禁止使用完成时、虚拟语气等复杂时态
|
||||||
|
---
|
||||||
|
### 2. 语块优先法则
|
||||||
|
- 冗余省略:上下文/画面信息充足时可省略宾语/从句,保留核心语块
|
||||||
|
- 祈使句使用:允许使用母语儿童常用的不完整祈使句(如Game start!/Watch this!/Silly me!),禁止生造表达
|
||||||
|
---
|
||||||
|
### 3. TPR动作强绑定法则
|
||||||
|
- 动词前置:引导交互/动作的台词以基础动词原形开头(Look/Listen/Jump/Throw/Hit等)
|
||||||
|
- 音画同步:台词与屏幕动作/UI组件完全同步,利用视觉辅助听力解码
|
||||||
|
---
|
||||||
|
### 4. 目标大纲无痕植入法则
|
||||||
|
- 信息差植入:通过剧情冲突(找不到/受伤/搞错等)实现核心词汇/句型的自然高频重复
|
||||||
|
- 提问引导:目标句型通过NPC提问引导输出,禁止直接生硬陈述
|
||||||
|
---
|
||||||
|
### 5. 情绪夸张法则
|
||||||
|
- 语气词使用:高频使用低认知负荷语气词传递情绪(Phew!/Ouch!/Oops!/Aha!/Waaaaah!等)
|
||||||
|
- 情绪直给:直接使用A1级情感形容词(sad/fun/angry/scary/happy/tired)结合动作表现情绪,避免复杂心理描写
|
||||||
@ -2,45 +2,15 @@
|
|||||||
S1:
|
S1:
|
||||||
age: "4-5岁"
|
age: "4-5岁"
|
||||||
lexile: "≤200L"
|
lexile: "≤200L"
|
||||||
rules: "词汇90%+Starters核心词,禁止抽象词(fix/before/finish等);仅简单句(This is/It is/I/We开头),无连词从句,仅用一般现在时;句长4-7词;无复杂结构;NPC 每次只能说一句话。若含多句,则拆成多行。
|
rules: "词汇90%+Starters核心词,禁止抽象词(fix/before/finish等);仅简单句(This is/It is/I/We开头),无连词从句,仅用一般现在时;句长4-7词;无复杂结构"
|
||||||
例如:
|
|
||||||
原:Dan: Ha-ha, not me. It's Vicky. She wants to invite you.
|
|
||||||
改:
|
|
||||||
Dan: Ha-ha, not me. It's Vicky.
|
|
||||||
Dan: She wants to invite you.
|
|
||||||
|
|
||||||
原:Grace: Look, the kids like you. They want you to play with them.
|
|
||||||
改:
|
|
||||||
Grace: Look, the kids like you.
|
|
||||||
Grace: They want you to play with them."
|
|
||||||
S2:
|
S2:
|
||||||
age: "5-6岁"
|
age: "5-6岁"
|
||||||
lexile: "200L-400L"
|
lexile: "200L-400L"
|
||||||
rules: "60%Starters+40%Movers词汇,可出现简单情绪词(happy/scared/tired)、简单副词(now/slowly/fast);可使用连词and/but/so/because,每句最多1个连词;可使用一般过去时、时间标记then/later;句长7-10词;NPC 每次只能说一句话。若含多句,则拆成多行。
|
rules: "60%Starters+40%Movers词汇,可出现简单情绪词(happy/scared/tired)、简单副词(now/slowly/fast);可使用连词and/but/so/because,每句最多1个连词;可使用一般过去时、时间标记then/later;句长7-10词"
|
||||||
例如:
|
|
||||||
原:Dan: Ha-ha, not me. It's Vicky. She wants to invite you.
|
|
||||||
改:
|
|
||||||
Dan: Ha-ha, not me. It's Vicky.
|
|
||||||
Dan: She wants to invite you.
|
|
||||||
|
|
||||||
原:Grace: Look, the kids like you. They want you to play with them.
|
|
||||||
改:
|
|
||||||
Grace: Look, the kids like you.
|
|
||||||
Grace: They want you to play with them."
|
|
||||||
S3:
|
S3:
|
||||||
age: "6-7岁"
|
age: "6-7岁"
|
||||||
lexile: "400L-600L"
|
lexile: "400L-600L"
|
||||||
rules: "可出现轻抽象词(problem/idea/plan)、描述词(bright/noisy/broken);可使用连词when/before/after,可表达两层动作链;可用一般过去时+现在进行时混用;句长10-15词;NPC 每次只能说一句话。若含多句,则拆成多行。
|
rules: "可出现轻抽象词(problem/idea/plan)、描述词(bright/noisy/broken);可使用连词when/before/after,可表达两层动作链;可用一般过去时+现在进行时混用;句长10-15词"
|
||||||
例如:
|
|
||||||
原:Dan: Ha-ha, not me. It's Vicky. She wants to invite you.
|
|
||||||
改:
|
|
||||||
Dan: Ha-ha, not me. It's Vicky.
|
|
||||||
Dan: She wants to invite you.
|
|
||||||
|
|
||||||
原:Grace: Look, the kids like you. They want you to play with them.
|
|
||||||
改:
|
|
||||||
Grace: Look, the kids like you.
|
|
||||||
Grace: They want you to play with them."
|
|
||||||
S4:
|
S4:
|
||||||
age: "7-8岁"
|
age: "7-8岁"
|
||||||
lexile: "600L-800L"
|
lexile: "600L-800L"
|
||||||
|
|||||||
@ -1,12 +1,52 @@
|
|||||||
# 校验规则配置,可自定义校验严格程度,无需改代码
|
# 英文台词完整校验规则配置
|
||||||
# AR等级校验开关
|
# 版本:2026-04-01
|
||||||
|
---
|
||||||
|
## 一、基础通用校验规则(强制执行)
|
||||||
|
basic_rules:
|
||||||
|
sentence_spec:
|
||||||
|
- 默认保留be going to标准表达,无特殊标注(如指定学龄前场景)禁止使用gonna等过度口语化表达
|
||||||
|
vocabulary_control:
|
||||||
|
- 低龄学习场景禁止使用超纲词,动作指令优先选择基础词汇(如用look at替代focus)
|
||||||
|
redundancy_check:
|
||||||
|
- 禁止同一句台词连续重复出现2次及以上,此类排版错误直接标注
|
||||||
|
confirmed_optimization:
|
||||||
|
- "Today, we must train!" 统一优化为 "Let's start training!"
|
||||||
|
|
||||||
|
## 二、核心精校5大法则(A1级别内容强制遵循)
|
||||||
|
core_principles:
|
||||||
|
simplification:
|
||||||
|
name: 极简降维法则
|
||||||
|
rules:
|
||||||
|
- 严格执行"一句一意",复杂嵌套句型拆分为独立简单句,禁止复合从句
|
||||||
|
- 时态仅允许使用一般现在时、一般过去时、基础将来时(will/be going to),禁止完成时、虚拟语气
|
||||||
|
chunking:
|
||||||
|
name: 语块优先法则
|
||||||
|
rules:
|
||||||
|
- 上下文/画面信息充足时可省略冗余成分,保留核心语块
|
||||||
|
- 允许使用母语儿童常用地道祈使短句(如Game start!/Watch this!/Silly me!),禁止生造表达
|
||||||
|
tpr_action:
|
||||||
|
name: TPR动作强绑定法则
|
||||||
|
rules:
|
||||||
|
- 引导交互/动作的台词以基础动词原形开头(Look/Listen/Hit/Run等)
|
||||||
|
- 确保台词与画面动作/UI组件完全同步,利用视觉辅助听力解码
|
||||||
|
target_focus:
|
||||||
|
name: 目标大纲无痕植入法则
|
||||||
|
rules:
|
||||||
|
- 核心词汇/句型通过剧情冲突(找不到/受伤/失误等)自然重复,禁止生硬植入
|
||||||
|
- 目标句型通过NPC提问引导输出,禁止直接生硬陈述
|
||||||
|
emotional_resonance:
|
||||||
|
name: 情绪夸张法则
|
||||||
|
rules:
|
||||||
|
- 允许使用低认知负荷语气词传递情绪(Phew!/Ouch!/Oops!/Aha!/Waaaaah!等)
|
||||||
|
- 情绪表达直接使用A1级形容词(sad/happy/angry等),禁止复杂心理描写
|
||||||
|
|
||||||
|
## 三、AR等级/词汇/难度校验规则
|
||||||
ar_validation:
|
ar_validation:
|
||||||
enable: true
|
enable: true
|
||||||
S1_allow_AR2_ratio: 0.1 # S1允许AR2占比最大10%
|
S1_allow_AR2_ratio: 0.1 # S1允许AR2占比最大10%
|
||||||
S2_allow_AR3_ratio: 0.1 # S2允许AR3占比最大10%
|
S2_allow_AR3_ratio: 0.1 # S2允许AR3占比最大10%
|
||||||
S3_allow_AR4_ratio: 0.15 # S3允许AR4占比最大15%
|
S3_allow_AR4_ratio: 0.15 # S3允许AR4占比最大15%
|
||||||
|
|
||||||
# 词汇校验开关
|
|
||||||
vocab_validation:
|
vocab_validation:
|
||||||
enable_OOV_remind: true # 是否开启超纲词提醒
|
enable_OOV_remind: true # 是否开启超纲词提醒
|
||||||
S1_allow_OOV_ratio: 0.05 # S1允许超纲词占比最大5%
|
S1_allow_OOV_ratio: 0.05 # S1允许超纲词占比最大5%
|
||||||
@ -39,7 +79,10 @@ vocab_validation:
|
|||||||
- so
|
- so
|
||||||
- because
|
- because
|
||||||
|
|
||||||
# 难度校验开关
|
|
||||||
difficulty_validation:
|
difficulty_validation:
|
||||||
enable: true
|
enable: true
|
||||||
allow_lexile_deviation: 50 # 允许蓝思值偏差±50L
|
allow_lexile_deviation: 50 # 允许蓝思值偏差±50L
|
||||||
|
|
||||||
|
## 四、校验输出标准
|
||||||
|
output_standard:
|
||||||
|
- 所有问题标注需包含:上下文引用+问题类型说明+具体优化方案,确保可直接落地修改
|
||||||
|
|||||||
75
skills/lark_wiki_operate_as_bot/SKILL.md
Normal file
75
skills/lark_wiki_operate_as_bot/SKILL.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
name: lark_wiki_operate_as_bot
|
||||||
|
version: 1.0.0
|
||||||
|
description: "飞书知识库Bot身份操作专用技能,统一使用Bot身份遍历目录、读取知识库文档内容,禁止触发用户身份授权"
|
||||||
|
metadata:
|
||||||
|
requires:
|
||||||
|
permissions: ["wiki:node:retrieve", "docx:document:readonly"]
|
||||||
|
---
|
||||||
|
|
||||||
|
# lark_wiki_operate_as_bot 技能规范
|
||||||
|
|
||||||
|
## 核心规则(强制执行)
|
||||||
|
1. **身份限制**:所有知识库操作**永远使用Bot身份**执行,绝对不触发任何用户身份授权弹窗
|
||||||
|
2. **文档范围限制**:仅支持读取飞书知识库(`/wiki/`开头的链接)文档,**不支持读取用户私有个人文档**(`/doc/`/`/sheet/`等非wiki开头的个人路径)
|
||||||
|
3. **权限告知规则**:
|
||||||
|
- 收到非知识库文档链接:直接回复「我仅支持读取飞书知识库(Wiki)文档,暂不支持读取个人私有文档,请提供知识库链接」
|
||||||
|
- Bot无权限访问目标知识空间:回复「当前Bot无访问该知识空间权限,请将Bot应用(App ID: `cli_a931175d41799cc7`)添加为该知识空间成员并授予查看权限后重试」
|
||||||
|
|
||||||
|
## 适用场景
|
||||||
|
- 遍历知识库目录下的子文档/子目录
|
||||||
|
- 读取知识库文档内容
|
||||||
|
- 批量导出知识库文档
|
||||||
|
- 所有知识库相关的查询、读取操作
|
||||||
|
|
||||||
|
## 完整执行链路
|
||||||
|
|
||||||
|
### 步骤1:链接解析
|
||||||
|
- 从用户提供的链接中提取`wiki_token`:例如链接`https://xxx.feishu.cn/wiki/XXXXXXX`中的`XXXXXXX`即为`wiki_token`
|
||||||
|
- 若链接不含`/wiki/`路径,直接按非知识库文档规则回复
|
||||||
|
|
||||||
|
### 步骤2:获取节点基础信息
|
||||||
|
```bash
|
||||||
|
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --as bot
|
||||||
|
```
|
||||||
|
返回结果中提取关键信息:
|
||||||
|
- `space_id`:知识空间ID
|
||||||
|
- `obj_token`:文档真实ID(若节点为文档)
|
||||||
|
- `has_child`:是否为目录(含子节点)
|
||||||
|
- `obj_type`:节点类型(docx/sheet/bitable等)
|
||||||
|
|
||||||
|
### 步骤3:遍历目录子节点(仅当has_child=true时)
|
||||||
|
#### 3.1 获取Bot租户访问凭证
|
||||||
|
```bash
|
||||||
|
curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"app_id":"cli_a931175d41799cc7","app_secret":"Iw2vEfbjT6GtV0GhbxbZqfQ4nAPtbR14"}' \
|
||||||
|
| jq -r '.tenant_access_token'
|
||||||
|
```
|
||||||
|
得到`tenant_access_token`(有效期2小时)
|
||||||
|
|
||||||
|
#### 3.2 调用Wiki V2接口获取子节点列表
|
||||||
|
```bash
|
||||||
|
curl -s -X GET "https://open.feishu.cn/open-apis/wiki/v2/spaces/<space_id>/nodes?parent_node_token=<wiki_token>" \
|
||||||
|
-H "Authorization: Bearer <tenant_access_token>"
|
||||||
|
```
|
||||||
|
返回子节点完整列表(名称、链接、类型等)
|
||||||
|
|
||||||
|
### 步骤4:读取文档内容(仅当节点为文档时)
|
||||||
|
```bash
|
||||||
|
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli docs +fetch --doc <obj_token> --as bot
|
||||||
|
```
|
||||||
|
|
||||||
|
## 权限要求
|
||||||
|
### 1. 应用权限(飞书开发者后台配置)
|
||||||
|
| 权限名称 | Scope | 类型 |
|
||||||
|
|---------|-------|------|
|
||||||
|
| 获取知识空间节点信息 | `wiki:node:retrieve` | 只读 |
|
||||||
|
| 查看文档内容 | `docx:document:readonly` | 只读 |
|
||||||
|
|
||||||
|
### 2. 知识空间配置
|
||||||
|
需要将Bot应用(App ID: `cli_a931175d41799cc7`)添加到目标知识空间的成员列表,授予至少「可查看」权限
|
||||||
|
|
||||||
|
## 异常处理
|
||||||
|
- 接口返回`99991401`(无权限):按权限不足规则回复用户
|
||||||
|
- 接口返回`404`:检查`wiki_token`/`space_id`是否正确,确认链接为有效知识库链接
|
||||||
50
skills/use_vala_skillhub/README.md
Normal file
50
skills/use_vala_skillhub/README.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# use_vala_skillhub
|
||||||
|
|
||||||
|
Vala SkillHub 技能管理 —— 让数字员工推送、安装和自动同步技能。
|
||||||
|
|
||||||
|
## 功能
|
||||||
|
|
||||||
|
- **推送技能**:将本地 `./skills` 下的技能上传到 SkillHub(Gitea 仓库)
|
||||||
|
- **安装 / 更新技能**:从 SkillHub 下载技能到本地 `./skills` 目录(已存在则清空后重新下载)
|
||||||
|
- **查看技能**:列出 SkillHub 上的所有技能
|
||||||
|
- **自动同步**:基于内容哈希检测变更,仅推送有变化的 skill,避免重复推送
|
||||||
|
|
||||||
|
## 设计要点
|
||||||
|
|
||||||
|
推送和安装均不在 `./skills` 目录内产生 `.git`,确保不影响 workspace 级别的 git 备份:
|
||||||
|
- **推送 / 自动同步**:复制到 `./tmp/skill_push/` 临时目录,完成 git 推送后清理
|
||||||
|
- **安装**:通过 Gitea API 下载归档解压,不使用 git clone
|
||||||
|
- **变更检测**:通过 `./.vala_skill_hashes` 记录每个 skill 的内容哈希,对比检测变更
|
||||||
|
|
||||||
|
## 自动同步机制
|
||||||
|
|
||||||
|
数字员工在新增或修改 skill 后,**必须自动执行 check_and_push**:
|
||||||
|
1. 计算 skill 目录的综合哈希(含文件路径 + 内容)
|
||||||
|
2. 与 `./.vala_skill_hashes` 中的历史哈希对比
|
||||||
|
3. 仅推送有变更的 skill,推送成功后更新哈希记录
|
||||||
|
|
||||||
|
可选配合 `cron_job` 技能设置定时全量同步作为安全网。
|
||||||
|
|
||||||
|
## 命名规则
|
||||||
|
|
||||||
|
仓库名 = `技能名` + `.` + `来源名`
|
||||||
|
|
||||||
|
| 示例 | 含义 |
|
||||||
|
|------|------|
|
||||||
|
| `cron_job.xiaoxi` | xiaoxi 的定时任务技能 |
|
||||||
|
| `web_scraper.vala` | 公司官方的爬虫技能 |
|
||||||
|
|
||||||
|
来源为 `vala` 的属于公司级别官方技能。
|
||||||
|
|
||||||
|
## 配置
|
||||||
|
|
||||||
|
首次使用需提供配置,保存在 `./.vala_skillhub_config`(当前 workspace 根目录下,各数字员工独立):
|
||||||
|
|
||||||
|
- `GITEA_URL` — Gitea 服务地址(默认 `https://git.valavala.com`)
|
||||||
|
- `GITEA_TOKEN` — API Token(需有组织仓库的创建和推送权限)
|
||||||
|
- `GITEA_OWNER` — SkillHub 组织名(默认 `vala_skillhub`)
|
||||||
|
- `SOURCE_NAME` — 当前数字员工的 name
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
|
||||||
|
本技能面向 AI 数字员工使用。请参阅 `SKILL.md` 了解完整操作流程和命令。
|
||||||
292
skills/use_vala_skillhub/SKILL.md
Normal file
292
skills/use_vala_skillhub/SKILL.md
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
# use_vala_skillhub
|
||||||
|
|
||||||
|
管理 Vala SkillHub 上的技能:推送(上传)和安装。
|
||||||
|
|
||||||
|
SkillHub 基于 Gitea,每个技能对应一个独立的 Git 仓库。推送时使用 `./tmp` 临时目录,不在 `./skills` 内创建 `.git`,避免影响 workspace 级别的 git 备份。
|
||||||
|
|
||||||
|
## 命名规则
|
||||||
|
|
||||||
|
仓库名格式:`{skill_name}.{source_name}`
|
||||||
|
|
||||||
|
- `skill_name`:技能目录名(如 `cron_job`、`web_scraper`)
|
||||||
|
- `source_name`:来源名称,即当前数字员工的 name(如 `xiaoxi`)
|
||||||
|
- 如果 `source_name` 为 `vala`,表示公司级别的官方技能
|
||||||
|
|
||||||
|
示例:
|
||||||
|
- `cron_job.xiaoxi` — xiaoxi 的定时任务技能
|
||||||
|
- `web_scraper.vala` — 公司官方的爬虫技能
|
||||||
|
|
||||||
|
## 配置
|
||||||
|
|
||||||
|
操作前需要确认以下配置(保存到 `./.vala_skillhub_config`,即当前 workspace 根目录下):
|
||||||
|
|
||||||
|
| 配置项 | 说明 | 默认值 |
|
||||||
|
|--------|------|--------|
|
||||||
|
| `GITEA_URL` | Gitea 服务地址 | `https://git.valavala.com` |
|
||||||
|
| `GITEA_TOKEN` | Gitea API Token(需有创建仓库和推送权限) | — |
|
||||||
|
| `GITEA_OWNER` | SkillHub 组织名 | `vala_skillhub` |
|
||||||
|
| `SOURCE_NAME` | 当前数字员工的 name,用于组合仓库名 | — |
|
||||||
|
|
||||||
|
如果配置文件不存在,请询问用户获取以上信息后创建:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat > ./.vala_skillhub_config <<EOF
|
||||||
|
GITEA_URL=https://git.valavala.com
|
||||||
|
GITEA_TOKEN=<token>
|
||||||
|
GITEA_OWNER=vala_skillhub
|
||||||
|
SOURCE_NAME=<name>
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
后续操作前先加载配置:
|
||||||
|
```bash
|
||||||
|
source ./.vala_skillhub_config
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 操作一:推送技能到 SkillHub
|
||||||
|
|
||||||
|
将本地 `./skills` 下的技能目录推送到 SkillHub。
|
||||||
|
|
||||||
|
**核心原则**:使用 `./tmp/skill_push/` 作为临时工作区,不在 `./skills` 内执行任何 git 操作,保持 workspace 干净。
|
||||||
|
|
||||||
|
### 流程
|
||||||
|
|
||||||
|
1. **确定仓库名**:`repo_name = {skill_dir_name}.{SOURCE_NAME}`
|
||||||
|
|
||||||
|
2. **检查远程仓库是否存在**:
|
||||||
|
```bash
|
||||||
|
curl -s -o /dev/null -w "%{http_code}" \
|
||||||
|
"${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}"
|
||||||
|
```
|
||||||
|
- 返回 200 → 仓库已存在,跳到步骤 4
|
||||||
|
- 返回 404 → 需要创建,执行步骤 3
|
||||||
|
|
||||||
|
3. **创建远程仓库**:
|
||||||
|
```bash
|
||||||
|
curl -s -X POST "${GITEA_URL}/api/v1/orgs/${GITEA_OWNER}/repos" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "'${repo_name}'", "private": false, "description": "技能描述", "auto_init": false}'
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **复制到临时目录并推送**:
|
||||||
|
```bash
|
||||||
|
# 清理并准备临时目录
|
||||||
|
rm -rf ./tmp/skill_push/${repo_name}
|
||||||
|
mkdir -p ./tmp/skill_push/${repo_name}
|
||||||
|
|
||||||
|
# 复制技能内容(不含隐藏文件的 .git 等)
|
||||||
|
cp -r ./skills/${skill_dir_name}/* ./tmp/skill_push/${repo_name}/
|
||||||
|
cp -r ./skills/${skill_dir_name}/.[!.]* ./tmp/skill_push/${repo_name}/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# 在临时目录中执行 git 操作
|
||||||
|
cd ./tmp/skill_push/${repo_name}
|
||||||
|
git init
|
||||||
|
git checkout -b main
|
||||||
|
git add -A
|
||||||
|
git commit -m "update: sync skill $(date +%Y-%m-%d)"
|
||||||
|
git remote add origin https://oauth2:${GITEA_TOKEN}@${GITEA_URL#https://}/${GITEA_OWNER}/${repo_name}.git
|
||||||
|
git push -u origin main --force
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **清理临时目录**:
|
||||||
|
```bash
|
||||||
|
cd -
|
||||||
|
rm -rf ./tmp/skill_push/${repo_name}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 批量推送
|
||||||
|
|
||||||
|
遍历 `./skills/` 下所有子目录,对每个目录重复以上流程。注意跳过 `use_vala_skillhub` 目录本身。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 操作二:安装 / 更新技能
|
||||||
|
|
||||||
|
从 SkillHub 下载技能到本地 `./skills` 目录。若本地已存在同名目录,则**清空后重新下载**,确保与远程版本一致。
|
||||||
|
|
||||||
|
**注意**:不使用 `git clone`,而是下载归档解压,避免在 `./skills` 下产生 `.git` 目录。
|
||||||
|
|
||||||
|
### 流程
|
||||||
|
|
||||||
|
1. **确定要安装的仓库名**(完整名,如 `cron_job.xiaoxi`)
|
||||||
|
|
||||||
|
2. **下载并解压**(已存在则先清空再覆盖):
|
||||||
|
```bash
|
||||||
|
repo_name="cron_job.xiaoxi"
|
||||||
|
target_dir="./skills/${repo_name}"
|
||||||
|
|
||||||
|
# 如果已存在,清空目录内容以确保与远程一致(删除远程已移除的文件)
|
||||||
|
rm -rf "${target_dir}"
|
||||||
|
mkdir -p "${target_dir}"
|
||||||
|
|
||||||
|
# 通过 Gitea API 下载 tar.gz 归档并解压(自动尝试 main/master)
|
||||||
|
curl -sL "${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}/archive/main.tar.gz" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
| tar xz --strip-components=1 -C "${target_dir}" 2>/dev/null \
|
||||||
|
|| curl -sL "${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}/archive/master.tar.gz" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
| tar xz --strip-components=1 -C "${target_dir}"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 操作三:列出 SkillHub 上的技能
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s "${GITEA_URL}/api/v1/orgs/${GITEA_OWNER}/repos?page=1&limit=50&sort=updated" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}"
|
||||||
|
```
|
||||||
|
|
||||||
|
返回 JSON 数组,每个元素包含 `name`、`description`、`updated_at` 等字段。如结果满 50 条,继续翻页 `page=2`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 操作四:自动同步(变更检测 + 自动推送)
|
||||||
|
|
||||||
|
当 skill 发生新增或更新时,自动检测变更并仅推送有变化的 skill。
|
||||||
|
|
||||||
|
### 哈希状态文件
|
||||||
|
|
||||||
|
使用 `./.vala_skill_hashes`(workspace 根目录下)记录每个 skill 上次推送时的内容哈希,格式为每行一条记录:
|
||||||
|
|
||||||
|
```
|
||||||
|
skill_dir_name hash
|
||||||
|
```
|
||||||
|
|
||||||
|
示例:
|
||||||
|
```
|
||||||
|
cron_job a3f2b8c9...
|
||||||
|
web_scraper 7d1e4f6a...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 计算 skill 目录哈希
|
||||||
|
|
||||||
|
对 skill 目录内所有文件(含文件路径)计算综合哈希,确保文件新增、删除、重命名、内容修改都能被检测到:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
compute_skill_hash() {
|
||||||
|
local skill_dir="$1"
|
||||||
|
(cd "${skill_dir}" && find . -type f -not -path '*/\.*' | LC_ALL=C sort | while read f; do echo "FILE:$f"; cat "$f"; done | sha256sum | awk '{print $1}')
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### check_and_push 完整流程
|
||||||
|
|
||||||
|
1. **加载配置和哈希状态**:
|
||||||
|
```bash
|
||||||
|
source ./.vala_skillhub_config
|
||||||
|
HASH_FILE=./.vala_skill_hashes
|
||||||
|
touch "${HASH_FILE}"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **遍历 `./skills/` 下所有 skill 目录**,对每个 skill:
|
||||||
|
```bash
|
||||||
|
for skill_dir in ./skills/*/; do
|
||||||
|
skill_name=$(basename "${skill_dir}")
|
||||||
|
|
||||||
|
# 跳过 use_vala_skillhub 自身
|
||||||
|
if [ "${skill_name}" = "use_vala_skillhub" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 计算当前哈希
|
||||||
|
current_hash=$(compute_skill_hash "${skill_dir}")
|
||||||
|
|
||||||
|
# 读取上次推送的哈希
|
||||||
|
stored_hash=$(grep "^${skill_name} " "${HASH_FILE}" | awk '{print $2}')
|
||||||
|
|
||||||
|
if [ "${current_hash}" = "${stored_hash}" ]; then
|
||||||
|
echo "[skip] ${skill_name} — 无变更"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[sync] ${skill_name} — 检测到变更,开始推送..."
|
||||||
|
|
||||||
|
# 执行推送(同操作一的流程)
|
||||||
|
repo_name="${skill_name}.${SOURCE_NAME}"
|
||||||
|
|
||||||
|
# 检查远程仓库是否存在
|
||||||
|
http_code=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||||
|
"${GITEA_URL}/api/v1/repos/${GITEA_OWNER}/${repo_name}" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}")
|
||||||
|
|
||||||
|
# 如果不存在则创建
|
||||||
|
if [ "${http_code}" = "404" ]; then
|
||||||
|
# 从 skill.json 读取描述(如果有)
|
||||||
|
desc=""
|
||||||
|
if [ -f "${skill_dir}/skill.json" ]; then
|
||||||
|
desc=$(cat "${skill_dir}/skill.json" | grep '"description"' | head -1 | sed 's/.*"description"[[:space:]]*:[[:space:]]*"\(.*\)".*/\1/')
|
||||||
|
fi
|
||||||
|
curl -s -X POST "${GITEA_URL}/api/v1/orgs/${GITEA_OWNER}/repos" \
|
||||||
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "'"${repo_name}"'", "private": false, "description": "'"${desc}"'", "auto_init": false}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 复制到临时目录并推送
|
||||||
|
rm -rf ./tmp/skill_push/${repo_name}
|
||||||
|
mkdir -p ./tmp/skill_push/${repo_name}
|
||||||
|
cp -r ${skill_dir}* ./tmp/skill_push/${repo_name}/
|
||||||
|
cp -r ${skill_dir}.[!.]* ./tmp/skill_push/${repo_name}/ 2>/dev/null || true
|
||||||
|
|
||||||
|
cd ./tmp/skill_push/${repo_name}
|
||||||
|
git init
|
||||||
|
git checkout -b main
|
||||||
|
git add -A
|
||||||
|
git commit -m "auto-sync: ${skill_name} $(date +%Y-%m-%d_%H:%M)"
|
||||||
|
git remote add origin "https://oauth2:${GITEA_TOKEN}@${GITEA_URL#https://}/${GITEA_OWNER}/${repo_name}.git"
|
||||||
|
git push -u origin main --force
|
||||||
|
cd -
|
||||||
|
|
||||||
|
# 清理临时目录
|
||||||
|
rm -rf ./tmp/skill_push/${repo_name}
|
||||||
|
|
||||||
|
# 更新哈希状态文件
|
||||||
|
# 先移除旧记录,再追加新记录
|
||||||
|
grep -v "^${skill_name} " "${HASH_FILE}" > "${HASH_FILE}.tmp" || true
|
||||||
|
echo "${skill_name} ${current_hash}" >> "${HASH_FILE}.tmp"
|
||||||
|
mv "${HASH_FILE}.tmp" "${HASH_FILE}"
|
||||||
|
|
||||||
|
echo "[done] ${skill_name} — 推送完成"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **输出同步摘要**:推送完成后,汇总本次同步了哪些 skill(跳过了哪些)。
|
||||||
|
|
||||||
|
### 单个 skill 的快速同步
|
||||||
|
|
||||||
|
当你明确知道哪个 skill 发生了变更时,可以仅对该 skill 执行 check_and_push,无需遍历所有目录:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
skill_name="目标skill名"
|
||||||
|
skill_dir="./skills/${skill_name}"
|
||||||
|
# 然后执行上面循环体中的逻辑
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 数字员工行为规范(重要)
|
||||||
|
|
||||||
|
作为数字员工,你**必须**在以下场景中自动执行 `check_and_push`:
|
||||||
|
|
||||||
|
1. **创建新 skill 后** — 在 `./skills/` 下新建了 skill 目录并完成编写后,立即执行同步
|
||||||
|
2. **修改现有 skill 后** — 对 `./skills/` 下任何 skill 的文件做了修改后,立即执行同步
|
||||||
|
3. **删除 skill 文件后** — 如果删除了 skill 中的某些文件(重构等),同步以保持远程一致
|
||||||
|
4. **定时兜底**(可选) — 如果你拥有 `cron_job` 技能,建议设置每日一次的全量 check_and_push 作为安全网
|
||||||
|
|
||||||
|
### 推送时机建议
|
||||||
|
|
||||||
|
- **立即推送**:skill 的功能性变更完成且验证通过后
|
||||||
|
- **不要推送**:正在编辑中间态、尚未完成的 skill
|
||||||
|
- **批量场景**:如果一次性修改了多个 skill,在全部完成后执行一次全量 check_and_push 即可
|
||||||
|
|
||||||
|
### 自动推送日志
|
||||||
|
|
||||||
|
每次推送后,建议在控制台输出简短日志,方便追溯:
|
||||||
|
```
|
||||||
|
[auto-sync] 2025-04-01 23:00 — 推送 2 个 skill: cron_job, web_scraper | 跳过 3 个(无变更)
|
||||||
|
```
|
||||||
14
skills/use_vala_skillhub/skill.json
Normal file
14
skills/use_vala_skillhub/skill.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "use_vala_skillhub",
|
||||||
|
"version": "4.0.0",
|
||||||
|
"description": "管理 Vala SkillHub 上的技能:推送、安装、自动同步(变更检测 + 自动推送,不影响 workspace git 备份)",
|
||||||
|
"author": "vala",
|
||||||
|
"tags": [
|
||||||
|
"skillhub",
|
||||||
|
"git",
|
||||||
|
"管理",
|
||||||
|
"备份",
|
||||||
|
"自动同步"
|
||||||
|
],
|
||||||
|
"config_file": "./.vala_skillhub_config"
|
||||||
|
}
|
||||||
45
validation_config.yaml
Normal file
45
validation_config.yaml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# 英文台词校验规则配置
|
||||||
|
# 版本:2026-04-01
|
||||||
|
---
|
||||||
|
## 一、基础通用校验规则(强制执行)
|
||||||
|
basic_rules:
|
||||||
|
sentence_spec:
|
||||||
|
- 默认保留be going to标准表达,无特殊标注(如指定学龄前场景)禁止使用gonna等过度口语化表达
|
||||||
|
vocabulary_control:
|
||||||
|
- 低龄学习场景禁止使用超纲词,动作指令优先选择基础词汇(如用look at替代focus)
|
||||||
|
redundancy_check:
|
||||||
|
- 禁止同一句台词连续重复出现2次及以上,此类排版错误直接标注
|
||||||
|
confirmed_optimization:
|
||||||
|
- "Today, we must train!" 统一优化为 "Let's start training!"
|
||||||
|
|
||||||
|
## 二、核心精校5大法则(A1级别内容强制遵循)
|
||||||
|
core_principles:
|
||||||
|
simplification:
|
||||||
|
name: 极简降维法则
|
||||||
|
rules:
|
||||||
|
- 严格执行"一句一意",复杂嵌套句型拆分为独立简单句,禁止复合从句
|
||||||
|
- 时态仅允许使用一般现在时、一般过去时、基础将来时(will/be going to),禁止完成时、虚拟语气
|
||||||
|
chunking:
|
||||||
|
name: 语块优先法则
|
||||||
|
rules:
|
||||||
|
- 上下文/画面信息充足时可省略冗余成分,保留核心语块
|
||||||
|
- 允许使用母语儿童常用地道祈使短句(如Game start!/Watch this!/Silly me!),禁止生造表达
|
||||||
|
tpr_action:
|
||||||
|
name: TPR动作强绑定法则
|
||||||
|
rules:
|
||||||
|
- 引导交互/动作的台词以基础动词原形开头(Look/Listen/Hit/Run等)
|
||||||
|
- 确保台词与画面动作/UI组件完全同步,利用视觉辅助听力解码
|
||||||
|
target_focus:
|
||||||
|
name: 目标大纲无痕植入法则
|
||||||
|
rules:
|
||||||
|
- 核心词汇/句型通过剧情冲突(找不到/受伤/失误等)自然重复,禁止生硬植入
|
||||||
|
- 目标句型通过NPC提问引导输出,禁止直接生硬陈述
|
||||||
|
emotional_resonance:
|
||||||
|
name: 情绪夸张法则
|
||||||
|
rules:
|
||||||
|
- 允许使用低认知负荷语气词传递情绪(Phew!/Ouch!/Oops!/Aha!/Waaaaah!等)
|
||||||
|
- 情绪表达直接使用A1级形容词(sad/happy/angry等),禁止复杂心理描写
|
||||||
|
|
||||||
|
## 三、校验输出标准
|
||||||
|
output_standard:
|
||||||
|
- 所有问题标注需包含:上下文引用+问题类型说明+具体优化方案,确保可直接落地修改
|
||||||
Loading…
Reference in New Issue
Block a user