codeloop-mcp-server 0.1.63 → 0.1.65

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 (44) hide show
  1. package/dist/auth/critical_floors.d.ts.map +1 -1
  2. package/dist/auth/critical_floors.js +8 -0
  3. package/dist/auth/critical_floors.js.map +1 -1
  4. package/dist/auth/key_resolver.d.ts +55 -0
  5. package/dist/auth/key_resolver.d.ts.map +1 -0
  6. package/dist/auth/key_resolver.js +41 -0
  7. package/dist/auth/key_resolver.js.map +1 -0
  8. package/dist/auth/key_source.d.ts +60 -4
  9. package/dist/auth/key_source.d.ts.map +1 -1
  10. package/dist/auth/key_source.js +281 -48
  11. package/dist/auth/key_source.js.map +1 -1
  12. package/dist/evidence/observability.d.ts +67 -0
  13. package/dist/evidence/observability.d.ts.map +1 -0
  14. package/dist/evidence/observability.js +57 -0
  15. package/dist/evidence/observability.js.map +1 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +58 -5
  18. package/dist/index.js.map +1 -1
  19. package/dist/runners/app_logger.d.ts.map +1 -1
  20. package/dist/runners/app_logger.js +31 -3
  21. package/dist/runners/app_logger.js.map +1 -1
  22. package/dist/runners/logging_readiness.d.ts +72 -0
  23. package/dist/runners/logging_readiness.d.ts.map +1 -0
  24. package/dist/runners/logging_readiness.js +419 -0
  25. package/dist/runners/logging_readiness.js.map +1 -0
  26. package/dist/runners/modal_detector.d.ts +27 -7
  27. package/dist/runners/modal_detector.d.ts.map +1 -1
  28. package/dist/runners/modal_detector.js +124 -31
  29. package/dist/runners/modal_detector.js.map +1 -1
  30. package/dist/runners/remote_logs.d.ts +105 -0
  31. package/dist/runners/remote_logs.d.ts.map +1 -0
  32. package/dist/runners/remote_logs.js +336 -0
  33. package/dist/runners/remote_logs.js.map +1 -0
  34. package/dist/tools/gate_check.d.ts.map +1 -1
  35. package/dist/tools/gate_check.js +25 -0
  36. package/dist/tools/gate_check.js.map +1 -1
  37. package/dist/tools/interaction_replay.d.ts +18 -0
  38. package/dist/tools/interaction_replay.d.ts.map +1 -1
  39. package/dist/tools/interaction_replay.js +102 -1
  40. package/dist/tools/interaction_replay.js.map +1 -1
  41. package/dist/tools/verify.d.ts.map +1 -1
  42. package/dist/tools/verify.js +61 -5
  43. package/dist/tools/verify.js.map +1 -1
  44. package/package.json +2 -2
@@ -12,10 +12,12 @@ import type { CodeLoopConfig } from "@codelooptech/shared";
12
12
  * - Browser: query Playwright's page for alert/confirm dialogs
13
13
  * and visible overlay elements (role=dialog, aria-modal=true,
14
14
  * CSS classes that match common modal libraries).
15
- * - Windows desktop: PowerShell + UIAutomation walk the desktop
16
- * tree for ControlType.Window with WindowVisualState=Normal AND
17
- * IsModal=true (or, when IsModal isn't reliable, look for the
18
- * OWNED-window pattern + small-screen-fraction heuristic).
15
+ * - Windows desktop: PowerShell + Win32 `EnumWindows` (0.1.65 H13;
16
+ * replaced the UIA control-view walk that could not see owned
17
+ * `MessageBox` dialogs). Reads each top-level window's owner
18
+ * (GW_OWNER), enabled state, pid, class and title, plus the
19
+ * foreground window, and flags an app-owned dialog via the
20
+ * owner-chain / owner-disabled / foreground signals.
19
21
  * - macOS desktop: AppleScript — `every window of process whose
20
22
  * subrole is "AXDialog" or "AXSystemDialog"`.
21
23
  * - Linux desktop: xdotool / xprop walk for windows whose WM_NAME
@@ -71,7 +73,7 @@ export declare function detectModal(opts: {
71
73
  cwd: string;
72
74
  config?: CodeLoopConfig;
73
75
  }): Promise<ModalDetectionResult>;
