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
|
@@ -12,17 +12,17 @@ import { createCipheriv, createDecipheriv, createHash, randomBytes, randomUUID a
|
|
|
12
12
|
import {
|
|
13
13
|
chmodSync,
|
|
14
14
|
closeSync as closeSync2,
|
|
15
|
-
constants,
|
|
15
|
+
constants as constants2,
|
|
16
16
|
cpSync,
|
|
17
17
|
createReadStream,
|
|
18
18
|
createWriteStream,
|
|
19
19
|
existsSync,
|
|
20
|
-
fstatSync,
|
|
20
|
+
fstatSync as fstatSync2,
|
|
21
21
|
fsyncSync as fsyncSync2,
|
|
22
|
-
lstatSync,
|
|
22
|
+
lstatSync as lstatSync2,
|
|
23
23
|
mkdirSync,
|
|
24
24
|
openSync as openSync2,
|
|
25
|
-
readFileSync,
|
|
25
|
+
readFileSync as readFileSync2,
|
|
26
26
|
readdirSync,
|
|
27
27
|
readSync,
|
|
28
28
|
realpathSync,
|
|
@@ -3007,7 +3007,18 @@ var To = (s4) => {
|
|
|
3007
3007
|
|
|
3008
3008
|
// server/atomic.ts
|
|
3009
3009
|
import { randomUUID } from "node:crypto";
|
|
3010
|
-
import {
|
|
3010
|
+
import {
|
|
3011
|
+
closeSync,
|
|
3012
|
+
constants,
|
|
3013
|
+
fstatSync,
|
|
3014
|
+
fsyncSync,
|
|
3015
|
+
lstatSync,
|
|
3016
|
+
openSync,
|
|
3017
|
+
readFileSync,
|
|
3018
|
+
renameSync,
|
|
3019
|
+
unlinkSync,
|
|
3020
|
+
writeFileSync
|
|
3021
|
+
} from "node:fs";
|
|
3011
3022
|
var RENAME_RETRY_DELAYS_MS = [5, 10, 20, 40, 80];
|
|
3012
3023
|
var RETRYABLE_RENAME_CODES = /* @__PURE__ */ new Set(["EPERM", "EACCES", "EBUSY"]);
|
|
3013
3024
|
function sleepSync(ms2) {
|
|
@@ -3031,7 +3042,7 @@ function writeFileAtomic(path, data, options2 = {}) {
|
|
|
3031
3042
|
try {
|
|
3032
3043
|
fd = openSync(tmp, "w", options2.mode);
|
|
3033
3044
|
writeFileSync(fd, data);
|
|
3034
|
-
fsyncSync(fd);
|
|
3045
|
+
if (options2.durable !== false) fsyncSync(fd);
|
|
3035
3046
|
closeSync(fd);
|
|
3036
3047
|
fd = null;
|
|
3037
3048
|
renameWithRetry(tmp, path);
|
|
@@ -18769,6 +18780,8 @@ var BROWSER_PROFILE_ID = /^[a-z0-9_-]{1,40}$/;
|
|
|
18769
18780
|
var FISH_TTS_MODELS = ["s2.1-pro", "s2.1-pro-free"];
|
|
18770
18781
|
var MIN_ROOM_TURN_TIMEOUT_MINUTES = 1;
|
|
18771
18782
|
var MAX_ROOM_TURN_TIMEOUT_MINUTES = 1440;
|
|
18783
|
+
var MIN_MCP_CALL_TIMEOUT_MINUTES = 1;
|
|
18784
|
+
var MAX_MCP_CALL_TIMEOUT_MINUTES = 60;
|
|
18772
18785
|
var DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES = 30;
|
|
18773
18786
|
var DEFAULT_ROOM_HANDOFF_MIN_RUNWAY_MINUTES = 10;
|
|
18774
18787
|
var DEFAULT_ROOM_HANDOFF_HARD_CAP_MINUTES = 240;
|
|
@@ -18814,6 +18827,11 @@ var roomConfigSchema = external_exports.object({
|
|
|
18814
18827
|
(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),
|
|
18815
18828
|
{ message: "rooms handoff bounds must satisfy handoffMinRunwayMinutes <= handoffLifetimeMinutes <= handoffHardCapMinutes" }
|
|
18816
18829
|
);
|
|
18830
|
+
var mcpConfigSchema = external_exports.object({
|
|
18831
|
+
/** Ceiling (minutes) for one bot MCP tool call. Missing values resolve to
|
|
18832
|
+
* 10, preserving the historic chat-mcp-tools constant. */
|
|
18833
|
+
callTimeoutMinutes: external_exports.number().int().min(MIN_MCP_CALL_TIMEOUT_MINUTES).max(MAX_MCP_CALL_TIMEOUT_MINUTES).optional()
|
|
18834
|
+
}).strict();
|
|
18817
18835
|
var localVmConfigSchema = external_exports.object({
|
|
18818
18836
|
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
18819
18837
|
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional(),
|
|
@@ -19152,6 +19170,7 @@ var appConfigSchema = external_exports.object({
|
|
|
19152
19170
|
* system language. Unknown tags degrade to English in the renderer. */
|
|
19153
19171
|
language: optionalText,
|
|
19154
19172
|
rooms: roomConfigSchema.optional(),
|
|
19173
|
+
mcp: mcpConfigSchema.optional(),
|
|
19155
19174
|
context: external_exports.object({
|
|
19156
19175
|
rebuildBytes: external_exports.number().int().min(1024).max(1e6).optional(),
|
|
19157
19176
|
compactAt: external_exports.number().positive().max(1e7).optional(),
|
|
@@ -19312,14 +19331,14 @@ function forbiddenArchivePath(path) {
|
|
|
19312
19331
|
}
|
|
19313
19332
|
function folder(path) {
|
|
19314
19333
|
mkdirSync(path, { recursive: true, mode: 448 });
|
|
19315
|
-
const stat =
|
|
19334
|
+
const stat = lstatSync2(path);
|
|
19316
19335
|
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("The backup directory must be a real directory, not a symbolic link.");
|
|
19317
19336
|
chmodSync(path, 448);
|
|
19318
19337
|
}
|
|
19319
19338
|
function backupRoot(dataDir2) {
|
|
19320
19339
|
const root = resolve(dataDir2);
|
|
19321
19340
|
if (root === parse3(root).root) throw new Error("A filesystem root cannot be a workspace backup target.");
|
|
19322
|
-
const stat =
|
|
19341
|
+
const stat = lstatSync2(root);
|
|
19323
19342
|
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("The workspace data directory must not be a symbolic link.");
|
|
19324
19343
|
const path = join2(root, ".backups");
|
|
19325
19344
|
folder(path);
|
|
@@ -19329,7 +19348,7 @@ function jobPath(dataDir2, id) {
|
|
|
19329
19348
|
if (!ID.test(id)) throw new Error("Invalid workspace backup identifier.");
|
|
19330
19349
|
const path = join2(backupRoot(dataDir2), id);
|
|
19331
19350
|
if (entryExists(path)) {
|
|
19332
|
-
const stat =
|
|
19351
|
+
const stat = lstatSync2(path);
|
|
19333
19352
|
if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("Unsafe workspace backup job directory.");
|
|
19334
19353
|
}
|
|
19335
19354
|
return path;
|
|
@@ -19347,7 +19366,7 @@ function record2(value) {
|
|
|
19347
19366
|
}
|
|
19348
19367
|
function entryExists(path) {
|
|
19349
19368
|
try {
|
|
19350
|
-
|
|
19369
|
+
lstatSync2(path);
|
|
19351
19370
|
return true;
|
|
19352
19371
|
} catch (error51) {
|
|
19353
19372
|
if (error51.code === "ENOENT") return false;
|
|
@@ -19355,11 +19374,11 @@ function entryExists(path) {
|
|
|
19355
19374
|
}
|
|
19356
19375
|
}
|
|
19357
19376
|
function privateJson(path) {
|
|
19358
|
-
const fd = openSync2(path,
|
|
19377
|
+
const fd = openSync2(path, constants2.O_RDONLY | constants2.O_NOFOLLOW);
|
|
19359
19378
|
try {
|
|
19360
|
-
const stat =
|
|
19379
|
+
const stat = fstatSync2(fd);
|
|
19361
19380
|
if (!stat.isFile() || stat.size > MAX_METADATA_BYTES) throw new Error("Workspace backup metadata is too large or is not a regular file.");
|
|
19362
|
-
return JSON.parse(
|
|
19381
|
+
return JSON.parse(readFileSync2(fd, "utf8"));
|
|
19363
19382
|
} finally {
|
|
19364
19383
|
closeSync2(fd);
|
|
19365
19384
|
}
|
|
@@ -19408,10 +19427,10 @@ function passwordKey(password, salt) {
|
|
|
19408
19427
|
});
|
|
19409
19428
|
}
|
|
19410
19429
|
function copyRegular(source, destination) {
|
|
19411
|
-
const input = openSync2(source,
|
|
19430
|
+
const input = openSync2(source, constants2.O_RDONLY | constants2.O_NOFOLLOW);
|
|
19412
19431
|
let output;
|
|
19413
19432
|
try {
|
|
19414
|
-
const before =
|
|
19433
|
+
const before = fstatSync2(input);
|
|
19415
19434
|
if (!before.isFile() || before.size > MAX_WORKSPACE_BACKUP_BYTES) throw new Error("A workspace file is not regular or exceeds the 10 GB backup limit.");
|
|
19416
19435
|
const mode = before.mode & 64 ? 448 : 384;
|
|
19417
19436
|
output = openSync2(destination, "wx", mode);
|
|
@@ -19427,8 +19446,8 @@ function copyRegular(source, destination) {
|
|
|
19427
19446
|
let offset = 0;
|
|
19428
19447
|
while (offset < count) offset += writeSync(output, chunk, offset, count - offset);
|
|
19429
19448
|
}
|
|
19430
|
-
const after =
|
|
19431
|
-
const current =
|
|
19449
|
+
const after = fstatSync2(input);
|
|
19450
|
+
const current = lstatSync2(source);
|
|
19432
19451
|
if (size !== before.size || after.mtimeMs !== before.mtimeMs || after.ctimeMs !== before.ctimeMs || current.ino !== before.ino || current.dev !== before.dev || current.isSymbolicLink()) {
|
|
19433
19452
|
throw new Error("A workspace file changed during backup. Stop its writer and retry.");
|
|
19434
19453
|
}
|
|
@@ -19440,9 +19459,9 @@ function copyRegular(source, destination) {
|
|
|
19440
19459
|
}
|
|
19441
19460
|
}
|
|
19442
19461
|
function hashFile(path) {
|
|
19443
|
-
const fd = openSync2(path,
|
|
19462
|
+
const fd = openSync2(path, constants2.O_RDONLY | constants2.O_NOFOLLOW);
|
|
19444
19463
|
try {
|
|
19445
|
-
if (!
|
|
19464
|
+
if (!fstatSync2(fd).isFile()) throw new Error("The workspace archive contains an unsafe file.");
|
|
19446
19465
|
const hash2 = createHash("sha256");
|
|
19447
19466
|
const chunk = Buffer.allocUnsafe(1024 * 1024);
|
|
19448
19467
|
for (; ; ) {
|
|
@@ -19499,7 +19518,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19499
19518
|
const root = realpathSync(dataDir2);
|
|
19500
19519
|
const sourceDb = join2(root, "messages.db");
|
|
19501
19520
|
if (existsSync(sourceDb)) {
|
|
19502
|
-
if (
|
|
19521
|
+
if (lstatSync2(sourceDb).isSymbolicLink()) throw new Error("The message database must not be a symbolic link.");
|
|
19503
19522
|
const db = new DatabaseSync(sourceDb, { readOnly: true });
|
|
19504
19523
|
const completionPulse = setInterval(() => {
|
|
19505
19524
|
}, 25);
|
|
@@ -19524,7 +19543,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19524
19543
|
if (forbiddenArchivePath(path2)) throw new Error("A workspace filename conflicts with a protected authentication or runtime path.");
|
|
19525
19544
|
if (!validRelative(path2)) throw new Error("A workspace filename cannot be safely restored on supported platforms.");
|
|
19526
19545
|
const source = join2(directory, name);
|
|
19527
|
-
const stat =
|
|
19546
|
+
const stat = lstatSync2(source);
|
|
19528
19547
|
if (name === "node_modules" && (stat.isDirectory() || stat.isSymbolicLink())) {
|
|
19529
19548
|
skippedDependencies++;
|
|
19530
19549
|
continue;
|
|
@@ -19568,7 +19587,7 @@ async function createWorkspaceBackupSnapshot(dataDir2, options2, jobId2) {
|
|
|
19568
19587
|
}
|
|
19569
19588
|
writeJson(destination, value);
|
|
19570
19589
|
}
|
|
19571
|
-
copied = { size:
|
|
19590
|
+
copied = { size: lstatSync2(destination).size, mode: 384, sha256: hashFile(destination) };
|
|
19572
19591
|
} else copied = copyRegular(path2 === "messages.db" ? join2(snapshot, "messages-snapshot.db") : source, destination);
|
|
19573
19592
|
bytes += copied.size;
|
|
19574
19593
|
if (bytes > MAX_WORKSPACE_BACKUP_BYTES) throw new Error("The workspace exceeds the 10 GB backup limit.");
|