false00/pi-elasticsearch

GitHub: false00/pi-elasticsearch

为 Pi 编程代理提供全面的 Elasticsearch 集群操作能力,通过 142 个工具覆盖搜索、日志、索引、集群管理、ML 等领域并附带通用 REST 兜底。

Stars: 0 | Forks: 0

# @false00/pi-elasticsearch [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2ffa2c80d9012042.svg)](https://github.com/false00/pi-elasticsearch/actions/workflows/ci.yml) [![license](https://img.shields.io/github/license/false00/pi-elasticsearch.svg)](LICENSE) 为 Pi 编程代理打造的面向生产的 Elasticsearch 自动化工具。 `@false00/pi-elasticsearch` 暴露了 **142 个 Pi 工具**,涵盖搜索、日志调查、文档 CRUD、批量操作、索引、集群管理、安全、采集、快照、生命周期、任务、SQL/ESQL、转换、推理、连接器、ML、watcher 以及通过官方 Elasticsearch JS 客户端和原始 REST 访问实现的通用 API 覆盖。 | 资源 | 链接 | |---|---| | npm | [`@false00/pi-elasticsearch`](https://www.npmjs.com/package/@false00/pi-elasticsearch) | | GitHub | [github.com/false00/pi-elasticsearch](https://github.com/false00/pi-elasticsearch) | | License | [MIT](LICENSE) | | Changelog | [CHANGELOG.md](CHANGELOG.md) | | 安全策略 | [SECURITY.md](SECURITY.md) | | 兼容性说明 | [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md) | | 身份验证指南 | [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md) | | 覆盖范围图 | [docs/COVERAGE_MAP.md](docs/COVERAGE_MAP.md) | | 示例 | [docs/EXAMPLES.md](docs/EXAMPLES.md) | | 故障排除 | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | | 贡献指南 | [CONTRIBUTING.md](CONTRIBUTING.md) | ## 为什么选择此 package 此 package 专为希望让 Pi 操作真实 Elasticsearch 集群,而无需每次都手动编写 REST 调用的用户而设计。 它的核心重点在于: - **广泛的日常覆盖** — 142 个工具,覆盖常见的 Elasticsearch 工作流 - **混合覆盖策略** — 为常见工作提供专用工具,并为长尾需求提供两个通用出口 - **对 Pi 友好的首次运行行为** — 扩展在全新安装时仍会加载,并自动创建 `~/.config/pi-elasticsearch/.env` - **结构化的错误处理** — 工具失败时会作为带有类别和指导的真实工具错误抛回给 Pi - **运维诚实的文档** — 覆盖范围声明与官方 OpenAPI 审计脚本挂钩 - **Dist 优先的 package 卫生** — 提交运行时代码、文档、测试、changelog、安全策略和 package 元数据 ## 工具覆盖范围 | 领域 | 工具数量 | |---|---:| | 核心 | 3 | | 文档 | 7 | | 搜索 + 批量 + 按任务查询 | 17 | | 日志调查 | 3 | | 索引 + 别名 + 模板 | 20 | | 数据流 | 5 | | CAT | 6 | | 集群 | 7 | | 节点 | 4 | | 采集 | 4 | | 安全 | 10 | | 快照 | 8 | | ILM + SLM | 8 | | 任务 | 3 | | 异步搜索 | 4 | | SQL + ESQL | 4 | | 转换 | 5 | | 推理 | 6 | | 连接器 | 5 | | ML | 6 | | Watcher | 4 | | 通用 REST 覆盖 | 1 | | 通用官方客户端覆盖 + 辅助工具 | 2 | | **总计** | **142** | ### 官方 API 覆盖审计 基于以下官方 Elasticsearch 规范 OpenAPI 文档进行审计: - `https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/openapi/elasticsearch-openapi.json` **2026-06-17** 审计的 API 表面暴露了: - **575 个路由** - **833 个路由/方法组合** - 观察到的方法:**GET, POST, PUT, DELETE, HEAD** 此 package 通过专用的 `elasticsearch_*` 工具覆盖常见工作流,并通过以下方式覆盖官方表面的其余部分: - `elasticsearch_client_call` — 对任何可调用的官方 `@elastic/elasticsearch` 客户端方法的通用访问 - `elasticsearch_api_call` — 针对任何 Elasticsearch API 路径的通用原始 REST 访问 有关详细信息,请参阅 [docs/API_COVERAGE_AUDIT.md](docs/API_COVERAGE_AUDIT.md)。 ## 设计理念 此 package 有意作为 Pi 的一个**薄但实用的 Elasticsearch 封装**。 这意味着: - 为常见的运维工作流提供专用工具 - 复杂的请求体通常接受 JSON 字符串,而不是试图在每个工具 schema 中对每个字段进行建模 - 官方 JS 客户端和原始 REST 辅助工具仍然可用,因此其实用性不完全依赖于数百个超窄的封装器 - 倾向于可预测的行为和可维护性,而不是通过自定义抽象层隐藏每一个 Elasticsearch 细节 ## 稳定性保证 当前保证: - 发布的工具名称一旦发布即被视为稳定 - 破坏性操作在工具命名和文档中均明确说明 - 扩展将继续延迟加载配置,因此全新安装不会在扩展加载时失败 - `elasticsearch_client_call` 和 `elasticsearch_api_call` 是实现长尾 API 覆盖的兼容层 ## 安装 作为 package 安装到 Pi 中: ``` pi install npm:@false00/pi-elasticsearch ``` 在不更改设置的情况下将其用于单次运行: ``` pi -e npm:@false00/pi-elasticsearch ``` 从此仓库进行本地开发: ``` pi -e . ``` ## 快速开始 创建或更新 `~/.config/pi-elasticsearch/.env`: ``` ELASTICSEARCH_URL=https://localhost:9200 ELASTICSEARCH_API_KEY= # 或 ELASTICSEARCH_USERNAME=elastic # 和 ELASTICSEARCH_PASSWORD=... ``` 然后用纯英语要求 Pi 操作 Elasticsearch: ``` Show cluster health Search logs-* for error events in the last hour Show the top services in logs-* for timeout errors today Build a 5 minute timeline of error logs for checkout-service in the last 24 hours Create an index template for app-* with one shard Count documents in users where active is true List running tasks ``` Pi 会在后台调用 `elasticsearch_health`、`elasticsearch_search_logs`、`elasticsearch_logs_top_values`、`elasticsearch_logs_timeline`、`elasticsearch_put_index_template`、`elasticsearch_count` 和 `elasticsearch_list_tasks` 等工具。 ## 顶级任务与示例提示词 用户通常要求 Pi 使用此 package 执行的操作: ``` Get cluster info Create an index named products Index a document into products with id 1 Search products for documents matching laptop Investigate logs-* for 500 errors in the last 30 minutes Show the top hosts for error logs in auth-service today Build a 15 minute timeline for payment-service error logs over the last 24 hours Update index settings for logs-* to set refresh_interval to 30s Create a snapshot repository Run an ingest pipeline simulation List nodes and their stats Create an API key Call the official client target indices.putIndexTemplate with these params Call /_cluster/health directly with the raw API tool ``` ## 选择专用工具还是通用工具 按以下顺序使用此 package: 1. 优先针对常见工作流使用**专用 `elasticsearch_*` 工具** 2. 当官方 JS 客户端支持某些尚无专用封装的操作时,使用 **`elasticsearch_client_call`** 3. 当需要直接的 REST 访问、原始字符串主体或面向路径的兜底方案时,使用 **`elasticsearch_api_call`** 这保持了日常使用的便利性,同时仍保留了广泛的官方访问能力。 ## 运维文档 如需设置帮助和示例,请参阅: - [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md) - [docs/COVERAGE_MAP.md](docs/COVERAGE_MAP.md) - [docs/EXAMPLES.md](docs/EXAMPLES.md) - [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) ## 信任、安全和操作模型 这是一个**完全访问集群的 package**。与任何 Pi 扩展一样,如果允许 Pi 调用其工具,它可以执行真实的更改。 重要期望: - 破坏性操作(如删除、重新路由、生命周期更新、安全写入和快照删除)作为显式工具公开 - 原始和官方客户端出口可以访问没有专用封装的 endpoint - 工具失败会作为**正确的工具错误**抛回给 Pi,而不是虚假的成功 payload - 仓库包含可选的实时集成测试,但 CI 安全验证侧重于冒烟、运行时、package 和官方审计检查 - 并非所有高级 Elasticsearch 功能都能保证在每个集群或许可证级别中启用;对于这些情况,应如实展示工具失败 如果你正在评估此 package 以用于生产环境,请查看: - [SECURITY.md](SECURITY.md) - [AGENTS.md](AGENTS.md) - [CHANGELOG.md](CHANGELOG.md) - [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md) - [tests/](tests/) 了解行为覆盖 - [docs/](docs/) 获取运维指导 ## 配置 ### 要求 - Node.js 22+ - 支持 extension 的 Pi 运行时 - 可访问的 Elasticsearch endpoint 或 Elastic Cloud 部署 ### 连接设置 创建 `~/.config/pi-elasticsearch/.env`: ``` # --- Connection --- ELASTICSEARCH_URL=https://localhost:9200 # ELASTICSEARCH_CLOUD_ID=deployment-name:BASE64... ELASTICSEARCH_VERIFY_TLS=true # --- Authentication --- ELASTICSEARCH_API_KEY= # ELASTICSEARCH_API_KEY_ID= # ELASTICSEARCH_API_KEY_SECRET= # ELASTICSEARCH_BEARER_TOKEN= # ELASTICSEARCH_USERNAME=elastic # ELASTICSEARCH_PASSWORD= # --- TLS --- # ELASTICSEARCH_CA_CERT_PATH=/path/to/http_ca.crt # ELASTICSEARCH_CA_FINGERPRINT=AA:BB:CC:DD:... # --- Timeouts --- ELASTICSEARCH_REQUEST_TIMEOUT_MS=30000 ELASTICSEARCH_TOOL_TIMEOUT_MS=30000 # --- 可选 transport behavior --- ELASTICSEARCH_SNIFF_ON_START=false ELASTICSEARCH_SNIFF_ON_CONNECTION_FAULT=false # ELASTICSEARCH_SNIFF_INTERVAL_MS=60000 ``` `~/.config/pi-elasticsearch/.env` 中的值优先于环境变量。 ### 配置优先级 1. `~/.config/pi-elasticsearch/.env` 2. 直接嵌入客户端时的构造函数选项 3. 环境变量 4. 内置默认值 ### 身份验证模式 支持的验证模式: - 通过 `ELASTICSEARCH_API_KEY` 提供 API key - 通过 `ELASTICSEARCH_API_KEY_ID` + `ELASTICSEARCH_API_KEY_SECRET` 提供 API key 对象 - 通过 `ELASTICSEARCH_BEARER_TOKEN` 提供 bearer token - 通过 `ELASTICSEARCH_USERNAME` + `ELASTICSEARCH_PASSWORD` 提供用户名/密码 有关更多详细信息,请参阅 [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md)。 ## 运行时行为 ### 输出模型 - 专用工具返回可供 Pi 使用的 **JSON 文本** - 长时间运行的工具可能会通过 `onUpdate(...)` 发出**进度更新** - 复杂的请求体通常作为 JSON 字符串接受,并在工具实现内部进行解析 ### 错误模型 工具失败会作为正确的工具错误抛回给 Pi。错误消息体是带有以下字段的 JSON: - `error` - `category` - `guidance` - `retryable` - `endpoint` - `method` - `target` - `httpStatus` 标准类别: - `configuration` - `validation` - `authentication` - `authorization` - `not_found` - `conflict` - `rate_limit` - `timeout` - `network` - `server_error` - `unknown` ## 工具目录 此 package 将工具分组到 `dist/tools/` 下的以下文件中: - `core.js` - `documents.js` - `search.js` - `logs.js` - `indices.js` - `data-streams.js` - `cat.js` - `cluster.js` - `nodes.js` - `ingest.js` - `security.js` - `snapshot.js` - `lifecycle.js` - `tasks.js` - `async-search.js` - `sql.js` - `transforms.js` - `inference.js` - `connectors.js` - `ml.js` - `watcher.js` - `raw.js` - `client-call.js` 有关专用表面的实用映射,请参阅 [docs/COVERAGE_MAP.md](docs/COVERAGE_MAP.md)。 ## 仓库布局 ``` dist/ Runtime extension code committed directly to the repo index.js Pi extension entrypoint elasticsearch-client.js Official client wrapper and transport helpers tool-runtime.js Shared tool execution helpers tools/ Domain tool definitions docs/ Coverage, auth, examples, compatibility, troubleshooting scripts/ Official API audit helper tests/ Smoke, runtime, package, and optional live suites .github/ CI workflow and repository automation README.md User-facing package documentation AGENTS.md Agent/maintainer guidance CONTRIBUTING.md Contributor workflow SECURITY.md Security and disclosure policy CHANGELOG.md Release history ``` ## 兼容性 此仓库基于以下设计: - Node.js `>=22` - `@elastic/elasticsearch` `9.x` - 通过 `pi.extensions` 加载 Pi package 有关说明和注意事项,请参阅 [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md)。 ## 开发 ``` npm install npm test npm run test:smoke npm run test:runtime npm run test:package npm run audit:official-api npm pack --dry-run ``` 可选的实时测试套件需要: ``` ELASTICSEARCH_LIVE_TESTS=1 npm run test:auth ``` 以及 [CONTRIBUTING.md](CONTRIBUTING.md) 中列出的其他 `test:*` 实时命令。 ## 发布 ``` npm test npm pack --dry-run npm publish --ignore-scripts ``` 版本控制和发布规范说明位于 [AGENTS.md](AGENTS.md) 中。 ## 支持与反馈 报告问题时,请包含: - package 版本 - Pi 版本 - Node.js 版本 - Elasticsearch 版本 - 工具名称 - 身份验证模式 - 相关的错误消息 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:AI智能体插件, DevOps工具, Elasticsearch, MITM代理, 搜索与日志分析, 数据库自动化, 自定义脚本