openmausbot 0.1.91 → 0.1.93

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 (164) hide show
  1. package/dist/assets/DesktopViewer-CKNR3SEW.js +5 -0
  2. package/dist/assets/{abnfDiagram-O67JEVCF-yP-w8pRq.js → abnfDiagram-O67JEVCF-Ckrm1I1X.js} +1 -1
  3. package/dist/assets/{arc-DsivfZEh.js → arc-BBdBuCgB.js} +1 -1
  4. package/dist/assets/{architectureDiagram-NJMV4G6O-CILw7lzT.js → architectureDiagram-NJMV4G6O-CDdA3Hjs.js} +1 -1
  5. package/dist/assets/{blockDiagram-BEXU5L5S-DEQUV3HF.js → blockDiagram-BEXU5L5S-AUrsx1YR.js} +1 -1
  6. package/dist/assets/{c4Diagram-YGBWAQC7-lSXCZoKA.js → c4Diagram-YGBWAQC7-BEqQ0Unh.js} +1 -1
  7. package/dist/assets/channel-BU94VpxE.js +1 -0
  8. package/dist/assets/{chunk-2Q5K7J3B-QCD5bgWP.js → chunk-2Q5K7J3B-CEEuvd4C.js} +1 -1
  9. package/dist/assets/{chunk-3FUC2YCW-C5-iZJuL.js → chunk-3FUC2YCW-DyANCiHl.js} +2 -2
  10. package/dist/assets/{chunk-5VM5RSS4-cxsawMpY.js → chunk-5VM5RSS4-Dx_Slpw9.js} +1 -1
  11. package/dist/assets/{chunk-GTNCS2PH-DV8tV8H7.js → chunk-GTNCS2PH-Dl7h7iiD.js} +1 -1
  12. package/dist/assets/{chunk-GWA4HPMP-CJFZyfbW.js → chunk-GWA4HPMP-BLx07SPb.js} +1 -1
  13. package/dist/assets/{chunk-JWPE2WC7-BigbMXco.js → chunk-JWPE2WC7-BMxDj3n7.js} +1 -1
  14. package/dist/assets/{chunk-NETBCI7D-oVxTfpDy.js → chunk-NETBCI7D-CN66PT4H.js} +1 -1
  15. package/dist/assets/{chunk-WEXAMYUT-CH4BiroW.js → chunk-WEXAMYUT-6HwhsDKw.js} +1 -1
  16. package/dist/assets/{chunk-XXDRQBXY-KEDa6gax.js → chunk-XXDRQBXY-gWnLt7SN.js} +1 -1
  17. package/dist/assets/{classDiagram-v2-NBCMYWYE-BiPjfqVv.js → classDiagram-v2-NBCMYWYE-CMS5l2ea.js} +1 -1
  18. package/dist/assets/{cose-bilkent-JH36ORCC-Caxew3OY.js → cose-bilkent-JH36ORCC-CV7sQwIG.js} +1 -1
  19. package/dist/assets/{cynefin-OW5HDTMX-B_Pui369.js → cynefin-OW5HDTMX-CSyl-7vl.js} +1 -1
  20. package/dist/assets/{cynefinDiagram-VND7K2PF-X64ydIhP.js → cynefinDiagram-VND7K2PF-BCLKL6az.js} +1 -1
  21. package/dist/assets/{dagre-6A5THRUB-TqYCI1E1.js → dagre-6A5THRUB-DiaZs6S1.js} +1 -1
  22. package/dist/assets/{diagram-22UHCM2B-TeOt3rAQ.js → diagram-22UHCM2B-BeTtmt3I.js} +1 -1
  23. package/dist/assets/{diagram-3UASUU5V-D70BLhDA.js → diagram-3UASUU5V-CsdBG-QQ.js} +1 -1
  24. package/dist/assets/{diagram-ATOU4E4O-BbQDLwUC.js → diagram-ATOU4E4O-BczvdbR1.js} +1 -1
  25. package/dist/assets/{diagram-CDSNMT55-ChNJZ1u-.js → diagram-CDSNMT55-DHTTTMhi.js} +1 -1
  26. package/dist/assets/{diagram-MLGK6HIB-DMBl2APa.js → diagram-MLGK6HIB-RTjHyd8z.js} +1 -1
  27. package/dist/assets/{diagram-MPIPVDR6-CEqDchOp.js → diagram-MPIPVDR6-BDenHEH_.js} +1 -1
  28. package/dist/assets/{ebnfDiagram-ZINNZB2B-BVDKRp_-.js → ebnfDiagram-ZINNZB2B-BSiRSbtL.js} +1 -1
  29. package/dist/assets/{elk-276RUBZZ-CRkofO9B.js → elk-276RUBZZ-BCAElss-.js} +1 -1
  30. package/dist/assets/{erDiagram-OPXOYQCR-DruOMh5e.js → erDiagram-OPXOYQCR-C4_1ZPJe.js} +1 -1
  31. package/dist/assets/{flowDiagram-KWPJA3E3-8GMQeB7t.js → flowDiagram-KWPJA3E3-Bcb4Z75S.js} +1 -1
  32. package/dist/assets/{ganttDiagram-FUAMR5RP-ORE9jcsM.js → ganttDiagram-FUAMR5RP-BiPOzxzb.js} +1 -1
  33. package/dist/assets/{gitGraphDiagram-X574FWY7-BmsedsWh.js → gitGraphDiagram-X574FWY7-B1wtF3ZS.js} +1 -1
  34. package/dist/assets/index-Biji-bfL.css +1 -0
  35. package/dist/assets/{index-DKNEM8Q6.js → index-BkYwilkG.js} +1 -1
  36. package/dist/assets/index-DZlhoES0.js +597 -0
  37. package/dist/assets/{infoDiagram-VRGFBTTK-E_p7AooJ.js → infoDiagram-VRGFBTTK-A19No71U.js} +1 -1
  38. package/dist/assets/{ishikawaDiagram-OU5B5YK6-Y-B2mKda.js → ishikawaDiagram-OU5B5YK6-BQsqJ_cV.js} +1 -1
  39. package/dist/assets/{journeyDiagram-ZHPQQLJL-eA8RELcK.js → journeyDiagram-ZHPQQLJL-DAO0pVan.js} +1 -1
  40. package/dist/assets/{kanban-definition-PNTS6WVX-DqIL2e8e.js → kanban-definition-PNTS6WVX-NepmKEe2.js} +1 -1
  41. package/dist/assets/{linear-yC_29R6e.js → linear-bq1PTDTW.js} +1 -1
  42. package/dist/assets/{mermaid.core-VhEMkSND.js → mermaid.core-s4LTbQle.js} +5 -5
  43. package/dist/assets/{mindmap-definition-NLK3R4M7-oJ7kyQZy.js → mindmap-definition-NLK3R4M7-LtdbgHFH.js} +1 -1
  44. package/dist/assets/{pegDiagram-GJSIUBJH-BmfYcY0O.js → pegDiagram-GJSIUBJH-tdbaCxiK.js} +1 -1
  45. package/dist/assets/{pieDiagram-5QR66LMP-DKvgP7w9.js → pieDiagram-5QR66LMP-DvkbpW8l.js} +1 -1
  46. package/dist/assets/{quadrantDiagram-O4NWA36T-BEKL3W0L.js → quadrantDiagram-O4NWA36T-Do4KaH-E.js} +1 -1
  47. package/dist/assets/{railroadDiagram-XR7U4H2S-BEsiqR5s.js → railroadDiagram-XR7U4H2S-BQWULOAs.js} +1 -1
  48. package/dist/assets/{requirementDiagram-PLB6GJNP-DWBcWvAP.js → requirementDiagram-PLB6GJNP-w9kei1FU.js} +1 -1
  49. package/dist/assets/{sankeyDiagram-IPEJSGJF-rpZ2_O4s.js → sankeyDiagram-IPEJSGJF-D2gRy0e8.js} +1 -1
  50. package/dist/assets/{sequenceDiagram-PO4LG4MO-B99HQdJR.js → sequenceDiagram-PO4LG4MO-a2sO5_Eo.js} +1 -1
  51. package/dist/assets/{sizeCapture-INFHLROL-BjN0qT5T.js → sizeCapture-INFHLROL-CiPJmFEB.js} +1 -1
  52. package/dist/assets/{stateDiagram-v2-GCMORJYK-BbsVgGsC.js → stateDiagram-v2-GCMORJYK-DAkUUlL7.js} +1 -1
  53. package/dist/assets/{swimlanes-2SLR337P-DG3gKkeR.js → swimlanes-2SLR337P-DANf2R8Y.js} +1 -1
  54. package/dist/assets/swimlanesDiagram-TC7HE7FX-CdHxG8aM.js +8 -0
  55. package/dist/assets/{timeline-definition-EJHVYXUP-BTHOdtF_.js → timeline-definition-EJHVYXUP-BKpQmzrT.js} +1 -1
  56. package/dist/assets/{usecaseDiagram-POWQR4AR-acLSLFwc.js → usecaseDiagram-POWQR4AR-BtI7qLN-.js} +1 -1
  57. package/dist/assets/{vennDiagram-UO4OBE2U-C5JzNX9G.js → vennDiagram-UO4OBE2U-gXJXrAG_.js} +1 -1
  58. package/dist/assets/{wardleyDiagram-VNRHLVJA-DL1-PrR_.js → wardleyDiagram-VNRHLVJA-GU8Po5-n.js} +1 -1
  59. package/dist/assets/{xychartDiagram-PMCCYNJV-Bvr1477p.js → xychartDiagram-PMCCYNJV-BF4J30g6.js} +1 -1
  60. package/dist/index.html +2 -2
  61. package/dist/novnc-NOTICE.txt +118 -0
  62. package/dist-server/cloud-home-start.js +112 -14
  63. package/dist-server/companion/src/routes.js +24 -1
  64. package/dist-server/container-mcp.js +201 -16
  65. package/dist-server/drivers/agents-proxy.js +7 -4
  66. package/dist-server/enterprise/server/index.js +5 -1
  67. package/dist-server/index.js +10698 -4737
  68. package/dist-server/local-computer-proxy.js +133 -8
  69. package/dist-server/mcp-gate.js +16 -6
  70. package/dist-server/model-catalog/models-dev.snapshot.json +7299 -0
  71. package/dist-server/openmausbot.js +4656 -1258
  72. package/dist-server/pair-cli.js +4656 -1258
  73. package/dist-server/server/boat.js +5 -5
  74. package/dist-server/server/browser-engine.js +10 -1
  75. package/dist-server/server/browser-live.js +46 -2
  76. package/dist-server/server/browser-runtime.js +74 -8
  77. package/dist-server/server/browser-tool-shape.js +6 -4
  78. package/dist-server/server/chief-of-staff.js +1 -1
  79. package/dist-server/server/cloud-home-start.js +118 -26
  80. package/dist-server/server/cloud-home.js +39 -3
  81. package/dist-server/server/cloud-lending.js +74 -10
  82. package/dist-server/server/cloud-owner.js +196 -0
  83. package/dist-server/server/cloud-secrets-boot.js +6 -0
  84. package/dist-server/server/cloud-secrets.js +65 -0
  85. package/dist-server/server/computer-control.js +6 -0
  86. package/dist-server/server/config.js +187 -14
  87. package/dist-server/server/container-computer.js +46 -34
  88. package/dist-server/server/desktop-viewer-targets.js +26 -0
  89. package/dist-server/server/digest.js +12 -2
  90. package/dist-server/server/drivers/acp/core.js +339 -33
  91. package/dist-server/server/drivers/acp/cursor.js +13 -1
  92. package/dist-server/server/drivers/acp/opencode-go.js +614 -85
  93. package/dist-server/server/drivers/acp/quiet-status.js +257 -0
  94. package/dist-server/server/drivers/acp/qwen.js +18 -0
  95. package/dist-server/server/drivers/agents-catalog.js +6 -6
  96. package/dist-server/server/drivers/antigravity-acp.js +69 -11
  97. package/dist-server/server/drivers/antigravity-temp.js +360 -0
  98. package/dist-server/server/drivers/antigravity.js +21 -0
  99. package/dist-server/server/drivers/builtIn.js +2 -0
  100. package/dist-server/server/drivers/cerebras.js +108 -0
  101. package/dist-server/server/drivers/chat-mcp-tools.js +20 -3
  102. package/dist-server/server/drivers/chatgpt-plan-auth.js +481 -0
  103. package/dist-server/server/drivers/claude.js +329 -37
  104. package/dist-server/server/drivers/codex.js +228 -18
  105. package/dist-server/server/drivers/grok.js +2 -2
  106. package/dist-server/server/drivers/mistral.js +4 -3
  107. package/dist-server/server/drivers/openai-chat-protocol.js +4 -3
  108. package/dist-server/server/drivers/openai-chat.js +66 -4
  109. package/dist-server/server/drivers/openai-compat.js +73 -23
  110. package/dist-server/server/drivers/prompt-split.js +2 -0
  111. package/dist-server/server/engine-install.js +46 -12
  112. package/dist-server/server/env-path.js +21 -5
  113. package/dist-server/server/harness/registry.js +2 -2
  114. package/dist-server/server/index.js +1545 -238
  115. package/dist-server/server/lending-memory.js +479 -0
  116. package/dist-server/server/local-vm-idle.js +24 -6
  117. package/dist-server/server/local-vm-stop-reason.js +26 -0
  118. package/dist-server/server/managed-desktop.js +3 -0
  119. package/dist-server/server/mcp-bridge.js +5 -3
  120. package/dist-server/server/mcp-http.js +6 -3
  121. package/dist-server/server/mcp-oauth-discovery.js +133 -0
  122. package/dist-server/server/mcp-oauth-store.js +70 -0
  123. package/dist-server/server/mcp-oauth.js +550 -0
  124. package/dist-server/server/mcp-probe.js +14 -1
  125. package/dist-server/server/mcp-registry.js +43 -0
  126. package/dist-server/server/memory-upkeep.js +94 -84
  127. package/dist-server/server/model-catalog/catalog.js +374 -0
  128. package/dist-server/server/model-catalog/presets.js +176 -0
  129. package/dist-server/server/model-catalog/trim.js +219 -0
  130. package/dist-server/server/provider-key-check.js +5 -2
  131. package/dist-server/server/recent-work.js +1 -1
  132. package/dist-server/server/request-auth.js +23 -0
  133. package/dist-server/server/routes/antigravity-leftovers.js +45 -0
  134. package/dist-server/server/routes/bot-memory.js +31 -6
  135. package/dist-server/server/routes/desktop-viewer.js +238 -0
  136. package/dist-server/server/routine-requests.js +1 -1
  137. package/dist-server/server/routines.js +6 -3
  138. package/dist-server/server/sessions.js +56 -9
  139. package/dist-server/server/skills.js +25 -10
  140. package/dist-server/server/store.js +116 -122
  141. package/dist-server/server/thread-events.js +2 -0
  142. package/dist-server/server/thread-starters.js +33 -0
  143. package/dist-server/server/thread-title.js +46 -0
  144. package/dist-server/server/tts/fish.js +4 -5
  145. package/dist-server/server/tts/index.js +5 -3
  146. package/dist-server/server/vps-computer.js +80 -13
  147. package/dist-server/server/webhooks.js +18 -1
  148. package/dist-server/server/workspace-backup-policy.js +3 -0
  149. package/dist-server/server/workspace-backup.js +25 -0
  150. package/dist-server/server/workspace.js +66 -16
  151. package/dist-server/shared/approval-mode.js +1 -1
  152. package/dist-server/shared/redact.js +1 -0
  153. package/dist-server/shared/tool-name.js +22 -0
  154. package/dist-server/shared/workspace-backup-client.js +1 -0
  155. package/dist-server/src/lib/citations.js +177 -0
  156. package/dist-server/src/lib/composer-attachments.js +7 -1
  157. package/dist-server/vps-container-mcp.js +202 -16
  158. package/dist-server/workspace-backup.worker.js +87 -9
  159. package/enterprise/server/index.js +5 -1
  160. package/package.json +1 -1
  161. package/dist/assets/channel-DrfGMu7X.js +0 -1
  162. package/dist/assets/index-BlnCEcU6.js +0 -588
  163. package/dist/assets/index-DVxjOvID.css +0 -1
  164. package/dist/assets/swimlanesDiagram-TC7HE7FX-BCZhxl7e.js +0 -8
