foliko 1.0.38 → 1.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foliko",
3
- "version": "1.0.38",
3
+ "version": "1.0.39",
4
4
  "description": "简约的插件化 Agent 框架",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: skill-guide
3
+ description: 技能安装与开发指南。当用户询问"如何添加技能"、"自定义技能"、"安装技能"时立即调用。
4
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
+ ---
6
+
7
+ # 技能(Skill)安装与开发指南
8
+
9
+ ## 概述
10
+
11
+ 技能(Skill)是 Agent 的扩展能力模块,存放在 `.agent/skills/` 目录下。
12
+
13
+ ## 技能存放位置
14
+
15
+ ```
16
+ 项目目录/
17
+ └── .agent/
18
+ └── skills/
19
+ └── my-skill/ # 技能文件夹
20
+ ├── SKILL.md # 必需,技能定义文件
21
+ └── ... # 其他资源文件(可选)
22
+ ```
23
+
24
+ ## SKILL.md 格式
25
+
26
+ 每个技能必须包含 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据:
27
+
28
+ ```yaml
29
+ ---
30
+ name: my-skill # 技能名称(必需,唯一标识)
31
+ description: 这是一个自定义技能的描述。当用户说"..."时调用此技能。(必需)
32
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash # 可选,允许使用的工具列表
33
+ license: MIT # 可选,许可证
34
+ compatibility: v1.0.0 # 可选,兼容版本
35
+ ---
36
+
37
+ # 技能标题
38
+
39
+ 这里是技能的详细说明内容,可以使用 Markdown 格式。
40
+ ```
41
+
42
+ ### frontmatter 字段说明
43
+
44
+ | 字段 | 必需 | 说明 |
45
+ |------|------|------|
46
+ | `name` | 是 | 技能唯一标识,字母、数字、下划线、横杠,1-64字符 |
47
+ | `description` | 是 | 技能描述,当用户意图匹配时会被调用 |
48
+ | `allowed-tools` | 否 | 允许使用的工具列表,逗号分隔 |
49
+ | `license` | 否 | 许可证类型 |
50
+ | `compatibility` | 否 | 兼容的框架版本 |
51
+
52
+ ### 正文格式
53
+
54
+ frontmatter 之后是技能的正文内容,支持 Markdown 格式,包含:
55
+ - 详细的功能说明
56
+ - 使用示例
57
+ - 最佳实践
58
+ - 注意事项
59
+
60
+ ## 创建自定义技能
61
+
62
+ 1. 在 `.agent/skills/` 下创建技能文件夹
63
+ 2. 创建 `SKILL.md` 文件,包含完整的 frontmatter
64
+ 3. 在正文中详细描述技能的功能和使用方法
65
+ 4. 调用 `reloadSkills` 工具重载所有技能
66
+
67
+ ## 技能重载
68
+
69
+ 创建或修改技能后,需要调用 `reloadSkills` 工具重载:
70
+
71
+ ```json
72
+ {
73
+ "tool": "reloadSkills",
74
+ "args": {}
75
+ }
76
+ ```
77
+
78
+ ## 示例:创建天气查询技能
79
+
80
+ ```
81
+ .agent/skills/weather/
82
+ └── SKILL.md
83
+ ```
84
+
85
+ SKILL.md 内容:
86
+
87
+ ```yaml
88
+ ---
89
+ name: weather
90
+ description: 查询天气信息。当用户说"天气怎么样"、"今天多少度"时调用。
91
+ allowed-tools: Bash, Read
92
+ ---
93
+
94
+ # 天气查询技能
95
+
96
+ ## 功能
97
+
98
+ 查询指定城市的天气信息。
99
+
100
+ ## 使用方式
101
+
102
+ 用户发送 "北京天气" 或 "今天上海多少度"
103
+
104
+ ## 注意事项
105
+
106
+ - 使用免费的天气 API
107
+ - 响应需要简洁明了
108
+ ```
@@ -133,7 +133,7 @@ class SkillManagerPlugin extends Plugin {
133
133
  this.priority = 5
134
134
 
135
135
  this._framework = null
136
- this._skillsDirs = Array.isArray(config.skillsDirs) ? config.skillsDirs : [config.skillsDir || 'skills']
136
+ this._skillsDirs = Array.isArray(config.skillsDirs) ? config.skillsDirs : [config.skillsDir || '.agent/skills', 'skills']
137
137
  this._skills = new Map()
138
138
  this._loaded = false
139
139
  }
@@ -168,6 +168,21 @@ class SkillManagerPlugin extends Plugin {
168
168
  }
169
169
  })
170
170
 
171
+ // 注册 reloadSkills 工具
172
+ framework.registerTool({
173
+ name: 'reloadSkills',
174
+ description: '重载所有技能,当用户添加新技能或修改技能后调用此工具',
175
+ inputSchema: z.object({}),
176
+ execute: async () => {
177
+ this.reload(this._framework)
178
+ return {
179
+ success: true,
180
+ message: `Skills reloaded. Total: ${this._skills.size}`,
181
+ skills: Array.from(this._skills.keys())
182
+ }
183
+ }
184
+ })
185
+
171
186
  return this
172
187
  }
173
188