74
- /** 0.1.63 H12 — one top-level window row from the UIA probe. */
76
+ /** 0.1.63 H12 / 0.1.65 H13 — one top-level window row from the probe. */
75
77
  export interface RawModalWindow {
76
78
  name?: string;
77
79
  class_name?: string;
@@ -79,13 +81,31 @@ export interface RawModalWindow {
79
81
  is_modal?: boolean;
80
82
  /** Win32 ProcessId of the owning process (0.1.63 H12). */
81
83
  process_id?: number;
84
+ /**
85
+ * 0.1.65 H13 — Win32 GW_OWNER handle. A `MessageBox(hwndOwner, …)` /
86
+ * modal dialog is an OWNED top-level window whose owner is the app's
87
+ * main window. This is the single most reliable, title-independent
88
+ * signal that a dialog belongs to the app — and the one UIA's
89
+ * control-view enumeration never exposed (the recurring miss).
90
+ */
91
+ owner_hwnd?: number | string;
92
+ /** 0.1.65 H13 — IsWindowVisible. */
93
+ is_visible?: boolean;
94
+ /** 0.1.65 H13 — IsWindowEnabled. A visible-but-DISABLED main window
95
+ * means a modal is blocking it (Windows disables a modal's owner). */
96
+ is_enabled?: boolean;
82
97
  }
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)). */
98
+ /** 0.1.63 H12 / 0.1.65 H13 — full probe payload: every top-level window
99
+ * plus the resolved app process identity (pid(s) + main-window handle(s))
100
+ * and the current foreground window. */
85
101
  export interface RawModalProbe {
86
102
  windows: RawModalWindow[];
87
103
  app_pids: number[];
88
104
  app_main_hwnds: Array<number | string>;
105
+ /** 0.1.65 H13 — GetForegroundWindow() HWND. After a click that raises a
106
+ * dialog, the dialog IS the foreground window — a robust anchor even
107
+ * when app-title resolution fails. */
108
+ foreground_hwnd?: number | string;
89
109
  }
