- 106 动画 + 2366 表情包 + 语义标签 - 三层记忆 / 心情系统 / 9 可配置插件 / 10 技能 - DeepSeek 对话直连 + MCP/HTTP 接入 + 接入文档 - 动画随机链 + 物理引擎 + 贴边碰撞校准 - 大资源(动画webp/表情图)由 scripts/ 再生成,不入库
85 lines
3.2 KiB
Markdown
85 lines
3.2 KiB
Markdown
# DeepSeek Hermes 插件 → 小鲸娘插件 转换规范
|
||
|
||
> 给应用内「对话」用:把这份规范贴进对话,或直接说「把下面这个 Hermes 插件转成小鲸娘插件」,
|
||
> AI 会输出 `<<<PET_PLUGIN id="...">>>` 代码块,应用自动安装。
|
||
|
||
## 一、两边是什么
|
||
|
||
| | Hermes Agent 插件 | 小鲸娘插件 |
|
||
|---|---|---|
|
||
| 语言 | Python | JavaScript(跑在宠物 WebView 里) |
|
||
| 形态 | 目录 + `plugin.yaml` + `register()` | 一段 JS 代码 |
|
||
| 能力 | 注册工具、hook、web provider、设置项 | 说话/通知/播动作/弹表情/执行技能/监听互动 |
|
||
| 安装 | `hermes plugins install` | 对话里给代码,或 `POST /api/plugin` |
|
||
|
||
**结论**:Hermes 插件不能原样搬进来(没有 Python 宿主),但**行为可以翻译**。
|
||
|
||
## 二、能力对照表
|
||
|
||
| Hermes 里的东西 | 小鲸娘里怎么写 |
|
||
|---|---|
|
||
| `on_startup()` / 顶层初始化 | 把初始化代码直接写在插件顶层 |
|
||
| 定时任务 / cron hook | `setInterval(() => Pet.say('…'), 3600000)` |
|
||
| 工具 `tool_xxx()` 被调用时通知 | `Pet.notify('done', '任务完成')` |
|
||
| 打印/汇报消息 | `Pet.say('文字', 6000)` |
|
||
| 触发动画 | `Pet.anim({tag:'happy'})` / `{name:'…'}` / `{random:true}` |
|
||
| 发图片/表情 | `Pet.meme({tag:'praise'})` |
|
||
| 组合动作 | `Pet.skill('work_done')` |
|
||
| 监听宠物互动 | `Pet.on('tap', fn)`、`Pet.on('drag_end', fn)`、`Pet.on('long_press', fn)` |
|
||
| 读宠物状态 | `Pet.status()`(返回 Promise) |
|
||
| HTTP 请求 | `fetch()` 可用(WebView 有网络权限) |
|
||
| 设置项 / 环境变量 | 写成代码顶部的 `var CONFIG = {...}`;**不要把密钥写进插件** |
|
||
|
||
## 三、不能转换的
|
||
|
||
- 注册 LLM provider / 修改 agent 推理行为(那属于宿主,小鲸娘不跑模型路由)
|
||
- 依赖 Python 库(numpy/httpx/…):只能用 JS 和 `fetch`
|
||
- 依赖 Hermes 的配置目录、secrets、工具注册表
|
||
- 需要拦截「另一个程序内部事件」的 hook —— 改由对方通过 HTTP 调小鲸娘
|
||
|
||
## 四、输出格式(AI 必读)
|
||
|
||
需要安装插件时,**只输出**下面这种块,应用会自动安装并从可见消息里剥离:
|
||
|
||
```
|
||
<<<PET_PLUGIN id="插件id(字母数字下划线)">>>
|
||
// 这里写 JS
|
||
setInterval(function () { Pet.say('该喝水啦~'); }, 3600000);
|
||
<<<END>>>
|
||
```
|
||
|
||
规则:
|
||
- `id` 必填,只能 `[A-Za-z0-9_-]`,重复会覆盖
|
||
- 代码里只用 `Pet.*` 与浏览器标准 API
|
||
- 安装后回一句简短说明(装了啥、什么时候触发)
|
||
|
||
## 五、三个转换例子
|
||
|
||
**1) Hermes 定时提醒插件**
|
||
```python
|
||
# Hermes
|
||
def on_startup(ctx):
|
||
ctx.schedule_interval(3600, lambda: ctx.notify("该喝水啦"))
|
||
```
|
||
```javascript
|
||
// 小鲸娘
|
||
setInterval(function () { Pet.say('该喝水啦~'); }, 3600000);
|
||
```
|
||
|
||
**2) Hermes 工具结果通知**
|
||
```javascript
|
||
// 小鲸娘:被戳时报告一次状态
|
||
Pet.on('tap', function () {
|
||
Pet.status().then(function (s) {
|
||
Pet.say('现在是:' + (s.anim ? s.anim.name : '待机'));
|
||
});
|
||
});
|
||
```
|
||
|
||
**3) Hermes web 搜索插件(只能部分转换)**
|
||
注册 provider 那部分转不了;能保留的是「用完给个反馈」:
|
||
```javascript
|
||
// 收到外部通知后弹个表情(由 Hermes 侧 POST /api/task 触发)
|
||
Pet.meme({ tag: 'praise' });
|
||
```
|