antoinevalentinHA/ha-archive-search

GitHub: antoinevalentinHA/ha-archive-search

这是一个基础设施侧搜索引擎,用于搜索和审计离线提取的 Home Assistant 配置快照。

Stars: 1 | Forks: 0

# ha-archive-search 搜索 [![GHCR](https://img.shields.io/badge/GHCR-container-blue)](https://github.com/antoinevalentinHA/ha-archive-search/pkgs/container/ha-archive-search) [![测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6a3bc08752110731.svg)](https://github.com/antoinevalentinHA/ha-archive-search/actions/workflows/tests.yml) [![发布到 GHCR](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/2ba7c0285e110732.svg)](https://github.com/antoinevalentinHA/ha-archive-search/actions/workflows/publish-ghcr.yml) 用于 Home Assistant 配置快照的基础设施侧搜索、导出和审计工具。 `ha-archive-search` 是一个搜索、检查和导出工具包,操作对象是提取后存储在 Home Assistant 本身之外的 Home Assistant 配置语料库。 该项目提供: - 一个语料库搜索引擎; - 一个 CLI 搜索界面; - 一个轻量级 Web 应用程序; - Markdown 导出功能(紧凑模式和上下文模式); - Docker 部署支持。 该系统操作的是在外部基础设施(如 NAS 系统)上生成并保留的、不可变的提取快照。它不直接访问 Home Assistant 运行时。 ## 快速入门 从 GitHub Container Registry 拉取官方容器镜像: ``` docker pull ghcr.io/antoinevalentinha/ha-archive-search:latest ``` 使用 Docker 运行: ``` docker run -p 8099:8099 \ ghcr.io/antoinevalentinha/ha-archive-search:latest ``` Docker Compose 示例: ``` services: ha-archive-search: image: ghcr.io/antoinevalentinha/ha-archive-search:latest ports: - "8099:8099" ``` ## 截图 ### 结构化搜索 UI 按版本、文件和匹配项进行分组渲染。 ![结构化搜索 UI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/99f1c23572110732.png) ### 紧凑型 Markdown 导出 确定性 Markdown 导出,适用于审计、共享和 AI 辅助审查。 ![紧凑型 Markdown 导出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/952c2a9d69110733.png) ### 上下文 Markdown 导出 扩展导出,包含匹配项周围的配置上下文,针对 AI 辅助工作流和深度检查进行了优化。 ![上下文 Markdown 导出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/343ffe42f4110734.png) ### JSONL 导出示例 ``` {"type":"header","format":"ha-archive-search-machine","version":"v1","emitted_at":"2026-05-20T14:45:40Z","query":{"text":"ha_shutdown_ups","text_raw":"ha_shutdown_ups","mode":"compact","grammar_version":null,"filters":{"version_range":null,"last_n":null,"date_prefix":null}}} {"type":"match","version":"2026-05-20_12-12_Arsenal_v15.5_7ea5ab74","version_index":0,"file":"00_documentation_arsenal/changelog/changelogs/v12/v12_3.md","line_number":50,"content":"Le nouvel automatisme `ha_shutdown_ups` ferme la boucle qui manquait : quand","match_span":null} {"type":"footer","match_count":1,"version_count":1,"file_count":1,"truncated":false,"elapsed_ms":1270} ``` ## 理念 Home Assistant 擅长实时自动化和运营仪表板。 `ha-archive-search` 解决的是不同的问题领域: - 基础设施侧检查; - 离线配置分析; - 跨提取快照的大规模文本搜索; - 以审计为导向的工作流; - AI 辅助的配置审查; - 便携式 Markdown 导出。 该搜索系统有意设计在 Home Assistant 基础设施之外运行。历史探索仍然可行,但不再是主要定位。 ## 操作模型 `ha-archive-search` 位于从 Home Assistant 内部开始的流水线末端: ``` Home Assistant ↓ encrypted backups ha-state-archive ↓ immutable extracted snapshots ha-archive-search ``` `ha-archive-search` 不直接访问 Home Assistant 运行时。它仅操作提取的快照语料库。这个边界是有意且不可协商的。 ## 典型用例 - 在快照版本间定位实体引用; - 检查仪表板和自动化使用模式; - 为审计或事件审查导出配置上下文; - 对照先前快照调查升级后的回归问题; - 为 AI 辅助的配置审查工作流提供输入; - 离线分析不可变的提取 HA 语料库。 ## 治理与路线图 项目的长期方向记录在 [`docs/roadmap.md`](docs/roadmap.md)。 该路线图不是待办列表。它定义了: - 项目的定位; - 架构层次; - 明确的非目标; - 已接受的发布顺序; - 已知风险; - 包括配置考古在内的未来方向。 功能提议和架构更改在实施前应参照本文档进行评估。 ## 紧凑协议 紧凑引擎的输出是正式版本化和经过验证的。 当前协议标记: ``` # ha-archive-search compact v1 ``` 紧凑协议定义了: - 流语法; - 兼容性保证; - 解析器职责; - 偏移策略; - 破坏性变更预期。 该协议保持: - 人类可读; - 可用 grep 搜索; - Shell 友好; - 依赖轻量; - 面向基础设施。 通过尽力解析器行为,仍然有意地支持遗留兼容性。 ## 集成契约 `ha-archive-search` 操作由 [`ha-state-archive`](https://github.com/antoinevalentinHA/ha-state-archive) 生成的存档。 集成契约是存档语料库的布局,而非 Python API。 引擎期望: - 一个 `versions/` 目录,包含提取的 Home Assistant 快照; - 每个快照一个目录; - 快照目录命名为 `YYYY-MM-DD_HH-MM_<后缀>`。 支持的文件类型: ``` .yaml .yml .json .txt .j2 .jinja .jinja2 .md .py .js .ts .css .html ``` 不存在对 `ha-state-archive` Python 代码的直接依赖。 ## 架构 ``` Archive corpus │ ▼ Engine (compact protocol v1) │ ▼ Parser (ParsedResults) │ ├── HTML renderer ├── Compact Markdown renderer ├── Context Markdown renderer └── Machine-oriented JSONL export ``` 架构是故意分层的。 - 引擎拥有搜索语义。 - 解析器拥有紧凑协议契约。 - 渲染器仅执行结构化呈现。 - 没有渲染器执行语义推断。 ## Markdown 导出 `POST /export` 生成一个从引擎输出派生的结构化 Markdown 文档。 ### 紧凑导出 默认导出模式。布局: - `## 查询` — 搜索参数和导出时间戳。 - `## 摘要` — 结果计数、版本计数、耗时(引擎页脚)。始终存在:如果引擎页脚无法解析,该块将发出一个 `摘要解析:失败` 的诊断行。 - `## 结果` — 按版本分节、按文件分子节(包含匹配次数)、按匹配项列表。 ### 上下文导出 扩展导出模式。为每个匹配项生成周围的配置上下文,针对 AI 辅助审查和深度检查工作流进行了优化。 上下文模式在 `## 结果` 下回退为一个原始代码块。`## 摘要` 块遵循相同的诊断规则。 ### JSONL 导出 面向机器的导出可通过 `/export` 路由使用 `format=jsonl` 获得。 示例: ``` curl -X POST http://localhost:8099/export \ -d "query=ha_shutdown_ups" \ -d "format=jsonl" ``` 导出格式是行导向的 JSONL (`application/x-ndjson`),并受 `docs/contrat_machine_export.md` 管辖。 当前 v0.5.0 实现范围: - 紧凑的单术语导出; - 从 `ParsedResults` 到确定性渲染器; - RFC3339 UTC 时间戳; - 黄金快照覆盖。 布尔语法、过滤器和 `/stats` 仍待契约化,用于未来实现。 文件命名:`ha_archive_search__.md`。 Markdown 导出作为 `text/markdown; charset=utf-8` 进行流式传输。 JSONL 导出作为 `application/x-ndjson` 进行流式传输。 主机上不写入任何文件。 空结果:在 `## 结果` 下显示单行 `_无结果._`。`## 摘要` 仍会被发出,如果引擎生成了零结果页脚,则正常显示,否则使用诊断行。 ## 验证 该项目包含: - 解析器兼容性测试; - 引擎契约测试; - 渲染器黄金测试; - 学说偏移验证; - 多版本 CI 验证。 紧凑协议契约有意地在以下方面进行验证: - 引擎发出; - 解析器消费; - HTML 渲染; - Markdown 渲染。 ## 功能 ### 当前功能 - 递归文件系统搜索; - 版本感知的存档遍历; - 紧凑协议 v1; - 基于文本的过滤,带文档范围控制; - 紧凑型 Markdown 导出; - 上下文型 Markdown 导出; - 面向机器的 JSONL 导出; - Docker 部署; - 学说验证; - 渲染器黄金验证。 ### 计划功能 计划的演进受 [`docs/roadmap.md`](docs/roadmap.md) 管辖。 当前路线图方向包括: - 有界布尔搜索; - 版本过滤器; - `/stats` 可选观测性; - 版本范围过滤; - 可配置的审计工作流; - 配置考古。 路线图还记录了被拒绝的方向,如项目内的持久化索引、MQTT 集成以及平台式 API 扩展。 ## 部署 Web 应用程序作为 Docker 容器运行在存档语料库所在的相同基础设施上(通常是 NAS 系统)。它可通过局域网和 VPN 访问。不支持或不打算进行公开暴露。 ## 官方容器镜像 官方镜像通过 GitHub Container Registry (GHCR) 发布: ``` ghcr.io/antoinevalentinha/ha-archive-search ``` GHCR 镜像是生产使用的官方部署方法。 本地 Docker 构建主要面向开发、调试和贡献工作流。 可用的标签包括: - `latest` - 版本化发布(`v0.6.2` 等) ## Synology DSM 部署 提供了一个专用的 Synology compose 示例: ``` docker/docker-compose.synology.yml ``` ### 为何存在 Synology 特定的 compose 文件 许多 Synology DSM 共享文件夹使用限制性的 ACL,这阻止了非 root 的容器用户遍历挂载路径。 典型错误: ``` [ha-archive-search] perimeter error: [Errno 13] Permission denied: '/versions' ``` Synology compose 示例明确以 root 用户运行容器: ``` user: "0:0" ``` 这避免了在 DSM 挂载的共享文件夹上发生遍历失败。 高级用户可以将其替换为自定义的 UID:GID 映射。 ## 仓库结构 ``` src/ source code docker/ Dockerfile and Docker Compose configuration docs/ domain vision, roadmap, and implementation contracts tests/ protocol, parser, renderer, and doctrine validation ``` 文档契约和治理文档位于 `docs/`。 ## 许可证 GPL-3.0-only
标签:Docker, Home Assistant, Markdown 导出, NAS 存储, Web 应用, 基础设施工具, 安全防御评估, 审计工具, 家庭自动化, 导出工具, 归档搜索, 快照工具, 搜索工具, 搜索引擎, 文档结构分析, 杀软绕过, 语料库搜索, 请求拦截, 轻量级应用, 逆向工具, 配置快照