90
110
  /**
91
111
  * 0.1.63 H12 — pure modal selection (no I/O), unit-testable.
@@ -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;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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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,yEAAyE;AACzE,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;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;0EACsE;IACtE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;wCAEwC;AACxC,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;IACvC;;0CAEsC;IACtC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,CA0K/F;AAgKD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAiB5D"}
@@ -138,6 +138,7 @@ export function selectWindowsModal(probe, appName) {
138
138
  const appNorm = appLower.replace(/\s+/g, "");
139
139
  const appPids = new Set((probe.app_pids ?? []).map((p) => Number(p)));
140
140
  const mainHwnds = new Set((probe.app_main_hwnds ?? []).map((h) => String(h)));
141
+ const fgHwnd = probe.foreground_hwnd != null ? String(probe.foreground_hwnd) : null;
141
142
  const wins = probe.windows ?? [];
142
143
  const nm = (w) => w.name ?? "";
143
144
  const cls = (w) => (w.class_name ?? "").trim();
@@ -149,10 +150,21 @@ export function selectWindowsModal(probe, appName) {
149
150
  };
150
151
  const isOwned = (w) => w.process_id != null && appPids.has(Number(w.process_id));
151
152
  const isMainWindow = (w) => w.hwnd != null && mainHwnds.has(String(w.hwnd));
153
+ // 0.1.65 H13 — owner-chain: the window's GW_OWNER is one of the app's
154
+ // main windows. This is THE reliable MessageBox signal.
155
+ const isOwnedByApp = (w) => w.owner_hwnd != null && mainHwnds.has(String(w.owner_hwnd));
156
+ // Visibility defaults to true when the probe didn't report it (older
157
+ // probes / unit fixtures) so we never regress on missing data.
158
+ const isVisible = (w) => w.is_visible !== false;
159
+ const isForeground = (w) => fgHwnd != null && w.hwnd != null && String(w.hwnd) === fgHwnd;
152
160
  const hasDialogClass = (w) => GENERIC_DIALOG_CLASS_NAMES.has(cls(w)) || FILE_DIALOG_CLASS_NAMES.includes(cls(w));
153
161
  const hasModalNamePattern = (w) => FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(nm(w))) ||
154
162
  CONFIRM_NAME_PATTERN.test(nm(w)) ||
155
163
  ALERT_NAME_PATTERN.test(nm(w));
164
+ // 0.1.65 H13 — is the app's own main window visible-but-DISABLED? Windows
165
+ // disables a modal dialog's owner, so a disabled owner is near-proof a
166
+ // modal is blocking the app, even if we can't pin which window it is.
167
+ const appMainDisabled = wins.some((w) => isMainWindow(w) && isVisible(w) && w.is_enabled === false);
156
168
  const build = (w, confidence, descPrefix) => {
157
169
  const name = nm(w) || "(unnamed)";
158
170
  const kind = classifyModalKind(name, cls(w) || undefined);
@@ -169,24 +181,70 @@ export function selectWindowsModal(probe, appName) {
169
181
  };
170
182
  // Pass 1 — UIA explicitly flagged the window modal AND it's owned by /
171
183
  // 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))));
184
+ const explicit = wins.find((w) => w.is_modal && !isMainWindow(w) && (isOwned(w) || isOwnedByApp(w) || matchesAppFilter(nm(w))));
173
185
  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
186
+ return build(explicit, 0.92, "Windows modal");
187
+ // Pass A — 0.1.65 H13: OWNER-CHAIN. A visible, non-main window whose
188
+ // GW_OWNER is the app's main window is an owned dialog (the Win32 /
189
+ // WPF MessageBox the recurring bug kept missing). Title-, class-, and
190
+ // IsModal-INDEPENDENT — this is the strongest signal we have.
191
+ const ownerChain = wins.find((w) => isOwnedByApp(w) && !isMainWindow(w) && isVisible(w));
192
+ if (ownerChain) {
193
+ const kind = classifyModalKind(nm(ownerChain) || "(unnamed)", cls(ownerChain) || undefined);
194
+ return build(ownerChain, kind === "file_dialog" ? 0.85 : 0.92, "Windows owned dialog");
195
+ }
196
+ // Pass 2 — 0.1.63 H12: app-owned (same-PROCESS) SECONDARY top-level
197
+ // window. We require a dialog signal (modal flag, dialog class, or
198
+ // modal-ish title) so a legitimate second document window of a
178
199
  // multi-window app is NOT mistaken for a modal.
179
200
  const owned = wins.find((w) => isOwned(w) &&
180
201
  !isMainWindow(w) &&
202
+ isVisible(w) &&
181
203
  (w.is_modal || hasDialogClass(w) || hasModalNamePattern(w)));
182
204
  if (owned) {
183
205
  const kind = classifyModalKind(nm(owned) || "(unnamed)", cls(owned) || undefined);
184
206
  return build(owned, kind === "file_dialog" ? 0.8 : 0.85, "Windows dialog");
185
207
  }
208
+ // Pass B — 0.1.65 H13: the FOREGROUND window is a secondary window that
209
+ // belongs to the app (owner-chain or same process). After a click that
210
+ // pops a dialog, the dialog becomes foreground.
211
+ const fgOwned = wins.find((w) => isForeground(w) && !isMainWindow(w) && isVisible(w) && (isOwnedByApp(w) || isOwned(w)));
212
+ if (fgOwned) {
213
+ const kind = classifyModalKind(nm(fgOwned) || "(unnamed)", cls(fgOwned) || undefined);
214
+ return build(fgOwned, kind === "file_dialog" ? 0.82 : 0.85, "Windows foreground dialog");
215
+ }
216
+ // Pass C — 0.1.65 H13: the app's main window is visible-but-DISABLED.
217
+ // Some app-owned secondary window is blocking it; pick the best
218
+ // candidate (foreground → owner-chain → same-process), else report the
219
+ // block generically so the agent still handles it.
220
+ if (appMainDisabled) {
221
+ const blocker = wins.find((w) => isForeground(w) && !isMainWindow(w) && isVisible(w)) ??
222
+ wins.find((w) => isOwnedByApp(w) && !isMainWindow(w) && isVisible(w)) ??
223
+ wins.find((w) => isOwned(w) && !isMainWindow(w) && isVisible(w));
224
+ if (blocker) {
225
+ const kind = classifyModalKind(nm(blocker) || "(unnamed)", cls(blocker) || undefined);
226
+ return build(blocker, kind === "file_dialog" ? 0.8 : 0.85, "Windows modal (owner disabled)");
227
+ }
228
+ }
229
+ // Pass D — 0.1.65 H13: the FOREGROUND window is itself a dialog (generic
230
+ // Win32 dialog class OR a confirm/alert/file title) even when we could
231
+ // not resolve the app's process (the Photometry-DB title-mismatch case).
232
+ // Ownership-independent but low-false-positive: a foreground #32770 /
233
+ // confirm-titled window is overwhelmingly an active modal.
234
+ const fgDialog = wins.find((w) => isForeground(w) &&
235
+ !isMainWindow(w) &&
236
+ isVisible(w) &&
237
+ (hasDialogClass(w) || hasModalNamePattern(w)));
238
+ if (fgDialog) {
239
+ const kind = classifyModalKind(nm(fgDialog) || "(unnamed)", cls(fgDialog) || undefined);
240
+ return build(fgDialog, kind === "file_dialog" ? 0.78 : 0.82, "Windows foreground dialog");
241
+ }
186
242
  // Pass 3 — file-dialog heuristic (unowned / app process unresolved).
187
243
  // (a) a strong file NAME pattern fires app-filter-free; (b) a file CLASS
188
244
  // match still needs the app filter so we don't grab unrelated OS chrome.
189
245
  const fileDialog = wins.find((w) => {
246
+ if (!isVisible(w))
247
+ return false;
190
248
  const byName = FILE_DIALOG_NAME_PATTERNS.some((re) => re.test(nm(w)));
191
249
  if (byName)
192
250
  return true;
@@ -208,7 +266,8 @@ export function selectWindowsModal(probe, appName) {
208
266
  // Pass 4 — safety net: a generic Win32 dialog (#32770 / DirectUIHWND)
209
267
  // titled like a confirm / alert is unambiguously a dialog even when we
210
268
  // could not resolve the owning process (e.g. app lookup failed).
211
- const confirmByName = wins.find((w) => GENERIC_DIALOG_CLASS_NAMES.has(cls(w)) &&
269
+ const confirmByName = wins.find((w) => isVisible(w) &&
270
+ GENERIC_DIALOG_CLASS_NAMES.has(cls(w)) &&
212
271
  (CONFIRM_NAME_PATTERN.test(nm(w)) || ALERT_NAME_PATTERN.test(nm(w))));
213
272
  if (confirmByName)
214
273
  return build(confirmByName, 0.7, "Windows dialog");
@@ -217,31 +276,63 @@ export function selectWindowsModal(probe, appName) {
217
276
  async function detectWindowsModal(opts) {
218
277
  const app = opts.app_name ?? "";
219
278
  const psLiteral = app.replace(/'/g, "''");
220
- // PowerShell UIA probe. 0.1.54 E1collects 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.
279
+ // 0.1.65 H13Win32 `EnumWindows` probe (replaces the UIA control-view
280
+ // walk). The recurring out-of-app confirm regressed because a Win32 /
281
+ // WPF `MessageBox(hwndOwner, …)` is an OWNED top-level window that UIA's
282
+ // control view does NOT expose as a direct child of the root element —
283
+ // so `RootElement.FindAll(Children, ControlType::Window)` returned ONLY
284
+ // the main window ("only the main window exists") and every downstream
285
+ // pass was starved of the dialog row. `EnumWindows` enumerates EVERY
286
+ // top-level window and, crucially, lets us read each window's owner
287
+ // (GW_OWNER), enabled state, pid, class and title — plus the foreground
288
+ // window — which are the title- and IsModal-independent signals the
289
+ // selector now keys off (owner-chain / owner-disabled / foreground).
290
+ //
291
+ // Fields per window are tab-joined inside C# (delimiter stripped from
292
+ // class/title) to dodge anonymous-type JSON quirks; PowerShell parses
293
+ // them back into the {hwnd,pid,owner_hwnd,is_enabled,class_name,name}
294
+ // shape selectWindowsModal expects.
227
295
  const script = [
228
- "Add-Type -AssemblyName UIAutomationClient",
229
- "$root = [System.Windows.Automation.AutomationElement]::RootElement",
230
- "$cond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Window)",
231
- "$windows = $root.FindAll([System.Windows.Automation.TreeScope]::Children, $cond)",
296
+ 'Add-Type @"',
297
+ "using System;",
298
+ "using System.Text;",
299
+ "using System.Collections.Generic;",
300
+ "using System.Runtime.InteropServices;",
301
+ "public class ClModalEnum {",
302
+ " public delegate bool EnumProc(IntPtr h, IntPtr l);",
303
+ ' [DllImport("user32.dll")] public static extern bool EnumWindows(EnumProc cb, IntPtr l);',
304
+ ' [DllImport("user32.dll")] public static extern bool IsWindowVisible(IntPtr h);',
305
+ ' [DllImport("user32.dll")] public static extern bool IsWindowEnabled(IntPtr h);',
306
+ ' [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern int GetWindowText(IntPtr h, StringBuilder s, int n);',
307
+ ' [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern int GetClassName(IntPtr h, StringBuilder s, int n);',
308
+ ' [DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr h, out uint pid);',
309
+ ' [DllImport("user32.dll")] public static extern IntPtr GetWindow(IntPtr h, uint cmd);',
310
+ ' [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();',
311
+ " public static List<string> Rows() {",
312
+ " var rows = new List<string>();",
313
+ " EnumWindows((h, l) => {",
314
+ " if (!IsWindowVisible(h)) return true;",
315
+ " var t = new StringBuilder(512); GetWindowText(h, t, 512);",
316
+ " var c = new StringBuilder(256); GetClassName(h, c, 256);",
317
+ " uint pid = 0; GetWindowThreadProcessId(h, out pid);",
318
+ " IntPtr owner = GetWindow(h, (uint)4);",
319
+ ' string cls = c.ToString().Replace("\\t"," ");',
320
+ ' string title = t.ToString().Replace("\\t"," ").Replace("\\r"," ").Replace("\\n"," ");',
321
+ ' rows.Add(h.ToInt64() + "\\t" + pid + "\\t" + owner.ToInt64() + "\\t" + (IsWindowEnabled(h) ? "1" : "0") + "\\t" + cls + "\\t" + title);',
322
+ " return true;",
323
+ " }, IntPtr.Zero);",
324
+ " return rows;",
325
+ " }",
326
+ " public static long Foreground() { return GetForegroundWindow().ToInt64(); }",
327
+ "}",
328
+ '"@',
329
+ "$rows = [ClModalEnum]::Rows()",
330
+ "$fg = [ClModalEnum]::Foreground()",
232
331
  "$result = @()",
233
- "foreach ($w in $windows) {",
234
- " $name = $w.Current.Name",
235
- " $cls = $w.Current.ClassName",
236
- " $hwnd = $w.Current.NativeWindowHandle",
237
- " $procId = 0",
238
- " try { $procId = $w.Current.ProcessId } catch { }",
239
- " $isModal = $false",
240
- " try {",
241
- " $pattern = $w.GetCurrentPattern([System.Windows.Automation.WindowPattern]::Pattern)",
242
- " $isModal = $pattern.Current.IsModal",
243
- " } catch { }",
244
- " $result += @{ name = $name; class_name = $cls; hwnd = $hwnd; is_modal = $isModal; process_id = $procId }",
332
+ "foreach ($r in $rows) {",
333
+ ' $f = $r -split "`t", 6',
334
+ " if ($f.Length -lt 6) { continue }",
335
+ " $result += @{ hwnd = [int64]$f[0]; process_id = [int]$f[1]; owner_hwnd = [int64]$f[2]; is_enabled = ($f[3] -eq '1'); class_name = $f[4]; name = $f[5]; is_visible = $true }",
245
336
  "}",
246
337
  `$appTarget = '${psLiteral}'`,
247
338
  "$appNorm = ($appTarget -replace '\\s','').ToLowerInvariant()",
@@ -252,10 +343,10 @@ async function detectWindowsModal(opts) {
252
343
  " $appPids = @($apps | Select-Object -ExpandProperty Id)",
253
344
  " $appMain = @($apps | ForEach-Object { [int64]$_.MainWindowHandle })",
254
345
  "}",
255
- "$out = @{ windows = @($result); app_pids = @($appPids); app_main_hwnds = @($appMain) }",
346
+ "$out = @{ windows = @($result); app_pids = @($appPids); app_main_hwnds = @($appMain); foreground_hwnd = $fg }",
256
347
  "$out | ConvertTo-Json -Compress -Depth 5",
257
348
  ].join("\n");
258
- const r = await runCommand("powershell", ["-NoProfile", "-Command", script], opts.cwd, undefined, undefined, 9000);
349
+ const r = await runCommand("powershell", ["-NoProfile", "-Command", script], opts.cwd, undefined, undefined, 12000);
259
350
  if (r.exit_code !== 0) {
260
351
  return {
261
352
  is_modal_present: false,
@@ -272,6 +363,8 @@ async function detectWindowsModal(opts) {
272
363
  probe.windows = asArr(p.windows);
273
364
  probe.app_pids = asArr(p.app_pids).map((x) => Number(x));
274
365
  probe.app_main_hwnds = asArr(p.app_main_hwnds);
366
+ if (p.foreground_hwnd != null)
367
+ probe.foreground_hwnd = p.foreground_hwnd;
275
368
  }
276
369
  }
277
370
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"modal_detector.js","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAmEvC;;;;;;;;;GASG;AACH,MAAM,uBAAuB,GAAG;IAC9B,QAAQ;IACR,cAAc;IACd,cAAc;IACd,8BAA8B;IAC9B,uEAAuE;IACvE,yEAAyE;IACzE,uDAAuD;IACvD,kBAAkB;IAClB,iBAAiB;IACjB,6CAA6C;CAC9C,CAAC;AACF,MAAM,yBAAyB,GAAG;IAChC,8FAA8F;IAC9F,kBAAkB;IAClB,gBAAgB;IAChB,uBAAuB;IACvB,qBAAqB;IACrB,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,qEAAqE;IACrE,wBAAwB;IACxB,6BAA6B;IAC7B,uDAAuD;IACvD,6CAA6C;CAC9C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,8BAA8B,GAAG;IACrC,cAAc;IACd,kBAAkB;IAClB,8BAA8B;IAC9B,6CAA6C;CAC9C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAC/B,iHAAiH,CAAC;AACpH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,oFAAoF,CAAC;AAEvF,gFAAgF;AAChF,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAEvE,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAkB;IAChE,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,sEAAsE;IACtE,mEAAmE;IACnE,oDAAoD;IACpD,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC;IAChF,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,qDAAqD;IACrD,IAAI,8BAA8B,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC;IACvE,sEAAsE;IACtE,kEAAkE;IAClE,qEAAqE;IACrE,qEAAqE;IACrE,IAAI,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAKjC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;IAC7C,IAAI,CAAC;QACH,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,sBAAsB,MAAM,wFAAwF;SACtI,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM;YACnB,eAAe,EAAG,CAAW,CAAC,OAAO;SACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,KAEjC;IACC,kEAAkE;IAClE,gEAAgE;IAChE,2DAA2D;IAC3D,iEAAiE;IACjE,4DAA4D;IAC5D,qBAAqB;IACrB,OAAO;QACL,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,SAAS;QACtB,eAAe,EACb,0OAA0O;KAC7O,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAGjC;IACC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB,EAAE,OAAgB;IACvE,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IAEjC,MAAM,EAAE,GAAG,CAAC,CAAiB,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,CAAiB,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;QACjD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAiB,EAAW,EAAE,CAC7C,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,CAAC,CAAiB,EAAW,EAAE,CAClD,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,CAAC,CAAiB,EAAW,EAAE,CACpD,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,mBAAmB,GAAG,CAAC,CAAiB,EAAW,EAAE,CACzD,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,CAAC,CAAiB,EAAE,UAAkB,EAAE,UAAkB,EAAwB,EAAE;QAChG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;QAC1D,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,GAAG,UAAU,KAAK,IAAI,EAAE;YAC3C,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACjD,gBAAgB,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAChE,UAAU;YACV,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC,CAAC;IAEF,uEAAuE;IACvE,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACjF,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IAE3D,wEAAwE;IACxE,sEAAsE;IACtE,yEAAyE;IACzE,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,CAAC;QACV,CAAC,YAAY,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAC9D,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC;QAClF,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC7E,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,OAAO,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,wBAAwB,EAAE,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE;YAC1E,UAAU,EAAE,aAAa;YACzB,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS;YACxC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACnE,gBAAgB,EAAE,SAAS;YAC3B,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,IAAI,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAEtE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAGjC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,iEAAiE;IACjE,kEAAkE;IAClE,0DAA0D;IAC1D,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,oCAAoC;IACpC,MAAM,MAAM,GAAG;QACb,2CAA2C;QAC3C,oEAAoE;QACpE,qLAAqL;QACrL,kFAAkF;QAClF,eAAe;QACf,4BAA4B;QAC5B,2BAA2B;QAC3B,+BAA+B;QAC/B,yCAAyC;QACzC,eAAe;QACf,oDAAoD;QACpD,qBAAqB;QACrB,SAAS;QACT,yFAAyF;QACzF,yCAAyC;QACzC,eAAe;QACf,4GAA4G;QAC5G,GAAG;QACH,iBAAiB,SAAS,GAAG;QAC7B,8DAA8D;QAC9D,gBAAgB;QAChB,gBAAgB;QAChB,8BAA8B;QAC9B,iQAAiQ;QACjQ,0DAA0D;QAC1D,uEAAuE;QACvE,GAAG;QACH,wFAAwF;QACxF,0CAA0C;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnH,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,SAAS;YACtB,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAC/E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,CAAK,CAAU,EAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnG,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,cAAc,GAAG,KAAK,CAAkB,CAAC,CAAC,cAAc,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAG7B;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;IACzC,MAAM,MAAM,GACV,GAAG,KAAK,WAAW;QACjB,CAAC,CAAC,qIAAqI;QACvI,CAAC,CAAC,4EAA4E,GAAG,+BAA+B,CAAC;IACrH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9F,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,SAAS;YACtB,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QACpD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,gBAAgB,GAAG,EAAE;QACxC,gBAAgB,EAAE,SAAS;QAC3B,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,SAAS;KACvB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAG/B;IACC,wDAAwD;IACxD,MAAM,CAAC,GAAG,MAAM,UAAU,CACxB,SAAS,EACT,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,EAC1C,IAAI,CAAC,GAAG,EACR,SAAS,EACT,SAAS,EACT,IAAI,CACL,CAAC;IACF,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,SAAS;YACtB,eAAe,EAAE,mFAAmF;SACrG,CAAC;IACJ,CAAC;IACD,mEAAmE;IACnE,6DAA6D;IAC7D,qDAAqD;IACrD,kCAAkC;IAClC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;QAC3B,OAAO;QACP,cAAc;QACd,aAAa;QACb,OAAO;QACP,MAAM;QACN,iBAAiB;QACjB,cAAc;QACd,WAAW;QACX,QAAQ;QACR,WAAW;QACX,eAAe;QACf,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"modal_detector.js","sourceRoot":"","sources":["../../src/runners/modal_detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * 0.1.64 — Remote / hosting / third-party log collection via provider CLIs.
3
+ *
4
+ * Auto-detects the deploy targets + SaaS providers a project uses from its
5
+ * markers (config files, dependencies), and when the provider CLI is
6
+ * installed pulls the latest read-only logs into the run's logs/ dir. Those
7
+ * captured logs are then folded into runtime_log_scan so production / 3rd
8
+ * party errors flow through the same `runtime_log_clean_evidence` blocker as
9
+ * local logs. When a detected provider's CLI is missing, we surface a
10
+ * push-to-install directive.
11
+ *
12
+ * Safety: every command is a READ-ONLY `logs`-style subcommand run with a
13
+ * hard timeout. Streaming commands (wrangler tail, stripe logs tail, fly
14
+ * logs) are killed by the timeout and their partial output is captured.
15
+ */
16
+ export interface RemoteLogProvider {
17
+ id: string;
18
+ displayName: string;
19
+ /** Default CLI binary to probe. */
20
+ cli: string;
21
+ /** Project markers that indicate this provider is in use. */
22
+ detect: (cwd: string) => boolean;
23
+ /**
24
+ * Build the read-only logs command args. Return null when the command
25
+ * cannot be built without extra config (e.g. an AWS log-group name or a
26
+ * Vercel deployment URL) — the caller then asks the agent to configure it.
27
+ */
28
+ logsArgs: (tail: number) => string[] | null;
29
+ /** Shown when the CLI is not installed. */
30
+ installHint: string;
31
+ }
32
+ export interface CapturedRemoteLog {
33
+ id: string;
34
+ displayName: string;
35
+ path: string;
36
+ command: string;
37
+ }
38
+ export interface MissingRemoteCli {
39
+ id: string;
40
+ displayName: string;
41
+ cli: string;
42
+ install_hint: string;
43
+ }
44
+ export interface RemoteLogsEvidence {
45
+ generated_at: string;
46
+ enabled: boolean;
47
+ mode: "auto" | "configured" | "off";
48
+ /** Providers detected as in-use for this project. */
49
+ detected: string[];
50
+ captured: CapturedRemoteLog[];
51
+ /** Detected providers whose CLI is not installed — push the agent to install. */
52
+ missing_clis: MissingRemoteCli[];
53
+ /** Providers whose CLI is installed but reported an auth/login error. */
54
+ auth_needed: string[];
55
+ /** Providers detected but needing a logs_command override (target unknown). */
56
+ needs_config: string[];
57
+ reason?: string;
58
+ }
59
+ export interface RemoteLogsConfig {
60
+ enabled?: boolean;
61
+ mode?: "auto" | "configured" | "off";
62
+ tail_lines?: number;
63
+ timeout_seconds?: number;
64
+ providers?: Array<{
65
+ id: string;
66
+ enabled?: boolean;
67
+ cli?: string;
68
+ logs_command?: string;
69
+ install_hint?: string;
70
+ }>;
71
+ }
72
+ /**
73
+ * Built-in provider registry. Covers the common deploy + SaaS targets; the
74
+ * long tail is handled via config.remote_logs.providers overrides.
75
+ */
76
+ export declare const PROVIDER_REGISTRY: RemoteLogProvider[];
77
+ export interface ResolvedCandidate {
78
+ provider: RemoteLogProvider;
79
+ /** Effective CLI (config override wins). */
80
+ cli: string;
81
+ /** Full command override from config, if any (string form). */
82
+ commandOverride?: string;
83
+ installHint: string;
84
+ }
85
+ /**
86
+ * Pure: pick the candidate providers given the project, config, and registry.
87
+ * - mode "off" / enabled:false -> []
88
+ * - mode "configured" -> only providers explicitly listed in config (enabled).
89
+ * - mode "auto" (default) -> registry providers whose detect() matches, PLUS
90
+ * any explicitly-configured providers; config can disable a provider.
91
+ */
92
+ export declare function selectRemoteLogCandidates(cwd: string, config: RemoteLogsConfig, registry?: RemoteLogProvider[]): ResolvedCandidate[];
93
+ /**
94
+ * Collect remote logs. Best-effort: never throws. Writes remote_logs.json
95
+ * into runDir and the per-provider logs into logDir.
96
+ */
97
+ export declare function collectRemoteLogs(cwd: string, config: RemoteLogsConfig, logDir: string): Promise<RemoteLogsEvidence>;
98
+ export declare function writeRemoteLogsEvidence(runDir: string, ev: RemoteLogsEvidence): void;
99
+ export declare function loadRemoteLogsEvidence(runDir: string): RemoteLogsEvidence | null;
100
+ /** Captured remote log files in a run's logs dir, for runtime_log_scan. */
101
+ export declare function listCapturedRemoteLogs(logDir: string): Array<{
102
+ source: string;
103
+ path: string;
104
+ }>;
105
+ //# sourceMappingURL=remote_logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote_logs.d.ts","sourceRoot":"","sources":["../../src/runners/remote_logs.ts"],"names":[],"mappings":"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"}