openmausbot 0.1.96 → 0.1.98
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/ActivityPanel-H6D3SD39.js +1 -0
- package/dist/assets/BotSettingsDialog-Dqz_AiBZ.js +7 -0
- package/dist/assets/CloudBackendPicker-iezpJFpF.js +1 -0
- package/dist/assets/ComputerPanel-DZPj-IWu.js +1 -0
- package/dist/assets/DesktopViewer-utONms1p.js +5 -0
- package/dist/assets/InspectorPanel-OVaBVrzC.js +5 -0
- package/dist/assets/KeyboardShortcutsModal-gk9mvHj_.js +1 -0
- package/dist/assets/LocalVmWorkspace-DLIvd2kC.js +1 -0
- package/dist/assets/MacLocalControl-bJv8yiPB.js +1 -0
- package/dist/assets/NewBotDialog-1qGOAdUM.js +2 -0
- package/dist/assets/RemoteAgentSettingsPanel-DqKr0HkO.js +1 -0
- package/dist/assets/RoutinesPage-BM2D4qGi.js +1 -0
- package/dist/assets/RoutinesSection-Dny9ra-c.js +1 -0
- package/dist/assets/SettingsModal-gC6XJJmt.js +11 -0
- package/dist/assets/TeamMapPage-B6fuu4r_.js +8 -0
- package/dist/assets/TriggersPanel-j0qTP2CO.js +1 -0
- package/dist/assets/VisibilitySection-DT0FqPvu.js +12 -0
- package/dist/assets/WebhooksPanel--YQyCjKO.js +3 -0
- package/dist/assets/{abnfDiagram-O67JEVCF-Dkbd2hcj.js → abnfDiagram-O67JEVCF-BsjcFX0-.js} +1 -1
- package/dist/assets/activity-BxOkayvD.js +1 -0
- package/dist/assets/{arc-Duj5Coy2.js → arc-CJNA94c6.js} +1 -1
- package/dist/assets/architectureDiagram-NJMV4G6O-dz2ud7lP.js +36 -0
- package/dist/assets/{blockDiagram-BEXU5L5S-CWDlTpXe.js → blockDiagram-BEXU5L5S-ChBEALoR.js} +1 -1
- package/dist/assets/brain-CFZ7PEXc.js +1 -0
- package/dist/assets/{c4Diagram-YGBWAQC7-B0t15PDc.js → c4Diagram-YGBWAQC7-KZNRKDQe.js} +1 -1
- package/dist/assets/channel-WhFyujhZ.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BJSCL-HV.js → chunk-2Q5K7J3B-BLLwmCET.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-D3_ILccd.js → chunk-3FUC2YCW-CQxyreBZ.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-D3dmwT_S.js → chunk-5VM5RSS4-D6sFMW0u.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-Br73HFPD.js → chunk-GTNCS2PH-BaZ1YgLF.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-uSsjxubC.js → chunk-GWA4HPMP-CcalphmC.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-C40VWFyr.js → chunk-JWPE2WC7-CSk8R3ve.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-D6WNNYwU.js → chunk-NETBCI7D-CTmLjA57.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-DOEhq64P.js → chunk-WEXAMYUT-CM9Z77Ne.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-BqJEi6Pi.js → chunk-XXDRQBXY-B1fxpMS2.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-ByU_GnxT.js → classDiagram-v2-NBCMYWYE-DCCyoLpj.js} +1 -1
- package/dist/assets/computer-control-NLov352p.js +1 -0
- package/dist/assets/cose-bilkent-JH36ORCC-KyImBKvE.js +1 -0
- package/dist/assets/{cynefin-OW5HDTMX-CZWO7aYj.js → cynefin-OW5HDTMX-fsZc6MGa.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-C70-w0la.js → cynefinDiagram-VND7K2PF-CGmHsShB.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-CnhjhExB.js → dagre-6A5THRUB-Dah1h-CH.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-bnjWCNb4.js → diagram-22UHCM2B-BIu71OyV.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-A4uTWoFV.js → diagram-3UASUU5V-gxhUB_Mu.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-Zi6m3NUl.js → diagram-ATOU4E4O-CBhusUBn.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-DtCcmd5k.js → diagram-CDSNMT55-BdPrc86x.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-DofuETS3.js → diagram-MLGK6HIB-Clp110R_.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-Dw2T9PuU.js → diagram-MPIPVDR6-DJKfbugw.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-DbrwPiem.js → ebnfDiagram-ZINNZB2B-DnsltoBu.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-BvCt1dCb.js → elk-276RUBZZ-jWdq6gqH.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-Y-QKqPnU.js → erDiagram-OPXOYQCR-DArPVf8u.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-CDkL1B5w.js → flowDiagram-KWPJA3E3-D2HZ-2f7.js} +1 -1
- package/dist/assets/ganttDiagram-FUAMR5RP--o0KIxEo.js +292 -0
- package/dist/assets/{gitGraphDiagram-X574FWY7-nL9iFTCv.js → gitGraphDiagram-X574FWY7-CsoXr2D7.js} +1 -1
- package/dist/assets/image-plus-BbVjGHin.js +1 -0
- package/dist/assets/index-BrPW5HDO.css +1 -0
- package/dist/assets/index-C3NqfdVU.js +585 -0
- package/dist/assets/{index-DreDnjOu.js → index-CJTp9JEp.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-C7aHjzsf.js → infoDiagram-VRGFBTTK-g-6lNp7r.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-KUZsNBTh.js → ishikawaDiagram-OU5B5YK6-B1d6qVTV.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-CGUuodFl.js → journeyDiagram-ZHPQQLJL-BTPuiU6T.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-Cy6r868Z.js → kanban-definition-PNTS6WVX-bDDuRJvP.js} +1 -1
- package/dist/assets/{linear-Bl669148.js → linear-BVVKbEMy.js} +1 -1
- package/dist/assets/{mermaid.core-86Xqz5Mr.js → mermaid.core-JJdoKyKB.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-G4DzHLrd.js → mindmap-definition-NLK3R4M7-B4aE3T0q.js} +1 -1
- package/dist/assets/module-DCUsy2BQ.js +3 -0
- package/dist/assets/page-visible-BBo_Zm8g.js +1 -0
- package/dist/assets/{pegDiagram-GJSIUBJH-K4eruzY0.js → pegDiagram-GJSIUBJH-DFKQWpR7.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DYdR9PPq.js → pieDiagram-5QR66LMP-Iv7OKVJi.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-BCAh0nEy.js → quadrantDiagram-O4NWA36T-U2YnfwBk.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-p0dGRc4g.js → railroadDiagram-XR7U4H2S-CuPy6RqM.js} +1 -1
- package/dist/assets/remote-desktop-panel-BNEj7tUx.js +1 -0
- package/dist/assets/{requirementDiagram-PLB6GJNP-tLeBG0aL.js → requirementDiagram-PLB6GJNP-bMI5AK7T.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-QRuN16rV.js → sankeyDiagram-IPEJSGJF-BKcFE2WQ.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-ueT1nVoa.js → sequenceDiagram-PO4LG4MO-Bn9q88kl.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-wRS2zWg2.js → sizeCapture-INFHLROL-Cvmdq9HD.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-CYzA_hE1.js → stateDiagram-v2-GCMORJYK-JJQYw3eQ.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-kDnv6LMc.js → swimlanes-2SLR337P-BkSCBEwp.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-CmTirbVT.js +8 -0
- package/dist/assets/table-file.worker-KkMx-SNx.js +10 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-D1y2UbbH.js → timeline-definition-EJHVYXUP-DsaM4GHr.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-IqB4v9HX.js → usecaseDiagram-POWQR4AR-3FOwLq7B.js} +1 -1
- package/dist/assets/user-DcZBnAuv.js +1 -0
- package/dist/assets/{vennDiagram-UO4OBE2U-BEi7KYVF.js → vennDiagram-UO4OBE2U-DyNjJsKt.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-Dkybo-Yf.js → wardleyDiagram-VNRHLVJA-Y4ZMcnBC.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-BAPFJLpg.js → xychartDiagram-PMCCYNJV-BXZpg955.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +20 -9
- package/dist-server/container-mcp.js +8 -0
- package/dist-server/desktop-entry.mjs +54 -0
- package/dist-server/drivers/agents-proxy.js +26 -9
- package/dist-server/index.js +3734 -2360
- package/dist-server/openmausbot.js +1664 -1553
- package/dist-server/pair-cli.js +1664 -1553
- package/dist-server/permission-proxy.js +2 -4
- package/dist-server/server/atomic.js +70 -2
- package/dist-server/server/auto-approve.js +1 -1
- package/dist-server/server/auto-vm-claims.js +13 -1
- package/dist-server/server/automatic-recovery.js +1 -2
- package/dist-server/server/boat.js +68 -84
- package/dist-server/server/bot-overview.js +1 -1
- package/dist-server/server/browser-engine.js +38 -1
- package/dist-server/server/browser-live.js +112 -25
- package/dist-server/server/browser-runtime.js +31 -1
- package/dist-server/server/checkpoints.js +275 -44
- package/dist-server/server/cli-setup.js +3 -3
- package/dist-server/server/cloud-computer-tools.js +11 -4
- package/dist-server/server/cloud-home-start.js +4 -4
- package/dist-server/server/cloud-home.js +3 -9
- package/dist-server/server/cloud-owner.js +1 -1
- package/dist-server/server/computer-engine-removal.js +70 -0
- package/dist-server/server/computer-selection.js +18 -0
- package/dist-server/server/config.js +29 -12
- package/dist-server/server/connector-card-text.js +15 -0
- package/dist-server/server/connector-scope-hint.js +83 -0
- package/dist-server/server/default-model-selection.js +23 -14
- package/dist-server/server/delegations.js +11 -5
- package/dist-server/server/delta-context.js +6 -1
- package/dist-server/server/drivers/acp/core.js +11 -1
- package/dist-server/server/drivers/acp/grok.js +47 -5
- package/dist-server/server/drivers/acp/opencode-go.js +16 -21
- package/dist-server/server/drivers/agents-call.js +1 -1
- package/dist-server/server/drivers/agents-catalog.js +27 -7
- package/dist-server/server/drivers/agents-proxy.js +1 -0
- package/dist-server/server/drivers/builtIn.js +0 -2
- package/dist-server/server/drivers/chat-mcp-tools.js +5 -3
- package/dist-server/server/drivers/claude-login-auth.js +1 -1
- package/dist-server/server/drivers/claude.js +84 -41
- package/dist-server/server/drivers/codex-device-auth.js +27 -319
- package/dist-server/server/drivers/codex.js +2 -2
- package/dist-server/server/drivers/device-auth.js +342 -0
- package/dist-server/server/drivers/openai-chat.js +110 -10
- package/dist-server/server/drivers/pi.js +184 -49
- package/dist-server/server/fleet-agent.js +18 -5
- package/dist-server/server/harness/http.js +5 -2
- package/dist-server/server/harness/registry.js +19 -0
- package/dist-server/server/harness-capabilities.js +7 -4
- package/dist-server/server/hosted-models.js +3 -1
- package/dist-server/server/index.js +823 -333
- package/dist-server/server/key-rejections.js +57 -0
- package/dist-server/server/live-call.js +11 -6
- package/dist-server/server/managed-policy.js +1 -1
- package/dist-server/server/message-file.js +7 -4
- package/dist-server/server/model-catalog/presets.js +8 -0
- package/dist-server/server/peer-roster.js +10 -2
- package/dist-server/server/permission-proxy.js +4 -0
- package/dist-server/server/provider-key-check.js +5 -1
- package/dist-server/server/request-auth.js +1 -1
- package/dist-server/server/room-turn-end.js +15 -0
- package/dist-server/server/room-turn-timeout.js +28 -0
- package/dist-server/server/routes/live.js +3 -3
- package/dist-server/server/routes/thread-models.js +36 -0
- package/dist-server/server/routine-requests.js +1 -1
- package/dist-server/server/routines.js +3 -3
- package/dist-server/server/screen-frame-gate.js +1 -3
- package/dist-server/server/skills.js +3 -2
- package/dist-server/server/store.js +273 -61
- package/dist-server/server/surface.js +29 -49
- package/dist-server/server/system-prompt.js +10 -10
- package/dist-server/server/team-backup.js +19 -4
- package/dist-server/server/thread-model.js +25 -0
- package/dist-server/server/turn-continuation.js +168 -0
- package/dist-server/server/webhook-ingress.js +8 -3
- package/dist-server/server/webhooks.js +40 -5
- package/dist-server/server/workspace.js +1 -1
- package/dist-server/shared/ask-question.js +0 -70
- package/dist-server/shared/cloud-computer.js +4 -6
- package/dist-server/shared/credential-request.js +1 -1
- package/dist-server/shared/device-sign-in.js +57 -0
- package/dist-server/shared/failed-turn.js +1 -4
- package/dist-server/shared/place-view.js +409 -0
- package/dist-server/shared/team-backup.js +2 -0
- package/dist-server/shared/thread-model.js +13 -0
- package/dist-server/shared/tool-scope-support.js +1 -2
- package/dist-server/vps-container-mcp.js +8 -0
- package/dist-server/workspace-backup.worker.js +41 -22
- package/package.json +1 -1
- package/dist/assets/DesktopViewer-DsnA23KM.js +0 -5
- package/dist/assets/architectureDiagram-NJMV4G6O-uYUsDawP.js +0 -36
- package/dist/assets/channel-BZxwC-Gw.js +0 -1
- package/dist/assets/cose-bilkent-JH36ORCC-D-Uglxqq.js +0 -1
- package/dist/assets/ganttDiagram-FUAMR5RP-CKV5D2F6.js +0 -292
- package/dist/assets/index-Du7o6Dsf.js +0 -610
- package/dist/assets/index-KxG4bWSr.css +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-C7voMDle.js +0 -8
- package/dist-server/server/drivers/boatagent.js +0 -443
|
@@ -6,17 +6,28 @@ var __export = (target, all) => {
|
|
|
6
6
|
|
|
7
7
|
// server/cloud-home-start.ts
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
|
-
import { chownSync, readFileSync as
|
|
9
|
+
import { chownSync, readFileSync as readFileSync3, statSync } from "node:fs";
|
|
10
10
|
import { dirname as dirname2, join as join3, posix, resolve } from "node:path";
|
|
11
11
|
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
|
|
12
12
|
|
|
13
13
|
// server/cloud-home.ts
|
|
14
|
-
import { existsSync as existsSync2, lstatSync, mkdirSync, readFileSync, readdirSync } from "node:fs";
|
|
14
|
+
import { existsSync as existsSync2, lstatSync as lstatSync2, mkdirSync, readFileSync as readFileSync2, readdirSync } from "node:fs";
|
|
15
15
|
import { join as join2 } from "node:path";
|
|
16
16
|
|
|
17
17
|
// server/atomic.ts
|
|
18
18
|
import { randomUUID } from "node:crypto";
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
closeSync,
|
|
21
|
+
constants,
|
|
22
|
+
fstatSync,
|
|
23
|
+
fsyncSync,
|
|
24
|
+
lstatSync,
|
|
25
|
+
openSync,
|
|
26
|
+
readFileSync,
|
|
27
|
+
renameSync,
|
|
28
|
+
unlinkSync,
|
|
29
|
+
writeFileSync
|
|
30
|
+
} from "node:fs";
|
|
20
31
|
var RENAME_RETRY_DELAYS_MS = [5, 10, 20, 40, 80];
|
|
21
32
|
var RETRYABLE_RENAME_CODES = /* @__PURE__ */ new Set(["EPERM", "EACCES", "EBUSY"]);
|
|
22
33
|
function sleepSync(ms) {
|
|
@@ -40,7 +51,7 @@ function writeFileAtomic(path, data, options = {}) {
|
|
|
40
51
|
try {
|
|
41
52
|
fd = openSync(tmp, "w", options.mode);
|
|
42
53
|
writeFileSync(fd, data);
|
|
43
|
-
fsyncSync(fd);
|
|
54
|
+
if (options.durable !== false) fsyncSync(fd);
|
|
44
55
|
closeSync(fd);
|
|
45
56
|
fd = null;
|
|
46
57
|
renameWithRetry(tmp, path);
|
|
@@ -14707,11 +14718,11 @@ function prepareCloudHomeVolume(home, machineId) {
|
|
|
14707
14718
|
mkdirSync(home, { recursive: true, mode: 448 });
|
|
14708
14719
|
const marker = join2(home, CLOUD_HOME_MARKER);
|
|
14709
14720
|
if (existsSync2(marker)) {
|
|
14710
|
-
const stat =
|
|
14721
|
+
const stat = lstatSync2(marker);
|
|
14711
14722
|
let saved;
|
|
14712
14723
|
try {
|
|
14713
14724
|
if (!stat.isFile() || stat.size > 4096) throw new Error();
|
|
14714
|
-
saved = JSON.parse(
|
|
14725
|
+
saved = JSON.parse(readFileSync2(marker, "utf8"));
|
|
14715
14726
|
} catch {
|
|
14716
14727
|
throw new Error("This volume's Cloud marker is unreadable. No data was changed.");
|
|
14717
14728
|
}
|
|
@@ -14838,12 +14849,12 @@ function spawnWithSecrets(command, args, env, secrets, ids) {
|
|
|
14838
14849
|
function startCloudHome(env = process.env) {
|
|
14839
14850
|
process.umask(63);
|
|
14840
14851
|
const config2 = cloudHomeConfiguration(env);
|
|
14841
|
-
if (!config2) throw new Error("This image runs
|
|
14852
|
+
if (!config2) throw new Error("This image runs a My Cloud machine for OpenMausBot Cloud; set its boot contract (docs/cloud-pro.md).");
|
|
14842
14853
|
for (const warning of config2.warnings) console.warn(`cloud home: ${warning}`);
|
|
14843
14854
|
const home = env.HOME || "/data";
|
|
14844
14855
|
let ids = null;
|
|
14845
14856
|
if (process.getuid?.() === 0) {
|
|
14846
|
-
ids = passwdIds(
|
|
14857
|
+
ids = passwdIds(readFileSync3("/etc/passwd", "utf8"), SERVICE_USER);
|
|
14847
14858
|
if (!ids) throw new Error(`The ${SERVICE_USER} user is missing from this image.`);
|
|
14848
14859
|
const stat = statSync(home);
|
|
14849
14860
|
if (stat.uid !== ids.uid || stat.gid !== ids.gid) chownSync(home, ids.uid, ids.gid);
|
|
@@ -14864,7 +14875,7 @@ function startCloudHome(env = process.env) {
|
|
|
14864
14875
|
const edgeConfig = env.OMB_CLOUD_EDGE_CONFIG || "/app/cloud/Caddyfile";
|
|
14865
14876
|
if (ids) {
|
|
14866
14877
|
const problem = codeTrustProblem([process.execPath, fileURLToPath2(import.meta.url), join3(here, "index.js"), edgeBin, edgeConfig], home);
|
|
14867
|
-
if (problem) throw new Error(`This image's code is not safe to run as root: ${problem}. Rebuild it
|
|
14878
|
+
if (problem) throw new Error(`This image's code is not safe to run as root: ${problem}. Rebuild it with docker build --target cloud-home.`);
|
|
14868
14879
|
}
|
|
14869
14880
|
const { server, edge, secrets, dropped } = cloudHomeChildEnvironments(config2, env, home);
|
|
14870
14881
|
if (dropped.length) console.log(`cloud home: not passed to the server: ${dropped.join(", ")}`);
|
|
@@ -15824,6 +15824,8 @@ var BROWSER_PROFILE_ID = /^[a-z0-9_-]{1,40}$/;
|
|
|
15824
15824
|
var FISH_TTS_MODELS = ["s2.1-pro", "s2.1-pro-free"];
|
|
15825
15825
|
var MIN_ROOM_TURN_TIMEOUT_MINUTES = 1;
|
|
15826
15826
|
var MAX_ROOM_TURN_TIMEOUT_MINUTES = 1440;
|
|
15827
|
+
var MIN_MCP_CALL_TIMEOUT_MINUTES = 1;
|
|
15828
|
+
var MAX_MCP_CALL_TIMEOUT_MINUTES = 60;
|
|
15827
15829
|
var DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES = 30;
|
|
15828
15830
|
var DEFAULT_ROOM_HANDOFF_MIN_RUNWAY_MINUTES = 10;
|
|
15829
15831
|
var DEFAULT_ROOM_HANDOFF_HARD_CAP_MINUTES = 240;
|
|
@@ -15869,6 +15871,11 @@ var roomConfigSchema = external_exports.object({
|
|
|
15869
15871
|
(rooms) => (rooms.handoffMinRunwayMinutes ?? DEFAULT_ROOM_HANDOFF_MIN_RUNWAY_MINUTES) <= (rooms.handoffLifetimeMinutes ?? DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES) && (rooms.handoffLifetimeMinutes ?? DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES) <= (rooms.handoffHardCapMinutes ?? DEFAULT_ROOM_HANDOFF_HARD_CAP_MINUTES),
|
|
15870
15872
|
{ message: "rooms handoff bounds must satisfy handoffMinRunwayMinutes <= handoffLifetimeMinutes <= handoffHardCapMinutes" }
|
|
15871
15873
|
);
|
|
15874
|
+
var mcpConfigSchema = external_exports.object({
|
|
15875
|
+
/** Ceiling (minutes) for one bot MCP tool call. Missing values resolve to
|
|
15876
|
+
* 10, preserving the historic chat-mcp-tools constant. */
|
|
15877
|
+
callTimeoutMinutes: external_exports.number().int().min(MIN_MCP_CALL_TIMEOUT_MINUTES).max(MAX_MCP_CALL_TIMEOUT_MINUTES).optional()
|
|
15878
|
+
}).strict();
|
|
15872
15879
|
var localVmConfigSchema = external_exports.object({
|
|
15873
15880
|
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
15874
15881
|
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional(),
|
|
@@ -16207,6 +16214,7 @@ var appConfigSchema = external_exports.object({
|
|
|
16207
16214
|
* system language. Unknown tags degrade to English in the renderer. */
|
|
16208
16215
|
language: optionalText,
|
|
16209
16216
|
rooms: roomConfigSchema.optional(),
|
|
16217
|
+
mcp: mcpConfigSchema.optional(),
|
|
16210
16218
|
context: external_exports.object({
|
|
16211
16219
|
rebuildBytes: external_exports.number().int().min(1024).max(1e6).optional(),
|
|
16212
16220
|
compactAt: external_exports.number().positive().max(1e7).optional(),
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// The packaged desktop forks this file instead of the index.js beside it
|
|
2
|
+
// (electron/server-child-launch.mjs). It turns on Node's on-disk compile
|
|
3
|
+
// cache for this one process, so a relaunch reuses the compiled 5 MB bundle
|
|
4
|
+
// instead of parsing and compiling all of it again, then runs the server
|
|
5
|
+
// unchanged. Copied verbatim to dist-server/desktop-entry.mjs by
|
|
6
|
+
// scripts/bundle-server.mjs: bundling it would inline index.js and defeat
|
|
7
|
+
// the point.
|
|
8
|
+
import module from "node:module";
|
|
9
|
+
import { lstatSync, readdirSync, rmSync, utimesSync } from "node:fs";
|
|
10
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
11
|
+
|
|
12
|
+
const cacheRoot = process.env.OMB_SERVER_COMPILE_CACHE;
|
|
13
|
+
// Engine CLIs, MCP servers and terminals the server spawns must not inherit
|
|
14
|
+
// it. enableCompileCache does not set NODE_COMPILE_CACHE, so they inherit
|
|
15
|
+
// nothing from this.
|
|
16
|
+
delete process.env.OMB_SERVER_COMPILE_CACHE;
|
|
17
|
+
|
|
18
|
+
let enabled = false;
|
|
19
|
+
if (cacheRoot) {
|
|
20
|
+
try {
|
|
21
|
+
enabled = module.enableCompileCache(cacheRoot).status === module.constants.compileCacheStatus.ENABLED;
|
|
22
|
+
} catch {
|
|
23
|
+
// An unusable cache costs only the compile it would have saved.
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
await import("./index.js");
|
|
28
|
+
|
|
29
|
+
// Node writes new entries when the process exits normally; a crash or a
|
|
30
|
+
// Windows kill skips that, so write them once the server is up. Then drop
|
|
31
|
+
// caches of other Node versions (one is left behind by each Electron
|
|
32
|
+
// upgrade) that no launch has used for a day. Only `v<node version>-…`
|
|
33
|
+
// directories inside the cache root Node reports are ever removed.
|
|
34
|
+
if (enabled) {
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
try {
|
|
37
|
+
module.flushCompileCache();
|
|
38
|
+
const current = module.getCompileCacheDir();
|
|
39
|
+
if (dirname(current) !== resolve(cacheRoot)) return;
|
|
40
|
+
const now = new Date();
|
|
41
|
+
utimesSync(current, now, now);
|
|
42
|
+
for (const name of readdirSync(cacheRoot)) {
|
|
43
|
+
if (name === basename(current) || !/^v\d+\.\d+\.\d+-/.test(name)) continue;
|
|
44
|
+
const stale = join(cacheRoot, name);
|
|
45
|
+
const stat = lstatSync(stale);
|
|
46
|
+
if (stat.isDirectory() && now - stat.mtimeMs > 24 * 60 * 60 * 1000) {
|
|
47
|
+
rmSync(stale, { recursive: true, force: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} catch {
|
|
51
|
+
// Best effort: anything not written or removed now is retried next launch.
|
|
52
|
+
}
|
|
53
|
+
}, 10_000).unref();
|
|
54
|
+
}
|
|
@@ -23,7 +23,7 @@ var CREDENTIAL_TARGETS = {
|
|
|
23
23
|
},
|
|
24
24
|
opencodeGoApiKey: {
|
|
25
25
|
label: "OpenCode API key",
|
|
26
|
-
description: "Used for OpenCode
|
|
26
|
+
description: "Used for OpenCode Zen and Go.",
|
|
27
27
|
placeholder: "Paste your OpenCode API key",
|
|
28
28
|
helpUrl: "https://opencode.ai/docs/providers/"
|
|
29
29
|
},
|
|
@@ -131,6 +131,7 @@ function catalogProfileFromEnv(env) {
|
|
|
131
131
|
voiceNotes: env.OMB_VOICE_NOTES === "1",
|
|
132
132
|
cloudHome: env.OMB_CLOUD_HOME === "1",
|
|
133
133
|
memoryEnabled: env.OMB_MEMORY_ENABLED !== "0",
|
|
134
|
+
chief: env.OMB_CHIEF_OF_STAFF === "1",
|
|
134
135
|
botId: env.OMB_BOT_ID ?? ""
|
|
135
136
|
};
|
|
136
137
|
}
|
|
@@ -226,7 +227,7 @@ var ROUTINE_FIELDS_SCHEMA = {
|
|
|
226
227
|
type: "string",
|
|
227
228
|
// "box" is Boat's historical run_on destination id (agents wire contract).
|
|
228
229
|
enum: ["maus", "box"],
|
|
229
|
-
description: "Default maus keeps the bot's selected model and configured computer, INCLUDING a self-hosted VPS. Omit this field for normal schedules. box runs on the bot's
|
|
230
|
+
description: "Default maus keeps the bot's selected model and configured computer, INCLUDING a self-hosted VPS. Omit this field for normal schedules. box runs on the bot's cloud computer, same model; it needs cloud computers set up and is not the generic cloud/VPS option. Legacy cloud values from list_routines mean box, not VPS."
|
|
230
231
|
},
|
|
231
232
|
timeout_minutes: {
|
|
232
233
|
type: "integer",
|
|
@@ -240,7 +241,7 @@ var ROUTINE_FIELDS_SCHEMA = {
|
|
|
240
241
|
},
|
|
241
242
|
continuity: {
|
|
242
243
|
type: "boolean",
|
|
243
|
-
description: "Opt in to using the latest completed run's bounded report as historical context. Defaults to false; set false in an update to start fresh again. Included in the applied result or pending confirmation."
|
|
244
|
+
description: "Opt in to using the latest completed run's bounded report as historical context. Use it for recurring work that builds on last time, such as QA passes, monitoring or follow-ups. Defaults to false; set false in an update to start fresh again. Included in the applied result or pending confirmation."
|
|
244
245
|
},
|
|
245
246
|
overlap: {
|
|
246
247
|
type: "string",
|
|
@@ -248,6 +249,7 @@ var ROUTINE_FIELDS_SCHEMA = {
|
|
|
248
249
|
description: "While this routine is still working, skip scheduled occurrences (default) or queue at most one run. Queue skips further occurrences until the pending run starts; it never builds an unlimited backlog. Manual and webhook requests are separate."
|
|
249
250
|
}
|
|
250
251
|
};
|
|
252
|
+
var CHIEF_PROFILE_TARGET = " A Chief of Staff may pass for_bot_id (from list_bots) for a requested change to another bot in its section.";
|
|
251
253
|
var PROPOSAL_OUTCOME = " Read the result: granted Full Access may apply the change immediately. If applied, continue the requested work without another confirmation. Only a pending result requires ending the turn and waiting for the in-app decision. Never claim success from the permission mode alone; report failed or cancelled results honestly. This does not elevate another bot's execution permissions.";
|
|
252
254
|
var toolDefinitions = (externalRuntime) => [
|
|
253
255
|
{
|
|
@@ -393,7 +395,7 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
393
395
|
surface: {
|
|
394
396
|
type: "string",
|
|
395
397
|
enum: ["auto", "cloud", "vm", "local", "browser"],
|
|
396
|
-
description: "auto = suitable configured computer, cloud =
|
|
398
|
+
description: "auto = suitable configured computer, cloud = the bot's cloud computer or self-hosted VPS, vm = isolated Local VM, local = user's own desktop, browser = built-in browser. Omit to list."
|
|
397
399
|
}
|
|
398
400
|
} }
|
|
399
401
|
},
|
|
@@ -755,7 +757,7 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
755
757
|
},
|
|
756
758
|
{
|
|
757
759
|
name: "propose_profile",
|
|
758
|
-
description: "Submit user-requested changes to your own name, title, description, standing instructions (SOUL.md), working folder (cwd), or your alert and voice toggles (notifications, speakReplies). Keep SOUL.md short \u2014 who you are and the rules you never break; put step-by-step procedure into a skill instead.
|
|
760
|
+
description: "Submit user-requested changes to your own name, title, description, standing instructions (SOUL.md), working folder (cwd), or your alert and voice toggles (notifications, speakReplies). Keep SOUL.md short \u2014 who you are and the rules you never break; put step-by-step procedure into a skill instead." + CHIEF_PROFILE_TARGET + PROPOSAL_OUTCOME,
|
|
759
761
|
inputSchema: {
|
|
760
762
|
type: "object",
|
|
761
763
|
additionalProperties: false,
|
|
@@ -939,6 +941,16 @@ var toolDefinitions = (externalRuntime) => [
|
|
|
939
941
|
var SKILL_TOOL_NAMES = /* @__PURE__ */ new Set(["skills_list", "skill_manage"]);
|
|
940
942
|
var SHARED_COMPUTER_TOOL_NAMES = /* @__PURE__ */ new Set(["list_shared_computers", "shared_computer"]);
|
|
941
943
|
var VOICE_TOOL_NAMES = /* @__PURE__ */ new Set(["send_voice_note"]);
|
|
944
|
+
var CHIEF_ONLY_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
945
|
+
"create_bot",
|
|
946
|
+
"list_team_setup",
|
|
947
|
+
"propose_team_setup",
|
|
948
|
+
"propose_bot_deletion",
|
|
949
|
+
"create_room",
|
|
950
|
+
"manage_room",
|
|
951
|
+
"retry_thread"
|
|
952
|
+
]);
|
|
953
|
+
var CHIEF_TARGET_TOOL_NAMES = /* @__PURE__ */ new Set(["propose_profile", "propose_model"]);
|
|
942
954
|
var ROOM_ONLY_TOOLS = /* @__PURE__ */ new Set(["list_room_targets", "coordinate_bots", "send_to_bot"]);
|
|
943
955
|
var ROOM_REPLACED_TOOLS = /* @__PURE__ */ new Set(["ask_bot", "delegate_bot", "check_delegation", "wait_delegation", "start_thread"]);
|
|
944
956
|
var EXTERNAL_TOOL_NAMES = /* @__PURE__ */ new Set(["list_bots", "ask_bot", "delegate_bot", "check_delegation", "wait_delegation"]);
|
|
@@ -947,7 +959,7 @@ var LOCAL_VM_TOOL_NAMES = /* @__PURE__ */ new Set(["vm_exec"]);
|
|
|
947
959
|
var CLOUD_HOME_SURFACE = {
|
|
948
960
|
type: "string",
|
|
949
961
|
enum: ["auto", "cloud", "browser"],
|
|
950
|
-
description: "auto = suitable configured computer, cloud =
|
|
962
|
+
description: "auto = suitable configured computer, cloud = the bot's cloud computer, browser = built-in browser. Omit to list. This server runs in the cloud: the user's own computer and a Local VM are not places here."
|
|
951
963
|
};
|
|
952
964
|
function availableTools(profile) {
|
|
953
965
|
const tools = catalogTools(profile);
|
|
@@ -959,14 +971,19 @@ function catalogTools(profile) {
|
|
|
959
971
|
const AUTHORING_TOOLS = profile.skillAuthoring ? BOT_SCOPED_TOOLS : BOT_SCOPED_TOOLS.filter((tool) => !SKILL_TOOL_NAMES.has(tool.name));
|
|
960
972
|
const SHAREABLE_TOOLS = profile.sharedComputers ? AUTHORING_TOOLS : AUTHORING_TOOLS.filter((tool) => !SHARED_COMPUTER_TOOL_NAMES.has(tool.name));
|
|
961
973
|
const VOICE_READY_TOOLS = profile.voiceNotes ? SHAREABLE_TOOLS : SHAREABLE_TOOLS.filter((tool) => !VOICE_TOOL_NAMES.has(tool.name));
|
|
962
|
-
|
|
974
|
+
const ROLE_TOOLS = profile.chief ? VOICE_READY_TOOLS : VOICE_READY_TOOLS.filter((tool) => !CHIEF_ONLY_TOOL_NAMES.has(tool.name)).map((tool) => {
|
|
975
|
+
if (!CHIEF_TARGET_TOOL_NAMES.has(tool.name)) return tool;
|
|
976
|
+
const properties = Object.fromEntries(Object.entries(tool.inputSchema.properties).filter(([key]) => key !== "for_bot_id"));
|
|
977
|
+
return { ...tool, description: tool.description.replace(CHIEF_PROFILE_TARGET, ""), inputSchema: { ...tool.inputSchema, properties } };
|
|
978
|
+
});
|
|
979
|
+
return profile.externalRuntime ? BOT_SCOPED_TOOLS.filter((tool) => EXTERNAL_TOOL_NAMES.has(tool.name)) : profile.coordinating ? ROLE_TOOLS.filter((tool) => !ROOM_REPLACED_TOOLS.has(tool.name) || tool.name === "start_thread" && profile.ownThreadCreation).map((tool) => tool.name === "start_thread" ? {
|
|
963
980
|
...tool,
|
|
964
981
|
description: "Open a separate job on yourself with its own history and run, without switching the person's selected conversation. Use only when the user requests independent jobs (for example one review per pull request). Give a short specific title and complete instructions; you can open at most five per turn. This is not a teammate handoff: use coordinate_bots for teammates and their automatic replies. Self-opened jobs cannot recursively open more jobs. If refused, do not retry; explain what remains.",
|
|
965
982
|
inputSchema: { ...tool.inputSchema, properties: {
|
|
966
983
|
...tool.inputSchema.properties,
|
|
967
984
|
bot_id: { type: "string", enum: [profile.botId], description: "Leave out, or use your own bot ID. For teammates use coordinate_bots." }
|
|
968
985
|
} }
|
|
969
|
-
} : tool) :
|
|
986
|
+
} : tool) : ROLE_TOOLS.filter((tool) => !ROOM_ONLY_TOOLS.has(tool.name));
|
|
970
987
|
}
|
|
971
988
|
|
|
972
989
|
// node_modules/.pnpm/croner@10.0.1/node_modules/croner/dist/croner.js
|
|
@@ -16517,7 +16534,7 @@ function routineFields(args) {
|
|
|
16517
16534
|
const runOn = destination(args.run_on ?? args.runOn);
|
|
16518
16535
|
const timeoutMinutes = args.timeout_minutes ?? args.timeoutMinutes;
|
|
16519
16536
|
if (runOn != null && runOn !== "maus" && runOn !== "cloud") {
|
|
16520
|
-
return { fields, error: 'Use run_on="maus" for the bot\u2019s current model and configured computer (including VPS), or run_on="box" only for the bot\u2019s
|
|
16537
|
+
return { fields, error: 'Use run_on="maus" for the bot\u2019s current model and configured computer (including VPS), or run_on="box" only for the bot\u2019s cloud computer. Legacy "cloud" also means box.' };
|
|
16521
16538
|
}
|
|
16522
16539
|
if (timeoutMinutes != null && (typeof timeoutMinutes !== "number" || !Number.isInteger(timeoutMinutes) || timeoutMinutes < 5 || timeoutMinutes > 240)) {
|
|
16523
16540
|
return { fields, error: "timeout_minutes must be a whole number from 5 to 240. Use clear_timeout to remove a limit." };
|