Operit ToolPkg 环境信息注入插件。基于官方 examples/message_insert 的 Prompt Hook、显性附件、输入菜单开关与 Compose DSL 设置页实现。
- 时间:只注入本地时间(HH:mm:ss)和时区。
- 日期:只注入本地日期(YYYY-MM-DD)和星期。
- 旧配置缺少日期开关时继承原时间开关;之后分别保存,互不联动。
- 日历仍由日历开关独立控制,关闭日期不会隐藏日历中的星期或节假日信息。
- 用户/角色生日、双方经期起始日期、怀孕时间可清空后保存;对应内容不再注入,共享开关保持原值。若清空孕期但仍有有效经期日期,经期按原开关恢复输出。
- 已保存的纪念日可修改日期;清空日期后点击“保存纪念日日期”将移除该条目。上方“添加纪念日”输入框仅用于新增,清空它不会删除已有记录。
- 保存和字段校验提示在各自保存按钮上方显示;纪念日移除后反馈回到同卡片“添加纪念日”按钮前。
- 注入内容分为
【现实环境信息】、【生日和纪念日】、【角色生理状态】三块;无有效内容的分块不会输出。 - 现实环境包括时间、日期、日历、天气、地点、电量和设备信息。
- 可选择注入内容是否随消息保存。
- 总超时默认 10 秒,可配置为 3–60 秒。
- 天气和位置/地址结果分别缓存;天气刷新间隔默认 30 分钟(可配置 5–180),定位刷新间隔默认 10 分钟(可配置 5–60)。
- 自动定位每次先读取当前坐标,再按坐标复用地址与天气缓存;移动到不同坐标区域后自动切换缓存,避免继续注入旧地点。
- 普通预览与聊天注入在有效期内复用同位置缓存;手动测试会绕过缓存并强制刷新。
- 地点支持设备自动定位或手动地址。
- 自动定位支持 Nominatim、BigDataCloud、Photon,以及按该顺序容错的 Auto 模式。
- Nominatim:OpenStreetMap 反向地址服务,支持简体中文,无代理可能失败。
- BigDataCloud:免密钥反向地址服务,支持繁体中文。
- Photon:基于 OpenStreetMap 的反向地址服务,不支持中文。
- 天气支持 Auto、Open-Meteo、MET Norway、wttr.in;Auto 按 Open-Meteo → MET Norway → wttr.in 顺序容错,单独选择后两者时仍保留失败回退 Open-Meteo 的兼容行为。
- 设置页提供实时规则摘要、注入内容预览和手动测试。
- 支持自定义设备名称;非空时覆盖系统读取的设备名称。
- 支持绑定一张或多张角色卡;未选择时不限制,选择后只在对应角色卡对话中注入。
- 支持普通文本形式的用户名称和角色名称,不使用 Operit 不支持的自定义宏占位符。实际 Hook 优先使用当前活动角色卡名称,无法取得时回退手动角色名称;单卡绑定时会自动带入角色名。
- 日历:中国地区使用包内固定版本
chinese-days,支持法定节假日、农历和调休;其他地区按两字母代码使用 Nager.Date 公共 API。 - 生日与纪念日:支持用户生日、角色生日和自定义纪念日,持续显示下一次日期、剩余天数及年龄/周年。
- 经期:用户和角色可分别设置任意一次已知经期起始日期、周期和持续时间,推算最近一次经期、当前状态、下次预计月经来潮和结束日期。
- 孕期:按对象和怀孕时间计算孕周、孕期阶段、状态和预产期;孕期对象不重复显示经期。
- 现实环境内部顺序:当前时间 → 当前日期 → 日历 → 当前天气 → 当前位置 → 当前电量 → 设备信息。
- 当前位置仅显示地址、精度、定位源、地址源和容错信息;当前位置和天气块均不注入坐标,当前位置也不注入定位时间。
- 单项失败输出可审计错误行,不阻塞消息发送。
以下名称、地点和日期均为占位示例。Operit 版本直接写入普通名称,不依赖用户或角色宏:
【现实环境信息】
【当前时间】
<HH:mm:ss>
时区: <时区>
【当前日期】
<YYYY-MM-DD>
星期: <星期>
日历: 星期<星期>|<工作日/周末/节假日/调休工作日>
农历: <农历日期>
下个节假日: <节假日名称> <YYYY-MM-DD>(还有<N>天)
日历来源: <chinese-days/Nager.Date>
【当前天气】
地点: <城市/地区/国家>
天气: <天气状况>
温度: <温度>
【生日和纪念日】
- <用户名称>的生日,日期<日期>,下次<日期>(还有<N>天)
- <纪念日名称>,日期<日期>,下次<日期>(还有<N>天)
【角色生理状态】
- <用户名称>: <状态>;最近一次经期 <开始> 至 <结束>;下次预计月经来潮 <日期>;下次预计月经结束 <日期>
- <角色名称>: 孕<N>周,第<N>孕期;<状态>;预产期 <日期>
tsc编译输出位于 dist/,入口由 manifest.json 指向 dist/main.js。
发布包根目录只包含:
manifest.json
dist/main.js
dist/shared.js
dist/calendar.js
dist/wellbeing.js
dist/ui/index.ui.js
vendor/chinese-days.min.js
vendor/chinese-days.LICENSE
开发目录会同步到:
/sdcard/Download/Operit/ToolPkgDev/environment-context-injector
可使用 Operit 的 debug_install_toolpkg 安装该目录。UI 代码更新后建议重启 Operit,再验证工具箱设置页。
下载 GitHub Releases 中的 .toolpkg 文件,然后在 Operit 的软件包管理页面导入并启用。安装或更新 UI 后建议重启 Operit,再进入工具箱中的“环境信息注入”完成配置。
为避免同一条消息出现两份环境附件,请不要同时开启本插件与官方“额外信息注入”插件中相同的注入项目。
v1.0.0 已完成以下验证:
- TypeScript 编译和三个编译产物的语法检查通过。
- 模拟宿主测试通过:五类内容、手动/自动地点、天气、附件和重复注入保护。
- 注册与 Compose 首次渲染测试通过:UI、Prompt Input、Prompt Finalize、输入菜单各注册一次。
.toolpkg归档完整性、Operit 调试安装、启用和重启加载通过。- 设置页、条件显隐、预览、手动测试、输入菜单联动和消息注入均已真机验证。
- 真机自动定位成功复用同一坐标快照生成地点与天气;Nominatim 返回有效中文地址,Open-Meteo 返回天气、温度、体感温度、湿度和风速。
- 真机成功读取电量、充电状态、设备名称、设备型号及 Android 平台版本,并生成单一
Environment:显性附件。
v1.1.0 自动测试进一步覆盖:自定义设备名称优先级、角色卡 ID 去重、多选匹配、非匹配拦截、Prompt Hook 活动角色卡识别,以及设置页 onLoad 读取角色卡列表。
v1.2.0 自动测试进一步覆盖:天气与位置缓存命中、手动强制刷新、网络请求计数、刷新间隔默认值与保存,以及“刷新间隔”设置节位于“预览与测试”之前。
v1.3.0 自动测试进一步覆盖:天气 Auto 选项渲染、Open-Meteo → MET Norway → wttr.in 调用顺序、前序供应商失败后的逐级容错,以及 Auto 结果缓存命中。
v2.0.0 自动测试进一步覆盖:设置迁移和校验、中国 chinese-days 与国际 Nager.Date、生日和自定义纪念日、双对象经期、孕期覆盖、活动角色名称优先级、三类注入分块、无宏残留及新增 Compose UI 字段。
第三方组件:chinese-days 1.5.9,MIT License;许可证见 vendor/chinese-days.LICENSE。
测试设备为 Android 16;实际定位精度、地址语言和第三方天气服务可用性由设备权限、网络和供应商响应决定。更新 UI 后需重启 Operit 再做最终交互回归。
Linux.Do — 新的理想型社区