@@ -84,6 +84,9 @@ function nvmBinDirs() {
84
84
  return [];
85
85
  }
86
86
  }
87
+ function sealedFixture() {
88
+ return process.env.OMB_TEST_SEALED_PATH === "1";
89
+ }
87
90
  function knownDirs() {
88
91
  const home = homedir();
89
92
  return [
@@ -99,10 +102,13 @@ function knownDirs() {
99
102
  // opencode installer
100
103
  join(home, ".claude", "local"),
101
104
  // claude "local install"
102
- "/opt/homebrew/bin",
103
- // brew, Apple silicon
104
- "/usr/local/bin",
105
- // brew Intel / classic installs
105
+ // Machine-wide rather than under the (possibly temporary) home.
106
+ ...sealedFixture() ? [] : [
107
+ "/opt/homebrew/bin",
108
+ // brew, Apple silicon
109
+ "/usr/local/bin"
110
+ // brew Intel / classic installs
111
+ ],
106
112
  join(home, ".volta", "bin"),
107
113
  join(home, ".bun", "bin"),
108
114
  join(home, ".asdf", "shims"),
@@ -124,6 +130,8 @@ function windowsKnownDirs() {
124
130
  // x.ai installer
125
131
  join(localAppData, "agy", "bin"),
126
132
  // Antigravity installer
133
+ // Cursor installer: cursor-agent.* and its `agent` copies (MOCA-272)
134
+ join(localAppData, "cursor-agent"),
127
135
  join(home, ".local", "bin"),
128
136
  // claude native installer
129
137
  join(home, ".claude", "local"),
@@ -131,7 +139,9 @@ function windowsKnownDirs() {
131
139
  // Factory droid installer (%USERPROFILE%\bin)
132
140
  join(home, ".bun", "bin"),
133
141
  join(home, ".deno", "bin"),
134
- join(home, "go", "bin")
142
+ join(home, "go", "bin"),
143
+ join(process.env.ProgramFiles ?? "C:\\Program Files", "Docker", "Docker", "resources", "bin")
144
+ // Docker Desktop installer
135
145
  ];
136
146
  }
137
147
  var cached = null;
@@ -154,7 +164,7 @@ function augmentedPath() {
154
164
  ...(process.platform === "win32" ? windowsKnownDirs() : knownDirs()).filter((d) => existsSync(d))
155
165
  ]);
156
166
  }
157
- if (!probed && !process.env.VITEST && process.platform !== "win32") {
167
+ if (!probed && !process.env.VITEST && !sealedFixture() && process.platform !== "win32") {
158
168
  probed = true;
159
169
  probeLoginShellPath();
160
170
  }
@@ -178,6 +188,119 @@ function probeLoginShellPath() {
178
188
  }
179
189
  );
180
190
  }
