openmausbot 0.1.75 → 0.1.77

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 (66) hide show
  1. package/dist/assets/{index-BTlyRwLl.js → index-DeK-z9ld.js} +1 -1
  2. package/dist/assets/index-XdHJ-9CF.css +1 -0
  3. package/dist/assets/index-lhqE1umn.js +305 -0
  4. package/dist/index.html +2 -2
  5. package/dist-server/companion/src/routes.js +6 -2
  6. package/dist-server/container-mcp.js +5 -1
  7. package/dist-server/drivers/agents-proxy.js +184 -11
  8. package/dist-server/enterprise/server/index.js +387 -29
  9. package/dist-server/index.js +3786 -1135
  10. package/dist-server/mcp-gate.js +28 -18
  11. package/dist-server/openmausbot.js +927 -642
  12. package/dist-server/pair-cli.js +927 -642
  13. package/dist-server/server/agent-tool-policy.js +2 -0
  14. package/dist-server/server/atomic.js +37 -1
  15. package/dist-server/server/bot-overview.js +5 -1
  16. package/dist-server/server/browser-live.js +3 -0
  17. package/dist-server/server/chief-of-staff.js +17 -12
  18. package/dist-server/server/config.js +16 -0
  19. package/dist-server/server/delegations.js +177 -63
  20. package/dist-server/server/drivers/acp/core.js +3 -1
  21. package/dist-server/server/drivers/acp/hermes.js +21 -3
  22. package/dist-server/server/drivers/agents-proxy.js +169 -10
  23. package/dist-server/server/drivers/boxagent.js +1 -1
  24. package/dist-server/server/drivers/claude.js +34 -16
  25. package/dist-server/server/drivers/codex.js +3 -1
  26. package/dist-server/server/drivers/openai-chat.js +90 -67
  27. package/dist-server/server/drivers/openai-compat.js +9 -1
  28. package/dist-server/server/drivers/pi.js +22 -3
  29. package/dist-server/server/enterprise.js +38 -0
  30. package/dist-server/server/env-path.js +18 -17
  31. package/dist-server/server/environment.js +3 -0
  32. package/dist-server/server/fleet-agent.js +57 -13
  33. package/dist-server/server/fleet-cli.js +248 -31
  34. package/dist-server/server/fleet.js +88 -14
  35. package/dist-server/server/hosted-contract.js +16 -0
  36. package/dist-server/server/index.js +1777 -406
  37. package/dist-server/server/message-db.js +21 -0
  38. package/dist-server/server/message-file.js +4 -0
  39. package/dist-server/server/peer-roster.js +48 -9
  40. package/dist-server/server/procs.js +19 -3
  41. package/dist-server/server/provider-key-check.js +18 -1
  42. package/dist-server/server/request-auth.js +14 -5
  43. package/dist-server/server/room-handoffs.js +237 -0
  44. package/dist-server/server/section-context.js +64 -14
  45. package/dist-server/server/sessions.js +115 -8
  46. package/dist-server/server/shared-computer-control.js +24 -0
  47. package/dist-server/server/shared-computers.js +131 -0
  48. package/dist-server/server/steer-queue.js +2 -0
  49. package/dist-server/server/store.js +267 -15
  50. package/dist-server/server/surface.js +16 -5
  51. package/dist-server/server/team-backup.js +17 -1
  52. package/dist-server/server/team-computers.js +108 -0
  53. package/dist-server/server/team-setup-requests.js +252 -0
  54. package/dist-server/server/tool-summary.js +53 -1
  55. package/dist-server/server/turn-dispatch-guard.js +31 -3
  56. package/dist-server/server/workspace-backup.js +1 -0
  57. package/dist-server/shared/approval-mode.js +11 -1
  58. package/dist-server/shared/team-backup.js +1 -0
  59. package/dist-server/shared/team-computer.js +1 -0
  60. package/dist-server/shared/team-setup.js +1 -0
  61. package/dist-server/vps-container-mcp.js +5 -1
  62. package/enterprise/README.md +21 -3
  63. package/enterprise/server/index.js +387 -29
  64. package/package.json +1 -1
  65. package/dist/assets/index-CeMbvsgx.js +0 -305
  66. package/dist/assets/index-DH7Zax6L.css +0 -1
@@ -136,28 +136,29 @@ function isFile(p) {
136
136
  return false;
137
137
  }
138
138
  }
