skill-base 2.0.4 → 2.0.7

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.
Files changed (46) hide show
  1. package/README.md +177 -115
  2. package/bin/skill-base.js +29 -3
  3. package/package.json +4 -1
  4. package/src/cappy.js +416 -0
  5. package/src/database.js +11 -0
  6. package/src/index.js +125 -25
  7. package/src/middleware/auth.js +96 -32
  8. package/src/routes/auth.js +1 -1
  9. package/src/routes/skills.js +10 -5
  10. package/src/utils/zip.js +15 -4
  11. package/static/android-chrome-192x192.png +0 -0
  12. package/static/android-chrome-512x512.png +0 -0
  13. package/static/apple-touch-icon.png +0 -0
  14. package/static/assets/index-BkwByEEp.css +1 -0
  15. package/static/assets/index-CB4Diul3.js +209 -0
  16. package/static/favicon-16x16.png +0 -0
  17. package/static/favicon-32x32.png +0 -0
  18. package/static/favicon.ico +0 -0
  19. package/static/favicon.svg +14 -0
  20. package/static/index.html +18 -248
  21. package/static/site.webmanifest +1 -0
  22. package/static/admin/users.html +0 -593
  23. package/static/cli-code.html +0 -203
  24. package/static/css/.gitkeep +0 -0
  25. package/static/css/style.css +0 -1567
  26. package/static/diff.html +0 -466
  27. package/static/file.html +0 -443
  28. package/static/js/.gitkeep +0 -0
  29. package/static/js/admin/users.js +0 -346
  30. package/static/js/app.js +0 -508
  31. package/static/js/auth.js +0 -151
  32. package/static/js/cli-code.js +0 -184
  33. package/static/js/collaborators.js +0 -283
  34. package/static/js/diff.js +0 -540
  35. package/static/js/file.js +0 -619
  36. package/static/js/i18n.js +0 -739
  37. package/static/js/index.js +0 -168
  38. package/static/js/publish.js +0 -718
  39. package/static/js/settings.js +0 -124
  40. package/static/js/setup.js +0 -157
  41. package/static/js/skill.js +0 -808
  42. package/static/login.html +0 -82
  43. package/static/publish.html +0 -459
  44. package/static/settings.html +0 -163
  45. package/static/setup.html +0 -101
  46. package/static/skill.html +0 -851
package/README.md CHANGED
@@ -1,183 +1,245 @@
1
- # Skill Base
1
+ # 📦 Skill Base
2
2
 
