Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
223e176
Add cooperative UI turns for concurrent winapp ui agents
nmetulev Aug 18, 2026
36c3255
Fix six coordination correctness bugs and add §18.3 real-app acceptan…
Copilot Aug 18, 2026
18aaa9a
Correct recording cancellation semantics and harden coordination boun…
Copilot Aug 18, 2026
94a6232
Address PR review: turn-age telemetry, handoff action, record faults,…
nmetulev Aug 20, 2026
6976ef3
Escape backslashes in generated Markdown tables
nmetulev Aug 21, 2026
7cf2788
Fix six high findings from the PR #767 re-review
nmetulev Aug 21, 2026
90f364f
Propagate capture-foreground refusal out of the multi-window screensh…
nmetulev Aug 21, 2026
a16b646
Select the gated-test winapp.exe by host architecture
nmetulev Aug 21, 2026
87d377d
Merge origin/main (PR #799 UI Automation package extraction) into coo…
nmetulev Sep 3, 2026
92e0005
Replace parent-derived owners with opt-in WINAPP_UI_WORKFLOW_ID
nmetulev Sep 3, 2026
aeeb6d8
Port all 21 UI commands onto the package APIs under coordination
nmetulev Sep 3, 2026
553ad0a
Add opt-in workflowId to the npm surface
nmetulev Sep 3, 2026
5d22eed
Rewrite the coordination docs around arbitration-always-on, continuit…
nmetulev Sep 3, 2026
3e729a2
Port the test suites to the redesigned coordination model
nmetulev Sep 3, 2026
df17600
Satisfy the new screen-capture foreground precondition in the real re…
nmetulev Sep 3, 2026
0060c56
Close six ways a coordinated UI command could act on the wrong thing
nmetulev Sep 3, 2026
0a7b1c0
Say plainly in both package readmes that direct callers get no arbitr…
nmetulev Sep 3, 2026
d1636f0
Remove coordination leftovers and stop dropping an empty workflow id
nmetulev Sep 3, 2026
96372fd
Remove the last unread copy of the cancelled error code
nmetulev Sep 3, 2026
01a983c
Make the handover test replay the way a real agent has to
nmetulev Sep 3, 2026
58ef9b0
Correct documentation that outlived the coordination redesign
nmetulev Sep 3, 2026
04b66ad
Merge branch 'main' into nmetulev-cooperative-ui-turns
nmetulev Sep 3, 2026
40be6f4
Fix five ways a UI command trusted something it should have checked
nmetulev Sep 3, 2026
ed7cd53
Merge branch 'main' into nmetulev-cooperative-ui-turns
nmetulev Sep 4, 2026
a30c00b
Wake queued UI commands instead of making them poll for their turn
nmetulev Sep 4, 2026
fc9ef95
Sample observed queue depth on every look, not next to the status line
nmetulev Sep 4, 2026
41143f3
Treat a state document missing required fields as corruption, not a f…
nmetulev Sep 5, 2026
a31c739
Merge branch 'main' into nmetulev-cooperative-ui-turns
zateutsch Sep 8, 2026
2f91a2c
Reclassify background-safe mutations, add `ui yield`, name screenshot…
nmetulev Sep 9, 2026
16c3f7e
Merge remote-tracking branch 'origin/main' into nmetulev-cooperative-…
Sep 9, 2026
147b885
Use short-circuit || for the yield transaction's changed flag
nmetulev Sep 9, 2026
74cdab8
Do not expand owned windows for an explicit --capture-screen -w target
nmetulev Sep 9, 2026
45c9dd1
Separate capture foreground safety from injection, and secure pre-exi…
nmetulev Sep 9, 2026
4c0cb66
Merge remote-tracking branch 'origin/main' into nmetulev-cooperative-…
Sep 9, 2026
c33f7f2
Do not treat Administrators or SYSTEM as a foreign identity on state …
nmetulev Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/workflows/build-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,19 @@ jobs:
$platform = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "x64" }
.\scripts\test-e2e-winui-ui.ps1 -WinAppPath "artifacts/cli/win-$platform/winapp.exe"

# Gated cooperative desktop-turn coverage (issue #764). Runs here, on the interactive lane, because
# it drives real winapp.exe processes against a real foreground window.
- name: Run UI coordination multiprocess and real-app tests
run: .\scripts\test-ui-coordination.ps1

