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.
- package/dist/assets/{index-BTlyRwLl.js → index-DeK-z9ld.js} +1 -1
- package/dist/assets/index-XdHJ-9CF.css +1 -0
- package/dist/assets/index-lhqE1umn.js +305 -0
- package/dist/index.html +2 -2
- package/dist-server/companion/src/routes.js +6 -2
- package/dist-server/container-mcp.js +5 -1
- package/dist-server/drivers/agents-proxy.js +184 -11
- package/dist-server/enterprise/server/index.js +387 -29
- package/dist-server/index.js +3786 -1135
- package/dist-server/mcp-gate.js +28 -18
- package/dist-server/openmausbot.js +927 -642
- package/dist-server/pair-cli.js +927 -642
- package/dist-server/server/agent-tool-policy.js +2 -0
- package/dist-server/server/atomic.js +37 -1
- package/dist-server/server/bot-overview.js +5 -1
- package/dist-server/server/browser-live.js +3 -0
- package/dist-server/server/chief-of-staff.js +17 -12
- package/dist-server/server/config.js +16 -0
- package/dist-server/server/delegations.js +177 -63
- package/dist-server/server/drivers/acp/core.js +3 -1
- package/dist-server/server/drivers/acp/hermes.js +21 -3
- package/dist-server/server/drivers/agents-proxy.js +169 -10
- package/dist-server/server/drivers/boxagent.js +1 -1
- package/dist-server/server/drivers/claude.js +34 -16
- package/dist-server/server/drivers/codex.js +3 -1
- package/dist-server/server/drivers/openai-chat.js +90 -67
- package/dist-server/server/drivers/openai-compat.js +9 -1
- package/dist-server/server/drivers/pi.js +22 -3
- package/dist-server/server/enterprise.js +38 -0
- package/dist-server/server/env-path.js +18 -17
- package/dist-server/server/environment.js +3 -0
- package/dist-server/server/fleet-agent.js +57 -13
- package/dist-server/server/fleet-cli.js +248 -31
- package/dist-server/server/fleet.js +88 -14
- package/dist-server/server/hosted-contract.js +16 -0
- package/dist-server/server/index.js +1777 -406
- package/dist-server/server/message-db.js +21 -0
- package/dist-server/server/message-file.js +4 -0
- package/dist-server/server/peer-roster.js +48 -9
- package/dist-server/server/procs.js +19 -3
- package/dist-server/server/provider-key-check.js +18 -1
- package/dist-server/server/request-auth.js +14 -5
- package/dist-server/server/room-handoffs.js +237 -0
- package/dist-server/server/section-context.js +64 -14
- package/dist-server/server/sessions.js +115 -8
- package/dist-server/server/shared-computer-control.js +24 -0
- package/dist-server/server/shared-computers.js +131 -0
- package/dist-server/server/steer-queue.js +2 -0
- package/dist-server/server/store.js +267 -15
- package/dist-server/server/surface.js +16 -5
- package/dist-server/server/team-backup.js +17 -1
- package/dist-server/server/team-computers.js +108 -0
- package/dist-server/server/team-setup-requests.js +252 -0
- package/dist-server/server/tool-summary.js +53 -1
- package/dist-server/server/turn-dispatch-guard.js +31 -3
- package/dist-server/server/workspace-backup.js +1 -0
- package/dist-server/shared/approval-mode.js +11 -1
- package/dist-server/shared/team-backup.js +1 -0
- package/dist-server/shared/team-computer.js +1 -0
- package/dist-server/shared/team-setup.js +1 -0
- package/dist-server/vps-container-mcp.js +5 -1
- package/enterprise/README.md +21 -3
- package/enterprise/server/index.js +387 -29
- package/package.json +1 -1
- package/dist/assets/index-CeMbvsgx.js +0 -305
- package/dist/assets/index-DH7Zax6L.css +0 -1
package/dist-server/mcp-gate.js
CHANGED
|
@@ -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
|
-
|
|
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 (
|
|
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 {
|