3
- 轻量级 AI Agent Skill 管理平台,支持 Web 端和命令行工具。
3
+ [![npm version](https://img.shields.io/npm/v/skill-base.svg)](https://www.npmjs.com/package/skill-base)
4
+ [![Node version](https://img.shields.io/badge/node-%3E%3D%2018.0.0-brightgreen)](https://nodejs.org/)
5
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
4
6
 
5
- ## 功能特性
7
+ > **专为 200 人以下小团队打造的轻量级 AI Agent Skill 私有化管理平台。**
8
+ > 告别跨项目复制粘贴提示词,让你的 Cursor、OpenClaw、Cline 等 AI 助手瞬间掌握团队内部的最佳实践与业务规范。极简部署,开箱即用。
6
9
 
7
- - **Skill 管理** - 搜索、安装、更新、发布 AI Agent Skills
8
- - **版本控制** - 每个 Skill 支持多版本管理
9
- - **协作者管理** - 支持多人协作维护 Skill
10
- - **双端支持** - Web 界面 + CLI 命令行工具
10
+ ---
11
11
 
12
- ## 快速开始
12
+ ## 🤔 什么是 Agent Skill?
13
13
 
14
- ### 使用 npx 一键启动
14
+ AI 辅助开发时代,AI 虽然懂通用代码,但**不懂你们公司的业务上下文**。
15
+ 如果让 AI 直接写一个“用户列表”,它可能会用原生的 `fetch` 和基础的 `table` 标签。但实际上,你们团队的规范可能是:
16
+ 1. 必须使用内部封装的 `@/utils/request.js` 发起请求。
17
+ 2. 必须使用团队魔改版的 `<ProTable>` 组件。
18
+ 3. 时间格式化必须调用内部的 `formatDate` 方法。
15
19
 
16
- ```bash
17
- # 直接运行(默认端口 8000)
18
- npx skill-base
20
+ **Agent Skill(技能包)就是用来解决这个问题的。** 它是一份结构化的文档(包含提示词约束、上下文规范和代码示例),通过把这些规则交给 AI,让 AI 不再“瞎造轮子”,而是严格按照你们团队的规矩写代码。
19
21
 
20
- # 指定端口
21
- npx skill-base -p 3000
22
+ ---
22
23
 
23
- # 仅本地访问
24
- npx skill-base --host 127.0.0.1
24
+ ## 💡 为什么需要 Skill Base?
25
25
 
26
- # 指定数据目录(推荐,方便管理数据)
27
- npx skill-base -d ./data
26
+ 目前管理这些 AI 上下文,团队通常面临两大痛点,这也正是 Skill Base 诞生的原因:
28
27
 
29
- # 数据存储到当前目录
30
- npx skill-base -d .
31
- ```
28
+ ### 1. 公共平台(如 Clawhub)不适合存放公司私有业务
29
+ OpenClaw 等框架非常强大,Clawhub 上也有很多优秀的开源 Skill。但涉及**公司内部接口约定、私有 UI 组件库用法、核心业务逻辑**的 Skill,显然不能发布到公共网络。
30
+ 👉 **Skill Base 是 OpenClaw 等工具完美的“私有化伴侣”**,就像私有 npm 源(Verdaccio)一样,专门用于沉淀和分发团队内部的私有技能包。
31
+
32
+ ### 2. 告别四处复制粘贴 `.cursorrules`
33
+ 很多团队目前通过在每个代码仓库里放一个 `.cursorrules` 或共享文档来同步 AI 规范。一旦规范更新(比如组件库升级了),需要手动去几十个仓库里改,极难维护。
34
+ 👉 **Skill Base 引入了包管理的理念**。只需要 `skb install team-vue-rules`,就能将最新的规范同步到当前项目,支持版本控制与一键更新。
35
+
36
+ ### 3. 拒绝重型架构,专为小团队设计
37
+ 部署一套带 MySQL、Redis 的企业级知识库太重了。Skill Base 采用纯 Node.js + SQLite 架构,**一行 `npx` 命令即可启动**,没有任何运维心智负担。
38
+
39
+ ---
40
+
41
+ ## ✨ 核心特性
32
42
 
33
- > **提示**:使用 `-d` 指定数据目录后,数据库和 Skills 文件会存储在指定路径,而非 npm 缓存目录。这样更方便数据备份和管理。
43
+ - **零配置启动**:一行 `npx skill-base` 即可运行,内置 SQLite,无需额外数据库服务。
44
+ - 🔄 **如同 npm 般的体验**:提供 `skb` CLI 工具,`install / update / publish` 符合开发者直觉。
45
+ - 🔒 **私有化安全**:所有团队规范、业务逻辑数据均保存在本地/私有服务器。
46
+ - 📦 **版本控制**:支持 Skill 的多版本管理,规范迭代有迹可循。
47
+ - 🌐 **双端支持**:可视化的 Web 管理后台 + 高效的 CLI 命令行。
34
48
 
35
- ### Web 端使用
49
+ ---
36
50
 
37
- 1. 访问平台首页,注册/登录账号
38
- 2. 浏览或搜索需要的 Skill
39
- 3. 点击 Skill 查看详情和历史版本
40
- 4. 点击下载按钮获取 Skill 文件
51
+ ## 💡 设计哲学:为“随时废弃”而构建 (Build to Delete)
41
52
 
42
- **发布 Skill:**
43
- 1. 登录后点击「发布」
44
- 2. 选择包含 `SKILL.md` 的文件夹
45
- 3. 填写版本说明后提交
53
+ 业界关于 AI 工程有一个著名的洞察:**车速越快,护栏越重要。**
54
+ 模型(引擎)越强大,团队越需要清晰的 Harness(架构约束、工具集)来防止 AI 跑偏。
46
55
 
47
- ### CLI 使用
56
+ 但我们深知,AI 进化的速度太快了。今天极度复杂的 Prompt 技巧,半年后可能就会被新一代模型原生的推理能力淘汰。
48
57
 
49
- 安装 CLI 工具:
58
+ 因此,**Skill Base 坚决贯彻 "Start Simple. Build to Delete" 的理念:**
59
+ 1. **纯粹的搬运工**:我们不做重型的 Agent 编排框架,不与任何特定的大模型绑定。我们只是团队上下文的“高速快递网络”。
60
+ 2. **极轻量、模块化**:我们鼓励团队沉淀“微型技能包”(Micro-Skills),用完即弃,随时拆卸,绝不产生历史包袱。
61
+ 3. **零技术债**:无数据库依赖(内置 SQLite),无微服务。今天 `npx` 跑起来,明天删掉目录即无痕销毁。
62
+
63
+ 我们不预测 6 个月后的 AI 长什么样,但我们确保:**无论 AI 怎么变,Skill Base 永远是你团队同步最佳实践的最快通道。**
64
+
65
+ ---
66
+
67
+ ## 🚀 快速启动服务端
68
+
69
+ 要求 Node.js >= 18.0.0。最简单的启动方式是直接使用 `npx`:
50
70
 
51
71
  ```bash
52
- npm install -g skill-base-cli
72
+ # 推荐做法:指定数据目录启动(方便数据持久化和备份)
73
+ npx skill-base -d ./skill-data -p 8000
53
74
  ```
54
75
 
55
- 配置服务器地址(默认 localhost:8000):
56
-
76
+ **其他启动选项:**
57
77
  ```bash
58
- export SKB_BASE_URL=https://your-server.com
78
+ npx skill-base # 默认启动 (端口 8000, 数据存放在 npm 缓存)
79
+ npx skill-base --host 127.0.0.1 # 仅限本地访问,增强安全性
80
+ npx skill-base --base-path /skills/ # 部署在子路径下 (例如: /skills/)
59
81
  ```
60
82
 
61
- 常用命令:
83
+ **完整参数说明:**
84
+ | 参数 | 简写 | 说明 | 默认值 |
85
+ |------|------|------|--------|
86
+ | `--port` | `-p` | 指定端口号 | 8000 |
87
+ | `--host` | `-h` | 指定监听地址 | 0.0.0.0 |
88
+ | `--data-dir` | `-d` | 指定数据目录 | 包内 data/ |
89
+ | `--base-path` | - | 指定部署前缀 | / |
62
90
 
63
- ```bash
64
- # 登录
65
- skb login
91
+ > 🔐 **首次运行须知**:系统启动后,首次访问 Web 端将自动跳转至**初始化页面**,请根据提示设置系统管理员账号与密码。
66
92
 
67
- # 搜索 Skill
68
- skb search vue
93
+ ---
69
94
 
70
- # 安装 Skill
71
- skb install vue-best-practices
72
- skb install vue-best-practices@v20260115.120000 # 指定版本
73
- skb install vue-best-practices -d ./my-skills # 指定目录
95
+ ## 💻 客户端使用指南 (CLI & Web)
74
96
 
75
- # 更新 Skill
76
- skb update vue-best-practices
97
+ ### ⌨️ CLI 命令行工具 (推荐极客使用)
77
98
 
78
- # 发布 Skill
79
- skb publish ./my-skill --changelog "初始版本"
99
+ **1. 安装 CLI:**
100
+ ```bash
101
+ npm install -g skill-base-cli
102
+ ```
80
103
 
81
- # 登出
82
- skb logout
104
+ **2. 配置你的私有服务地址:**
105
+ ```bash
106
+ skb init -s http://your-team-server
83
107
  ```
84
108
 
85
- ## 部署服务端
109
+ **3. 像用 npm 一样管理你的 AI Skills:**
110
+ ```bash
111
+ # 账号操作
112
+ skb login
86
113
 
87
- ### 环境要求
114
+ # 搜索与安装
115
+ skb search vue # 搜索
116
+ skb install vue-best-practices # 安装最新版
117
+ skb install vue-best-practices@v20260115 # 安装指定版本
118
+ skb install vue-best-practices -d ./.cursor/rules # 安装到 Cursor 规则目录
88
119
 
89
- - Node.js >= 18.0.0
120
+ # 发布团队内部的新 Skill
121
+ skb publish ./my-business-skill --changelog "新增了报表组件的使用规范"
122
+ ```
90
123
 
91
- ### 本地运行
124
+ **🤖 深度集成各大主流 AI IDE:**
92
125
 
126
+ 不用去记不同 AI 工具复杂的规则文件路径!`skb` 提供了智能的 IDE 适配,一键将团队规范直接注入你的工作流:
93
127
  ```bash
94
- # 安装依赖
95
- npm install
128
+ # 交互式安装,根据提示选择即可
129
+ skb install my-team-rules
96
130
 
97
- # 开发模式
98
- npm run dev
131
+ # 或者使用快捷参数,直接注入当前项目的 AI 上下文
132
+ skb install team-vue-rules --ide cursor # 自动生成到 .cursor/rules/
133
+ skb install team-vue-rules --ide qoder # 自动生成到 .qoder/skills/
134
+ skb install team-vue-rules --ide copilot # 自动生成到 .github/instructions/
99
135
 
100
- # 生产模式
101
- npm start
136
+ # 支持全局安装通用素养规则
137
+ skb install git-commit-rules --ide cursor --global
102
138
  ```
103
139
 
104
- ### 初始化管理员账号
140
+ ### 🌐 Web 端操作
141
+ 对于不习惯命令行的团队成员,可以直接访问浏览器:
142
+ 1. **浏览与检索**:可视化查看所有内部沉淀的 Skill 及其历史版本。
143
+ 2. **下载使用**:一键下载,直接拖入项目。
144
+ 3. **极简发布**:将包含 `SKILL.md` 的文件夹(或 zip 包)**直接拖拽**到网页上传区域,即可完成发布。
105
145
 
106
- 首次启动时,如果系统中还没有管理员账号,访问任何页面会自动跳转到初始化设置页面,请按提示设置管理员用户名和密码。
146
+ ---
107
147
 
108
- > **安全提示**:请妥善保管管理员凭据,建议使用强密码。
148
+ ## 📝 如何编写一个好用的 Skill?
109
149
 
110
- ### Docker 部署
150
+ 在要发布的目录中创建一个 `SKILL.md`,Skill Base 会自动解析它。
111
151
 
112
- ```bash
113
- docker build -t skill-base .
114
- docker run -p 8000:8000 -v ./data:/app/data skill-base
115
- ```
152
+ ### Frontmatter 规范
116
153
 
117
- ## 项目结构
154
+ 推荐使用 YAML frontmatter 明确定义元数据:
118
155
 
119
- ```
120
- skill-base/
121
- ├── cli/ # CLI 命令行工具
122
- ├── src/ # 服务端源码
123
- ├── static/ # Web 前端
124
- ├── data/ # 数据存储
125
- └── docs/ # 文档
126
- ```
156
+ | 字段 | 必需 | 说明 |
157
+ |------|------|------|
158
+ | `name` | 推荐 | Skill 的唯一标识符,建议使用 kebab-case |
159
+ | `description` | 推荐 | 描述 Skill 用途,**务必包含触发关键词** |
127
160
 
128
- ## 数据存储
161
+ > 💡 如果省略 frontmatter,系统会自动使用第一个 `#` 标题作为 name,标题后第一段文本作为 description。
129
162
 
130
- ### 数据目录结构
163
+ ### 触发关键词写法
131
164
 
165
+ 在 `description` 中使用自然语言描述触发条件,AI 助手会据此判断何时激活该 Skill:
166
+
167
+ ```yaml
168
+ description: "Triggers on requests to create Vue admin pages, write ProForm components, or any mention of internal API standards."
132
169
  ```
133
- data/
134
- ├── skills.db # SQLite 数据库
135
- ├── skills.db-wal # WAL 日志
136
- ├── skills.db-shm # 共享内存文件
137
- └── <skill-id>/ # 每个 Skill 的 ZIP 文件
138
- ├── v20260326.120000.zip
139
- └── v20260326.150000.zip
170
+
171
+ ### 互斥与互补关系
172
+
173
+ 当多个 Skill 可能同时触发时,在正文开头声明它们的关系:
174
+
175
+ ```markdown
176
+ > 本技能与 `team-api-standards` 互补——接口请求规范仍遵循该技能。
177
+ > 本技能与 `legacy-vue2-rules` 互斥——请勿同时安装。
140
178
  ```
141
179
 
142
- ### 删除数据
180
+ ### 完整示例
143
181
 
144
- **方法 1:指定数据目录后删除**
182
+ ```markdown
183
+ ---
184
+ name: team-vue3-admin
185
+ description: "Internal Vue3 admin best practices for R&D Team 1. Triggers on requests to create Vue admin pages, write ProForm components, use internal UI library, or any mention of ProTable, useRequest, or internal component standards."
186
+ ---
145
187
 
146
- ```bash
147
- # 启动时指定数据目录
148
- npx skill-base -d ./my-data
188
+ # 内部 Vue3 管理后台最佳实践
149
189
 
150
- # 删除数据(停止服务后)
151
- rm -rf ./my-data
152
- ```
190
+ > 本技能与 `team-api-standards` 互补——接口请求规范仍遵循该技能。
153
191
 
154
- **方法 2:清理 npx 缓存(未指定 -d 时)**
192
+ 研发一部针对中后台项目的标准 AI 提示词规范,包含组件库使用限制和接口请求标准。
155
193
 
156
- ```bash
157
- npx clear-npx-cache
158
- # 或手动删除
159
- rm -rf ~/.npm/_npx/
160
- ```
194
+ ## 🎯 核心原则
161
195
 
162
- ## SKILL.md 规范
196
+ - 必须使用 TypeScript。
197
+ - 所有的表单组件必须使用 `@/components/ProForm`,严禁使用原生 el-form。
198
+ - 表格展示必须使用 `<ProTable>`,禁止原生 table 或 el-table。
163
199
 
164
- 每个 Skill 必须包含 `SKILL.md` 文件,平台会自动解析:
200
+ ## 📦 接口请求规范
165
201
 
166
- - **name**: 第一个 `#` 标题
167
- - **description**: 标题后的第一段文本
202
+ - 引入:`import { useRequest } from '@/utils/request'`
203
+ - 示例:
204
+ \`\`\`typescript
205
+ const { data, loading } = await useRequest<UserList>('/api/v1/users', { method: 'GET' })
206
+ \`\`\`
168
207
 
169
- 示例:
208
+ ## ✅ 质量检查清单
170
209
 
171
- ```markdown
172
- # Vue Best Practices
210
+ - [ ] 使用 TypeScript 严格模式
211
+ - [ ] 表单使用 ProForm 组件
212
+ - [ ] 表格使用 ProTable 组件
213
+ - [ ] 接口请求使用 useRequest
214
+ - [ ] 时间格式化使用 formatDate
215
+ ```
216
+
217
+ *将上述文件夹通过 `skb publish` 发布后,你的团队成员就可以愉快地 `skb install` 并将它喂给 Cursor 或 OpenClaw 了!*
173
218
 
174
- Vue.js 开发最佳实践指南,包含组件设计、状态管理等内容。
219
+ ---
175
220
 
176
- ## 使用方法
221
+ ## 🛠 生产环境私有化部署
177
222
 
178
- ...
223
+ ### Docker 部署(推荐)
224
+ 对于企业内部服务器,使用 Docker 部署最为稳妥:
225
+ ```bash
226
+ docker build -t skill-base .
227
+ # 将本地的 ./data 目录挂载到容器内实现数据持久化
228
+ docker run -d -p 8000:8000 -v $(pwd)/data:/data --name skill-base-server skill-base
229
+ ```
230
+
231
+ ### 数据存储说明
232
+ 如果指定了 `-d ./data`,数据结构如下,非常便于直接打包备份:
233
+ ```text
234
+ data/
235
+ ├── skills.db # SQLite 核心数据库
236
+ ├── skills.db-wal # WAL 日志缓存
237
+ └── skills/ # 各 Skill 的 zip 包目录
238
+ └── <skill-id>/
239
+ └── v20260326.120000.zip
179
240
  ```
180
241
 
181
- ## License
242
+ ---
182
243
 
183
- MIT
244
+ ## 🤝 参与贡献
245
+ 本项目基于 [MIT License](LICENSE) 开源,致力于打造最轻量、最好用的团队 AI 资产管理工具。欢迎提交 Issue 和 Pull Request 共建!
package/bin/skill-base.js CHANGED
@@ -13,6 +13,10 @@ const args = process.argv.slice(2);
13
13
  let port = 8000;
14
14
  let host = '0.0.0.0';
15
15
  let dataDir = null;
16
+ let basePath = '/';
17
+ let enableCappy = true; // CLI 默认启用
18
+ let cappyExplicitlySet = false;
19
+ let debug = false;
16
20
 
17
21
  for (let i = 0; i < args.length; i++) {
18
22
  if ((args[i] === '-p' || args[i] === '--port') && args[i + 1]) {
@@ -24,6 +28,17 @@ for (let i = 0; i < args.length; i++) {
24
28
  } else if ((args[i] === '-d' || args[i] === '--data-dir') && args[i + 1]) {
25
29
  dataDir = path.resolve(args[i + 1]);
26
30
  i++;
31
+ } else if (args[i] === '--base-path' && args[i + 1]) {
32
+ basePath = args[i + 1];
33
+ i++;
34
+ } else if (args[i] === '--no-cappy') {
35
+ enableCappy = false;
36
+ cappyExplicitlySet = true;
37
+ } else if (args[i] === '--cappy') {
38
+ enableCappy = true;
39
+ cappyExplicitlySet = true;
40
+ } else if (args[i] === '-v' || args[i] === '--verbose') {
41
+ debug = true;
27
42
  } else if (args[i] === '--help') {
28
43
  console.log(`
29
44
  Skill Base - 内网轻量版 Skill 管理平台
@@ -35,15 +50,18 @@ Options:
35
50
  -p, --port <port> 指定端口号 (默认: 8000)
36
51
  -h, --host <host> 指定监听地址 (默认: 0.0.0.0)
37
52
  -d, --data-dir <path> 指定数据目录 (默认: 包内 data/)
53
+ --base-path <path> 指定部署前缀 (默认: /,例如: /skills/)
54
+ --cappy 显式启用 Cappy 水豚吉祥物
55
+ --no-cappy 禁用 Cappy 水豚吉祥物
56
+ -v, --verbose 启用调试信息 (启用时默认禁用 Cappy)
38
57
  --help 显示帮助信息
39
58
  --version 显示版本号
40
59
 
41
60
  Examples:
42
61
  npx skill-base # 启动服务 (端口 8000)
43
- npx skill-base -p 3000 # 使用端口 3000
44
- npx skill-base --host 127.0.0.1 # 仅本地访问
62
+ npx skill-base -v # 开启调试,此时 Cappy 默认禁用
63
+ npx skill-base -v --cappy # 开启调试,并强制开启 Cappy
45
64
  npx skill-base -d ./data # 数据存储到当前目录的 data 文件夹
46
- npx skill-base -d . -p 3000 # 数据存储到当前目录
47
65
  `);
48
66
  process.exit(0);
49
67
  } else if (args[i] === '--version') {
@@ -53,9 +71,17 @@ Examples:
53
71
  }
54
72
  }
55
73
 
74
+ // 逻辑:如果开启 debug 且用户没有显式设置 cappy,则默认禁用
75
+ if (debug && !cappyExplicitlySet) {
76
+ enableCappy = false;
77
+ }
78
+
56
79
  // 设置环境变量
57
80
  process.env.PORT = port;
58
81
  process.env.HOST = host;
82
+ process.env.APP_BASE_PATH = basePath;
83
+ process.env.ENABLE_CAPPY = enableCappy;
84
+ process.env.DEBUG = debug;
59
85
 
60
86
  // 设置数据目录
61
87
  if (dataDir) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-base",
3
- "version": "2.0.4",
3
+ "version": "2.0.7",
4
4
  "description": "Skill Base - 内网轻量版 Skill 管理平台",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -15,6 +15,8 @@
15
15
  "scripts": {
16
16
  "start": "node src/index.js",
17
17
  "dev": "nodemon src/index.js",
18
+ "build": "cd web && pnpm build",
19
+ "web:dev": "cd web && pnpm dev",
18
20
  "test": "node --test tests/**/*.test.js"
19
21
  },
20
22
  "dependencies": {
@@ -25,6 +27,7 @@
25
27
  "bcryptjs": "^2.4.3",
26
28
  "better-sqlite3": "^12.8.0",
27
29
  "fastify": "^5.8.4",
30
+ "fastify-plugin": "^5.0.1",
28
31
  "uuid": "^9.0.0"
29
32
  },
30
33
  "devDependencies": {