跳到主要内容

KnotLink 协议与联动

KnotLink 是 FolderRewind 与游戏模组、脚本和控制面板之间的通信通道。FolderRewind 1.8 采用全新的远程指令模式,并要求 KnotLink Server v3

两个版本号不要混淆

名称含义
KnotLink Server v3提供 TCP/OpenSocket、查询和信号传输的外部服务端版本
FolderRewind 参数化协议 v2FolderRewind 在 KnotLink 负载中使用的严格 key=value 指令格式

Server v3 是传输服务版本,参数化协议 v2 是 FolderRewind 的消息格式。升级其中一个并不代表另一个也已兼容;1.8 联动环境应同时满足两项要求。

:::warning v1 指令已移除 FolderRewind 1.8 不再解析空格分隔的旧指令。调用方必须发送包含 cmd= 的严格键值对负载。 :::

协议格式

请求、响应和事件都使用分号分隔字段:

cmd=BACKUP;config_id=demo;folder=0;comment=Before%20upgrade;from=panel;request_id=req-001

规则如下:

  • 键只允许 ASCII 字母、数字和下划线,内部按小写处理。
  • 每段必须恰好包含一个 =;空段、重复键和无效转义会拒绝整个请求。
  • 值采用 RFC 3986 percent-encoding。空格写为 %20,分号写为 %3B,等号写为 %3D% 写为 %25
  • 列表使用逗号分隔;列表中的每一项单独编码。
  • BACKUPRESTOREBACKUP_ALLAUTO_BACKUPSTOP_AUTO_BACKUPMARK_IMPORTANT 必须带 from 与唯一的 request_id

典型响应:

status=ok;from=panel;request_id=req-001;message=Backup%20task%20queued

错误响应使用 status=error,并在 message 中提供原因。

先发现能力,再发送命令

客户端应先发送:

cmd=GET_CAPABILITIES

响应中的 func_list 是 percent-encoded JSON,包含当前 Host 内置命令、插件贡献的命令和信号。仓库中的 funcList.json 是内置命令事实基线;运行时清单可能因已启用插件而扩展。

完整字段见 KnotLink 命令参考

生命周期信号

带会话元数据的长操作会用同一个 request_id 广播生命周期:

command_accepted → command_started → command_progress → command_completed
↘ command_failed / command_error

备份、还原和自动备份还会广播各自的业务信号。调用方应以 request_id 关联响应和事件,不要只根据到达顺序判断一次操作。

插件接入

插件通过以下 1.8 接口参与协议:

  • IFolderRewindParameterizedKnotLinkCommandHandler:读取 KnotLinkCommandRequest 并处理参数化命令。
  • IFolderRewindKnotLinkCapabilityProvider:把命令和信号定义加入运行时 func_list
  • PluginHostContext:查询 KnotLink 状态、广播事件、发送命令或执行请求/响应查询。

开发细节见 KnotLink Command API

安全建议

  • 只在受信任网络和受控端口上运行 KnotLink Server。
  • 为每个改变状态的请求生成新的 request_id,并在调用方做幂等去重。
  • 在实际目录上执行远程还原前,先用测试配置演练完整事件链。
  • 不要把 percent-decoding 后的内容直接拼接到 Shell 命令。

相关链接