codeloop-mcp-server 0.1.62 → 0.1.63

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.
@@ -49,6 +49,29 @@ export interface MultiStrategyCloseResult {
49
49
  /** HWND captured at first detection, used by kill-window escalation. */
50
50
  hwnd?: string;
51
51
  }
52
+ /**
53
+ * 0.1.63 H12 — deterministic confirm/cancel for desktop dialogs.
54
+ *
55
+ * The Photometry-DB delete-confirm raised a Yes/No MessageBox. The old
56
+ * codeloop_handle_modal only suggested an Enter/Escape keystroke, which is
57
+ * fragile: the default button on a destructive Yes/No box is frequently
58
+ * "No", so Enter would silently abort the delete and Escape would too. This
59
+ * walks the dialog's button subtree via UIA and INVOKES the button whose
60
+ * name matches the chosen decision, so "confirm" reliably clicks
61
+ * Yes/OK/Save/Delete/Continue and "cancel" clicks No/Cancel/Discard.
62
+ *
63
+ * Returns `{ ok, button?, error? }`. `ok:false` lets handle_modal fall back
64
+ * to the keystroke path. Windows-only; other platforms return ok:false.
65
+ */
66
+ export declare function invokeDialogDecisionButton(opts: {
67
+ decision: "confirm" | "cancel";
68
+ hwnd?: string;
69
+ cwd: string;
70
+ }): Promise<{
71
+ ok: boolean;
72
+ button?: string;
73
+ error?: string;
74
+ }>;
52
75
  /**
53
76
  * Run the strategy ladder against the detected modal. Re-detects after
54
77
  * each step. Caller is expected to have already called detectModal and
@@ -1 +1 @@
1
- {"version":3,"file":"modal_close_strategies.d.ts","sourceRoot":"","sources":["../../src/runners/modal_close_strategies.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,mEAAmE;IACnE,eAAe,EAAE,oBAAoB,CAAC;IACtC,mFAAmF;IACnF,UAAU,EAAE,MAAM,GAAG,sBAAsB,CAAC;IAC5C,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoGD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,iBAAiB,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAyEpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,eAAe,GAAG,mBAAmB,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChG,eAAe,EAAE,oBAAoB,CAAC;CACvC;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqEjC"}
1
+ {"version":3,"file":"modal_close_strategies.d.ts","sourceRoot":"","sources":["../../src/runners/modal_close_strategies.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,mEAAmE;IACnE,eAAe,EAAE,oBAAoB,CAAC;IACtC,mFAAmF;IACnF,UAAU,EAAE,MAAM,GAAG,sBAAsB,CAAC;IAC5C,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoGD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6C5D;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,iBAAiB,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAyEpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,eAAe,GAAG,mBAAmB,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChG,eAAe,EAAE,oBAAoB,CAAC;CACvC;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqEjC"}
@@ -86,6 +86,65 @@ async function endDialogWindows(cwd, hwnd) {
86
86
  const r = await runCommand("powershell", ["-NoProfile", "-Command", script], cwd, undefined, undefined, 5000);
87
87
  return r.exit_code === 0 ? { ok: true } : { ok: false, err: r.stderr.slice(0, 200) };
88
88
  }
89
+ /**
90
+ * 0.1.63 H12 — deterministic confirm/cancel for desktop dialogs.
91
+ *
92
+ * The Photometry-DB delete-confirm raised a Yes/No MessageBox. The old
93
+ * codeloop_handle_modal only suggested an Enter/Escape keystroke, which is
94
+ * fragile: the default button on a destructive Yes/No box is frequently
95
+ * "No", so Enter would silently abort the delete and Escape would too. This
96
+ * walks the dialog's button subtree via UIA and INVOKES the button whose
97
+ * name matches the chosen decision, so "confirm" reliably clicks
98
+ * Yes/OK/Save/Delete/Continue and "cancel" clicks No/Cancel/Discard.
99
+ *
100
+ * Returns `{ ok, button?, error? }`. `ok:false` lets handle_modal fall back
101
+ * to the keystroke path. Windows-only; other platforms return ok:false.
102
+ */
103
+ export async function invokeDialogDecisionButton(opts) {
104
+ if (process.platform !== "win32") {
105
+ return { ok: false, error: "decision-button invoke is Windows-only" };
106
+ }
107
+ // Affirmative button names, ordered by preference; "cancel" uses the
108
+ // negative set. Matched case-insensitively as a whole-label regex so we
109
+ // don't fire on a "Cancel all downloads" hyperlink etc.
110
+ const affirm = "^(Yes|OK|Confirm|Save|Save Changes|Delete|Remove|Continue|Apply|Allow|Proceed|Don.?t Cancel)$";
111
+ const negative = "^(No|Cancel|Don.?t Save|Discard|Close|Abort|Dismiss)$";
112
+ const pattern = opts.decision === "confirm" ? affirm : negative;
113
+ const handleArg = opts.hwnd && opts.hwnd !== "0" ? opts.hwnd : "$null";
114
+ const script = [
115
+ "Add-Type -AssemblyName UIAutomationClient",
116
+ `$hwnd = ${handleArg}`,
117
+ "if ($hwnd -ne $null -and $hwnd -ne 0) {",
118
+ " $w = [System.Windows.Automation.AutomationElement]::FromHandle([IntPtr]$hwnd)",
119
+ "} else {",
120
+ " $root = [System.Windows.Automation.AutomationElement]::RootElement",
121
+ " $cond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Window)",
122
+ " $w = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $cond)",
123
+ "}",
124
+ "if ($w -eq $null) { Write-Error 'no window found'; exit 1 }",
125
+ "$btnCond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Button)",
126
+ "$buttons = $w.FindAll([System.Windows.Automation.TreeScope]::Subtree, $btnCond)",
127
+ "$invoked = $null",
128
+ "foreach ($b in $buttons) {",
129
+ " $name = ($b.Current.Name -replace '&','')",
130
+ ` if ($name -match '${pattern}') {`,
131
+ " try {",
132
+ " $invoke = $b.GetCurrentPattern([System.Windows.Automation.InvokePattern]::Pattern)",
133
+ " $invoke.Invoke()",
134
+ " $invoked = $name",
135
+ " break",
136
+ " } catch { }",
137
+ " }",
138
+ "}",
139
+ "if ($invoked -eq $null) { Write-Error 'no matching decision button found'; exit 1 }",
140
+ "Write-Output $invoked",
141
+ ].join("\n");
142
+ const r = await runCommand("powershell", ["-NoProfile", "-Command", script], opts.cwd, undefined, undefined, 8000);
143
+ if (r.exit_code === 0) {
144
+ return { ok: true, button: r.stdout.trim() || undefined };
145
+ }
146
+ return { ok: false, error: r.stderr.slice(0, 200) };
147
+ }
89
148
  /**
90
149
  * Run the strategy ladder against the detected modal. Re-detects after
91
150
  * each step. Caller is expected to have already called detectModal and
@@ -1 +1 @@
1
- {"version":3,"file":"modal_close_strategies.js","sourceRoot":"","sources":["../../src/runners/modal_close_strategies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modal_close_strategies.js","sourceRoot":"","sources":["../../src/runners/modal_close_strategies.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,9 @@ export interface ModalDetectionResult {
60
60
  /** target_type the detector ran against. */
