openmausbot 0.1.84 → 0.1.85
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-Ba9G44HI.js +310 -0
- package/dist/assets/{index-DNa2umw-.js → index-CTNNoqSJ.js} +1 -1
- package/dist/assets/index-CkRNp7wX.css +1 -0
- package/dist/index.html +2 -2
- package/dist-server/companion/src/routes.js +1 -0
- package/dist-server/container-mcp.js +212 -7
- package/dist-server/drivers/agents-proxy.js +135 -12
- package/dist-server/enterprise/server/index.js +1 -0
- package/dist-server/hooks/omb-hook.js +74 -0
- package/dist-server/index.js +8051 -6252
- package/dist-server/local-computer-proxy.js +83 -1
- package/dist-server/local-computer.js +14 -2
- package/dist-server/openmausbot.js +759 -301
- package/dist-server/pair-cli.js +759 -301
- package/dist-server/proxy-paths.js +1 -0
- package/dist-server/server/agent-tool-policy.js +1 -0
- package/dist-server/server/bot-package.js +2 -0
- package/dist-server/server/box.js +23 -4
- package/dist-server/server/browser-engine.js +87 -10
- package/dist-server/server/browser-live.js +7 -5
- package/dist-server/server/browser-runtime.js +65 -10
- package/dist-server/server/checkpoints.js +62 -18
- package/dist-server/server/cli-prompts.js +3 -1
- package/dist-server/server/commands.js +27 -0
- package/dist-server/server/compaction-summary.js +78 -0
- package/dist-server/server/config.js +59 -2
- package/dist-server/server/context-budget.js +29 -0
- package/dist-server/server/context-rebuild.js +72 -0
- package/dist-server/server/digest.js +130 -0
- package/dist-server/server/drivers/acp/core.js +540 -229
- package/dist-server/server/drivers/agents-proxy.js +51 -12
- package/dist-server/server/drivers/agents-result.js +23 -0
- package/dist-server/server/drivers/claude.js +62 -10
- package/dist-server/server/drivers/codex.js +6 -0
- package/dist-server/server/drivers/openai-chat.js +66 -45
- package/dist-server/server/drivers/openai-compat.js +1 -0
- package/dist-server/server/hooks/omb-hook.js +103 -0
- package/dist-server/server/index.js +1127 -365
- package/dist-server/server/local-computer.js +21 -2
- package/dist-server/server/mcp-bridge.js +10 -2
- package/dist-server/server/mcp-tool-images.js +37 -0
- package/dist-server/server/mcp-tool-schema.js +108 -0
- package/dist-server/server/message-db.js +80 -21
- package/dist-server/server/message-file.js +3 -2
- package/dist-server/server/package-export.js +1 -0
- package/dist-server/server/peer-roster.js +4 -2
- package/dist-server/server/provider-icon.js +20 -0
- package/dist-server/server/proxy-paths.js +1 -0
- package/dist-server/server/request-auth.js +1 -0
- package/dist-server/server/room-handoffs.js +16 -2
- package/dist-server/server/routine-requests.js +39 -1
- package/dist-server/server/routines.js +43 -9
- package/dist-server/server/shared-computer-control.js +31 -4
- package/dist-server/server/steer-queue.js +6 -0
- package/dist-server/server/store.js +94 -14
- package/dist-server/server/system-prompt.js +4 -4
- package/dist-server/server/team-backup.js +9 -1
- package/dist-server/server/tool-results.js +72 -0
- package/dist-server/server/tts/grok.js +74 -0
- package/dist-server/server/tts/index.js +19 -1
- package/dist-server/server/webhooks.js +28 -0
- package/dist-server/shared/approval-mode.js +7 -1
- package/dist-server/shared/digest.js +1 -0
- package/dist-server/shared/markdown-windows-paths.js +36 -0
- package/dist-server/shared/provider-icon.js +110 -0
- package/dist-server/shared/team-backup.js +3 -0
- package/dist-server/vps-container-mcp.js +217 -12
- package/enterprise/server/index.js +1 -0
- package/package.json +1 -1
- package/dist/assets/index-BbU5REzd.js +0 -310
- package/dist/assets/index-CLGfYlx_.css +0 -1
|
@@ -177,6 +177,86 @@ function probeLoginShellPath() {
|
|
|
177
177
|
);
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
// server/mcp-tool-schema.ts
|
|
181
|
+
var ROOT_COMBINATORS = ["anyOf", "oneOf", "allOf", "not"];
|
|
182
|
+
function isObject(value) {
|
|
183
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
184
|
+
}
|
|
185
|
+
function branches(value) {
|
|
186
|
+
return Array.isArray(value) ? value.filter(isObject) : [];
|
|
187
|
+
}
|
|
188
|
+
function objectShape(schema) {
|
|
189
|
+
const properties = isObject(schema.properties) ? { ...schema.properties } : {};
|
|
190
|
+
const required = new Set(Array.isArray(schema.required) ? schema.required.filter((key) => typeof key === "string") : []);
|
|
191
|
+
const adopt = (shape) => {
|
|
192
|
+
for (const [key, value] of Object.entries(shape.properties)) if (!(key in properties)) properties[key] = value;
|
|
193
|
+
};
|
|
194
|
+
for (const branch of branches(schema.allOf)) {
|
|
195
|
+
const shape = objectShape(branch);
|
|
196
|
+
adopt(shape);
|
|
197
|
+
for (const key of shape.required) required.add(key);
|
|
198
|
+
}
|
|
199
|
+
for (const keyword of ["anyOf", "oneOf"]) {
|
|
200
|
+
const choices = branches(schema[keyword]).map(objectShape);
|
|
201
|
+
if (choices.length === 0) continue;
|
|
202
|
+
for (const choice of choices) adopt(choice);
|
|
203
|
+
for (const key of choices[0].required) {
|
|
204
|
+
if (choices.every((choice) => choice.required.includes(key))) required.add(key);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return { properties, required: [...required] };
|
|
208
|
+
}
|
|
209
|
+
function describesObject(type) {
|
|
210
|
+
return type === void 0 || type === "object" || Array.isArray(type) && type.includes("object");
|
|
211
|
+
}
|
|
212
|
+
function providerSafeInputSchema(schema) {
|
|
213
|
+
if (!isObject(schema) || !describesObject(schema.type)) return { type: "object", properties: {} };
|
|
214
|
+
if (schema.type === "object" && ROOT_COMBINATORS.every((keyword) => !(keyword in schema))) return schema;
|
|
215
|
+
const { properties, required } = objectShape(schema);
|
|
216
|
+
const safe = { ...schema, type: "object", properties };
|
|
217
|
+
for (const keyword of ROOT_COMBINATORS) delete safe[keyword];
|
|
218
|
+
if (required.length > 0) safe.required = required;
|
|
219
|
+
else delete safe.required;
|
|
220
|
+
return safe;
|
|
221
|
+
}
|
|
222
|
+
function createToolListNormalizer() {
|
|
223
|
+
const pending = /* @__PURE__ */ new Set();
|
|
224
|
+
const idKey = (id) => `${typeof id}:${String(id)}`;
|
|
225
|
+
return {
|
|
226
|
+
observeRequest(line) {
|
|
227
|
+
let frame;
|
|
228
|
+
try {
|
|
229
|
+
frame = JSON.parse(line);
|
|
230
|
+
} catch {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (isObject(frame) && frame.method === "tools/list" && (typeof frame.id === "number" || typeof frame.id === "string")) {
|
|
234
|
+
pending.add(idKey(frame.id));
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
rewriteResponse(line) {
|
|
238
|
+
if (pending.size === 0) return line;
|
|
239
|
+
let frame;
|
|
240
|
+
try {
|
|
241
|
+
frame = JSON.parse(line);
|
|
242
|
+
} catch {
|
|
243
|
+
return line;
|
|
244
|
+
}
|
|
245
|
+
if (!isObject(frame) || "method" in frame || !pending.delete(idKey(frame.id))) return line;
|
|
246
|
+
if (!isObject(frame.result) || !Array.isArray(frame.result.tools)) return line;
|
|
247
|
+
let changed = false;
|
|
248
|
+
const tools = frame.result.tools.map((tool) => {
|
|
249
|
+
if (!isObject(tool)) return tool;
|
|
250
|
+
const inputSchema = providerSafeInputSchema(tool.inputSchema);
|
|
251
|
+
if (inputSchema === tool.inputSchema) return tool;
|
|
252
|
+
changed = true;
|
|
253
|
+
return { ...tool, inputSchema };
|
|
254
|
+
});
|
|
255
|
+
return changed ? JSON.stringify({ ...frame, result: { ...frame.result, tools } }) : line;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
180
260
|
// server/mcp-bridge.ts
|
|
181
261
|
var BRIDGE_INACTIVITY_MS = 45e3;
|
|
182
262
|
var PROBE_TIMEOUT_MS = 1e4;
|
|
@@ -346,8 +426,10 @@ function runMcpBridge(options) {
|
|
|
346
426
|
}
|
|
347
427
|
} : {}
|
|
348
428
|
});
|
|
429
|
+
const toolLists = createToolListNormalizer();
|
|
349
430
|
let pendingInput = Promise.resolve();
|
|
350
431
|
const inbound = createLineSplitter((line) => {
|
|
432
|
+
toolLists.observeRequest(line);
|
|
351
433
|
const completion = intercept(line);
|
|
352
434
|
if (completion) pendingInput = completion;
|
|
353
435
|
});
|
|
@@ -357,7 +439,7 @@ function runMcpBridge(options) {
|
|
|
357
439
|
inbound.flush();
|
|
358
440
|
void pendingInput.finally(() => child.stdin.end());
|
|
359
441
|
});
|
|
360
|
-
const outbound = createLineSplitter((line) => process.stdout.write(line + "\n"));
|
|
442
|
+
const outbound = createLineSplitter((line) => process.stdout.write(toolLists.rewriteResponse(line) + "\n"));
|
|
361
443
|
child.stdout.on("data", (chunk) => outbound.push(chunk));
|
|
362
444
|
child.stdout.on("end", () => outbound.flush());
|
|
363
445
|
const detach = () => {
|
|
@@ -23,6 +23,7 @@ var SPAWNED_PROXIES = {
|
|
|
23
23
|
connectors: resolveProxy("connector-proxy"),
|
|
24
24
|
mcpGate: resolveProxy("mcp-gate"),
|
|
25
25
|
phone: resolveProxy("drivers/phone-proxy"),
|
|
26
|
+
hook: resolveProxy("hooks/omb-hook"),
|
|
26
27
|
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
27
28
|
// resolved through the same single source of truth so the packaged layout
|
|
28
29
|
// check can assert it ships.
|
|
@@ -208,11 +209,22 @@ function validateLinuxDescriptorRuntime(descriptorFile, raw, {
|
|
|
208
209
|
return false;
|
|
209
210
|
}
|
|
210
211
|
}
|
|
212
|
+
function validateLegacyDescriptorRuntime(descriptorFile, platform, { uid = process.getuid?.() ?? -1 } = {}) {
|
|
213
|
+
try {
|
|
214
|
+
const stat = lstatSync(descriptorFile);
|
|
215
|
+
if (!stat.isFile() || stat.isSymbolicLink()) return false;
|
|
216
|
+
if (platform !== "win32" && (stat.uid !== uid || (stat.mode & 18) !== 0)) return false;
|
|
217
|
+
return true;
|
|
218
|
+
} catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
211
222
|
function readCuaConnection({
|
|
212
223
|
platform = process.platform,
|
|
213
224
|
userData = process.env.OMB_USER_DATA,
|
|
214
225
|
home = homedir(),
|
|
215
|
-
validateLinuxRuntime = validateLinuxDescriptorRuntime
|
|
226
|
+
validateLinuxRuntime = validateLinuxDescriptorRuntime,
|
|
227
|
+
validateLegacyRuntime = validateLegacyDescriptorRuntime
|
|
216
228
|
} = {}) {
|
|
217
229
|
const candidates = userData ? [join2(userData, "cua-connection.json")] : [];
|
|
218
230
|
if (platform === "darwin") {
|
|
@@ -228,7 +240,7 @@ function readCuaConnection({
|
|
|
228
240
|
if (decoded && validateLinuxRuntime(file, raw)) return decoded;
|
|
229
241
|
} else {
|
|
230
242
|
const decoded = decodeLegacyDescriptor(raw, platform);
|
|
231
|
-
if (decoded) return decoded;
|
|
243
|
+
if (decoded && validateLegacyRuntime(file, platform)) return decoded;
|
|
232
244
|
}
|
|
233
245
|
} catch {
|
|
234
246
|
}
|