openmausbot 0.1.89 → 0.1.91
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/{abnfDiagram-O67JEVCF-BwaMaZEm.js → abnfDiagram-O67JEVCF-yP-w8pRq.js} +1 -1
- package/dist/assets/{arc-Be-8GKxd.js → arc-DsivfZEh.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-Dp_U2Kv1.js → architectureDiagram-NJMV4G6O-CILw7lzT.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-DQjUjYUk.js → blockDiagram-BEXU5L5S-DEQUV3HF.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-Bd3aE4Kc.js → c4Diagram-YGBWAQC7-lSXCZoKA.js} +1 -1
- package/dist/assets/channel-DrfGMu7X.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BijjTBeJ.js → chunk-2Q5K7J3B-QCD5bgWP.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-CMGdwvzW.js → chunk-3FUC2YCW-C5-iZJuL.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-0G09BfsZ.js → chunk-5VM5RSS4-cxsawMpY.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-FOp3vSHe.js → chunk-GTNCS2PH-DV8tV8H7.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-Dv-20VIn.js → chunk-GWA4HPMP-CJFZyfbW.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CRgrdFcz.js → chunk-JWPE2WC7-BigbMXco.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-3hP4f7QB.js → chunk-NETBCI7D-oVxTfpDy.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-CG98IjlG.js → chunk-WEXAMYUT-CH4BiroW.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-BrSTC9xG.js → chunk-XXDRQBXY-KEDa6gax.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-rpQQQDFX.js → classDiagram-v2-NBCMYWYE-BiPjfqVv.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-G6RSafHA.js → cose-bilkent-JH36ORCC-Caxew3OY.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-CXjv-IM2.js → cynefin-OW5HDTMX-B_Pui369.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-Dw07MR9f.js → cynefinDiagram-VND7K2PF-X64ydIhP.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-BwPnlTg2.js → dagre-6A5THRUB-TqYCI1E1.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-Cm6xcMiz.js → diagram-22UHCM2B-TeOt3rAQ.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-CDpogPbE.js → diagram-3UASUU5V-D70BLhDA.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-BV8z3Pnc.js → diagram-ATOU4E4O-BbQDLwUC.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-CKCQhOOC.js → diagram-CDSNMT55-ChNJZ1u-.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-FGvJg69C.js → diagram-MLGK6HIB-DMBl2APa.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-CwATvgnS.js → diagram-MPIPVDR6-CEqDchOp.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-CH_c3SSC.js → ebnfDiagram-ZINNZB2B-BVDKRp_-.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-3guZi71R.js → elk-276RUBZZ-CRkofO9B.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-BMHphR2n.js → erDiagram-OPXOYQCR-DruOMh5e.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-Vm5DkW5x.js → flowDiagram-KWPJA3E3-8GMQeB7t.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-DO-1ct07.js → ganttDiagram-FUAMR5RP-ORE9jcsM.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-nxeksEIN.js → gitGraphDiagram-X574FWY7-BmsedsWh.js} +1 -1
- package/dist/assets/index-BlnCEcU6.js +588 -0
- package/dist/assets/{index-Oxk9x45i.js → index-DKNEM8Q6.js} +1 -1
- package/dist/assets/index-DVxjOvID.css +1 -0
- package/dist/assets/{infoDiagram-VRGFBTTK-Dkcvr0p7.js → infoDiagram-VRGFBTTK-E_p7AooJ.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-BwVibkoO.js → ishikawaDiagram-OU5B5YK6-Y-B2mKda.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-ByiBZqgG.js → journeyDiagram-ZHPQQLJL-eA8RELcK.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-qqjgXBF3.js → kanban-definition-PNTS6WVX-DqIL2e8e.js} +1 -1
- package/dist/assets/{linear-CtJnKe6A.js → linear-yC_29R6e.js} +1 -1
- package/dist/assets/{mermaid.core-BEiDklrY.js → mermaid.core-VhEMkSND.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-DfIYHia9.js → mindmap-definition-NLK3R4M7-oJ7kyQZy.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-CYyRqa1a.js → pegDiagram-GJSIUBJH-BmfYcY0O.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-hOToy_zH.js → pieDiagram-5QR66LMP-DKvgP7w9.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-DKAsNN9I.js → quadrantDiagram-O4NWA36T-BEKL3W0L.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-BSA-d8JU.js → railroadDiagram-XR7U4H2S-BEsiqR5s.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-CSmlvb-p.js → requirementDiagram-PLB6GJNP-DWBcWvAP.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-CD5F6fnG.js → sankeyDiagram-IPEJSGJF-rpZ2_O4s.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-JUq5sx6d.js → sequenceDiagram-PO4LG4MO-B99HQdJR.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BjIS-Stk.js → sizeCapture-INFHLROL-BjN0qT5T.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-DklkUxOg.js → stateDiagram-v2-GCMORJYK-BbsVgGsC.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-CsjIU6be.js → swimlanes-2SLR337P-DG3gKkeR.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BCZhxl7e.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BkFqK7AB.js → timeline-definition-EJHVYXUP-BTHOdtF_.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-70gJB1EU.js → usecaseDiagram-POWQR4AR-acLSLFwc.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-83Tm62dN.js → vennDiagram-UO4OBE2U-C5JzNX9G.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-tTmseoX9.js → wardleyDiagram-VNRHLVJA-DL1-PrR_.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-R1LBA55a.js → xychartDiagram-PMCCYNJV-Bvr1477p.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +14810 -0
- package/dist-server/container-mcp.js +136 -36
- package/dist-server/drivers/agents-proxy.js +31 -10
- package/dist-server/index.js +48251 -44124
- package/dist-server/openmausbot.js +628 -292
- package/dist-server/pair-cli.js +628 -292
- package/dist-server/permission-proxy.js +1 -1
- package/dist-server/server/admission.js +46 -0
- package/dist-server/server/{box-create-idempotency.js → boat-create-idempotency.js} +32 -31
- package/dist-server/server/{box-delete-journal.js → boat-delete-journal.js} +26 -25
- package/dist-server/server/{box.js → boat.js} +381 -334
- package/dist-server/server/bot-overview.js +7 -4
- package/dist-server/server/bot-profile.js +7 -1
- package/dist-server/server/channel-queue.js +58 -18
- package/dist-server/server/checkpoints.js +98 -52
- package/dist-server/server/claim-idle.js +33 -0
- package/dist-server/server/cloud-backend.js +5 -5
- package/dist-server/server/cloud-home-start.js +121 -0
- package/dist-server/server/cloud-home.js +241 -0
- package/dist-server/server/cloud-lending.js +103 -0
- package/dist-server/server/cloud-move-http.js +268 -0
- package/dist-server/server/cloud-move.js +418 -0
- package/dist-server/server/cloud-overflow.js +167 -0
- package/dist-server/server/composio.js +5 -0
- package/dist-server/server/computer-observation.js +2 -2
- package/dist-server/server/config.js +156 -9
- package/dist-server/server/container-computer.js +13 -0
- package/dist-server/server/control-client.js +2 -2
- package/dist-server/server/decider/index.js +238 -0
- package/dist-server/server/decider/jev.js +183 -0
- package/dist-server/server/decider/log.js +62 -0
- package/dist-server/server/decider/relay.js +52 -0
- package/dist-server/server/decider/room-routing.js +88 -0
- package/dist-server/server/decider/types.js +5 -0
- package/dist-server/server/delegations.js +11 -3
- package/dist-server/server/drivers/acp/core.js +5 -4
- package/dist-server/server/drivers/agents-call.js +5 -1
- package/dist-server/server/drivers/agents-catalog.js +25 -3
- package/dist-server/server/drivers/{boxagent.js → boatagent.js} +30 -21
- package/dist-server/server/drivers/builtIn.js +2 -2
- package/dist-server/server/drivers/{chat-box-tools.js → chat-boat-tools.js} +3 -3
- package/dist-server/server/drivers/chat-mcp-tools.js +2 -2
- package/dist-server/server/drivers/claude.js +178 -13
- package/dist-server/server/drivers/native.js +1 -1
- package/dist-server/server/drivers/openai-chat.js +15 -4
- package/dist-server/server/drivers/pi.js +3 -3
- package/dist-server/server/group-goal-run.js +6 -4
- package/dist-server/server/harness-capabilities.js +2 -0
- package/dist-server/server/hosted-models.js +6 -1
- package/dist-server/server/included-services.js +70 -0
- package/dist-server/server/index.js +1462 -576
- package/dist-server/server/local-vm-inventory.js +11 -1
- package/dist-server/server/local-vm-seat-pool.js +141 -0
- package/dist-server/server/managed-policy.js +4 -1
- package/dist-server/server/memory-capture.js +194 -0
- package/dist-server/server/memory-entries.js +76 -0
- package/dist-server/server/memory-organize.js +102 -0
- package/dist-server/server/memory-tidy.js +144 -0
- package/dist-server/server/memory-topics.js +169 -0
- package/dist-server/server/memory-upkeep.js +452 -0
- package/dist-server/server/message-db.js +49 -5
- package/dist-server/server/model-context-window.js +4 -4
- package/dist-server/server/package-export.js +17 -10
- package/dist-server/server/package-import.js +6 -3
- package/dist-server/server/package-parts.js +3 -1
- package/dist-server/server/permission-proxy.js +3 -3
- package/dist-server/server/profile-learned.js +98 -0
- package/dist-server/server/profile-versions.js +45 -11
- package/dist-server/server/recall.js +172 -0
- package/dist-server/server/redact.js +1 -1
- package/dist-server/server/request-auth.js +2 -0
- package/dist-server/server/room-cwd.js +1 -1
- package/dist-server/server/room-handoffs.js +61 -6
- package/dist-server/server/routes/bot-memory.js +215 -0
- package/dist-server/server/routes/decider.js +19 -0
- package/dist-server/server/routine-requests.js +27 -16
- package/dist-server/server/routines.js +10 -6
- package/dist-server/server/shared-computers.js +116 -30
- package/dist-server/server/steer-queue.js +41 -10
- package/dist-server/server/store.js +42 -3
- package/dist-server/server/surface.js +14 -1
- package/dist-server/server/system-prompt.js +16 -5
- package/dist-server/server/team-backup.js +6 -2
- package/dist-server/server/team-computers.js +2 -2
- package/dist-server/server/team-manifest.js +11 -3
- package/dist-server/server/tightening-requests.js +34 -4
- package/dist-server/server/tool-summary.js +2 -2
- package/dist-server/server/tts/elevenlabs.js +12 -7
- package/dist-server/server/tts/index.js +17 -10
- package/dist-server/server/turn-resources.js +87 -11
- package/dist-server/server/vps-computer.js +1 -1
- package/dist-server/server/workspace-backup-policy.js +22 -3
- package/dist-server/server/workspace-backup.js +25 -8
- package/dist-server/server/workspace.js +57 -22
- package/dist-server/shared/ask-question.js +7 -5
- package/dist-server/shared/bot-avatar.js +19 -0
- package/dist-server/shared/cloud-home.js +4 -0
- package/dist-server/shared/credential-request.js +3 -3
- package/dist-server/shared/package-format.js +30 -4
- package/dist-server/shared/team-backup.js +20 -3
- package/dist-server/shared/tool-surface.js +1 -1
- package/dist-server/src/lib/composer-attachments.js +9 -0
- package/dist-server/vps-container-mcp.js +136 -36
- package/dist-server/workspace-backup.worker.js +165 -35
- package/package.json +1 -1
- package/dist/assets/channel-DqY_gMLg.js +0 -1
- package/dist/assets/index-BIMdIbaw.css +0 -1
- package/dist/assets/index-BVPdbq2r.js +0 -583
- package/dist/assets/swimlanesDiagram-TC7HE7FX-Bk14M0_B.js +0 -8
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
cpSync,
|
|
17
17
|
createReadStream,
|
|
18
18
|
createWriteStream,
|
|
19
|
-
existsSync,
|
|
19
|
+
existsSync as existsSync2,
|
|
20
20
|
fstatSync,
|
|
21
21
|
fsyncSync as fsyncSync2,
|
|
22
22
|
lstatSync,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
writeFileSync as writeFileSync2,
|
|
32
32
|
writeSync
|
|
33
33
|
} from "node:fs";
|
|
34
|
-
import { isAbsolute, join as
|
|
34
|
+
import { isAbsolute, join as join3, parse as parse3, posix, relative, resolve, win32 } from "node:path";
|
|
35
35
|
import { homedir as homedir2 } from "node:os";
|
|
36
36
|
import { backup, DatabaseSync } from "node:sqlite";
|
|
37
37
|
import { pipeline } from "node:stream/promises";
|
|
@@ -3178,7 +3178,7 @@ var WORKSPACE_BACKUP_CLIENT_KEYS = [
|
|
|
3178
3178
|
|
|
3179
3179
|
// server/config.ts
|
|
3180
3180
|
import { homedir } from "node:os";
|
|
3181
|
-
import { join } from "node:path";
|
|
3181
|
+
import { join as join2 } from "node:path";
|
|
3182
3182
|
|
|
3183
3183
|
// node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
3184
3184
|
var external_exports = {};
|
|
@@ -17716,6 +17716,8 @@ function normalizeImageGenerationUrl(value) {
|
|
|
17716
17716
|
// shared/bot-avatar.ts
|
|
17717
17717
|
var BOT_AVATAR_CROPS = ["mascot", "circle", "rounded", "square"];
|
|
17718
17718
|
var botAvatarCropSchema = external_exports.enum(BOT_AVATAR_CROPS);
|
|
17719
|
+
var AVATAR_ZOOM_MIN = 1;
|
|
17720
|
+
var AVATAR_ZOOM_MAX = 3;
|
|
17719
17721
|
var botAvatarUrlSchema = external_exports.string().regex(
|
|
17720
17722
|
/^\/api\/attachments\/[A-Za-z0-9-]+\.(?:png|jpg|gif|webp)$/,
|
|
17721
17723
|
"must be a stored PNG, JPEG, GIF, or WebP attachment"
|
|
@@ -17754,6 +17756,9 @@ var profilePatchSchema = external_exports.object({
|
|
|
17754
17756
|
error: "avatarUrl must be a stored PNG, JPEG, GIF, or WebP attachment"
|
|
17755
17757
|
}).optional(),
|
|
17756
17758
|
avatarCrop: botAvatarCropSchema.optional(),
|
|
17759
|
+
avatarZoom: external_exports.number({ error: "avatarZoom must be a number from 1 to 3" }).finite().min(AVATAR_ZOOM_MIN).max(AVATAR_ZOOM_MAX).optional(),
|
|
17760
|
+
avatarFocusX: external_exports.number({ error: "avatarFocusX must be a number from 0 to 1" }).finite().min(0).max(1).optional(),
|
|
17761
|
+
avatarFocusY: external_exports.number({ error: "avatarFocusY must be a number from 0 to 1" }).finite().min(0).max(1).optional(),
|
|
17757
17762
|
mascotBody: mascotBodySchema.optional(),
|
|
17758
17763
|
voice: external_exports.string({ error: "voice must be a string" }).max(BOT_PROFILE_LIMITS.voice, { error: "voice must be at most 200 characters" }).optional(),
|
|
17759
17764
|
speakReplies: external_exports.boolean({ error: "speakReplies must be true or false" }).optional()
|
|
@@ -18697,6 +18702,76 @@ function schemaIssue(error51, fallback) {
|
|
|
18697
18702
|
return path ? `${path} ${issue2.message}` : issue2.message;
|
|
18698
18703
|
}
|
|
18699
18704
|
|
|
18705
|
+
// server/cloud-overflow.ts
|
|
18706
|
+
var CLOUD_SEAT_IDLE_STOP_MS = 5 * 6e4;
|
|
18707
|
+
var CLOUD_SEAT_SLEEP_RETRY_MAX_MS = 10 * 6e4;
|
|
18708
|
+
|
|
18709
|
+
// server/proxy-paths.ts
|
|
18710
|
+
import { existsSync } from "node:fs";
|
|
18711
|
+
import { dirname, join } from "node:path";
|
|
18712
|
+
import { fileURLToPath } from "node:url";
|
|
18713
|
+
var SERVER_ROOT = dirname(fileURLToPath(import.meta.url));
|
|
18714
|
+
function resolveProxy(relative2) {
|
|
18715
|
+
const source = join(SERVER_ROOT, `${relative2}.ts`);
|
|
18716
|
+
return existsSync(source) ? source : join(SERVER_ROOT, `${relative2}.js`);
|
|
18717
|
+
}
|
|
18718
|
+
var SPAWNED_PROXIES = {
|
|
18719
|
+
browser: resolveProxy("browser-proxy"),
|
|
18720
|
+
localComputer: resolveProxy("local-computer-proxy"),
|
|
18721
|
+
permission: resolveProxy("permission-proxy"),
|
|
18722
|
+
containerMcp: resolveProxy("container-mcp"),
|
|
18723
|
+
vpsContainerMcp: resolveProxy("vps-container-mcp"),
|
|
18724
|
+
agents: resolveProxy("drivers/agents-proxy"),
|
|
18725
|
+
dweb: resolveProxy("drivers/dweb-proxy"),
|
|
18726
|
+
connectors: resolveProxy("connector-proxy"),
|
|
18727
|
+
mcpGate: resolveProxy("mcp-gate"),
|
|
18728
|
+
phone: resolveProxy("drivers/phone-proxy"),
|
|
18729
|
+
hook: resolveProxy("hooks/omb-hook"),
|
|
18730
|
+
// Loaded by the external `pi` process via `-e`, not by this server — but
|
|
18731
|
+
// resolved through the same single source of truth so the packaged layout
|
|
18732
|
+
// check can assert it ships.
|
|
18733
|
+
piMcpExtension: resolveProxy("drivers/pi-mcp-extension")
|
|
18734
|
+
};
|
|
18735
|
+
|
|
18736
|
+
// server/enterprise.ts
|
|
18737
|
+
var layerSchema = external_exports.object({
|
|
18738
|
+
customer: external_exports.string().min(1),
|
|
18739
|
+
features: external_exports.array(external_exports.string().min(1)),
|
|
18740
|
+
expiresAt: external_exports.string().nullable()
|
|
18741
|
+
});
|
|
18742
|
+
var DAY_MS = 24 * 60 * 6e4;
|
|
18743
|
+
|
|
18744
|
+
// server/sessions.ts
|
|
18745
|
+
var PAIRING_CODE_TTL_MS = 5 * 6e4;
|
|
18746
|
+
function daysMs(value, fallbackDays) {
|
|
18747
|
+
const days = Number(value);
|
|
18748
|
+
const ok = Number.isInteger(days) && days >= 1 && days <= 3650;
|
|
18749
|
+
return (ok ? days : fallbackDays) * 24 * 60 * 6e4;
|
|
18750
|
+
}
|
|
18751
|
+
var SESSION_TTL_MS = daysMs(process.env.OMB_SESSION_TTL_DAYS, 30);
|
|
18752
|
+
var SESSION_MAX_AGE_MS = daysMs(process.env.OMB_SESSION_MAX_DAYS, 180);
|
|
18753
|
+
var SESSION_RENEW_WHEN_LEFT_MS = SESSION_TTL_MS / 2;
|
|
18754
|
+
var STREAM_TICKET_TTL_MS = 5 * 6e4;
|
|
18755
|
+
var scopeSchema = external_exports.enum(["admin", "client"]);
|
|
18756
|
+
var sessionSchema = external_exports.object({
|
|
18757
|
+
id: external_exports.string().min(1),
|
|
18758
|
+
tokenHash: external_exports.string().length(64),
|
|
18759
|
+
label: external_exports.string().max(80),
|
|
18760
|
+
scopes: external_exports.array(scopeSchema).min(1),
|
|
18761
|
+
createdAt: external_exports.number(),
|
|
18762
|
+
lastSeenAt: external_exports.number(),
|
|
18763
|
+
expiresAt: external_exports.number(),
|
|
18764
|
+
/** Set when the session came from an account sign-in rather than a code. */
|
|
18765
|
+
userId: external_exports.string().max(256).optional(),
|
|
18766
|
+
email: external_exports.string().max(320).optional(),
|
|
18767
|
+
/** Set only by the internal verified-portal issuance path, never by email or pairing input. */
|
|
18768
|
+
membershipAuthority: external_exports.literal("portal").optional()
|
|
18769
|
+
});
|
|
18770
|
+
var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
|
|
18771
|
+
|
|
18772
|
+
// server/cloud-home.ts
|
|
18773
|
+
var CLOUD_PAIRING_NONCE_MS = 10 * 6e4;
|
|
18774
|
+
|
|
18700
18775
|
// server/config.ts
|
|
18701
18776
|
var optionalText = external_exports.string().optional();
|
|
18702
18777
|
var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
|
|
@@ -18738,7 +18813,8 @@ var browserEngineConfigSchema = external_exports.object({
|
|
|
18738
18813
|
var roomConfigSchema = external_exports.object({
|
|
18739
18814
|
turnTimeoutMinutes: external_exports.number().int().min(MIN_ROOM_TURN_TIMEOUT_MINUTES).max(MAX_ROOM_TURN_TIMEOUT_MINUTES),
|
|
18740
18815
|
/** Room handoff tree lifetime. Active execution pauses this clock; the
|
|
18741
|
-
* hard cap is
|
|
18816
|
+
* hard cap is the maximum stall window, measured wall-clock from the
|
|
18817
|
+
* tree's last durable progress. */
|
|
18742
18818
|
handoffLifetimeMinutes: external_exports.number().int().min(1).max(MAX_ROOM_TURN_TIMEOUT_MINUTES).optional(),
|
|
18743
18819
|
handoffMinRunwayMinutes: external_exports.number().int().min(1).max(MAX_ROOM_TURN_TIMEOUT_MINUTES).optional(),
|
|
18744
18820
|
handoffHardCapMinutes: external_exports.number().int().min(1).max(7 * MAX_ROOM_TURN_TIMEOUT_MINUTES).optional()
|
|
@@ -18747,7 +18823,7 @@ var roomConfigSchema = external_exports.object({
|
|
|
18747
18823
|
{ message: "rooms handoff bounds must satisfy handoffMinRunwayMinutes <= handoffLifetimeMinutes <= handoffHardCapMinutes" }
|
|
18748
18824
|
);
|
|
18749
18825
|
var localVmConfigSchema = external_exports.object({
|
|
18750
|
-
mode: external_exports.enum(["shared", "per-bot"]).optional(),
|
|
18826
|
+
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
18751
18827
|
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional()
|
|
18752
18828
|
});
|
|
18753
18829
|
var browserProfileSchema = external_exports.object({
|
|
@@ -18866,6 +18942,10 @@ var featureConfigSchema = external_exports.object({
|
|
|
18866
18942
|
skillAuthoring: external_exports.boolean().optional(),
|
|
18867
18943
|
/** Show each tool run in the transcript. Off unless explicitly enabled. */
|
|
18868
18944
|
showToolCalls: external_exports.boolean().optional(),
|
|
18945
|
+
/** Run a routine inside the conversation it reports to, instead of a hidden
|
|
18946
|
+
* thread. Off unless explicitly enabled. The run still starts from its own
|
|
18947
|
+
* instructions, but the messages stay in that chat. */
|
|
18948
|
+
routinesInConversation: external_exports.boolean().optional(),
|
|
18869
18949
|
/** Experimental built-in browser. Off until explicitly enabled; each bot
|
|
18870
18950
|
* also has its own switch. */
|
|
18871
18951
|
browser: external_exports.boolean().optional(),
|
|
@@ -18879,8 +18959,23 @@ var featureConfigSchema = external_exports.object({
|
|
|
18879
18959
|
claudeUserMcp: external_exports.boolean().optional(),
|
|
18880
18960
|
/** LLM-generated titles for new bot threads. Off until explicitly
|
|
18881
18961
|
* enabled; a one-shot that fails or answers junk leaves the first-message
|
|
18882
|
-
|
|
18883
|
-
llmThreadTitles: external_exports.boolean().optional()
|
|
18962
|
+
* snippet in place — see llmThreadTitlesEnabled. */
|
|
18963
|
+
llmThreadTitles: external_exports.boolean().optional(),
|
|
18964
|
+
/** Before each turn, passages from the bot's own memory files and earlier
|
|
18965
|
+
* conversations that share words with the message ride into the turn.
|
|
18966
|
+
* Read-only; on unless explicitly switched off — see autoRecallEnabled. */
|
|
18967
|
+
autoRecall: external_exports.boolean().optional(),
|
|
18968
|
+
/** Idle release for computer claims (#1653): a desktop seat that stays
|
|
18969
|
+
* screen-quiet for 90 seconds is released to waiting turns while its
|
|
18970
|
+
* holder's turn still lives; the previous holder re-claims directly
|
|
18971
|
+
* for 10 minutes and yields to an occupied seat. Off until baked; see
|
|
18972
|
+
* computerClaimIdleReleaseEnabled for how to enable it by hand. */
|
|
18973
|
+
computerClaimIdleRelease: external_exports.boolean().optional(),
|
|
18974
|
+
/** Consented cloud overflow for local computer waits (#1655): a wait
|
|
18975
|
+
* may offer a per-second-billed cloud seat, but only through an explicit
|
|
18976
|
+
* consent card or a configured allowlist — never a silent Auto default.
|
|
18977
|
+
* Off until baked; see cloudOverflowEnabled for how to enable it by hand. */
|
|
18978
|
+
cloudOverflow: external_exports.boolean().optional()
|
|
18884
18979
|
});
|
|
18885
18980
|
var onboardingConfigSchema = external_exports.object({
|
|
18886
18981
|
/** ISO timestamp of finishing (or skipping to the end of) the welcome flow. */
|
|
@@ -18987,6 +19082,8 @@ var appConfigSchema = external_exports.object({
|
|
|
18987
19082
|
/** Project key used for Sessions, catalog and agent tools. userId/sessionId
|
|
18988
19083
|
* are non-secret local identifiers used to reuse one Composio Session. */
|
|
18989
19084
|
composio: external_exports.object({ apiKey: optionalText, userId: optionalText, sessionId: optionalText }).optional(),
|
|
19085
|
+
/** Historical config section name "box" (the persisted config.json key); the
|
|
19086
|
+
* provider is Boat now and the key is kept for compatibility. */
|
|
18990
19087
|
box: external_exports.object({ token: optionalText }).optional(),
|
|
18991
19088
|
vps: vpsConfigSchema.optional(),
|
|
18992
19089
|
/** Optional OpenCode key; persisted write-only and passed only to its child. */
|
|
@@ -19006,6 +19103,19 @@ var appConfigSchema = external_exports.object({
|
|
|
19006
19103
|
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(),
|
|
19007
19104
|
model: optionalText
|
|
19008
19105
|
}).optional(),
|
|
19106
|
+
/** The decision model (server/decider): a fast classifier that picks
|
|
19107
|
+
* things for bots, starting with who answers a room message. `key` is
|
|
19108
|
+
* write-only like every credential; `baseUrl` points at a Jev-compatible
|
|
19109
|
+
* server instead of TypeSafe's (an operator setting with no UI); `jobs`
|
|
19110
|
+
* switches each decision on or off. Not `decisions`: that section is the
|
|
19111
|
+
* authorization log's retention. */
|
|
19112
|
+
decider: external_exports.object({
|
|
19113
|
+
enabled: external_exports.boolean().optional(),
|
|
19114
|
+
provider: external_exports.enum(["jev", "off"]).optional(),
|
|
19115
|
+
key: optionalText,
|
|
19116
|
+
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(),
|
|
19117
|
+
jobs: external_exports.object({ roomRouting: external_exports.boolean().optional() }).optional()
|
|
19118
|
+
}).optional(),
|
|
19009
19119
|
/** Avatar provider credentials stay separate; choosing a router never reuses a cloud key. */
|
|
19010
19120
|
imageGen: external_exports.object({
|
|
19011
19121
|
provider: external_exports.enum(["openai", "xai", "custom"]).optional(),
|
|
@@ -19036,10 +19146,26 @@ var appConfigSchema = external_exports.object({
|
|
|
19036
19146
|
compactAt: external_exports.number().positive().max(1e7).optional(),
|
|
19037
19147
|
autoCompact: external_exports.boolean().optional()
|
|
19038
19148
|
}).optional(),
|
|
19149
|
+
/** Memory upkeep timing, for bots with Memory upkeep switched on. */
|
|
19150
|
+
memory: external_exports.object({
|
|
19151
|
+
/** Quiet time after a turn before its facts are captured (ms). */
|
|
19152
|
+
captureQuietMs: external_exports.number().int().min(1e3).max(24 * 60 * 6e4).optional(),
|
|
19153
|
+
/** Local hour (0-23) after which the nightly tidy-up runs. */
|
|
19154
|
+
tidyHour: external_exports.number().int().min(0).max(23).optional()
|
|
19155
|
+
}).strict().optional(),
|
|
19039
19156
|
threads: threadsConfigSchema.optional(),
|
|
19040
19157
|
/** The authorization decision log (server/decision-log.ts): days of month
|
|
19041
19158
|
* files kept, at least; OMB_DECISION_RETENTION_DAYS wins when set. */
|
|
19042
19159
|
decisions: external_exports.object({ retentionDays: external_exports.number().int().min(1).max(3650).optional() }).strict().optional(),
|
|
19160
|
+
/** #1655 cloud-overflow settings. perSecondCostUsd is the operator's own
|
|
19161
|
+
* verified rate: with no price configured the feature stays inert rather
|
|
19162
|
+
* than show an invented one. allowlistedThreads carries standing consent
|
|
19163
|
+
* for exact thread ids. */
|
|
19164
|
+
cloudOverflow: external_exports.object({
|
|
19165
|
+
perSecondCostUsd: external_exports.number().positive().max(10).optional(),
|
|
19166
|
+
idleStopMs: external_exports.number().int().positive().max(24 * 60 * 6e4).optional(),
|
|
19167
|
+
allowlistedThreads: external_exports.array(external_exports.string().min(1)).max(1e3).optional()
|
|
19168
|
+
}).strict().optional(),
|
|
19043
19169
|
localVm: localVmConfigSchema.optional(),
|
|
19044
19170
|
features: featureConfigSchema.optional(),
|
|
19045
19171
|
onboarding: onboardingConfigSchema.optional(),
|
|
@@ -19063,10 +19189,11 @@ function parseStoredConfig(value) {
|
|
|
19063
19189
|
if (!parsed.success) throw new Error(schemaIssue(parsed.error, "Invalid stored configuration"));
|
|
19064
19190
|
return parsed.data;
|
|
19065
19191
|
}
|
|
19066
|
-
var
|
|
19067
|
-
var
|
|
19068
|
-
var
|
|
19069
|
-
var
|
|
19192
|
+
var DEFAULT_CAPTURE_QUIET_MS = 2 * 6e4;
|
|
19193
|
+
var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir(), ".openmausbot");
|
|
19194
|
+
var LEGACY_DATA_DIR = join2(homedir(), ".opengrokbot");
|
|
19195
|
+
var EVENTS_DIR = join2(DATA_DIR, "events");
|
|
19196
|
+
var NATIVE_DIR = join2(DATA_DIR, "native");
|
|
19070
19197
|
|
|
19071
19198
|
// server/workspace-backup-policy.ts
|
|
19072
19199
|
var PORTABLE_CONFIG_KEYS = [
|
|
@@ -19093,7 +19220,7 @@ function redownloadedOrgLibraryPath(path) {
|
|
|
19093
19220
|
return /^org-library\/(?:catalog\.json(?:\.[0-9a-f-]{36}\.tmp)?$|blobs(?:\/|$))/.test(path);
|
|
19094
19221
|
}
|
|
19095
19222
|
function ephemeralWorkspaceTokenPath(path) {
|
|
19096
|
-
return /^hook-tokens(?:\/|$)/.test(path);
|
|
19223
|
+
return /^(?:hook-tokens(?:\/|$)|sessions\.json\.open$)/.test(path);
|
|
19097
19224
|
}
|
|
19098
19225
|
|
|
19099
19226
|
// server/workspace-backup.ts
|
|
@@ -19121,7 +19248,10 @@ var EXCLUDED = /* @__PURE__ */ new Set([
|
|
|
19121
19248
|
"openmausbot-server.lease",
|
|
19122
19249
|
"box-create-requests.lock",
|
|
19123
19250
|
"messages.db-wal",
|
|
19124
|
-
"messages.db-shm"
|
|
19251
|
+
"messages.db-shm",
|
|
19252
|
+
// This machine's decision-model log (server/decider/log.ts): local
|
|
19253
|
+
// measurement of what the classifier picked, not workspace data.
|
|
19254
|
+
"decider-log"
|
|
19125
19255
|
]);
|
|
19126
19256
|
var EXCLUSION_NOTES = [
|
|
19127
19257
|
"Device pairing, server identity, live leases and runtime files (existing destination identities are preserved).",
|
|
@@ -19149,13 +19279,13 @@ function backupRoot(dataDir2) {
|
|
|
19149
19279
|
if (root === parse3(root).root) throw new Error("A filesystem root cannot be a workspace backup target.");
|
|
19150
19280
|
const stat = lstatSync(root);
|
|
19151
19281
|
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("The workspace data directory must not be a symbolic link.");
|
|
19152
|
-
const path =
|
|
19282
|
+
const path = join3(root, ".backups");
|
|
19153
19283
|
folder(path);
|
|
19154
19284
|
return path;
|
|
19155
19285
|
}
|
|
19156
19286
|
function jobPath(dataDir2, id) {
|
|
19157
19287
|
if (!ID.test(id)) throw new Error("Invalid workspace backup identifier.");
|
|
19158
|
-
const path =
|
|
19288
|
+
const path = join3(backupRoot(dataDir2), id);
|
|
19159
19289
|
if (entryExists(path)) {
|
|
19160
19290
|
const stat = lstatSync(path);
|
|
19161
19291
|
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("Unsafe workspace backup job directory.");
|
|
@@ -19198,14 +19328,14 @@ function writeJson(path, value) {
|
|
|
19198
19328
|
writeFileAtomic(path, text, { mode: 384 });
|
|
19199
19329
|
}
|
|
19200
19330
|
function assertLocalAuthOutsideSnapshot(dataDir2) {
|
|
19201
|
-
const configPath =
|
|
19202
|
-
const config2 =
|
|
19331
|
+
const configPath = join3(dataDir2, "config.json");
|
|
19332
|
+
const config2 = existsSync2(configPath) ? privateJson(configPath) : {};
|
|
19203
19333
|
const instances = record2(config2) && record2(config2.instances) ? config2.instances : {};
|
|
19204
19334
|
const fields = ["HOME", "USERPROFILE", "CLAUDE_CONFIG_DIR", "CODEX_HOME", "GROK_HOME", "KIMI_CODE_HOME", "HERMES_HOME", "FACTORY_HOME_OVERRIDE", "XDG_CONFIG_HOME", "XDG_DATA_HOME", "LOCALAPPDATA"];
|
|
19205
19335
|
const check2 = (value, field, home) => {
|
|
19206
19336
|
if (typeof value !== "string" || !value.trim()) return;
|
|
19207
19337
|
const text = value.trim();
|
|
19208
|
-
const expanded = text.startsWith("~/") || text.startsWith("~\\") ?
|
|
19338
|
+
const expanded = text.startsWith("~/") || text.startsWith("~\\") ? join3(home, text.slice(2)) : text;
|
|
19209
19339
|
const resolved = resolve(expanded);
|
|
19210
19340
|
const exists = entryExists(resolved);
|
|
19211
19341
|
const path = relative(exists ? realpathSync(dataDir2) : resolve(dataDir2), exists ? realpathSync(resolved) : resolved).replaceAll("\\", "/");
|
|
@@ -19283,7 +19413,7 @@ function hashFile(path) {
|
|
|
19283
19413
|
}
|
|
19284
19414
|
}
|
|
19285
19415
|
function countJsonArray(path) {
|
|
19286
|
-
if (!
|
|
19416
|
+
if (!existsSync2(path)) return 0;
|
|
19287
19417
|
const value = privateJson(path);
|
|
19288
19418
|
if (!Array.isArray(value)) throw new Error("A workspace roster is not a valid JSON array.");
|
|
19289
19419
|
const ids = /* @__PURE__ */ new Set();
|
|
@@ -19296,7 +19426,7 @@ function countJsonArray(path) {
|
|
|
19296
19426
|
return value.length;
|
|
19297
19427
|
}
|
|
19298
19428
|
function databaseCounts(path) {
|
|
19299
|
-
if (!
|
|
19429
|
+
if (!existsSync2(path)) return { threads: 0, messages: 0 };
|
|
19300
19430
|
const db = new DatabaseSync(path, { readOnly: true });
|
|
19301
19431
|
try {
|
|
19302
19432
|
const check2 = db.prepare("PRAGMA quick_check").all();
|
|
@@ -19315,27 +19445,27 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19315
19445
|
const salt = randomBytes(16);
|
|
19316
19446
|
const key = await passwordKey(options2.password, salt);
|
|
19317
19447
|
const job = newJob(dataDir2, jobId2);
|
|
19318
|
-
const snapshot =
|
|
19319
|
-
folder(
|
|
19448
|
+
const snapshot = join3(job.directory, "snapshot");
|
|
19449
|
+
folder(join3(snapshot, "data"));
|
|
19320
19450
|
const entries = [];
|
|
19321
19451
|
const warnings = ["Stop external editors and managed desktops before exporting; files written outside this server cannot be frozen by the backup gate.", "Conversation text and user files are not redacted and may contain secrets you pasted. Keep the encrypted backup private.", RESTORE_WARNING];
|
|
19322
19452
|
let bytes = 0;
|
|
19323
19453
|
let skippedLinks = 0;
|
|
19324
19454
|
try {
|
|
19325
19455
|
const root = realpathSync(dataDir2);
|
|
19326
|
-
const sourceDb =
|
|
19327
|
-
if (
|
|
19456
|
+
const sourceDb = join3(root, "messages.db");
|
|
19457
|
+
if (existsSync2(sourceDb)) {
|
|
19328
19458
|
if (lstatSync(sourceDb).isSymbolicLink()) throw new Error("The message database must not be a symbolic link.");
|
|
19329
19459
|
const db = new DatabaseSync(sourceDb, { readOnly: true });
|
|
19330
19460
|
const completionPulse = setInterval(() => {
|
|
19331
19461
|
}, 25);
|
|
19332
19462
|
try {
|
|
19333
|
-
await backup(db,
|
|
19463
|
+
await backup(db, join3(snapshot, "messages-snapshot.db"));
|
|
19334
19464
|
} finally {
|
|
19335
19465
|
clearInterval(completionPulse);
|
|
19336
19466
|
db.close();
|
|
19337
19467
|
}
|
|
19338
|
-
const snapshotDb = new DatabaseSync(
|
|
19468
|
+
const snapshotDb = new DatabaseSync(join3(snapshot, "messages-snapshot.db"));
|
|
19339
19469
|
try {
|
|
19340
19470
|
snapshotDb.exec("PRAGMA journal_mode = DELETE");
|
|
19341
19471
|
} finally {
|
|
@@ -19349,7 +19479,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19349
19479
|
if (excludedWorkspaceAuthPath(path2) || ephemeralWorkspaceTokenPath(path2) || redownloadedOrgLibraryPath(path2)) continue;
|
|
19350
19480
|
if (forbiddenArchivePath(path2)) throw new Error("A workspace filename conflicts with a protected authentication or runtime path.");
|
|
19351
19481
|
if (!validRelative(path2)) throw new Error("A workspace filename cannot be safely restored on supported platforms.");
|
|
19352
|
-
const source =
|
|
19482
|
+
const source = join3(directory, name);
|
|
19353
19483
|
const stat = lstatSync(source);
|
|
19354
19484
|
if (stat.isSymbolicLink()) {
|
|
19355
19485
|
let target;
|
|
@@ -19369,7 +19499,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19369
19499
|
continue;
|
|
19370
19500
|
}
|
|
19371
19501
|
if (entries.length >= MAX_WORKSPACE_BACKUP_FILES) throw new Error("The workspace exceeds the 100,000-entry backup limit.");
|
|
19372
|
-
const destination =
|
|
19502
|
+
const destination = join3(snapshot, "data", path2);
|
|
19373
19503
|
if (stat.isDirectory()) {
|
|
19374
19504
|
folder(destination);
|
|
19375
19505
|
entries.push({ path: path2, type: "directory", size: 0, mode: 448 });
|
|
@@ -19387,7 +19517,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19387
19517
|
writeJson(destination, value);
|
|
19388
19518
|
}
|
|
19389
19519
|
copied = { size: lstatSync(destination).size, mode: 384, sha256: hashFile(destination) };
|
|
19390
|
-
} else copied = copyRegular(path2 === "messages.db" ?
|
|
19520
|
+
} else copied = copyRegular(path2 === "messages.db" ? join3(snapshot, "messages-snapshot.db") : source, destination);
|
|
19391
19521
|
bytes += copied.size;
|
|
19392
19522
|
if (bytes > MAX_WORKSPACE_BACKUP_BYTES) throw new Error("The workspace exceeds the 10 GB backup limit.");
|
|
19393
19523
|
entries.push({ path: path2, type: "file", ...copied });
|
|
@@ -19405,9 +19535,9 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19405
19535
|
files: entries.filter((entry) => entry.type === "file").length,
|
|
19406
19536
|
directories: entries.filter((entry) => entry.type === "directory").length,
|
|
19407
19537
|
bytes,
|
|
19408
|
-
bots: countJsonArray(
|
|
19409
|
-
groups: countJsonArray(
|
|
19410
|
-
...databaseCounts(
|
|
19538
|
+
bots: countJsonArray(join3(snapshot, "data", "bots.json")),
|
|
19539
|
+
groups: countJsonArray(join3(snapshot, "data", "groups.json")),
|
|
19540
|
+
...databaseCounts(join3(snapshot, "data", "messages.db")),
|
|
19411
19541
|
exclusions: EXCLUSION_NOTES,
|
|
19412
19542
|
warnings
|
|
19413
19543
|
};
|
|
@@ -19417,9 +19547,9 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19417
19547
|
clientState: options2.clientState ?? {},
|
|
19418
19548
|
entries
|
|
19419
19549
|
};
|
|
19420
|
-
writeJson(
|
|
19421
|
-
validateManifest(privateJson(
|
|
19422
|
-
const path =
|
|
19550
|
+
writeJson(join3(snapshot, "manifest.json"), manifest);
|
|
19551
|
+
validateManifest(privateJson(join3(snapshot, "manifest.json")));
|
|
19552
|
+
const path = join3(job.directory, "workspace.ombbackup");
|
|
19423
19553
|
const iv = randomBytes(12);
|
|
19424
19554
|
const header = Buffer.concat([MAGIC, salt, iv]);
|
|
19425
19555
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./mermaid.core-BEiDklrY.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|