191
+ function splitCliString(cli) {
192
+ const out = [];
193
+ let cur = "";
194
+ let quote = null;
195
+ for (const ch of cli.trim()) {
196
+ if (quote) {
197
+ if (ch === quote) quote = null;
198
+ else cur += ch;
199
+ } else if (ch === '"' || ch === "'") {
200
+ quote = ch;
201
+ } else if (/\s/.test(ch)) {
202
+ if (cur) out.push(cur);
203
+ cur = "";
204
+ } else {
205
+ cur += ch;
206
+ }
207
+ }
208
+ if (cur) out.push(cur);
209
+ return out;
210
+ }
211
+ function isFile(p) {
212
+ try {
213
+ return statSync(p, { throwIfNoEntry: false })?.isFile() ?? false;
214
+ } catch {
215
+ return false;
216
+ }
217
+ }
218
+ function whichWin(cli, env) {
219
+ const exts = ((env ?? process.env).PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);
220
+ const probe = (base) => {
221
+ const order = extname(base) ? [base, ...exts.map((e) => base + e)] : [...exts.map((e) => base + e), base];
222
+ return order.find(isFile) ?? null;
223
+ };
224
+ if (/[\\/]/.test(cli) || /^[a-zA-Z]:/.test(cli)) return probe(cli);
225
+ const path = env ? env.PATH ?? env.Path ?? "" : augmentedPath();
226
+ for (const dir of path.split(delimiter)) {
227
+ if (!dir) continue;
228
+ const hit = probe(join(dir, cli));
229
+ if (hit) return hit;
230
+ }
231
+ return null;
232
+ }
233
+ function nodeExe(near, env) {
234
+ const local = join(near, "node.exe");
235
+ if (isFile(local)) return local;
236
+ const onPath = whichWin("node.exe", env);
237
+ if (onPath && extname(onPath).toLowerCase() === ".exe") return onPath;
238
+ return process.versions.electron ? null : process.execPath;
239
+ }
240
+ function parseCmdShim(shim, env) {
241
+ let text;
242
+ try {
243
+ text = readFileSync(shim, "utf8");
244
+ } catch {
245
+ return null;
246
+ }
247
+ const dir = dirname(shim);
248
+ const npmEntry = /^SET "NP[MX]_CLI_JS=%~dp0\\([^"]+)"/im.exec(text);
249
+ const targets = [...npmEntry ? [npmEntry] : [], ...text.matchAll(/"%~?dp0%?\\?([^"]+)"/g)].map((m) => join(dir, m[1])).filter((p) => isFile(p) && basename(p).toLowerCase() !== "node.exe");
250
+ const script = targets.find((p) => /\.[cm]?js$/i.test(p));
251
+ if (script) {
252
+ const node = nodeExe(dir, env);
253
+ if (node) return { command: node, args: [script] };
254
+ }
255
+ const exe = targets.find((p) => extname(p).toLowerCase() === ".exe");
256
+ return exe ? { command: exe, args: [] } : null;
257
+ }
258
+ function parseNodeShebang(file, env) {
259
+ let head = "";
260
+ let fd = null;
261
+ try {
262
+ fd = openSync(file, "r");
263
+ const buf = Buffer.alloc(128);
264
+ const n = readSync(fd, buf, 0, buf.length, 0);
265
+ head = buf.subarray(0, n).toString("utf8").split("\n", 1)[0];
266
+ } catch {
267
+ return null;
268
+ } finally {
269
+ if (fd !== null) {
270
+ try {
271
+ closeSync(fd);
272
+ } catch {
273
+ }
274
+ }
275
+ }
276
+ if (!/^#!.*\bnode(\.exe)?\b/.test(head)) return null;
277
+ const node = nodeExe(dirname(file), env);
278
+ return node ? { command: node, args: [file] } : null;
279
+ }
280
+ function resolveWord(cli, args2, env) {
281
+ if (process.platform !== "win32") return { command: cli, args: args2 };
282
+ const file = whichWin(cli, env);
283
+ if (!file) return { command: cli, args: args2 };
284
+ const ext = extname(file).toLowerCase();
285
+ if (ext === ".cmd" || ext === ".bat") {
286
+ const direct = parseCmdShim(file, env);
287
+ return direct ? { command: direct.command, args: [...direct.args, ...args2] } : { command: file, args: args2 };
288
+ }
289
+ if (ext === ".exe" || ext === ".com") return { command: file, args: args2 };
290
+ const viaNode = parseNodeShebang(file, env);
291
+ return viaNode ? { command: viaNode.command, args: [...viaNode.args, ...args2] } : { command: file, args: args2 };
292
+ }
293
+ function resolveCliSpawn(cli, args2, env) {
294
+ const trimmed = cli.trim();
295
+ if (trimmed.includes(" ") && existsSync(trimmed)) return resolveWord(trimmed, args2, env);
296
+ const split = splitCliString(cli);
297
+ if (split.length > 1 || split[0] !== trimmed) {
298
+ const [head, ...fixed] = split;
299
+ if (!head) return { command: cli, args: args2 };
300
+ return resolveWord(head, [...fixed, ...args2], env);
301
+ }
302
+ return resolveWord(cli, args2, env);
303
+ }
181
304
 
182
305
  // server/mcp-tool-schema.ts
183
306
  var ROOT_COMBINATORS = ["anyOf", "oneOf", "allOf", "not"];
@@ -401,9 +524,11 @@ function createMcpBridgeInterceptor(options) {
401
524
  };
402
525
  }
