Sensa使用帮助

适配器目录与拆包路线

简体中文 | English

本页供开发者复用 Sensa 组件和规划社区包。Node CLI、Electron 与 WebSensa 共用 TypeScript 应用、输出协调器和 React 工作台;Unity 作者与构建包继续使用 C#。下面八个 TypeScript 包名及一个 Python 工具名均为候选,尚未发布或保留 scope。宿主架构

当前实现与源码入口

入口 职责
src/core/index.ts 公开源码入口:RuntimeEngine、ApplicationFacade、OutputCoordinator、配置、信号、定位、脚本与录制
src/core/outputs/index.ts 纯共享输出协调、编码、特征路由、生命周期与录制/回放
src/node/index.ts startSensa 本地服务、实例与启动选项
src/node/inputs/index.ts 协议监听、OSC/OSCQuery、发现、来源与外部控制会话
src/node/outputs/index.ts Node 输出工厂、原生端口与设备 API
src/websensa/browser-runtime.ts 浏览器本地宿主,注入存储与浏览器适配器,挂载同一 Workbench

Node 输出工厂注册 20 种输出类型,具体可用项由宿主能力清单给出:

类型组 配置类型
TCode(4) TCodeSerial、TCodeUdp、TCodeTcp、TCodeWebSocket
设备/厂商(6) Intiface、Dglab、Handy、Autoblow、VacuGlide、Lovense
信号/文件(6) OscParameter、HttpJson、WebSocketJson、Mqtt、Midi、Recording
桥接与互联(4) Bluetooth、BleBridge、SensaHttp、SensaWebSocket

本地输入注册 12 种类型:Buttplug、TCodeTcp、TCodeUdp、TCodeSerial、TCodeWebSocket、IntifaceDevice、JsonHttp、JsonWebSocket、LovenseHttp、HandyHttp、AutoblowHttp、VacuGlideHttp。OSC/OSCQuery 由独立服务接收;HTTP/WebSocket 输入共用端口并按最长完整路径分派。浏览器使用同一核心及其可用传输子集。协议输入

直接复用的库与平台能力

库/API 仓库内职责 平台与许可
React/React DOM 共用工作台组件与渲染 浏览器/Electron;MIT
esbuild 浏览器、Node 与 Electron 构建 构建工具;MIT
Three.js 参数图解三维场景,同时保留 SVG 浏览器 WebGL;MIT
qrcode-generator 配对二维码 JavaScript;MIT
Mermaid tiny 随站点分发的文档流程图 浏览器;MIT
ws 实际 Node 客户端、监听与协议测试对端 Node;MIT
bonjour-service OSCQuery mDNS 公告、发现与清理 Node;MIT
proper-lockfile 配置文件的进程归属与恢复 Node;MIT
serialport 13.0.0 N-API 串口绑定 Node 24;MIT
@julusian/midi 3.8.1 N-API MIDI 端口访问 Node 24;MIT
Web Serial/Bluetooth/MIDI 浏览器设备发现、选择和 I/O 浏览器与系统提供
Bleak/Bless/PyWinRT/pyserial Python 桥的 BLE central/peripheral 与串口 按 OS/角色选择;保留各依赖许可

原生串口/MIDI 通过 src/node/native-packages.ts 加载。SEA 包内含对应依赖,校验后提取至私有目录;Electron 使用同一 Node 服务,不在渲染进程另载一套绑定。Python 桥工具随便携包、CLI 安装器及 Electron 附带,解释器和所需依赖由使用者准备。开发与打包

可继续评估的复用候选

以下元数据核对于 2026-10-30,不是新增运行依赖:

候选 已核实范围 适合评估的用途
buttplug 5.0.2 官方 BSD-3-Clause wire-v3 参考实现 v3 客户端与共享协议夹具
@zendrex/buttplug.js 0.5.0 MIT、类型化 wire-v4、zod: ^4.4.3、WS/WASM 路径 v4/WASM 适配器与可选设备运行时
webbluetooth 7.1.0 MIT、Node Web Bluetooth 形状的接口 Node central 访问

合适的库可替换小型协议实现,外围继续保留连接归属、声明量程、取消与停止屏障。按实际 API、发布包和协议夹具比较选型。

八个 TypeScript 拆包候选

共享应用核心:@sensa/core

源码为 src/core/runtime、src/core/outputs 与 src/core/protocols,由 src/core/index.ts 导出。RuntimeEngine 统一模式、输入启用、映射、计算、定位、脚本与动作;ApplicationFacade 统一命令与快照;纯 OutputCoordinator 统一连接和绑定求值。宿主注入时间、存储、交付与设备工厂。

证据:tests/runtime/domain-configuration.test.ts、domain-runtime.test.ts、domain-parity.test.ts、tracking.test.ts,以及 tests/node/output-coordinator.test.ts 与浏览器本地宿主测试。拆包时保留完整应用行为,避免另建简化引擎。

Funscript:@sensa/funscript

src/core/funscript.ts 提供解析与采样,src/core/runtime/script.ts 管理时钟、速度、循环、定位和自然结束;src/core/outputs/recording.ts 处理轨道片段与回放。可独立复用解析/时钟,不引入设备或窗口。

证据:共享 tests/fixtures/funscript-interop.json、tests/web/websensa-interop-vectors.test.mjs 与领域脚本契约。自然结束保留末值和输入激活,显式停止保持独立语义。

Buttplug:@sensa/buttplug-client

Node 客户端位于 src/node/outputs/intiface.ts,实现 wire v4、请求关联、Ping、设备/特征元数据、声明量程及设备归属池。浏览器 src/websensa/transports.ts 的 IntifacePeer 使用 wire v3;虚拟设备输入的纯 v2/v3/v4 会话位于 src/core/protocols/buttplug-input.ts。

