#[allow(clippy::wildcard_imports)]
use super::*;
#[allow(clippy::too_many_lines)]
pub(super) fn descriptors() -> Vec<ToolDescriptor> {
vec![
ToolDescriptor {
name: "roadmap_list",
description: "List the roadmap: initiatives in roadmap order (target date ascending, then stable id), filtered by the normalized `RoadmapFilter` (mirrors `tix roadmap list`). An undated initiative is the explicit `undated` state and sorts last — never a blank or an invented period (C-003), and a bounded period excludes it. Each row carries its metadata, its references with their resolution, the source-attributed `summary` (one contribution per referenced entity, with the owning service's own value and policy version), and its diagnostics — never a blended percentage or score (C-004). An empty result is an empty list, not an error. Read-only: no write, no History entry.",
input_schema: json!({
"type": "object",
"additionalProperties": false,
"properties": {
"period_from": { "type": "string", "description": "Inclusive lower bound on the target date (`YYYY-MM-DD`). A malformed date is refused with the filter's own diagnostic." },
"period_to": { "type": "string", "description": "Inclusive upper bound on the target date (`YYYY-MM-DD`)." },
"owner": { "type": "string", "description": "Owner to match; compared trimmed and case-insensitively. Must not be blank." },
"status": { "type": "string", "description": "Initiative status to match; compared trimmed and case-insensitively. Must not be blank." },
"labels": { "type": "array", "items": { "type": "string" }, "description": "Labels the initiative must all carry (an AND). Each compared trimmed and case-insensitively; a blank entry is refused." },
"query": { "type": "string", "description": "Free text matched case-insensitively against name/outcome/owner/status/labels." }
}
}),
},
ToolDescriptor {
name: "roadmap_show",
description: "Show one initiative's roadmap row — its metadata, references with resolution, source-attributed summary and diagnostics (mirrors `tix roadmap show`). Resolved by its **stable id**; a name resolves to the same initiative. The rendering is the CLI's own `roadmap_row_lines`, so the two surfaces cannot describe one row two ways. Read-only: no write, no History entry.",
input_schema: json!({
"type": "object",
"additionalProperties": false,
"properties": {
"initiative": { "type": "string", "description": "Stable initiative id, or a name that resolves to the same initiative." }
},
"required": ["initiative"]
}),
},
ToolDescriptor {
name: "roadmap_summary",
description: "One initiative's progress/risk summary: the raw typed contributions, one per referenced source entity (its `<kind>:<id>` provenance, the owning service's own value, its risk value and the shared policy version), plus the explicit summary state, the ordered source entities and policy versions, and the diagnostics (the `InitiativeSummary` of `tix roadmap show`). No formatted summary and no blended figure: a missing reference is a contribution with `resolution: missing` and no value, and an initiative that references nothing has the explicit `empty` state (C-004, C-005, C-006). Read-only: no write, no History entry.",
input_schema: json!({
"type": "object",
"additionalProperties": false,
"properties": {
"initiative": { "type": "string", "description": "Stable initiative id, or a name that resolves to the same initiative." }
},
"required": ["initiative"]
}),
},
]
}