61
61
  target_type: "browser" | "desktop" | "android_emulator" | "ios_simulator" | "unknown";
62
62
  }
63
+ /** 0.1.63 H12 — confirm / alert title heuristics shared by the detector. */
64
+ export declare const CONFIRM_NAME_PATTERN: RegExp;
65
+ export declare const ALERT_NAME_PATTERN: RegExp;
63
66
  /** 0.1.54 E1 — exported so codeloop_handle_modal can reuse the same heuristic. */
64
67
  export declare function classifyModalKind(name: string, className?: string): ModalKind;
65
68
  export declare function detectModal(opts: {
@@ -68,6 +71,39 @@ export declare function detectModal(opts: {
68
71
  cwd: string;
69
72
  config?: CodeLoopConfig;
70
73
  }): Promise<ModalDetectionResult>;
74
+ /** 0.1.63 H12 — one top-level window row from the UIA probe. */
75
+ export interface RawModalWindow {
76
+ name?: string;
77
+ class_name?: string;
78
+ hwnd?: number | string;
79
+ is_modal?: boolean;
80
+ /** Win32 ProcessId of the owning process (0.1.63 H12). */
81
+ process_id?: number;
82
+ }
83
+ /** 0.1.63 H12 — full UIA probe payload: every top-level window plus the
84
+ * resolved app process identity (pid(s) + main-window handle(s)). */
85
+ export interface RawModalProbe {
86
+ windows: RawModalWindow[];
87
+ app_pids: number[];
88
+ app_main_hwnds: Array<number | string>;
89
+ }
90
+ /**
91
+ * 0.1.63 H12 — pure modal selection (no I/O), unit-testable.
92
+ *
93
+ * The Photometry-DB delete-confirm regression: clicking "Delete" raised a
94
+ * WPF/WinForms MessageBox — a SEPARATE top-level `#32770` window whose
95
+ * caption was NOT the app name and whose UIA `IsModal` flag was false. The
96
+ * pre-0.1.63 detector only matched (a) `IsModal && title-contains-app-name`
97
+ * or (b) a file-dialog title, so the confirm dialog was invisible: no F4
98
+ * directive fired and the agent kept clicking the blocked button beneath it.
99
+ *
100
+ * The robust, title-independent signal is OWNERSHIP: an in-process dialog
101
+ * shares the app's ProcessId. We treat any SECONDARY top-level window of the
102
+ * app's process (i.e. not the main window) that carries a dialog signal
103
+ * (modal flag, dialog class, or modal-ish title) as the modal — regardless
104
+ * of its caption.
105
+ */
106
+ export declare function selectWindowsModal(probe: RawModalProbe, appName?: string): ModalDetectionResult;
71
107
  /**
72
108
  * Heuristic for whether a given action is "modal-related" — used by
73
109
  * layer 2 (pre-interact block) to decide whether an unrelated action
@@ -1 +1 @@
1
- {"version":3,"file":"modal_detector.d.ts","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,WAAW,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,eAAe,GAAG,SAAS,CAAC;CACvF;AAwCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAO7E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,eAAe,CAAC;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiBhC;AAoMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAiB5D"}
1
+ {"version":3,"file":"modal_detector.d.ts","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,WAAW,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,eAAe,GAAG,SAAS,CAAC;CACvF;AAqDD,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,QACkF,CAAC;AACpH,eAAO,MAAM,kBAAkB,QACuD,CAAC;AAKvF,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAgB7E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,eAAe,CAAC;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiBhC;AA4BD,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;qEACqE;AACrE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,CA+F/F;AA+HD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAiB5D"}
@@ -36,17 +36,44 @@ const FILE_DIALOG_NAME_PATTERNS = [
36
36
  /\bchoose\s+(a\s+)?(folder|file|directory|location)\b/i,
37
37
  /^(open|save as|save|browse|export|import)$/i,
38
38
  ];
39
+ /**
40
+ * 0.1.63 H12 — file-SPECIFIC window classes. Deliberately EXCLUDES the
41
+ * generic Win32 dialog class `#32770`, because both file pickers AND
42
+ * MessageBox confirms are `#32770` — so `#32770` alone can never tell
43
+ * them apart and we must lean on the title instead.
44
+ */
45
+ const FILE_DIALOG_STRONG_CLASS_NAMES = [
46
+ "Shell_Dialog",
47
+ "CommonItemDialog",
48
+ "WinUIDesktopWin32WindowClass",
49
+ "Microsoft.UI.Content.DesktopChildSiteBridge",
50
+ ];
51
+ /** 0.1.63 H12 — confirm / alert title heuristics shared by the detector. */
52
+ export const CONFIRM_NAME_PATTERN = /\b(confirm|are you sure|do you want|delete\??|remove|discard|unsaved|save changes|overwrite|replace|proceed)\b/i;
53
+ export const ALERT_NAME_PATTERN = /\b(error|warning|alert|attention|failed|exception|invalid|cannot|unable|denied)\b/i;
54
+ /** 0.1.63 H12 — generic Win32 dialog classes that an in-app MessageBox uses. */
55
+ const GENERIC_DIALOG_CLASS_NAMES = new Set(["#32770", "DirectUIHWND"]);
39
56
  /** 0.1.54 E1 — exported so codeloop_handle_modal can reuse the same heuristic. */
40
57
  export function classifyModalKind(name, className) {
41
58
  const cls = (className ?? "").trim();
42
- if (FILE_DIALOG_CLASS_NAMES.includes(cls))
43
- return "file_dialog";
59
+ // Title wins over class: the generic #32770 dialog class is shared by
60
+ // file pickers and confirm MessageBoxes, so a file-y / confirm-y /
61
+ // alert-y TITLE is the only reliable discriminator.
44
62
  if (FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(name)))
45
63
  return "file_dialog";
46
- if (/\b(confirm|are you sure|delete\?|discard)\b/i.test(name))
64
+ if (CONFIRM_NAME_PATTERN.test(name))
47
65
  return "confirm";
48
- if (/\b(error|warning|alert|attention)\b/i.test(name))
66
+ if (ALERT_NAME_PATTERN.test(name))
49
67
  return "alert";
68
+ // File-SPECIFIC classes (not #32770) imply a picker.
69
+ if (FILE_DIALOG_STRONG_CLASS_NAMES.includes(cls))
70
+ return "file_dialog";
71
+ // 0.1.63 H12 — an ambiguous #32770 / DirectUIHWND owned dialog is far
72
+ // more often an in-app MessageBox (Yes/No/OK confirm) than a file
73
+ // picker. Default to "confirm" so it routes to codeloop_handle_modal
74
+ // (an agent decision) instead of the auto-Escape file-dialog ladder.
75
+ if (GENERIC_DIALOG_CLASS_NAMES.has(cls))
76
+ return "confirm";
50
77
  return "custom";
51
78
  }
52
79
  export async function detectModal(opts) {
@@ -90,14 +117,113 @@ async function detectDesktopModal(opts) {
90
117
  return detectMacModal(opts);
91
118
  return detectLinuxModal(opts);
92
119
  }
120
+ /**
121
+ * 0.1.63 H12 — pure modal selection (no I/O), unit-testable.
122
+ *
123
+ * The Photometry-DB delete-confirm regression: clicking "Delete" raised a
124
+ * WPF/WinForms MessageBox — a SEPARATE top-level `#32770` window whose
125
+ * caption was NOT the app name and whose UIA `IsModal` flag was false. The
126
+ * pre-0.1.63 detector only matched (a) `IsModal && title-contains-app-name`
127
+ * or (b) a file-dialog title, so the confirm dialog was invisible: no F4
128
+ * directive fired and the agent kept clicking the blocked button beneath it.
129
+ *
130
+ * The robust, title-independent signal is OWNERSHIP: an in-process dialog
131
+ * shares the app's ProcessId. We treat any SECONDARY top-level window of the
132
+ * app's process (i.e. not the main window) that carries a dialog signal
133
+ * (modal flag, dialog class, or modal-ish title) as the modal — regardless
134
+ * of its caption.
135
+ */
136
+ export function selectWindowsModal(probe, appName) {
137
+ const appLower = (appName ?? "").toLowerCase();
138
+ const appNorm = appLower.replace(/\s+/g, "");
139
+ const appPids = new Set((probe.app_pids ?? []).map((p) => Number(p)));
140
+ const mainHwnds = new Set((probe.app_main_hwnds ?? []).map((h) => String(h)));
141
+ const wins = probe.windows ?? [];
142
+ const nm = (w) => w.name ?? "";
143
+ const cls = (w) => (w.class_name ?? "").trim();
144
+ const matchesAppFilter = (name) => {
145
+ if (!appLower)
146
+ return true;
147
+ const n = name.toLowerCase();
148
+ return n.includes(appLower) || (appNorm.length > 0 && n.replace(/\s+/g, "").includes(appNorm));
149
+ };
150
+ const isOwned = (w) => w.process_id != null && appPids.has(Number(w.process_id));
151
+ const isMainWindow = (w) => w.hwnd != null && mainHwnds.has(String(w.hwnd));
152
+ const hasDialogClass = (w) => GENERIC_DIALOG_CLASS_NAMES.has(cls(w)) || FILE_DIALOG_CLASS_NAMES.includes(cls(w));
153
+ const hasModalNamePattern = (w) => FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(nm(w))) ||
154
+ CONFIRM_NAME_PATTERN.test(nm(w)) ||
155
+ ALERT_NAME_PATTERN.test(nm(w));
156
+ const build = (w, confidence, descPrefix) => {
157
+ const name = nm(w) || "(unnamed)";
158
+ const kind = classifyModalKind(name, cls(w) || undefined);
159
+ return {
160
+ is_modal_present: true,
161
+ modal_description: `${descPrefix}: ${name}`,
162
+ modal_kind: kind,
163
+ class_name: cls(w) || undefined,
164
+ hwnd: w.hwnd != null ? String(w.hwnd) : undefined,
165
+ suggested_action: kind === "file_dialog" ? "dismiss" : "inspect",
166
+ confidence,
167
+ target_type: "desktop",
168
+ };
169
+ };
170
+ // Pass 1 — UIA explicitly flagged the window modal AND it's owned by /
171
+ // titled for our app (and is not the main window itself).
172
+ const explicit = wins.find((w) => w.is_modal && !isMainWindow(w) && (isOwned(w) || matchesAppFilter(nm(w))));
173
+ if (explicit)
174
+ return build(explicit, 0.9, "Windows modal");
175
+ // Pass 2 — 0.1.63 H12: app-owned SECONDARY top-level window. Title- and
176
+ // IsModal-independent. We require a dialog signal (modal flag, dialog
177
+ // class, or modal-ish title) so a legitimate second document window of a
178
+ // multi-window app is NOT mistaken for a modal.
179
+ const owned = wins.find((w) => isOwned(w) &&
180
+ !isMainWindow(w) &&
181
+ (w.is_modal || hasDialogClass(w) || hasModalNamePattern(w)));
182
+ if (owned) {
183
+ const kind = classifyModalKind(nm(owned) || "(unnamed)", cls(owned) || undefined);
184
+ return build(owned, kind === "file_dialog" ? 0.8 : 0.85, "Windows dialog");
185
+ }
186
+ // Pass 3 — file-dialog heuristic (unowned / app process unresolved).
187
+ // (a) a strong file NAME pattern fires app-filter-free; (b) a file CLASS
188
+ // match still needs the app filter so we don't grab unrelated OS chrome.
189
+ const fileDialog = wins.find((w) => {
190
+ const byName = FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(nm(w)));
191
+ if (byName)
192
+ return true;
193
+ const byClass = FILE_DIALOG_CLASS_NAMES.includes(cls(w));
194
+ return byClass && matchesAppFilter(nm(w));
195
+ });
196
+ if (fileDialog) {
197
+ return {
198
+ is_modal_present: true,
199
+ modal_description: `Windows file dialog: ${nm(fileDialog) || "(unnamed)"}`,
200
+ modal_kind: "file_dialog",
201
+ class_name: cls(fileDialog) || undefined,
202
+ hwnd: fileDialog.hwnd != null ? String(fileDialog.hwnd) : undefined,
203
+ suggested_action: "dismiss",
204
+ confidence: 0.75,
205
+ target_type: "desktop",
206
+ };
207
+ }
208
+ // Pass 4 — safety net: a generic Win32 dialog (#32770 / DirectUIHWND)
209
+ // titled like a confirm / alert is unambiguously a dialog even when we
210
+ // could not resolve the owning process (e.g. app lookup failed).
211
+ const confirmByName = wins.find((w) => GENERIC_DIALOG_CLASS_NAMES.has(cls(w)) &&
212
+ (CONFIRM_NAME_PATTERN.test(nm(w)) || ALERT_NAME_PATTERN.test(nm(w))));
213
+ if (confirmByName)
214
+ return build(confirmByName, 0.7, "Windows dialog");
215
+ return { is_modal_present: false, target_type: "desktop" };
216
+ }
93
217
  async function detectWindowsModal(opts) {
94
218
  const app = opts.app_name ?? "";
95
- const appLower = app.toLowerCase();
96
- // PowerShell UIA probe. 0.1.54 E1 — also collects ClassName + HWND so
97
- // codeloop_handle_modal can pick the right close strategy and so the
98
- // kill-window escalation knows which window to terminate. We additionally
99
- // accept windows that are NOT marked IsModal=true but match a file-dialog
100
- // class name (.NET 8 OpenFolderDialog often does not set IsModal).
219
+ const psLiteral = app.replace(/'/g, "''");
220
+ // PowerShell UIA probe. 0.1.54 E1 — collects ClassName + HWND so
221
+ // codeloop_handle_modal can pick the right close strategy and the
222
+ // kill-window escalation knows which window to terminate.
223
+ // 0.1.63 H12 also collects ProcessId per window AND resolves the app's
224
+ // process identity (pid(s) + main-window handle(s)) so the pure selector
225
+ // can flag an app-OWNED secondary dialog window regardless of its caption
226
+ // or its (unreliable) IsModal flag.
101
227
  const script = [
102
228
  "Add-Type -AssemblyName UIAutomationClient",
103
229
  "$root = [System.Windows.Automation.AutomationElement]::RootElement",
@@ -108,16 +234,28 @@ async function detectWindowsModal(opts) {
108
234
  " $name = $w.Current.Name",
109
235
  " $cls = $w.Current.ClassName",
110
236
  " $hwnd = $w.Current.NativeWindowHandle",
237
+ " $procId = 0",
238
+ " try { $procId = $w.Current.ProcessId } catch { }",
111
239
  " $isModal = $false",
112
240
  " try {",
113
241
  " $pattern = $w.GetCurrentPattern([System.Windows.Automation.WindowPattern]::Pattern)",
114
242
  " $isModal = $pattern.Current.IsModal",
115
243
  " } catch { }",
116
- " $result += @{ name = $name; class_name = $cls; hwnd = $hwnd; is_modal = $isModal }",
244
+ " $result += @{ name = $name; class_name = $cls; hwnd = $hwnd; is_modal = $isModal; process_id = $procId }",
117
245
  "}",
118
- "$result | ConvertTo-Json -Compress",
246
+ `$appTarget = '${psLiteral}'`,
247
+ "$appNorm = ($appTarget -replace '\\s','').ToLowerInvariant()",
248
+ "$appPids = @()",
249
+ "$appMain = @()",
250
+ "if ($appNorm.Length -gt 0) {",
251
+ " $apps = Get-Process | Where-Object { $_.MainWindowHandle -ne 0 -and ( (($_.ProcessName -replace '\\s','').ToLowerInvariant() -eq $appNorm) -or ($_.MainWindowTitle -and ((($_.MainWindowTitle -replace '\\s','').ToLowerInvariant()).Contains($appNorm))) ) }",
252
+ " $appPids = @($apps | Select-Object -ExpandProperty Id)",
253
+ " $appMain = @($apps | ForEach-Object { [int64]$_.MainWindowHandle })",
254
+ "}",
255
+ "$out = @{ windows = @($result); app_pids = @($appPids); app_main_hwnds = @($appMain) }",
256
+ "$out | ConvertTo-Json -Compress -Depth 5",
119
257
  ].join("\n");
120
- const r = await runCommand("powershell", ["-NoProfile", "-Command", script], opts.cwd, undefined, undefined, 8000);
258
+ const r = await runCommand("powershell", ["-NoProfile", "-Command", script], opts.cwd, undefined, undefined, 9000);
121
259
  if (r.exit_code !== 0) {
122
260
  return {
123
261
  is_modal_present: false,
@@ -125,77 +263,21 @@ async function detectWindowsModal(opts) {
125
263
  detection_error: r.stderr.slice(0, 200),
126
264
  };
127
265
  }
128
- let arr = [];
266
+ const probe = { windows: [], app_pids: [], app_main_hwnds: [] };
129
267
  try {
130
268
  const parsed = r.stdout.trim() ? JSON.parse(r.stdout) : null;
131
- arr = Array.isArray(parsed) ? parsed : parsed ? [parsed] : [];
269
+ if (parsed && typeof parsed === "object") {
270
+ const asArr = (v) => (Array.isArray(v) ? v : v != null ? [v] : []);
271
+ const p = parsed;
272
+ probe.windows = asArr(p.windows);
273
+ probe.app_pids = asArr(p.app_pids).map((x) => Number(x));
274
+ probe.app_main_hwnds = asArr(p.app_main_hwnds);
275
+ }
132
276
  }
133
277
  catch {
134
278
  return { is_modal_present: false, target_type: "desktop" };
135
279
  }
136
- // First pass: explicitly modal windows that pass the app filter.
137
- // Second pass: file-dialog class match (regardless of IsModal flag) when
138
- // the window's name suggests a file picker. The two-pass split makes sure
139
- // we never spuriously match an unrelated #32770 dialog the OS itself owns
140
- // (Windows Spotlight, Snipping Tool, etc.) — the file-dialog match
141
- // requires either a name pattern OR an app filter that hits the running
142
- // process.
143
- const matchesAppFilter = (name) => {
144
- if (!appLower)
145
- return true;
146
- return name.toLowerCase().includes(appLower);
147
- };
148
- const explicit = arr.find((w) => w.is_modal && matchesAppFilter(w.name ?? ""));
149
- if (explicit) {
150
- const name = explicit.name ?? "(unnamed)";
151
- const cls = explicit.class_name ?? undefined;
152
- return {
153
- is_modal_present: true,
154
- modal_description: `Windows modal: ${name}`,
155
- modal_kind: classifyModalKind(name, cls),
156
- class_name: cls,
157
- hwnd: explicit.hwnd != null ? String(explicit.hwnd) : undefined,
158
- suggested_action: "inspect",
159
- confidence: 0.85,
160
- target_type: "desktop",
161
- };
162
- }
163
- // 0.1.57 H1 — file-dialog detection no longer requires the app-name filter.
164
- // The E2E #12 OpenFolderDialog was titled "Select Folder" — a separate
165
- // top-level window that does NOT embed "Photometry DB", so the previous
166
- // class+app gate silently missed it. We now match on two independent
167
- // signals:
168
- // (a) a strong file-dialog NAME pattern — matched regardless of class or
169
- // app filter, because these titles ("Select Folder", "Save As",
170
- // "Browse For Folder") are unambiguously file pickers, OR
171
- // (b) a file-dialog CLASS name — still gated by the app filter OR a name
172
- // pattern so we don't match unrelated #32770 OS chrome.
173
- const fileDialog = arr.find((w) => {
174
- const name = w.name ?? "";
175
- const cls = w.class_name ?? "";
176
- const byName = FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(name));
177
- if (byName)
178
- return true; // (a) strong, app-filter-free signal
179
- const byClass = FILE_DIALOG_CLASS_NAMES.includes(cls);
180
- if (byClass && matchesAppFilter(name))
181
- return true; // (b) class + app
182
- return false;
183
- });
184
- if (fileDialog) {
185
- const name = fileDialog.name ?? "(unnamed)";
186
- const cls = fileDialog.class_name ?? undefined;
187
- return {
188
- is_modal_present: true,
189
- modal_description: `Windows file dialog: ${name}`,
190
- modal_kind: "file_dialog",
191
- class_name: cls,
192
- hwnd: fileDialog.hwnd != null ? String(fileDialog.hwnd) : undefined,
193
- suggested_action: "dismiss",
194
- confidence: 0.75,
195
- target_type: "desktop",
196
- };
197
- }
198
- return { is_modal_present: false, target_type: "desktop" };
280
+ return selectWindowsModal(probe, app);
199
281
  }
200
282
  async function detectMacModal(opts) {
201
283
  const app = opts.app_name ?? "frontmost";
@@ -1 +1 @@
1
- {"version":3,"file":"modal_detector.js","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modal_detector.js","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"win_accessibility.d.ts","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsD7F;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,eAAe,CAAC;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA0MzB"}
1
+ {"version":3,"file":"win_accessibility.d.ts","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoD7F;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,eAAe,CAAC;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAC9D,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAwMzB"}
@@ -1,5 +1,6 @@
1
1
  import { platform } from "os";
2
2
  import { runCommand, checkToolAvailable } from "./base.js";
3
+ import { buildUiaAppElementLookup } from "./window_manager.js";
3
4
  export async function inspectUITree(appName) {
4
5
  if (platform() !== "win32") {
5
6
  return { error: "UI Automation is only available on Windows" };
@@ -31,9 +32,7 @@ function Get-UITree($element, $depth) {
31
32
  return $children
32
33
  }
33
34
 
34
- $root = [System.Windows.Automation.AutomationElement]::RootElement
35
- $condition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::NameProperty, "${appName}")
36
- $appElement = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $condition)
35
+ ${buildUiaAppElementLookup(appName)}
37
36
 
38
37
  if ($appElement) {
39
38
  $tree = Get-UITree $appElement 0
@@ -88,9 +87,7 @@ $ErrorActionPreference = 'Stop'
88
87
  Add-Type -AssemblyName UIAutomationClient
89
88
  Add-Type -AssemblyName UIAutomationTypes
90
89
 
91
- $root = [System.Windows.Automation.AutomationElement]::RootElement
92
- $appCondition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::NameProperty, "${appName}")
93
- $appElement = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $appCondition)
90
+ ${buildUiaAppElementLookup(appName)}
94
91
  if (-not $appElement) {
95
92
  Write-Output (ConvertTo-Json @{ success = $false; reason = 'app-not-found' } -Compress)
96
93
  exit 1
@@ -1 +1 @@
1
- {"version":3,"file":"win_accessibility.js","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"win_accessibility.js","sourceRoot":"","sources":["../../src/runners/win_accessibility.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,30 @@ export declare function findWindowIdDetailed(appName: string): Promise<WindowLoo
54
54
  * filter has its own `Select-Object -First 1`.
55
55
  */
56
56
  export declare function buildWindowsProcessLookup(appName: string): string;
57
+ /**
58
+ * 0.1.63 H12 — robust UIA app-window resolver.
59
+ *
60
+ * win_ui_inspect / win_ui_automate previously located the app window
61
+ * with an EXACT NameProperty match:
62
+ * PropertyCondition(NameProperty, appName)
63
+ * so a caller passing app_name="Photometry DB" never matched the live
64
+ * window title "PhotometryDB - Professional Photometric Data Management"
65
+ * (no space, extra suffix) and every inspect returned the unhelpful
66
+ * "App window not found". The Photometry-DB delete-confirm E2E showed
67
+ * the agent fall back to coordinate guessing because of this.
68
+ *
69
+ * This emits a PowerShell block that sets `$appElement` to the running
70
+ * app's top-level Window via a tolerant ladder:
71
+ * 1. exact Name match
72
+ * 2. whitespace-insensitive, case-insensitive contains (either way)
73
+ * 3. owning-process match (ProcessName / MainWindowTitle fuzzy) so a
74
+ * window whose title doesn't embed the app name at all still resolves
75
+ *
76
+ * Requires `Add-Type -AssemblyName UIAutomationClient` to have run
77
+ * already (both call sites do). Uses `cl`-prefixed variable names so it
78
+ * can't collide with the caller's `$appElement` consumers.
79
+ */
80
+ export declare function buildUiaAppElementLookup(appName: string): string;
57
81
  /**
58
82
  * Bring an app to the front, un-minimizing if needed.
59
83
  * Returns the name/title of the previously frontmost app for later restoration.