openmausbot 0.1.92 → 0.1.94
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/{DesktopViewer-Do6lBa4C.js → DesktopViewer-bxM7NV3N.js} +1 -1
- package/dist/assets/{abnfDiagram-O67JEVCF-Cd3X7Hxc.js → abnfDiagram-O67JEVCF-BhMdJhRJ.js} +1 -1
- package/dist/assets/{arc-DIYc7Ymx.js → arc-B5itKDcx.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-DBmRGVyP.js → architectureDiagram-NJMV4G6O-C5d7UY6U.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-CPFePSEE.js → blockDiagram-BEXU5L5S-BrZIhMmu.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-DD_DO1qy.js → c4Diagram-YGBWAQC7-7I0ArfbD.js} +1 -1
- package/dist/assets/channel-CdJX6i8k.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BNEeNSjX.js → chunk-2Q5K7J3B-BnEsyN36.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-BbinLaqH.js → chunk-3FUC2YCW-BXATQ52s.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-BBgYrgDR.js → chunk-5VM5RSS4-B0BpTkEx.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-ezXj-kA-.js → chunk-GTNCS2PH-BtLTz6FR.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-9FxZ3diV.js → chunk-GWA4HPMP-D6gcZOYt.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CO-40JpI.js → chunk-JWPE2WC7-DCLrosvf.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-BEhjslYE.js → chunk-NETBCI7D-B9JsknV9.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-CNeq4n7_.js → chunk-WEXAMYUT-CsoTxw7z.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-OsCY7KSi.js → chunk-XXDRQBXY-0F_frB0c.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-CloRUEtk.js → classDiagram-v2-NBCMYWYE-DkrpnflX.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-D1BGZhp4.js → cose-bilkent-JH36ORCC-BNDwYBt9.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CUf4T2CN.js → cynefin-OW5HDTMX-JUkNr1Mk.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-DPEZrFGA.js → cynefinDiagram-VND7K2PF-DKeh9N4M.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-bDe6GIv5.js → dagre-6A5THRUB-ve-6T_wX.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-CdcUQz55.js → diagram-22UHCM2B-BuJ2d8rT.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-BZpqGg7c.js → diagram-3UASUU5V-BgOs_Ni-.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-DvGM6ugp.js → diagram-ATOU4E4O-DMK6VmcP.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-DSTmMm0s.js → diagram-CDSNMT55-DksASlcY.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-15cucnMn.js → diagram-MLGK6HIB-Bgn8I5k6.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-tMbuaE6n.js → diagram-MPIPVDR6-zK0jqO8N.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-BYxYzjHI.js → ebnfDiagram-ZINNZB2B-vKrbzTwr.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-v6bj852W.js → elk-276RUBZZ-Bzv2mPNf.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-5lBBlnd2.js → erDiagram-OPXOYQCR-CvOyYuxu.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-CZyl1zIj.js → flowDiagram-KWPJA3E3-CtbnDbc0.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-BiAI-ltZ.js → ganttDiagram-FUAMR5RP-c4dMRYyG.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-BAZISkj3.js → gitGraphDiagram-X574FWY7-B34uaQho.js} +1 -1
- package/dist/assets/index-CPYrGsv1.js +610 -0
- package/dist/assets/{index-DGBaEXrM.js → index-CPiqc_DN.js} +1 -1
- package/dist/assets/index-CzT42GR8.css +1 -0
- package/dist/assets/{infoDiagram-VRGFBTTK-B6ooOy-Z.js → infoDiagram-VRGFBTTK-o64ma4CI.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-BZ9ksi-B.js → ishikawaDiagram-OU5B5YK6-DV4C9BAm.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-DWqlzIEe.js → journeyDiagram-ZHPQQLJL-Bf0AHk1H.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-JX6piDwL.js → kanban-definition-PNTS6WVX-B1UMSKmE.js} +1 -1
- package/dist/assets/{linear-CmOWzX0P.js → linear-BpKhuyLm.js} +1 -1
- package/dist/assets/{mermaid.core-CF1zwoQ-.js → mermaid.core-B_BKNCw5.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-CGh2K4fW.js → mindmap-definition-NLK3R4M7-DeARruT1.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-CDwYN0s7.js → pegDiagram-GJSIUBJH-BOQEk_1D.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-1rfjJocB.js → pieDiagram-5QR66LMP-EIfoiTZo.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-tKPvPiok.js → quadrantDiagram-O4NWA36T-GgZwT-fi.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-BHLm5vXR.js → railroadDiagram-XR7U4H2S-D9rDQomj.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-CB45STp7.js → requirementDiagram-PLB6GJNP-DAh1MIeo.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-55QA_huC.js → sankeyDiagram-IPEJSGJF-CPr6Uz64.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-BckFmQHn.js → sequenceDiagram-PO4LG4MO-BU6VIdcm.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BFCOJF11.js → sizeCapture-INFHLROL-qF2HO41r.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-CZvmiVVN.js → stateDiagram-v2-GCMORJYK-DlJ8G4MD.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-BpDUCEKy.js → swimlanes-2SLR337P-DzYE8I54.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-D-U4GtLQ.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BpxHq6IK.js → timeline-definition-EJHVYXUP-B7wzEQ0A.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-Cj66vm02.js → usecaseDiagram-POWQR4AR-BvGgrxIP.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-C9nRkWE_.js → vennDiagram-UO4OBE2U-CEECdgQg.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-D-me_nWj.js → wardleyDiagram-VNRHLVJA-XQHA0P_P.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-Dc_fL4mk.js → xychartDiagram-PMCCYNJV-B5mLcZI2.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +1 -0
- package/dist-server/companion/src/routes.js +45 -1
- package/dist-server/container-mcp.js +99 -77
- package/dist-server/drivers/agents-proxy.js +40 -1
- package/dist-server/drivers/pi-mcp-extension.ts +245 -299
- package/dist-server/enterprise/server/index.js +1 -0
- package/dist-server/index.js +18361 -13794
- package/dist-server/local-computer-proxy.js +5 -1
- package/dist-server/local-computer.js +1 -0
- package/dist-server/mcp-gate.js +152 -20
- package/dist-server/mcp-remote-proxy.js +437 -0
- package/dist-server/openmausbot.js +8872 -7620
- package/dist-server/pair-cli.js +8872 -7620
- package/dist-server/permission-proxy.js +65 -1
- package/dist-server/proxy-paths.js +1 -0
- package/dist-server/server/auto-approve.js +33 -11
- package/dist-server/server/boat.js +3 -3
- package/dist-server/server/browser-live.js +14 -5
- package/dist-server/server/browser-runtime.js +6 -0
- package/dist-server/server/channel-queue.js +4 -1
- package/dist-server/server/cli.js +32 -12
- package/dist-server/server/cloud-move-http.js +9 -3
- package/dist-server/server/cloud-move.js +18 -0
- package/dist-server/server/cloud-owner.js +1 -1
- package/dist-server/server/computer-control.js +6 -0
- package/dist-server/server/computer-wait.js +33 -13
- package/dist-server/server/config.js +57 -10
- package/dist-server/server/container-computer.js +43 -32
- package/dist-server/server/decision-log.js +9 -6
- package/dist-server/server/delegations.js +47 -22
- package/dist-server/server/digest.js +12 -2
- package/dist-server/server/drivers/acp/core.js +229 -20
- package/dist-server/server/drivers/acp/cursor.js +13 -1
- package/dist-server/server/drivers/acp/grok.js +208 -3
- package/dist-server/server/drivers/acp/quiet-status.js +257 -0
- package/dist-server/server/drivers/acp/qwen.js +18 -0
- package/dist-server/server/drivers/agents-call.js +28 -0
- package/dist-server/server/drivers/agents-catalog.js +10 -1
- package/dist-server/server/drivers/boatagent.js +2 -0
- package/dist-server/server/drivers/builtIn.js +2 -0
- package/dist-server/server/drivers/cerebras.js +108 -0
- package/dist-server/server/drivers/chat-mcp-tools.js +45 -15
- package/dist-server/server/drivers/claude.js +35 -9
- package/dist-server/server/drivers/codex.js +84 -10
- package/dist-server/server/drivers/openai-chat.js +37 -5
- package/dist-server/server/drivers/pi.js +48 -4
- package/dist-server/server/drivers/prompt-split.js +2 -0
- package/dist-server/server/env-path.js +6 -2
- package/dist-server/server/environment.js +3 -0
- package/dist-server/server/guarded-requests.js +2 -1
- package/dist-server/server/index.js +1353 -311
- package/dist-server/server/live-call-controller.js +868 -0
- package/dist-server/server/live-call.js +216 -0
- package/dist-server/server/local-vm-stop-reason.js +26 -0
- package/dist-server/server/mcp-gate-config.js +43 -12
- package/dist-server/server/mcp-gate.js +127 -25
- package/dist-server/server/mcp-http.js +46 -8
- package/dist-server/server/mcp-remote-proxy.js +108 -0
- package/dist-server/server/new-bot-defaults.js +3 -0
- package/dist-server/server/peer-provenance.js +4 -2
- package/dist-server/server/permission-proxy.js +15 -1
- package/dist-server/server/plan-usage.js +797 -0
- package/dist-server/server/provider-key-check.js +2 -1
- package/dist-server/server/proxy-paths.js +1 -0
- package/dist-server/server/redact.js +2 -0
- package/dist-server/server/request-auth.js +3 -2
- package/dist-server/server/routes/desktop-viewer.js +50 -6
- package/dist-server/server/routes/live.js +98 -0
- package/dist-server/server/routines.js +6 -3
- package/dist-server/server/skill-library.js +207 -0
- package/dist-server/server/skills-library-migration.js +235 -0
- package/dist-server/server/skills.js +66 -3
- package/dist-server/server/steer-queue.js +13 -1
- package/dist-server/server/store.js +86 -4
- package/dist-server/server/surface.js +9 -3
- package/dist-server/server/team-backup.js +2 -1
- package/dist-server/server/thread-events.js +1 -1
- package/dist-server/server/tunnel.js +20 -1
- package/dist-server/server/turn-log.js +10 -0
- package/dist-server/server/turn-resources.js +124 -0
- package/dist-server/server/vps-computer.js +1 -1
- package/dist-server/server/workspace-backup.js +22 -0
- package/dist-server/server/workspace.js +1 -1
- package/dist-server/shared/approval-mode.js +1 -1
- package/dist-server/shared/ask-question.js +13 -0
- package/dist-server/shared/call-consent.js +28 -0
- package/dist-server/shared/live-approval.js +124 -0
- package/dist-server/shared/live-call.js +176 -0
- package/dist-server/shared/redact.js +1 -0
- package/dist-server/shared/skill-md.js +10 -0
- package/dist-server/shared/team-backup.js +3 -0
- package/dist-server/shared/tool-name.js +22 -0
- package/dist-server/shared/tool-scope-support.js +25 -0
- package/dist-server/shared/tool-scope.js +136 -0
- package/dist-server/src/lib/thread-refs.js +406 -0
- package/dist-server/vps-container-mcp.js +99 -77
- package/dist-server/workspace-backup.worker.js +103 -100
- package/enterprise/server/index.js +1 -0
- package/package.json +1 -1
- package/dist/assets/channel-Dtk5Mtic.js +0 -1
- package/dist/assets/index-Cdmjrl28.css +0 -1
- package/dist/assets/index-DR7YPMkW.js +0 -597
- package/dist/assets/swimlanesDiagram-TC7HE7FX-M0GYW9Y3.js +0 -8
|
@@ -68,6 +68,8 @@ function windowsKnownDirs() {
|
|
|
68
68
|
// x.ai installer
|
|
69
69
|
join(localAppData, "agy", "bin"),
|
|
70
70
|
// Antigravity installer
|
|
71
|
+
// Cursor installer: cursor-agent.* and its `agent` copies (MOCA-272)
|
|
72
|
+
join(localAppData, "cursor-agent"),
|
|
71
73
|
join(home, ".local", "bin"),
|
|
72
74
|
// claude native installer
|
|
73
75
|
join(home, ".claude", "local"),
|
|
@@ -75,7 +77,9 @@ function windowsKnownDirs() {
|
|
|
75
77
|
// Factory droid installer (%USERPROFILE%\bin)
|
|
76
78
|
join(home, ".bun", "bin"),
|
|
77
79
|
join(home, ".deno", "bin"),
|
|
78
|
-
join(home, "go", "bin")
|
|
80
|
+
join(home, "go", "bin"),
|
|
81
|
+
join(process.env.ProgramFiles ?? "C:\\Program Files", "Docker", "Docker", "resources", "bin")
|
|
82
|
+
// Docker Desktop installer
|
|
79
83
|
];
|
|
80
84
|
}
|
|
81
85
|
var cached = null;
|
|
@@ -238,7 +242,7 @@ function resolveCliSpawn(cli, args, env) {
|
|
|
238
242
|
|
|
239
243
|
// server/config.ts
|
|
240
244
|
import { homedir as homedir2 } from "node:os";
|
|
241
|
-
import { join as
|
|
245
|
+
import { join as join2 } from "node:path";
|
|
242
246
|
|
|
243
247
|
// node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
244
248
|
var external_exports = {};
|
|
@@ -15540,6 +15544,48 @@ function normalizeCronSchedule(value, after = Date.now()) {
|
|
|
15540
15544
|
return schedule;
|
|
15541
15545
|
}
|
|
15542
15546
|
|
|
15547
|
+
// shared/tool-scope.ts
|
|
15548
|
+
var SERVER_NAME = /^[a-z][a-z0-9_-]{0,31}$/;
|
|
15549
|
+
var CONTROL_CHARACTER = /[\x00-\x1f\x7f]/;
|
|
15550
|
+
var MAX_SELECTORS = 256;
|
|
15551
|
+
var MAX_SELECTOR_LENGTH = 1024;
|
|
15552
|
+
function validName(name) {
|
|
15553
|
+
return typeof name === "string" && name.trim().length > 0 && name.length <= MAX_SELECTOR_LENGTH && !CONTROL_CHARACTER.test(name) && !name.includes("*");
|
|
15554
|
+
}
|
|
15555
|
+
function selectorIdentity(selector) {
|
|
15556
|
+
if (selector.length > MAX_SELECTOR_LENGTH || CONTROL_CHARACTER.test(selector)) return;
|
|
15557
|
+
if (selector.startsWith("native:")) {
|
|
15558
|
+
const name = selector.slice(7);
|
|
15559
|
+
if (name === "*" || validName(name)) return { kind: "native", name };
|
|
15560
|
+
} else if (selector.startsWith("mcp:")) {
|
|
15561
|
+
const separator = selector.indexOf(":", 4);
|
|
15562
|
+
if (separator < 0) return;
|
|
15563
|
+
const server = selector.slice(4, separator);
|
|
15564
|
+
const name = selector.slice(separator + 1);
|
|
15565
|
+
if (SERVER_NAME.test(server) && (name === "*" || validName(name))) {
|
|
15566
|
+
return { kind: "mcp", server, name };
|
|
15567
|
+
}
|
|
15568
|
+
}
|
|
15569
|
+
}
|
|
15570
|
+
function parseToolScope(value) {
|
|
15571
|
+
if (value === void 0) return { ok: true, scope: void 0 };
|
|
15572
|
+
const invalid = { ok: false, error: "Tool selection must contain only valid allow and deny lists." };
|
|
15573
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return invalid;
|
|
15574
|
+
const prototype = Object.getPrototypeOf(value);
|
|
15575
|
+
if (prototype !== Object.prototype && prototype !== null) return invalid;
|
|
15576
|
+
const scope = {};
|
|
15577
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
15578
|
+
if (key !== "allow" && key !== "deny") return invalid;
|
|
15579
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
15580
|
+
if (!descriptor || !("value" in descriptor)) return invalid;
|
|
15581
|
+
const list = descriptor.value;
|
|
15582
|
+
if (!Array.isArray(list) || list.length > MAX_SELECTORS) return invalid;
|
|
15583
|
+
if (!Array.from(list).every((entry) => typeof entry === "string" && selectorIdentity(entry))) return invalid;
|
|
15584
|
+
scope[key] = [...new Set(list)];
|
|
15585
|
+
}
|
|
15586
|
+
return { ok: true, scope };
|
|
15587
|
+
}
|
|
15588
|
+
|
|
15543
15589
|
// server/new-bot-defaults.ts
|
|
15544
15590
|
var strings = (max, length) => external_exports.array(external_exports.string().max(length)).max(max);
|
|
15545
15591
|
var clock = external_exports.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d$/);
|
|
@@ -15574,6 +15620,10 @@ var botDefaultsProfileSchema = profilePatchSchema.extend({
|
|
|
15574
15620
|
browser: external_exports.boolean().optional(),
|
|
15575
15621
|
browserProfile: external_exports.string().max(100).nullable().optional(),
|
|
15576
15622
|
mcpServers: strings(100, 100).nullable().optional(),
|
|
15623
|
+
toolScope: external_exports.custom((value) => value !== void 0 && parseToolScope(value).ok, "Invalid tool selection").transform((value) => {
|
|
15624
|
+
const parsed = parseToolScope(value);
|
|
15625
|
+
return parsed.ok ? parsed.scope : value;
|
|
15626
|
+
}).nullable().optional(),
|
|
15577
15627
|
parkDirectMessages: external_exports.boolean().optional()
|
|
15578
15628
|
}).strict();
|
|
15579
15629
|
var scheduleSchema = external_exports.discriminatedUnion("type", [
|
|
@@ -15770,76 +15820,6 @@ var remoteMutationSchema = remoteEntrySchema.extend({
|
|
|
15770
15820
|
var CLOUD_SEAT_IDLE_STOP_MS = 5 * 6e4;
|
|
15771
15821
|
var CLOUD_SEAT_SLEEP_RETRY_MAX_MS = 10 * 6e4;
|
|
15772
15822
|
|
|
15773
|
-
// server/proxy-paths.ts
|
|
15774
|
-
import { existsSync as existsSync2 } from "node:fs";
|
|
15775
|
-
import { dirname as dirname2, join as join2 } from "node:path";
|
|
15776
|
-
import { fileURLToPath } from "node:url";
|
|
15777
|
-
var SERVER_ROOT = dirname2(fileURLToPath(import.meta.url));
|
|
15778
|
-
function resolveProxy(relative) {
|
|
15779
|
-
const source = join2(SERVER_ROOT, `${relative}.ts`);
|
|
15780
|
-
return existsSync2(source) ? source : join2(SERVER_ROOT, `${relative}.js`);
|
|
15781
|
-
}
|
|
15782
|
-
var SPAWNED_PROXIES = {
|
|
15783
|
-
browser: resolveProxy("browser-proxy"),
|
|
15784
|
-
localComputer: resolveProxy("local-computer-proxy"),
|
|
15785
|
-
permission: resolveProxy("permission-proxy"),
|
|
15786
|
-
containerMcp: resolveProxy("container-mcp"),
|
|
15787
|
-
vpsContainerMcp: resolveProxy("vps-container-mcp"),
|
|
15788
|
-
agents: resolveProxy("drivers/agents-proxy"),
|
|
15789
|
-
dweb: resolveProxy("drivers/dweb-proxy"),
|
|
15790
|
-
connectors: resolveProxy("connector-proxy"),
|
|
15791
|
-
mcpGate: resolveProxy("mcp-gate"),
|
|
15792
|
-
phone: resolveProxy("drivers/phone-proxy"),
|
|
15793
|
-
hook: resolveProxy("hooks/omb-hook"),
|
|
15794
|
-
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
15795
|
-
// resolved through the same single source of truth so the packaged layout
|
|
15796
|
-
// check can assert it ships.
|
|
15797
|
-
piMcpExtension: resolveProxy("drivers/pi-mcp-extension")
|
|
15798
|
-
};
|
|
15799
|
-
|
|
15800
|
-
// server/enterprise.ts
|
|
15801
|
-
var layerSchema = external_exports.object({
|
|
15802
|
-
customer: external_exports.string().min(1),
|
|
15803
|
-
features: external_exports.array(external_exports.string().min(1)),
|
|
15804
|
-
expiresAt: external_exports.string().nullable()
|
|
15805
|
-
});
|
|
15806
|
-
var DAY_MS = 24 * 60 * 6e4;
|
|
15807
|
-
|
|
15808
|
-
// server/sessions.ts
|
|
15809
|
-
var PAIRING_CODE_TTL_MS = 5 * 6e4;
|
|
15810
|
-
function daysMs(value, fallbackDays) {
|
|
15811
|
-
const days = Number(value);
|
|
15812
|
-
const ok = Number.isInteger(days) && days >= 1 && days <= 3650;
|
|
15813
|
-
return (ok ? days : fallbackDays) * 24 * 60 * 6e4;
|
|
15814
|
-
}
|
|
15815
|
-
var SESSION_TTL_MS = daysMs(process.env.OMB_SESSION_TTL_DAYS, 30);
|
|
15816
|
-
var SESSION_MAX_AGE_MS = daysMs(process.env.OMB_SESSION_MAX_DAYS, 180);
|
|
15817
|
-
var SESSION_RENEW_WHEN_LEFT_MS = SESSION_TTL_MS / 2;
|
|
15818
|
-
var STREAM_TICKET_TTL_MS = 5 * 6e4;
|
|
15819
|
-
var scopeSchema = external_exports.enum(["admin", "client"]);
|
|
15820
|
-
var sessionSchema = external_exports.object({
|
|
15821
|
-
id: external_exports.string().min(1),
|
|
15822
|
-
tokenHash: external_exports.string().length(64),
|
|
15823
|
-
label: external_exports.string().max(80),
|
|
15824
|
-
scopes: external_exports.array(scopeSchema).min(1),
|
|
15825
|
-
createdAt: external_exports.number(),
|
|
15826
|
-
lastSeenAt: external_exports.number(),
|
|
15827
|
-
expiresAt: external_exports.number(),
|
|
15828
|
-
/** Set when the session came from an account sign-in rather than a code. */
|
|
15829
|
-
userId: external_exports.string().max(256).optional(),
|
|
15830
|
-
email: external_exports.string().max(320).optional(),
|
|
15831
|
-
/** Set only by the internal verified-portal issuance path, never by email or pairing input. */
|
|
15832
|
-
membershipAuthority: external_exports.literal("portal").optional(),
|
|
15833
|
-
/** A browser sign-in (PairingCode `browser`): accepted only as its browser's cookie, never as a bearer token. */
|
|
15834
|
-
cookieOnly: external_exports.literal(true).optional(),
|
|
15835
|
-
/** Whose OMB Cloud a browser sign-in signed in to (its PairingCode `owner`). */
|
|
15836
|
-
owner: external_exports.string().max(254).optional()
|
|
15837
|
-
});
|
|
15838
|
-
var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
|
|
15839
|
-
|
|
15840
|
-
// server/cloud-home.ts
|
|
15841
|
-
var CLOUD_PAIRING_NONCE_MS = 10 * 6e4;
|
|
15842
|
-
|
|
15843
15823
|
// server/config.ts
|
|
15844
15824
|
var optionalText = external_exports.string().optional();
|
|
15845
15825
|
var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
|
|
@@ -16047,7 +16027,11 @@ var featureConfigSchema = external_exports.object({
|
|
|
16047
16027
|
* may offer a per-second-billed cloud seat, but only through an explicit
|
|
16048
16028
|
* consent card or a configured allowlist — never a silent Auto default.
|
|
16049
16029
|
* Off until baked; see cloudOverflowEnabled for how to enable it by hand. */
|
|
16050
|
-
cloudOverflow: external_exports.boolean().optional()
|
|
16030
|
+
cloudOverflow: external_exports.boolean().optional(),
|
|
16031
|
+
/** Opt-in shared skills library: one store at the data dir that bots
|
|
16032
|
+
* read by assignment instead of per-workspace copies. Off until
|
|
16033
|
+
* explicitly enabled — see skillsLibraryEnabled. */
|
|
16034
|
+
skillsLibrary: external_exports.boolean().optional()
|
|
16051
16035
|
});
|
|
16052
16036
|
var onboardingConfigSchema = external_exports.object({
|
|
16053
16037
|
/** ISO timestamp of finishing (or skipping to the end of) the welcome flow. */
|
|
@@ -16129,6 +16113,7 @@ var appConfigSchema = external_exports.object({
|
|
|
16129
16113
|
phone: external_exports.enum(["ios", "android"]).optional()
|
|
16130
16114
|
}).optional(),
|
|
16131
16115
|
mistral: external_exports.object({ key: optionalText }).optional(),
|
|
16116
|
+
cerebras: external_exports.object({ key: optionalText }).optional(),
|
|
16132
16117
|
xai: external_exports.object({ key: optionalText, url: optionalText }).optional(),
|
|
16133
16118
|
/** Anthropic API key for Claude Code billed per token, handed only to
|
|
16134
16119
|
* Claude instances; `url` only for a proxy or a test double. Never a
|
|
@@ -16199,6 +16184,15 @@ var appConfigSchema = external_exports.object({
|
|
|
16199
16184
|
baseUrl: external_exports.string().trim().max(2048).refine((value) => !value || /^https?:\/\//i.test(value), "the decision model address must start with http:// or https://").optional(),
|
|
16200
16185
|
jobs: external_exports.object({ roomRouting: external_exports.boolean().optional() }).optional()
|
|
16201
16186
|
}).optional(),
|
|
16187
|
+
/** Live calls: an OpenAI project key for GPT-Live, kept apart from every
|
|
16188
|
+
* other OpenAI credential so a Live call never bills an image or engine key
|
|
16189
|
+
* the user did not hand to it. `voice` is a GPT-Live built-in voice name. */
|
|
16190
|
+
live: external_exports.object({
|
|
16191
|
+
key: optionalText,
|
|
16192
|
+
voice: external_exports.string().trim().max(40).regex(/^[a-z]*$/, "a Live voice is a lowercase built-in voice name").optional(),
|
|
16193
|
+
readTypedReplies: external_exports.boolean().optional(),
|
|
16194
|
+
idleMinutes: external_exports.number().int().min(1).max(60).optional()
|
|
16195
|
+
}).optional(),
|
|
16202
16196
|
/** Avatar provider credentials stay separate; choosing a router never reuses a cloud key. */
|
|
16203
16197
|
imageGen: external_exports.object({
|
|
16204
16198
|
provider: external_exports.enum(["openai", "xai", "custom"]).optional(),
|
|
@@ -16268,10 +16262,10 @@ var storedAppConfigSchema = appConfigSchema.extend({
|
|
|
16268
16262
|
var appConfigPatchSchema = appConfigSchema.omit({ instances: true, mcpServers: true, cliStartup: true, customDomain: true }).extend({ threads: threadsPatchSchema.optional(), newBots: newBotsPatchSchema.optional() });
|
|
16269
16263
|
var jsonObjectSchema = external_exports.record(external_exports.string(), external_exports.json());
|
|
16270
16264
|
var DEFAULT_CAPTURE_QUIET_MS = 2 * 6e4;
|
|
16271
|
-
var DATA_DIR = process.env.OMB_DATA_DIR ??
|
|
16272
|
-
var LEGACY_DATA_DIR =
|
|
16273
|
-
var EVENTS_DIR =
|
|
16274
|
-
var NATIVE_DIR =
|
|
16265
|
+
var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir2(), ".openmausbot");
|
|
16266
|
+
var LEGACY_DATA_DIR = join2(homedir2(), ".opengrokbot");
|
|
16267
|
+
var EVENTS_DIR = join2(DATA_DIR, "events");
|
|
16268
|
+
var NATIVE_DIR = join2(DATA_DIR, "native");
|
|
16275
16269
|
var OPENAI_API_INSTANCE = "openai";
|
|
16276
16270
|
var OPENROUTER_API_INSTANCE = "openrouter";
|
|
16277
16271
|
var XAI_API_INSTANCE = "xaiApi";
|
|
@@ -16301,6 +16295,34 @@ var API_KEY_FLEET = {
|
|
|
16301
16295
|
}
|
|
16302
16296
|
};
|
|
16303
16297
|
|
|
16298
|
+
// server/proxy-paths.ts
|
|
16299
|
+
import { existsSync as existsSync2 } from "node:fs";
|
|
16300
|
+
import { dirname as dirname2, join as join3 } from "node:path";
|
|
16301
|
+
import { fileURLToPath } from "node:url";
|
|
16302
|
+
var SERVER_ROOT = dirname2(fileURLToPath(import.meta.url));
|
|
16303
|
+
function resolveProxy(relative) {
|
|
16304
|
+
const source = join3(SERVER_ROOT, `${relative}.ts`);
|
|
16305
|
+
return existsSync2(source) ? source : join3(SERVER_ROOT, `${relative}.js`);
|
|
16306
|
+
}
|
|
16307
|
+
var SPAWNED_PROXIES = {
|
|
16308
|
+
browser: resolveProxy("browser-proxy"),
|
|
16309
|
+
localComputer: resolveProxy("local-computer-proxy"),
|
|
16310
|
+
permission: resolveProxy("permission-proxy"),
|
|
16311
|
+
containerMcp: resolveProxy("container-mcp"),
|
|
16312
|
+
vpsContainerMcp: resolveProxy("vps-container-mcp"),
|
|
16313
|
+
agents: resolveProxy("drivers/agents-proxy"),
|
|
16314
|
+
dweb: resolveProxy("drivers/dweb-proxy"),
|
|
16315
|
+
connectors: resolveProxy("connector-proxy"),
|
|
16316
|
+
mcpGate: resolveProxy("mcp-gate"),
|
|
16317
|
+
mcpRemote: resolveProxy("mcp-remote-proxy"),
|
|
16318
|
+
phone: resolveProxy("drivers/phone-proxy"),
|
|
16319
|
+
hook: resolveProxy("hooks/omb-hook"),
|
|
16320
|
+
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
16321
|
+
// resolved through the same single source of truth so the packaged layout
|
|
16322
|
+
// check can assert it ships.
|
|
16323
|
+
piMcpExtension: resolveProxy("drivers/pi-mcp-extension")
|
|
16324
|
+
};
|
|
16325
|
+
|
|
16304
16326
|
// server/container-computer.ts
|
|
16305
16327
|
var run = promisify(execFile2);
|
|
16306
16328
|
var CUA_DRIVER_VERSION = "0.20.0";
|
|
@@ -321,6 +321,15 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
321
321
|
label: { type: "string", description: "Optional short name (one line, at most 60 characters) for this job. Names the new direct assignment thread." }
|
|
322
322
|
}, required: ["bot_ids", "message", "request_key"] }
|
|
323
323
|
},
|
|
324
|
+
{
|
|
325
|
+
name: "send_to_bot",
|
|
326
|
+
description: "Send work one way to another bot in a fresh thread. This is cross-bot only: use start_thread to send independent work to yourself. The recipient owns the new thread; its results, failures and questions stay there and never resume you. Use coordinate_bots when you need the result returned here.",
|
|
327
|
+
inputSchema: { type: "object", additionalProperties: false, properties: {
|
|
328
|
+
bot_id: { type: "string", description: "One reachable teammate id from list_bots or list_room_targets." },
|
|
329
|
+
title: { type: "string", description: "A short one-line title, at most 80 characters." },
|
|
330
|
+
message: { type: "string", description: "Complete instructions; the recipient does not inherit this conversation." }
|
|
331
|
+
}, required: ["bot_id", "title", "message"] }
|
|
332
|
+
},
|
|
324
333
|
{
|
|
325
334
|
name: "list_bots",
|
|
326
335
|
description: "List the other bots (agents) you may contact in your own team and any additional teams the owner has explicitly allowed you to coordinate, with their team, model and current status. Call this to discover exact teammate IDs before assigning work or requesting advice through your available coordination tools.",
|
|
@@ -851,7 +860,7 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
851
860
|
var SKILL_TOOL_NAMES = /* @__PURE__ */ new Set(["skills_list", "skill_manage"]);
|
|
852
861
|
var SHARED_COMPUTER_TOOL_NAMES = /* @__PURE__ */ new Set(["list_shared_computers", "shared_computer"]);
|
|
853
862
|
var VOICE_TOOL_NAMES = /* @__PURE__ */ new Set(["send_voice_note"]);
|
|
854
|
-
var ROOM_ONLY_TOOLS = /* @__PURE__ */ new Set(["list_room_targets", "coordinate_bots"]);
|
|
863
|
+
var ROOM_ONLY_TOOLS = /* @__PURE__ */ new Set(["list_room_targets", "coordinate_bots", "send_to_bot"]);
|
|
855
864
|
var ROOM_REPLACED_TOOLS = /* @__PURE__ */ new Set(["ask_bot", "delegate_bot", "check_delegation", "wait_delegation", "start_thread", "send_to_thread", "wait_thread"]);
|
|
856
865
|
var EXTERNAL_TOOL_NAMES = /* @__PURE__ */ new Set(["list_bots", "ask_bot", "delegate_bot", "check_delegation", "wait_delegation"]);
|
|
857
866
|
var WATCHER_TOOL_NAMES = /* @__PURE__ */ new Set(["create_options_card"]);
|
|
@@ -16168,6 +16177,8 @@ var KEY_PREFIXES = [
|
|
|
16168
16177
|
// xai (grok)
|
|
16169
16178
|
/\bgsk_[A-Za-z0-9]{40,}/g,
|
|
16170
16179
|
// groq
|
|
16180
|
+
/\bcsk-[A-Za-z0-9]{32,}/g,
|
|
16181
|
+
// cerebras
|
|
16171
16182
|
/\bhf_[A-Za-z0-9]{30,}/g,
|
|
16172
16183
|
// hugging face
|
|
16173
16184
|
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}/g,
|
|
@@ -16626,6 +16637,34 @@ async function callTool(name, args, context) {
|
|
|
16626
16637
|
}) });
|
|
16627
16638
|
return { text: JSON.stringify(r), ...r.error ? { isError: true } : {} };
|
|
16628
16639
|
}
|
|
16640
|
+
if (name === "send_to_bot") {
|
|
16641
|
+
const botId = String(args.bot_id ?? "").trim();
|
|
16642
|
+
const title = String(args.title ?? "").trim();
|
|
16643
|
+
const message = String(args.message ?? "").trim();
|
|
16644
|
+
if (!botId || !title || !message) {
|
|
16645
|
+
return { text: "send_to_bot needs bot_id, title and message.", isError: true };
|
|
16646
|
+
}
|
|
16647
|
+
if (botId === context.botId) {
|
|
16648
|
+
return { text: "send_to_bot is cross-bot only. Use start_thread to send independent work to yourself.", isError: true };
|
|
16649
|
+
}
|
|
16650
|
+
if (turn.threadsOpenedThisTurn >= MAX_THREADS_PER_TURN) {
|
|
16651
|
+
return { text: `You have already opened ${MAX_THREADS_PER_TURN} threads this turn, which is the limit.`, isError: true };
|
|
16652
|
+
}
|
|
16653
|
+
const r = await api("/api/internal/threads", { method: "POST", body: JSON.stringify({
|
|
16654
|
+
fromBotId: context.botId,
|
|
16655
|
+
fromThreadId: context.threadId,
|
|
16656
|
+
toBotId: botId,
|
|
16657
|
+
title,
|
|
16658
|
+
message,
|
|
16659
|
+
depth: context.depth,
|
|
16660
|
+
oneWay: true
|
|
16661
|
+
}) });
|
|
16662
|
+
if (r.error) return { text: `Couldn't send to that bot: ${String(r.error)}`, isError: true };
|
|
16663
|
+
turn.threadsOpenedThisTurn += 1;
|
|
16664
|
+
const destination = `@${String(r.botName ?? "that bot")} in #${String(r.title ?? title)} [thread id: ${String(r.threadId ?? "")}]`;
|
|
16665
|
+
const state = r.approvalRequired === true ? `Send to ${destination} is pending approval. The person's approval card appears after this turn ends; dispatch starts once approved.` : r.state === "queued" ? `Send to ${destination} is queued ${ordinal(Number(r.position) || 1)} for a free slot and can dispatch after this turn ends.` : `Send to ${destination} is pending until this turn ends, then dispatch starts.`;
|
|
16666
|
+
return { text: `${state} Its result stays in that thread; nothing there will resume you.` };
|
|
16667
|
+
}
|
|
16629
16668
|
if (name === "list_bots") {
|
|
16630
16669
|
const r = await api(`/api/internal/agents?self=${encodeURIComponent(BOT_ID)}`);
|
|
16631
16670
|
const bots = r.bots ?? [];
|