Update winapp CLI skill for latest winapp CLI capabilities in v0.3.1 (#1599)

* Update winapp CLI skill

* Updated skill for winapp cli based on review

* Updates to tighten up skill for winappcli

* Tighten skill to reduce token use

* Update to use steps

* Updates from review comments

* Fix spellcheck in build
This commit is contained in:
Alvin Ashcraft
2026-05-03 21:14:18 -04:00
committed by GitHub
parent 1f4fac7513
commit 09431d0bf3
3 changed files with 165 additions and 179 deletions

View File

@@ -0,0 +1,87 @@
# `winapp ui --json` envelope (v0.3.1+)
The `--json` output for the `winapp ui` command group was reshaped in v0.3.1.
Generate parsers against these shapes — pre-0.3.1 parsers will silently break
because most fields were renamed, removed, or moved into envelopes.
## `ui inspect --json`
Top-level shape (elements are now nested under `windows[]`, not flat):
```json
{
"depth": 0,
"interactive": false,
"hideDisabled": false,
"hideOffscreen": false,
"windows": [
{
"hwnd": "0x...",
"title": "...",
"className": "...",
"elementCount": 0,
"elements": [
{
"selector": "...",
"name": "...",
"controlType": "...",
"children": [ ... ]
}
]
}
]
}
```
Pre-0.3.1 the shape was `{ "elements": [...] }`. Per-element `id`, `depth`,
`parentSelector`, and `windowHandle` fields have been **removed**`selector`
is the public handle.
## `ui inspect --ancestors --json`
Ancestors are now nested as a parent → child chain keyed by `Depth=i`
(previously emitted as sibling roots).
## `ui inspect --interactive`
Non-interactive ancestors are collapsed and surfaced as `ancestorPath` on
surviving descendants. `+more` markers indicate truncated subtrees in both
text and JSON modes.
## `ui get-focused --json`
Always emits an envelope (never a bare value):
- No focus: `{ "hasFocus": false }`
- With focus: `{ "hasFocus": true, "element": { ... } }`
Pre-0.3.1 emitted bare `null` when nothing was focused.
## `ui search --json` / `ui wait-for --json`
Both commands return matching elements using the same element shape as
`ui inspect` (so `selector`, `name`, `controlType`, `children`, etc.).
Each match may also include an `invokableAncestor` field — itself an
element-shaped object — pointing to the nearest parent that supports
`InvokePattern` (useful when a search hits a non-invokable element
like a label inside a button).
```json
[
{
"selector": "btn-save-c3d4",
"name": "Save",
"controlType": "Button",
"children": [ ... ],
"invokableAncestor": {
"selector": "btn-save-c3d4",
"name": "Save",
"controlType": "Button"
}
}
]
```
The internal `id`, `parentSelector`, and `windowHandle` fields are
**scrubbed** from results — both at the top level and inside any nested
`invokableAncestor`. Don't depend on them; use `selector` as the handle.