diff --git a/api-reference/monitors.openapi.en.json b/api-reference/monitors.openapi.en.json
index 28fa0403..99830a51 100644
--- a/api-reference/monitors.openapi.en.json
+++ b/api-reference/monitors.openapi.en.json
@@ -2691,326 +2691,6 @@
"deprecated": true
}
},
- "/monit/tools/catalog": {
- "post": {
- "operationId": "monit-read-tools-catalog",
- "summary": "List target tool catalog",
- "description": "Look up the tools that the per-target monit-agent currently exposes for a given `target_locator` (host). Returns each tool's name, description, and JSON-Schema `input_schema`. Pair with `/monit/tools/invoke` to drive AI-SRE tool calls. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- Use `target_locator` to identify the target; `target_kind` is optional and is inferred from current target routing when omitted.\n- If multiple kinds match the same locator, the response is HTTP 200 with `data.error.code = \"ambiguous_target_kind\"` and a `target_kinds` list — retry with an explicit `target_kind`.\n- The catalog is a candidate capability view, not an execution guarantee. The target Agent may go offline between catalog and invoke, or local Agent policy may block individual tools at invoke time.\n- Each tool entry exposes only `name`, `target_kind`, `description`, and `input_schema`. It does not expose tool versions, output contracts, catalog revisions, or execution limits.\n- Business errors (`target_unavailable`, `timeout`, `forward_failed`, `invalid_tool_result`, `ambiguous_target_kind`) return HTTP 200 with `data.error` present and `data.tools = []`. Only protocol, authentication, and internal errors use the standard error envelope.\n- The response uses **sparse fields**: on success `error` is omitted rather than sent as `null`, and `target` is omitted when the locator could not be uniquely resolved. `tools` is always present.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-tools-catalog",
- "metadata": {
- "sidebarTitle": "List target tool catalog"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ToolCatalogRequest"
- },
- "example": {
- "account_id": 10001,
- "target_locator": "web-01"
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "Success",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolCatalogResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "tools": [
- {
- "name": "os.overview",
- "target_kind": "host",
- "description": "Returns a bounded overview of host health: CPU usage and load, memory and swap utilisation, disk and network counters, and top processes.",
- "input_schema": {
- "type": "object",
- "additionalProperties": false,
- "properties": {}
- }
- },
- {
- "name": "net.tcp_ping",
- "target_kind": "host",
- "description": "Checks TCP reachability of a host:port from the target, reporting connect latency.",
- "input_schema": {
- "type": "object",
- "additionalProperties": false,
- "required": [
- "host",
- "port"
- ],
- "properties": {
- "host": {
- "type": "string"
- },
- "port": {
- "type": "integer"
- }
- }
- }
- }
- ]
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
- "/monit/tools/invoke": {
- "post": {
- "operationId": "monit-read-tools-invoke",
- "summary": "Invoke target tools",
- "description": "Invoke up to 8 monit-agent tools concurrently on a single target. Results come back in the order of the input `tools` array. Long-running — individual tools have per-tool timeouts on the agent and the whole request may take tens of seconds. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- Up to **8** tools per call (`MaxToolsPerInvoke`); larger batches must be split client-side. The 8-tool cap aligns with the per-target agent concurrency.\n- Tools execute in parallel on the agent; webapi returns `results[]` aligned with the request `tools[]` order.\n- Long-running: set client timeouts to **at least 35 s**. The endpoint is intended for AI-SRE / human-RCA flows, not interactive UI.\n- Request-level errors (`target_unavailable`, `ambiguous_target_kind`, `forward_failed`) appear as HTTP 200 with `data.error` set and `data.results = []`.\n- Per-tool failures appear as HTTP 200 with `data.error` absent and `results[i].error` populated — always check **all three** layers (outer envelope `error`, `data.error`, then each `results[i].error`).\n- The response uses **sparse fields**: absent means empty. On success `error` is omitted entirely rather than sent as `null`; on failure `data`, `summary` and `truncated` are omitted. Do not key logic off placeholder `null` fields, and do not expect `target` when the locator could not be uniquely resolved.\n- `results[i].data` is the tool payload with the monit-agent result envelope **already unwrapped** — there is no nested `data.data`. The one-line distillation is `results[i].summary`, and `results[i].truncated` (carrying a `reason`) appears only when the result was genuinely truncated.\n- `results[i].params` echoes the params webapi received for that tool, so batched calls stay correlatable even when an individual tool fails.\n- Construct `tools[].params` against the `input_schema` returned by `/monit/tools/catalog`. For no-arg tools always pass `params: {}` explicitly.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-tools-invoke",
- "metadata": {
- "sidebarTitle": "Invoke target tools"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ToolInvokeRequest"
- },
- "example": {
- "account_id": 10001,
- "target_locator": "web-01",
- "tools": [
- {
- "tool": "os.overview",
- "params": {}
- },
- {
- "tool": "net.tcp_ping",
- "params": {
- "host": "10.0.0.10",
- "port": 3306
- }
- }
- ]
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "Success",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolInvokeResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "results": [
- {
- "tool": "os.overview",
- "params": {},
- "tool_version": "0.6.0",
- "data": {
- "sample_interval_sec": 0.5,
- "cpu": {
- "cores": 4,
- "usage_pct": 32.66,
- "user_pct": 28.14,
- "system_pct": 3.52,
- "iowait_pct": 1.01,
- "idle_pct": 67.34
- },
- "load": {
- "load1": 1.79,
- "load5": 1.83,
- "load15": 1.67,
- "runnable_procs": 7,
- "total_procs": 1036
- }
- },
- "summary": "os.overview cpu=32.66% mem=74.46% swap=not_configured oom_kill_since_boot=2 load1=1.79"
- },
- {
- "tool": "net.tcp_ping",
- "params": {
- "host": "10.255.255.1",
- "port": 3306
- },
- "tool_version": "0.1.0",
- "error": {
- "code": "timeout",
- "message": "tool \"net.tcp_ping\" exceeded 8000ms"
- }
- }
- ]
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
- "/monit/targets": {
- "post": {
- "operationId": "monit-read-targets-list",
- "summary": "List monitored targets",
- "description": "List the targets observed under the current tenant by the monit-agent route projection. Supports `target_locator` prefix search and cursor pagination. Use this to drive `target_locator` selection for `/monit/tools/catalog` and `/monit/tools/invoke`. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- This is a **UI projection view**, not the live source-of-truth used by `/monit/tools/invoke`. A row in the list is no guarantee the target is currently invokable.\n- `keyword` is a **prefix** match against `target_locator` (ASCII-only, no whitespace, no `|`, max 256 bytes). Substring search is not supported in v1.\n- `limit` defaults to 50, max 200. Pagination is cursor-based: pass the previous response's `next_cursor` to fetch the next page; an empty / missing `next_cursor` means the last page.\n- Resetting `keyword`, `limit`, or the tenant context requires resetting `cursor`; never mix a cursor across different filter sets.\n- `total` is the unfiltered-by-cursor match count for the current `(account_id, keyword)` pair and stays stable across pages.\n- Fields surface `cluster_name` / `edge_ipport` for diagnostics; treat `updated_at` as \"most recently observed\" rather than a live online indicator.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-targets-list",
- "metadata": {
- "sidebarTitle": "List monitored targets"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TargetsListRequest"
- },
- "example": {
- "keyword": "db-prod",
- "limit": 50
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "Success",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/TargetsListResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "items": [
- {
- "target_kind": "host",
- "target_locator": "db-prod-01",
- "agent_version": "2.0.0",
- "cluster_name": "edge-a",
- "edge_ipport": "10.0.0.1:19090",
- "updated_at": 1710000000
- }
- ],
- "total": 120,
- "next_cursor": "eyJ0YXJnZXRfbG9jYXRvciI6ImRiLXByb2QtMDEiLCJpZCI6MTIzNDV9"
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
"/monit/datasource/tools/invoke": {
"post": {
"description": "Execute one deterministic tool against a configured datasource. Requires all currently online routable Edge sessions in the cluster to support the v0.71.0 base invoke protocol; individual tools may require a newer implementation. No tool catalog, automatic replay, or fallback to Agent/legacy diagnose. Request body limit 128 KiB; complete success response limit 1 MiB; tool timeout at most 25 seconds.",
@@ -5993,332 +5673,6 @@
}
}
},
- "ToolCatalogRequest": {
- "type": "object",
- "required": [
- "target_locator"
- ],
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "Optional consistency check. Must equal the authenticated account when supplied."
- },
- "target_locator": {
- "type": "string",
- "description": "Host name. Max 256 bytes; no whitespace, control characters or |."
- },
- "target_kind": {
- "type": "string",
- "description": "Optional target kind; only host is supported. Inferred when omitted.",
- "enum": [
- "host"
- ]
- }
- }
- },
- "ToolCatalogResponse": {
- "type": "object",
- "properties": {
- "target": {
- "type": "object",
- "description": "Resolved target. Omitted when `target_kind` was not supplied and the locator could not be uniquely inferred.",
- "properties": {
- "kind": {
- "type": "string",
- "description": "Resolved host target kind."
- },
- "locator": {
- "type": "string",
- "description": "Echo of the target locator from the request."
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "tools": {
- "type": "array",
- "description": "Tool metadata advertised by the target's agent. Always present; an empty array when `error` is set.",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "Tool name; pass into `/monit/tools/invoke` as `tools[].tool`."
- },
- "target_kind": {
- "type": "string",
- "description": "Target kind this tool applies to."
- },
- "description": {
- "type": "string",
- "description": "Tool capability description for UI / AI-SRE consumption."
- },
- "input_schema": {
- "type": "object",
- "description": "JSON Schema for `tools[].params`."
- }
- }
- }
- },
- "error": {
- "type": "object",
- "description": "Request-level business error. Omitted on success. Returned with HTTP 200 — do not rely on the status code alone.",
- "properties": {
- "code": {
- "type": "string",
- "enum": [
- "target_unavailable",
- "timeout",
- "forward_failed",
- "invalid_tool_result",
- "ambiguous_target_kind"
- ],
- "description": "Request-level error code: `target_unavailable` target unreachable, `timeout` resolution timed out, `forward_failed` cross-instance forwarding failed, `invalid_tool_result` agent returned an invalid result, `ambiguous_target_kind` target kind not uniquely inferable."
- },
- "message": {
- "type": "string",
- "description": "Human-readable error detail."
- },
- "target_kinds": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Returned for `ambiguous_target_kind`; lists the candidate kinds.",
- "x-flashduty-preserve-absence": true
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- },
- "ToolInvokeRequest": {
- "type": "object",
- "required": [
- "target_locator",
- "tools"
- ],
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "Optional consistency check. Must equal the authenticated account when supplied."
- },
- "target_locator": {
- "type": "string",
- "description": "Host name. Max 256 bytes; no whitespace, control characters or |."
- },
- "target_kind": {
- "type": "string",
- "description": "Optional target kind; only host is supported. Inferred when omitted.",
- "enum": [
- "host"
- ]
- },
- "tools": {
- "type": "array",
- "minItems": 1,
- "maxItems": 8,
- "description": "Up to 8 tool calls; webapi executes them concurrently and returns results in input order.",
- "items": {
- "type": "object",
- "required": [
- "tool"
- ],
- "properties": {
- "tool": {
- "type": "string",
- "description": "Tool name, typically from `/monit/tools/catalog`."
- },
- "params": {
- "type": "object",
- "description": "Tool parameters matching the catalog `input_schema`. For no-arg tools pass `{}` explicitly.",
- "additionalProperties": true
- }
- }
- }
- }
- }
- },
- "ToolInvokeResponse": {
- "type": "object",
- "properties": {
- "target": {
- "type": "object",
- "description": "Resolved target. Omitted when `target_kind` was not supplied and the locator could not be uniquely inferred.",
- "properties": {
- "kind": {
- "type": "string",
- "description": "Resolved host target kind."
- },
- "locator": {
- "type": "string",
- "description": "Echo of the target locator from the request."
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "results": {
- "type": "array",
- "description": "Per-tool results, aligned with the request `tools[]` order. Empty when a request-level `error` is present.",
- "items": {
- "type": "object",
- "properties": {
- "tool": {
- "type": "string",
- "description": "Tool name, aligned one-to-one with the request `tools[]` order."
- },
- "params": {
- "type": "object",
- "description": "Request params echoed back by webapi. Normalized to `{}` when the request omitted them or sent null."
- },
- "tool_version": {
- "type": "string",
- "description": "Agent-executed tool version. Omitted when the failure occurred before the agent picked a version.",
- "x-flashduty-preserve-absence": true
- },
- "data": {
- "type": "object",
- "description": "Tool business payload. Present only on success. Webapi already unwraps the monit-agent result envelope, so there is no nested `data.data`.",
- "x-flashduty-preserve-absence": true
- },
- "summary": {
- "type": "string",
- "description": "Human/LLM-readable one-line distillation of the result. Present only when non-empty.",
- "x-flashduty-preserve-absence": true
- },
- "truncated": {
- "type": "object",
- "description": "Present only when the result was actually truncated — the field's presence is the signal, so there is no redundant `truncated: true`.",
- "properties": {
- "reason": {
- "type": "string",
- "description": "Why the result was truncated."
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "error": {
- "type": "object",
- "description": "Per-tool failure. Present only on failure, and mutually exclusive with `data` / `summary` / `truncated`.",
- "properties": {
- "code": {
- "type": "string",
- "description": "Common WebAPI codes: `timeout`, `target_unavailable`, `invalid_tool_result`, `internal`, `invalid_args`, `unsupported_syntax`, `path_not_found`, and `catalog_changed`. Agent-specific tool errors may also be returned unchanged."
- },
- "message": {
- "type": "string",
- "description": "Human-readable detail for this tool's failure; agent-side messages may be forwarded verbatim."
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- }
- },
- "error": {
- "type": "object",
- "description": "Request-level business error. Omitted on success. Returned with HTTP 200 — do not rely on the status code alone.",
- "properties": {
- "code": {
- "type": "string",
- "enum": [
- "target_unavailable",
- "forward_failed",
- "ambiguous_target_kind"
- ],
- "description": "Request-level error code: `target_unavailable` target unreachable, `forward_failed` cross-instance forwarding failed, `ambiguous_target_kind` target kind not uniquely inferable."
- },
- "message": {
- "type": "string",
- "description": "Human-readable error detail."
- },
- "target_kinds": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-flashduty-preserve-absence": true,
- "description": "Returned only when `code` is `ambiguous_target_kind`, listing the candidate target kinds matched by the locator; omitted otherwise."
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- },
- "TargetsListRequest": {
- "type": "object",
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "Optional consistency check. Must equal the authenticated account when supplied."
- },
- "keyword": {
- "type": "string",
- "description": "Prefix match against `target_locator`. ASCII only, no whitespace, no `|`, max 256 bytes. Substring search is not supported."
- },
- "limit": {
- "type": "integer",
- "description": "Page size. Default 50, max 200.",
- "default": 50,
- "maximum": 200
- },
- "cursor": {
- "type": "string",
- "description": "Opaque pagination cursor from the previous response's `next_cursor`. Omit / pass empty string for the first page. Reset whenever `keyword`, `limit`, or tenant changes."
- }
- }
- },
- "TargetsListResponse": {
- "type": "object",
- "properties": {
- "items": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "target_kind": {
- "type": "string",
- "description": "Host target kind. Filtering by kind is not supported in v1."
- },
- "target_locator": {
- "type": "string",
- "description": "Target identifier; the list is sorted by this field ascending."
- },
- "agent_version": {
- "type": "string",
- "description": "Most recently observed Agent version."
- },
- "cluster_name": {
- "type": "string",
- "description": "Edge cluster name."
- },
- "edge_ipport": {
- "type": "string",
- "description": "Edge instance address (`ip:port`), surfaced for diagnostics."
- },
- "updated_at": {
- "type": "integer",
- "format": "int64",
- "description": "Last route-projection upsert time, Unix seconds. Treat as 'most recently observed', not a live-online indicator."
- }
- }
- },
- "description": "The current page of invocable targets, sorted ascending by `target_locator`."
- },
- "total": {
- "type": "integer",
- "format": "int64",
- "description": "Total matches for the current `(account_id, keyword)` pair, independent of `cursor`."
- },
- "next_cursor": {
- "type": "string",
- "description": "Opaque cursor for the next page. Absent / empty means this is the last page.",
- "x-flashduty-preserve-absence": true
- }
- }
- },
"DiagnoseEvidenceWindow": {
"type": "object",
"description": "Current analysis window using RFC 3339 UTC timestamps.",
diff --git a/api-reference/monitors.openapi.zh.json b/api-reference/monitors.openapi.zh.json
index ba2243dc..2cfefadf 100644
--- a/api-reference/monitors.openapi.zh.json
+++ b/api-reference/monitors.openapi.zh.json
@@ -2691,326 +2691,6 @@
"deprecated": true
}
},
- "/monit/tools/catalog": {
- "post": {
- "operationId": "monit-read-tools-catalog",
- "summary": "查询监控对象工具能力清单",
- "description": "根据 `target_locator`(host)查询该监控对象上 monit-agent 当前暴露的工具能力。返回每个工具的名称、描述以及 JSON-Schema `input_schema`。配合 `/monit/tools/invoke` 驱动 AI-SRE 的工具调用。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 使用 `target_locator` 标识监控对象;`target_kind` 可选,省略时按当前监控对象路由自动推断。\n- 若同一 locator 匹配多个 kind,响应为 HTTP 200,`data.error.code = \"ambiguous_target_kind\"`,并附带 `target_kinds` 列表——请带上显式的 `target_kind` 重试。\n- 工具能力清单是候选能力视图,并非执行保证。目标 Agent 可能在拿到清单与发起调用之间下线,本地 Agent 策略也可能在调用时拦截某些工具。\n- 每个工具条目只返回 `name`、`target_kind`、`description` 和 `input_schema`,不会暴露工具版本、输出契约、目录版本或执行限制。\n- 业务错误(`target_unavailable`、`timeout`、`forward_failed`、`invalid_tool_result`、`ambiguous_target_kind`)以 HTTP 200 返回,`data.error` 存在且 `data.tools = []`。只有协议、鉴权和内部错误才使用标准错误信封。\n- 响应采用**稀疏字段**:成功时 `error` 直接省略而非返回 `null`;当 locator 无法唯一解析时,`target` 不输出。`tools` 字段恒存在。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-tools-catalog",
- "metadata": {
- "sidebarTitle": "查询监控对象工具能力清单"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ToolCatalogRequest"
- },
- "example": {
- "account_id": 10001,
- "target_locator": "web-01"
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "成功",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolCatalogResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "tools": [
- {
- "name": "os.overview",
- "target_kind": "host",
- "description": "Returns a bounded overview of host health: CPU usage and load, memory and swap utilisation, disk and network counters, and top processes.",
- "input_schema": {
- "type": "object",
- "additionalProperties": false,
- "properties": {}
- }
- },
- {
- "name": "net.tcp_ping",
- "target_kind": "host",
- "description": "Checks TCP reachability of a host:port from the target, reporting connect latency.",
- "input_schema": {
- "type": "object",
- "additionalProperties": false,
- "required": [
- "host",
- "port"
- ],
- "properties": {
- "host": {
- "type": "string"
- },
- "port": {
- "type": "integer"
- }
- }
- }
- }
- ]
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
- "/monit/tools/invoke": {
- "post": {
- "operationId": "monit-read-tools-invoke",
- "summary": "调用监控对象工具",
- "description": "在单个监控对象上并发调用至多 8 个 monit-agent 工具。结果按入参 `tools` 数组顺序返回。长耗时——单个工具在 Agent 上有自己的超时,整体请求可能耗时数十秒。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 单次调用至多 **8** 个工具(`MaxToolsPerInvoke`);超出需在客户端拆分。8 个工具的上限与单监控对象 Agent 的并发能力对齐。\n- 工具在 Agent 上并行执行;webapi 返回的 `results[]` 与请求中的 `tools[]` 顺序对齐。\n- 长耗时:客户端超时至少设置 **35 秒**。该接口面向 AI-SRE / 人工排障流程,不适用于交互式 UI。\n- 请求级错误(`target_unavailable`、`ambiguous_target_kind`、`forward_failed`)以 HTTP 200 返回,`data.error` 不为空,`data.results = []`。\n- 单工具失败以 HTTP 200 返回,`data.error` 不输出,`results[i].error` 被填充——务必同时检查**三层**(外层信封 `error`、`data.error`、再到每个 `results[i].error`)。\n- 响应采用**稀疏字段**:字段不存在即表示为空。成功时 `error` 直接省略而非返回 `null`;失败时 `data`、`summary`、`truncated` 均不输出。不要依赖占位的 `null` 字段做判断;当 locator 无法唯一解析时,`target` 同样不会出现。\n- `results[i].data` 是 Tool 的业务数据,monit-agent 的 result envelope **已被解开**——不会出现嵌套的 `data.data`。一行摘要位于 `results[i].summary`;`results[i].truncated`(内含 `reason`)仅在结果确实被截断时出现。\n- `results[i].params` 回显 webapi 收到的该 Tool 调用参数,便于在批量调用中关联结果——即使其中某个 Tool 失败也能对上号。\n- 按 `/monit/tools/catalog` 返回的 `input_schema` 构造 `tools[].params`。对于无参工具,务必显式传 `params: {}`。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-tools-invoke",
- "metadata": {
- "sidebarTitle": "调用监控对象工具"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ToolInvokeRequest"
- },
- "example": {
- "account_id": 10001,
- "target_locator": "web-01",
- "tools": [
- {
- "tool": "os.overview",
- "params": {}
- },
- {
- "tool": "net.tcp_ping",
- "params": {
- "host": "10.0.0.10",
- "port": 3306
- }
- }
- ]
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "成功",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolInvokeResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "results": [
- {
- "tool": "os.overview",
- "params": {},
- "tool_version": "0.6.0",
- "data": {
- "sample_interval_sec": 0.5,
- "cpu": {
- "cores": 4,
- "usage_pct": 32.66,
- "user_pct": 28.14,
- "system_pct": 3.52,
- "iowait_pct": 1.01,
- "idle_pct": 67.34
- },
- "load": {
- "load1": 1.79,
- "load5": 1.83,
- "load15": 1.67,
- "runnable_procs": 7,
- "total_procs": 1036
- }
- },
- "summary": "os.overview cpu=32.66% mem=74.46% swap=not_configured oom_kill_since_boot=2 load1=1.79"
- },
- {
- "tool": "net.tcp_ping",
- "params": {
- "host": "10.255.255.1",
- "port": 3306
- },
- "tool_version": "0.1.0",
- "error": {
- "code": "timeout",
- "message": "tool \"net.tcp_ping\" exceeded 8000ms"
- }
- }
- ]
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
- "/monit/targets": {
- "post": {
- "operationId": "monit-read-targets-list",
- "summary": "监控对象列表",
- "description": "列出当前租户下被 monit-agent 路由投影所观测到的监控对象。支持 `target_locator` 前缀搜索与游标分页。用于为 `/monit/tools/catalog` 与 `/monit/tools/invoke` 选择 `target_locator`。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 这是一个 **UI 投影视图**,不是 `/monit/tools/invoke` 所依赖的实时数据源。列表中存在不代表对应监控对象当前可被调用。\n- `keyword` 是对 `target_locator` 的**前缀匹配**(仅 ASCII,不含空白,不含 `|`,最长 256 字节)。v1 不支持子串搜索。\n- `limit` 默认 50,最大 200。分页基于游标:将上次响应中的 `next_cursor` 传入即可拉取下一页;`next_cursor` 为空或缺失表示已到末页。\n- 重置 `keyword`、`limit` 或租户上下文时必须重置 `cursor`;切勿在不同筛选条件之间复用游标。\n- `total` 是当前 `(account_id, keyword)` 组合下未受游标影响的匹配总数,跨页保持稳定。\n- 字段中暴露 `cluster_name` / `edge_ipport` 供排障使用;`updated_at` 表示\"最近一次被观测到\",而非实时在线指标。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-targets-list",
- "metadata": {
- "sidebarTitle": "监控对象列表"
- }
- },
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TargetsListRequest"
- },
- "example": {
- "keyword": "db-prod",
- "limit": 50
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "成功",
- "content": {
- "application/json": {
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/components/schemas/TargetsListResponse"
- }
- }
- }
- ]
- },
- "example": {
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
- "data": {
- "items": [
- {
- "target_kind": "host",
- "target_locator": "db-prod-01",
- "agent_version": "2.0.0",
- "cluster_name": "edge-a",
- "edge_ipport": "10.0.0.1:19090",
- "updated_at": 1710000000
- }
- ],
- "total": 120,
- "next_cursor": "eyJ0YXJnZXRfbG9jYXRvciI6ImRiLXByb2QtMDEiLCJpZCI6MTIzNDV9"
- }
- }
- }
- }
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- }
- }
- },
"/monit/datasource/tools/invoke": {
"post": {
"description": "对已配置的数据源执行单个确定性工具。要求集群所有当前在线可路由 Edge 会话支持 v0.71.0 基础 invoke 协议;具体工具可能需要更新实现。不提供工具目录、自动重放或 Agent/旧 diagnose 回退。请求体上限 128 KiB,完整成功响应上限 1 MiB,工具超时最多 25 秒。",
@@ -5993,332 +5673,6 @@
}
}
},
- "ToolCatalogRequest": {
- "type": "object",
- "required": [
- "target_locator"
- ],
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "可选的一致性校验。若提供,必须等于已认证账户。"
- },
- "target_locator": {
- "type": "string",
- "description": "主机名,最多 256 字节,不允许空白、控制字符或 |。"
- },
- "target_kind": {
- "type": "string",
- "description": "可选目标类型,仅支持 host,省略时推断。",
- "enum": [
- "host"
- ]
- }
- }
- },
- "ToolCatalogResponse": {
- "type": "object",
- "properties": {
- "target": {
- "type": "object",
- "description": "解析出的目标。未传 `target_kind` 且无法根据 locator 唯一推断时,不输出该字段。",
- "properties": {
- "kind": {
- "type": "string",
- "description": "解析后的 host 目标类型。"
- },
- "locator": {
- "type": "string",
- "description": "回显请求中的目标标识符(locator)。"
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "tools": {
- "type": "array",
- "description": "目标 Agent 当前声明的 Tool 元数据。该字段恒存在;出错时为空数组。",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "工具名;作为 `/monit/tools/invoke` 的 `tools[].tool` 传入。"
- },
- "target_kind": {
- "type": "string",
- "description": "该工具适用的 target kind。"
- },
- "description": {
- "type": "string",
- "description": "工具能力描述,供 UI / AI-SRE 使用。"
- },
- "input_schema": {
- "type": "object",
- "description": "用于 `tools[].params` 的 JSON Schema。"
- }
- }
- }
- },
- "error": {
- "type": "object",
- "description": "请求级业务错误,成功时不输出。该错误以 HTTP 200 返回——不要只看状态码。",
- "properties": {
- "code": {
- "type": "string",
- "enum": [
- "target_unavailable",
- "timeout",
- "forward_failed",
- "invalid_tool_result",
- "ambiguous_target_kind"
- ],
- "description": "请求级错误码:`target_unavailable` 目标不可达,`timeout` 解析超时,`forward_failed` 跨实例转发失败,`invalid_tool_result` Agent 返回结果非法,`ambiguous_target_kind` 无法唯一推断目标类型。"
- },
- "message": {
- "type": "string",
- "description": "人类可读的错误详情。"
- },
- "target_kinds": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "在 `ambiguous_target_kind` 时返回;列出候选的 kind。",
- "x-flashduty-preserve-absence": true
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- },
- "ToolInvokeRequest": {
- "type": "object",
- "required": [
- "target_locator",
- "tools"
- ],
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "可选的一致性校验。若提供,必须等于已认证账户。"
- },
- "target_locator": {
- "type": "string",
- "description": "主机名,最多 256 字节,不允许空白、控制字符或 |。"
- },
- "target_kind": {
- "type": "string",
- "description": "可选目标类型,仅支持 host,省略时推断。",
- "enum": [
- "host"
- ]
- },
- "tools": {
- "type": "array",
- "minItems": 1,
- "maxItems": 8,
- "description": "至多 8 个工具调用;webapi 会并发执行,并按入参顺序返回结果。",
- "items": {
- "type": "object",
- "required": [
- "tool"
- ],
- "properties": {
- "tool": {
- "type": "string",
- "description": "工具名,通常来自 `/monit/tools/catalog`。"
- },
- "params": {
- "type": "object",
- "description": "符合工具能力清单中 `input_schema` 的参数。无参工具请显式传 `{}`。",
- "additionalProperties": true
- }
- }
- }
- }
- }
- },
- "ToolInvokeResponse": {
- "type": "object",
- "properties": {
- "target": {
- "type": "object",
- "description": "解析出的目标。未传 `target_kind` 且无法根据 locator 唯一推断时,不输出该字段。",
- "properties": {
- "kind": {
- "type": "string",
- "description": "解析后的 host 目标类型。"
- },
- "locator": {
- "type": "string",
- "description": "回显请求中的目标标识符(locator)。"
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "results": {
- "type": "array",
- "description": "各 Tool 的执行结果,与请求中 `tools[]` 的顺序对齐。存在请求级 `error` 时为空数组。",
- "items": {
- "type": "object",
- "properties": {
- "tool": {
- "type": "string",
- "description": "Tool 名称,与请求中 `tools[]` 的顺序一一对应。"
- },
- "params": {
- "type": "object",
- "description": "WebAPI 从原始请求回填的调用参数。请求中缺省或为 null 时规范化为 `{}`。"
- },
- "tool_version": {
- "type": "string",
- "description": "Agent 实际执行的 Tool 版本。若失败发生在 Agent 选定版本之前,则不输出该字段。",
- "x-flashduty-preserve-absence": true
- },
- "data": {
- "type": "object",
- "description": "Tool 的业务数据,仅成功时输出。WebAPI 已解开 monit-agent 的 result envelope,因此不会出现嵌套的 `data.data`。",
- "x-flashduty-preserve-absence": true
- },
- "summary": {
- "type": "string",
- "description": "人类 / LLM 可读的一行结果摘要,仅在非空时输出。",
- "x-flashduty-preserve-absence": true
- },
- "truncated": {
- "type": "object",
- "description": "仅在结果确实被截断时输出——字段存在本身即表示已截断,因此不再输出冗余的 `truncated: true`。",
- "properties": {
- "reason": {
- "type": "string",
- "description": "结果被截断的原因。"
- }
- },
- "x-flashduty-preserve-absence": true
- },
- "error": {
- "type": "object",
- "description": "单 Tool 失败信息。仅失败时输出,与 `data` / `summary` / `truncated` 互斥。",
- "properties": {
- "code": {
- "type": "string",
- "description": "常见 WebAPI 错误码:`timeout`、`target_unavailable`、`invalid_tool_result`、`internal`、`invalid_args`、`unsupported_syntax`、`path_not_found` 和 `catalog_changed`。Agent 特有的工具错误也可能原样返回。"
- },
- "message": {
- "type": "string",
- "description": "该 Tool 失败的人类可读错误详情;Agent 侧错误信息可能原样透传。"
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- }
- },
- "error": {
- "type": "object",
- "description": "请求级业务错误,成功时不输出。该错误以 HTTP 200 返回——不要只看状态码。",
- "properties": {
- "code": {
- "type": "string",
- "enum": [
- "target_unavailable",
- "forward_failed",
- "ambiguous_target_kind"
- ],
- "description": "请求级错误码:`target_unavailable` 目标不可达,`forward_failed` 跨实例转发失败,`ambiguous_target_kind` 无法唯一推断目标类型。"
- },
- "message": {
- "type": "string",
- "description": "人类可读的错误详情。"
- },
- "target_kinds": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-flashduty-preserve-absence": true,
- "description": "仅当 `code` 为 `ambiguous_target_kind` 时返回,列出该 locator 命中的候选 target kind;其他情况省略。"
- }
- },
- "x-flashduty-preserve-absence": true
- }
- }
- },
- "TargetsListRequest": {
- "type": "object",
- "properties": {
- "account_id": {
- "type": "integer",
- "format": "int64",
- "description": "可选的一致性校验。若提供,必须等于已认证账户。"
- },
- "keyword": {
- "type": "string",
- "description": "对 `target_locator` 的前缀匹配。仅 ASCII,不含空白,不含 `|`,最长 256 字节。不支持子串搜索。"
- },
- "limit": {
- "type": "integer",
- "description": "分页大小。默认 50,最大 200。",
- "default": 50,
- "maximum": 200
- },
- "cursor": {
- "type": "string",
- "description": "来自上次响应的 `next_cursor` 的不透明游标。首页请省略或传空串。变更 `keyword`、`limit` 或租户时必须重置。"
- }
- }
- },
- "TargetsListResponse": {
- "type": "object",
- "properties": {
- "items": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "target_kind": {
- "type": "string",
- "description": "主机目标类型 host。v1 不支持按 kind 过滤。"
- },
- "target_locator": {
- "type": "string",
- "description": "监控对象标识;列表按此字段升序排序。"
- },
- "agent_version": {
- "type": "string",
- "description": "最近一次观测到的 Agent 版本。"
- },
- "cluster_name": {
- "type": "string",
- "description": "边缘集群名。"
- },
- "edge_ipport": {
- "type": "string",
- "description": "边缘实例地址(`ip:port`),供排障使用。"
- },
- "updated_at": {
- "type": "integer",
- "format": "int64",
- "description": "最近一次路由投影写入时间,Unix 秒。视为\"最近一次被观测到\",而非实时在线指标。"
- }
- }
- },
- "description": "当前页的可调用目标(target)列表,按 `target_locator` 升序排列。"
- },
- "total": {
- "type": "integer",
- "format": "int64",
- "description": "当前 `(account_id, keyword)` 组合下的匹配总数,与 `cursor` 无关。"
- },
- "next_cursor": {
- "type": "string",
- "description": "下一页的不透明游标。缺失 / 为空表示已到末页。",
- "x-flashduty-preserve-absence": true
- }
- }
- },
"DiagnoseEvidenceWindow": {
"type": "object",
"description": "分析的当前时间窗口,使用 RFC 3339 UTC 时间戳。",
diff --git a/api-reference/openapi.en.json b/api-reference/openapi.en.json
index a5bcffc6..a7dd3c89 100644
--- a/api-reference/openapi.en.json
+++ b/api-reference/openapi.en.json
@@ -26134,79 +26134,6 @@
],
"type": "object"
},
- "TargetsListRequest": {
- "properties": {
- "account_id": {
- "description": "Optional consistency check. Must equal the authenticated account when supplied.",
- "format": "int64",
- "type": "integer"
- },
- "cursor": {
- "description": "Opaque pagination cursor from the previous response's `next_cursor`. Omit / pass empty string for the first page. Reset whenever `keyword`, `limit`, or tenant changes.",
- "type": "string"
- },
- "keyword": {
- "description": "Prefix match against `target_locator`. ASCII only, no whitespace, no `|`, max 256 bytes. Substring search is not supported.",
- "type": "string"
- },
- "limit": {
- "default": 50,
- "description": "Page size. Default 50, max 200.",
- "maximum": 200,
- "type": "integer"
- }
- },
- "type": "object"
- },
- "TargetsListResponse": {
- "properties": {
- "items": {
- "description": "The current page of invocable targets, sorted ascending by `target_locator`.",
- "items": {
- "properties": {
- "agent_version": {
- "description": "Most recently observed Agent version.",
- "type": "string"
- },
- "cluster_name": {
- "description": "Edge cluster name.",
- "type": "string"
- },
- "edge_ipport": {
- "description": "Edge instance address (`ip:port`), surfaced for diagnostics.",
- "type": "string"
- },
- "target_kind": {
- "description": "Host target kind. Filtering by kind is not supported in v1.",
- "type": "string"
- },
- "target_locator": {
- "description": "Target identifier; the list is sorted by this field ascending.",
- "type": "string"
- },
- "updated_at": {
- "description": "Last route-projection upsert time, Unix seconds. Treat as 'most recently observed', not a live-online indicator.",
- "format": "int64",
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "next_cursor": {
- "description": "Opaque cursor for the next page. Absent / empty means this is the last page.",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "total": {
- "description": "Total matches for the current `(account_id, keyword)` pair, independent of `cursor`.",
- "format": "int64",
- "type": "integer"
- }
- },
- "type": "object"
- },
"TeamBriefItem": {
"description": "Brief team info for batch responses.",
"properties": {
@@ -27128,259 +27055,6 @@
},
"type": "object"
},
- "ToolCatalogRequest": {
- "properties": {
- "account_id": {
- "description": "Optional consistency check. Must equal the authenticated account when supplied.",
- "format": "int64",
- "type": "integer"
- },
- "target_kind": {
- "description": "Optional target kind; only host is supported. Inferred when omitted.",
- "enum": [
- "host"
- ],
- "type": "string"
- },
- "target_locator": {
- "description": "Host name. Max 256 bytes; no whitespace, control characters or |.",
- "type": "string"
- }
- },
- "required": [
- "target_locator"
- ],
- "type": "object"
- },
- "ToolCatalogResponse": {
- "properties": {
- "error": {
- "description": "Request-level business error. Omitted on success. Returned with HTTP 200 — do not rely on the status code alone.",
- "properties": {
- "code": {
- "description": "Request-level error code: `target_unavailable` target unreachable, `timeout` resolution timed out, `forward_failed` cross-instance forwarding failed, `invalid_tool_result` agent returned an invalid result, `ambiguous_target_kind` target kind not uniquely inferable.",
- "enum": [
- "target_unavailable",
- "timeout",
- "forward_failed",
- "invalid_tool_result",
- "ambiguous_target_kind"
- ],
- "type": "string"
- },
- "message": {
- "description": "Human-readable error detail.",
- "type": "string"
- },
- "target_kinds": {
- "description": "Returned for `ambiguous_target_kind`; lists the candidate kinds.",
- "items": {
- "type": "string"
- },
- "type": "array",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "target": {
- "description": "Resolved target. Omitted when `target_kind` was not supplied and the locator could not be uniquely inferred.",
- "properties": {
- "kind": {
- "description": "Resolved host target kind.",
- "type": "string"
- },
- "locator": {
- "description": "Echo of the target locator from the request.",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "tools": {
- "description": "Tool metadata advertised by the target's agent. Always present; an empty array when `error` is set.",
- "items": {
- "properties": {
- "description": {
- "description": "Tool capability description for UI / AI-SRE consumption.",
- "type": "string"
- },
- "input_schema": {
- "description": "JSON Schema for `tools[].params`.",
- "type": "object"
- },
- "name": {
- "description": "Tool name; pass into `/monit/tools/invoke` as `tools[].tool`.",
- "type": "string"
- },
- "target_kind": {
- "description": "Target kind this tool applies to.",
- "type": "string"
- }
- },
- "type": "object"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- "ToolInvokeRequest": {
- "properties": {
- "account_id": {
- "description": "Optional consistency check. Must equal the authenticated account when supplied.",
- "format": "int64",
- "type": "integer"
- },
- "target_kind": {
- "description": "Optional target kind; only host is supported. Inferred when omitted.",
- "enum": [
- "host"
- ],
- "type": "string"
- },
- "target_locator": {
- "description": "Host name. Max 256 bytes; no whitespace, control characters or |.",
- "type": "string"
- },
- "tools": {
- "description": "Up to 8 tool calls; webapi executes them concurrently and returns results in input order.",
- "items": {
- "properties": {
- "params": {
- "additionalProperties": true,
- "description": "Tool parameters matching the catalog `input_schema`. For no-arg tools pass `{}` explicitly.",
- "type": "object"
- },
- "tool": {
- "description": "Tool name, typically from `/monit/tools/catalog`.",
- "type": "string"
- }
- },
- "required": [
- "tool"
- ],
- "type": "object"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "target_locator",
- "tools"
- ],
- "type": "object"
- },
- "ToolInvokeResponse": {
- "properties": {
- "error": {
- "description": "Request-level business error. Omitted on success. Returned with HTTP 200 — do not rely on the status code alone.",
- "properties": {
- "code": {
- "description": "Request-level error code: `target_unavailable` target unreachable, `forward_failed` cross-instance forwarding failed, `ambiguous_target_kind` target kind not uniquely inferable.",
- "enum": [
- "target_unavailable",
- "forward_failed",
- "ambiguous_target_kind"
- ],
- "type": "string"
- },
- "message": {
- "description": "Human-readable error detail.",
- "type": "string"
- },
- "target_kinds": {
- "description": "Returned only when `code` is `ambiguous_target_kind`, listing the candidate target kinds matched by the locator; omitted otherwise.",
- "items": {
- "type": "string"
- },
- "type": "array",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "results": {
- "description": "Per-tool results, aligned with the request `tools[]` order. Empty when a request-level `error` is present.",
- "items": {
- "properties": {
- "data": {
- "description": "Tool business payload. Present only on success. Webapi already unwraps the monit-agent result envelope, so there is no nested `data.data`.",
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "error": {
- "description": "Per-tool failure. Present only on failure, and mutually exclusive with `data` / `summary` / `truncated`.",
- "properties": {
- "code": {
- "description": "Common WebAPI codes: `timeout`, `target_unavailable`, `invalid_tool_result`, `internal`, `invalid_args`, `unsupported_syntax`, `path_not_found`, and `catalog_changed`. Agent-specific tool errors may also be returned unchanged.",
- "type": "string"
- },
- "message": {
- "description": "Human-readable detail for this tool's failure; agent-side messages may be forwarded verbatim.",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "params": {
- "description": "Request params echoed back by webapi. Normalized to `{}` when the request omitted them or sent null.",
- "type": "object"
- },
- "summary": {
- "description": "Human/LLM-readable one-line distillation of the result. Present only when non-empty.",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "tool": {
- "description": "Tool name, aligned one-to-one with the request `tools[]` order.",
- "type": "string"
- },
- "tool_version": {
- "description": "Agent-executed tool version. Omitted when the failure occurred before the agent picked a version.",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "truncated": {
- "description": "Present only when the result was actually truncated — the field's presence is the signal, so there is no redundant `truncated: true`.",
- "properties": {
- "reason": {
- "description": "Why the result was truncated.",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "target": {
- "description": "Resolved target. Omitted when `target_kind` was not supplied and the locator could not be uniquely inferred.",
- "properties": {
- "kind": {
- "description": "Resolved host target kind.",
- "type": "string"
- },
- "locator": {
- "description": "Echo of the target locator from the request.",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object"
- },
"TryLinkPersonRequest": {
"description": "Parameters for attempting automatic IM account linking.",
"properties": {
@@ -45260,326 +44934,6 @@
}
}
},
- "/monit/targets": {
- "post": {
- "description": "List the targets observed under the current tenant by the monit-agent route projection. Supports `target_locator` prefix search and cursor pagination. Use this to drive `target_locator` selection for `/monit/tools/catalog` and `/monit/tools/invoke`. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "operationId": "monit-read-targets-list",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "keyword": "db-prod",
- "limit": 50
- },
- "schema": {
- "$ref": "#/components/schemas/TargetsListRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "items": [
- {
- "agent_version": "2.0.0",
- "cluster_name": "edge-a",
- "edge_ipport": "10.0.0.1:19090",
- "target_kind": "host",
- "target_locator": "db-prod-01",
- "updated_at": 1710000000
- }
- ],
- "next_cursor": "eyJ0YXJnZXRfbG9jYXRvciI6ImRiLXByb2QtMDEiLCJpZCI6MTIzNDV9",
- "total": 120
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/TargetsListResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "Success"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "List monitored targets",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- This is a **UI projection view**, not the live source-of-truth used by `/monit/tools/invoke`. A row in the list is no guarantee the target is currently invokable.\n- `keyword` is a **prefix** match against `target_locator` (ASCII-only, no whitespace, no `|`, max 256 bytes). Substring search is not supported in v1.\n- `limit` defaults to 50, max 200. Pagination is cursor-based: pass the previous response's `next_cursor` to fetch the next page; an empty / missing `next_cursor` means the last page.\n- Resetting `keyword`, `limit`, or the tenant context requires resetting `cursor`; never mix a cursor across different filter sets.\n- `total` is the unfiltered-by-cursor match count for the current `(account_id, keyword)` pair and stays stable across pages.\n- Fields surface `cluster_name` / `edge_ipport` for diagnostics; treat `updated_at` as \"most recently observed\" rather than a live online indicator.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-targets-list",
- "metadata": {
- "sidebarTitle": "List monitored targets"
- }
- }
- }
- },
- "/monit/tools/catalog": {
- "post": {
- "description": "Look up the tools that the per-target monit-agent currently exposes for a given `target_locator` (host). Returns each tool's name, description, and JSON-Schema `input_schema`. Pair with `/monit/tools/invoke` to drive AI-SRE tool calls. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "operationId": "monit-read-tools-catalog",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "account_id": 10001,
- "target_locator": "web-01"
- },
- "schema": {
- "$ref": "#/components/schemas/ToolCatalogRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "tools": [
- {
- "description": "Returns a bounded overview of host health: CPU usage and load, memory and swap utilisation, disk and network counters, and top processes.",
- "input_schema": {
- "additionalProperties": false,
- "properties": {},
- "type": "object"
- },
- "name": "os.overview",
- "target_kind": "host"
- },
- {
- "description": "Checks TCP reachability of a host:port from the target, reporting connect latency.",
- "input_schema": {
- "additionalProperties": false,
- "properties": {
- "host": {
- "type": "string"
- },
- "port": {
- "type": "integer"
- }
- },
- "required": [
- "host",
- "port"
- ],
- "type": "object"
- },
- "name": "net.tcp_ping",
- "target_kind": "host"
- }
- ]
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolCatalogResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "Success"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "List target tool catalog",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- Use `target_locator` to identify the target; `target_kind` is optional and is inferred from current target routing when omitted.\n- If multiple kinds match the same locator, the response is HTTP 200 with `data.error.code = \"ambiguous_target_kind\"` and a `target_kinds` list — retry with an explicit `target_kind`.\n- The catalog is a candidate capability view, not an execution guarantee. The target Agent may go offline between catalog and invoke, or local Agent policy may block individual tools at invoke time.\n- Each tool entry exposes only `name`, `target_kind`, `description`, and `input_schema`. It does not expose tool versions, output contracts, catalog revisions, or execution limits.\n- Business errors (`target_unavailable`, `timeout`, `forward_failed`, `invalid_tool_result`, `ambiguous_target_kind`) return HTTP 200 with `data.error` present and `data.tools = []`. Only protocol, authentication, and internal errors use the standard error envelope.\n- The response uses **sparse fields**: on success `error` is omitted rather than sent as `null`, and `target` is omitted when the locator could not be uniquely resolved. `tools` is always present.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-tools-catalog",
- "metadata": {
- "sidebarTitle": "List target tool catalog"
- }
- }
- }
- },
- "/monit/tools/invoke": {
- "post": {
- "description": "Invoke up to 8 monit-agent tools concurrently on a single target. Results come back in the order of the input `tools` array. Long-running — individual tools have per-tool timeouts on the agent and the whole request may take tens of seconds. Agent targets are host-only. Remote datasource evidence uses /monit/datasource/tools/invoke and datasource_id.",
- "operationId": "monit-read-tools-invoke",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "account_id": 10001,
- "target_locator": "web-01",
- "tools": [
- {
- "params": {},
- "tool": "os.overview"
- },
- {
- "params": {
- "host": "10.0.0.10",
- "port": 3306
- },
- "tool": "net.tcp_ping"
- }
- ]
- },
- "schema": {
- "$ref": "#/components/schemas/ToolInvokeRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "results": [
- {
- "data": {
- "cpu": {
- "cores": 4,
- "idle_pct": 67.34,
- "iowait_pct": 1.01,
- "system_pct": 3.52,
- "usage_pct": 32.66,
- "user_pct": 28.14
- },
- "load": {
- "load1": 1.79,
- "load15": 1.67,
- "load5": 1.83,
- "runnable_procs": 7,
- "total_procs": 1036
- },
- "sample_interval_sec": 0.5
- },
- "params": {},
- "summary": "os.overview cpu=32.66% mem=74.46% swap=not_configured oom_kill_since_boot=2 load1=1.79",
- "tool": "os.overview",
- "tool_version": "0.6.0"
- },
- {
- "error": {
- "code": "timeout",
- "message": "tool \"net.tcp_ping\" exceeded 8000ms"
- },
- "params": {
- "host": "10.255.255.1",
- "port": 3306
- },
- "tool": "net.tcp_ping",
- "tool_version": "0.1.0"
- }
- ],
- "target": {
- "kind": "host",
- "locator": "web-01"
- }
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolInvokeResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "Success"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "Invoke target tools",
- "tags": [
- "Monitors/Diagnostics"
- ],
- "x-mint": {
- "content": "## Restrictions\n\n| Aspect | Value |\n| ------ | ----- |\n| Rate limits | **600 requests/minute**; **10 requests/second** per account |\n| Permissions | Any valid `app_key` (read-only; not gated by a specific permission class) |\n\n## Usage\n\n- Up to **8** tools per call (`MaxToolsPerInvoke`); larger batches must be split client-side. The 8-tool cap aligns with the per-target agent concurrency.\n- Tools execute in parallel on the agent; webapi returns `results[]` aligned with the request `tools[]` order.\n- Long-running: set client timeouts to **at least 35 s**. The endpoint is intended for AI-SRE / human-RCA flows, not interactive UI.\n- Request-level errors (`target_unavailable`, `ambiguous_target_kind`, `forward_failed`) appear as HTTP 200 with `data.error` set and `data.results = []`.\n- Per-tool failures appear as HTTP 200 with `data.error` absent and `results[i].error` populated — always check **all three** layers (outer envelope `error`, `data.error`, then each `results[i].error`).\n- The response uses **sparse fields**: absent means empty. On success `error` is omitted entirely rather than sent as `null`; on failure `data`, `summary` and `truncated` are omitted. Do not key logic off placeholder `null` fields, and do not expect `target` when the locator could not be uniquely resolved.\n- `results[i].data` is the tool payload with the monit-agent result envelope **already unwrapped** — there is no nested `data.data`. The one-line distillation is `results[i].summary`, and `results[i].truncated` (carrying a `reason`) appears only when the result was genuinely truncated.\n- `results[i].params` echoes the params webapi received for that tool, so batched calls stay correlatable even when an individual tool fails.\n- Construct `tools[].params` against the `input_schema` returned by `/monit/tools/catalog`. For no-arg tools always pass `params: {}` explicitly.",
- "href": "/en/api-reference/monitors/diagnostics/monit-read-tools-invoke",
- "metadata": {
- "sidebarTitle": "Invoke target tools"
- }
- }
- }
- },
"/oncall/license/list": {
"post": {
"description": "List people with active fixed or temporary On-call licenses in the current account.",
diff --git a/api-reference/openapi.zh.json b/api-reference/openapi.zh.json
index 2fd47cda..3af888b3 100644
--- a/api-reference/openapi.zh.json
+++ b/api-reference/openapi.zh.json
@@ -26134,79 +26134,6 @@
],
"type": "object"
},
- "TargetsListRequest": {
- "properties": {
- "account_id": {
- "description": "可选的一致性校验。若提供,必须等于已认证账户。",
- "format": "int64",
- "type": "integer"
- },
- "cursor": {
- "description": "来自上次响应的 `next_cursor` 的不透明游标。首页请省略或传空串。变更 `keyword`、`limit` 或租户时必须重置。",
- "type": "string"
- },
- "keyword": {
- "description": "对 `target_locator` 的前缀匹配。仅 ASCII,不含空白,不含 `|`,最长 256 字节。不支持子串搜索。",
- "type": "string"
- },
- "limit": {
- "default": 50,
- "description": "分页大小。默认 50,最大 200。",
- "maximum": 200,
- "type": "integer"
- }
- },
- "type": "object"
- },
- "TargetsListResponse": {
- "properties": {
- "items": {
- "description": "当前页的可调用目标(target)列表,按 `target_locator` 升序排列。",
- "items": {
- "properties": {
- "agent_version": {
- "description": "最近一次观测到的 Agent 版本。",
- "type": "string"
- },
- "cluster_name": {
- "description": "边缘集群名。",
- "type": "string"
- },
- "edge_ipport": {
- "description": "边缘实例地址(`ip:port`),供排障使用。",
- "type": "string"
- },
- "target_kind": {
- "description": "主机目标类型 host。v1 不支持按 kind 过滤。",
- "type": "string"
- },
- "target_locator": {
- "description": "监控对象标识;列表按此字段升序排序。",
- "type": "string"
- },
- "updated_at": {
- "description": "最近一次路由投影写入时间,Unix 秒。视为\"最近一次被观测到\",而非实时在线指标。",
- "format": "int64",
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "next_cursor": {
- "description": "下一页的不透明游标。缺失 / 为空表示已到末页。",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "total": {
- "description": "当前 `(account_id, keyword)` 组合下的匹配总数,与 `cursor` 无关。",
- "format": "int64",
- "type": "integer"
- }
- },
- "type": "object"
- },
"TeamBriefItem": {
"description": "批量响应中的团队简要信息。",
"properties": {
@@ -27128,259 +27055,6 @@
},
"type": "object"
},
- "ToolCatalogRequest": {
- "properties": {
- "account_id": {
- "description": "可选的一致性校验。若提供,必须等于已认证账户。",
- "format": "int64",
- "type": "integer"
- },
- "target_kind": {
- "description": "可选目标类型,仅支持 host,省略时推断。",
- "enum": [
- "host"
- ],
- "type": "string"
- },
- "target_locator": {
- "description": "主机名,最多 256 字节,不允许空白、控制字符或 |。",
- "type": "string"
- }
- },
- "required": [
- "target_locator"
- ],
- "type": "object"
- },
- "ToolCatalogResponse": {
- "properties": {
- "error": {
- "description": "请求级业务错误,成功时不输出。该错误以 HTTP 200 返回——不要只看状态码。",
- "properties": {
- "code": {
- "description": "请求级错误码:`target_unavailable` 目标不可达,`timeout` 解析超时,`forward_failed` 跨实例转发失败,`invalid_tool_result` Agent 返回结果非法,`ambiguous_target_kind` 无法唯一推断目标类型。",
- "enum": [
- "target_unavailable",
- "timeout",
- "forward_failed",
- "invalid_tool_result",
- "ambiguous_target_kind"
- ],
- "type": "string"
- },
- "message": {
- "description": "人类可读的错误详情。",
- "type": "string"
- },
- "target_kinds": {
- "description": "在 `ambiguous_target_kind` 时返回;列出候选的 kind。",
- "items": {
- "type": "string"
- },
- "type": "array",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "target": {
- "description": "解析出的目标。未传 `target_kind` 且无法根据 locator 唯一推断时,不输出该字段。",
- "properties": {
- "kind": {
- "description": "解析后的 host 目标类型。",
- "type": "string"
- },
- "locator": {
- "description": "回显请求中的目标标识符(locator)。",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "tools": {
- "description": "目标 Agent 当前声明的 Tool 元数据。该字段恒存在;出错时为空数组。",
- "items": {
- "properties": {
- "description": {
- "description": "工具能力描述,供 UI / AI-SRE 使用。",
- "type": "string"
- },
- "input_schema": {
- "description": "用于 `tools[].params` 的 JSON Schema。",
- "type": "object"
- },
- "name": {
- "description": "工具名;作为 `/monit/tools/invoke` 的 `tools[].tool` 传入。",
- "type": "string"
- },
- "target_kind": {
- "description": "该工具适用的 target kind。",
- "type": "string"
- }
- },
- "type": "object"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- "ToolInvokeRequest": {
- "properties": {
- "account_id": {
- "description": "可选的一致性校验。若提供,必须等于已认证账户。",
- "format": "int64",
- "type": "integer"
- },
- "target_kind": {
- "description": "可选目标类型,仅支持 host,省略时推断。",
- "enum": [
- "host"
- ],
- "type": "string"
- },
- "target_locator": {
- "description": "主机名,最多 256 字节,不允许空白、控制字符或 |。",
- "type": "string"
- },
- "tools": {
- "description": "至多 8 个工具调用;webapi 会并发执行,并按入参顺序返回结果。",
- "items": {
- "properties": {
- "params": {
- "additionalProperties": true,
- "description": "符合工具能力清单中 `input_schema` 的参数。无参工具请显式传 `{}`。",
- "type": "object"
- },
- "tool": {
- "description": "工具名,通常来自 `/monit/tools/catalog`。",
- "type": "string"
- }
- },
- "required": [
- "tool"
- ],
- "type": "object"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "target_locator",
- "tools"
- ],
- "type": "object"
- },
- "ToolInvokeResponse": {
- "properties": {
- "error": {
- "description": "请求级业务错误,成功时不输出。该错误以 HTTP 200 返回——不要只看状态码。",
- "properties": {
- "code": {
- "description": "请求级错误码:`target_unavailable` 目标不可达,`forward_failed` 跨实例转发失败,`ambiguous_target_kind` 无法唯一推断目标类型。",
- "enum": [
- "target_unavailable",
- "forward_failed",
- "ambiguous_target_kind"
- ],
- "type": "string"
- },
- "message": {
- "description": "人类可读的错误详情。",
- "type": "string"
- },
- "target_kinds": {
- "description": "仅当 `code` 为 `ambiguous_target_kind` 时返回,列出该 locator 命中的候选 target kind;其他情况省略。",
- "items": {
- "type": "string"
- },
- "type": "array",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "results": {
- "description": "各 Tool 的执行结果,与请求中 `tools[]` 的顺序对齐。存在请求级 `error` 时为空数组。",
- "items": {
- "properties": {
- "data": {
- "description": "Tool 的业务数据,仅成功时输出。WebAPI 已解开 monit-agent 的 result envelope,因此不会出现嵌套的 `data.data`。",
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "error": {
- "description": "单 Tool 失败信息。仅失败时输出,与 `data` / `summary` / `truncated` 互斥。",
- "properties": {
- "code": {
- "description": "常见 WebAPI 错误码:`timeout`、`target_unavailable`、`invalid_tool_result`、`internal`、`invalid_args`、`unsupported_syntax`、`path_not_found` 和 `catalog_changed`。Agent 特有的工具错误也可能原样返回。",
- "type": "string"
- },
- "message": {
- "description": "该 Tool 失败的人类可读错误详情;Agent 侧错误信息可能原样透传。",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- },
- "params": {
- "description": "WebAPI 从原始请求回填的调用参数。请求中缺省或为 null 时规范化为 `{}`。",
- "type": "object"
- },
- "summary": {
- "description": "人类 / LLM 可读的一行结果摘要,仅在非空时输出。",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "tool": {
- "description": "Tool 名称,与请求中 `tools[]` 的顺序一一对应。",
- "type": "string"
- },
- "tool_version": {
- "description": "Agent 实际执行的 Tool 版本。若失败发生在 Agent 选定版本之前,则不输出该字段。",
- "type": "string",
- "x-flashduty-preserve-absence": true
- },
- "truncated": {
- "description": "仅在结果确实被截断时输出——字段存在本身即表示已截断,因此不再输出冗余的 `truncated: true`。",
- "properties": {
- "reason": {
- "description": "结果被截断的原因。",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "target": {
- "description": "解析出的目标。未传 `target_kind` 且无法根据 locator 唯一推断时,不输出该字段。",
- "properties": {
- "kind": {
- "description": "解析后的 host 目标类型。",
- "type": "string"
- },
- "locator": {
- "description": "回显请求中的目标标识符(locator)。",
- "type": "string"
- }
- },
- "type": "object",
- "x-flashduty-preserve-absence": true
- }
- },
- "type": "object"
- },
"TryLinkPersonRequest": {
"description": "尝试自动关联 IM 账号的参数。",
"properties": {
@@ -45260,326 +44934,6 @@
}
}
},
- "/monit/targets": {
- "post": {
- "description": "列出当前租户下被 monit-agent 路由投影所观测到的监控对象。支持 `target_locator` 前缀搜索与游标分页。用于为 `/monit/tools/catalog` 与 `/monit/tools/invoke` 选择 `target_locator`。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "operationId": "monit-read-targets-list",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "keyword": "db-prod",
- "limit": 50
- },
- "schema": {
- "$ref": "#/components/schemas/TargetsListRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "items": [
- {
- "agent_version": "2.0.0",
- "cluster_name": "edge-a",
- "edge_ipport": "10.0.0.1:19090",
- "target_kind": "host",
- "target_locator": "db-prod-01",
- "updated_at": 1710000000
- }
- ],
- "next_cursor": "eyJ0YXJnZXRfbG9jYXRvciI6ImRiLXByb2QtMDEiLCJpZCI6MTIzNDV9",
- "total": 120
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/TargetsListResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "成功"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "监控对象列表",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 这是一个 **UI 投影视图**,不是 `/monit/tools/invoke` 所依赖的实时数据源。列表中存在不代表对应监控对象当前可被调用。\n- `keyword` 是对 `target_locator` 的**前缀匹配**(仅 ASCII,不含空白,不含 `|`,最长 256 字节)。v1 不支持子串搜索。\n- `limit` 默认 50,最大 200。分页基于游标:将上次响应中的 `next_cursor` 传入即可拉取下一页;`next_cursor` 为空或缺失表示已到末页。\n- 重置 `keyword`、`limit` 或租户上下文时必须重置 `cursor`;切勿在不同筛选条件之间复用游标。\n- `total` 是当前 `(account_id, keyword)` 组合下未受游标影响的匹配总数,跨页保持稳定。\n- 字段中暴露 `cluster_name` / `edge_ipport` 供排障使用;`updated_at` 表示\"最近一次被观测到\",而非实时在线指标。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-targets-list",
- "metadata": {
- "sidebarTitle": "监控对象列表"
- }
- }
- }
- },
- "/monit/tools/catalog": {
- "post": {
- "description": "根据 `target_locator`(host)查询该监控对象上 monit-agent 当前暴露的工具能力。返回每个工具的名称、描述以及 JSON-Schema `input_schema`。配合 `/monit/tools/invoke` 驱动 AI-SRE 的工具调用。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "operationId": "monit-read-tools-catalog",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "account_id": 10001,
- "target_locator": "web-01"
- },
- "schema": {
- "$ref": "#/components/schemas/ToolCatalogRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "target": {
- "kind": "host",
- "locator": "web-01"
- },
- "tools": [
- {
- "description": "Returns a bounded overview of host health: CPU usage and load, memory and swap utilisation, disk and network counters, and top processes.",
- "input_schema": {
- "additionalProperties": false,
- "properties": {},
- "type": "object"
- },
- "name": "os.overview",
- "target_kind": "host"
- },
- {
- "description": "Checks TCP reachability of a host:port from the target, reporting connect latency.",
- "input_schema": {
- "additionalProperties": false,
- "properties": {
- "host": {
- "type": "string"
- },
- "port": {
- "type": "integer"
- }
- },
- "required": [
- "host",
- "port"
- ],
- "type": "object"
- },
- "name": "net.tcp_ping",
- "target_kind": "host"
- }
- ]
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolCatalogResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "成功"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "查询监控对象工具能力清单",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 使用 `target_locator` 标识监控对象;`target_kind` 可选,省略时按当前监控对象路由自动推断。\n- 若同一 locator 匹配多个 kind,响应为 HTTP 200,`data.error.code = \"ambiguous_target_kind\"`,并附带 `target_kinds` 列表——请带上显式的 `target_kind` 重试。\n- 工具能力清单是候选能力视图,并非执行保证。目标 Agent 可能在拿到清单与发起调用之间下线,本地 Agent 策略也可能在调用时拦截某些工具。\n- 每个工具条目只返回 `name`、`target_kind`、`description` 和 `input_schema`,不会暴露工具版本、输出契约、目录版本或执行限制。\n- 业务错误(`target_unavailable`、`timeout`、`forward_failed`、`invalid_tool_result`、`ambiguous_target_kind`)以 HTTP 200 返回,`data.error` 存在且 `data.tools = []`。只有协议、鉴权和内部错误才使用标准错误信封。\n- 响应采用**稀疏字段**:成功时 `error` 直接省略而非返回 `null`;当 locator 无法唯一解析时,`target` 不输出。`tools` 字段恒存在。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-tools-catalog",
- "metadata": {
- "sidebarTitle": "查询监控对象工具能力清单"
- }
- }
- }
- },
- "/monit/tools/invoke": {
- "post": {
- "description": "在单个监控对象上并发调用至多 8 个 monit-agent 工具。结果按入参 `tools` 数组顺序返回。长耗时——单个工具在 Agent 上有自己的超时,整体请求可能耗时数十秒。 Agent 目标仅支持 host。远端数据源取证使用 /monit/datasource/tools/invoke 和 datasource_id。",
- "operationId": "monit-read-tools-invoke",
- "requestBody": {
- "content": {
- "application/json": {
- "example": {
- "account_id": 10001,
- "target_locator": "web-01",
- "tools": [
- {
- "params": {},
- "tool": "os.overview"
- },
- {
- "params": {
- "host": "10.0.0.10",
- "port": 3306
- },
- "tool": "net.tcp_ping"
- }
- ]
- },
- "schema": {
- "$ref": "#/components/schemas/ToolInvokeRequest"
- }
- }
- },
- "required": true
- },
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "example": {
- "data": {
- "results": [
- {
- "data": {
- "cpu": {
- "cores": 4,
- "idle_pct": 67.34,
- "iowait_pct": 1.01,
- "system_pct": 3.52,
- "usage_pct": 32.66,
- "user_pct": 28.14
- },
- "load": {
- "load1": 1.79,
- "load15": 1.67,
- "load5": 1.83,
- "runnable_procs": 7,
- "total_procs": 1036
- },
- "sample_interval_sec": 0.5
- },
- "params": {},
- "summary": "os.overview cpu=32.66% mem=74.46% swap=not_configured oom_kill_since_boot=2 load1=1.79",
- "tool": "os.overview",
- "tool_version": "0.6.0"
- },
- {
- "error": {
- "code": "timeout",
- "message": "tool \"net.tcp_ping\" exceeded 8000ms"
- },
- "params": {
- "host": "10.255.255.1",
- "port": 3306
- },
- "tool": "net.tcp_ping",
- "tool_version": "0.1.0"
- }
- ],
- "target": {
- "kind": "host",
- "locator": "web-01"
- }
- },
- "request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
- },
- "schema": {
- "allOf": [
- {
- "$ref": "#/components/schemas/SuccessEnvelope"
- },
- {
- "properties": {
- "data": {
- "$ref": "#/components/schemas/ToolInvokeResponse"
- }
- },
- "type": "object"
- }
- ]
- }
- }
- },
- "description": "成功"
- },
- "400": {
- "$ref": "#/components/responses/BadRequest"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/TooManyRequests"
- },
- "500": {
- "$ref": "#/components/responses/ServerError"
- }
- },
- "summary": "调用监控对象工具",
- "tags": [
- "Monitors/诊断分析"
- ],
- "x-mint": {
- "content": "## 调用限制\n\n| 项 | 值 |\n| ------ | ----- |\n| 速率限制 | **600 次/分钟**;**10 次/秒** 每账户 |\n| 权限 | 任意有效的 `app_key`(只读;不受特定权限分类约束) |\n\n## 使用说明\n\n- 单次调用至多 **8** 个工具(`MaxToolsPerInvoke`);超出需在客户端拆分。8 个工具的上限与单监控对象 Agent 的并发能力对齐。\n- 工具在 Agent 上并行执行;webapi 返回的 `results[]` 与请求中的 `tools[]` 顺序对齐。\n- 长耗时:客户端超时至少设置 **35 秒**。该接口面向 AI-SRE / 人工排障流程,不适用于交互式 UI。\n- 请求级错误(`target_unavailable`、`ambiguous_target_kind`、`forward_failed`)以 HTTP 200 返回,`data.error` 不为空,`data.results = []`。\n- 单工具失败以 HTTP 200 返回,`data.error` 不输出,`results[i].error` 被填充——务必同时检查**三层**(外层信封 `error`、`data.error`、再到每个 `results[i].error`)。\n- 响应采用**稀疏字段**:字段不存在即表示为空。成功时 `error` 直接省略而非返回 `null`;失败时 `data`、`summary`、`truncated` 均不输出。不要依赖占位的 `null` 字段做判断;当 locator 无法唯一解析时,`target` 同样不会出现。\n- `results[i].data` 是 Tool 的业务数据,monit-agent 的 result envelope **已被解开**——不会出现嵌套的 `data.data`。一行摘要位于 `results[i].summary`;`results[i].truncated`(内含 `reason`)仅在结果确实被截断时出现。\n- `results[i].params` 回显 webapi 收到的该 Tool 调用参数,便于在批量调用中关联结果——即使其中某个 Tool 失败也能对上号。\n- 按 `/monit/tools/catalog` 返回的 `input_schema` 构造 `tools[].params`。对于无参工具,务必显式传 `params: {}`。",
- "href": "/zh/api-reference/monitors/diagnostics/monit-read-tools-invoke",
- "metadata": {
- "sidebarTitle": "调用监控对象工具"
- }
- }
- }
- },
"/oncall/license/list": {
"post": {
"description": "查询当前账户中正在使用固定或临时 On-call 许可的人员。",
diff --git a/docs.json b/docs.json
index 7c1ae28f..015e06bf 100644
--- a/docs.json
+++ b/docs.json
@@ -2027,16 +2027,6 @@
"zh/monitors/alert-rules/description-template"
]
},
- {
- "group": "监控对象",
- "icon": "desktop",
- "pages": [
- "zh/monitors/targets/overview",
- "zh/monitors/targets/install-agent",
- "zh/monitors/targets/configure-targets",
- "zh/monitors/targets/reload-and-verify"
- ]
- },
{
"group": "活跃告警",
"icon": "bell",
@@ -2526,10 +2516,7 @@
"icon": "stethoscope",
"pages": [
"POST /monit/query/data",
- "POST /monit/query/diagnose",
- "POST /monit/tools/catalog",
- "POST /monit/tools/invoke",
- "POST /monit/targets"
+ "POST /monit/query/diagnose"
]
}
]
@@ -3427,16 +3414,6 @@
"en/monitors/alert-rules/description-template"
]
},
- {
- "group": "Monitoring Objects",
- "icon": "desktop",
- "pages": [
- "en/monitors/targets/overview",
- "en/monitors/targets/install-agent",
- "en/monitors/targets/configure-targets",
- "en/monitors/targets/reload-and-verify"
- ]
- },
{
"group": "Active Alerts",
"icon": "bell",
@@ -3926,10 +3903,7 @@
"icon": "stethoscope",
"pages": [
"POST /monit/query/data",
- "POST /monit/query/diagnose",
- "POST /monit/tools/catalog",
- "POST /monit/tools/invoke",
- "POST /monit/targets"
+ "POST /monit/query/diagnose"
]
}
]
diff --git a/en/ai-sre/skills.mdx b/en/ai-sre/skills.mdx
index 00be6251..1ab1bcb9 100644
--- a/en/ai-sre/skills.mdx
+++ b/en/ai-sre/skills.mdx
@@ -104,7 +104,7 @@ Go to **Plugins → Skill** and click **Browse Marketplace** to open the skill *
-New accounts are automatically pre-installed with a set of official Marketplace templates: `browser-automation` (a browser automation CLI for operating websites, dashboards, and monitoring UIs), `mcp-builder` (guides you through building an MCP server), `monit-agent` (target-side diagnostics for Flashduty Monit alerts), `monit-query` (Monit data source queries), and `skill-creator` (see "Create in conversation" below). These pre-installed skills behave exactly like manually installed skills — you can enable/disable, uninstall, or update them to the latest version under "Management and Inspection" below.
+New accounts are automatically pre-installed with a set of official Marketplace templates: `browser-automation` (a browser automation CLI for operating websites, dashboards, and monitoring UIs), `mcp-builder` (guides you through building an MCP server), `monit-query` (Monit data source queries), and `skill-creator` (see "Create in conversation" below). These pre-installed skills behave exactly like manually installed skills — you can enable/disable, uninstall, or update them to the latest version under "Management and Inspection" below.
diff --git a/en/changelog/changelog.mdx b/en/changelog/changelog.mdx
index 4f1aae03..d183f6f1 100644
--- a/en/changelog/changelog.mdx
+++ b/en/changelog/changelog.mdx
@@ -31,7 +31,7 @@ Monit datasources gain **datasource diagnostics**: run structured read-only name
- **Five new diagnostic-only datasource types**: Redis (Node / Sentinel), MongoDB (Mongod / Mongos), and Kafka — for diagnostics only, they never evaluate alerts; address formats are a single `host:port` (bracket IPv6) or 1–32 unique comma-separated Kafka bootstrap addresses
- **Switch semantics split**: `alerting_enabled` (whether the datasource may evaluate alerts; always false for diagnostic-only types, and disabling it is rejected with a conflict while enabled rules reference the datasource) is now independent of `enabled` (business execution, on by default at creation)
-See [Data Sources](/en/monitors/data-sources/data-sources) and [Monitoring Targets](/en/monitors/targets/overview).
+See [Data Sources](/en/monitors/data-sources/data-sources).
diff --git a/en/developer/cli.mdx b/en/developer/cli.mdx
index 78d9ce6f..85a9e681 100644
--- a/en/developer/cli.mdx
+++ b/en/developer/cli.mdx
@@ -461,32 +461,6 @@ flashduty session export --include-subagents > session.ndjson
|------|-------------|
| `--include-subagents` | After each `subagent_dispatch`, recursively inline that subagent's own full event stream |
-### monit-agent — Host diagnostics
-
-Run live diagnostics on a **host** through flashmonit agents, without needing a shell login on the target machine. For database/middleware diagnosis use `monit datasource-tools-invoke` (see below) — database service endpoints are not agent targets.
-
-```bash
-flashduty monit-agent catalog --target-locator # List diagnostic tools available for a host
-flashduty monit-agent invoke --target-locator --data '' # Run up to 8 tools concurrently
-```
-
-- `--target-locator` (required): a registered host's **internal IP or hostname**.
-- `--target-kind`: accepts `host` only; omit it to use host routing. Any other value (e.g. `mysql`, `redis`) is rejected: `monit-agent supports host targets only; use monit datasource-tools-invoke for datasource diagnostics`.
-
-`invoke` takes a `--data` JSON payload listing the tools to run (`params` is optional and defaults to `{}`), up to 8 concurrently; `--target-locator` / `--target-kind` override matching keys in `--data`:
-
-```bash
-flashduty monit-agent invoke --target-locator '10.0.0.1' \
- --data '{"tools":[{"tool":"os.overview"},{"tool":"os.top_processes","params":{"top_n":10}}]}'
-```
-
-For params JSON containing quotes or commas, pass `--data -` and supply the body via a stdin heredoc to avoid shell-quoting issues:
-
-```bash
-flashduty monit-agent invoke --target-locator 'web-01' --data - <<'FDUTY'
-{"tools":[{"tool":"os.overview"}]}
-FDUTY
-```
### monit-query — Monitoring datasource queries
diff --git a/en/monitors/data-sources/data-sources.mdx b/en/monitors/data-sources/data-sources.mdx
index 83b18ff6..88026296 100644
--- a/en/monitors/data-sources/data-sources.mdx
+++ b/en/monitors/data-sources/data-sources.mdx
@@ -30,7 +30,7 @@ Monitors supports the following 15 data source types:
| **MongoDB Mongos** (`mongodb_mongos`) | MongoDB sharded cluster router, diagnostic-only |
| **Kafka** (`kafka`) | Apache Kafka cluster, diagnostic-only |
-Of these, the 5 **diagnostic-only types** — Redis Node, Redis Sentinel, MongoDB (mongod/mongos) and Kafka — are used for database and middleware diagnostics (see [Host diagnostics and data source diagnostics](/en/monitors/targets/overview#host-diagnostics-and-data-source-diagnostics)) and cannot evaluate alerts: `alerting_enabled` cannot be enabled (always `false`), so they cannot participate in alert rule queries and evaluation. Connection address requirements are covered in [Data source type configuration](#data-source-type-configuration).
+Of these, the 5 **diagnostic-only types** — Redis Node, Redis Sentinel, MongoDB (mongod/mongos) and Kafka — are used for database and middleware diagnostics and cannot evaluate alerts: `alerting_enabled` cannot be enabled (always `false`), so they cannot participate in alert rule queries and evaluation. Connection address requirements are covered in [Data source type configuration](#data-source-type-configuration).
## Data source list
diff --git a/en/monitors/targets/configure-targets.mdx b/en/monitors/targets/configure-targets.mdx
deleted file mode 100644
index e8cc4ce6..00000000
--- a/en/monitors/targets/configure-targets.mdx
+++ /dev/null
@@ -1,145 +0,0 @@
----
-title: "Configure host diagnostic tools"
-description: "Configure host collection, Shell execution policies, and tool switches in agent.yaml"
-keywords: ["agent.yaml", "host diagnostics", "shell.exec", "tool policy"]
----
-
-The installation package includes a default `agent.yaml`. Keep the host configuration for initial onboarding. After the host appears in the console, adjust collection settings and tool policies as needed.
-
-Agent configuration contains `host` and `tool_policy` settings. Edge data sources handle database and middleware connections and diagnostics. See [Data source configuration](/en/monitors/data-sources/data-sources).
-
-## Basic configuration example
-
-Adjust the following host configuration as needed:
-
-```yaml
-host:
- sample_interval: 2s
-
- disk:
- extra_exclude_mount_points: []
- extra_exclude_fs_types: []
- statfs_timeout: 1s
- top_n: 20
-
- disk_io:
- top_n: 5
- skip_loop: true
- skip_partitions: true
- dm_exclude_patterns:
- - "docker-*"
- - "*-pool"
-
- network_io:
- top_n: 5
- exclude_patterns:
- - "lo"
- - "veth*"
- - "docker*"
- - "br-*"
- - "virbr*"
- - "flannel*"
- - "cali*"
- - "cni*"
- - "tun*"
- - "tap*"
-
- top_processes:
- default_top_n: 10
- max_top_n: 50
- include_cmdline: false
-
- shell_exec:
- enabled: true
- unknown_command_policy: require_approval
- default_max_lines: 200
- cat_max_file_size: 20971520
- user_allow_list: []
-
-tool_policy:
- disabled_tools: []
-
-```
-
-## Host identity and tools
-
-The Agent registers one host object at startup. Set the `--agent.hostLocator` startup parameter to a stable private IP or DNS name, or omit it to use the host's default outbound IP. Restart the Agent after changing this parameter; SIGHUP does not change the host identity.
-
-| Tool | Purpose |
-|---|---|
-| `os.overview` | Inspect host CPU, memory, disk, and network state. |
-| `os.top_processes` | Inspect processes with high resource usage. |
-| `shell.exec` | Run host or container diagnostic commands under the local policy. |
-| `net.tcp_ping` | Test TCP connectivity and connection latency to a target port from this host. |
-| `http.get` | Send bounded HTTP GET/HEAD requests from this host and inspect responses and phase timing. |
-
-Available tools depend on the Agent version and local configuration. `shell.exec` requires `host.shell_exec.enabled`; tools listed in `tool_policy.disabled_tools` are excluded from the available tool catalog.
-
-TCP and HTTP probes describe this host's network access to a target service. They do not create database or middleware monitoring objects.
-
-## host
-
-`host` controls the collection behavior for host diagnostics. It usually does not need to be changed for first-time onboarding.
-
-| Config | Recommended value | Description |
-|---|---|---|
-| `sample_interval` | `2s` or `3s` | Sampling interval for CPU, disk I/O, network I/O, and similar metrics. |
-| `disk.statfs_timeout` | `1s` | Prevents abnormal mount points from slowing down diagnostics. |
-| `disk.top_n` | `20` | Controls the number of file systems returned. |
-| `disk_io.top_n` | `5` | Controls the number of disk I/O devices returned. |
-| `network_io.top_n` | `5` | Controls the number of network interfaces returned. |
-| `top_processes.default_top_n` | `10` | Default number of processes returned. |
-| `top_processes.include_cmdline` | `false` | Does not return the full command line by default, reducing the risk of exposing passwords, tokens, or connection strings. |
-
-## shell_exec
-
-`shell_exec` controls whether the Agent allows controlled host diagnostic commands.
-
-```yaml
-host:
- shell_exec:
- enabled: true
- unknown_command_policy: require_approval
- default_max_lines: 200
- cat_max_file_size: 20971520
- user_allow_list: []
-```
-
-### Unknown command policy
-
-`host.shell_exec.unknown_command_policy` determines how commands that do not pass automatic safety rules, but meet the existing syntax and execution requirements, receive authorization. These "unknown commands" can include unrecognized read-only operations as well as operations that modify data or affect services.
-
-| Command category | `require_approval` (default) | `allow` |
-|---|---|---|
-| Known-safe operations | Execute automatically | Execute automatically |
-| Operations that match a permanent-deny rule | Reject | Reject |
-| Unknown operations | Execute after local root approval | Execute directly, without an approval session |
-
-Omitting the field or setting it to an empty string uses `require_approval`. The only valid values are `require_approval` and `allow`. Incorrect capitalization or spelling fails configuration validation.
-
-You can set this policy only in the Agent's local `agent.yaml`, not through the console or tool call parameters. It affects only `shell.exec`; it does not change Edge data source tool permissions or override `enabled: false` or `disabled_tools`.
-
-
-Setting the policy to `allow` authorizes unknown commands to execute directly with the permissions of the account running the Agent. This includes `docker exec` and `kubectl exec`. Their actual access depends on that account's container runtime permissions and Kubernetes credentials.
-
-Unknown commands can modify or delete data, access sensitive information, affect services, or invoke other programs. A compromised control plane can also use these capabilities. The Agent still enforces permanent-deny rules, syntax checks, timeouts, and output limits, but these rules cannot identify every indirect dangerous behavior of an unknown program.
-
-
-Recommendations:
-
-- Set `enabled: true` when AI-SRE needs live host diagnostics, and keep the default `require_approval` policy.
-- When you need to confirm unknown commands individually, have local root [approve each command](/en/monitors/targets/install-agent#approve-a-blocked-shell-command).
-- For a command that needs to run repeatedly, add the complete command to `user_allow_list` only after confirming that it is safe, read-only, and does not expose sensitive information.
-- Choose `allow` only if you accept the risks of executing unknown commands directly. It does not restrict write operations to a separate allowlist.
-
-Commands that match permanent-deny rules cannot be enabled through human approval, `user_allow_list`, or `allow`.
-
-To urgently disable a tool, use `tool_policy.disabled_tools`:
-
-```yaml
-tool_policy:
- disabled_tools:
- - shell.exec
-```
-
-After changing `shell_exec.enabled`, `shell_exec.unknown_command_policy`, or `tool_policy.disabled_tools`, send SIGHUP to reload the configuration without restarting the Agent. Policy changes apply to new calls; commands already running or awaiting approval retain their original behavior. See [Reload configuration and verify onboarding](/en/monitors/targets/reload-and-verify#change-the-unknown-command-policy).
diff --git a/en/monitors/targets/install-agent.mdx b/en/monitors/targets/install-agent.mdx
deleted file mode 100644
index 75f3f941..00000000
--- a/en/monitors/targets/install-agent.mdx
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: "Install monit-agent"
-description: "Download, start, and run monit-agent as a system service to onboard the first host monitoring object"
-keywords: ["monit-agent", "Agent installation", "Edge address", "system service", "monitoring objects"]
----
-
-This guide explains how to prepare onboarding information, install `monit-agent`, and start the Agent as a system service.
-
-## Before you begin
-
-Prepare the following information before installation:
-
-| Item | Description |
-|---|---|
-| Agent package download URL | `https://static.flashcat.cloud/monitagent/monitagent-v0.4.0-linux-amd64.tar.gz`. For ARM CPUs, replace `amd64` with `arm64`. |
-| Edge address | For example, `ws://edge.example.com:6868` or `wss://edge.example.com:6868`. Edge version must be `>= v0.47.0`. View the Edge list and installation method [here](https://console.flashcat.cloud/monit/engine/list). |
-| Local host object address | Use the current host's fixed private IP or DNS name, such as `10.0.1.12`. If omitted, the Agent uses the IP address associated with the local default route. |
-
-The Edge address must include a protocol prefix. Supported protocols are `ws://`, `wss://`, `http://`, and `https://`. Use `wss://` in production. `ws://` and `http://` can be used in internal networks.
-
-## Install monit-agent
-
-The following steps use the monit-agent `v0.4.0` Linux package.
-
-```bash
-sudo mkdir -p /opt/monit-agent
-cd /opt/monit-agent
-
-sudo curl -sfLO "https://static.flashcat.cloud/monitagent/monitagent-v0.4.0-linux-amd64.tar.gz"
-sudo tar -xzf monitagent-v0.4.0-linux-amd64.tar.gz --strip-components=1
-sudo chmod +x ./monitagent
-```
-
-After extraction, the directory should contain:
-
-```text
-/opt/monit-agent/monitagent
-/opt/monit-agent/agent.yaml
-```
-
-Confirm that the binary is executable:
-
-```bash
-/opt/monit-agent/monitagent --version
-```
-
-## Start in the foreground
-
-The minimum startup command is:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="ws://:" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator=""
-```
-
-| Parameter | Required | Description |
-|---|---|---|
-| `--agent.edgeAddresses` | Yes | The Edge address that the Agent connects to. |
-| `--agent.configFile` | Recommended | Path to the Agent configuration file. |
-| `--agent.hostLocator` | No | The current host object address displayed in the console. |
-
-If `--agent.hostLocator` is omitted, the Agent automatically selects the local default egress IP as the host object address. It is recommended to keep this value consistent with the machine identifier used by your monitoring system.
-
-## Configure multiple Edge addresses
-
-If there are multiple Edge addresses, separate them with commas:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="ws://edge-a.example.com:6872,ws://edge-b.example.com:6872" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-The Agent reconnects automatically. If the current connection is unavailable, it continues trying other Edge addresses.
-
-## Use Basic Auth or TLS
-
-If Basic Auth is enabled on Edge, pass both the username and password:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="wss://edge.example.com:6872" \
- --agent.edgeBasicUser="" \
- --agent.edgeBasicPass="" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-If Edge uses a private CA certificate, specify the CA file:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="wss://edge.example.com:6872" \
- --agent.edgeTLSCAFile="/etc/monit-agent/edge-ca.pem" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-When TLS parameters are configured, the Edge address should use `wss://` or `https://`.
-
-## Install as a system service
-
-After the foreground startup works, install the Agent as a system service:
-
-```bash
-cd /opt/monit-agent
-
-sudo ./monitagent \
- --agent.edgeAddresses="ws://:" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="" \
- --audit.dir="/var/log/monit-agent/audit" \
- --install
-
-sudo ./monitagent --start
-sudo ./monitagent --status
-```
-
-View logs:
-
-```bash
-sudo journalctl -u monitagent -f
-```
-
-If you modify the Edge address, Basic Auth, TLS parameters, or `hostLocator`, restart the Agent. After modifying `agent.yaml`, send SIGHUP to reload the configuration:
-
-```bash
-sudo systemctl kill --kill-who=main -s HUP monitagent
-```
-
-## Approve a blocked Shell command
-
-`shell.exec` automatically runs read-only diagnostic commands that meet its built-in safety rules. The approval steps below apply to the default `host.shell_exec.unknown_command_policy: require_approval` setting. With `allow`, unknown commands execute directly without an approval session. Read [Unknown command policy and risks](/en/monitors/targets/configure-targets#unknown-command-policy) before choosing a policy.
-
-Under the default policy, if a command does not pass automatic rules, does not match a permanent-deny rule, and you have confirmed that it is appropriate for the current machine, sign in to the Linux host running the Agent and open an approval session as root:
-
-```bash
-sudo /opt/monit-agent/monitagent shell-approval
-```
-
-Without an approval session, the Agent returns `approval_unavailable` and does not execute unknown commands. After opening a session, submit the diagnostic request again.
-
-After the session connects, it displays a waiting status. When commands need approval, the terminal shows only the commands and a ten-second countdown:
-
-- Press Enter to approve every command in the current batch.
-- Press `n` to reject every command in the current batch.
-- If you do not respond within ten seconds, the batch is rejected automatically. Concurrent commands that arrive later are queued and receive a full ten-second window after they are displayed.
-- Input while no command is pending does not execute anything; the terminal continues to display the waiting status.
-- Press `Ctrl-C` to close the approval session.
-
-Only one approval session can be active for an Agent. To take over an existing session, run:
-
-```bash
-sudo /opt/monit-agent/monitagent shell-approval --replace
-```
-
-Only root can open or replace a session. Pending commands are rejected if the Agent restarts or the session disconnects, and you must open a new session after a restart. Commands that match permanent-deny rules cannot be enabled through human approval.
-
-## Next steps
-
-After the Agent starts successfully, a host object usually appears in the console within a few seconds. Read [Configure host diagnostic tools](/en/monitors/targets/configure-targets) to adjust collection settings and tool policies, then follow [Reload configuration and verify onboarding](/en/monitors/targets/reload-and-verify).
-
-Edge data sources handle database and middleware diagnostics. You do not need to prepare remote accounts or connection settings for the Agent. See [Data source configuration](/en/monitors/data-sources/data-sources).
diff --git a/en/monitors/targets/overview.mdx b/en/monitors/targets/overview.mdx
deleted file mode 100644
index 20610052..00000000
--- a/en/monitors/targets/overview.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: "Monitoring Objects Overview"
-description: "Learn what Monitors monitoring objects are, what monit-agent does, and how objects automatically appear in the console"
-keywords: ["monitoring objects", "monit-agent", "AI-SRE", "object onboarding", "live diagnostics"]
----
-
-Monitoring objects are the targets that Monitors can query and diagnose. After `monit-agent` is installed and started, the platform automatically displays the host object it reports. Edge queries and diagnoses databases and middleware through Monitors data sources, independently of Agent configuration.
-
-## Why monit-agent is needed
-
-Traditional observability data usually includes metrics, logs, traces, and alert events. These data types help you understand what happened, but real troubleshooting often requires checking the live environment, for example:
-
-- Which processes on the current machine are using high CPU or memory.
-- Whether a port, domain, or service can be reached from the target machine.
-- Whether disks, mount points, network interfaces, or connection counts are abnormal.
-
-Collected data alone may not answer these questions. In many cases, you need to query the live environment. `monit-agent` is designed for this scenario.
-
-In AI-SRE scenarios, you can think of the LLM as the diagnostic brain, and `monit-agent` as the execution endpoint deployed in your environment. After a user asks a question in natural language, the LLM understands the question, selects suitable diagnostic tools, and explains the result. `monit-agent` runs controlled diagnostics on the target host and returns structured results to the system.
-
-
-The Agent controls execution through tool policies, parameter validation, command restrictions, timeouts, and output limits. It also supports sensitive data masking and local auditing. Unknown `shell.exec` commands require local root approval by default. With `allow`, these commands run directly as the Agent account and can modify data or affect services. Read [Unknown command policy](/en/monitors/targets/configure-targets#unknown-command-policy) before configuring it.
-
-
-## Technical Architecture
-
-```mermaid
-flowchart TD
- center["SaaS Center / AI-SRE"] <-->|WebSocket| edge["monit-edge"]
- edge <-->|WebSocket| agent["monit-agent"]
- agent --> host["Host tools"]
- edge --> datasource["Data source queries / Database and middleware diagnostics"]
-```
-
-`monit-agent` connects to `monitedge` in the same network region over WebSocket. `monitedge` then connects to the SaaS Center over WebSocket. In most deployments, each network region has one `monitedge` cluster, and multiple `monitedge` instances with the same `EngineName` are treated as one engine cluster.
-
-## Host diagnostics and data source diagnostics
-
-| Diagnostic scope | Setup | Execution location |
-|---|---|---|
-| Live host CPU, memory, processes, disks, networking, and container state | Install an Agent on the target host and configure host tools as needed | `monit-agent` on the target host |
-| MySQL, Redis, PostgreSQL, MongoDB, Kafka, Elasticsearch, and other services | Configure the corresponding Monitors data source | `monit-edge` with access to the data source |
-
-The Agent provides five host tools: `os.overview`, `os.top_processes`, `shell.exec`, `net.tcp_ping`, and `http.get`. The available set depends on the Agent version and local policy. TCP/HTTP probes provide connectivity evidence from the host; data source diagnostics inspect database internals.
-
-Agent host tools act on the host only: `tools-catalog` and `tools-invoke` support only the `host` target kind, and database service endpoints are not Agent targets. For database and middleware diagnostics, use the **datasource tools** instead (see below), executed by the Edge that can reach the data source. Datasource tool invocation requires the data source `enabled=true`; `alerting_enabled=false` does not block diagnostics.
-
-### Datasource tools
-
-Every configured data source provides a set of named diagnostic tools, prefixed by the data source type, for example:
-
-| Data source type | Example tools |
-|------------------|---------------|
-| MySQL | `mysql.overview`, `mysql.lock_contention` |
-| PostgreSQL | `postgres.activity` |
-| Redis | `redis_node.slowlog` |
-| Kafka | `kafka.consumer_lag` |
-| Elasticsearch | `elasticsearch.cat` |
-| Prometheus | `prometheus.metric_trends` |
-| Loki / VictoriaLogs | `loki.log_patterns`, `victorialogs.log_patterns` |
-
-- **One call invokes one named tool**, targeted by data source ID (`datasource_id`). The same connection address configured as multiple data source IDs means different credentials or configurations and must remain separate.
-- **No tool catalog**: tool names and parameters come from the type-specific reference — do not guess parameters. The `mysql.query` and `postgres.query` tools have been removed; use data source queries (monit-query Data) for free-form SQL.
-- **Version gate**: all currently online routable Edge sessions in the selected cluster must support the v0.71.0 base invoke protocol; individual tools may require a newer implementation. See the error reasons below when the gate is not met.
-- **No automatic fallback**: the endpoint provides no tool catalog, automatic replay, or fallback to Agent or the legacy diagnose flow. On version-related errors, upgrade Edge rather than restarting or rotating Edges. Request body limit 128 KiB; complete success response limit 1 MiB; tool timeout at most 25 seconds.
-
-Errors are returned via `error.reason`:
-
-| reason | Meaning |
-|--------|---------|
-| `edge_upgrade_required` | Edge version below v0.71.0; upgrade the Edges in the cluster |
-| `mixed_edge_versions` | Mixed Edge versions in the cluster with some instances outdated; upgrade them uniformly |
-| `no_active_edge` | No online routable Edge session in the cluster |
-| `tool_not_supported` | The tool is not supported by the current implementation |
-| `invalid_request` | Invalid request parameters; fix the parameters and retry |
-| `source_too_large` | Request body exceeds 128 KiB; narrow the request |
-| `result_too_large` | Result exceeds 1 MiB; narrow the request |
-| `datasource_disabled` | The data source is disabled (`enabled=false`) |
-| `datasource_not_found` | The data source does not exist |
-
-
-
-Use stable and recognizable values for object identifiers (`target_locator`), such as fixed private IP addresses or DNS names. Do not use addresses that only make sense locally, such as `localhost` or `127.0.0.1`, as the displayed object address.
-
-
-## How objects appear in the console
-
-Monitoring objects do not need to be created manually in the console. Install and start `monit-agent` on the target machine. After the Agent successfully connects to Edge, it reports the current host identity, and the console displays that host automatically.
-
-If a new user enters the monitoring object page and sees an empty list, it usually means no Agent has connected successfully. Each Agent reports its own host object. Manage database and middleware connections through [data sources](/en/monitors/data-sources/data-sources).
-
-## Recommended onboarding path
-
-
-
-Onboard the host object first, confirm that the Agent can connect to Edge, and verify that the current host appears in the console.
-
-
-Adjust host collection settings, Shell execution policies, and disabled tools in `agent.yaml`.
-
-
-Confirm that host tools are available. Configure a separate data source when you need database or middleware diagnostics.
-
-
-
-## Related docs
-
-
-
- Prepare the Edge address, download the Agent, and start it in the foreground or as a system service.
-
-
- Configure host collection, Shell execution policies, and tool switches.
-
-
diff --git a/en/monitors/targets/reload-and-verify.mdx b/en/monitors/targets/reload-and-verify.mdx
deleted file mode 100644
index 7642b2b6..00000000
--- a/en/monitors/targets/reload-and-verify.mdx
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: "Reload configuration and verify onboarding"
-description: "Learn how monit-agent configuration changes take effect and how to troubleshoot monitoring objects that do not appear in the console"
-keywords: ["monit-agent", "configuration reload", "SIGHUP", "restart Agent", "onboarding verification", "troubleshooting"]
----
-
-Different `monit-agent` configuration changes take effect in different ways. This guide explains when to reload, when to restart, and how to confirm that monitoring objects have been onboarded successfully.
-
-## Configuration reload rules
-
-| Change | How it takes effect |
-|---|---|
-| `host` collection, `tool_policy` settings in `agent.yaml` | Send SIGHUP to reload |
-| `host.shell_exec.unknown_command_policy` | Send SIGHUP to reload |
-| Edge address, Basic Auth, TLS, `hostLocator`, audit directory | Restart the Agent |
-
-Send SIGHUP to the Agent's main process:
-
-```bash
-sudo systemctl kill --kill-who=main -s HUP monitagent
-```
-
-Restart the service:
-
-```bash
-sudo systemctl restart monitagent
-```
-
-
-Use SIGHUP after changing host configuration in `agent.yaml`. Restart is needed only when startup parameters or service-level parameters change. SIGHUP does not redetect or change the host identity.
-
-
-After changing tool switches, a successful reload updates the diagnostic tools currently available from the Agent. No restart is required.
-
-## Change the unknown command policy
-
-After editing `host.shell_exec.unknown_command_policy` in `agent.yaml`, send SIGHUP to the Agent's main process. The Agent reloads and validates the configuration. New calls use the new policy after a successful reload. If validation fails, the Agent keeps the previous configuration and logs the reason. Editing the file alone does not trigger a reload.
-
-- Change from `require_approval` to `allow`: newly submitted unknown commands no longer require approval. Commands already awaiting approval must still complete their original approval process.
-- Change from `allow` to `require_approval`: newly submitted unknown commands require approval. Commands already running are not terminated, and completed writes are not rolled back.
-- Known-safe operations continue to execute automatically. Operations that match permanent-deny rules remain blocked.
-
-See [Unknown command policy](/en/monitors/targets/configure-targets#unknown-command-policy) for the policy values and risks. To check whether the reload succeeded, view the logs:
-
-```bash
-sudo journalctl -u monitagent -n 100
-```
-
-## Verify successful onboarding
-
-After the Agent starts, a host object usually appears on the monitoring object page within a few seconds.
-
-If the page is still empty, check the following in order:
-
-
-
-
-```bash
-sudo systemctl status monitagent
-```
-
-
-
-Make sure the address includes `ws://` or `wss://`, and confirm that the Edge for the current tenant is online.
-
-
-
-```bash
-sudo journalctl -u monitagent -n 100
-```
-
-
-
-If `agent.yaml` was modified, check for YAML syntax errors, unsupported fields, or unknown tool names. Invalid configuration prevents startup; a failed reload keeps the current configuration.
-
-
-
-## Checks when objects do not appear
-
-| Symptom | What to check |
-|---|---|
-| Monitoring object page is empty | First confirm whether the host object appears. If no host object appears, check the Agent process, Edge address, and logs first. |
-| You need database or middleware diagnostics | Manage the connection through [data sources](/en/monitors/data-sources/data-sources). Use the corresponding data source tools to run diagnostics through Edge. |
-| The host identity is incorrect | Set `--agent.hostLocator` to a stable private IP or DNS name, then restart the Agent. |
-
-## Recommended onboarding order
-
-1. Onboard only the host object first.
-2. After the host appears in the console, adjust host collection, Shell execution policies, and tool switches.
-3. Verify host diagnostic results. Configure a separate data source for database and middleware diagnostics.
-
-## Related docs
-
-
-
- Learn how monitoring objects and monit-agent work.
-
-
- View host collection and tool policy configuration for agent.yaml.
-
-
diff --git a/en/openapi/api-catalog.mdx b/en/openapi/api-catalog.mdx
index 70931196..8bfcaddd 100644
--- a/en/openapi/api-catalog.mdx
+++ b/en/openapi/api-catalog.mdx
@@ -324,9 +324,6 @@ All endpoint URLs use `https://api.flashcat.cloud` as the base, authenticated vi
| :--- | :--- | :--- |
| POST | [`/monit/query/data`](/en/api-reference/monitors/diagnostics/monit-read-query-data) | Query structured data |
| POST | [`/monit/query/diagnose`](/en/api-reference/monitors/diagnostics/monit-read-query-diagnose) | Diagnose data source |
-| POST | [`/monit/tools/catalog`](/en/api-reference/monitors/diagnostics/monit-read-tools-catalog) | List target tool catalog |
-| POST | [`/monit/tools/invoke`](/en/api-reference/monitors/diagnostics/monit-read-tools-invoke) | Invoke target tools |
-| POST | [`/monit/targets`](/en/api-reference/monitors/diagnostics/monit-read-targets-list) | List monitored targets |
### Monitor utilities
diff --git a/zh/ai-sre/skills.mdx b/zh/ai-sre/skills.mdx
index d0cd6a9d..6ebf0b4a 100644
--- a/zh/ai-sre/skills.mdx
+++ b/zh/ai-sre/skills.mdx
@@ -104,7 +104,7 @@ AI SRE 运行时内置了几个 Skill,无需安装即可使用。`flashduty`
-新账户会自动预装一组官方 Marketplace 模板:`browser-automation`(浏览器自动化 CLI,用于操作网站/仪表盘/监控 UI)、`mcp-builder`(指导创建 MCP 服务器)、`monit-agent`(Flashduty Monit 告警的目标侧诊断)、`monit-query`(Monit 数据源查询)与 `skill-creator`(见下文「在对话中创建」)。这些预装 Skill 与手动安装的 Skill 完全一样,可以在下方「管理与检视」中启用/禁用、卸载或更新到最新版本。
+新账户会自动预装一组官方 Marketplace 模板:`browser-automation`(浏览器自动化 CLI,用于操作网站/仪表盘/监控 UI)、`mcp-builder`(指导创建 MCP 服务器)、`monit-query`(Monit 数据源查询)与 `skill-creator`(见下文「在对话中创建」)。这些预装 Skill 与手动安装的 Skill 完全一样,可以在下方「管理与检视」中启用/禁用、卸载或更新到最新版本。
diff --git a/zh/changelog/changelog.mdx b/zh/changelog/changelog.mdx
index ce417bd3..db10fc5f 100644
--- a/zh/changelog/changelog.mdx
+++ b/zh/changelog/changelog.mdx
@@ -31,7 +31,7 @@ SAML2.0 / OIDC / CAS 协议的 SSO 设置页新增**同步配置**区块,登
- **新增 5 种诊断型数据源类型**:Redis(Node / Sentinel)、MongoDB(Mongod / Mongos)、Kafka——仅用于诊断,不参与告警规则评估;地址格式为单个 `host:port`(IPv6 用方括号)或 1–32 个去重逗号分隔的 Kafka 引导地址
- **开关语义拆分**:`alerting_enabled`(是否可评估告警,诊断型类型固定为 false,存在引用它的启用规则时关闭会被拒绝)与 `enabled`(业务执行,创建时默认开启)相互独立
-详见 [数据源](/zh/monitors/data-sources/data-sources) 与 [监控目标](/zh/monitors/targets/overview)。
+详见 [数据源](/zh/monitors/data-sources/data-sources)。
diff --git a/zh/developer/cli.mdx b/zh/developer/cli.mdx
index a0228861..98deb0cc 100644
--- a/zh/developer/cli.mdx
+++ b/zh/developer/cli.mdx
@@ -461,32 +461,6 @@ flashduty session export --include-subagents > session.ndjson
|------|------|
| `--include-subagents` | 在每条 `subagent_dispatch` 之后递归内联该子智能体自身的完整事件流 |
-### monit-agent — 主机在线诊断
-
-通过 flashmonit 代理对**主机**执行在线诊断,无需登录目标机器。数据库/中间件诊断请改用 `monit datasource-tools-invoke`(见下文),数据库服务端点不是 Agent 目标。
-
-```bash
-flashduty monit-agent catalog --target-locator # 列出该主机可用的诊断工具
-flashduty monit-agent invoke --target-locator --data '' # 并发执行最多 8 个诊断工具
-```
-
-- `--target-locator`(必填):**已注册主机的内网 IP 或主机名**。
-- `--target-kind`:仅接受 `host`,省略时按主机路由;传入其它取值(如 `mysql`、`redis`)会被拒绝:`monit-agent supports host targets only; use monit datasource-tools-invoke for datasource diagnostics`。
-
-`invoke` 通过 `--data` 指定要运行的工具列表(`params` 可省略,默认 `{}`),最多 8 个并发;`--target-locator` / `--target-kind` 会覆盖 `--data` 中的同名字段:
-
-```bash
-flashduty monit-agent invoke --target-locator '10.0.0.1' \
- --data '{"tools":[{"tool":"os.overview"},{"tool":"os.top_processes","params":{"top_n":10}}]}'
-```
-
-对于包含引号或逗号的参数 JSON,推荐用 heredoc 通过 stdin 传入(`--data -`):
-
-```bash
-flashduty monit-agent invoke --target-locator 'web-01' --data - <<'FDUTY'
-{"tools":[{"tool":"os.overview"}]}
-FDUTY
-```
### monit-query — 监控数据源查询
diff --git a/zh/monitors/data-sources/data-sources.mdx b/zh/monitors/data-sources/data-sources.mdx
index 2f31218f..1dcfd3fa 100644
--- a/zh/monitors/data-sources/data-sources.mdx
+++ b/zh/monitors/data-sources/data-sources.mdx
@@ -30,7 +30,7 @@ Monitors 支持以下 15 种数据源类型:
| **MongoDB Mongos**(`mongodb_mongos`) | MongoDB 分片集群路由,仅诊断类型 |
| **Kafka**(`kafka`) | Apache Kafka 集群,仅诊断类型 |
-其中 Redis Node、Redis Sentinel、MongoDB(mongod/mongos)与 Kafka 这 5 种**仅诊断类型**用于数据库与中间件诊断(详见[主机诊断与数据源诊断](/zh/monitors/targets/overview#主机诊断与数据源诊断)),不能用于告警评估:它们不允许开启 `alerting_enabled`(恒为 `false`),无法参与告警规则的查询与评估。连接地址等配置要求见[各数据源类型配置](#各数据源类型配置)。
+其中 Redis Node、Redis Sentinel、MongoDB(mongod/mongos)与 Kafka 这 5 种**仅诊断类型**用于数据库与中间件诊断,不能用于告警评估:它们不允许开启 `alerting_enabled`(恒为 `false`),无法参与告警规则的查询与评估。连接地址等配置要求见[各数据源类型配置](#各数据源类型配置)。
## 数据源列表
diff --git a/zh/monitors/targets/configure-targets.mdx b/zh/monitors/targets/configure-targets.mdx
deleted file mode 100644
index c2c0c42e..00000000
--- a/zh/monitors/targets/configure-targets.mdx
+++ /dev/null
@@ -1,145 +0,0 @@
----
-title: "配置主机诊断工具"
-description: "配置 agent.yaml 中的主机采集、Shell 执行策略和工具开关"
-keywords: ["agent.yaml", "主机诊断", "shell.exec", "工具策略"]
----
-
-安装包内包含默认 `agent.yaml`。首次接入时可以保持主机配置,确认主机出现在页面后,再按需调整采集参数和工具策略。
-
-Agent 配置包含 `host` 和 `tool_policy`。数据库和中间件的连接与诊断由 Edge 数据源承接,参见[数据源配置](/zh/monitors/data-sources/data-sources)。
-
-## 基础配置示例
-
-你可以根据需要调整以下主机配置:
-
-```yaml
-host:
- sample_interval: 2s
-
- disk:
- extra_exclude_mount_points: []
- extra_exclude_fs_types: []
- statfs_timeout: 1s
- top_n: 20
-
- disk_io:
- top_n: 5
- skip_loop: true
- skip_partitions: true
- dm_exclude_patterns:
- - "docker-*"
- - "*-pool"
-
- network_io:
- top_n: 5
- exclude_patterns:
- - "lo"
- - "veth*"
- - "docker*"
- - "br-*"
- - "virbr*"
- - "flannel*"
- - "cali*"
- - "cni*"
- - "tun*"
- - "tap*"
-
- top_processes:
- default_top_n: 10
- max_top_n: 50
- include_cmdline: false
-
- shell_exec:
- enabled: true
- unknown_command_policy: require_approval
- default_max_lines: 200
- cat_max_file_size: 20971520
- user_allow_list: []
-
-tool_policy:
- disabled_tools: []
-
-```
-
-## 主机标识与工具
-
-Agent 启动时注册一个主机对象。你可以通过启动参数 `--agent.hostLocator` 指定稳定的内网 IP 或 DNS 名称;省略时使用本机默认出口 IP。修改该参数后需要重启 Agent,SIGHUP 不会改变主机标识。
-
-| 工具 | 用途 |
-|---|---|
-| `os.overview` | 查看 CPU、内存、磁盘和网络等主机状态。 |
-| `os.top_processes` | 查看资源占用较高的进程。 |
-| `shell.exec` | 按本地策略执行主机或容器诊断命令。 |
-| `net.tcp_ping` | 从本机测试目标端口的 TCP 连通性和连接延迟。 |
-| `http.get` | 从本机发送受限的 HTTP GET/HEAD 请求,查看响应和分阶段耗时。 |
-
-实际可用工具取决于 Agent 版本和本地配置。`shell.exec` 需要启用 `host.shell_exec.enabled`;`tool_policy.disabled_tools` 中列出的工具不会出现在可用工具目录中。
-
-TCP 和 HTTP 探测反映当前主机访问目标服务的网络情况,不会创建数据库或中间件监控对象。
-
-## host
-
-`host` 用于调整主机诊断时的采集行为。首次接入一般不需要修改。
-
-| 配置 | 建议值 | 说明 |
-|---|---|---|
-| `sample_interval` | `2s` 或 `3s` | CPU、磁盘 I/O、网络 I/O 等指标的采样时间。 |
-| `disk.statfs_timeout` | `1s` | 避免异常挂载点拖慢诊断。 |
-| `disk.top_n` | `20` | 控制返回的文件系统数量。 |
-| `disk_io.top_n` | `5` | 控制返回的磁盘 I/O 设备数量。 |
-| `network_io.top_n` | `5` | 控制返回的网卡数量。 |
-| `top_processes.default_top_n` | `10` | 默认返回的进程数量。 |
-| `top_processes.include_cmdline` | `false` | 默认不返回完整命令行,避免泄露密码、token 或连接串。 |
-
-## shell_exec
-
-`shell_exec` 控制 Agent 是否允许执行受控的主机诊断命令。
-
-```yaml
-host:
- shell_exec:
- enabled: true
- unknown_command_policy: require_approval
- default_max_lines: 200
- cat_max_file_size: 20971520
- user_allow_list: []
-```
-
-### 未知命令策略
-
-`host.shell_exec.unknown_command_policy` 控制未通过自动安全规则、但满足现有语法和执行限制的命令如何获得执行授权。这类“未知命令”既可能是未收录的只读操作,也可能修改数据或影响服务。
-
-| 命令分类 | `require_approval`(默认) | `allow` |
-|---|---|---|
-| 已知安全操作 | 自动执行 | 自动执行 |
-| 命中永久拒绝规则的操作 | 拒绝执行 | 拒绝执行 |
-| 未知操作 | 本机 root 审批后执行 | 直接执行,无需审批会话 |
-
-省略该字段或将其设为空字符串时,使用 `require_approval`。只有 `require_approval` 和 `allow` 是合法值;大小写或拼写错误会导致配置校验失败。
-
-你只能在 Agent 本地的 `agent.yaml` 中设置该策略,不能通过控制台或工具调用参数切换。它只影响 `shell.exec`,不会改变 Edge 数据源工具的权限,也不会覆盖 `enabled: false` 或 `disabled_tools`。
-
-
-将策略设置为 `allow`,表示授权未知命令以 Agent 的运行账号权限直接执行。这也包括 `docker exec`、`kubectl exec`,实际可访问范围取决于该账号的容器运行时权限和 Kubernetes 凭据。
-
-未知命令可能修改或删除数据、访问敏感信息、影响服务或调用其他程序;中心端被攻破时也可能利用这些能力。Agent 仍执行永久拒绝规则、语法检查、超时和输出限制,但这些规则不能完备识别任意未知程序的间接危险行为。
-
-
-建议:
-
-- 需要 AI-SRE 做主机现场诊断时,设置 `enabled: true`,并保留默认的 `require_approval` 策略。
-- 未知命令需要逐条确认时,由本机 root [人工审批该命令](/zh/monitors/targets/install-agent#人工审批被拦截的-shell-命令)。
-- 对于需要长期重复使用的命令,确认其安全、只读且不会输出敏感信息后,再将完整命令添加到 `user_allow_list`。
-- 只有在接受未知命令直接执行的风险时,才将策略改为 `allow`。它不提供一份限定写操作范围的白名单。
-
-命中永久拒绝规则的命令,不能通过人工审批、`user_allow_list` 或 `allow` 放开。
-
-如需紧急禁用某个工具,可以使用 `tool_policy.disabled_tools`:
-
-```yaml
-tool_policy:
- disabled_tools:
- - shell.exec
-```
-
-修改 `shell_exec.enabled`、`shell_exec.unknown_command_policy` 或 `tool_policy.disabled_tools` 后,发送 SIGHUP reload 即可生效,无需重启 Agent。策略切换对新调用生效;已开始执行或等待审批的命令保持原行为,详见[配置生效与接入验证](/zh/monitors/targets/reload-and-verify#切换未知命令策略)。
diff --git a/zh/monitors/targets/install-agent.mdx b/zh/monitors/targets/install-agent.mdx
deleted file mode 100644
index 9bdc692c..00000000
--- a/zh/monitors/targets/install-agent.mdx
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: "安装 monit-agent"
-description: "下载、启动并以系统服务方式运行 monit-agent,接入第一台主机监控对象"
-keywords: ["monit-agent", "Agent 安装", "Edge 地址", "系统服务", "监控对象"]
----
-
-本文说明如何准备接入信息、安装 `monit-agent`,并将 Agent 启动为系统服务。
-
-## 接入前准备
-
-开始安装前,请准备以下信息:
-
-| 准备项 | 说明 |
-|---|---|
-| Agent 安装包下载地址 | `https://static.flashcat.cloud/monitagent/monitagent-v0.4.0-linux-amd64.tar.gz`。如果是 arm 的 CPU,则把 `amd64` 换成 `arm64`。 |
-| Edge 地址 | 例如 `ws://edge.example.com:6868` 或 `wss://edge.example.com:6868`。Edge 版本需要 `>= v0.47.0`,Edge 列表和安装方法[点此查看](https://console.flashcat.cloud/monit/engine/list)。 |
-| 本机对象地址 | 建议使用当前主机的固定内网 IP 或 DNS 名称,例如 `10.0.1.12`。不指定的话默认会使用本机默认路由对应的 IP。 |
-
-Edge 地址必须带协议前缀,支持 `ws://`、`wss://`、`http://`、`https://`。生产环境建议使用 `wss://`,内网亦可使用 `ws://` 和 `http://`。
-
-## 安装 monit-agent
-
-以下步骤以 monit-agent `v0.4.0` 的 Linux 安装包为例。
-
-```bash
-sudo mkdir -p /opt/monit-agent
-cd /opt/monit-agent
-
-sudo curl -sfLO "https://static.flashcat.cloud/monitagent/monitagent-v0.4.0-linux-amd64.tar.gz"
-sudo tar -xzf monitagent-v0.4.0-linux-amd64.tar.gz --strip-components=1
-sudo chmod +x ./monitagent
-```
-
-解压后目录中应包含:
-
-```text
-/opt/monit-agent/monitagent
-/opt/monit-agent/agent.yaml
-```
-
-确认二进制可执行:
-
-```bash
-/opt/monit-agent/monitagent --version
-```
-
-## 前台启动
-
-最小启动命令如下:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="ws://:" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator=""
-```
-
-| 参数 | 是否必填 | 说明 |
-|---|---|---|
-| `--agent.edgeAddresses` | 是 | Agent 要连接的 Edge 地址。 |
-| `--agent.configFile` | 建议填写 | Agent 配置文件路径。 |
-| `--agent.hostLocator` | 否 | 页面上显示的当前主机对象地址。 |
-
-如果不填写 `--agent.hostLocator`,Agent 会自动选择本机默认出口 IP 作为主机对象地址。建议和你的监控系统中的机器标识保持一致。
-
-## 配置多个 Edge 地址
-
-如果有多个 Edge 地址,用英文逗号分隔:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="ws://edge-a.example.com:6872,ws://edge-b.example.com:6872" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-Agent 会自动重连。当前连接不可用时,会继续尝试其它 Edge 地址。
-
-## 使用 Basic Auth 或 TLS
-
-如果 Edge 开启了 Basic Auth,需要同时传入用户名和密码:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="wss://edge.example.com:6872" \
- --agent.edgeBasicUser="" \
- --agent.edgeBasicPass="" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-如果 Edge 使用私有 CA 证书,可以指定 CA 文件:
-
-```bash
-sudo /opt/monit-agent/monitagent \
- --agent.edgeAddresses="wss://edge.example.com:6872" \
- --agent.edgeTLSCAFile="/etc/monit-agent/edge-ca.pem" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="10.0.1.12"
-```
-
-配置 TLS 参数时,Edge 地址应使用 `wss://` 或 `https://`。
-
-## 安装为系统服务
-
-确认前台启动正常后,建议安装为系统服务:
-
-```bash
-cd /opt/monit-agent
-
-sudo ./monitagent \
- --agent.edgeAddresses="ws://:" \
- --agent.configFile="/opt/monit-agent/agent.yaml" \
- --agent.hostLocator="" \
- --audit.dir="/var/log/monit-agent/audit" \
- --install
-
-sudo ./monitagent --start
-sudo ./monitagent --status
-```
-
-查看日志:
-
-```bash
-sudo journalctl -u monitagent -f
-```
-
-如果修改了 Edge 地址、Basic Auth、TLS 参数或 `hostLocator`,需要重启 Agent。修改 `agent.yaml` 后,可以发送 SIGHUP 让 Agent 重新加载配置:
-
-```bash
-sudo systemctl kill --kill-who=main -s HUP monitagent
-```
-
-## 人工审批被拦截的 Shell 命令
-
-`shell.exec` 会自动执行符合内置安全规则的只读诊断命令。以下审批步骤适用于默认的 `host.shell_exec.unknown_command_policy: require_approval`。如果你设置为 `allow`,未知命令会直接执行,无需打开审批会话;选择前请阅读[未知命令策略及风险说明](/zh/monitors/targets/configure-targets#未知命令策略)。
-
-在默认策略下,如果某条命令未通过自动规则、没有命中永久拒绝规则,并且你确认它可以在当前机器上执行,可以提前登录 Agent 所在的 Linux 主机,用 root 打开审批会话:
-
-```bash
-sudo /opt/monit-agent/monitagent shell-approval
-```
-
-如果未打开审批会话,Agent 返回 `approval_unavailable`,不执行未知命令。打开会话后,请重新发起诊断调用。
-
-审批会话连接成功后会显示等待提示。出现待审批命令时,终端只展示命令本身和 10 秒倒计时:
-
-- 按回车批准当前批次中的全部命令。
-- 按 `n` 拒绝当前批次中的全部命令。
-- 10 秒内没有操作时自动拒绝;并发到达的后续命令会排队,并在显示后获得完整的 10 秒审批时间。
-- 没有待审批命令时,输入不会触发执行,终端会继续显示等待状态。
-- 按 `Ctrl-C` 退出审批会话。
-
-同一台 Agent 同时只允许一个审批会话。如果已有会话且你需要接管,使用:
-
-```bash
-sudo /opt/monit-agent/monitagent shell-approval --replace
-```
-
-只有 root 可以打开或接管会话。Agent 重启或会话断开时,待审批命令会被拒绝;重启后需要重新打开会话。命中永久拒绝规则的命令不能通过人工审批放开。
-
-## 下一步
-
-Agent 启动成功后,通常几秒内可以在监控对象页面看到一个主机对象。接下来阅读[配置主机诊断工具](/zh/monitors/targets/configure-targets),调整主机采集参数和工具策略,并按[配置生效与接入验证](/zh/monitors/targets/reload-and-verify)确认结果。
-
-数据库和中间件诊断通过 Edge 数据源执行,无需为 Agent 准备对应的远端账号或配置。参见[数据源配置](/zh/monitors/data-sources/data-sources)。
diff --git a/zh/monitors/targets/overview.mdx b/zh/monitors/targets/overview.mdx
deleted file mode 100644
index 550b7037..00000000
--- a/zh/monitors/targets/overview.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: "监控对象概览"
-description: "了解 Monitors 监控对象的含义、monit-agent 的作用,以及对象如何自动出现在页面上"
-keywords: ["监控对象", "monit-agent", "AI-SRE", "对象接入", "现场诊断"]
----
-
-监控对象是 Monitors 可以查询和诊断的目标。安装并启动 `monit-agent` 后,平台会自动展示它上报的主机对象。数据库和中间件通过 Monitors 数据源由 Edge 查询和诊断,不通过 Agent 配置接入。
-
-## 为什么需要 monit-agent
-
-传统可观测性数据通常包括指标、日志、链路追踪和告警事件。这些数据能帮助你判断“发生了什么”,但在实际排障时,经常还需要进一步确认现场状态,例如:
-
-- 当前机器上哪些进程占用 CPU 或内存较高。
-- 某个端口、域名或服务是否能从目标机器访问。
-- 磁盘、挂载点、网卡、连接数等运行状态是否异常。
-
-这些问题只靠已经采集上来的数据不一定能回答,很多时候需要“连到现场查一下”。`monit-agent` 就是为这个场景设计的。
-
-在 AI-SRE 场景下,可以把 LLM 理解为诊断大脑,把 `monit-agent` 理解为部署在用户环境里的现场执行端。用户用自然语言提出问题后,LLM 负责理解问题、选择合适的诊断工具并解释结果;`monit-agent` 负责在目标主机上执行受控诊断,并把结构化结果返回给系统。
-
-
-Agent 通过工具策略、参数校验、命令限制、超时和输出限制控制执行,并支持敏感信息脱敏和本地审计。`shell.exec` 的未知命令默认需要本机 root 审批;选择 `allow` 后,这些命令可以直接以 Agent 运行账号执行,可能修改数据或影响服务。配置前请阅读[未知命令策略](/zh/monitors/targets/configure-targets#未知命令策略)。
-
-
-## 技术架构
-
-```mermaid
-flowchart TD
- center["SaaS 中心 / AI-SRE"] <-->|WebSocket| edge["monit-edge"]
- edge <-->|WebSocket| agent["monit-agent"]
- agent --> host["主机工具"]
- edge --> datasource["数据源查询 / 数据库与中间件诊断"]
-```
-
-`monit-agent` 通过 WebSocket 连接到同网络区域内的 `monitedge`。`monitedge` 再通过 WebSocket 连接到 SaaS 中心。通常每个网络区域部署一套 `monitedge`,同一个 `EngineName` 的多个 `monitedge` 实例会被视为同一套引擎集群。
-
-## 主机诊断与数据源诊断
-
-| 诊断范围 | 接入方式 | 执行位置 |
-|---|---|---|
-| 主机 CPU、内存、进程、磁盘、网络及容器现场状态 | 在目标主机安装 Agent,按需配置主机工具 | 目标主机上的 `monit-agent` |
-| MySQL、Redis、PostgreSQL、MongoDB、Kafka、Elasticsearch 等服务 | 配置对应的 Monitors 数据源 | 能访问数据源的 `monit-edge` |
-
-Agent 提供 `os.overview`、`os.top_processes`、`shell.exec`、`net.tcp_ping` 和 `http.get` 五个主机工具,实际可用集合受 Agent 版本与本地策略控制。TCP/HTTP 探测提供主机视角的连通性证据,数据库内部状态由数据源诊断获取。
-
-Agent 主机工具只作用于主机本身:`tools-catalog` 与 `tools-invoke` 的目标类型仅支持 `host`,数据库服务端点不是 Agent 目标。数据库与中间件的诊断需要改用**数据源工具**(见下文),由能访问数据源的 Edge 执行。数据源工具调用要求数据源 `enabled=true`;`alerting_enabled=false` 不影响诊断。
-
-### 数据源工具
-
-每个已配置的数据源提供一组命名诊断工具,工具名以数据源类型为前缀,例如:
-
-| 数据源类型 | 工具示例 |
-|------------|----------|
-| MySQL | `mysql.overview`、`mysql.lock_contention` |
-| PostgreSQL | `postgres.activity` |
-| Redis | `redis_node.slowlog` |
-| Kafka | `kafka.consumer_lag` |
-| Elasticsearch | `elasticsearch.cat` |
-| Prometheus | `prometheus.metric_trends` |
-| Loki / VictoriaLogs | `loki.log_patterns`、`victorialogs.log_patterns` |
-
-- **一次调用执行一个命名工具**,通过数据源 ID(`datasource_id`)指定目标。同一个连接地址配置成多个数据源 ID 表示不同的凭据或配置,必须保持独立。
-- **没有工具目录**:各类型的工具名称与参数由类型相关参考提供,不要猜测参数。`mysql.query`、`postgres.query` 工具已移除,自由 SQL 查询请使用数据源查询(monit-query 的 Data)能力。
-- **版本门禁**:要求所选集群内**所有当前在线可路由的 Edge 会话**支持 v0.71.0 基础 invoke 协议,具体工具可能要求更新的实现。不满足时错误原因见表。
-- **没有自动回退**:接口不提供工具目录、自动重放,也不会回退到 Agent 或旧的 diagnose 流程;出现版本类错误时应升级 Edge,而不是重启或轮换 Edge。请求体上限 128 KiB,完整成功响应上限 1 MiB,单次工具执行超时最多 25 秒。
-
-错误通过 `error.reason` 返回:
-
-| reason | 含义 |
-|--------|------|
-| `edge_upgrade_required` | Edge 版本低于 v0.71.0,需升级集群内的 Edge |
-| `mixed_edge_versions` | 集群内 Edge 版本混杂,部分实例过旧,需统一升级 |
-| `no_active_edge` | 集群内没有在线可路由的 Edge 会话 |
-| `tool_not_supported` | 该工具不被当前实现支持 |
-| `invalid_request` | 请求参数错误,需修正参数后重试 |
-| `source_too_large` | 请求体超过 128 KiB,需要缩小查询范围 |
-| `result_too_large` | 结果超过 1 MiB,需要缩小查询范围 |
-| `datasource_disabled` | 数据源未启用(`enabled=false`) |
-| `datasource_not_found` | 数据源不存在 |
-
-
-
-对象标识(`target_locator`)建议使用稳定、容易识别的值,例如固定内网 IP 或 DNS 名称。不要使用 `localhost`、`127.0.0.1` 这类只在本机有意义的地址作为页面展示地址。
-
-
-## 对象如何出现在页面上
-
-监控对象不需要在页面上手工创建。你只需要在目标机器上安装并启动 `monit-agent`。Agent 成功连接到 Edge 后,会自动上报当前主机身份,页面就会展示该主机。
-
-因此,新用户首次进入监控对象页面时列表为空,通常表示还没有任何 Agent 成功接入。每台 Agent 上报本机主机对象。数据库和中间件的连接在[数据源](/zh/monitors/data-sources/data-sources)中管理。
-
-## 建议接入路径
-
-
-
-先接入主机对象,确认 Agent 可以连接 Edge,并能在页面展示当前主机。
-
-
-在 `agent.yaml` 中调整主机采集参数、Shell 执行策略和工具禁用列表。
-
-
-确认主机工具可用;如需数据库或中间件诊断,另行配置对应数据源。
-
-
-
-## 相关文档
-
-
-
- 准备 Edge 地址,下载 Agent,并配置前台启动或系统服务。
-
-
- 配置主机采集、Shell 执行策略和工具开关。
-
-
diff --git a/zh/monitors/targets/reload-and-verify.mdx b/zh/monitors/targets/reload-and-verify.mdx
deleted file mode 100644
index 338b43f9..00000000
--- a/zh/monitors/targets/reload-and-verify.mdx
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: "配置生效与接入验证"
-description: "了解 monit-agent 配置变更的生效方式,并排查监控对象没有出现在页面上的常见问题"
-keywords: ["monit-agent", "配置生效", "SIGHUP", "重启 Agent", "接入验证", "排障"]
----
-
-修改 `monit-agent` 配置后,不同类型的变更需要不同的生效方式。本文说明何时 reload、何时重启,以及如何确认监控对象已经成功接入。
-
-## 配置生效规则
-
-| 变更内容 | 生效方式 |
-|---|---|
-| `agent.yaml` 中的 `host` 主机采集、`tool_policy` 工具策略 | 发送 SIGHUP reload |
-| `host.shell_exec.unknown_command_policy` | 发送 SIGHUP reload |
-| Edge 地址、Basic Auth、TLS、`hostLocator`、审计目录 | 重启 Agent |
-
-向 Agent 主进程发送 SIGHUP:
-
-```bash
-sudo systemctl kill --kill-who=main -s HUP monitagent
-```
-
-重启服务:
-
-```bash
-sudo systemctl restart monitagent
-```
-
-
-修改 `agent.yaml` 中的主机配置后,使用 SIGHUP reload。只有启动参数或服务级参数变化时才需要重启。SIGHUP 不会重新探测或改变主机标识。
-
-
-修改工具开关后,成功 reload 即可更新 Agent 当前可用的诊断工具,无需重启。
-
-## 切换未知命令策略
-
-修改 `agent.yaml` 中的 `host.shell_exec.unknown_command_policy` 后,向 Agent 主进程发送 SIGHUP。Agent 重新读取并校验配置:成功后新调用使用新策略;校验失败则保留当前生效的配置,并在日志中输出失败原因。修改文件本身不会自动触发 reload。
-
-- 从 `require_approval` 切换为 `allow`:新提交的未知命令无需审批;已经等待审批的命令仍需要完成原审批。
-- 从 `allow` 切回 `require_approval`:新提交的未知命令需要审批;已经开始执行的命令不会因此被终止,已发生的写入也不会回滚。
-- 已知安全操作继续自动执行,命中永久拒绝规则的操作继续拒绝。
-
-策略值和风险说明见[未知命令策略](/zh/monitors/targets/configure-targets#未知命令策略)。如果需要确认 reload 是否成功,可以查看日志:
-
-```bash
-sudo journalctl -u monitagent -n 100
-```
-
-## 验证接入是否成功
-
-启动 Agent 后,通常几秒内可以在监控对象页面看到一个主机对象。
-
-如果页面仍为空,请按以下顺序检查:
-
-
-
-
-```bash
-sudo systemctl status monitagent
-```
-
-
-
-检查地址是否带了 `ws://` 或 `wss://`,并确认当前租户对应的 Edge 已经在线。
-
-
-
-```bash
-sudo journalctl -u monitagent -n 100
-```
-
-
-
-如果修改过 `agent.yaml`,确认没有 YAML 语法错误、不支持的字段或未知工具名。配置校验失败会阻止启动;reload 失败时,Agent 保留当前配置。
-
-
-
-## 对象没有出现时的检查项
-
-| 现象 | 检查方向 |
-|---|---|
-| 监控对象页面为空 | 先确认主机对象是否出现;如果主机对象都没有出现,优先检查 Agent 进程、Edge 地址和日志。 |
-| 希望诊断数据库或中间件 | 在[数据源](/zh/monitors/data-sources/data-sources)中管理连接,诊断由 Edge 执行,使用对应的数据源诊断工具。 |
-| 主机标识不正确 | 将 `--agent.hostLocator` 设置为稳定内网 IP 或 DNS 名称,然后重启 Agent。 |
-
-## 推荐接入顺序
-
-1. 先只接入主机对象。
-2. 页面出现主机后,再调整主机采集、Shell 执行策略和工具开关。
-3. 验证主机诊断结果;需要数据库或中间件诊断时另行配置数据源。
-
-## 相关文档
-
-
-
- 了解监控对象和 monit-agent 的工作方式。
-
-
- 查看 agent.yaml 中主机采集和工具策略的配置说明。
-
-
diff --git a/zh/openapi/api-catalog.mdx b/zh/openapi/api-catalog.mdx
index 0c50aaa6..ebc42976 100644
--- a/zh/openapi/api-catalog.mdx
+++ b/zh/openapi/api-catalog.mdx
@@ -324,9 +324,6 @@ Flashduty Open API 提供 **354** 个接口,覆盖 On-call、Monitors、RUM、
| :--- | :--- | :--- |
| POST | [`/monit/query/data`](/zh/api-reference/monitors/diagnostics/monit-read-query-data) | 查询结构化数据 |
| POST | [`/monit/query/diagnose`](/zh/api-reference/monitors/diagnostics/monit-read-query-diagnose) | 数据源诊断 |
-| POST | [`/monit/tools/catalog`](/zh/api-reference/monitors/diagnostics/monit-read-tools-catalog) | 查询监控对象工具能力清单 |
-| POST | [`/monit/tools/invoke`](/zh/api-reference/monitors/diagnostics/monit-read-tools-invoke) | 调用监控对象工具 |
-| POST | [`/monit/targets`](/zh/api-reference/monitors/diagnostics/monit-read-targets-list) | 监控对象列表 |
### 通用工具