openmausbot 0.1.91 → 0.1.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/DesktopViewer-Do6lBa4C.js +5 -0
- package/dist/assets/{abnfDiagram-O67JEVCF-yP-w8pRq.js → abnfDiagram-O67JEVCF-Cd3X7Hxc.js} +1 -1
- package/dist/assets/{arc-DsivfZEh.js → arc-DIYc7Ymx.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-CILw7lzT.js → architectureDiagram-NJMV4G6O-DBmRGVyP.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-DEQUV3HF.js → blockDiagram-BEXU5L5S-CPFePSEE.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-lSXCZoKA.js → c4Diagram-YGBWAQC7-DD_DO1qy.js} +1 -1
- package/dist/assets/channel-Dtk5Mtic.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-QCD5bgWP.js → chunk-2Q5K7J3B-BNEeNSjX.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-C5-iZJuL.js → chunk-3FUC2YCW-BbinLaqH.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-cxsawMpY.js → chunk-5VM5RSS4-BBgYrgDR.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-DV8tV8H7.js → chunk-GTNCS2PH-ezXj-kA-.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-CJFZyfbW.js → chunk-GWA4HPMP-9FxZ3diV.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BigbMXco.js → chunk-JWPE2WC7-CO-40JpI.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-oVxTfpDy.js → chunk-NETBCI7D-BEhjslYE.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-CH4BiroW.js → chunk-WEXAMYUT-CNeq4n7_.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-KEDa6gax.js → chunk-XXDRQBXY-OsCY7KSi.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-BiPjfqVv.js → classDiagram-v2-NBCMYWYE-CloRUEtk.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-Caxew3OY.js → cose-bilkent-JH36ORCC-D1BGZhp4.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-B_Pui369.js → cynefin-OW5HDTMX-CUf4T2CN.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-X64ydIhP.js → cynefinDiagram-VND7K2PF-DPEZrFGA.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-TqYCI1E1.js → dagre-6A5THRUB-bDe6GIv5.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-TeOt3rAQ.js → diagram-22UHCM2B-CdcUQz55.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-D70BLhDA.js → diagram-3UASUU5V-BZpqGg7c.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-BbQDLwUC.js → diagram-ATOU4E4O-DvGM6ugp.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-ChNJZ1u-.js → diagram-CDSNMT55-DSTmMm0s.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-DMBl2APa.js → diagram-MLGK6HIB-15cucnMn.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-CEqDchOp.js → diagram-MPIPVDR6-tMbuaE6n.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-BVDKRp_-.js → ebnfDiagram-ZINNZB2B-BYxYzjHI.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-CRkofO9B.js → elk-276RUBZZ-v6bj852W.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-DruOMh5e.js → erDiagram-OPXOYQCR-5lBBlnd2.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-8GMQeB7t.js → flowDiagram-KWPJA3E3-CZyl1zIj.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-ORE9jcsM.js → ganttDiagram-FUAMR5RP-BiAI-ltZ.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-BmsedsWh.js → gitGraphDiagram-X574FWY7-BAZISkj3.js} +1 -1
- package/dist/assets/index-Cdmjrl28.css +1 -0
- package/dist/assets/{index-DKNEM8Q6.js → index-DGBaEXrM.js} +1 -1
- package/dist/assets/index-DR7YPMkW.js +597 -0
- package/dist/assets/{infoDiagram-VRGFBTTK-E_p7AooJ.js → infoDiagram-VRGFBTTK-B6ooOy-Z.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-Y-B2mKda.js → ishikawaDiagram-OU5B5YK6-BZ9ksi-B.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-eA8RELcK.js → journeyDiagram-ZHPQQLJL-DWqlzIEe.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-DqIL2e8e.js → kanban-definition-PNTS6WVX-JX6piDwL.js} +1 -1
- package/dist/assets/{linear-yC_29R6e.js → linear-CmOWzX0P.js} +1 -1
- package/dist/assets/{mermaid.core-VhEMkSND.js → mermaid.core-CF1zwoQ-.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-oJ7kyQZy.js → mindmap-definition-NLK3R4M7-CGh2K4fW.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-BmfYcY0O.js → pegDiagram-GJSIUBJH-CDwYN0s7.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DKvgP7w9.js → pieDiagram-5QR66LMP-1rfjJocB.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-BEKL3W0L.js → quadrantDiagram-O4NWA36T-tKPvPiok.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-BEsiqR5s.js → railroadDiagram-XR7U4H2S-BHLm5vXR.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-DWBcWvAP.js → requirementDiagram-PLB6GJNP-CB45STp7.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-rpZ2_O4s.js → sankeyDiagram-IPEJSGJF-55QA_huC.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-B99HQdJR.js → sequenceDiagram-PO4LG4MO-BckFmQHn.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-BjN0qT5T.js → sizeCapture-INFHLROL-BFCOJF11.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-BbsVgGsC.js → stateDiagram-v2-GCMORJYK-CZvmiVVN.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-DG3gKkeR.js → swimlanes-2SLR337P-BpDUCEKy.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-M0GYW9Y3.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BTHOdtF_.js → timeline-definition-EJHVYXUP-BpxHq6IK.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-acLSLFwc.js → usecaseDiagram-POWQR4AR-Cj66vm02.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-C5JzNX9G.js → vennDiagram-UO4OBE2U-C9nRkWE_.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-DL1-PrR_.js → wardleyDiagram-VNRHLVJA-D-me_nWj.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-Bvr1477p.js → xychartDiagram-PMCCYNJV-Dc_fL4mk.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/novnc-NOTICE.txt +118 -0
- package/dist-server/cloud-home-start.js +112 -14
- package/dist-server/container-mcp.js +195 -15
- package/dist-server/drivers/agents-proxy.js +5 -4
- package/dist-server/enterprise/server/index.js +5 -1
- package/dist-server/index.js +9300 -4155
- package/dist-server/local-computer-proxy.js +128 -7
- package/dist-server/mcp-gate.js +11 -5
- package/dist-server/model-catalog/models-dev.snapshot.json +7299 -0
- package/dist-server/openmausbot.js +3910 -1182
- package/dist-server/pair-cli.js +3910 -1182
- package/dist-server/server/boat.js +2 -2
- package/dist-server/server/browser-engine.js +10 -1
- package/dist-server/server/browser-live.js +46 -2
- package/dist-server/server/browser-runtime.js +74 -8
- package/dist-server/server/browser-tool-shape.js +6 -4
- package/dist-server/server/chief-of-staff.js +1 -1
- package/dist-server/server/cloud-home-start.js +118 -26
- package/dist-server/server/cloud-home.js +39 -3
- package/dist-server/server/cloud-lending.js +74 -10
- package/dist-server/server/cloud-owner.js +196 -0
- package/dist-server/server/cloud-secrets-boot.js +6 -0
- package/dist-server/server/cloud-secrets.js +65 -0
- package/dist-server/server/config.js +174 -14
- package/dist-server/server/container-computer.js +3 -2
- package/dist-server/server/desktop-viewer-targets.js +26 -0
- package/dist-server/server/drivers/acp/core.js +167 -21
- package/dist-server/server/drivers/acp/opencode-go.js +614 -85
- package/dist-server/server/drivers/agents-catalog.js +6 -6
- package/dist-server/server/drivers/antigravity-acp.js +69 -11
- package/dist-server/server/drivers/antigravity-temp.js +360 -0
- package/dist-server/server/drivers/antigravity.js +21 -0
- package/dist-server/server/drivers/chatgpt-plan-auth.js +481 -0
- package/dist-server/server/drivers/claude.js +312 -34
- package/dist-server/server/drivers/codex.js +228 -18
- package/dist-server/server/drivers/grok.js +2 -2
- package/dist-server/server/drivers/mistral.js +4 -3
- package/dist-server/server/drivers/openai-chat-protocol.js +4 -3
- package/dist-server/server/drivers/openai-chat.js +41 -3
- package/dist-server/server/drivers/openai-compat.js +73 -23
- package/dist-server/server/engine-install.js +46 -12
- package/dist-server/server/env-path.js +15 -3
- package/dist-server/server/harness/registry.js +2 -2
- package/dist-server/server/index.js +1338 -184
- package/dist-server/server/lending-memory.js +479 -0
- package/dist-server/server/local-vm-idle.js +24 -6
- package/dist-server/server/managed-desktop.js +3 -0
- package/dist-server/server/mcp-bridge.js +5 -3
- package/dist-server/server/mcp-http.js +6 -3
- package/dist-server/server/mcp-oauth-discovery.js +133 -0
- package/dist-server/server/mcp-oauth-store.js +70 -0
- package/dist-server/server/mcp-oauth.js +550 -0
- package/dist-server/server/mcp-probe.js +14 -1
- package/dist-server/server/mcp-registry.js +43 -0
- package/dist-server/server/memory-upkeep.js +94 -84
- package/dist-server/server/model-catalog/catalog.js +374 -0
- package/dist-server/server/model-catalog/presets.js +176 -0
- package/dist-server/server/model-catalog/trim.js +219 -0
- package/dist-server/server/provider-key-check.js +4 -2
- package/dist-server/server/recent-work.js +1 -1
- package/dist-server/server/request-auth.js +23 -0
- package/dist-server/server/routes/antigravity-leftovers.js +45 -0
- package/dist-server/server/routes/bot-memory.js +31 -6
- package/dist-server/server/routes/desktop-viewer.js +194 -0
- package/dist-server/server/routine-requests.js +1 -1
- package/dist-server/server/routines.js +1 -1
- package/dist-server/server/sessions.js +56 -9
- package/dist-server/server/skills.js +25 -10
- package/dist-server/server/store.js +62 -122
- package/dist-server/server/thread-events.js +2 -0
- package/dist-server/server/thread-starters.js +33 -0
- package/dist-server/server/thread-title.js +46 -0
- package/dist-server/server/tts/fish.js +4 -5
- package/dist-server/server/tts/index.js +5 -3
- package/dist-server/server/vps-computer.js +79 -12
- package/dist-server/server/webhooks.js +18 -1
- package/dist-server/server/workspace-backup-policy.js +3 -0
- package/dist-server/server/workspace-backup.js +3 -0
- package/dist-server/server/workspace.js +65 -15
- package/dist-server/shared/workspace-backup-client.js +1 -0
- package/dist-server/src/lib/citations.js +177 -0
- package/dist-server/src/lib/composer-attachments.js +7 -1
- package/dist-server/vps-container-mcp.js +196 -15
- package/dist-server/workspace-backup.worker.js +73 -9
- package/enterprise/server/index.js +5 -1
- package/package.json +1 -1
- package/dist/assets/channel-DrfGMu7X.js +0 -1
- package/dist/assets/index-BlnCEcU6.js +0 -588
- package/dist/assets/index-DVxjOvID.css +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BCZhxl7e.js +0 -8
|
@@ -90,6 +90,9 @@ function nvmBinDirs() {
|
|
|
90
90
|
return [];
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
+
function sealedFixture() {
|
|
94
|
+
return process.env.OMB_TEST_SEALED_PATH === "1";
|
|
95
|
+
}
|
|
93
96
|
function knownDirs() {
|
|
94
97
|
const home = homedir();
|
|
95
98
|
return [
|
|
@@ -105,10 +108,13 @@ function knownDirs() {
|
|
|
105
108
|
// opencode installer
|
|
106
109
|
join(home, ".claude", "local"),
|
|
107
110
|
// claude "local install"
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
111
|
+
// Machine-wide rather than under the (possibly temporary) home.
|
|
112
|
+
...sealedFixture() ? [] : [
|
|
113
|
+
"/opt/homebrew/bin",
|
|
114
|
+
// brew, Apple silicon
|
|
115
|
+
"/usr/local/bin"
|
|
116
|
+
// brew Intel / classic installs
|
|
117
|
+
],
|
|
112
118
|
join(home, ".volta", "bin"),
|
|
113
119
|
join(home, ".bun", "bin"),
|
|
114
120
|
join(home, ".asdf", "shims"),
|
|
@@ -160,7 +166,7 @@ function augmentedPath() {
|
|
|
160
166
|
...(process.platform === "win32" ? windowsKnownDirs() : knownDirs()).filter((d) => existsSync(d))
|
|
161
167
|
]);
|
|
162
168
|
}
|
|
163
|
-
if (!probed && !process.env.VITEST && process.platform !== "win32") {
|
|
169
|
+
if (!probed && !process.env.VITEST && !sealedFixture() && process.platform !== "win32") {
|
|
164
170
|
probed = true;
|
|
165
171
|
probeLoginShellPath();
|
|
166
172
|
}
|
|
@@ -184,6 +190,119 @@ function probeLoginShellPath() {
|
|
|
184
190
|
}
|
|
185
191
|
);
|
|
186
192
|
}
|
|
193
|
+
function splitCliString(cli) {
|
|
194
|
+
const out = [];
|
|
195
|
+
let cur = "";
|
|
196
|
+
let quote = null;
|
|
197
|
+
for (const ch of cli.trim()) {
|
|
198
|
+
if (quote) {
|
|
199
|
+
if (ch === quote) quote = null;
|
|
200
|
+
else cur += ch;
|
|
201
|
+
} else if (ch === '"' || ch === "'") {
|
|
202
|
+
quote = ch;
|
|
203
|
+
} else if (/\s/.test(ch)) {
|
|
204
|
+
if (cur) out.push(cur);
|
|
205
|
+
cur = "";
|
|
206
|
+
} else {
|
|
207
|
+
cur += ch;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (cur) out.push(cur);
|
|
211
|
+
return out;
|
|
212
|
+
}
|
|
213
|
+
function isFile(p2) {
|
|
214
|
+
try {
|
|
215
|
+
return statSync(p2, { throwIfNoEntry: false })?.isFile() ?? false;
|
|
216
|
+
} catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function whichWin(cli, env) {
|
|
221
|
+
const exts = ((env ?? process.env).PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);
|
|
222
|
+
const probe = (base) => {
|
|
223
|
+
const order = extname(base) ? [base, ...exts.map((e) => base + e)] : [...exts.map((e) => base + e), base];
|
|
224
|
+
return order.find(isFile) ?? null;
|
|
225
|
+
};
|
|
226
|
+
if (/[\\/]/.test(cli) || /^[a-zA-Z]:/.test(cli)) return probe(cli);
|
|
227
|
+
const path = env ? env.PATH ?? env.Path ?? "" : augmentedPath();
|
|
228
|
+
for (const dir of path.split(delimiter)) {
|
|
229
|
+
if (!dir) continue;
|
|
230
|
+
const hit = probe(join(dir, cli));
|
|
231
|
+
if (hit) return hit;
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
function nodeExe(near, env) {
|
|
236
|
+
const local = join(near, "node.exe");
|
|
237
|
+
if (isFile(local)) return local;
|
|
238
|
+
const onPath = whichWin("node.exe", env);
|
|
239
|
+
if (onPath && extname(onPath).toLowerCase() === ".exe") return onPath;
|
|
240
|
+
return process.versions.electron ? null : process.execPath;
|
|
241
|
+
}
|
|
242
|
+
function parseCmdShim(shim, env) {
|
|
243
|
+
let text;
|
|
244
|
+
try {
|
|
245
|
+
text = readFileSync(shim, "utf8");
|
|
246
|
+
} catch {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
const dir = dirname(shim);
|
|
250
|
+
const npmEntry = /^SET "NP[MX]_CLI_JS=%~dp0\\([^"]+)"/im.exec(text);
|
|
251
|
+
const targets = [...npmEntry ? [npmEntry] : [], ...text.matchAll(/"%~?dp0%?\\?([^"]+)"/g)].map((m2) => join(dir, m2[1])).filter((p2) => isFile(p2) && basename(p2).toLowerCase() !== "node.exe");
|
|
252
|
+
const script = targets.find((p2) => /\.[cm]?js$/i.test(p2));
|
|
253
|
+
if (script) {
|
|
254
|
+
const node = nodeExe(dir, env);
|
|
255
|
+
if (node) return { command: node, args: [script] };
|
|
256
|
+
}
|
|
257
|
+
const exe = targets.find((p2) => extname(p2).toLowerCase() === ".exe");
|
|
258
|
+
return exe ? { command: exe, args: [] } : null;
|
|
259
|
+
}
|
|
260
|
+
function parseNodeShebang(file2, env) {
|
|
261
|
+
let head = "";
|
|
262
|
+
let fd = null;
|
|
263
|
+
try {
|
|
264
|
+
fd = openSync(file2, "r");
|
|
265
|
+
const buf = Buffer.alloc(128);
|
|
266
|
+
const n = readSync(fd, buf, 0, buf.length, 0);
|
|
267
|
+
head = buf.subarray(0, n).toString("utf8").split("\n", 1)[0];
|
|
268
|
+
} catch {
|
|
269
|
+
return null;
|
|
270
|
+
} finally {
|
|
271
|
+
if (fd !== null) {
|
|
272
|
+
try {
|
|
273
|
+
closeSync(fd);
|
|
274
|
+
} catch {
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (!/^#!.*\bnode(\.exe)?\b/.test(head)) return null;
|
|
279
|
+
const node = nodeExe(dirname(file2), env);
|
|
280
|
+
return node ? { command: node, args: [file2] } : null;
|
|
281
|
+
}
|
|
282
|
+
function resolveWord(cli, args2, env) {
|
|
283
|
+
if (process.platform !== "win32") return { command: cli, args: args2 };
|
|
284
|
+
const file2 = whichWin(cli, env);
|
|
285
|
+
if (!file2) return { command: cli, args: args2 };
|
|
286
|
+
const ext = extname(file2).toLowerCase();
|
|
287
|
+
if (ext === ".cmd" || ext === ".bat") {
|
|
288
|
+
const direct = parseCmdShim(file2, env);
|
|
289
|
+
return direct ? { command: direct.command, args: [...direct.args, ...args2] } : { command: file2, args: args2 };
|
|
290
|
+
}
|
|
291
|
+
if (ext === ".exe" || ext === ".com") return { command: file2, args: args2 };
|
|
292
|
+
const viaNode = parseNodeShebang(file2, env);
|
|
293
|
+
return viaNode ? { command: viaNode.command, args: [...viaNode.args, ...args2] } : { command: file2, args: args2 };
|
|
294
|
+
}
|
|
295
|
+
function resolveCliSpawn(cli, args2, env) {
|
|
296
|
+
const trimmed = cli.trim();
|
|
297
|
+
if (trimmed.includes(" ") && existsSync(trimmed)) return resolveWord(trimmed, args2, env);
|
|
298
|
+
const split = splitCliString(cli);
|
|
299
|
+
if (split.length > 1 || split[0] !== trimmed) {
|
|
300
|
+
const [head, ...fixed] = split;
|
|
301
|
+
if (!head) return { command: cli, args: args2 };
|
|
302
|
+
return resolveWord(head, [...fixed, ...args2], env);
|
|
303
|
+
}
|
|
304
|
+
return resolveWord(cli, args2, env);
|
|
305
|
+
}
|
|
187
306
|
|
|
188
307
|
// server/mcp-tool-schema.ts
|
|
189
308
|
var ROOT_COMBINATORS = ["anyOf", "oneOf", "allOf", "not"];
|
|
@@ -407,9 +526,11 @@ function createMcpBridgeInterceptor(options) {
|
|
|
407
526
|
};
|
|
408
527
|
}
|
|
409
528
|
function runMcpBridge(options) {
|
|
410
|
-
const
|
|
529
|
+
const env = options.env ?? { ...process.env, PATH: augmentedPath() };
|
|
530
|
+
const { command, args: args2 } = resolveCliSpawn(options.command, options.args, env);
|
|
531
|
+
const child = spawn(command, args2, {
|
|
411
532
|
shell: false,
|
|
412
|
-
env
|
|
533
|
+
env,
|
|
413
534
|
stdio: ["pipe", "pipe", "pipe"]
|
|
414
535
|
});
|
|
415
536
|
child.stdin.on("error", () => {
|
|
@@ -16008,15 +16129,27 @@ var stdioEntrySchema = external_exports.object({
|
|
|
16008
16129
|
var stdioMutationSchema = stdioEntrySchema.extend({
|
|
16009
16130
|
env: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional()
|
|
16010
16131
|
});
|
|
16132
|
+
var CLIENT_ID = /^[\x20-\x7e]+$/;
|
|
16133
|
+
var SCOPE = /^[\x21\x23-\x5b\x5d-\x7e]+$/;
|
|
16134
|
+
var CLIENT_SECRET_MAX = 4096;
|
|
16135
|
+
var oauthClientSchema = external_exports.object({
|
|
16136
|
+
clientId: external_exports.string().trim().min(1, "Enter the client ID of the app registered with this server's sign-in provider.").max(512).regex(CLIENT_ID, "A client ID is printable text on one line."),
|
|
16137
|
+
clientSecret: external_exports.string().min(1).max(CLIENT_SECRET_MAX).regex(CLIENT_ID, "A client secret is printable text on one line.").optional(),
|
|
16138
|
+
scopes: external_exports.array(external_exports.string().max(256).regex(SCOPE, "Scopes are single words, like offline_access or api://my-app/mcp.read.")).max(32).optional()
|
|
16139
|
+
}).strict();
|
|
16011
16140
|
var remoteEntrySchema = external_exports.object({
|
|
16012
16141
|
/** Streamable HTTP unless the entry says the older SSE transport. */
|
|
16013
16142
|
type: external_exports.enum(["http", "sse"]).optional(),
|
|
16014
16143
|
url: external_exports.string().trim().min(1).max(2048),
|
|
16015
16144
|
headers: external_exports.record(external_exports.string(), external_exports.string().max(16384)).optional(),
|
|
16145
|
+
oauth: oauthClientSchema.optional(),
|
|
16016
16146
|
enabled: external_exports.boolean().optional()
|
|
16017
16147
|
}).strict();
|
|
16018
16148
|
var remoteMutationSchema = remoteEntrySchema.extend({
|
|
16019
|
-
headers: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional()
|
|
16149
|
+
headers: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional(),
|
|
16150
|
+
oauth: oauthClientSchema.extend({
|
|
16151
|
+
clientSecret: external_exports.union([external_exports.string().min(1).max(CLIENT_SECRET_MAX).regex(CLIENT_ID, "A client secret is printable text on one line."), external_exports.literal(true)]).optional()
|
|
16152
|
+
}).optional()
|
|
16020
16153
|
});
|
|
16021
16154
|
|
|
16022
16155
|
// server/cloud-overflow.ts
|
|
@@ -16082,7 +16215,11 @@ var sessionSchema = external_exports.object({
|
|
|
16082
16215
|
userId: external_exports.string().max(256).optional(),
|
|
16083
16216
|
email: external_exports.string().max(320).optional(),
|
|
16084
16217
|
/** Set only by the internal verified-portal issuance path, never by email or pairing input. */
|
|
16085
|
-
membershipAuthority: external_exports.literal("portal").optional()
|
|
16218
|
+
membershipAuthority: external_exports.literal("portal").optional(),
|
|
16219
|
+
/** A browser sign-in (PairingCode `browser`): accepted only as its browser's cookie, never as a bearer token. */
|
|
16220
|
+
cookieOnly: external_exports.literal(true).optional(),
|
|
16221
|
+
/** Whose OMB Cloud a browser sign-in signed in to (its PairingCode `owner`). */
|
|
16222
|
+
owner: external_exports.string().max(254).optional()
|
|
16086
16223
|
});
|
|
16087
16224
|
var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
|
|
16088
16225
|
|
|
@@ -16094,6 +16231,7 @@ var optionalText = external_exports.string().optional();
|
|
|
16094
16231
|
var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
|
|
16095
16232
|
var LEGACY_BROWSER_PROFILE_ID = /^[A-Za-z0-9_-]{1,40}$/;
|
|
16096
16233
|
var BROWSER_PROFILE_ID = /^[a-z0-9_-]{1,40}$/;
|
|
16234
|
+
var FISH_TTS_MODELS = ["s2.1-pro", "s2.1-pro-free"];
|
|
16097
16235
|
var MIN_ROOM_TURN_TIMEOUT_MINUTES = 1;
|
|
16098
16236
|
var MAX_ROOM_TURN_TIMEOUT_MINUTES = 1440;
|
|
16099
16237
|
var DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES = 30;
|
|
@@ -16104,6 +16242,8 @@ var MIN_THREAD_EVENT_LOG_BYTES = 256 * 1024;
|
|
|
16104
16242
|
var MAX_THREAD_EVENT_LOG_BYTES = 4 * 1024 * 1024 * 1024;
|
|
16105
16243
|
var MIN_LOCAL_VM_MAX_INSTANCES = 1;
|
|
16106
16244
|
var MAX_LOCAL_VM_MAX_INSTANCES = 8;
|
|
16245
|
+
var MIN_LOCAL_VM_IDLE_TIMEOUT_MINUTES = 5;
|
|
16246
|
+
var MAX_LOCAL_VM_IDLE_TIMEOUT_MINUTES = 1440;
|
|
16107
16247
|
function isValidSshAlias(value) {
|
|
16108
16248
|
return typeof value === "string" && SSH_ALIAS.test(value);
|
|
16109
16249
|
}
|
|
@@ -16141,7 +16281,8 @@ var roomConfigSchema = external_exports.object({
|
|
|
16141
16281
|
);
|
|
16142
16282
|
var localVmConfigSchema = external_exports.object({
|
|
16143
16283
|
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
16144
|
-
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional()
|
|
16284
|
+
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional(),
|
|
16285
|
+
idleTimeoutMinutes: external_exports.number().int().min(MIN_LOCAL_VM_IDLE_TIMEOUT_MINUTES).max(MAX_LOCAL_VM_IDLE_TIMEOUT_MINUTES).optional()
|
|
16145
16286
|
});
|
|
16146
16287
|
var browserProfileSchema = external_exports.object({
|
|
16147
16288
|
// "guest" is the throwaway session's reserved id, never a saved profile
|
|
@@ -16300,7 +16441,11 @@ var onboardingConfigSchema = external_exports.object({
|
|
|
16300
16441
|
/** Which welcome flow was completed; a newer flow may re-show itself. */
|
|
16301
16442
|
version: external_exports.number().int().min(0).max(1e3).optional(),
|
|
16302
16443
|
reelSeen: external_exports.boolean().optional(),
|
|
16303
|
-
hintsSeen: external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional()
|
|
16444
|
+
hintsSeen: external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),
|
|
16445
|
+
/** OMB Cloud home only: when a bot's turn first finished on this machine
|
|
16446
|
+
* (cloud-home.ts firstCloudTurnPatch). Written by the server, read by the
|
|
16447
|
+
* Cloud's setup checklist. */
|
|
16448
|
+
firstTurnAt: external_exports.string().trim().max(40).optional()
|
|
16304
16449
|
}).strict();
|
|
16305
16450
|
var instanceConfigSchema = external_exports.object({
|
|
16306
16451
|
driver: external_exports.string().min(1),
|
|
@@ -16312,6 +16457,7 @@ var instanceConfigSchema = external_exports.object({
|
|
|
16312
16457
|
]).optional(),
|
|
16313
16458
|
environment: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16314
16459
|
enabled: external_exports.boolean().optional(),
|
|
16460
|
+
access: external_exports.enum(["subscription", "custom", "api"]).optional(),
|
|
16315
16461
|
config: external_exports.json().optional()
|
|
16316
16462
|
});
|
|
16317
16463
|
var instanceConfigMapSchema = external_exports.record(external_exports.string(), instanceConfigSchema);
|
|
@@ -16373,7 +16519,12 @@ var appConfigSchema = external_exports.object({
|
|
|
16373
16519
|
/** Anthropic API key for Claude Code billed per token, handed only to
|
|
16374
16520
|
* Claude instances; `url` only for a proxy or a test double. Never a
|
|
16375
16521
|
* personal-login OAuth token. */
|
|
16376
|
-
anthropic: external_exports.object({ key: optionalText, url: optionalText }).optional(),
|
|
16522
|
+
anthropic: external_exports.object({ key: optionalText, url: optionalText, everyClaudeBot: external_exports.boolean().optional() }).optional(),
|
|
16523
|
+
/** OpenAI's own API key, for the `openai` instance only. Codex keeps its
|
|
16524
|
+
* own ChatGPT or API login and never reads this. */
|
|
16525
|
+
openai: external_exports.object({ key: optionalText }).optional(),
|
|
16526
|
+
/** OpenRouter key, for the `openrouter` instance only. */
|
|
16527
|
+
openrouter: external_exports.object({ key: optionalText }).optional(),
|
|
16377
16528
|
/** Monthly spend limit for the whole workspace, against the cost engines
|
|
16378
16529
|
* report to the usage ledger. Enforced only with the `budgets` entitlement. */
|
|
16379
16530
|
budgets: external_exports.object({
|
|
@@ -16407,8 +16558,8 @@ var appConfigSchema = external_exports.object({
|
|
|
16407
16558
|
opencodeGo: external_exports.object({ apiKey: optionalText }).optional(),
|
|
16408
16559
|
/** Voice settings and the selected voice id. `provider` picks the
|
|
16409
16560
|
* engine: "elevenlabs" (default; needs `key`), "fish" (needs its own
|
|
16410
|
-
* `fishKey`), "system" (the Mac's
|
|
16411
|
-
* "xai" (Grok TTS, reusing `xai.key`), or
|
|
16561
|
+
* `fishKey`; `fishModel` picks its speech model), "system" (the Mac's
|
|
16562
|
+
* built-in voices, no key), "xai" (Grok TTS, reusing `xai.key`), or
|
|
16412
16563
|
* "chatterbox" (a local OpenAI-compatible Chatterbox server; `baseUrl`
|
|
16413
16564
|
* and `model` are settings, not secrets). Cloud keys stay separate so
|
|
16414
16565
|
* switching providers never overwrites or misuses the other key. */
|
|
@@ -16418,7 +16569,8 @@ var appConfigSchema = external_exports.object({
|
|
|
16418
16569
|
voice: optionalText,
|
|
16419
16570
|
provider: external_exports.enum(["elevenlabs", "fish", "system", "chatterbox", "xai"]).optional(),
|
|
16420
16571
|
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(),
|
|
16421
|
-
model: optionalText
|
|
16572
|
+
model: optionalText,
|
|
16573
|
+
fishModel: external_exports.enum(FISH_TTS_MODELS).optional()
|
|
16422
16574
|
}).optional(),
|
|
16423
16575
|
/** The decision model (server/decider): a fast classifier that picks
|
|
16424
16576
|
* things for bots, starting with who answers a room message. `key` is
|
|
@@ -16506,6 +16658,34 @@ var DATA_DIR = process.env.OMB_DATA_DIR ?? join3(homedir2(), ".openmausbot");
|
|
|
16506
16658
|
var LEGACY_DATA_DIR = join3(homedir2(), ".opengrokbot");
|
|
16507
16659
|
var EVENTS_DIR = join3(DATA_DIR, "events");
|
|
16508
16660
|
var NATIVE_DIR = join3(DATA_DIR, "native");
|
|
16661
|
+
var OPENAI_API_INSTANCE = "openai";
|
|
16662
|
+
var OPENROUTER_API_INSTANCE = "openrouter";
|
|
16663
|
+
var XAI_API_INSTANCE = "xaiApi";
|
|
16664
|
+
var CLAUDE_API_INSTANCE = "claudeApi";
|
|
16665
|
+
var API_KEY_FLEET = {
|
|
16666
|
+
[OPENAI_API_INSTANCE]: {
|
|
16667
|
+
driver: "openai-compat",
|
|
16668
|
+
displayName: "OpenAI",
|
|
16669
|
+
access: "api",
|
|
16670
|
+
icon: { kind: "preset", preset: "openai" },
|
|
16671
|
+
config: { url: "https://api.openai.com/v1", apiKeyEnv: "OMB_OPENAI_API_KEY", catalog: "openai" }
|
|
16672
|
+
},
|
|
16673
|
+
[CLAUDE_API_INSTANCE]: {
|
|
16674
|
+
driver: "claudeAgent",
|
|
16675
|
+
displayName: "Claude (API key)",
|
|
16676
|
+
access: "api",
|
|
16677
|
+
icon: { kind: "preset", preset: "anthropic" },
|
|
16678
|
+
config: { requireApiKey: true }
|
|
16679
|
+
},
|
|
16680
|
+
[XAI_API_INSTANCE]: { driver: "grok", displayName: "xAI", access: "api", icon: { kind: "preset", preset: "xai" } },
|
|
16681
|
+
[OPENROUTER_API_INSTANCE]: {
|
|
16682
|
+
driver: "openai-compat",
|
|
16683
|
+
displayName: "OpenRouter",
|
|
16684
|
+
access: "api",
|
|
16685
|
+
icon: { kind: "preset", preset: "openrouter" },
|
|
16686
|
+
config: { url: "https://openrouter.ai/api/v1", apiKeyEnv: "OMB_OPENROUTER_API_KEY" }
|
|
16687
|
+
}
|
|
16688
|
+
};
|
|
16509
16689
|
|
|
16510
16690
|
// server/container-computer.ts
|
|
16511
16691
|
var run = promisify(execFile2);
|
|
@@ -16637,6 +16817,7 @@ var CONTAINER_ID = /^[a-f0-9]{12,64}$/i;
|
|
|
16637
16817
|
var LOCK_ACQUIRE_TIMEOUT_MS = 5e3;
|
|
16638
16818
|
var SCREENSHOT_BUDGET_MS = 45e3;
|
|
16639
16819
|
var PREPARATION_LOCK_TIMEOUT_MS = SCREENSHOT_BUDGET_MS + LOCK_ACQUIRE_TIMEOUT_MS;
|
|
16820
|
+
var NATIVE_VIEWER_LIFETIME_MS = 8 * 60 * 6e4;
|
|
16640
16821
|
function vpsDockerArgs(alias2, args2) {
|
|
16641
16822
|
if (!isValidSshAlias(alias2)) {
|
|
16642
16823
|
throw new Error("invalid VPS SSH config alias");
|
|
@@ -3169,6 +3169,7 @@ var WORKSPACE_BACKUP_CLIENT_KEYS = [
|
|
|
3169
3169
|
"omb-draft-channel-modes",
|
|
3170
3170
|
"omb-skin",
|
|
3171
3171
|
"omb-show-threads",
|
|
3172
|
+
"omb-show-run-card",
|
|
3172
3173
|
"openmausbot.sidebarDensity",
|
|
3173
3174
|
"openmausbot.sidebarCollapsedSections.v1",
|
|
3174
3175
|
"openmausbot.sidebarSectionOrder.v1",
|
|
@@ -18683,15 +18684,27 @@ var stdioEntrySchema = external_exports.object({
|
|
|
18683
18684
|
var stdioMutationSchema = stdioEntrySchema.extend({
|
|
18684
18685
|
env: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional()
|
|
18685
18686
|
});
|
|
18687
|
+
var CLIENT_ID = /^[\x20-\x7e]+$/;
|
|
18688
|
+
var SCOPE = /^[\x21\x23-\x5b\x5d-\x7e]+$/;
|
|
18689
|
+
var CLIENT_SECRET_MAX = 4096;
|
|
18690
|
+
var oauthClientSchema = external_exports.object({
|
|
18691
|
+
clientId: external_exports.string().trim().min(1, "Enter the client ID of the app registered with this server's sign-in provider.").max(512).regex(CLIENT_ID, "A client ID is printable text on one line."),
|
|
18692
|
+
clientSecret: external_exports.string().min(1).max(CLIENT_SECRET_MAX).regex(CLIENT_ID, "A client secret is printable text on one line.").optional(),
|
|
18693
|
+
scopes: external_exports.array(external_exports.string().max(256).regex(SCOPE, "Scopes are single words, like offline_access or api://my-app/mcp.read.")).max(32).optional()
|
|
18694
|
+
}).strict();
|
|
18686
18695
|
var remoteEntrySchema = external_exports.object({
|
|
18687
18696
|
/** Streamable HTTP unless the entry says the older SSE transport. */
|
|
18688
18697
|
type: external_exports.enum(["http", "sse"]).optional(),
|
|
18689
18698
|
url: external_exports.string().trim().min(1).max(2048),
|
|
18690
18699
|
headers: external_exports.record(external_exports.string(), external_exports.string().max(16384)).optional(),
|
|
18700
|
+
oauth: oauthClientSchema.optional(),
|
|
18691
18701
|
enabled: external_exports.boolean().optional()
|
|
18692
18702
|
}).strict();
|
|
18693
18703
|
var remoteMutationSchema = remoteEntrySchema.extend({
|
|
18694
|
-
headers: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional()
|
|
18704
|
+
headers: external_exports.record(external_exports.string(), external_exports.union([external_exports.string().max(16384), external_exports.literal(true)])).optional(),
|
|
18705
|
+
oauth: oauthClientSchema.extend({
|
|
18706
|
+
clientSecret: external_exports.union([external_exports.string().min(1).max(CLIENT_SECRET_MAX).regex(CLIENT_ID, "A client secret is printable text on one line."), external_exports.literal(true)]).optional()
|
|
18707
|
+
}).optional()
|
|
18695
18708
|
});
|
|
18696
18709
|
|
|
18697
18710
|
// server/schema.ts
|
|
@@ -18765,7 +18778,11 @@ var sessionSchema = external_exports.object({
|
|
|
18765
18778
|
userId: external_exports.string().max(256).optional(),
|
|
18766
18779
|
email: external_exports.string().max(320).optional(),
|
|
18767
18780
|
/** Set only by the internal verified-portal issuance path, never by email or pairing input. */
|
|
18768
|
-
membershipAuthority: external_exports.literal("portal").optional()
|
|
18781
|
+
membershipAuthority: external_exports.literal("portal").optional(),
|
|
18782
|
+
/** A browser sign-in (PairingCode `browser`): accepted only as its browser's cookie, never as a bearer token. */
|
|
18783
|
+
cookieOnly: external_exports.literal(true).optional(),
|
|
18784
|
+
/** Whose OMB Cloud a browser sign-in signed in to (its PairingCode `owner`). */
|
|
18785
|
+
owner: external_exports.string().max(254).optional()
|
|
18769
18786
|
});
|
|
18770
18787
|
var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
|
|
18771
18788
|
|
|
@@ -18777,6 +18794,7 @@ var optionalText = external_exports.string().optional();
|
|
|
18777
18794
|
var SSH_ALIAS = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
|
|
18778
18795
|
var LEGACY_BROWSER_PROFILE_ID = /^[A-Za-z0-9_-]{1,40}$/;
|
|
18779
18796
|
var BROWSER_PROFILE_ID = /^[a-z0-9_-]{1,40}$/;
|
|
18797
|
+
var FISH_TTS_MODELS = ["s2.1-pro", "s2.1-pro-free"];
|
|
18780
18798
|
var MIN_ROOM_TURN_TIMEOUT_MINUTES = 1;
|
|
18781
18799
|
var MAX_ROOM_TURN_TIMEOUT_MINUTES = 1440;
|
|
18782
18800
|
var DEFAULT_ROOM_HANDOFF_LIFETIME_MINUTES = 30;
|
|
@@ -18787,6 +18805,8 @@ var MIN_THREAD_EVENT_LOG_BYTES = 256 * 1024;
|
|
|
18787
18805
|
var MAX_THREAD_EVENT_LOG_BYTES = 4 * 1024 * 1024 * 1024;
|
|
18788
18806
|
var MIN_LOCAL_VM_MAX_INSTANCES = 1;
|
|
18789
18807
|
var MAX_LOCAL_VM_MAX_INSTANCES = 8;
|
|
18808
|
+
var MIN_LOCAL_VM_IDLE_TIMEOUT_MINUTES = 5;
|
|
18809
|
+
var MAX_LOCAL_VM_IDLE_TIMEOUT_MINUTES = 1440;
|
|
18790
18810
|
function isValidSshAlias(value) {
|
|
18791
18811
|
return typeof value === "string" && SSH_ALIAS.test(value);
|
|
18792
18812
|
}
|
|
@@ -18824,7 +18844,8 @@ var roomConfigSchema = external_exports.object({
|
|
|
18824
18844
|
);
|
|
18825
18845
|
var localVmConfigSchema = external_exports.object({
|
|
18826
18846
|
mode: external_exports.enum(["shared", "per-bot", "pool"]).optional(),
|
|
18827
|
-
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional()
|
|
18847
|
+
maxInstances: external_exports.number().int().min(MIN_LOCAL_VM_MAX_INSTANCES).max(MAX_LOCAL_VM_MAX_INSTANCES).optional(),
|
|
18848
|
+
idleTimeoutMinutes: external_exports.number().int().min(MIN_LOCAL_VM_IDLE_TIMEOUT_MINUTES).max(MAX_LOCAL_VM_IDLE_TIMEOUT_MINUTES).optional()
|
|
18828
18849
|
});
|
|
18829
18850
|
var browserProfileSchema = external_exports.object({
|
|
18830
18851
|
// "guest" is the throwaway session's reserved id, never a saved profile
|
|
@@ -18983,7 +19004,11 @@ var onboardingConfigSchema = external_exports.object({
|
|
|
18983
19004
|
/** Which welcome flow was completed; a newer flow may re-show itself. */
|
|
18984
19005
|
version: external_exports.number().int().min(0).max(1e3).optional(),
|
|
18985
19006
|
reelSeen: external_exports.boolean().optional(),
|
|
18986
|
-
hintsSeen: external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional()
|
|
19007
|
+
hintsSeen: external_exports.array(external_exports.string().trim().min(1).max(60)).max(100).optional(),
|
|
19008
|
+
/** OMB Cloud home only: when a bot's turn first finished on this machine
|
|
19009
|
+
* (cloud-home.ts firstCloudTurnPatch). Written by the server, read by the
|
|
19010
|
+
* Cloud's setup checklist. */
|
|
19011
|
+
firstTurnAt: external_exports.string().trim().max(40).optional()
|
|
18987
19012
|
}).strict();
|
|
18988
19013
|
var instanceConfigSchema = external_exports.object({
|
|
18989
19014
|
driver: external_exports.string().min(1),
|
|
@@ -18995,6 +19020,7 @@ var instanceConfigSchema = external_exports.object({
|
|
|
18995
19020
|
]).optional(),
|
|
18996
19021
|
environment: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
18997
19022
|
enabled: external_exports.boolean().optional(),
|
|
19023
|
+
access: external_exports.enum(["subscription", "custom", "api"]).optional(),
|
|
18998
19024
|
config: external_exports.json().optional()
|
|
18999
19025
|
});
|
|
19000
19026
|
var instanceConfigMapSchema = external_exports.record(external_exports.string(), instanceConfigSchema);
|
|
@@ -19056,7 +19082,12 @@ var appConfigSchema = external_exports.object({
|
|
|
19056
19082
|
/** Anthropic API key for Claude Code billed per token, handed only to
|
|
19057
19083
|
* Claude instances; `url` only for a proxy or a test double. Never a
|
|
19058
19084
|
* personal-login OAuth token. */
|
|
19059
|
-
anthropic: external_exports.object({ key: optionalText, url: optionalText }).optional(),
|
|
19085
|
+
anthropic: external_exports.object({ key: optionalText, url: optionalText, everyClaudeBot: external_exports.boolean().optional() }).optional(),
|
|
19086
|
+
/** OpenAI's own API key, for the `openai` instance only. Codex keeps its
|
|
19087
|
+
* own ChatGPT or API login and never reads this. */
|
|
19088
|
+
openai: external_exports.object({ key: optionalText }).optional(),
|
|
19089
|
+
/** OpenRouter key, for the `openrouter` instance only. */
|
|
19090
|
+
openrouter: external_exports.object({ key: optionalText }).optional(),
|
|
19060
19091
|
/** Monthly spend limit for the whole workspace, against the cost engines
|
|
19061
19092
|
* report to the usage ledger. Enforced only with the `budgets` entitlement. */
|
|
19062
19093
|
budgets: external_exports.object({
|
|
@@ -19090,8 +19121,8 @@ var appConfigSchema = external_exports.object({
|
|
|
19090
19121
|
opencodeGo: external_exports.object({ apiKey: optionalText }).optional(),
|
|
19091
19122
|
/** Voice settings and the selected voice id. `provider` picks the
|
|
19092
19123
|
* engine: "elevenlabs" (default; needs `key`), "fish" (needs its own
|
|
19093
|
-
* `fishKey`), "system" (the Mac's
|
|
19094
|
-
* "xai" (Grok TTS, reusing `xai.key`), or
|
|
19124
|
+
* `fishKey`; `fishModel` picks its speech model), "system" (the Mac's
|
|
19125
|
+
* built-in voices, no key), "xai" (Grok TTS, reusing `xai.key`), or
|
|
19095
19126
|
* "chatterbox" (a local OpenAI-compatible Chatterbox server; `baseUrl`
|
|
19096
19127
|
* and `model` are settings, not secrets). Cloud keys stay separate so
|
|
19097
19128
|
* switching providers never overwrites or misuses the other key. */
|
|
@@ -19101,7 +19132,8 @@ var appConfigSchema = external_exports.object({
|
|
|
19101
19132
|
voice: optionalText,
|
|
19102
19133
|
provider: external_exports.enum(["elevenlabs", "fish", "system", "chatterbox", "xai"]).optional(),
|
|
19103
19134
|
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(),
|
|
19104
|
-
model: optionalText
|
|
19135
|
+
model: optionalText,
|
|
19136
|
+
fishModel: external_exports.enum(FISH_TTS_MODELS).optional()
|
|
19105
19137
|
}).optional(),
|
|
19106
19138
|
/** The decision model (server/decider): a fast classifier that picks
|
|
19107
19139
|
* things for bots, starting with who answers a room message. `key` is
|
|
@@ -19194,6 +19226,34 @@ var DATA_DIR = process.env.OMB_DATA_DIR ?? join2(homedir(), ".openmausbot");
|
|
|
19194
19226
|
var LEGACY_DATA_DIR = join2(homedir(), ".opengrokbot");
|
|
19195
19227
|
var EVENTS_DIR = join2(DATA_DIR, "events");
|
|
19196
19228
|
var NATIVE_DIR = join2(DATA_DIR, "native");
|
|
19229
|
+
var OPENAI_API_INSTANCE = "openai";
|
|
19230
|
+
var OPENROUTER_API_INSTANCE = "openrouter";
|
|
19231
|
+
var XAI_API_INSTANCE = "xaiApi";
|
|
19232
|
+
var CLAUDE_API_INSTANCE = "claudeApi";
|
|
19233
|
+
var API_KEY_FLEET = {
|
|
19234
|
+
[OPENAI_API_INSTANCE]: {
|
|
19235
|
+
driver: "openai-compat",
|
|
19236
|
+
displayName: "OpenAI",
|
|
19237
|
+
access: "api",
|
|
19238
|
+
icon: { kind: "preset", preset: "openai" },
|
|
19239
|
+
config: { url: "https://api.openai.com/v1", apiKeyEnv: "OMB_OPENAI_API_KEY", catalog: "openai" }
|
|
19240
|
+
},
|
|
19241
|
+
[CLAUDE_API_INSTANCE]: {
|
|
19242
|
+
driver: "claudeAgent",
|
|
19243
|
+
displayName: "Claude (API key)",
|
|
19244
|
+
access: "api",
|
|
19245
|
+
icon: { kind: "preset", preset: "anthropic" },
|
|
19246
|
+
config: { requireApiKey: true }
|
|
19247
|
+
},
|
|
19248
|
+
[XAI_API_INSTANCE]: { driver: "grok", displayName: "xAI", access: "api", icon: { kind: "preset", preset: "xai" } },
|
|
19249
|
+
[OPENROUTER_API_INSTANCE]: {
|
|
19250
|
+
driver: "openai-compat",
|
|
19251
|
+
displayName: "OpenRouter",
|
|
19252
|
+
access: "api",
|
|
19253
|
+
icon: { kind: "preset", preset: "openrouter" },
|
|
19254
|
+
config: { url: "https://openrouter.ai/api/v1", apiKeyEnv: "OMB_OPENROUTER_API_KEY" }
|
|
19255
|
+
}
|
|
19256
|
+
};
|
|
19197
19257
|
|
|
19198
19258
|
// server/workspace-backup-policy.ts
|
|
19199
19259
|
var PORTABLE_CONFIG_KEYS = [
|
|
@@ -19214,6 +19274,7 @@ function portableWorkspaceConfig(value) {
|
|
|
19214
19274
|
}
|
|
19215
19275
|
function excludedWorkspaceAuthPath(path) {
|
|
19216
19276
|
if (/^command-allowlist\.json(?:$|\.\d+\.[0-9a-f-]+\.tmp$)/.test(path)) return true;
|
|
19277
|
+
if (/^mcp-oauth\.json(?:$|\.\d+\.[0-9a-f-]+\.tmp$)/.test(path)) return true;
|
|
19217
19278
|
return /^(?:(?:providers|caddy|chrome-profile|\.agent-browser)(?:\/|$)|workspace-credentials\.json$|external-runtimes\.json$|browser-engine-key$)/.test(path) || /^(?:config\.json|webhooks\.json|workspace-credentials\.json|external-runtimes\.json|browser-engine-key|sessions\.json|tunnel-account\.json)\.\d+(?:\.[0-9a-f-]+)?\.tmp$/.test(path) || /^(?:vm-home|vm-homes\/[^/]+)\/\.browser-profiles(?:\/|$)/.test(path);
|
|
19218
19279
|
}
|
|
19219
19280
|
function redownloadedOrgLibraryPath(path) {
|
|
@@ -19251,7 +19312,10 @@ var EXCLUDED = /* @__PURE__ */ new Set([
|
|
|
19251
19312
|
"messages.db-shm",
|
|
19252
19313
|
// This machine's decision-model log (server/decider/log.ts): local
|
|
19253
19314
|
// measurement of what the classifier picked, not workspace data.
|
|
19254
|
-
"decider-log"
|
|
19315
|
+
"decider-log",
|
|
19316
|
+
// A Cloud home's record of who its owner was (server/cloud-owner.ts): this
|
|
19317
|
+
// machine's own, kept in place by a restore, which settles what it brought.
|
|
19318
|
+
"cloud-owner.json"
|
|
19255
19319
|
]);
|
|
19256
19320
|
var EXCLUSION_NOTES = [
|
|
19257
19321
|
"Device pairing, server identity, live leases and runtime files (existing destination identities are preserved).",
|
|
@@ -14728,7 +14728,11 @@ var sessionSchema = external_exports.object({
|
|
|
14728
14728
|
userId: external_exports.string().max(256).optional(),
|
|
14729
14729
|
email: external_exports.string().max(320).optional(),
|
|
14730
14730
|
/** Set only by the internal verified-portal issuance path, never by email or pairing input. */
|
|
14731
|
-
membershipAuthority: external_exports.literal("portal").optional()
|
|
14731
|
+
membershipAuthority: external_exports.literal("portal").optional(),
|
|
14732
|
+
/** A browser sign-in (PairingCode `browser`): accepted only as its browser's cookie, never as a bearer token. */
|
|
14733
|
+
cookieOnly: external_exports.literal(true).optional(),
|
|
14734
|
+
/** Whose OMB Cloud a browser sign-in signed in to (its PairingCode `owner`). */
|
|
14735
|
+
owner: external_exports.string().max(254).optional()
|
|
14732
14736
|
});
|
|
14733
14737
|
var fileSchema = external_exports.object({ version: external_exports.literal(1), sessions: external_exports.array(sessionSchema) });
|
|
14734
14738
|
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./mermaid.core-VhEMkSND.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|