openmausbot 0.1.86 → 0.1.88
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/README.md +4 -3
- package/dist/assets/{abnfDiagram-O67JEVCF-DpUZNnFD.js → abnfDiagram-O67JEVCF-qd9VD3GV.js} +1 -1
- package/dist/assets/{arc-DW7mrI4p.js → arc-3RwkUjRe.js} +1 -1
- package/dist/assets/{architectureDiagram-NJMV4G6O-CyeZ5WLZ.js → architectureDiagram-NJMV4G6O-CFKSJS7a.js} +1 -1
- package/dist/assets/{blockDiagram-BEXU5L5S-CBVaNjO7.js → blockDiagram-BEXU5L5S-CG1rEfWD.js} +1 -1
- package/dist/assets/{c4Diagram-YGBWAQC7-sf8d41uT.js → c4Diagram-YGBWAQC7-CBW9N664.js} +1 -1
- package/dist/assets/channel-CnRnO3tF.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BOGvy7Y_.js → chunk-2Q5K7J3B-2mRfTksB.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-BiF9zyiz.js → chunk-3FUC2YCW-Cv1dpErj.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-EFuZ1SBZ.js → chunk-5VM5RSS4-B7IACJp-.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-pJLNSAT7.js → chunk-GTNCS2PH-An0hZtYa.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-Cb-3_3IT.js → chunk-GWA4HPMP-BcJB2nEm.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-DAf5aogn.js → chunk-JWPE2WC7-CV_W7TN7.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-DR3kiwZz.js → chunk-NETBCI7D-Bcs_kwnA.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-BmU8PeyM.js → chunk-WEXAMYUT-lrx_DxFP.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-Buh8g8OT.js → chunk-XXDRQBXY-DabHlLGM.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-BurfmMWM.js → classDiagram-v2-NBCMYWYE-BnHj6P7d.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-KkGZUEkU.js → cose-bilkent-JH36ORCC-CfLp6UDi.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-C3PpV96d.js → cynefin-OW5HDTMX-Dm4dbVA1.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-Dt8JwJaI.js → cynefinDiagram-VND7K2PF-B9mH-PID.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-DkjN8266.js → dagre-6A5THRUB-DDc_NVQJ.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-DUAJS0JV.js → diagram-22UHCM2B-lwr8Ip8-.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-Dw4KhF1a.js → diagram-3UASUU5V-BLLe6dmI.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-Dd1gmQqf.js → diagram-ATOU4E4O-6eUIq4lz.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-CjwGs0Yw.js → diagram-CDSNMT55-O-pRN7VQ.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-BL-69Zrq.js → diagram-MLGK6HIB-BietvGAI.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-5Zi2N7wo.js → diagram-MPIPVDR6-Bd2Cl62X.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-D9NekWUX.js → ebnfDiagram-ZINNZB2B-B6iDy69W.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-CkaSQjxw.js → elk-276RUBZZ-DQVHfKe0.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-CdAVBV8-.js → erDiagram-OPXOYQCR-BWdVp2tQ.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-Bm_lWWH7.js → flowDiagram-KWPJA3E3-WLE6rKB4.js} +1 -1
- package/dist/assets/{ganttDiagram-FUAMR5RP-FZ8ejYWJ.js → ganttDiagram-FUAMR5RP-BbjS-4gn.js} +1 -1
- package/dist/assets/{gitGraphDiagram-X574FWY7-Dlv9rizZ.js → gitGraphDiagram-X574FWY7-Dpy2QSGq.js} +1 -1
- package/dist/assets/index-BIMdIbaw.css +1 -0
- package/dist/assets/index-CHnODCr2.js +583 -0
- package/dist/assets/{index-h9FFNwTu.js → index-CIaHn5NS.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-BdQ_gW5B.js → infoDiagram-VRGFBTTK-D_jKWlKe.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-EwssEp2X.js → ishikawaDiagram-OU5B5YK6-DLJohSuK.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-BX1G1vOd.js → journeyDiagram-ZHPQQLJL-DPOFj0qN.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-BB4kAsyC.js → kanban-definition-PNTS6WVX-BI7v-xpK.js} +1 -1
- package/dist/assets/{linear-3su2TG93.js → linear-C2pWPSxO.js} +1 -1
- package/dist/assets/{mermaid.core-CDD1E0s9.js → mermaid.core-CR-j5WQU.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-Ba50MsNK.js → mindmap-definition-NLK3R4M7-lz9GvXRh.js} +1 -1
- package/dist/assets/{pegDiagram-GJSIUBJH-DZLkkZlM.js → pegDiagram-GJSIUBJH-Dl4_ia61.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DaTz77Uq.js → pieDiagram-5QR66LMP-DWuT3n88.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-CpaiidpR.js → quadrantDiagram-O4NWA36T-DXWe9Jx7.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-mN4JrMeI.js → railroadDiagram-XR7U4H2S-COY1IBVY.js} +1 -1
- package/dist/assets/{requirementDiagram-PLB6GJNP-BSNDRpg7.js → requirementDiagram-PLB6GJNP-DnyVuhsQ.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-FngzGNug.js → sankeyDiagram-IPEJSGJF-BSc4NdGK.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-CM4pCC3L.js → sequenceDiagram-PO4LG4MO-kqEU2EGq.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-CRICHXkw.js → sizeCapture-INFHLROL-BvB4bkWD.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-oyTWpxH2.js → stateDiagram-v2-GCMORJYK-BIrqNv7y.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-D9h9mPBq.js → swimlanes-2SLR337P-CFnalQUE.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-C4a8qNGj.js +8 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-BJUlN9bW.js → timeline-definition-EJHVYXUP-CsSWJnSQ.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-3uBNkbAb.js → usecaseDiagram-POWQR4AR-DkAmJ1EE.js} +1 -1
- package/dist/assets/{vennDiagram-UO4OBE2U-D2odalzT.js → vennDiagram-UO4OBE2U-C3vd9drL.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-DHgFaB9S.js → wardleyDiagram-VNRHLVJA-j26CM-pi.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-w5GYM2h0.js → xychartDiagram-PMCCYNJV-BYu1Q_at.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/browser-proxy.js +2 -1
- package/dist-server/companion/src/routes.js +8 -1
- package/dist-server/connector-proxy.js +105 -1
- package/dist-server/container-mcp.js +1032 -165
- package/dist-server/drivers/agents-proxy.js +338 -29
- package/dist-server/drivers/phone-proxy.js +33 -2
- package/dist-server/index.js +40590 -31811
- package/dist-server/local-computer-proxy.js +5 -3
- package/dist-server/local-computer.js +53 -17
- package/dist-server/mcp-gate.js +2 -0
- package/dist-server/mcp-server.js +5 -3
- package/dist-server/message-search.worker.js +52 -0
- package/dist-server/openmausbot.js +4457 -1399
- package/dist-server/pair-cli.js +4457 -1399
- package/dist-server/permission-proxy.js +29 -9
- package/dist-server/server/admission.js +81 -0
- package/dist-server/server/aside-queue.js +294 -0
- package/dist-server/server/attachments.js +98 -1
- package/dist-server/server/auto-approve.js +4 -3
- package/dist-server/server/auto-vm-claims.js +1 -0
- package/dist-server/server/bot-attachment.js +107 -0
- package/dist-server/server/bot-overview.js +19 -0
- package/dist-server/server/bot-package.js +18 -292
- package/dist-server/server/bot-profile.js +5 -17
- package/dist-server/server/box-create-idempotency.js +3 -3
- package/dist-server/server/box.js +57 -55
- package/dist-server/server/browser-proxy.js +3 -2
- package/dist-server/server/browser-runtime.js +37 -1
- package/dist-server/server/cli-api-setup.js +1 -0
- package/dist-server/server/cli.js +2 -2
- package/dist-server/server/command-allowlist.js +154 -0
- package/dist-server/server/composio.js +297 -1
- package/dist-server/server/computer-wait.js +22 -9
- package/dist-server/server/config.js +84 -12
- package/dist-server/server/connector-advertisement.js +165 -0
- package/dist-server/server/connector-proxy.js +14 -2
- package/dist-server/server/connector-verdict.js +168 -0
- package/dist-server/server/container-computer.js +61 -1
- package/dist-server/server/contracts.js +22 -0
- package/dist-server/server/default-model-selection.js +9 -0
- package/dist-server/server/delegations.js +85 -34
- package/dist-server/server/drivers/acp/core.js +80 -20
- package/dist-server/server/drivers/acp/cursor.js +3 -7
- package/dist-server/server/drivers/acp/droid.js +4 -7
- package/dist-server/server/drivers/acp/gemini.js +4 -4
- package/dist-server/server/drivers/acp/grok.js +4 -9
- package/dist-server/server/drivers/acp/hermes.js +3 -5
- package/dist-server/server/drivers/acp/opencode-go.js +2 -5
- package/dist-server/server/drivers/acp/qwen.js +9 -15
- package/dist-server/server/drivers/agents-call.js +179 -13
- package/dist-server/server/drivers/agents-catalog.js +134 -10
- package/dist-server/server/drivers/boxagent.js +160 -36
- package/dist-server/server/drivers/builtIn.js +2 -0
- package/dist-server/server/drivers/chat-box-tools.js +90 -0
- package/dist-server/server/drivers/chat-images.js +54 -0
- package/dist-server/server/drivers/chat-mcp-tools.js +38 -8
- package/dist-server/server/drivers/chat-tool-approval.js +70 -18
- package/dist-server/server/drivers/claude.js +38 -19
- package/dist-server/server/drivers/codex-catalog.js +14 -6
- package/dist-server/server/drivers/codex-identity.js +2 -1
- package/dist-server/server/drivers/codex-instructions.js +48 -6
- package/dist-server/server/drivers/codex-release.js +48 -0
- package/dist-server/server/drivers/codex-tool-surface.js +20 -0
- package/dist-server/server/drivers/codex.js +102 -55
- package/dist-server/server/drivers/mistral.js +115 -0
- package/dist-server/server/drivers/openai-chat.js +180 -33
- package/dist-server/server/drivers/openai-compat.js +1 -0
- package/dist-server/server/drivers/permission-command.js +35 -0
- package/dist-server/server/drivers/phone-proxy.js +47 -2
- package/dist-server/server/drivers/pi.js +306 -28
- package/dist-server/server/drivers/prompt-split.js +110 -0
- package/dist-server/server/drivers/session-idle.js +29 -0
- package/dist-server/server/env-path.js +15 -0
- package/dist-server/server/fleet.js +1 -1
- package/dist-server/server/group-thread-usage.js +103 -0
- package/dist-server/server/guarded-requests.js +2 -2
- package/dist-server/server/harness/registry.js +1 -0
- package/dist-server/server/harness-capabilities.js +46 -0
- package/dist-server/server/hosted-models.js +1 -1
- package/dist-server/server/index.js +2396 -505
- package/dist-server/server/local-computer.js +72 -23
- package/dist-server/server/managed-desktop.js +1 -1
- package/dist-server/server/mcp-bridge.js +6 -6
- package/dist-server/server/message-db.js +22 -42
- package/dist-server/server/message-file.js +9 -1
- package/dist-server/server/message-search-query.js +43 -0
- package/dist-server/server/message-search-worker.js +80 -0
- package/dist-server/server/message-search.worker.js +21 -0
- package/dist-server/server/model-requests.js +248 -0
- package/dist-server/server/new-bot-defaults.js +115 -0
- package/dist-server/server/options-card.js +21 -0
- package/dist-server/server/org-library.js +1065 -0
- package/dist-server/server/package-export.js +627 -39
- package/dist-server/server/package-import.js +458 -0
- package/dist-server/server/package-parts.js +87 -0
- package/dist-server/server/peer-approval.js +16 -7
- package/dist-server/server/peer-delivery.js +60 -0
- package/dist-server/server/peer-roster.js +67 -0
- package/dist-server/server/presets.js +492 -0
- package/dist-server/server/profile-requests.js +66 -39
- package/dist-server/server/profile-revision.js +9 -1
- package/dist-server/server/profile-versions.js +6 -3
- package/dist-server/server/provider-key-check.js +3 -2
- package/dist-server/server/published-teams.js +80 -0
- package/dist-server/server/room-handoffs.js +19 -3
- package/dist-server/server/routes/bot-presets.js +25 -0
- package/dist-server/server/routine-requests.js +35 -10
- package/dist-server/server/routines.js +41 -1
- package/dist-server/server/section-context.js +10 -0
- package/dist-server/server/skill-fetch.js +72 -14
- package/dist-server/server/skills.js +35 -61
- package/dist-server/server/steer-queue.js +3 -2
- package/dist-server/server/store.js +291 -17
- package/dist-server/server/surface.js +10 -4
- package/dist-server/server/system-prompt.js +38 -6
- package/dist-server/server/team-backup.js +6 -2
- package/dist-server/server/team-computers.js +10 -0
- package/dist-server/server/team-library.js +6 -2
- package/dist-server/server/team-manifest.js +4 -3
- package/dist-server/server/team-setup-requests.js +139 -27
- package/dist-server/server/thread-events.js +20 -2
- package/dist-server/server/tightening-requests.js +405 -0
- package/dist-server/server/tts/chatterbox.js +27 -5
- package/dist-server/server/turn-context.js +2 -0
- package/dist-server/server/turn-watchdog.js +12 -3
- package/dist-server/server/usage-ledger.js +19 -2
- package/dist-server/server/vps-computer.js +139 -51
- package/dist-server/server/vps-container-mcp.js +7 -0
- package/dist-server/server/vps-ssh.js +36 -7
- package/dist-server/server/workspace-backup-policy.js +12 -0
- package/dist-server/server/workspace-backup.js +42 -5
- package/dist-server/server/workspace-backup.worker.js +10 -0
- package/dist-server/server/workspace.js +1 -1
- package/dist-server/shared/approval-mode.js +1 -1
- package/dist-server/shared/ask-question.js +207 -12
- package/dist-server/shared/bot-profile.js +15 -0
- package/dist-server/shared/command-allowlist.js +1 -0
- package/dist-server/shared/credential-request.js +6 -2
- package/dist-server/shared/line-diff.js +23 -0
- package/dist-server/shared/model-request.js +1 -0
- package/dist-server/shared/options-card.js +51 -0
- package/dist-server/shared/package-format.js +967 -0
- package/dist-server/shared/profile-request.js +5 -4
- package/dist-server/shared/skill-md.js +64 -0
- package/dist-server/shared/team-backup.js +7 -0
- package/dist-server/shared/tightening-request.js +87 -0
- package/dist-server/shared/wire.js +4 -0
- package/dist-server/src/lib/composer-attachments.js +25 -3
- package/dist-server/vps-container-mcp.js +1132 -171
- package/dist-server/workspace-backup.worker.js +19474 -0
- package/enterprise/README.md +1 -1
- package/package.json +1 -1
- package/dist/assets/channel-BXFkgus9.js +0 -1
- package/dist/assets/index-BGgqlWPJ.css +0 -1
- package/dist/assets/index-BtHo8ZKl.js +0 -577
- package/dist/assets/swimlanesDiagram-TC7HE7FX-BWrvB2ak.js +0 -8
|
@@ -106,6 +106,8 @@ function knownDirs() {
|
|
|
106
106
|
join(home, ".volta", "bin"),
|
|
107
107
|
join(home, ".bun", "bin"),
|
|
108
108
|
join(home, ".asdf", "shims"),
|
|
109
|
+
join(home, ".local", "share", "mise", "shims"),
|
|
110
|
+
// mise installer
|
|
109
111
|
join(home, ".deno", "bin"),
|
|
110
112
|
join(home, "bin"),
|
|
111
113
|
...nvmBinDirs()
|
|
@@ -260,11 +262,11 @@ function createToolListNormalizer() {
|
|
|
260
262
|
// server/mcp-bridge.ts
|
|
261
263
|
var BRIDGE_INACTIVITY_MS = 45e3;
|
|
262
264
|
var PROBE_TIMEOUT_MS = 1e4;
|
|
263
|
-
function runLivenessProbe(probe, timeoutMs = PROBE_TIMEOUT_MS) {
|
|
265
|
+
function runLivenessProbe(probe, timeoutMs = PROBE_TIMEOUT_MS, env) {
|
|
264
266
|
return new Promise((resolve) => {
|
|
265
267
|
const child = spawn(probe.command, probe.args, {
|
|
266
268
|
shell: false,
|
|
267
|
-
env: { ...process.env, PATH: augmentedPath() },
|
|
269
|
+
env: env ?? { ...process.env, PATH: augmentedPath() },
|
|
268
270
|
stdio: ["ignore", "ignore", "ignore"]
|
|
269
271
|
});
|
|
270
272
|
const timer = setTimeout(() => {
|
|
@@ -451,7 +453,7 @@ function runMcpBridge(options) {
|
|
|
451
453
|
const liveness = options.liveness;
|
|
452
454
|
watchdog = createInactivityWatchdog({
|
|
453
455
|
inactivityMs: BRIDGE_INACTIVITY_MS,
|
|
454
|
-
probe: () => runLivenessProbe(liveness),
|
|
456
|
+
probe: () => runLivenessProbe(liveness, PROBE_TIMEOUT_MS, options.env),
|
|
455
457
|
onDead: () => {
|
|
456
458
|
process.stderr.write(
|
|
457
459
|
`${options.label} transport went silent and stopped answering liveness probes; ending the bridge
|
|
@@ -91,16 +91,14 @@ function sameDriverFileIdentity(expected, actual) {
|
|
|
91
91
|
}
|
|
92
92
|
function decodeLegacyDescriptor(value, platform) {
|
|
93
93
|
const supportedPlatform = legacyPlatform(platform);
|
|
94
|
-
if (!supportedPlatform || !value || value.mode === "
|
|
94
|
+
if (!supportedPlatform || !value || !(value.mode === "embedded" || supportedPlatform === "darwin" && value.mode === "standalone") || Object.hasOwn(value, "status") && value.status !== "ready" || typeof value.socketPath !== "string" || !value.socketPath || typeof value.mcpCommand !== "string" || !value.mcpCommand.trim()) {
|
|
95
95
|
return null;
|
|
96
96
|
}
|
|
97
|
-
if (
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
const args = value.mcpArgs ?? ["mcp"];
|
|
97
|
+
if (!Array.isArray(value.mcpArgs) || value.mcpArgs[0] !== "mcp") return null;
|
|
98
|
+
if (!value.mcpEnv || typeof value.mcpEnv !== "object" || Array.isArray(value.mcpEnv)) return null;
|
|
99
|
+
const args = value.mcpArgs;
|
|
102
100
|
if (!args.every((arg) => typeof arg === "string")) return null;
|
|
103
|
-
const env = value.mcpEnv
|
|
101
|
+
const env = value.mcpEnv;
|
|
104
102
|
if (!Object.values(env).every((entry) => typeof entry === "string")) return null;
|
|
105
103
|
return {
|
|
106
104
|
command: value.mcpCommand,
|
|
@@ -219,6 +217,17 @@ function validateLegacyDescriptorRuntime(descriptorFile, platform, { uid = proce
|
|
|
219
217
|
return false;
|
|
220
218
|
}
|
|
221
219
|
}
|
|
220
|
+
function firstPresentCuaDescriptor(candidates) {
|
|
221
|
+
for (const file of new Set(candidates)) {
|
|
222
|
+
try {
|
|
223
|
+
lstatSync(file);
|
|
224
|
+
return file;
|
|
225
|
+
} catch (error) {
|
|
226
|
+
if (error.code !== "ENOENT") return file;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
222
231
|
function readCuaConnection({
|
|
223
232
|
platform = process.platform,
|
|
224
233
|
userData = process.env.OMB_USER_DATA,
|
|
@@ -227,23 +236,49 @@ function readCuaConnection({
|
|
|
227
236
|
validateLegacyRuntime = validateLegacyDescriptorRuntime
|
|
228
237
|
} = {}) {
|
|
229
238
|
const candidates = userData ? [join2(userData, "cua-connection.json")] : [];
|
|
230
|
-
if (platform === "darwin") {
|
|
239
|
+
if (platform === "darwin" && !userData) {
|
|
231
240
|
for (const directory of ["OpenMausBot", "openmausbot", "OpenGrokBot", "opengrokbot"]) {
|
|
232
241
|
candidates.push(join2(home, "Library", "Application Support", directory, "cua-connection.json"));
|
|
233
242
|
}
|
|
234
243
|
}
|
|
235
|
-
|
|
236
|
-
|
|
244
|
+
const file = firstPresentCuaDescriptor(candidates);
|
|
245
|
+
if (!file) return null;
|
|
246
|
+
try {
|
|
247
|
+
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
248
|
+
if (platform === "linux") {
|
|
249
|
+
const decoded = decodeLinuxDescriptor(raw);
|
|
250
|
+
if (decoded && validateLinuxRuntime(file, raw)) return decoded;
|
|
251
|
+
} else {
|
|
252
|
+
const decoded = decodeLegacyDescriptor(raw, platform);
|
|
253
|
+
if (decoded && validateLegacyRuntime(file, platform)) return decoded;
|
|
254
|
+
}
|
|
255
|
+
} catch {
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
function readCuaUnavailableReason({
|
|
260
|
+
platform = process.platform,
|
|
261
|
+
userData = process.env.OMB_USER_DATA,
|
|
262
|
+
home = homedir()
|
|
263
|
+
} = {}) {
|
|
264
|
+
if (!legacyPlatform(platform)) return null;
|
|
265
|
+
const candidates = userData ? [join2(userData, "cua-connection.json")] : [];
|
|
266
|
+
if (platform === "darwin" && !userData) {
|
|
267
|
+
for (const directory of ["OpenMausBot", "openmausbot", "OpenGrokBot", "opengrokbot"]) {
|
|
268
|
+
candidates.push(join2(home, "Library", "Application Support", directory, "cua-connection.json"));
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const file = firstPresentCuaDescriptor(candidates);
|
|
272
|
+
if (!file) return null;
|
|
273
|
+
try {
|
|
274
|
+
if (validateLegacyDescriptorRuntime(file, platform)) {
|
|
237
275
|
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
238
|
-
if (
|
|
239
|
-
const
|
|
240
|
-
if (
|
|
241
|
-
} else {
|
|
242
|
-
const decoded = decodeLegacyDescriptor(raw, platform);
|
|
243
|
-
if (decoded && validateLegacyRuntime(file, platform)) return decoded;
|
|
276
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw) && Object.keys(raw).length === 2 && raw.mode === "unavailable") {
|
|
277
|
+
const reason = raw.reason;
|
|
278
|
+
if (typeof reason === "string" && reason.trim() && reason.length <= 2e3) return reason.trim();
|
|
244
279
|
}
|
|
245
|
-
} catch {
|
|
246
280
|
}
|
|
281
|
+
} catch {
|
|
247
282
|
}
|
|
248
283
|
return null;
|
|
249
284
|
}
|
|
@@ -253,5 +288,6 @@ export {
|
|
|
253
288
|
decodeLinuxDescriptor,
|
|
254
289
|
gatedLocalComputer,
|
|
255
290
|
readCuaConnection,
|
|
291
|
+
readCuaUnavailableReason,
|
|
256
292
|
validateLinuxDescriptorRuntime
|
|
257
293
|
};
|
package/dist-server/mcp-gate.js
CHANGED
|
@@ -39,6 +39,8 @@ function knownDirs() {
|
|
|
39
39
|
join(home, ".volta", "bin"),
|
|
40
40
|
join(home, ".bun", "bin"),
|
|
41
41
|
join(home, ".asdf", "shims"),
|
|
42
|
+
join(home, ".local", "share", "mise", "shims"),
|
|
43
|
+
// mise installer
|
|
42
44
|
join(home, ".deno", "bin"),
|
|
43
45
|
join(home, "bin"),
|
|
44
46
|
...nvmBinDirs()
|
|
@@ -569,7 +569,8 @@ function projectMessage(message) {
|
|
|
569
569
|
subtitle: message.card.subtitle,
|
|
570
570
|
options: message.card.options,
|
|
571
571
|
answered: message.card.answered,
|
|
572
|
-
dismissed: message.card.dismissed
|
|
572
|
+
dismissed: message.card.dismissed,
|
|
573
|
+
expired: message.card.expired
|
|
573
574
|
} : void 0;
|
|
574
575
|
const tool = isRecord(message.tool) ? {
|
|
575
576
|
name: message.tool.name,
|
|
@@ -594,6 +595,7 @@ function projectMessage(message) {
|
|
|
594
595
|
helpUrl: message.secret.helpUrl,
|
|
595
596
|
provided: message.secret.provided,
|
|
596
597
|
dismissed: message.secret.dismissed,
|
|
598
|
+
superseded: message.secret.superseded,
|
|
597
599
|
resumed: message.secret.resumed
|
|
598
600
|
} : void 0;
|
|
599
601
|
return {
|
|
@@ -621,9 +623,9 @@ function taskBelongsTo(owner, taskId) {
|
|
|
621
623
|
return owner.threadId === taskId || records(owner.tasks).some((task) => task.threadId === taskId);
|
|
622
624
|
}
|
|
623
625
|
function messageNeedsInput(message) {
|
|
624
|
-
const card = isRecord(message.card) && message.card.requestId && !message.card.answered && !message.card.dismissed;
|
|
626
|
+
const card = isRecord(message.card) && message.card.requestId && !message.card.answered && !message.card.dismissed && !message.card.expired;
|
|
625
627
|
const connector = isRecord(message.connector) && !message.connector.dismissed && !message.connector.resumed && message.connector.status !== "connected";
|
|
626
|
-
const secret = isRecord(message.secret) && !message.secret.provided && !message.secret.dismissed;
|
|
628
|
+
const secret = isRecord(message.secret) && !message.secret.provided && !message.secret.dismissed && !message.secret.superseded;
|
|
627
629
|
return Boolean(card || connector || secret);
|
|
628
630
|
}
|
|
629
631
|
function dispatchFailedAfterLatestUser(messages) {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// server/message-search.worker.ts
|
|
2
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
4
|
+
|
|
5
|
+
// server/message-search-query.ts
|
|
6
|
+
function searchMessagesInDatabase(database, query, limit = 40, threadId) {
|
|
7
|
+
const needle = query.trim().toLowerCase();
|
|
8
|
+
if (!needle) return [];
|
|
9
|
+
const pattern = `%${needle.replace(/([\\%_])/g, "\\$1")}%`;
|
|
10
|
+
const scope = threadId ? "thread_id = ? AND " : "";
|
|
11
|
+
const statement = database.prepare(
|
|
12
|
+
`SELECT thread_id, id, at, role, kind, text, json_extract(json, '$.tool.name') AS tool_name, json_extract(json, '$.from.name') AS from_name FROM messages WHERE ${scope}((kind = 'text' AND text IS NOT NULL AND lower(text) LIKE ? ESCAPE '\\') OR (kind = 'activity' AND tool_name IS NOT NULL AND lower(tool_name) LIKE ? ESCAPE '\\')) ORDER BY at DESC LIMIT ?`
|
|
13
|
+
);
|
|
14
|
+
const rows = threadId ? statement.all(threadId, pattern, pattern, limit) : statement.all(pattern, pattern, limit);
|
|
15
|
+
return rows.map((row) => {
|
|
16
|
+
const haystack = row.kind === "activity" ? row.tool_name ?? "" : row.text ?? "";
|
|
17
|
+
const hitAt = Math.max(0, haystack.toLowerCase().indexOf(needle));
|
|
18
|
+
const start = Math.max(0, hitAt - 60);
|
|
19
|
+
const end = Math.min(haystack.length, hitAt + needle.length + 90);
|
|
20
|
+
const head = start > 0 ? "\u2026" : "";
|
|
21
|
+
const body = haystack.slice(start, end).replace(/\s+/g, " ").trim();
|
|
22
|
+
const snippet = head + body + (end < haystack.length ? "\u2026" : "");
|
|
23
|
+
const folded = needle.replace(/\s+/g, " ");
|
|
24
|
+
const matchStart = snippet.toLowerCase().indexOf(folded);
|
|
25
|
+
return {
|
|
26
|
+
threadId: row.thread_id,
|
|
27
|
+
messageId: row.id,
|
|
28
|
+
at: row.at,
|
|
29
|
+
role: row.role,
|
|
30
|
+
kind: row.kind,
|
|
31
|
+
snippet,
|
|
32
|
+
matchStart: matchStart < 0 ? head.length : matchStart,
|
|
33
|
+
// A defensive fallback must not mark arbitrary snippet text as the hit.
|
|
34
|
+
matchLength: matchStart < 0 ? 0 : folded.length,
|
|
35
|
+
...row.from_name ? { from: row.from_name } : {}
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// server/message-search.worker.ts
|
|
41
|
+
parentPort.on("message", (request) => {
|
|
42
|
+
let db;
|
|
43
|
+
try {
|
|
44
|
+
db = new DatabaseSync(workerData.file, { readOnly: true });
|
|
45
|
+
const hits = searchMessagesInDatabase(db, request.query, request.limit, request.threadId);
|
|
46
|
+
parentPort.postMessage({ id: request.id, hits });
|
|
47
|
+
} catch {
|
|
48
|
+
parentPort.postMessage({ id: request.id, failed: true });
|
|
49
|
+
} finally {
|
|
50
|
+
db?.close();
|
|
51
|
+
}
|
|
52
|
+
});
|