@minicor/mcp-server 3.1.5 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +296 -61
  2. package/dist/bootstrap.d.ts +12 -0
  3. package/dist/bootstrap.d.ts.map +1 -0
  4. package/dist/bootstrap.js +244 -0
  5. package/dist/bootstrap.js.map +1 -0
  6. package/dist/config.d.ts +6 -3
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +14 -10
  9. package/dist/config.js.map +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +38 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/laminar-client.d.ts +5 -0
  14. package/dist/laminar-client.d.ts.map +1 -1
  15. package/dist/laminar-client.js +6 -0
  16. package/dist/laminar-client.js.map +1 -1
  17. package/dist/lib.d.ts.map +1 -1
  18. package/dist/lib.js +22 -1
  19. package/dist/lib.js.map +1 -1
  20. package/dist/prompts/build-rpa.d.ts.map +1 -1
  21. package/dist/prompts/build-rpa.js +86 -272
  22. package/dist/prompts/build-rpa.js.map +1 -1
  23. package/dist/prompts/debug-execution.js +1 -1
  24. package/dist/prompts/workspace-session.d.ts +3 -0
  25. package/dist/prompts/workspace-session.d.ts.map +1 -0
  26. package/dist/prompts/workspace-session.js +58 -0
  27. package/dist/prompts/workspace-session.js.map +1 -0
  28. package/dist/seed-skills.d.ts +13 -0
  29. package/dist/seed-skills.d.ts.map +1 -0
  30. package/dist/seed-skills.js +82 -0
  31. package/dist/seed-skills.js.map +1 -0
  32. package/dist/skills-service-client.d.ts +54 -0
  33. package/dist/skills-service-client.d.ts.map +1 -0
  34. package/dist/skills-service-client.js +93 -0
  35. package/dist/skills-service-client.js.map +1 -0
  36. package/dist/skills.d.ts +34 -0
  37. package/dist/skills.d.ts.map +1 -0
  38. package/dist/skills.js +152 -0
  39. package/dist/skills.js.map +1 -0
  40. package/dist/state.d.ts +22 -0
  41. package/dist/state.d.ts.map +1 -1
  42. package/dist/state.js +12 -0
  43. package/dist/state.js.map +1 -1
  44. package/dist/sync.d.ts +18 -2
  45. package/dist/sync.d.ts.map +1 -1
  46. package/dist/sync.js +404 -104
  47. package/dist/sync.js.map +1 -1
  48. package/dist/tools/core.d.ts.map +1 -1
  49. package/dist/tools/core.js +12 -0
  50. package/dist/tools/core.js.map +1 -1
  51. package/dist/tools/session.d.ts +8 -0
  52. package/dist/tools/session.d.ts.map +1 -0
  53. package/dist/tools/session.js +392 -0
  54. package/dist/tools/session.js.map +1 -0
  55. package/dist/tools/skills.d.ts +3 -0
  56. package/dist/tools/skills.d.ts.map +1 -0
  57. package/dist/tools/skills.js +429 -0
  58. package/dist/tools/skills.js.map +1 -0
  59. package/dist/tools/sync-tools.d.ts.map +1 -1
  60. package/dist/tools/sync-tools.js +82 -12
  61. package/dist/tools/sync-tools.js.map +1 -1
  62. package/dist/tools/vm.js +1 -1
  63. package/dist/tools/workflow-ops.js +1 -1
  64. package/dist/tools/workflow-ops.js.map +1 -1
  65. package/package.json +5 -2
  66. package/skills/general/cdp-browser-automation.md +97 -0
  67. package/skills/general/data-extraction-strategies.md +64 -0
  68. package/skills/general/data-hydration-patterns.md +167 -0
  69. package/skills/general/data-passing-between-steps.md +46 -0
  70. package/skills/general/desktop-uiautomation.md +80 -0
  71. package/skills/general/rpa-testing-workflow.md +145 -0
  72. package/skills/general/session-keepalive.md +101 -0
  73. package/skills/general/smart-launch-patterns.md +213 -0
  74. package/skills/general/state-verification.md +56 -0