- name: Upload UI coordination test results
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ui-coordination-test-results
path: artifacts/TestResults/ui-coordination/
if-no-files-found: warn

- name: Upload screenshots
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down
51 changes: 51 additions & 0 deletions docs/cli-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -4927,6 +4927,57 @@
"recursive": false
}
}
},
"yield": {
"description": "Release the current workflow's idle UI turn early. A workflow with WINAPP_UI_WORKFLOW_ID keeps the desktop for a few seconds after each command so a burst of commands reads as one workflow; run this after the final command of a workflow to hand the desktop to waiting workflows straight away. Requires WINAPP_UI_WORKFLOW_ID; targets no app and takes no selector.",
"hidden": false,
"options": {
"--json": {
"description": "Format output as JSON",
"hidden": false,
"valueType": "System.Boolean",
"hasDefaultValue": true,
"defaultValue": false,
"arity": {
"minimum": 0,
"maximum": 1
},
"required": false,
"recursive": false
},
"--quiet": {
"description": "Suppress progress messages",
"hidden": false,
"aliases": [
"-q"
],
"valueType": "System.Boolean",
"hasDefaultValue": true,
"defaultValue": false,
"arity": {
"minimum": 0,
"maximum": 1
},
"required": false,
"recursive": false
},
"--verbose": {
"description": "Enable verbose output",
"hidden": false,
"aliases": [
"-v"
],
"valueType": "System.Boolean",
"hasDefaultValue": true,
"defaultValue": false,
"arity": {
"minimum": 0,
"maximum": 1
},
"required": false,
"recursive": false
}
}
}
}
},
Expand Down
209 changes: 164 additions & 45 deletions docs/npm-usage.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions docs/telemetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ The telemetry feature collects the following data:
| Caller | The value of the `WINAPP_CLI_CALLER` environment variable, if set. This allows wrapper tools (like the npm package) to identify themselves. |
| Project context | For `init`, `run`, `restore`, `update`, and `package`, a separate correlated event records bounded categories describing the project family (`dotnet`, `node`, `cpp`, `rust`, `dart`, `hybrid`, `mixed`, or `unknown`), recognized app framework (such as `winui`, `wpf`, `winforms`, `maui`, `electron`, `tauri`, `flutter`, `react-native-windows`, `avalonia`, `uwp`, `windows-app-sdk`, or `other-dotnet`), target kind, detection source, confidence, packaging model, and whether `run` used project or folder execution. It doesn't include project names, paths, repositories, versions, dependency lists, or source. |
| `find-ui` usage | For the `winapp find-ui` command only, an additional usage event with non-personal, bounded values: the mode (`search`, `fetch`, or `list`); the selected `--source` (a fixed value — `gallery`, `toolkit`, `reactor`, or `core`); the catalog scenario IDs fetched (e.g. `gallery-tabview-1`), which identify built-in WinUI sample controls, never your code; whether `--json` was used; and result/ID counts. The free-form search query is **never** collected, and any requested IDs that don't match a real catalog entry are counted but **not** collected as text. |
| `winapp ui` desktop coordination | For `winapp ui` commands only, a privacy-minimized summary of how the command shared the desktop with other UI workflows: how the workflow identity was resolved (`Workflow` or `Anonymous` — never the identity itself), the coordination mode (`Observe`, `TurnShared`, or `DesktopExclusive`), how the turn was obtained (new, continuation, queued, handoff-after-idle, or detached), the outcome (completed, cancelled, coordination failure, or corruption recovery), and **coarse buckets** for how long this command waited for the desktop, how many commands were queued, and how long the owning workflow had held its turn. |

### Sanitization of sensitive data

Expand All @@ -98,6 +99,7 @@ The winapp CLI takes several measures to protect your privacy:
- **Parsing errors** are logged as `[error]` without including the actual erroneous input.
- **Project classification** emits only fixed, allow-listed category values. Unknown or unrecognized metadata is reported as `unknown` or a generic family category rather than transmitted as text.
- All string values in telemetry events undergo **sensitive string replacement** before transmission, which replaces any registered sensitive strings with anonymized tokens.
- **Desktop coordination** never collects the `WINAPP_UI_WORKFLOW_ID` value or its hash, process IDs, process or application names, window titles, selectors, element text, queue contents, or any part of the coordination state files. Durations and counts are reported only as fixed buckets (for example `1000-4999`), never as exact values.

## Crash exception telemetry

Expand Down
Loading
Loading