mindweave 2.5.1 → 3.0.0
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.
- package/README.md +50 -114
- package/dist/cli/App.js +578 -303
- package/dist/cli/App.js.map +1 -1
- package/dist/cli/analytics.js +27 -18
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/attachments.js +34 -0
- package/dist/cli/attachments.js.map +1 -1
- package/dist/cli/bannerFit.js +70 -0
- package/dist/cli/bannerFit.js.map +1 -0
- package/dist/cli/bootstrap.js +41 -3
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/commands.js +4 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/components/ApprovalBox.js +3 -2
- package/dist/cli/components/ApprovalBox.js.map +1 -1
- package/dist/cli/components/BlockView.js +27 -6
- package/dist/cli/components/BlockView.js.map +1 -1
- package/dist/cli/components/FirstRunFrame.js +2 -1
- package/dist/cli/components/FirstRunFrame.js.map +1 -1
- package/dist/cli/components/KeyManager.js +5 -4
- package/dist/cli/components/KeyManager.js.map +1 -1
- package/dist/cli/components/KeySetup.js +29 -13
- package/dist/cli/components/KeySetup.js.map +1 -1
- package/dist/cli/components/MarathonBox.js +64 -0
- package/dist/cli/components/MarathonBox.js.map +1 -0
- package/dist/cli/components/McpMinitabs.js +8 -7
- package/dist/cli/components/McpMinitabs.js.map +1 -1
- package/dist/cli/components/Picker.js +4 -3
- package/dist/cli/components/Picker.js.map +1 -1
- package/dist/cli/components/PromptInput.js +47 -8
- package/dist/cli/components/PromptInput.js.map +1 -1
- package/dist/cli/components/PulseDot.js +42 -0
- package/dist/cli/components/PulseDot.js.map +1 -0
- package/dist/cli/components/SubagentView.js +9 -6
- package/dist/cli/components/SubagentView.js.map +1 -1
- package/dist/cli/components/TipLine.js +2 -1
- package/dist/cli/components/TipLine.js.map +1 -1
- package/dist/cli/components/ToolGroup.js +65 -49
- package/dist/cli/components/ToolGroup.js.map +1 -1
- package/dist/cli/components/ToolLine.js +20 -19
- package/dist/cli/components/ToolLine.js.map +1 -1
- package/dist/cli/components/TrustGate.js +2 -1
- package/dist/cli/components/TrustGate.js.map +1 -1
- package/dist/cli/components/minitabs.js +3 -2
- package/dist/cli/components/minitabs.js.map +1 -1
- package/dist/cli/desktopApp.js +45 -0
- package/dist/cli/desktopApp.js.map +1 -0
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/inkOutputPatch.js +285 -0
- package/dist/cli/inkOutputPatch.js.map +1 -0
- package/dist/cli/inkSpeed.js +29 -0
- package/dist/cli/inkSpeed.js.map +1 -0
- package/dist/cli/inkSpeedLoader.js +47 -0
- package/dist/cli/inkSpeedLoader.js.map +1 -0
- package/dist/cli/inputText.js +30 -0
- package/dist/cli/inputText.js.map +1 -0
- package/dist/cli/keyManager.js +2 -1
- package/dist/cli/keyManager.js.map +1 -1
- package/dist/cli/keyPrefs.js +90 -0
- package/dist/cli/keyPrefs.js.map +1 -0
- package/dist/cli/keySetup.js +5 -2
- package/dist/cli/keySetup.js.map +1 -1
- package/dist/cli/marathonUi.js +113 -0
- package/dist/cli/marathonUi.js.map +1 -0
- package/dist/cli/markdown.js +63 -11
- package/dist/cli/markdown.js.map +1 -1
- package/dist/cli/modes.js +3 -3
- package/dist/cli/modes.js.map +1 -1
- package/dist/cli/prodEnv.js +43 -0
- package/dist/cli/prodEnv.js.map +1 -0
- package/dist/cli/revealPace.js +5 -5
- package/dist/cli/revealPace.js.map +1 -1
- package/dist/cli/revealQueue.js +120 -0
- package/dist/cli/revealQueue.js.map +1 -0
- package/dist/cli/theme.js +47 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli/toolDisplay.js +112 -18
- package/dist/cli/toolDisplay.js.map +1 -1
- package/dist/cli/transcript.js +1 -1
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/virtualWindow.js +14 -2
- package/dist/cli/virtualWindow.js.map +1 -1
- package/dist/cli/wheelAccel.js +73 -0
- package/dist/cli/wheelAccel.js.map +1 -0
- package/dist/cli/widestLinePatch.js +48 -0
- package/dist/cli/widestLinePatch.js.map +1 -0
- package/dist/cli/workingVerb.js +88 -28
- package/dist/cli/workingVerb.js.map +1 -1
- package/dist/cli/wrap.js +1 -1
- package/dist/cli/wrap.js.map +1 -1
- package/dist/core/contextSettings.js +84 -0
- package/dist/core/contextSettings.js.map +1 -0
- package/dist/core/limitsView.js +40 -0
- package/dist/core/limitsView.js.map +1 -0
- package/dist/core/mcpServers.js +164 -0
- package/dist/core/mcpServers.js.map +1 -0
- package/dist/core/permissions.js +209 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/providerKeys.js +187 -0
- package/dist/core/providerKeys.js.map +1 -0
- package/dist/core/rulesSkills.js +142 -0
- package/dist/core/rulesSkills.js.map +1 -0
- package/dist/core/spendView.js +90 -0
- package/dist/core/spendView.js.map +1 -0
- package/dist/core/turnRunner.js +453 -60
- package/dist/core/turnRunner.js.map +1 -1
- package/dist/drivers/anthropic/client.js +24 -5
- package/dist/drivers/anthropic/client.js.map +1 -1
- package/dist/drivers/anthropic/manifest.js +15 -2
- package/dist/drivers/anthropic/manifest.js.map +1 -1
- package/dist/drivers/cerebras/manifest.js +6 -2
- package/dist/drivers/cerebras/manifest.js.map +1 -1
- package/dist/drivers/deepseek/manifest.js +12 -3
- package/dist/drivers/deepseek/manifest.js.map +1 -1
- package/dist/drivers/glm/manifest.js +3 -1
- package/dist/drivers/glm/manifest.js.map +1 -1
- package/dist/drivers/groq/manifest.js +5 -2
- package/dist/drivers/groq/manifest.js.map +1 -1
- package/dist/drivers/ollama/catalog.js +71 -0
- package/dist/drivers/ollama/catalog.js.map +1 -0
- package/dist/drivers/ollama/client.js +164 -0
- package/dist/drivers/ollama/client.js.map +1 -0
- package/dist/drivers/ollama/endpoint.js +42 -0
- package/dist/drivers/ollama/endpoint.js.map +1 -0
- package/dist/drivers/ollama/index.js +5 -0
- package/dist/drivers/ollama/index.js.map +1 -0
- package/dist/drivers/ollama/manifest.js +64 -0
- package/dist/drivers/ollama/manifest.js.map +1 -0
- package/dist/drivers/openai/client.js +10 -4
- package/dist/drivers/openai/client.js.map +1 -1
- package/dist/drivers/openai/manifest.js +46 -12
- package/dist/drivers/openai/manifest.js.map +1 -1
- package/dist/drivers/registry.js +11 -0
- package/dist/drivers/registry.js.map +1 -1
- package/dist/drivers/retryPolicy.js +26 -1
- package/dist/drivers/retryPolicy.js.map +1 -1
- package/dist/dynamo/auxModel.js +54 -0
- package/dist/dynamo/auxModel.js.map +1 -0
- package/dist/dynamo/engine.js +380 -99
- package/dist/dynamo/engine.js.map +1 -1
- package/dist/dynamo/guard.js +10 -0
- package/dist/dynamo/guard.js.map +1 -1
- package/dist/dynamo/liveMeter.js +25 -6
- package/dist/dynamo/liveMeter.js.map +1 -1
- package/dist/dynamo/marathon.js +409 -0
- package/dist/dynamo/marathon.js.map +1 -0
- package/dist/dynamo/marathonPrompt.js +45 -0
- package/dist/dynamo/marathonPrompt.js.map +1 -0
- package/dist/dynamo/model.js +6 -2
- package/dist/dynamo/model.js.map +1 -1
- package/dist/dynamo/toolBatches.js +58 -0
- package/dist/dynamo/toolBatches.js.map +1 -0
- package/dist/dynamo/usageLimits.js +446 -0
- package/dist/dynamo/usageLimits.js.map +1 -0
- package/dist/governor/freshness.js +10 -7
- package/dist/governor/freshness.js.map +1 -1
- package/dist/governor/index.js +76 -9
- package/dist/governor/index.js.map +1 -1
- package/dist/governor/write.js +43 -14
- package/dist/governor/write.js.map +1 -1
- package/dist/index.js +18 -151
- package/dist/index.js.map +1 -1
- package/dist/main.js +162 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/manager.js +18 -0
- package/dist/mcp/manager.js.map +1 -1
- package/dist/memory/allMetas.js +69 -0
- package/dist/memory/allMetas.js.map +1 -0
- package/dist/memory/compaction.js +69 -14
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/earlier.js +15 -0
- package/dist/memory/earlier.js.map +1 -0
- package/dist/memory/profile.js +93 -0
- package/dist/memory/profile.js.map +1 -0
- package/dist/memory/rewind.js +262 -0
- package/dist/memory/rewind.js.map +1 -0
- package/dist/memory/session.js +42 -10
- package/dist/memory/session.js.map +1 -1
- package/dist/memory/sessionMemory.js +48 -13
- package/dist/memory/sessionMemory.js.map +1 -1
- package/dist/memory/sessionMemoryCompact.js +1 -1
- package/dist/memory/sessionMemoryCompact.js.map +1 -1
- package/dist/memory/sessionTitle.js +50 -0
- package/dist/memory/sessionTitle.js.map +1 -0
- package/dist/memory/store.js +42 -1
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/tools/askUser.js +14 -0
- package/dist/tools/askUser.js.map +1 -1
- package/dist/tools/backgroundShells.js +208 -5
- package/dist/tools/backgroundShells.js.map +1 -1
- package/dist/tools/browser.js +176 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/cdp.js +165 -0
- package/dist/tools/cdp.js.map +1 -0
- package/dist/tools/checkpoints.js +208 -5
- package/dist/tools/checkpoints.js.map +1 -1
- package/dist/tools/deferredNative.js +2 -0
- package/dist/tools/deferredNative.js.map +1 -1
- package/dist/tools/exitPlan.js +4 -0
- package/dist/tools/exitPlan.js.map +1 -1
- package/dist/tools/hiddenDesktop.js +273 -0
- package/dist/tools/hiddenDesktop.js.map +1 -0
- package/dist/tools/listeningPorts.js +134 -0
- package/dist/tools/listeningPorts.js.map +1 -0
- package/dist/tools/mcpSearch.js +8 -0
- package/dist/tools/mcpSearch.js.map +1 -1
- package/dist/tools/mindweaveStatus.js +1 -1
- package/dist/tools/mindweaveStatus.js.map +1 -1
- package/dist/tools/registry.js +3 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/runCommand.js +107 -6
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/screenshot.js +4 -6
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/screenshotWin.js +26 -9
- package/dist/tools/screenshotWin.js.map +1 -1
- package/dist/tools/stateCheckpoint.js +128 -0
- package/dist/tools/stateCheckpoint.js.map +1 -0
- package/dist/tools/todo.js +6 -0
- package/dist/tools/todo.js.map +1 -1
- package/dist/tools/ui.js +1295 -0
- package/dist/tools/ui.js.map +1 -0
- package/dist/tools/uiHide.js +356 -0
- package/dist/tools/uiHide.js.map +1 -0
- package/dist/tools/uiPage.js +861 -0
- package/dist/tools/uiPage.js.map +1 -0
- package/dist/tools/uiWin.js +506 -0
- package/dist/tools/uiWin.js.map +1 -0
- package/dist/tools/webFetch.js +32 -25
- package/dist/tools/webFetch.js.map +1 -1
- package/dist/tools/webSearch.js +12 -0
- package/dist/tools/webSearch.js.map +1 -1
- package/package.json +78 -78
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiPage.js","sourceRoot":"","sources":["../../src/tools/uiPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* uiWin.ts — the Windows half of `ui`: read a window's controls and act on them.
|
|
3
|
+
*
|
|
4
|
+
* Built on UI Automation, the accessibility layer screen readers use. Every action here
|
|
5
|
+
* goes through a control PATTERN (Invoke, Toggle, SelectionItem, ExpandCollapse, Value,
|
|
6
|
+
* Scroll), which the app carries out itself. Nothing is sent through the real mouse or
|
|
7
|
+
* keyboard, so the user's cursor and typing are never touched and the window can sit
|
|
8
|
+
* behind others while the agent works on it.
|
|
9
|
+
*
|
|
10
|
+
* Like screenshotWin.ts this runs through PowerShell against .NET, which ship with the
|
|
11
|
+
* OS, and the script is a string because `tsc` copies no assets into `dist/`.
|
|
12
|
+
*
|
|
13
|
+
* Controls are identified between calls by their UIA RuntimeId. It is stable for as
|
|
14
|
+
* long as the control exists, so a number the model got from `look` still means the
|
|
15
|
+
* same button a call later, and a control that has since gone away is reported as gone
|
|
16
|
+
* instead of pressing whatever took its place.
|
|
17
|
+
*
|
|
18
|
+
* The scope is every top-level window of the target's PROCESS, not just the one window:
|
|
19
|
+
* a dialog, a dropdown's popup or a context menu is its own top-level window, and an
|
|
20
|
+
* agent that pressed "Save as" and could not see the dialog it opened would be stuck.
|
|
21
|
+
*/
|
|
22
|
+
import { spawn } from "node:child_process";
|
|
23
|
+
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
24
|
+
import { tmpdir } from "node:os";
|
|
25
|
+
import { join } from "node:path";
|
|
26
|
+
import { HIDDEN_MARK, DESK_CS, windowArgs } from "./hiddenDesktop.js";
|
|
27
|
+
const PS_TIMEOUT_MS = 30_000;
|
|
28
|
+
const SCRIPT = String.raw `
|
|
29
|
+
param([string]$Mode = "list", [string]$Handle = "", [string]$Target = "", [string]$Action = "", [string]$Text = "", [int]$Settle = 0, [string]$Desktop = "")
|
|
30
|
+
$ErrorActionPreference = "Stop"
|
|
31
|
+
$refs = @(
|
|
32
|
+
[Reflection.Assembly]::LoadWithPartialName("UIAutomationClient").Location,
|
|
33
|
+
[Reflection.Assembly]::LoadWithPartialName("UIAutomationTypes").Location,
|
|
34
|
+
[Reflection.Assembly]::LoadWithPartialName("WindowsBase").Location
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
Add-Type -ReferencedAssemblies $refs -TypeDefinition @"
|
|
38
|
+
using System;
|
|
39
|
+
using System.Collections.Generic;
|
|
40
|
+
using System.Runtime.InteropServices;
|
|
41
|
+
using System.Text;
|
|
42
|
+
using System.Windows.Automation;
|
|
43
|
+
|
|
44
|
+
public static class MwUi {
|
|
45
|
+
[DllImport("user32.dll")] static extern bool SetProcessDPIAware();
|
|
46
|
+
[DllImport("user32.dll")] static extern bool IsWindow(IntPtr h);
|
|
47
|
+
[DllImport("user32.dll")] static extern bool IsWindowVisible(IntPtr h);
|
|
48
|
+
[DllImport("user32.dll")] static extern uint GetWindowThreadProcessId(IntPtr h, out uint pid);
|
|
49
|
+
[DllImport("user32.dll")] static extern bool IsIconic(IntPtr h);
|
|
50
|
+
[DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern int GetWindowText(IntPtr h, StringBuilder s, int n);
|
|
51
|
+
delegate bool EnumProc(IntPtr hWnd, IntPtr lParam);
|
|
52
|
+
[DllImport("user32.dll")] static extern bool EnumWindows(EnumProc cb, IntPtr l);
|
|
53
|
+
[DllImport("user32.dll")] static extern bool PostMessage(IntPtr h, uint msg, IntPtr w, IntPtr l);
|
|
54
|
+
|
|
55
|
+
// A classic Win32 button (WinForms included) refuses UIA's Invoke on the hidden desktop
|
|
56
|
+
// with "not valid due to the current state", measured, while its own click message
|
|
57
|
+
// works there. Posted, not sent: a click that opens a modal dialog would otherwise
|
|
58
|
+
// block this script until the dialog closed.
|
|
59
|
+
static bool PostClick(AutomationElement e) {
|
|
60
|
+
try {
|
|
61
|
+
var h = new IntPtr(e.Current.NativeWindowHandle);
|
|
62
|
+
if (h == IntPtr.Zero || e.Current.ClassName.IndexOf("button", StringComparison.OrdinalIgnoreCase) < 0) return false;
|
|
63
|
+
return PostMessage(h, 0x00F5 /* BM_CLICK */, IntPtr.Zero, IntPtr.Zero);
|
|
64
|
+
} catch { return false; }
|
|
65
|
+
}
|
|
66
|
+
public static void Dpi() { SetProcessDPIAware(); }
|
|
67
|
+
|
|
68
|
+
// The process's window that is on top: an open dialog, else the window itself. This is
|
|
69
|
+
// the one to photograph, since a dialog is its own window and a picture of the window
|
|
70
|
+
// under it would not show it.
|
|
71
|
+
static IntPtr Top(uint pid, IntPtr fallback) {
|
|
72
|
+
IntPtr found = IntPtr.Zero;
|
|
73
|
+
EnumWindows(delegate(IntPtr w, IntPtr l) {
|
|
74
|
+
uint p; GetWindowThreadProcessId(w, out p);
|
|
75
|
+
if (p != pid || !IsWindowVisible(w) || IsIconic(w)) return true;
|
|
76
|
+
if (GetWindowText(w, new StringBuilder(2), 2) == 0 && w != fallback) return true;
|
|
77
|
+
found = w;
|
|
78
|
+
return false;
|
|
79
|
+
}, IntPtr.Zero);
|
|
80
|
+
return found == IntPtr.Zero ? fallback : found;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const int MAX_ELEMENTS = 400;
|
|
84
|
+
const int MAX_TEXTS = 60;
|
|
85
|
+
|
|
86
|
+
static string Clean(string s, int max) {
|
|
87
|
+
if (s == null) return "";
|
|
88
|
+
var t = s.Replace("\t", " ").Replace("\r", " ").Replace("\n", " ").Trim();
|
|
89
|
+
return t.Length > max ? t.Substring(0, max - 1) + "…" : t;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static string Rid(AutomationElement e) {
|
|
93
|
+
try { var r = e.GetRuntimeId(); return r == null ? "" : string.Join(".", r); } catch { return ""; }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Every top-level window of the process that owns h, front to back. The desktop's
|
|
97
|
+
// children come in z-order, so the first one is what is on top: an open dialog.
|
|
98
|
+
static List<AutomationElement> Windows(IntPtr h, int pid) {
|
|
99
|
+
var list = new List<AutomationElement>();
|
|
100
|
+
var cond = new PropertyCondition(AutomationElement.ProcessIdProperty, pid);
|
|
101
|
+
foreach (AutomationElement w in AutomationElement.RootElement.FindAll(TreeScope.Children, cond)) {
|
|
102
|
+
try {
|
|
103
|
+
var wh = new IntPtr(w.Current.NativeWindowHandle);
|
|
104
|
+
if (wh != IntPtr.Zero && !IsWindowVisible(wh)) continue;
|
|
105
|
+
list.Add(w);
|
|
106
|
+
} catch { }
|
|
107
|
+
}
|
|
108
|
+
if (list.Count == 0) list.Add(AutomationElement.FromHandle(h));
|
|
109
|
+
return list;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
static string Kind(ControlType t) {
|
|
113
|
+
if (t == null) return "control";
|
|
114
|
+
var n = t.ProgrammaticName ?? "";
|
|
115
|
+
n = n.StartsWith("ControlType.") ? n.Substring(12) : n;
|
|
116
|
+
return n.Length == 0 ? "control" : n.ToLowerInvariant();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
static readonly HashSet<string> ClickableKinds = new HashSet<string> {
|
|
120
|
+
"button", "splitbutton", "menuitem", "tabitem", "listitem", "treeitem", "hyperlink",
|
|
121
|
+
"checkbox", "radiobutton", "combobox", "dataitem", "headeritem"
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// What can be done with this control, from the patterns it offers. Empty means it is
|
|
125
|
+
// only something to read, and it is left out of the list.
|
|
126
|
+
static string Actions(AutomationElement e, string kind) {
|
|
127
|
+
var a = new List<string>();
|
|
128
|
+
object p;
|
|
129
|
+
bool invoke = e.TryGetCurrentPattern(InvokePattern.Pattern, out p);
|
|
130
|
+
bool toggle = e.TryGetCurrentPattern(TogglePattern.Pattern, out p);
|
|
131
|
+
bool select = e.TryGetCurrentPattern(SelectionItemPattern.Pattern, out p);
|
|
132
|
+
bool expand = e.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out p);
|
|
133
|
+
if (invoke || toggle || select || expand || ClickableKinds.Contains(kind)) a.Add("click");
|
|
134
|
+
if (e.TryGetCurrentPattern(ValuePattern.Pattern, out p)) {
|
|
135
|
+
try { if (!((ValuePattern)p).Current.IsReadOnly) a.Add("type"); } catch { }
|
|
136
|
+
}
|
|
137
|
+
if (e.TryGetCurrentPattern(ScrollPattern.Pattern, out p)) {
|
|
138
|
+
try {
|
|
139
|
+
var s = ((ScrollPattern)p).Current;
|
|
140
|
+
if (s.VerticallyScrollable || s.HorizontallyScrollable) a.Add("scroll");
|
|
141
|
+
} catch { }
|
|
142
|
+
}
|
|
143
|
+
return string.Join(",", a);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// The state worth saying: checked, selected, expanded, disabled, the current value.
|
|
147
|
+
static string State(AutomationElement e) {
|
|
148
|
+
var s = new List<string>();
|
|
149
|
+
object p;
|
|
150
|
+
try {
|
|
151
|
+
if (e.TryGetCurrentPattern(TogglePattern.Pattern, out p)) {
|
|
152
|
+
var st = ((TogglePattern)p).Current.ToggleState;
|
|
153
|
+
s.Add(st == ToggleState.On ? "checked" : st == ToggleState.Off ? "unchecked" : "mixed");
|
|
154
|
+
}
|
|
155
|
+
if (e.TryGetCurrentPattern(SelectionItemPattern.Pattern, out p) && ((SelectionItemPattern)p).Current.IsSelected) s.Add("selected");
|
|
156
|
+
if (e.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out p)) {
|
|
157
|
+
var st = ((ExpandCollapsePattern)p).Current.ExpandCollapseState;
|
|
158
|
+
if (st == ExpandCollapseState.Expanded) s.Add("expanded");
|
|
159
|
+
else if (st == ExpandCollapseState.Collapsed) s.Add("collapsed");
|
|
160
|
+
}
|
|
161
|
+
} catch { }
|
|
162
|
+
try { if (!e.Current.IsEnabled) s.Add("disabled"); } catch { }
|
|
163
|
+
try { if (e.Current.IsPassword) s.Add("password"); } catch { }
|
|
164
|
+
return string.Join(",", s);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
static string Value(AutomationElement e) {
|
|
168
|
+
object p;
|
|
169
|
+
try {
|
|
170
|
+
if (e.Current.IsPassword) return "";
|
|
171
|
+
if (e.TryGetCurrentPattern(ValuePattern.Pattern, out p)) return Clean(((ValuePattern)p).Current.Value, 80);
|
|
172
|
+
} catch { }
|
|
173
|
+
return "";
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// The window's own furniture: title-bar buttons and scrollbar arrows. Every window has
|
|
177
|
+
// them, none of them is the app, and listing Close next to the app's buttons only
|
|
178
|
+
// invites pressing it. Scrolling has its own action.
|
|
179
|
+
static HashSet<string> Chrome(AutomationElement w) {
|
|
180
|
+
var ids = new HashSet<string>();
|
|
181
|
+
var bars = new OrCondition(
|
|
182
|
+
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TitleBar),
|
|
183
|
+
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ScrollBar));
|
|
184
|
+
try {
|
|
185
|
+
foreach (AutomationElement bar in w.FindAll(TreeScope.Descendants, bars)) {
|
|
186
|
+
ids.Add(Rid(bar));
|
|
187
|
+
foreach (AutomationElement c in bar.FindAll(TreeScope.Descendants, Condition.TrueCondition)) ids.Add(Rid(c));
|
|
188
|
+
}
|
|
189
|
+
} catch { }
|
|
190
|
+
return ids;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Chromium (Electron, Tauri's WebView2, browsers) builds a page's accessibility tree
|
|
194
|
+
// only once something asks for it, so the very first read of a web view finds it
|
|
195
|
+
// empty. Asking is what wakes it, but the process that asked keeps seeing the empty
|
|
196
|
+
// tree it was first handed; a NEW reader sees the page. So this only reports that
|
|
197
|
+
// the view was asleep, and the caller reads again from a fresh process.
|
|
198
|
+
static bool WebAsleep(AutomationElement w) {
|
|
199
|
+
try {
|
|
200
|
+
var host = w.FindFirst(TreeScope.Descendants,
|
|
201
|
+
new PropertyCondition(AutomationElement.ClassNameProperty, "Chrome_RenderWidgetHostHWND"));
|
|
202
|
+
return host != null && host.FindAll(TreeScope.Descendants, Condition.TrueCondition).Count <= 1;
|
|
203
|
+
} catch { return false; }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// The same two, run on the hidden desktop when the window lives there (MwDesk).
|
|
207
|
+
public static string ListOn(string desk, IntPtr h) { return MwDesk.On(desk, () => List(h)); }
|
|
208
|
+
public static string ActOn(string desk, IntPtr h, string rid, string action, string text) {
|
|
209
|
+
return MwDesk.On(desk, () => Act(h, rid, action, text));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// One line per window, then one per control. Tabs separate fields; nothing inside a
|
|
213
|
+
// field can contain one (Clean).
|
|
214
|
+
public static string List(IntPtr h) {
|
|
215
|
+
if (!IsWindow(h)) return "ERR the window is gone";
|
|
216
|
+
uint pid; GetWindowThreadProcessId(h, out pid);
|
|
217
|
+
var sb = new StringBuilder();
|
|
218
|
+
var top = Top(pid, h);
|
|
219
|
+
var topTitle = new StringBuilder(200);
|
|
220
|
+
GetWindowText(top, topTitle, 200);
|
|
221
|
+
sb.Append("TOP\t" + top.ToInt64() + "\t" + Clean(topTitle.ToString(), 80) + "\n");
|
|
222
|
+
int count = 0, more = 0, wi = 0, texts = 0;
|
|
223
|
+
var cond = new PropertyCondition(AutomationElement.IsControlElementProperty, true);
|
|
224
|
+
foreach (var w in Windows(h, (int)pid)) {
|
|
225
|
+
string title = "";
|
|
226
|
+
try { title = Clean(w.Current.Name, 80); } catch { }
|
|
227
|
+
sb.Append("WIN\t" + w.Current.NativeWindowHandle + "\t" + title + "\n");
|
|
228
|
+
if (WebAsleep(w)) sb.Append("ASLEEP\n");
|
|
229
|
+
AutomationElementCollection all;
|
|
230
|
+
try { all = w.FindAll(TreeScope.Descendants, cond); } catch { wi++; continue; }
|
|
231
|
+
var skip = Chrome(w);
|
|
232
|
+
// Chromium exposes a page twice (through its render window and through the
|
|
233
|
+
// app's own view tree), with different ids but the same place on screen.
|
|
234
|
+
var placed = new HashSet<string>();
|
|
235
|
+
string lastClickable = null;
|
|
236
|
+
var windowRect = System.Windows.Rect.Empty;
|
|
237
|
+
try { windowRect = w.Current.BoundingRectangle; } catch { }
|
|
238
|
+
foreach (AutomationElement e in all) {
|
|
239
|
+
try {
|
|
240
|
+
var rid = Rid(e);
|
|
241
|
+
if (skip.Contains(rid)) continue;
|
|
242
|
+
var kind = Kind(e.Current.ControlType);
|
|
243
|
+
// An unnamed piece inside a control already listed (the icon inside a
|
|
244
|
+
// button) is part of that control, not a second one.
|
|
245
|
+
if (lastClickable != null && rid.StartsWith(lastClickable + ".") &&
|
|
246
|
+
(e.Current.Name.Length == 0 || kind == "image" || kind == "text")) continue;
|
|
247
|
+
var acts = Actions(e, kind);
|
|
248
|
+
if (acts.Length == 0) {
|
|
249
|
+
// Words on screen that are not controls (a status line, a heading, an
|
|
250
|
+
// error message): what a model that cannot see the picture reads the
|
|
251
|
+
// result of an action from.
|
|
252
|
+
if (kind == "text" && texts < MAX_TEXTS) {
|
|
253
|
+
var words = Clean(e.Current.Name, 120);
|
|
254
|
+
if (words.Length > 0) { texts++; sb.Append("TX\t" + wi + "\t" + words + "\n"); }
|
|
255
|
+
}
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
var r = e.Current.BoundingRectangle;
|
|
259
|
+
// Scrolled out of the window is still THERE (the rest of a long list, which
|
|
260
|
+
// a web view reports as off-screen with no position) and can still be
|
|
261
|
+
// pressed; anything else with no size is collapsed away and not there.
|
|
262
|
+
bool outOfView = false;
|
|
263
|
+
if (r.IsEmpty || r.Width < 1 || r.Height < 1) {
|
|
264
|
+
if (!e.Current.IsOffscreen) continue;
|
|
265
|
+
outOfView = true;
|
|
266
|
+
} else if (!windowRect.IsEmpty && !r.IntersectsWith(windowRect)) {
|
|
267
|
+
outOfView = true;
|
|
268
|
+
}
|
|
269
|
+
// Remembered even when it is a duplicate, so the duplicate's own icon is
|
|
270
|
+
// recognised as part of it too.
|
|
271
|
+
if (acts.Contains("click")) lastClickable = rid;
|
|
272
|
+
if (!placed.Add(kind + "|" + e.Current.Name + "|" + (outOfView ? "off" : r.ToString()))) continue;
|
|
273
|
+
if (count >= MAX_ELEMENTS) { more++; continue; }
|
|
274
|
+
count++;
|
|
275
|
+
var state = State(e);
|
|
276
|
+
if (outOfView) state = state.Length > 0 ? state + ",out of view" : "out of view";
|
|
277
|
+
sb.Append("EL\t" + Rid(e) + "\t" + wi + "\t" + kind + "\t" + Clean(e.Current.Name, 80) + "\t" +
|
|
278
|
+
Value(e) + "\t" + acts + "\t" + state + "\n");
|
|
279
|
+
} catch { }
|
|
280
|
+
}
|
|
281
|
+
wi++;
|
|
282
|
+
}
|
|
283
|
+
if (more > 0) sb.Append("MORE\t" + more + "\n");
|
|
284
|
+
return sb.ToString();
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
static AutomationElement Find(IntPtr h, string rid) {
|
|
288
|
+
uint pid; GetWindowThreadProcessId(h, out pid);
|
|
289
|
+
var cond = new PropertyCondition(AutomationElement.IsControlElementProperty, true);
|
|
290
|
+
foreach (var w in Windows(h, (int)pid)) {
|
|
291
|
+
AutomationElementCollection all;
|
|
292
|
+
try { all = w.FindAll(TreeScope.Descendants, cond); } catch { continue; }
|
|
293
|
+
foreach (AutomationElement e in all) if (Rid(e) == rid) return e;
|
|
294
|
+
}
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Carry out one action through the control's own pattern. Returns "OK <what was done>"
|
|
299
|
+
// or "ERR <why not>", in words the model can act on.
|
|
300
|
+
public static string Act(IntPtr h, string rid, string action, string text) {
|
|
301
|
+
if (!IsWindow(h)) return "ERR the window is gone";
|
|
302
|
+
var e = Find(h, rid);
|
|
303
|
+
if (e == null) return "ERR GONE";
|
|
304
|
+
object p = null;
|
|
305
|
+
try {
|
|
306
|
+
if (!e.Current.IsEnabled) return "ERR it is disabled";
|
|
307
|
+
if (action == "click") {
|
|
308
|
+
// Bring it into view first where it can say how, so a list item further down
|
|
309
|
+
// is pressed where the user would see it.
|
|
310
|
+
if (e.TryGetCurrentPattern(ScrollItemPattern.Pattern, out p)) { try { ((ScrollItemPattern)p).ScrollIntoView(); } catch { } }
|
|
311
|
+
if (e.TryGetCurrentPattern(InvokePattern.Pattern, out p)) {
|
|
312
|
+
try { ((InvokePattern)p).Invoke(); }
|
|
313
|
+
catch (InvalidOperationException) { if (!PostClick(e)) throw; }
|
|
314
|
+
return "OK pressed";
|
|
315
|
+
}
|
|
316
|
+
if (e.TryGetCurrentPattern(TogglePattern.Pattern, out p)) { ((TogglePattern)p).Toggle(); return "OK toggled"; }
|
|
317
|
+
if (e.TryGetCurrentPattern(SelectionItemPattern.Pattern, out p)) { ((SelectionItemPattern)p).Select(); return "OK selected"; }
|
|
318
|
+
if (e.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out p)) {
|
|
319
|
+
var ec = (ExpandCollapsePattern)p;
|
|
320
|
+
if (ec.Current.ExpandCollapseState == ExpandCollapseState.Expanded) { ec.Collapse(); return "OK collapsed"; }
|
|
321
|
+
ec.Expand(); return "OK expanded";
|
|
322
|
+
}
|
|
323
|
+
return "ERR it offers no way to be pressed without the real mouse";
|
|
324
|
+
}
|
|
325
|
+
if (action == "type") {
|
|
326
|
+
if (e.Current.IsPassword) return "ERR it is a password field; ask the user to type it";
|
|
327
|
+
if (!e.TryGetCurrentPattern(ValuePattern.Pattern, out p)) return "ERR it does not take text";
|
|
328
|
+
var vp = (ValuePattern)p;
|
|
329
|
+
if (vp.Current.IsReadOnly) return "ERR it is read-only";
|
|
330
|
+
vp.SetValue(text);
|
|
331
|
+
return "OK typed";
|
|
332
|
+
}
|
|
333
|
+
if (action.StartsWith("scroll")) {
|
|
334
|
+
// The control itself if it scrolls, otherwise the nearest ancestor that does.
|
|
335
|
+
var cur = e;
|
|
336
|
+
var walker = TreeWalker.ControlViewWalker;
|
|
337
|
+
while (cur != null && !cur.TryGetCurrentPattern(ScrollPattern.Pattern, out p)) cur = walker.GetParent(cur);
|
|
338
|
+
if (cur == null) {
|
|
339
|
+
// A web page's own scrolling is not exposed, but each item can bring
|
|
340
|
+
// itself into view, which is what scrolling to it is for.
|
|
341
|
+
if (e.TryGetCurrentPattern(ScrollItemPattern.Pattern, out p)) {
|
|
342
|
+
((ScrollItemPattern)p).ScrollIntoView();
|
|
343
|
+
return "OK brought into view";
|
|
344
|
+
}
|
|
345
|
+
return "ERR nothing around it scrolls";
|
|
346
|
+
}
|
|
347
|
+
var sp = (ScrollPattern)p;
|
|
348
|
+
var big = ScrollAmount.LargeIncrement; var back = ScrollAmount.LargeDecrement; var none = ScrollAmount.NoAmount;
|
|
349
|
+
if (action == "scroll-down") sp.Scroll(none, big);
|
|
350
|
+
else if (action == "scroll-up") sp.Scroll(none, back);
|
|
351
|
+
else if (action == "scroll-right") sp.Scroll(big, none);
|
|
352
|
+
else if (action == "scroll-left") sp.Scroll(back, none);
|
|
353
|
+
else return "ERR unknown direction";
|
|
354
|
+
return "OK scrolled";
|
|
355
|
+
}
|
|
356
|
+
return "ERR unknown action";
|
|
357
|
+
} catch (Exception ex) {
|
|
358
|
+
return "ERR " + Clean(ex.Message, 200);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
${DESK_CS}
|
|
363
|
+
"@
|
|
364
|
+
|
|
365
|
+
[MwUi]::Dpi() | Out-Null
|
|
366
|
+
$h = [IntPtr][Int64]$Handle
|
|
367
|
+
$out = ""
|
|
368
|
+
if ($Mode -eq "act") {
|
|
369
|
+
$t = [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($Text.Substring(1)))
|
|
370
|
+
$r = [MwUi]::ActOn($Desktop, $h, $Target, $Action, $t)
|
|
371
|
+
$out = "ACT" + [char]9 + $r + [char]10
|
|
372
|
+
if ($Settle -gt 0) { Start-Sleep -Milliseconds $Settle }
|
|
373
|
+
}
|
|
374
|
+
$out += [MwUi]::ListOn($Desktop, $h)
|
|
375
|
+
# Raw UTF-8 bytes, bypassing PowerShell's own output encoding, which garbles anything
|
|
376
|
+
# outside the ANSI code page (a title in another script, or a plain ellipsis).
|
|
377
|
+
$bytes = [System.Text.Encoding]::UTF8.GetBytes($out)
|
|
378
|
+
$stdout = [Console]::OpenStandardOutput()
|
|
379
|
+
$stdout.Write($bytes, 0, $bytes.Length)
|
|
380
|
+
$stdout.Flush()
|
|
381
|
+
exit 0
|
|
382
|
+
`;
|
|
383
|
+
let scriptPath = null;
|
|
384
|
+
async function ensureScript() {
|
|
385
|
+
if (scriptPath)
|
|
386
|
+
return scriptPath;
|
|
387
|
+
const dir = await mkdtemp(join(tmpdir(), "mindweave-ui-"));
|
|
388
|
+
const path = join(dir, "ui.ps1");
|
|
389
|
+
await writeFile(path, SCRIPT, "utf8");
|
|
390
|
+
scriptPath = path;
|
|
391
|
+
return path;
|
|
392
|
+
}
|
|
393
|
+
async function runScript(args, signal) {
|
|
394
|
+
const script = await ensureScript();
|
|
395
|
+
return await new Promise((resolve, reject) => {
|
|
396
|
+
const child = spawn("powershell.exe", ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-File", script, ...args], { windowsHide: true });
|
|
397
|
+
let out = "";
|
|
398
|
+
let err = "";
|
|
399
|
+
const timer = setTimeout(() => {
|
|
400
|
+
child.kill();
|
|
401
|
+
reject(new Error(`reading the window took longer than ${PS_TIMEOUT_MS / 1000}s`));
|
|
402
|
+
}, PS_TIMEOUT_MS);
|
|
403
|
+
const onAbort = () => child.kill();
|
|
404
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
405
|
+
child.stdout.on("data", (d) => (out += d.toString("utf8")));
|
|
406
|
+
child.stderr.on("data", (d) => (err += d.toString()));
|
|
407
|
+
child.on("error", (e) => {
|
|
408
|
+
clearTimeout(timer);
|
|
409
|
+
signal?.removeEventListener("abort", onAbort);
|
|
410
|
+
reject(e);
|
|
411
|
+
});
|
|
412
|
+
child.on("close", (code) => {
|
|
413
|
+
clearTimeout(timer);
|
|
414
|
+
signal?.removeEventListener("abort", onAbort);
|
|
415
|
+
if (signal?.aborted)
|
|
416
|
+
reject(new Error("stopped"));
|
|
417
|
+
else if (code === 0)
|
|
418
|
+
resolve(out);
|
|
419
|
+
else
|
|
420
|
+
reject(new Error(err.split(/\r?\n/).find((l) => l.trim())?.trim() || `PowerShell exited ${code}`));
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
/** Parse the script's output. Pure, so it is tested without a desktop. */
|
|
425
|
+
export function parseSnapshot(stdout) {
|
|
426
|
+
const snap = { windows: [], controls: [], texts: [], more: 0 };
|
|
427
|
+
for (const line of stdout.split(/\r?\n/)) {
|
|
428
|
+
const f = line.split("\t");
|
|
429
|
+
if (f[0] === "ACT" && f[1] !== undefined) {
|
|
430
|
+
const body = f.slice(1).join("\t");
|
|
431
|
+
snap.acted = body.startsWith("OK")
|
|
432
|
+
? { ok: true, text: body.replace(/^OK\s*/, "") }
|
|
433
|
+
: { ok: false, text: body.replace(/^ERR\s*/, "") };
|
|
434
|
+
}
|
|
435
|
+
else if (f[0] === "TOP" && f.length >= 3) {
|
|
436
|
+
snap.top = { handle: f[1], title: f[2] };
|
|
437
|
+
}
|
|
438
|
+
else if (f[0] === "WIN" && f.length >= 3) {
|
|
439
|
+
snap.windows.push({ handle: f[1], title: f[2] });
|
|
440
|
+
}
|
|
441
|
+
else if (f[0] === "EL" && f.length >= 8) {
|
|
442
|
+
snap.controls.push({
|
|
443
|
+
id: f[1],
|
|
444
|
+
window: Number(f[2]) || 0,
|
|
445
|
+
kind: f[3],
|
|
446
|
+
name: f[4],
|
|
447
|
+
value: f[5],
|
|
448
|
+
actions: f[6].split(",").filter(Boolean),
|
|
449
|
+
state: f[7].split(",").filter(Boolean),
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
else if (f[0] === "TX" && f.length >= 3) {
|
|
453
|
+
snap.texts.push({ window: Number(f[1]) || 0, text: f.slice(2).join(" ") });
|
|
454
|
+
}
|
|
455
|
+
else if (f[0] === "ASLEEP") {
|
|
456
|
+
snap.asleep = true;
|
|
457
|
+
}
|
|
458
|
+
else if (f[0] === "MORE") {
|
|
459
|
+
snap.more = Number(f[1]) || 0;
|
|
460
|
+
}
|
|
461
|
+
else if (f[0]?.startsWith("ERR")) {
|
|
462
|
+
snap.error = line.replace(/^ERR\s*/, "");
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return snap;
|
|
466
|
+
}
|
|
467
|
+
/** The script's arguments for a window, and its snapshot's handles marked the same way
|
|
468
|
+
* when it lives on the hidden desktop, so a picture of it is taken there too. */
|
|
469
|
+
function listArgs(handle) {
|
|
470
|
+
const t = windowArgs(handle);
|
|
471
|
+
return ["-Handle", t.handle, ...t.desktop];
|
|
472
|
+
}
|
|
473
|
+
function marked(snap, handle) {
|
|
474
|
+
if (!handle.startsWith(HIDDEN_MARK))
|
|
475
|
+
return snap;
|
|
476
|
+
const mark = (w) => ({ ...w, handle: HIDDEN_MARK + w.handle });
|
|
477
|
+
return { ...snap, top: snap.top && mark(snap.top), windows: snap.windows.map(mark) };
|
|
478
|
+
}
|
|
479
|
+
/** Read the controls of `handle`'s process windows. */
|
|
480
|
+
export async function readControls(handle, signal) {
|
|
481
|
+
return await awake(marked(parseSnapshot(await runScript(["-Mode", "list", ...listArgs(handle)], signal)), handle), handle, signal);
|
|
482
|
+
}
|
|
483
|
+
/** How many fresh reads a sleeping web view gets before its list is taken as it is. */
|
|
484
|
+
const WAKE_RETRIES = 2;
|
|
485
|
+
/**
|
|
486
|
+
* A web view that was asleep has been woken by that very read, but only a new reader sees
|
|
487
|
+
* the page (see WebAsleep in the script), so read again from a fresh process. The action
|
|
488
|
+
* a snapshot carries is kept: it already happened and must not be repeated.
|
|
489
|
+
*/
|
|
490
|
+
async function awake(snap, handle, signal) {
|
|
491
|
+
for (let i = 0; i < WAKE_RETRIES && snap.asleep && !snap.error; i++) {
|
|
492
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
493
|
+
const again = marked(parseSnapshot(await runScript(["-Mode", "list", ...listArgs(handle)], signal)), handle);
|
|
494
|
+
snap = { ...again, acted: snap.acted };
|
|
495
|
+
}
|
|
496
|
+
return snap;
|
|
497
|
+
}
|
|
498
|
+
/** Act on one control, let the app settle, then read the controls again. */
|
|
499
|
+
export async function actOn(handle, controlId, action, text, settleMs, signal) {
|
|
500
|
+
// Prefixed so the argument is never empty: an empty string does not survive the trip
|
|
501
|
+
// through PowerShell's -File argument parsing.
|
|
502
|
+
const b64 = "x" + Buffer.from(text, "utf8").toString("base64");
|
|
503
|
+
const snap = marked(parseSnapshot(await runScript(["-Mode", "act", ...listArgs(handle), "-Target", controlId, "-Action", action, "-Text", b64, "-Settle", String(settleMs)], signal)), handle);
|
|
504
|
+
return await awake(snap, handle, signal);
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=uiWin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiWin.js","sourceRoot":"","sources":["../../src/tools/uiWin.ts"],"names":[],"mappings":"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"}
|