Node WebSocket 传输负责完整消息、UTF-8、1 MiB 上限与失败清理;协议解析和设备映射保留各自职责。证据:tests/node/output-intiface.test.ts、input-codecs.test.ts、input-transports.test.ts、tests/web/websensa-transports.test.mjs 与 Intiface E2E。独立包优先统一可注入 socket 接口与共享夹具。

TCode:@sensa/tcode

纯输入解析/分帧位于 src/core/protocols/tcode-input.ts,输出编码位于 src/core/outputs/codecs.ts。Node 适配器负责串口、UDP、TCP、WebSocket 与 WSDM;浏览器适配器负责 Web Serial/WebSocket。编码保留轴、量程、到达时长与已知位置速度语义。

证据:tests/node/input-codecs.test.ts、input-transports.test.ts、input-websocket-epoch.test.ts、output-codecs.test.ts、output-io.test.ts 与协议复用 E2E。拆包时把文本/字节协议与端口创建分开。

BLE 编解码:@sensa/ble-codecs

纯实现为 src/core/protocols/ble.ts,浏览器驱动为 src/websensa/device-codecs.ts,Python 参考实现为 tools/protocol-bridge/bridge.py。

配置 命令模型 依据
LOOB 四字节位置/时长 公开 FapTap 连接器
Thrust Sync 三字节位置/时长 公开 FapTap 连接器
Svakom V1 六字节单振动指令 Buttplug Emma/Phoenix Neo/Ella 配置
Lovense 单振动 Vibrate:0;–Vibrate:20; Buttplug Lovense 命令与 GATT 配置
Youou VX001 十七字节序号/异或帧,强度 0–247 Buttplug Youou/VX001 配置

Buttplug 依据固定于 179b0d9,桥工具文档提供各编码链接。tests/web/websensa-device-codecs.test.mjs 比较五种配置的 35 组 TypeScript/Python 向量;模拟 GATT E2E 检查浏览器交付,实机结果单独记录。

浏览器设备:@sensa/browser-devices

src/websensa/transports.ts、device-codecs.ts 与 browser-outputs.ts 在浏览器 API 上提供设备选择、单持有者、MIDI 映射归属、交付期限及迟到操作清理。createBrowserOutputFactory 将这些能力注入同一输出协调器。

证据:tests/web/websensa-transports.test.mjs、websensa-device-codecs.test.mjs、浏览器宿主单元与蓝牙 E2E。设备授权留在用户连接动作,公开接口可注入测试对端。

生命周期:@sensa/transport-lifecycle

src/core/outputs/lifecycle.ts 提供有界 OutputLane 与停止代次屏障;coordinator.ts 处理状态/事件交付和关闭。Node 的 Intiface/MIDI 池、浏览器连接池分别保留设备归属;HTTP 输入端口复用与跨标签页会话共享属于独立层次。

证据:tests/node/output-coordinator.test.ts、output-intiface.test.ts、output-io.test.ts、tests/web/shared-realtime.test.mjs 与复用 E2E。纯包不引入 DOM;SharedWorker/Web Locks/BroadcastChannel 由外层封装。

能力清单:@sensa/capabilities

浏览器入口为 src/websensa/capabilities.ts,Node 为 src/node/outputs/capabilities.ts。它们检查可调用 API、实际原生导出及桥依赖,查看清单不会打开设备;界面依据宿主能力呈现可选项。

证据:tests/web/websensa-capabilities.test.mjs、Node 输出/桥测试与跨浏览器 E2E。能力与 UI 文案、平台名称分开,真实连接行为另由适配器执行。

Python 工具与历史上游贡献

独立工具候选 sensa-protocol-bridge 尚未发布。Bleak 提供 central 输出,Bless 提供 Linux/macOS 外设输入,原生 PyWinRT 提供 Windows 外设输入,pyserial 提供串口。五种 BLE 配置共用 TCP/TCode 桥接;Lovense 当前提供输出指令,其他文档列明的输入配置提供已实现的 GATT 命令接口。tests/scripts/test_protocol_bridge*.py 与 tests/node/output-bridge.test.ts 检查编码、进程归属和清理。

历史 C# 连接器对上游的改进依据保留在 Sensa 941febb:连接器、分片复现和量程契约。固定 Buttplug C# ec8e6ff/NuGet 5.0.1 的 2048 字节接收块与百分比量程行为,已由大设备表、分片、跨 UTF-8 字符与声明最小值用例复现。提交上游前重新核对当前版本,避免重复报告。它们是历史复现依据,当前宿主使用上面的 TypeScript 实现。

独立发包顺序与要求

  1. 稳定 core/funscript 和纯 TCode/BLE API,保留跨宿主夹具。
  2. 分离协议编解码、设备归属与系统绑定,保留取消、迟到操作和停止回归。
  3. 检查固定上游版本的最小复现,合适的修复先贡献上游。
  4. 明确公开导出、单位、能力发现、错误与释放顺序,在干净消费工程验证 npm pack、声明、source map、Node 导入及浏览器构建。
  5. 确认包名/scope、语义化版本与许可归属,再发布;wire 协议版本单独管理。

Sensa 代码使用 MIT;打包上游内容保留其条款和声明,包括 TypeScript 的 Apache-2.0 与 Buttplug 的 BSD-3-Clause。发行包的 THIRD-PARTY-NOTICES.txt 保留实际依赖许可。每项验证分别注明模拟、真实协议对端、操作系统与实体设备范围。

开发与兼容策略 · 共享核心决策