Metadata-Version: 2.4
Name: ennew-harness-sdk
Version: 0.1.2
Summary: Ennew Harness 业务上下文与前端消息 Python SDK
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# Ennew Harness Python SDK

适用于 Python 3.9 及以上版本，安装包名为 `ennew-harness-sdk`，导入名称为 `ennew_harness`。

从 `0.1.1` 起，导入名称由 `harness` 改为 `ennew_harness`，避免与 Worker 自身的同名包冲突。升级后请同步修改业务脚本中的导入语句；不保留旧名称别名。

```bash
python3 -m pip install --upgrade ennew-harness-sdk
```

本 SDK 依赖 Ennew Harness 运行环境，并非独立运行的公共网关客户端。运行时必须提供 `CODEX_THREAD_ID`；读取上下文还需设置 `ENV`，并能访问对应业务网关。发送前端消息需要本机 Worker 服务。

读取上下文时，Worker 还需通过环境变量 `HARNESS_GATEWAY_CONTEXT_TOKEN` 注入对应环境的服务凭据。SDK 将其放入 `X-OpenClaw-Mcp-Gateway-Token` 请求头；未配置或为空时，在发送请求前报错。不要将真实凭据写入源码、镜像或发布包。

安装到运行业务脚本的 Python 环境后，可直接使用：

```python
from ennew_harness import context, gui

current = context.get_current_context()
gui.send("file_changed", {"file": "report.md"})
```

两个方法都从运行时的 `CODEX_THREAD_ID` 获取当前线程身份。`gui.send` 要求传入非空的 `type` 和字典 `payload`，把 `type` 同时写入 `params.type` 与 `params.message` 中的业务 JSON，经 Worker 本机 `127.0.0.1:18080/internal/events` 发到当前线程的前端连接。只有线程正在执行且前端连接仍在时才能发送；接口返回成功表示消息已写入 WebSocket，不保证前端已处理。

`context.get_current_context()` 根据运行环境变量 `ENV` 选择 `FAT`、`UAT` 或 `PROD` 的网关配置，只返回允许业务脚本读取的身份与业务字段。三套网关 URL 定义在 `ennew_harness/context.py`，请求不内置 Token。环境名称区分大小写；安装 SDK 不会自动授予业务网关访问权限。

源码仓库中可运行上下文示例脚本：`python3 fat_context.py`。该脚本不随安装包提供。