403
526
  function runMcpBridge(options) {
404
- const child = spawn(options.command, options.args, {
527
+ const env = options.env ?? { ...process.env, PATH: augmentedPath() };
528
+ const { command: command2, args: args2 } = resolveCliSpawn(options.command, options.args, env);
529
+ const child = spawn(command2, args2, {
405
530
  shell: false,
406
- env: options.env ?? { ...process.env, PATH: augmentedPath() },
531
+ env,
407
532
  stdio: ["pipe", "pipe", "pipe"]
408
533
  });
409
534
  child.stdin.on("error", () => {
@@ -17,6 +17,9 @@ function nvmBinDirs() {
17
17
  return [];
18
18
  }
19
19
  }
20
+ function sealedFixture() {
21
+ return process.env.OMB_TEST_SEALED_PATH === "1";
22
+ }
20
23
  function knownDirs() {
21
24
  const home = homedir();
22
25
  return [
@@ -32,10 +35,13 @@ function knownDirs() {
32
35
  // opencode installer
33
36
  join(home, ".claude", "local"),
34
37
  // claude "local install"
35
- "/opt/homebrew/bin",
36
- // brew, Apple silicon
37
- "/usr/local/bin",
38
- // brew Intel / classic installs
38
+ // Machine-wide rather than under the (possibly temporary) home.
39
+ ...sealedFixture() ? [] : [
40
+ "/opt/homebrew/bin",
41
+ // brew, Apple silicon
42
+ "/usr/local/bin"
43
+ // brew Intel / classic installs
44
+ ],
39
45
  join(home, ".volta", "bin"),
40
46
  join(home, ".bun", "bin"),
41
47
  join(home, ".asdf", "shims"),
@@ -57,6 +63,8 @@ function windowsKnownDirs() {
57
63
  // x.ai installer
58
64
  join(localAppData, "agy", "bin"),
59
65
  // Antigravity installer
66
+ // Cursor installer: cursor-agent.* and its `agent` copies (MOCA-272)
67
+ join(localAppData, "cursor-agent"),
60
68
  join(home, ".local", "bin"),
61
69
  // claude native installer
62
70
  join(home, ".claude", "local"),
@@ -64,7 +72,9 @@ function windowsKnownDirs() {
64
72
  // Factory droid installer (%USERPROFILE%\bin)
65
73
  join(home, ".bun", "bin"),
66
74
  join(home, ".deno", "bin"),
67
- join(home, "go", "bin")
75
+ join(home, "go", "bin"),
76
+ join(process.env.ProgramFiles ?? "C:\\Program Files", "Docker", "Docker", "resources", "bin")
77
+ // Docker Desktop installer
68
78
  ];
69
79
  }
70
80
  var cached = null;
@@ -87,7 +97,7 @@ function augmentedPath() {
87
97
  ...(process.platform === "win32" ? windowsKnownDirs() : knownDirs()).filter((d) => existsSync(d))
88
98
  ]);
89
99
  }
90
- if (!probed && !process.env.VITEST && process.platform !== "win32") {
100
+ if (!probed && !process.env.VITEST && !sealedFixture() && process.platform !== "win32") {
91
101
  probed = true;
92
102
  probeLoginShellPath();
93
103
  }