package/dist/tools/vm.js CHANGED
@@ -27,7 +27,7 @@ export function register(deps) {
27
27
  const keys = await deps.client(wsRegion).listApiKeys(workspaceId);
28
28
  const apiKeyList = Array.isArray(keys) ? keys : keys?.api_keys ?? keys?.data ?? [];
29
29
  if (!apiKeyList.length) {
30
- return text(`No API keys found for workspace ${workspaceId}. Create one in the Laminar dashboard.`);
30
+ return text(`No API keys found for workspace ${workspaceId}. Create one in the Minicor dashboard.`);
31
31
  }
32
32
  const workspaceApiKey = apiKeyList[0].apiKey ?? apiKeyList[0].api_key ?? apiKeyList[0].key ?? apiKeyList[0];
33
33
  const effectiveRegion = region ?? apiBaseToRegion(deps.getApiBase(wsRegion));
@@ -7,7 +7,7 @@ const regionParam = z
7
7
  .describe("Region (us or ca). Auto-detected from workspace if omitted.");
8
8
  export function register(deps) {
9
9
  const { server } = deps;
10
- server.tool("preview_flow_changes", "Show a diff of the current flow code vs your proposed changes BEFORE updating. Use this to review changes before pushing them to Laminar.", {
10
+ server.tool("preview_flow_changes", "Show a diff of the current flow code vs your proposed changes BEFORE updating. Use this to review changes before pushing them.", {
11
11
  flowId: z.number().describe("Flow ID to compare against"),
12
12
  proposedProgram: z
13
13
  .string()
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-ops.js","sourceRoot":"","sources":["../../src/tools/workflow-ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-ops.js","sourceRoot":"","sources":["../../src/tools/workflow-ops.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minicor/mcp-server",
3
- "version": "3.1.5",
3
+ "version": "3.2.1",
4
4
  "description": "Desktop and browser RPA automation, workflow management, and AI-powered debugging for the Minicor platform. Formerly Laminar.",
5
5
  "type": "module",
6
6
  "main": "dist/lib.js",
@@ -15,10 +15,13 @@
15
15
  "minicor": "dist/cli.js",
16
16
  "laminar-mcp": "dist/index.js",
17
17
  "laminar-mcp-setup": "dist/setup.js",
18
- "laminar": "dist/cli.js"
18
+ "laminar": "dist/cli.js",
19
+ "minicor-seed-skills": "dist/seed-skills.js",
20
+ "minicor-bootstrap": "dist/bootstrap.js"
19
21
  },
20
22
  "files": [
21
23
  "dist",
24
+ "skills",
22
25
  "README.md",
23
26
  "LICENSE"
24
27
  ],
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: cdp-browser-automation
3
+ description: Chrome DevTools Protocol patterns for browser RPA via Python websocket. CDP tab discovery, React-safe value setters, button clicks by text, screenshot capture, parallel execution via /execute/browser. Use when building browser automations, CDP scripts, or Chrome-based RPA.
4
+ category: general
5
+ tags: [cdp, browser, chrome, websocket, react, parallel]
6
+ priority: 10
7
+ ---
8
+
9
+ # CDP Browser Automation
10
+
11
+ ## How It Works
12
+
13
+ The MDS provides an isolated Chrome instance per execution via `/execute/browser`. Scripts connect to Chrome via the Chrome DevTools Protocol over a local websocket.
14
+
15
+ - Scripts always use `127.0.0.1:9222` — the MDS transparently routes to the correct Chrome instance
16
+ - Multiple browser automations run **in parallel** on the same VM — each gets its own Chrome + CDP port
17
+ - Use `dispatchPattern: "browser"` when saving with `create_rpa_flow`
18
+
19
+ ## CDP Starter Template
20
+
21
+ ```python
22
+ import json, websocket, time
23
+ from urllib.request import urlopen
24
+
25
+ tabs = json.loads(urlopen('http://127.0.0.1:9222/json').read())
26
+ page_tabs = [t for t in tabs if t.get('type') == 'page']
27
+ if not page_tabs:
28
+ raise RuntimeError(f"No page tab found. Available tabs: {[t.get('type') for t in tabs]}")
29
+ page_tab = page_tabs[0]
30
+ ws = websocket.create_connection(page_tab['webSocketDebuggerUrl'])
31
+ cmd_id = 0
32
+
33
+ def cdp_eval(ws, js, timeout=30):
34
+ global cmd_id; cmd_id += 1
35
+ ws.send(json.dumps({'id': cmd_id, 'method': 'Runtime.evaluate', 'params': {'expression': js}}))
36
+ deadline = time.time() + timeout
37
+ while time.time() < deadline:
38
+ msg = json.loads(ws.recv())
39
+ if msg.get('id') == cmd_id: return msg
40
+ raise TimeoutError(f"CDP response for command {cmd_id} not received within {timeout}s")
41
+
42
+ # Navigate
43
+ cdp_eval(ws, 'window.location.href="https://example.com"')
44
+ time.sleep(8)
45
+
46
+ # Fill input using React-safe setter (ALWAYS use this for React/Angular/Vue apps)
47
+ cdp_eval(ws, 'var s=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;var inp=document.querySelector("input[type=email]");if(inp){s.call(inp,"user@example.com");inp.dispatchEvent(new Event("input",{bubbles:true}));inp.dispatchEvent(new Event("change",{bubbles:true}))}')
48
+
49
+ # Click button by text content (more resilient than CSS selectors)
50
+ cdp_eval(ws, 'document.querySelectorAll("button").forEach(function(b){if(b.textContent.trim()==="Submit"){b.click()}})')
51
+
52
+ ws.close()
53
+ ```
54
+
55
+ ## Key Patterns
56
+
57
+ ### React-Safe Value Setter
58
+
59
+ Always use `Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set` — direct `.value=` assignment does NOT trigger React/Angular change detection.
60
+
61
+ ### Button Clicks by Text
62
+
63
+ Use `querySelectorAll("button").forEach()` + `textContent.trim()` matching — more resilient than IDs or classes that change between deploys.
64
+
65
+ ### Credentials
66
+
67
+ Use `${username}` / `${password}` interpolated from JS wrapper variables sourced from `{{config.xxx}}` — NEVER hardcode.
68
+
69
+ ### Waits
70
+
71
+ `time.sleep()` between navigations (8-15s for page loads, 1-3s for UI actions).
72
+
73
+ ### Verification
74
+
75
+ Use CDP `Page.captureScreenshot` for per-tab screenshots within the browser context.
76
+
77
+ ### Dropdown Handling
78
+
79
+ Click to open, then use `querySelectorAll` to find options by text and click.
80
+
81
+ ### Tab Management
82
+
83
+ If multiple tabs open, filter `/json` response by URL or title to find the right one.
84
+
85
+ ## Parallel Execution
86
+
87
+ - `/execute/browser` runs your script with its own Chrome instance — multiple workflows run simultaneously
88
+ - `/execute` runs without Chrome — for desktop or mixed browser+desktop scripts
89
+ - The MDS rewrites `127.0.0.1:9222` transparently to the correct Chrome port
90
+ - Recordings from `/execute/browser` capture only the browser tab (CDP screencast)
91
+ - Recordings from `/execute` capture the full desktop (MSS screen recording)
92
+
93
+ ## When to Use `/execute/browser` vs `/execute`
94
+
95
+ - **Pure CDP** (all interaction via `Runtime.evaluate`, `Page.navigate`, etc.) → `/execute/browser` — parallel-safe
96
+ - **Needs screen interaction** (any `pyautogui`, OS dialogs, file pickers) → `/execute` — one at a time per VM
97
+
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: data-extraction-strategies
3
+ description: Priority-ordered strategies for reading data from screen during RPA. Accessibility tree, clipboard extraction, keyboard navigation, zoomed screenshots, alternative app paths. Use when building data extraction or screen scraping steps in RPA workflows.
4
+ category: general
5
+ tags: [data-extraction, scraping, accessibility, clipboard, screenshots]
6
+ priority: 8
7
+ ---
8
+
9
+ # Data Extraction Strategies
10
+
11
+ When you need to READ data from the screen (not just click/type), follow this priority order. **Do NOT rely solely on screenshots for data reading.**
12
+
13
+ ## Priority 1: Accessibility Tree (Most Reliable)
14
+
15
+ - `vm_inspect_ui` with `element_tree` on the target window
16
+ - If the tree exposes text values, this is the most reliable method
17
+ - Use `element_at_point` for specific fields
18
+ - Use `focused_element` to read the current field
19
+
20
+ ## Priority 2: Open Accessible Dialogs
21
+
22
+ - Many apps expose more data when you open edit/detail dialogs
23
+ - Double-click on a row or click "Edit" to open a modal — modals often have better accessibility support
24
+ - Then use `element_tree` on the modal
25
+
26
+ ## Priority 3: Clipboard Extraction
27
+
28
+ - Use `vm_execute_script` to click a field, then Ctrl+A, Ctrl+C
29
+ - Call `vm_read_clipboard` to get the copied text
30
+ - Works for individual fields, text areas, and some grid cells
31
+
32
+ ## Priority 4: Keyboard Navigation
33
+
34
+ - Tab through fields, reading each via `vm_inspect_ui` `focused_element`
35
+ - Useful when the accessibility tree returns element structure but not values
36
+
37
+ ## Priority 5: Zoomed Screenshot
38
+
39
+ - Use `vm_screenshot_region` to crop a specific area for better resolution
40
+ - Only for small text that can't be accessed any other way
41
+
42
+ ## Priority 6: Alternative Application Paths
43
+
44
+ Think creatively:
45
+
46
+ - Reports or Print menus that export data
47
+ - List/Search views with better accessibility
48
+ - CLI tools or command-line interfaces the app provides
49
+ - Export to CSV/clipboard options
50
+ - Alternative windows/dialogs that show the same data more accessibly
51
+ - Use `vm_execute_script` to query the app's data directly if a CLI or API exists
52
+
53
+ ## Priority 7: Full Screenshot (Verification Only)
54
+
55
+ - Full desktop screenshots are for **verifying actions worked**, NOT for reading data
56
+ - If you must use a screenshot to read data, acknowledge it's unreliable and suggest a better approach
57
+
58
+ ## Combining Methods
59
+
60
+ Always combine multiple methods for reliability. For example:
61
+
62
+ 1. Use accessibility tree to get field labels/structure
63
+ 2. Use clipboard to get field values
64
+ 3. Use screenshot to verify the extraction worked
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: data-hydration-patterns
3
+ description: Patterns for building standard CRUD data workflows (Get Practitioners, Patients, Appointments, Encounter Notes). API-first vs RPA approaches, data output conventions, pagination, orchestration order, pass-through return steps. Use when building data extraction or synchronization workflows for healthcare/enterprise apps.
4
+ category: general
5
+ tags: [data, hydration, crud, practitioners, patients, appointments, notes, api, scraping]
6
+ priority: 8
7
+ ---
8
+
9
+ # Data Hydration Patterns
10
+
11
+ Most Minicor workspaces follow a standard set of data workflows. This skill documents the patterns across production deployments.
12
+
13
+ ## The Standard Workflow Set
14
+
15
+ Every EHR/EMR integration workspace typically needs:
16
+
17
+ 1. **Get Practitioners** — list of doctors/providers
18
+ 2. **Get Patients** — patient roster (all or by search)
19
+ 3. **Get Patient By ID** — single patient detail
20
+ 4. **Get Appointments** — schedule for a date range
21
+ 5. **Get Encounter Notes** — clinical notes for a patient
22
+ 6. **Create Encounter Note** — write back a note
23
+ 7. **Verify Patient** — confirm a patient exists by name/DOB
24
+
25
+ ## Two Approaches
26
+
27
+ ### API-First (Preferred)
28
+
29
+ If the app has accessible internal APIs (discovered via CDP network interception or documentation):
30
+
31
+ ```python
32
+ import json, urllib.request
33
+
34
+ url = f'{base_url}/api/patients?page={page}&size=100'
35
+ req = urllib.request.Request(url, headers={'Authorization': f'Bearer {token}'})
36
+ resp = urllib.request.urlopen(req)
37
+ data = json.loads(resp.read())
38
+ ```
39
+
40
+ **Pros**: Fast, reliable, handles pagination natively, returns structured data.
41
+ **Examples**: HSMC (Insta HMS API), Novelle SQL queries.
42
+
43
+ ### RPA Scraping (Fallback)
44
+
45
+ When no API is available, scrape data from the UI via CDP or uiautomation:
46
+
47
+ ```python
48
+ # CDP: Execute JS to extract table data
49
+ table_data = cdp_eval(ws, """
50
+ (function() {
51
+ var rows = document.querySelectorAll('table tbody tr');
52
+ var data = [];
53
+ rows.forEach(function(row) {
54
+ var cells = row.querySelectorAll('td');
55
+ data.push({
56
+ name: cells[0]?.textContent?.trim(),
57
+ id: cells[1]?.textContent?.trim(),
58
+ dob: cells[2]?.textContent?.trim()
59
+ });
60
+ });
61
+ return JSON.stringify(data);
62
+ })();
63
+ """)
64
+ ```
65
+
66
+ **Pros**: Works when no API exists.
67
+ **Cons**: Fragile, slow, pagination via scrolling.
68
+ **Examples**: Hillside (PracticeFusion CDP scraping).
69
+
70
+ ## Data Output Convention
71
+
72
+ All data workflows should return structured JSON:
73
+
74
+ ```json
75
+ {
76
+ "count": 42,
77
+ "data": [
78
+ {"id": "P001", "name": "John Doe", "dob": "1990-01-15"},
79
+ {"id": "P002", "name": "Jane Smith", "dob": "1985-07-22"}
80
+ ]
81
+ }
82
+ ```
83
+
84
+ For single-record queries (Get Patient By ID):
85
+
86
+ ```json
87
+ {
88
+ "patient_id": "P001",
89
+ "name": "John Doe",
90
+ "dob": "1990-01-15",
91
+ "phone": "555-1234"
92
+ }
93
+ ```
94
+
95
+ ## The Pass-Through Return Step
96
+
97
+ The workflow engine returns whatever the LAST step produces. If your last step is RPA (cleanup/navigation), the data gets lost.
98
+
99
+ **Pattern**: Add a final GENERAL_FUNCTION step that passes through the data:
100
+
101
+ ```javascript
102
+ (data) => {
103
+ return data.step_3?.data || data.step_3?.response;
104
+ }
105
+ ```
106
+
107
+ This ensures the formatted data from step 3 becomes the workflow output.
108
+
109
+ ## Pagination
110
+
111
+ ### API Pagination
112
+
113
+ ```python
114
+ all_records = []
115
+ page = 1
116
+ while True:
117
+ data = fetch_page(page, page_size=100)
118
+ all_records.extend(data['records'])
119
+ if len(data['records']) < 100:
120
+ break
121
+ page += 1
122
+ ```
123
+
124
+ ### CDP Scroll Pagination
125
+
126
+ ```python
127
+ previous_count = 0
128
+ while True:
129
+ # Scroll to bottom
130
+ cdp_eval(ws, 'window.scrollTo(0, document.body.scrollHeight)')
131
+ time.sleep(2)
132
+
133
+ # Count rows
134
+ count = int(cdp_eval(ws, 'document.querySelectorAll("table tbody tr").length'))
135
+ if count == previous_count:
136
+ break # No new rows loaded
137
+ previous_count = count
138
+ ```
139
+
140
+ ## Hydration Orchestration
141
+
142
+ When running multiple data workflows to populate a cache:
143
+
144
+ 1. **Practitioners first** — no dependencies
145
+ 2. **Appointments** — optionally filtered by practitioner IDs from step 1
146
+ 3. **Patients from appointments** — derived from appointment data (step 2)
147
+ 4. **Encounter notes** — for patients from step 3
148
+
149
+ This is the pattern used by HSMC (WFs 753-756) — each workflow is standalone but designed to chain.
150
+
151
+ ## Workflow Step Structure
152
+
153
+ A typical data workflow has 3-4 steps:
154
+
155
+ 1. **Navigate/Setup** (RPA) — navigate to the right page or prepare the API call
156
+ 2. **Extract/Scrape** (RPA) — get the raw data via API or scraping
157
+ 3. **Format** (GENERAL_FUNCTION) — transform raw data into the standard JSON format
158
+ 4. **Return** (GENERAL_FUNCTION) — pass-through step that ensures data is the workflow output
159
+
160
+ ## Config Store Properties
161
+
162
+ Standard properties for data workflows:
163
+ - `{{config.username}}` / `{{config.password}}` — credentials
164
+ - `{{config.url}}` or `{{config.base_url}}` — app URL
165
+ - `{{config.channelId}}` — RPA channel for desktop dispatch
166
+ - `{{config.sullyOrganizationId}}` — customer ID for middleware routing
167
+ - `{{config.BASE_API_URL}}` — middleware/API base URL
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: data-passing-between-steps
3
+ description: How to pass data between workflow steps in Minicor RPA workflows. JS-layer interpolation from data.input and data.step_N, config variables via {{config.xxx}}, common pitfalls with Python template vars. Use when building multi-step workflows that need to share data.
4
+ category: general
5
+ tags: [data-passing, workflow, steps, interpolation, config]
6
+ priority: 9
7
+ ---
8
+
9
+ # Data Passing Between Steps
10
+
11
+ Workflow input is available as `data.input` in the **JS wrapper**, NOT in Python directly. Dynamic values must be interpolated in the JS layer, then embedded into the Python template literal.
12
+
13
+ ## CORRECT — JS-Layer Interpolation
14
+
15
+ ```javascript
16
+ (data) => {
17
+ const mrn = data?.input?.mrn || "DEFAULT";
18
+ const pythonScript = `
19
+ mrn = "${mrn}"
20
+ # ... rest of Python script uses mrn variable
21
+ `;
22
+ return { "lam.httpRequest": { body: { script: pythonScript } } };
23
+ }
24
+ ```
25
+
26
+ ## WRONG — Python Template Vars
27
+
28
+ ```python
29
+ mrn = "{{input.mrn}}" # WRONG — this is not a config variable
30
+ mrn = data.input.mrn # WRONG — data object doesn't exist in Python
31
+ ```
32
+
33
+ ## Config Variables
34
+
35
+ `{{config.username}}` and `{{config.password}}` ARE resolved by the workflow engine and work in both JS and Python layers. Use these for credentials and environment URLs via config stores. **NEVER** hardcode credentials.
36
+
37
+ ## Previous Step Outputs
38
+
39
+ - `data.step_N.response` — for HTTP/RPA steps
40
+ - `data.step_N.data` — for GENERAL_FUNCTION steps
41
+
42
+ ## Important Notes
43
+
44
+ - `create_rpa_flow` generates the JS wrapper automatically, but if the script needs dynamic input from `data.input` or `data.step_N`, you must construct the JS wrapper yourself or update the flow after creation to add JS-layer const declarations
45
+ - The **last step** is the workflow output. If you need structured data returned, the last step must output it. Don't put meaningful data in step N and cleanup in step N+1. Combine cleanup + data return in the last step, or add a GENERAL_FUNCTION step after RPA that formats the final result.
46
+
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: desktop-uiautomation
3
+ description: Desktop RPA patterns using uiautomation, pywinauto, and pyautogui. Framework selection by app type, element-based selectors over coordinates, wait-for-element patterns, retry strategies, popup dismissal. Use when building desktop automations or Windows app RPA.
4
+ category: general
5
+ tags: [desktop, uiautomation, pywinauto, pyautogui, windows, jab]
6
+ priority: 10
7
+ ---
8
+
9
+ # Desktop UI Automation
10
+
11
+ ## Framework Selection
12
+
13
+
14
+ | App Type | Framework |
15
+ | ---------------------------- | --------------------------------------- |
16
+ | .NET / WPF / WinForms | `uiautomation` (default) or `pywinauto` |
17
+ | Java / Swing | `jab` (Java Access Bridge) |
18
+ | Electron / web-based desktop | `pywinauto` or `pyautogui` |
19
+ | Legacy Win32 | `uiautomation` |
20
+ | Unknown | Start with `uiautomation` |
21
+
22
+
23
+ Desktop scripts use `/execute` and run **one at a time** per VM (the physical screen is shared).
24
+
25
+ ## Wait for Elements (Never `time.sleep` for UI Waits)
26
+
27
+ ```python
28
+ for _ in range(20):
29
+ el = auto.WindowControl(Name="Patient Search")
30
+ if el.Exists(0.5): break
31
+ time.sleep(0.5)
32
+ else:
33
+ raise TimeoutError("Patient Search not found after 10s")
34
+ ```
35
+
36
+ ## Click by Element Selector (Not Coordinates)
37
+
38
+ ```python
39
+ # YES — element-based, resilient
40
+ auto.ButtonControl(Name="Find").Click()
41
+
42
+ # NO — coordinate-based, fragile
43
+ # pyautogui.click(517, 432)
44
+ ```
45
+
46
+ ## Retry Flaky Actions
47
+
48
+ ```python
49
+ for attempt in range(3):
50
+ try:
51
+ auto.ButtonControl(Name="Find").Click()
52
+ time.sleep(1)
53
+ if auto.ListControl(Name="Results").Exists(1): break
54
+ except Exception:
55
+ if attempt == 2: raise
56
+ time.sleep(2)
57
+ ```
58
+
59
+ ## Dismiss Popups (Check Before Major Actions)
60
+
61
+ ```python
62
+ popup = auto.WindowControl(searchDepth=1, RegexName=".*Error.*|.*Warning.*")
63
+ if popup.Exists(0.5):
64
+ close_btn = popup.ButtonControl(Name="Close")
65
+ ok_btn = popup.ButtonControl(Name="OK")
66
+ if close_btn.Exists(0.5):
67
+ close_btn.Click()
68
+ elif ok_btn.Exists(0.5):
69
+ ok_btn.Click()
70
+ ```
71
+
72
+ ## Output (Always Structured JSON)
73
+
74
+ ```python
75
+ print(json.dumps({"status": "success", "patient": name, "data": results}))
76
+ ```
77
+
78
+ ## Mixed Browser + Desktop
79
+
80
+ Some browser automations need the physical screen (OS alerts, file upload dialogs, native file picker, CAPTCHA). These **cannot use `/execute/browser`** — use `/execute` instead and treat as desktop automation.