mo
feat: enterprise capability expansion β app control, browser control, background execution
fce80d1 Download apps/desktop/src/tools/apps.js from aiagentmona/mona-agent: direct link, hf CLI and curl.
- Browser
- Download file 2.22 kB
-
https://huggingface.co/aiagentmona/mona-agent/resolve/main/apps/desktop/src/tools/apps.js
- Command line
-
hf download hf://aiagentmona/mona-agent/apps/desktop/src/tools/apps.js
-
curl -L -o apps.js https://huggingface.co/aiagentmona/mona-agent/resolve/main/apps/desktop/src/tools/apps.js
2.22 kB
| // Application control β launch and quit desktop applications. | |
| // Multi-OS: macOS (open / osascript), Linux (xdg-open / pkill), Windows (start / taskkill). | |
| import { exec } from 'node:child_process'; | |
| import { promisify } from 'node:util'; | |
| import os from 'node:os'; | |
| const pexec = promisify(exec); | |
| const PLATFORM = os.platform(); | |
| function safeName(name) { | |
| // Allow letters, digits, spaces and a small set of safe characters. | |
| return String(name || '').replace(/[^a-zA-Z0-9 ._\-]/g, '').trim(); | |
| } | |
| async function runCmd(cmd, timeoutMs = 8000) { | |
| try { | |
| const { stdout, stderr } = await pexec(cmd, { timeout: timeoutMs, maxBuffer: 1 << 20 }); | |
| return { exitCode: 0, stdout: stdout.slice(0, 2000), stderr: stderr.slice(0, 1000) }; | |
| } catch (err) { | |
| return { | |
| exitCode: err.code ?? 1, | |
| stdout: (err.stdout || '').slice(0, 2000), | |
| stderr: (err.stderr || '').slice(0, 1000), | |
| error: err.message, | |
| }; | |
| } | |
| } | |
| export const apps = { | |
| name: 'apps', | |
| description: `Launch or quit desktop applications (${PLATFORM}).`, | |
| args: { | |
| action: 'string β open | quit', | |
| app: 'string β application name (e.g. Safari, Calculator, Spotify, Terminal)', | |
| }, | |
| platform: PLATFORM, | |
| async run(args) { | |
| const action = String(args.action || 'open').toLowerCase(); | |
| const app = safeName(args.app); | |
| if (!app) return { error: 'app name required' }; | |
| if (action === 'open') { | |
| if (PLATFORM === 'darwin') return runCmd(`open -a "${app}"`); | |
| if (PLATFORM === 'linux') return runCmd(`gtk-launch "${app}" 2>/dev/null || xdg-open "app:${app}" 2>/dev/null || echo "unknown app: ${app}"`); | |
| if (PLATFORM === 'win32') return runCmd(`start "" "${app}"`); | |
| return { error: `Unsupported platform: ${PLATFORM}` }; | |
| } | |
| if (action === 'quit') { | |
| if (PLATFORM === 'darwin') return runCmd(`osascript -e 'quit app "${app}"'`); | |
| if (PLATFORM === 'linux') return runCmd(`pkill -x "${app}" 2>/dev/null; echo done`); | |
| if (PLATFORM === 'win32') return runCmd(`taskkill /IM "${app}.exe" /F 2>nul || echo "not running"`); | |
| return { error: `Unsupported platform: ${PLATFORM}` }; | |
| } | |
| return { error: `Unknown action: ${action} (use open | quit)` }; | |
| }, | |
| }; | |