139
- function whichWin(cli) {
140
- const exts = (process.env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);
139
+ function whichWin(cli, env) {
140
+ const exts = ((env ?? process.env).PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);
141
141
  const probe = (base) => {
142
142
  const order = extname(base) ? [base, ...exts.map((e) => base + e)] : [...exts.map((e) => base + e), base];
143
143
  return order.find(isFile) ?? null;
144
144
  };
145
145
  if (/[\\/]/.test(cli) || /^[a-zA-Z]:/.test(cli)) return probe(cli);
146
- for (const dir of augmentedPath().split(delimiter)) {
146
+ const path = env ? env.PATH ?? env.Path ?? "" : augmentedPath();
147
+ for (const dir of path.split(delimiter)) {
147
148
  if (!dir) continue;
148
149
  const hit = probe(join(dir, cli));
149
150
  if (hit) return hit;
150
151
  }
151
152
  return null;
152
153
  }
153
- function nodeExe(near) {
154
+ function nodeExe(near, env) {
154
155
  const local = join(near, "node.exe");
155
156
  if (isFile(local)) return local;
156
- const onPath = whichWin("node.exe");
157
+ const onPath = whichWin("node.exe", env);
157
158
  if (onPath && extname(onPath).toLowerCase() === ".exe") return onPath;
158
159
  return process.versions.electron ? null : process.execPath;
159
160
  }
160
- function parseCmdShim(shim) {
161
+ function parseCmdShim(shim, env) {
161
162
  let text;
162
163
  try {
163
164
  text = readFileSync(shim, "utf8");
@@ -168,13 +169,13 @@ function parseCmdShim(shim) {
168
169
  const targets = [...text.matchAll(/"%~?dp0%?\\?([^"]+)"/g)].map((m) => join(dir, m[1])).filter((p) => isFile(p) && basename(p).toLowerCase() !== "node.exe");
169
170
  const script = targets.find((p) => /\.[cm]?js$/i.test(p));
170
171
  if (script) {
171
- const node = nodeExe(dir);
172
+ const node = nodeExe(dir, env);
172
173
  if (node) return { command: node, args: [script] };
173
174
  }
174
175
  const exe = targets.find((p) => extname(p).toLowerCase() === ".exe");
175
176
  return exe ? { command: exe, args: [] } : null;
176
177
  }
177
- function parseNodeShebang(file) {
178
+ function parseNodeShebang(file, env) {
178
179
  let head = "";
179
180
  let fd = null;
180
181
  try {
@@ -193,32 +194,32 @@ function parseNodeShebang(file) {
193
194
  }
194
195
  }
195
196
  if (!/^#!.*\bnode(\.exe)?\b/.test(head)) return null;
196
- const node = nodeExe(dirname(file));
197
+ const node = nodeExe(dirname(file), env);
197
198
  return node ? { command: node, args: [file] } : null;
198
199
  }
199
- function resolveWord(cli, args) {
200
+ function resolveWord(cli, args, env) {
200
201
  if (process.platform !== "win32") return { command: cli, args };
201
- const file = whichWin(cli);
202
+ const file = whichWin(cli, env);
202
203
  if (!file) return { command: cli, args };
203
204
  const ext = extname(file).toLowerCase();
204
205
  if (ext === ".cmd" || ext === ".bat") {
205
- const direct = parseCmdShim(file);
206
+ const direct = parseCmdShim(file, env);
206
207
  return direct ? { command: direct.command, args: [...direct.args, ...args] } : { command: file, args };
207
208
  }
208
209
  if (ext === ".exe" || ext === ".com") return { command: file, args };
209
- const viaNode = parseNodeShebang(file);
210
+ const viaNode = parseNodeShebang(file, env);
210
211
  return viaNode ? { command: viaNode.command, args: [...viaNode.args, ...args] } : { command: file, args };
211
212
  }
212
- function resolveCliSpawn(cli, args) {
213
+ function resolveCliSpawn(cli, args, env) {
213
214
  const trimmed = cli.trim();
214
- if (trimmed.includes(" ") && existsSync(trimmed)) return resolveWord(trimmed, args);
215
+ if (trimmed.includes(" ") && existsSync(trimmed)) return resolveWord(trimmed, args, env);
215
216
  const split = splitCliString(cli);
216
217
  if (split.length > 1 || split[0] !== trimmed) {
217
218
  const [head, ...fixed] = split;
218
219
  if (!head) return { command: cli, args };
219
- return resolveWord(head, [...fixed, ...args]);
220
+ return resolveWord(head, [...fixed, ...args], env);
220
221
  }
221
- return resolveWord(cli, args);
222
+ return resolveWord(cli, args, env);
222
223
  }
223
224
 
224
225
  // server/mcp-trim.ts
@@ -404,9 +405,13 @@ async function stopCliTree(child2, pid, timeoutMs) {
404
405
  if (exited()) return true;
405
406
  return new Promise((resolve) => {
406
407
  let timer;
408
+ let finished = false;
407
409
  const done = (stopped) => {
410
+ if (finished) return;
411
+ finished = true;
408
412
  clearTimeout(timer);
409
413
  child2.off("close", closed);
414
+ child2.off("exit", closed);
410
415
  resolve(stopped);
411
416
  };
412
417
  const closed = () => done(true);
@@ -414,7 +419,12 @@ async function stopCliTree(child2, pid, timeoutMs) {
414
419
  timer = setTimeout(() => done(false), timeoutMs);
415
420
  timer.unref?.();
416
421
  execFile2("taskkill", ["/PID", String(pid), "/T", "/F"], { windowsHide: true }, (err) => {
417
- if (!err) return;
422
+ if (finished) return;
423
+ if (!err) {
424
+ if (exited()) done(true);
425
+ else child2.once("exit", closed);
426
+ return;
427
+ }
418
428
  try {
419
429
  child2.kill();
420
430
  } catch {