Metadata-Version: 2.4
Name: python-library-patch-bay
Version: 0.1.6
Requires-Python: >=3.10
Requires-Dist: aiohttp<4,>=3.9
Requires-Dist: msgpack<2,>=1
Requires-Dist: pydantic<3,>=2
Requires-Dist: python-library-express-evaluator==0.1.0
Provides-Extra: rich
Requires-Dist: rich<14,>=13; extra == 'rich'
Description-Content-Type: text/markdown

# patch_bay

## 特性

* 中央节点按配置在进程间转发字节流；拓扑由配置给出。
* PatchBay：中央交换；**主动连接**配置中的各 Jack，再按 `wires` 转发（Jack 与 Jack 不直连）。
* Jack：业务侧接入点，在本机 **被动监听** WebSocket；只与 PatchBay 这条总线收发，不与其他 Jack 建立关系。
* 每条边可绑定表达式；按当前数据包求值决定是否允许经过。
* 支持任意数据结构；传输为字节，编码与解析由业务自行决定。

## 配置

### `jacks`

数组；元素字段：

| 字段 | 说明 |
|---|---|
| `name` | 名称（`wires` 里用名字引用，便于配置复用） |
| `address` | 该机 **Jack 的监听地址** `host:port`（PatchBay 向此地址发起 WebSocket），须在列表内唯一 |

业务侧 ``Jack(port[, host=…])`` 在本机 ``host:port`` 上挂默认路径 ``/ws``；配置里该机的 `address` 须与可达监听地址一致（``await start()`` 后可用 ``listen_address``）。**不必**在代码里写 `name`。

### `wires`

数组；元素常用键名 `from`、`to`。字段：

| 字段 | 说明 |
|---|---|
| `from` | 源端 Jack 的 `name` |
| `to` | 目标 Jack 的 `name` |
| `rule` | 在 `rules` 中已定义的规则 id |

### `rules`

| 项 | 说明 |
|---|---|
| 键 | 规则 id，供 `wires` 中 `rule` 引用 |
| 值 | 表达式字符串；求值时带入当前数据包相关变量（如原始字节、可解析出的 JSON 等） |
| 转发条件 | 仅表达式成立时沿该边发出；不成立或求值失败则不发出 |

### `listen`

| 默认 | 说明 |
|---|---|
| `8765` | 配置项保留；当前 PatchBay **不再**在本字段上接受 Jack 入站，可忽略。 |
