Files
dsh-pet-floating/HERMES-PLUGIN-CONVERSION.md
mtfyun 7d2e8fed8e 小鲸娘 v1.0:悬浮宠物完整工程
- 106 动画 + 2366 表情包 + 语义标签
- 三层记忆 / 心情系统 / 9 可配置插件 / 10 技能
- DeepSeek 对话直连 + MCP/HTTP 接入 + 接入文档
- 动画随机链 + 物理引擎 + 贴边碰撞校准
- 大资源(动画webp/表情图)由 scripts/ 再生成,不入库
2026-11-08 08:07:09 +00:00

85 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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' });
```