openmausbot 0.1.84 → 0.1.86
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/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/assets/abnfDiagram-O67JEVCF-DpUZNnFD.js +1 -0
- package/dist/assets/arc-DW7mrI4p.js +1 -0
- package/dist/assets/architectureDiagram-NJMV4G6O-CyeZ5WLZ.js +36 -0
- package/dist/assets/blockDiagram-BEXU5L5S-CBVaNjO7.js +140 -0
- package/dist/assets/c4Diagram-YGBWAQC7-sf8d41uT.js +38 -0
- package/dist/assets/channel-BXFkgus9.js +1 -0
- package/dist/assets/chunk-2Q5K7J3B-BOGvy7Y_.js +1 -0
- package/dist/assets/chunk-3FUC2YCW-BiF9zyiz.js +2 -0
- package/dist/assets/chunk-5VM5RSS4-EFuZ1SBZ.js +15 -0
- package/dist/assets/chunk-GTNCS2PH-pJLNSAT7.js +88 -0
- package/dist/assets/chunk-GWA4HPMP-Cb-3_3IT.js +1 -0
- package/dist/assets/chunk-JWPE2WC7-DAf5aogn.js +1 -0
- package/dist/assets/chunk-NETBCI7D-DR3kiwZz.js +1 -0
- package/dist/assets/chunk-WEXAMYUT-BmU8PeyM.js +1 -0
- package/dist/assets/chunk-XXDRQBXY-Buh8g8OT.js +1 -0
- package/dist/assets/classDiagram-v2-NBCMYWYE-BurfmMWM.js +217 -0
- package/dist/assets/cose-bilkent-JH36ORCC-KkGZUEkU.js +1 -0
- package/dist/assets/cynefin-OW5HDTMX-C3PpV96d.js +166 -0
- package/dist/assets/cynefinDiagram-VND7K2PF-Dt8JwJaI.js +62 -0
- package/dist/assets/cytoscape.esm-BB4DxJjf.js +321 -0
- package/dist/assets/dagre-6A5THRUB-DkjN8266.js +4 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-22UHCM2B-DUAJS0JV.js +200 -0
- package/dist/assets/diagram-3UASUU5V-Dw4KhF1a.js +24 -0
- package/dist/assets/diagram-ATOU4E4O-Dd1gmQqf.js +3 -0
- package/dist/assets/diagram-CDSNMT55-CjwGs0Yw.js +30 -0
- package/dist/assets/diagram-MLGK6HIB-BL-69Zrq.js +24 -0
- package/dist/assets/diagram-MPIPVDR6-5Zi2N7wo.js +41 -0
- package/dist/assets/ebnfDiagram-ZINNZB2B-D9NekWUX.js +1 -0
- package/dist/assets/elk-276RUBZZ-CkaSQjxw.js +27 -0
- package/dist/assets/erDiagram-OPXOYQCR-CdAVBV8-.js +99 -0
- package/dist/assets/flowDiagram-KWPJA3E3-Bm_lWWH7.js +213 -0
- package/dist/assets/ganttDiagram-FUAMR5RP-FZ8ejYWJ.js +292 -0
- package/dist/assets/gitGraphDiagram-X574FWY7-Dlv9rizZ.js +106 -0
- package/dist/assets/graph-D8UmR1vK.js +1 -0
- package/dist/assets/index-BGgqlWPJ.css +1 -0
- package/dist/assets/index-BtHo8ZKl.js +577 -0
- package/dist/assets/{index-DNa2umw-.js → index-h9FFNwTu.js} +1 -1
- package/dist/assets/infoDiagram-VRGFBTTK-BdQ_gW5B.js +2 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-OU5B5YK6-EwssEp2X.js +70 -0
- package/dist/assets/journeyDiagram-ZHPQQLJL-BX1G1vOd.js +139 -0
- package/dist/assets/kanban-definition-PNTS6WVX-BB4kAsyC.js +89 -0
- package/dist/assets/linear-3su2TG93.js +1 -0
- package/dist/assets/mermaid.core-CDD1E0s9.js +311 -0
- package/dist/assets/mindmap-definition-NLK3R4M7-Ba50MsNK.js +96 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pegDiagram-GJSIUBJH-DZLkkZlM.js +1 -0
- package/dist/assets/pieDiagram-5QR66LMP-DaTz77Uq.js +39 -0
- package/dist/assets/quadrantDiagram-O4NWA36T-CpaiidpR.js +7 -0
- package/dist/assets/railroadDiagram-XR7U4H2S-mN4JrMeI.js +1 -0
- package/dist/assets/requirementDiagram-PLB6GJNP-BSNDRpg7.js +84 -0
- package/dist/assets/sankeyDiagram-IPEJSGJF-FngzGNug.js +40 -0
- package/dist/assets/sequenceDiagram-PO4LG4MO-CM4pCC3L.js +169 -0
- package/dist/assets/sizeCapture-INFHLROL-CRICHXkw.js +1 -0
- package/dist/assets/stateDiagram-v2-GCMORJYK-oyTWpxH2.js +291 -0
- package/dist/assets/swimlanes-2SLR337P-D9h9mPBq.js +1 -0
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BWrvB2ak.js +8 -0
- package/dist/assets/timeline-definition-EJHVYXUP-BJUlN9bW.js +120 -0
- package/dist/assets/usecaseDiagram-POWQR4AR-3uBNkbAb.js +370 -0
- package/dist/assets/vennDiagram-UO4OBE2U-D2odalzT.js +34 -0
- package/dist/assets/wardleyDiagram-VNRHLVJA-DHgFaB9S.js +78 -0
- package/dist/assets/xychartDiagram-PMCCYNJV-w5GYM2h0.js +7 -0
- package/dist/index.html +2 -2
- package/dist-server/companion/src/routes.js +1 -0
- package/dist-server/container-mcp.js +231 -17
- package/dist-server/drivers/agents-proxy.js +16097 -1411
- package/dist-server/enterprise/LICENSE +32 -0
- package/dist-server/enterprise/server/index.js +6 -5
- package/dist-server/hooks/omb-hook.js +74 -0
- package/dist-server/index.js +12495 -7584
- package/dist-server/local-computer-proxy.js +83 -1
- package/dist-server/local-computer.js +14 -2
- package/dist-server/mcp-server.js +3 -1
- package/dist-server/openmausbot.js +5458 -4587
- package/dist-server/pair-cli.js +5458 -4587
- package/dist-server/proxy-paths.js +1 -0
- package/dist-server/server/admin-activity.js +410 -0
- package/dist-server/server/agent-tool-policy.js +1 -0
- package/dist-server/server/bot-package.js +2 -0
- package/dist-server/server/bot-visibility.js +462 -0
- package/dist-server/server/box.js +25 -5
- 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 +66 -11
- package/dist-server/server/channel-queue.js +2 -0
- package/dist-server/server/checkpoints.js +62 -18
- package/dist-server/server/cli-prompts.js +26 -2
- package/dist-server/server/cli.js +79 -10
- package/dist-server/server/commands.js +27 -0
- package/dist-server/server/compaction-summary.js +78 -0
- package/dist-server/server/composio.js +49 -11
- package/dist-server/server/config.js +137 -14
- package/dist-server/server/context-budget.js +29 -0
- package/dist-server/server/context-rebuild.js +72 -0
- package/dist-server/server/decision-log.js +209 -48
- package/dist-server/server/default-model-selection.js +20 -3
- package/dist-server/server/delegations.js +11 -9
- package/dist-server/server/digest.js +130 -0
- package/dist-server/server/drivers/acp/core.js +637 -238
- package/dist-server/server/drivers/acp/grok.js +4 -3
- package/dist-server/server/drivers/agents-call.js +1123 -0
- package/dist-server/server/drivers/agents-catalog.js +659 -0
- package/dist-server/server/drivers/agents-client.js +28 -0
- package/dist-server/server/drivers/agents-proxy.js +18 -1683
- package/dist-server/server/drivers/agents-result.js +23 -0
- package/dist-server/server/drivers/chat-mcp-tools.js +17 -2
- package/dist-server/server/drivers/claude.js +83 -16
- package/dist-server/server/drivers/codex-mcp-names.js +44 -0
- package/dist-server/server/drivers/codex.js +32 -4
- package/dist-server/server/drivers/grok.js +2 -1
- package/dist-server/server/drivers/openai-chat.js +66 -45
- package/dist-server/server/drivers/openai-compat.js +16 -8
- package/dist-server/server/enterprise.js +97 -16
- package/dist-server/server/external-runtime.js +83 -0
- package/dist-server/server/guarded-requests.js +60 -0
- package/dist-server/server/harness/http.js +61 -0
- package/dist-server/server/hooks/omb-hook.js +103 -0
- package/dist-server/server/hosted-models.js +151 -0
- package/dist-server/server/hosted-slack.js +11 -0
- package/dist-server/server/index.js +2810 -678
- package/dist-server/server/local-computer.js +21 -2
- package/dist-server/server/managed-desktop.js +79 -14
- package/dist-server/server/managed-policy.js +153 -0
- 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 +108 -21
- package/dist-server/server/message-file.js +3 -2
- package/dist-server/server/model-context-window.js +7 -0
- package/dist-server/server/model-prices.js +121 -0
- package/dist-server/server/notify.js +10 -1
- package/dist-server/server/package-export.js +1 -0
- package/dist-server/server/peer-roster.js +17 -4
- package/dist-server/server/provider-icon.js +20 -0
- package/dist-server/server/proxy-paths.js +1 -0
- package/dist-server/server/recent-work.js +15 -0
- package/dist-server/server/request-auth.js +97 -0
- package/dist-server/server/room-handoffs.js +41 -13
- package/dist-server/server/routes/hosted-slack.js +20 -0
- package/dist-server/server/routes/table.js +14 -0
- package/dist-server/server/routine-requests.js +39 -1
- package/dist-server/server/routines.js +65 -9
- package/dist-server/server/shared-computer-control.js +31 -4
- package/dist-server/server/spend.js +111 -16
- package/dist-server/server/steer-queue.js +12 -1
- package/dist-server/server/store.js +384 -33
- package/dist-server/server/system-prompt.js +4 -4
- package/dist-server/server/team-backup.js +19 -2
- package/dist-server/server/thread-starters.js +53 -0
- 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/usage-ledger.js +31 -8
- package/dist-server/server/webhooks.js +28 -0
- package/dist-server/server/workspace-backup-policy.js +9 -2
- package/dist-server/server/workspace-backup.js +7 -4
- 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/mention-boundary.js +15 -0
- package/dist-server/shared/provider-icon.js +110 -0
- package/dist-server/shared/routines.js +7 -1
- package/dist-server/shared/team-backup.js +5 -0
- package/dist-server/src/lib/composer-attachments.js +16 -0
- package/dist-server/vps-container-mcp.js +236 -22
- package/enterprise/README.md +33 -12
- package/enterprise/server/index.js +6 -5
- package/package.json +1 -1
- package/dist/assets/index-BbU5REzd.js +0 -310
- package/dist/assets/index-CLGfYlx_.css +0 -1
|
@@ -3157,13 +3157,13 @@ var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
|
|
|
3157
3157
|
}
|
|
3158
3158
|
return propValues;
|
|
3159
3159
|
});
|
|
3160
|
-
const
|
|
3160
|
+
const isObject3 = isObject;
|
|
3161
3161
|
const catchall = def.catchall;
|
|
3162
3162
|
let value;
|
|
3163
3163
|
inst._zod.parse = (payload, ctx) => {
|
|
3164
3164
|
value ?? (value = _normalized.value);
|
|
3165
3165
|
const input = payload.value;
|
|
3166
|
-
if (!
|
|
3166
|
+
if (!isObject3(input)) {
|
|
3167
3167
|
payload.issues.push({
|
|
3168
3168
|
expected: "object",
|
|
3169
3169
|
code: "invalid_type",
|
|
@@ -3290,7 +3290,7 @@ var $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) =>
|
|
|
3290
3290
|
return (payload, ctx) => fn(shape, payload, ctx);
|
|
3291
3291
|
};
|
|
3292
3292
|
let fastpass;
|
|
3293
|
-
const
|
|
3293
|
+
const isObject3 = isObject;
|
|
3294
3294
|
const jit = !globalConfig.jitless;
|
|
3295
3295
|
const allowsEval2 = allowsEval;
|
|
3296
3296
|
const fastEnabled = jit && allowsEval2.value;
|
|
@@ -3299,7 +3299,7 @@ var $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) =>
|
|
|
3299
3299
|
inst._zod.parse = (payload, ctx) => {
|
|
3300
3300
|
value ?? (value = _normalized.value);
|
|
3301
3301
|
const input = payload.value;
|
|
3302
|
-
if (!
|
|
3302
|
+
if (!isObject3(input)) {
|
|
3303
3303
|
payload.issues.push({
|
|
3304
3304
|
expected: "object",
|
|
3305
3305
|
code: "invalid_type",
|
|
@@ -14660,6 +14660,97 @@ function isModelVariant(value) {
|
|
|
14660
14660
|
return typeof value === "string" && value.length > 0 && value.length <= 256 && value.trim() === value && !new RegExp("\\p{Cc}", "u").test(value);
|
|
14661
14661
|
}
|
|
14662
14662
|
|
|
14663
|
+
// shared/provider-icon.ts
|
|
14664
|
+
var PROVIDER_ICON_PRESETS = [
|
|
14665
|
+
"openai",
|
|
14666
|
+
"anthropic",
|
|
14667
|
+
"google",
|
|
14668
|
+
"azure",
|
|
14669
|
+
"aws",
|
|
14670
|
+
"xai",
|
|
14671
|
+
"deepseek",
|
|
14672
|
+
"meta",
|
|
14673
|
+
"mistral",
|
|
14674
|
+
"qwen",
|
|
14675
|
+
"moonshot",
|
|
14676
|
+
"cohere",
|
|
14677
|
+
"openrouter"
|
|
14678
|
+
];
|
|
14679
|
+
var PROVIDER_ICON_MAX_BYTES = 128 * 1024;
|
|
14680
|
+
var PROVIDER_ICON_MAX_DIMENSION = 1024;
|
|
14681
|
+
function decodedBase64Bytes(value) {
|
|
14682
|
+
const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
|
|
14683
|
+
return Math.floor(value.length * 3 / 4) - padding;
|
|
14684
|
+
}
|
|
14685
|
+
function imageDimensions(bytes, mime) {
|
|
14686
|
+
const u16be = (offset) => bytes[offset] * 256 + bytes[offset + 1];
|
|
14687
|
+
const u16le = (offset) => bytes[offset] + bytes[offset + 1] * 256;
|
|
14688
|
+
const u24le = (offset) => bytes[offset] + bytes[offset + 1] * 256 + bytes[offset + 2] * 65536;
|
|
14689
|
+
const u32le = (offset) => bytes[offset] + bytes[offset + 1] * 256 + bytes[offset + 2] * 65536 + bytes[offset + 3] * 16777216;
|
|
14690
|
+
const u32be = (offset) => bytes[offset] * 16777216 + bytes[offset + 1] * 65536 + bytes[offset + 2] * 256 + bytes[offset + 3];
|
|
14691
|
+
if (mime === "image/png") {
|
|
14692
|
+
if (bytes.length < 33 || bytes.slice(0, 8).join(",") !== "137,80,78,71,13,10,26,10" || String.fromCharCode(...bytes.slice(12, 16)) !== "IHDR" || bytes.slice(-8).join(",") !== "73,69,78,68,174,66,96,130") return null;
|
|
14693
|
+
return { width: u32be(16), height: u32be(20) };
|
|
14694
|
+
}
|
|
14695
|
+
if (mime === "image/jpeg") {
|
|
14696
|
+
if (bytes.length < 12 || bytes[0] !== 255 || bytes[1] !== 216 || bytes.at(-2) !== 255 || bytes.at(-1) !== 217) return null;
|
|
14697
|
+
for (let offset = 2; offset + 8 < bytes.length; ) {
|
|
14698
|
+
if (bytes[offset] !== 255) {
|
|
14699
|
+
offset += 1;
|
|
14700
|
+
continue;
|
|
14701
|
+
}
|
|
14702
|
+
const marker = bytes[offset + 1];
|
|
14703
|
+
if ([192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207].includes(marker)) {
|
|
14704
|
+
return { height: u16be(offset + 5), width: u16be(offset + 7) };
|
|
14705
|
+
}
|
|
14706
|
+
if (marker === 216 || marker === 217 || marker === 1 || marker >= 208 && marker <= 215) {
|
|
14707
|
+
offset += 2;
|
|
14708
|
+
continue;
|
|
14709
|
+
}
|
|
14710
|
+
const length = u16be(offset + 2);
|
|
14711
|
+
if (length < 2) return null;
|
|
14712
|
+
offset += length + 2;
|
|
14713
|
+
}
|
|
14714
|
+
return null;
|
|
14715
|
+
}
|
|
14716
|
+
if (bytes.length < 30 || String.fromCharCode(...bytes.slice(0, 4)) !== "RIFF" || String.fromCharCode(...bytes.slice(8, 12)) !== "WEBP" || u32le(4) + 8 !== bytes.length) return null;
|
|
14717
|
+
const format = String.fromCharCode(...bytes.slice(12, 16));
|
|
14718
|
+
if (format === "VP8X") return { width: u24le(24) + 1, height: u24le(27) + 1 };
|
|
14719
|
+
if (format === "VP8L" && bytes[20] === 47) {
|
|
14720
|
+
const bits = bytes[21] | bytes[22] << 8 | bytes[23] << 16 | bytes[24] << 24;
|
|
14721
|
+
return { width: (bits & 16383) + 1, height: (bits >>> 14 & 16383) + 1 };
|
|
14722
|
+
}
|
|
14723
|
+
if (format === "VP8 " && bytes[23] === 157 && bytes[24] === 1 && bytes[25] === 42) {
|
|
14724
|
+
return { width: u16le(26) & 16383, height: u16le(28) & 16383 };
|
|
14725
|
+
}
|
|
14726
|
+
return null;
|
|
14727
|
+
}
|
|
14728
|
+
function providerIconError(icon) {
|
|
14729
|
+
if (icon.kind === "preset") {
|
|
14730
|
+
return PROVIDER_ICON_PRESETS.includes(icon.preset) ? null : "Choose a supported provider icon.";
|
|
14731
|
+
}
|
|
14732
|
+
const match = /^data:(image\/(?:png|jpeg|webp));base64,([A-Za-z0-9+/]+={0,2})$/.exec(icon.dataUrl);
|
|
14733
|
+
if (!match) return "Upload a PNG, JPEG, or WebP image.";
|
|
14734
|
+
const byteLength = decodedBase64Bytes(match[2]);
|
|
14735
|
+
if (byteLength > PROVIDER_ICON_MAX_BYTES) {
|
|
14736
|
+
return "Provider icons must be 128 KB or smaller.";
|
|
14737
|
+
}
|
|
14738
|
+
let decoded;
|
|
14739
|
+
try {
|
|
14740
|
+
decoded = atob(match[2]);
|
|
14741
|
+
} catch {
|
|
14742
|
+
return "The uploaded image is not valid base64.";
|
|
14743
|
+
}
|
|
14744
|
+
if (decoded.length !== byteLength) return "The uploaded image is not valid base64.";
|
|
14745
|
+
const bytes = Uint8Array.from(decoded, (value) => value.charCodeAt(0));
|
|
14746
|
+
const dimensions = imageDimensions(bytes, match[1]);
|
|
14747
|
+
if (!dimensions) return "The uploaded image is incomplete or does not match its file type.";
|
|
14748
|
+
if (dimensions.width < 1 || dimensions.height < 1 || dimensions.width > PROVIDER_ICON_MAX_DIMENSION || dimensions.height > PROVIDER_ICON_MAX_DIMENSION || dimensions.width * dimensions.height > PROVIDER_ICON_MAX_DIMENSION ** 2) {
|
|
14749
|
+
return `Provider icons must be at most ${PROVIDER_ICON_MAX_DIMENSION} \xD7 ${PROVIDER_ICON_MAX_DIMENSION} pixels.`;
|
|
14750
|
+
}
|
|
14751
|
+
return null;
|
|
14752
|
+
}
|
|
14753
|
+
|
|
14663
14754
|
// server/mcp-registry.ts
|
|
14664
14755
|
var MAX_ARGS = 64;
|
|
14665
14756
|
var stdioEntrySchema = external_exports.object({
|
|
@@ -14700,11 +14791,26 @@ var MAX_LOCAL_VM_MAX_INSTANCES = 4;
|
|
|
14700
14791
|
function isValidSshAlias(value) {
|
|
14701
14792
|
return typeof value === "string" && SSH_ALIAS.test(value);
|
|
14702
14793
|
}
|
|
14794
|
+
var CDP_PORT = /^[0-9]{1,5}$/;
|
|
14795
|
+
var CDP_URL = /^(https?|wss?):\/\/\S+$/i;
|
|
14796
|
+
function isValidCdpTarget(value) {
|
|
14797
|
+
if (typeof value !== "string" || value === "") return false;
|
|
14798
|
+
if (CDP_PORT.test(value)) {
|
|
14799
|
+
const port = Number(value);
|
|
14800
|
+
return port >= 1 && port <= 65535;
|
|
14801
|
+
}
|
|
14802
|
+
return CDP_URL.test(value);
|
|
14803
|
+
}
|
|
14703
14804
|
var vpsConfigSchema = external_exports.object({
|
|
14704
14805
|
sshAlias: external_exports.string().refine((value) => value === "" || isValidSshAlias(value), {
|
|
14705
14806
|
message: "must be a simple SSH config alias"
|
|
14706
14807
|
}).optional()
|
|
14707
14808
|
});
|
|
14809
|
+
var browserEngineConfigSchema = external_exports.object({
|
|
14810
|
+
attachCdpUrl: external_exports.string().trim().max(2048).refine((value) => value === "" || isValidCdpTarget(value), {
|
|
14811
|
+
message: "browserEngine.attachCdpUrl must be a CDP port (1-65535) or an http(s)/ws(s) URL"
|
|
14812
|
+
}).optional()
|
|
14813
|
+
});
|
|
14708
14814
|
var roomConfigSchema = external_exports.object({
|
|
14709
14815
|
turnTimeoutMinutes: external_exports.number().int().min(MIN_ROOM_TURN_TIMEOUT_MINUTES).max(MAX_ROOM_TURN_TIMEOUT_MINUTES),
|
|
14710
14816
|
/** Room handoff tree lifetime. Active execution pauses this clock; the
|
|
@@ -14846,7 +14952,11 @@ var featureConfigSchema = external_exports.object({
|
|
|
14846
14952
|
/** Claude bots also load the MCP servers and connectors from this
|
|
14847
14953
|
* machine's own Claude Code setup (Plugins → MCP servers switch). Off by
|
|
14848
14954
|
* default: each extra tool costs tokens on every model call. */
|
|
14849
|
-
claudeUserMcp: external_exports.boolean().optional()
|
|
14955
|
+
claudeUserMcp: external_exports.boolean().optional(),
|
|
14956
|
+
/** LLM-generated titles for new bot threads. Off until explicitly
|
|
14957
|
+
* enabled; a one-shot that fails or answers junk leaves the first-message
|
|
14958
|
+
* snippet in place — see llmThreadTitlesEnabled. */
|
|
14959
|
+
llmThreadTitles: external_exports.boolean().optional()
|
|
14850
14960
|
});
|
|
14851
14961
|
var onboardingConfigSchema = external_exports.object({
|
|
14852
14962
|
/** ISO timestamp of finishing (or skipping to the end of) the welcome flow. */
|
|
@@ -14860,6 +14970,10 @@ var instanceConfigSchema = external_exports.object({
|
|
|
14860
14970
|
driver: external_exports.string().min(1),
|
|
14861
14971
|
displayName: optionalText,
|
|
14862
14972
|
accentColor: optionalText,
|
|
14973
|
+
icon: external_exports.discriminatedUnion("kind", [
|
|
14974
|
+
external_exports.object({ kind: external_exports.literal("preset"), preset: external_exports.enum(PROVIDER_ICON_PRESETS) }).strict(),
|
|
14975
|
+
external_exports.object({ kind: external_exports.literal("custom"), dataUrl: external_exports.string() }).strict().refine((icon) => providerIconError(icon) === null, { message: "Invalid provider icon" })
|
|
14976
|
+
]).optional(),
|
|
14863
14977
|
environment: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
14864
14978
|
enabled: external_exports.boolean().optional(),
|
|
14865
14979
|
config: external_exports.json().optional()
|
|
@@ -14874,6 +14988,20 @@ var defaultModelSelectionSchema = external_exports.object({
|
|
|
14874
14988
|
(selection) => selection.variant === void 0 || selection.effort === void 0,
|
|
14875
14989
|
"choose either a model variant or an effort level"
|
|
14876
14990
|
);
|
|
14991
|
+
var threadsConfigSchema = external_exports.object({
|
|
14992
|
+
maxConcurrentPerBot: external_exports.number().int().min(1).max(MAX_CONCURRENT_BOT_THREADS),
|
|
14993
|
+
/** Cap each per-thread events/ and native/ NDJSON log at this many
|
|
14994
|
+
* bytes; absent (the default) keeps today's unbounded growth (#1280). */
|
|
14995
|
+
eventLogMaxBytes: external_exports.number().int().min(MIN_THREAD_EVENT_LOG_BYTES).max(MAX_THREAD_EVENT_LOG_BYTES).optional(),
|
|
14996
|
+
/** Days a closed or archived thread's event logs survive (#1280).
|
|
14997
|
+
* Absent keeps them forever. */
|
|
14998
|
+
eventLogRetentionDays: external_exports.number().int().min(1).max(3650).optional()
|
|
14999
|
+
}).strict();
|
|
15000
|
+
var threadsPatchSchema = threadsConfigSchema.extend({
|
|
15001
|
+
maxConcurrentPerBot: threadsConfigSchema.shape.maxConcurrentPerBot.optional(),
|
|
15002
|
+
eventLogMaxBytes: threadsConfigSchema.shape.eventLogMaxBytes.nullable(),
|
|
15003
|
+
eventLogRetentionDays: threadsConfigSchema.shape.eventLogRetentionDays.nullable()
|
|
15004
|
+
});
|
|
14877
15005
|
var appConfigSchema = external_exports.object({
|
|
14878
15006
|
/** Verified by the dedicated domain endpoint, never a generic config patch. */
|
|
14879
15007
|
customDomain: external_exports.string().optional(),
|
|
@@ -14924,6 +15052,7 @@ var appConfigSchema = external_exports.object({
|
|
|
14924
15052
|
/** Voice settings and the selected voice id. `provider` picks the
|
|
14925
15053
|
* engine: "elevenlabs" (default; needs `key`), "fish" (needs its own
|
|
14926
15054
|
* `fishKey`), "system" (the Mac's built-in voices, no key), or
|
|
15055
|
+
* "xai" (Grok TTS, reusing `xai.key`), or
|
|
14927
15056
|
* "chatterbox" (a local OpenAI-compatible Chatterbox server; `baseUrl`
|
|
14928
15057
|
* and `model` are settings, not secrets). Cloud keys stay separate so
|
|
14929
15058
|
* switching providers never overwrites or misuses the other key. */
|
|
@@ -14931,7 +15060,7 @@ var appConfigSchema = external_exports.object({
|
|
|
14931
15060
|
key: optionalText,
|
|
14932
15061
|
fishKey: optionalText,
|
|
14933
15062
|
voice: optionalText,
|
|
14934
|
-
provider: external_exports.enum(["elevenlabs", "fish", "system", "chatterbox"]).optional(),
|
|
15063
|
+
provider: external_exports.enum(["elevenlabs", "fish", "system", "chatterbox", "xai"]).optional(),
|
|
14935
15064
|
baseUrl: external_exports.string().trim().max(2048).refine((value) => !value || /^https?:\/\//i.test(value), "the Chatterbox server address must start with http:// or https://").optional(),
|
|
14936
15065
|
model: optionalText
|
|
14937
15066
|
}).optional(),
|
|
@@ -14960,18 +15089,20 @@ var appConfigSchema = external_exports.object({
|
|
|
14960
15089
|
* system language. Unknown tags degrade to English in the renderer. */
|
|
14961
15090
|
language: optionalText,
|
|
14962
15091
|
rooms: roomConfigSchema.optional(),
|
|
14963
|
-
|
|
14964
|
-
|
|
14965
|
-
|
|
14966
|
-
|
|
14967
|
-
|
|
14968
|
-
|
|
14969
|
-
|
|
14970
|
-
|
|
14971
|
-
}).strict().optional(),
|
|
15092
|
+
context: external_exports.object({
|
|
15093
|
+
rebuildBytes: external_exports.number().int().min(1024).max(1e6).optional(),
|
|
15094
|
+
compactAt: external_exports.number().positive().max(1e7).optional(),
|
|
15095
|
+
autoCompact: external_exports.boolean().optional()
|
|
15096
|
+
}).optional(),
|
|
15097
|
+
threads: threadsConfigSchema.optional(),
|
|
15098
|
+
/** The authorization decision log (server/decision-log.ts): days of month
|
|
15099
|
+
* files kept, at least; OMB_DECISION_RETENTION_DAYS wins when set. */
|
|
15100
|
+
decisions: external_exports.object({ retentionDays: external_exports.number().int().min(1).max(3650).optional() }).strict().optional(),
|
|
14972
15101
|
localVm: localVmConfigSchema.optional(),
|
|
14973
15102
|
features: featureConfigSchema.optional(),
|
|
14974
15103
|
onboarding: onboardingConfigSchema.optional(),
|
|
15104
|
+
/** CDP attach target for a bot's browser; see browserEngineConfigSchema. */
|
|
15105
|
+
browserEngine: browserEngineConfigSchema.optional(),
|
|
14975
15106
|
browserProfiles: browserProfilesSchema.optional(),
|
|
14976
15107
|
instances: instanceConfigMapSchema.optional(),
|
|
14977
15108
|
/** User-configured MCP servers, mounted into every capable engine. Kept
|
|
@@ -14983,7 +15114,7 @@ var appConfigSchema = external_exports.object({
|
|
|
14983
15114
|
var storedAppConfigSchema = appConfigSchema.extend({
|
|
14984
15115
|
browserProfiles: storedBrowserProfilesSchema.optional()
|
|
14985
15116
|
});
|
|
14986
|
-
var appConfigPatchSchema = appConfigSchema.omit({ instances: true, mcpServers: true, cliStartup: true, customDomain: true });
|
|
15117
|
+
var appConfigPatchSchema = appConfigSchema.omit({ instances: true, mcpServers: true, cliStartup: true, customDomain: true }).extend({ threads: threadsPatchSchema.optional() });
|
|
14987
15118
|
var jsonObjectSchema = external_exports.record(external_exports.string(), external_exports.json());
|
|
14988
15119
|
var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir2(), ".openmausbot");
|
|
14989
15120
|
var LEGACY_DATA_DIR = join2(homedir2(), ".opengrokbot");
|
|
@@ -15010,6 +15141,7 @@ var SPAWNED_PROXIES = {
|
|
|
15010
15141
|
connectors: resolveProxy("connector-proxy"),
|
|
15011
15142
|
mcpGate: resolveProxy("mcp-gate"),
|
|
15012
15143
|
phone: resolveProxy("drivers/phone-proxy"),
|
|
15144
|
+
hook: resolveProxy("hooks/omb-hook"),
|
|
15013
15145
|
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
15014
15146
|
// resolved through the same single source of truth so the packaged layout
|
|
15015
15147
|
// check can assert it ships.
|
|
@@ -15125,6 +15257,86 @@ function createControlClient(options) {
|
|
|
15125
15257
|
}
|
|
15126
15258
|
var CONTROL_REFUSAL_PLAIN = "A person has taken control of this computer, so this call was NOT performed. Do not retry it \u2014 the screen is changing under their hands. Pause this task, tell the person you are waiting for them to hand control back, and take a fresh screenshot before your next action once they have.";
|
|
15127
15259
|
|
|
15260
|
+
// server/mcp-tool-schema.ts
|
|
15261
|
+
var ROOT_COMBINATORS = ["anyOf", "oneOf", "allOf", "not"];
|
|
15262
|
+
function isObject2(value) {
|
|
15263
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
15264
|
+
}
|
|
15265
|
+
function branches(value) {
|
|
15266
|
+
return Array.isArray(value) ? value.filter(isObject2) : [];
|
|
15267
|
+
}
|
|
15268
|
+
function objectShape(schema) {
|
|
15269
|
+
const properties = isObject2(schema.properties) ? { ...schema.properties } : {};
|
|
15270
|
+
const required2 = new Set(Array.isArray(schema.required) ? schema.required.filter((key) => typeof key === "string") : []);
|
|
15271
|
+
const adopt = (shape) => {
|
|
15272
|
+
for (const [key, value] of Object.entries(shape.properties)) if (!(key in properties)) properties[key] = value;
|
|
15273
|
+
};
|
|
15274
|
+
for (const branch of branches(schema.allOf)) {
|
|
15275
|
+
const shape = objectShape(branch);
|
|
15276
|
+
adopt(shape);
|
|
15277
|
+
for (const key of shape.required) required2.add(key);
|
|
15278
|
+
}
|
|
15279
|
+
for (const keyword of ["anyOf", "oneOf"]) {
|
|
15280
|
+
const choices = branches(schema[keyword]).map(objectShape);
|
|
15281
|
+
if (choices.length === 0) continue;
|
|
15282
|
+
for (const choice of choices) adopt(choice);
|
|
15283
|
+
for (const key of choices[0].required) {
|
|
15284
|
+
if (choices.every((choice) => choice.required.includes(key))) required2.add(key);
|
|
15285
|
+
}
|
|
15286
|
+
}
|
|
15287
|
+
return { properties, required: [...required2] };
|
|
15288
|
+
}
|
|
15289
|
+
function describesObject(type) {
|
|
15290
|
+
return type === void 0 || type === "object" || Array.isArray(type) && type.includes("object");
|
|
15291
|
+
}
|
|
15292
|
+
function providerSafeInputSchema(schema) {
|
|
15293
|
+
if (!isObject2(schema) || !describesObject(schema.type)) return { type: "object", properties: {} };
|
|
15294
|
+
if (schema.type === "object" && ROOT_COMBINATORS.every((keyword) => !(keyword in schema))) return schema;
|
|
15295
|
+
const { properties, required: required2 } = objectShape(schema);
|
|
15296
|
+
const safe = { ...schema, type: "object", properties };
|
|
15297
|
+
for (const keyword of ROOT_COMBINATORS) delete safe[keyword];
|
|
15298
|
+
if (required2.length > 0) safe.required = required2;
|
|
15299
|
+
else delete safe.required;
|
|
15300
|
+
return safe;
|
|
15301
|
+
}
|
|
15302
|
+
function createToolListNormalizer() {
|
|
15303
|
+
const pending = /* @__PURE__ */ new Set();
|
|
15304
|
+
const idKey = (id) => `${typeof id}:${String(id)}`;
|
|
15305
|
+
return {
|
|
15306
|
+
observeRequest(line) {
|
|
15307
|
+
let frame;
|
|
15308
|
+
try {
|
|
15309
|
+
frame = JSON.parse(line);
|
|
15310
|
+
} catch {
|
|
15311
|
+
return;
|
|
15312
|
+
}
|
|
15313
|
+
if (isObject2(frame) && frame.method === "tools/list" && (typeof frame.id === "number" || typeof frame.id === "string")) {
|
|
15314
|
+
pending.add(idKey(frame.id));
|
|
15315
|
+
}
|
|
15316
|
+
},
|
|
15317
|
+
rewriteResponse(line) {
|
|
15318
|
+
if (pending.size === 0) return line;
|
|
15319
|
+
let frame;
|
|
15320
|
+
try {
|
|
15321
|
+
frame = JSON.parse(line);
|
|
15322
|
+
} catch {
|
|
15323
|
+
return line;
|
|
15324
|
+
}
|
|
15325
|
+
if (!isObject2(frame) || "method" in frame || !pending.delete(idKey(frame.id))) return line;
|
|
15326
|
+
if (!isObject2(frame.result) || !Array.isArray(frame.result.tools)) return line;
|
|
15327
|
+
let changed = false;
|
|
15328
|
+
const tools = frame.result.tools.map((tool) => {
|
|
15329
|
+
if (!isObject2(tool)) return tool;
|
|
15330
|
+
const inputSchema = providerSafeInputSchema(tool.inputSchema);
|
|
15331
|
+
if (inputSchema === tool.inputSchema) return tool;
|
|
15332
|
+
changed = true;
|
|
15333
|
+
return { ...tool, inputSchema };
|
|
15334
|
+
});
|
|
15335
|
+
return changed ? JSON.stringify({ ...frame, result: { ...frame.result, tools } }) : line;
|
|
15336
|
+
}
|
|
15337
|
+
};
|
|
15338
|
+
}
|
|
15339
|
+
|
|
15128
15340
|
// server/mcp-bridge.ts
|
|
15129
15341
|
var BRIDGE_INACTIVITY_MS = 45e3;
|
|
15130
15342
|
var PROBE_TIMEOUT_MS = 1e4;
|
|
@@ -15294,8 +15506,10 @@ function runMcpBridge(options) {
|
|
|
15294
15506
|
}
|
|
15295
15507
|
} : {}
|
|
15296
15508
|
});
|
|
15509
|
+
const toolLists = createToolListNormalizer();
|
|
15297
15510
|
let pendingInput = Promise.resolve();
|
|
15298
15511
|
const inbound = createLineSplitter((line) => {
|
|
15512
|
+
toolLists.observeRequest(line);
|
|
15299
15513
|
const completion = intercept(line);
|
|
15300
15514
|
if (completion) pendingInput = completion;
|
|
15301
15515
|
});
|
|
@@ -15305,7 +15519,7 @@ function runMcpBridge(options) {
|
|
|
15305
15519
|
inbound.flush();
|
|
15306
15520
|
void pendingInput.finally(() => child.stdin.end());
|
|
15307
15521
|
});
|
|
15308
|
-
const outbound = createLineSplitter((line) => process.stdout.write(line + "\n"));
|
|
15522
|
+
const outbound = createLineSplitter((line) => process.stdout.write(toolLists.rewriteResponse(line) + "\n"));
|
|
15309
15523
|
child.stdout.on("data", (chunk) => outbound.push(chunk));
|
|
15310
15524
|
child.stdout.on("end", () => outbound.flush());
|
|
15311
15525
|
const detach = () => {
|