@made-by-moonlight/athene-cli 0.9.2
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/LICENSE +22 -0
- package/dist/assets/plugin-registry.json +67 -0
- package/dist/assets/scripts/athene-doctor.ps1 +352 -0
- package/dist/assets/scripts/athene-doctor.sh +552 -0
- package/dist/assets/scripts/athene-update.ps1 +224 -0
- package/dist/assets/scripts/athene-update.sh +252 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +26 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +89 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +103 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +329 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.d.ts +3 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +172 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/migrate-storage.d.ts +3 -0
- package/dist/commands/migrate-storage.d.ts.map +1 -0
- package/dist/commands/migrate-storage.js +78 -0
- package/dist/commands/migrate-storage.js.map +1 -0
- package/dist/commands/notify.d.ts +3 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +143 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +167 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +462 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +143 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/report.d.ts +19 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +114 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/review-check.d.ts +3 -0
- package/dist/commands/review-check.d.ts.map +1 -0
- package/dist/commands/review-check.js +122 -0
- package/dist/commands/review-check.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +215 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +187 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +439 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +297 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/spawn.d.ts +4 -0
- package/dist/commands/spawn.d.ts.map +1 -0
- package/dist/commands/spawn.js +436 -0
- package/dist/commands/spawn.js.map +1 -0
- package/dist/commands/start.d.ts +21 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +1836 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +556 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +15 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +652 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +131 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/bun-tmp-janitor.d.ts +18 -0
- package/dist/lib/bun-tmp-janitor.d.ts.map +1 -0
- package/dist/lib/bun-tmp-janitor.js +127 -0
- package/dist/lib/bun-tmp-janitor.js.map +1 -0
- package/dist/lib/caller-context.d.ts +13 -0
- package/dist/lib/caller-context.d.ts.map +1 -0
- package/dist/lib/caller-context.js +20 -0
- package/dist/lib/caller-context.js.map +1 -0
- package/dist/lib/cli-errors.d.ts +8 -0
- package/dist/lib/cli-errors.d.ts.map +1 -0
- package/dist/lib/cli-errors.js +20 -0
- package/dist/lib/cli-errors.js.map +1 -0
- package/dist/lib/completion.d.ts +13 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +428 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/composio-setup.d.ts +65 -0
- package/dist/lib/composio-setup.d.ts.map +1 -0
- package/dist/lib/composio-setup.js +3255 -0
- package/dist/lib/composio-setup.js.map +1 -0
- package/dist/lib/config-instruction.d.ts +2 -0
- package/dist/lib/config-instruction.d.ts.map +1 -0
- package/dist/lib/config-instruction.js +193 -0
- package/dist/lib/config-instruction.js.map +1 -0
- package/dist/lib/constants.d.ts +3 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +3 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/create-session-manager.d.ts +26 -0
- package/dist/lib/create-session-manager.d.ts.map +1 -0
- package/dist/lib/create-session-manager.js +55 -0
- package/dist/lib/create-session-manager.js.map +1 -0
- package/dist/lib/credential-resolver.d.ts +37 -0
- package/dist/lib/credential-resolver.d.ts.map +1 -0
- package/dist/lib/credential-resolver.js +105 -0
- package/dist/lib/credential-resolver.js.map +1 -0
- package/dist/lib/daemon.d.ts +69 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +77 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/dashboard-rebuild.d.ts +53 -0
- package/dist/lib/dashboard-rebuild.d.ts.map +1 -0
- package/dist/lib/dashboard-rebuild.js +188 -0
- package/dist/lib/dashboard-rebuild.js.map +1 -0
- package/dist/lib/dashboard-setup.d.ts +14 -0
- package/dist/lib/dashboard-setup.d.ts.map +1 -0
- package/dist/lib/dashboard-setup.js +192 -0
- package/dist/lib/dashboard-setup.js.map +1 -0
- package/dist/lib/dashboard-url.d.ts +19 -0
- package/dist/lib/dashboard-url.d.ts.map +1 -0
- package/dist/lib/dashboard-url.js +25 -0
- package/dist/lib/dashboard-url.js.map +1 -0
- package/dist/lib/desktop-setup.d.ts +21 -0
- package/dist/lib/desktop-setup.d.ts.map +1 -0
- package/dist/lib/desktop-setup.js +556 -0
- package/dist/lib/desktop-setup.js.map +1 -0
- package/dist/lib/detect-agent.d.ts +24 -0
- package/dist/lib/detect-agent.d.ts.map +1 -0
- package/dist/lib/detect-agent.js +69 -0
- package/dist/lib/detect-agent.js.map +1 -0
- package/dist/lib/detect-env.d.ts +14 -0
- package/dist/lib/detect-env.d.ts.map +1 -0
- package/dist/lib/detect-env.js +46 -0
- package/dist/lib/detect-env.js.map +1 -0
- package/dist/lib/discord-setup.d.ts +20 -0
- package/dist/lib/discord-setup.d.ts.map +1 -0
- package/dist/lib/discord-setup.js +584 -0
- package/dist/lib/discord-setup.js.map +1 -0
- package/dist/lib/format.d.ts +11 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +116 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/git-utils.d.ts +14 -0
- package/dist/lib/git-utils.d.ts.map +1 -0
- package/dist/lib/git-utils.js +45 -0
- package/dist/lib/git-utils.js.map +1 -0
- package/dist/lib/install-helpers.d.ts +24 -0
- package/dist/lib/install-helpers.d.ts.map +1 -0
- package/dist/lib/install-helpers.js +76 -0
- package/dist/lib/install-helpers.js.map +1 -0
- package/dist/lib/lifecycle-service.d.ts +11 -0
- package/dist/lib/lifecycle-service.d.ts.map +1 -0
- package/dist/lib/lifecycle-service.js +65 -0
- package/dist/lib/lifecycle-service.js.map +1 -0
- package/dist/lib/notifier-routing.d.ts +35 -0
- package/dist/lib/notifier-routing.d.ts.map +1 -0
- package/dist/lib/notifier-routing.js +133 -0
- package/dist/lib/notifier-routing.js.map +1 -0
- package/dist/lib/notify-test.d.ts +72 -0
- package/dist/lib/notify-test.d.ts.map +1 -0
- package/dist/lib/notify-test.js +674 -0
- package/dist/lib/notify-test.js.map +1 -0
- package/dist/lib/openclaw-probe.d.ts +38 -0
- package/dist/lib/openclaw-probe.d.ts.map +1 -0
- package/dist/lib/openclaw-probe.js +146 -0
- package/dist/lib/openclaw-probe.js.map +1 -0
- package/dist/lib/openclaw-setup.d.ts +19 -0
- package/dist/lib/openclaw-setup.d.ts.map +1 -0
- package/dist/lib/openclaw-setup.js +684 -0
- package/dist/lib/openclaw-setup.js.map +1 -0
- package/dist/lib/path-equality.d.ts +29 -0
- package/dist/lib/path-equality.d.ts.map +1 -0
- package/dist/lib/path-equality.js +52 -0
- package/dist/lib/path-equality.js.map +1 -0
- package/dist/lib/plugin-marketplace.d.ts +24 -0
- package/dist/lib/plugin-marketplace.d.ts.map +1 -0
- package/dist/lib/plugin-marketplace.js +175 -0
- package/dist/lib/plugin-marketplace.js.map +1 -0
- package/dist/lib/plugin-scaffold.d.ts +14 -0
- package/dist/lib/plugin-scaffold.d.ts.map +1 -0
- package/dist/lib/plugin-scaffold.js +174 -0
- package/dist/lib/plugin-scaffold.js.map +1 -0
- package/dist/lib/plugin-store.d.ts +9 -0
- package/dist/lib/plugin-store.d.ts.map +1 -0
- package/dist/lib/plugin-store.js +121 -0
- package/dist/lib/plugin-store.js.map +1 -0
- package/dist/lib/plugins.d.ts +17 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/plugins.js +65 -0
- package/dist/lib/plugins.js.map +1 -0
- package/dist/lib/portfolio-display.d.ts +10 -0
- package/dist/lib/portfolio-display.d.ts.map +1 -0
- package/dist/lib/portfolio-display.js +17 -0
- package/dist/lib/portfolio-display.js.map +1 -0
- package/dist/lib/preflight.d.ts +27 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +77 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/prevent-sleep.d.ts +34 -0
- package/dist/lib/prevent-sleep.d.ts.map +1 -0
- package/dist/lib/prevent-sleep.js +65 -0
- package/dist/lib/prevent-sleep.js.map +1 -0
- package/dist/lib/project-detection.d.ts +11 -0
- package/dist/lib/project-detection.d.ts.map +1 -0
- package/dist/lib/project-detection.js +206 -0
- package/dist/lib/project-detection.js.map +1 -0
- package/dist/lib/project-resolution.d.ts +10 -0
- package/dist/lib/project-resolution.d.ts.map +1 -0
- package/dist/lib/project-resolution.js +17 -0
- package/dist/lib/project-resolution.js.map +1 -0
- package/dist/lib/project-supervisor.d.ts +28 -0
- package/dist/lib/project-supervisor.d.ts.map +1 -0
- package/dist/lib/project-supervisor.js +167 -0
- package/dist/lib/project-supervisor.js.map +1 -0
- package/dist/lib/prompts.d.ts +7 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +37 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/repo-utils.d.ts +16 -0
- package/dist/lib/repo-utils.d.ts.map +1 -0
- package/dist/lib/repo-utils.js +26 -0
- package/dist/lib/repo-utils.js.map +1 -0
- package/dist/lib/resolve-project.d.ts +113 -0
- package/dist/lib/resolve-project.d.ts.map +1 -0
- package/dist/lib/resolve-project.js +433 -0
- package/dist/lib/resolve-project.js.map +1 -0
- package/dist/lib/routes.d.ts +2 -0
- package/dist/lib/routes.d.ts.map +1 -0
- package/dist/lib/routes.js +5 -0
- package/dist/lib/routes.js.map +1 -0
- package/dist/lib/running-state.d.ts +76 -0
- package/dist/lib/running-state.d.ts.map +1 -0
- package/dist/lib/running-state.js +338 -0
- package/dist/lib/running-state.js.map +1 -0
- package/dist/lib/script-runner.d.ts +10 -0
- package/dist/lib/script-runner.d.ts.map +1 -0
- package/dist/lib/script-runner.js +189 -0
- package/dist/lib/script-runner.js.map +1 -0
- package/dist/lib/session-utils.d.ts +14 -0
- package/dist/lib/session-utils.d.ts.map +1 -0
- package/dist/lib/session-utils.js +58 -0
- package/dist/lib/session-utils.js.map +1 -0
- package/dist/lib/shell.d.ts +17 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +90 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/shutdown.d.ts +30 -0
- package/dist/lib/shutdown.d.ts.map +1 -0
- package/dist/lib/shutdown.js +177 -0
- package/dist/lib/shutdown.js.map +1 -0
- package/dist/lib/slack-setup.d.ts +17 -0
- package/dist/lib/slack-setup.d.ts.map +1 -0
- package/dist/lib/slack-setup.js +485 -0
- package/dist/lib/slack-setup.js.map +1 -0
- package/dist/lib/startup-preflight.d.ts +36 -0
- package/dist/lib/startup-preflight.d.ts.map +1 -0
- package/dist/lib/startup-preflight.js +273 -0
- package/dist/lib/startup-preflight.js.map +1 -0
- package/dist/lib/update-channel-onboarding.d.ts +52 -0
- package/dist/lib/update-channel-onboarding.d.ts.map +1 -0
- package/dist/lib/update-channel-onboarding.js +107 -0
- package/dist/lib/update-channel-onboarding.js.map +1 -0
- package/dist/lib/update-check.d.ts +161 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +504 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/web-dir.d.ts +47 -0
- package/dist/lib/web-dir.d.ts.map +1 -0
- package/dist/lib/web-dir.js +179 -0
- package/dist/lib/web-dir.js.map +1 -0
- package/dist/lib/webhook-setup.d.ts +16 -0
- package/dist/lib/webhook-setup.d.ts.map +1 -0
- package/dist/lib/webhook-setup.js +383 -0
- package/dist/lib/webhook-setup.js.map +1 -0
- package/dist/options/version.d.ts +2 -0
- package/dist/options/version.d.ts.map +1 -0
- package/dist/options/version.js +7 -0
- package/dist/options/version.js.map +1 -0
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +63 -0
- package/dist/program.js.map +1 -0
- package/package.json +80 -0
- package/templates/rules/base.md +4 -0
- package/templates/rules/go.md +8 -0
- package/templates/rules/javascript.md +4 -0
- package/templates/rules/nextjs.md +7 -0
- package/templates/rules/pnpm-workspaces.md +4 -0
- package/templates/rules/python.md +8 -0
- package/templates/rules/react.md +8 -0
- package/templates/rules/typescript.md +6 -0
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { homedir, platform } from "node:os";
|
|
4
|
+
import { dirname, join, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { parseDocument } from "yaml";
|
|
9
|
+
import { CONFIG_SCHEMA_URL, findConfigFile, isCanonicalGlobalConfigPath } from "@made-by-moonlight/athene-core";
|
|
10
|
+
import { applyNotifierRoutingPreset, getNotifierRoutingState, promptNotifierRoutingPreset, resolveRoutingPresetOption, } from "./notifier-routing.js";
|
|
11
|
+
const APP_NAME = "AO Notifier.app";
|
|
12
|
+
const EXECUTABLE_NAME = "ao-notifier";
|
|
13
|
+
const PLACEHOLDER_MARKER_NAME = "ao-notifier-placeholder";
|
|
14
|
+
const DESKTOP_BACKENDS = ["auto", "ao-app", "terminal-notifier", "osascript"];
|
|
15
|
+
export class DesktopSetupError extends Error {
|
|
16
|
+
exitCode;
|
|
17
|
+
constructor(message, exitCode = 1) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.exitCode = exitCode;
|
|
20
|
+
this.name = "DesktopSetupError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function currentPlatform() {
|
|
24
|
+
return process.env["AO_DESKTOP_SETUP_PLATFORM"] ?? platform();
|
|
25
|
+
}
|
|
26
|
+
function stringValue(value) {
|
|
27
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
28
|
+
}
|
|
29
|
+
function isDesktopBackend(value) {
|
|
30
|
+
return typeof value === "string" && DESKTOP_BACKENDS.includes(value);
|
|
31
|
+
}
|
|
32
|
+
function parseDesktopBackend(value) {
|
|
33
|
+
if (value === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (isDesktopBackend(value))
|
|
36
|
+
return value;
|
|
37
|
+
throw new DesktopSetupError(`Invalid desktop backend "${String(value)}". Expected one of: ${DESKTOP_BACKENDS.join(", ")}.`);
|
|
38
|
+
}
|
|
39
|
+
function packageDirFromImport() {
|
|
40
|
+
try {
|
|
41
|
+
const require = createRequire(import.meta.url);
|
|
42
|
+
return dirname(require.resolve("@made-by-moonlight/athene-notifier-macos/package.json"));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function getBundledNotifierAppPath() {
|
|
49
|
+
const override = process.env["AO_NOTIFIER_MACOS_APP_PATH"];
|
|
50
|
+
if (override)
|
|
51
|
+
return override;
|
|
52
|
+
const packageDir = packageDirFromImport();
|
|
53
|
+
if (packageDir) {
|
|
54
|
+
return resolve(packageDir, "dist", APP_NAME);
|
|
55
|
+
}
|
|
56
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
57
|
+
return resolve(here, "..", "..", "..", "notifier-macos", "dist", APP_NAME);
|
|
58
|
+
}
|
|
59
|
+
export function getInstalledNotifierAppPath() {
|
|
60
|
+
return process.env["AO_DESKTOP_APP_INSTALL_PATH"] ?? join(homedir(), "Applications", APP_NAME);
|
|
61
|
+
}
|
|
62
|
+
export function getNotifierExecutablePath(appPath) {
|
|
63
|
+
return join(appPath, "Contents", "MacOS", EXECUTABLE_NAME);
|
|
64
|
+
}
|
|
65
|
+
function getNotifierPlaceholderMarkerPath(appPath) {
|
|
66
|
+
return join(appPath, "Contents", "Resources", PLACEHOLDER_MARKER_NAME);
|
|
67
|
+
}
|
|
68
|
+
function isPlaceholderNotifierApp(appPath) {
|
|
69
|
+
return existsSync(getNotifierPlaceholderMarkerPath(appPath));
|
|
70
|
+
}
|
|
71
|
+
function isAppInstalled(appPath = getInstalledNotifierAppPath()) {
|
|
72
|
+
return existsSync(getNotifierExecutablePath(appPath)) && !isPlaceholderNotifierApp(appPath);
|
|
73
|
+
}
|
|
74
|
+
function commandExists(command) {
|
|
75
|
+
try {
|
|
76
|
+
execFileSync(command, ["--version"], { stdio: "ignore", windowsHide: true });
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return error.code !== "ENOENT";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function execNotifierJson(appPath, args) {
|
|
84
|
+
try {
|
|
85
|
+
const output = execFileSync(getNotifierExecutablePath(appPath), args, {
|
|
86
|
+
encoding: "utf-8",
|
|
87
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
88
|
+
});
|
|
89
|
+
return JSON.parse(output);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function parseJsonOutput(output) {
|
|
96
|
+
try {
|
|
97
|
+
const text = Buffer.isBuffer(output) ? output.toString("utf-8") : String(output ?? "");
|
|
98
|
+
if (!text.trim())
|
|
99
|
+
return null;
|
|
100
|
+
return JSON.parse(text);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function formatExecError(error) {
|
|
107
|
+
if (error instanceof Error && error.message)
|
|
108
|
+
return error.message;
|
|
109
|
+
return String(error);
|
|
110
|
+
}
|
|
111
|
+
function permissionDeniedMessage() {
|
|
112
|
+
return ("macOS notification permission is denied for AO Notifier.app.\n" +
|
|
113
|
+
" Open System Settings > Notifications > AO Notifier and enable Allow Notifications.\n" +
|
|
114
|
+
" Then rerun: athene setup desktop --force");
|
|
115
|
+
}
|
|
116
|
+
function readConfigContext() {
|
|
117
|
+
const configPath = findOptionalConfigPath();
|
|
118
|
+
if (!configPath) {
|
|
119
|
+
return {
|
|
120
|
+
configPath,
|
|
121
|
+
rawConfig: {},
|
|
122
|
+
existingDesktop: {},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const rawYaml = readFileSync(configPath, "utf-8");
|
|
126
|
+
const rawConfig = parseDocument(rawYaml).toJS() ?? {};
|
|
127
|
+
const notifiers = rawConfig["notifiers"] ?? {};
|
|
128
|
+
const existingDesktop = notifiers["desktop"] ?? {};
|
|
129
|
+
return {
|
|
130
|
+
configPath,
|
|
131
|
+
rawConfig,
|
|
132
|
+
existingDesktop,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function printStatus() {
|
|
136
|
+
const os = currentPlatform();
|
|
137
|
+
const appPath = getInstalledNotifierAppPath();
|
|
138
|
+
const installed = isAppInstalled(appPath);
|
|
139
|
+
const version = installed ? execNotifierJson(appPath, ["--version-json"]) : null;
|
|
140
|
+
const permission = installed ? execNotifierJson(appPath, ["--permission-status-json"]) : null;
|
|
141
|
+
const context = readConfigContext();
|
|
142
|
+
const configBackend = stringValue(context.existingDesktop["backend"]);
|
|
143
|
+
const configDashboardUrl = stringValue(context.existingDesktop["dashboardUrl"]);
|
|
144
|
+
const configAppPath = stringValue(context.existingDesktop["appPath"]);
|
|
145
|
+
console.log(chalk.bold("AO desktop notifier"));
|
|
146
|
+
console.log(` platform: ${os}`);
|
|
147
|
+
if (context.configPath) {
|
|
148
|
+
console.log(` config: ${context.configPath}`);
|
|
149
|
+
}
|
|
150
|
+
console.log(` config backend: ${configBackend ?? "not configured"}`);
|
|
151
|
+
console.log(` dashboardUrl: ${configDashboardUrl ?? "not configured"}`);
|
|
152
|
+
console.log(` config appPath: ${configAppPath ?? "not configured"}`);
|
|
153
|
+
console.log(` terminal-notifier: ${commandExists("terminal-notifier") ? "available" : "missing"}`);
|
|
154
|
+
console.log(` osascript: ${commandExists("osascript") ? "available" : "missing"}`);
|
|
155
|
+
console.log(` installed: ${installed ? "yes" : "no"}`);
|
|
156
|
+
console.log(` app: ${appPath}`);
|
|
157
|
+
console.log(` routing: ${getNotifierRoutingState(context.rawConfig, "desktop").label}`);
|
|
158
|
+
if (version?.["version"]) {
|
|
159
|
+
console.log(` version: ${String(version["version"])}`);
|
|
160
|
+
}
|
|
161
|
+
if (permission?.["status"]) {
|
|
162
|
+
console.log(` permissions: ${String(permission["status"])}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function copyBundledApp(targetAppPath = getInstalledNotifierAppPath()) {
|
|
166
|
+
if (currentPlatform() !== "darwin") {
|
|
167
|
+
throw new DesktopSetupError("athene setup desktop is currently only supported on macOS.");
|
|
168
|
+
}
|
|
169
|
+
const sourceAppPath = getBundledNotifierAppPath();
|
|
170
|
+
if (!sourceAppPath || !existsSync(getNotifierExecutablePath(sourceAppPath))) {
|
|
171
|
+
throw new DesktopSetupError("AO Notifier.app is not built. Run: pnpm --filter @made-by-moonlight/athene-notifier-macos build");
|
|
172
|
+
}
|
|
173
|
+
if (isPlaceholderNotifierApp(sourceAppPath)) {
|
|
174
|
+
throw new DesktopSetupError("AO Notifier.app was built as a non-macOS placeholder and cannot be installed. " +
|
|
175
|
+
"Rebuild @made-by-moonlight/athene-notifier-macos on macOS, or use --backend terminal-notifier.");
|
|
176
|
+
}
|
|
177
|
+
mkdirSync(dirname(targetAppPath), { recursive: true });
|
|
178
|
+
rmSync(targetAppPath, { recursive: true, force: true });
|
|
179
|
+
cpSync(sourceAppPath, targetAppPath, { recursive: true });
|
|
180
|
+
if (!isAppInstalled(targetAppPath)) {
|
|
181
|
+
throw new DesktopSetupError(`AO Notifier.app install failed at ${targetAppPath}`);
|
|
182
|
+
}
|
|
183
|
+
return targetAppPath;
|
|
184
|
+
}
|
|
185
|
+
function requestPermission(appPath) {
|
|
186
|
+
let result;
|
|
187
|
+
try {
|
|
188
|
+
const output = execFileSync(getNotifierExecutablePath(appPath), ["--request-permission"], {
|
|
189
|
+
encoding: "utf-8",
|
|
190
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
191
|
+
});
|
|
192
|
+
result = parseJsonOutput(output);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
const failure = error;
|
|
196
|
+
result = parseJsonOutput(failure.stdout);
|
|
197
|
+
if (result?.["status"] === "denied") {
|
|
198
|
+
throw new DesktopSetupError(permissionDeniedMessage());
|
|
199
|
+
}
|
|
200
|
+
const stderr = Buffer.isBuffer(failure.stderr)
|
|
201
|
+
? failure.stderr.toString("utf-8").trim()
|
|
202
|
+
: String(failure.stderr ?? "").trim();
|
|
203
|
+
throw new DesktopSetupError(`Could not request macOS notification permission: ${stderr || formatExecError(error)}`);
|
|
204
|
+
}
|
|
205
|
+
if (result?.["status"] === "denied") {
|
|
206
|
+
throw new DesktopSetupError(permissionDeniedMessage());
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function sendAoAppSetupNotification(appPath, dashboardUrl) {
|
|
210
|
+
const payload = {
|
|
211
|
+
title: "AO Notifier",
|
|
212
|
+
body: "Desktop notifications are ready.",
|
|
213
|
+
sound: false,
|
|
214
|
+
defaultOpenUrl: dashboardUrl,
|
|
215
|
+
event: {
|
|
216
|
+
id: `desktop-setup-${Date.now()}`,
|
|
217
|
+
type: "setup.desktop",
|
|
218
|
+
priority: "info",
|
|
219
|
+
sessionId: "setup",
|
|
220
|
+
projectId: "ao",
|
|
221
|
+
timestamp: new Date().toISOString(),
|
|
222
|
+
},
|
|
223
|
+
actions: dashboardUrl ? [{ label: "Open Dashboard", url: dashboardUrl }] : [],
|
|
224
|
+
};
|
|
225
|
+
const encoded = Buffer.from(JSON.stringify(payload), "utf-8").toString("base64");
|
|
226
|
+
try {
|
|
227
|
+
execFileSync(getNotifierExecutablePath(appPath), ["--notify-base64", encoded], {
|
|
228
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const failure = error;
|
|
233
|
+
const stderr = Buffer.isBuffer(failure.stderr)
|
|
234
|
+
? failure.stderr.toString("utf-8").trim()
|
|
235
|
+
: String(failure.stderr ?? "").trim();
|
|
236
|
+
throw new DesktopSetupError(`Could not send desktop setup test notification: ${stderr || formatExecError(error)}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function sendTerminalNotifierSetupNotification(dashboardUrl) {
|
|
240
|
+
const args = ["-title", "AO Notifier", "-message", "Desktop notifications are ready."];
|
|
241
|
+
if (dashboardUrl)
|
|
242
|
+
args.push("-open", dashboardUrl);
|
|
243
|
+
execFileSync("terminal-notifier", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
244
|
+
}
|
|
245
|
+
function sendOsascriptSetupNotification() {
|
|
246
|
+
execFileSync("osascript", ["-e", 'display notification "Desktop notifications are ready." with title "AO Notifier"'], { stdio: ["ignore", "pipe", "pipe"] });
|
|
247
|
+
}
|
|
248
|
+
function findOptionalConfigPath() {
|
|
249
|
+
try {
|
|
250
|
+
return findConfigFile() ?? undefined;
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async function shouldReplaceConflictingDesktop(existingPlugin, force, nonInteractive) {
|
|
257
|
+
if (existingPlugin === undefined || existingPlugin === "desktop" || force)
|
|
258
|
+
return true;
|
|
259
|
+
if (nonInteractive) {
|
|
260
|
+
throw new DesktopSetupError(`notifiers.desktop already uses plugin "${String(existingPlugin)}". Re-run with --force to replace it.`);
|
|
261
|
+
}
|
|
262
|
+
const clack = await import("@clack/prompts");
|
|
263
|
+
const replace = await clack.confirm({
|
|
264
|
+
message: `notifiers.desktop already uses plugin "${String(existingPlugin)}". Replace it?`,
|
|
265
|
+
initialValue: false,
|
|
266
|
+
});
|
|
267
|
+
if (clack.isCancel(replace) || !replace) {
|
|
268
|
+
console.log(chalk.dim("Keeping existing desktop notifier config."));
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
function dashboardUrlFromConfig(rawConfig) {
|
|
274
|
+
const port = rawConfig["port"];
|
|
275
|
+
if (typeof port === "number")
|
|
276
|
+
return `http://localhost:${port}`;
|
|
277
|
+
if (typeof port === "string" && port.trim().length > 0)
|
|
278
|
+
return `http://localhost:${port.trim()}`;
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
async function chooseDesktopBackend(existingBackend, nonInteractive) {
|
|
282
|
+
if (nonInteractive)
|
|
283
|
+
return existingBackend ?? "ao-app";
|
|
284
|
+
const clack = await import("@clack/prompts");
|
|
285
|
+
const choice = await clack.select({
|
|
286
|
+
message: "Choose the desktop notification backend:",
|
|
287
|
+
options: [
|
|
288
|
+
{
|
|
289
|
+
value: "ao-app",
|
|
290
|
+
label: existingBackend === "ao-app" ? "AO Notifier.app (current)" : "AO Notifier.app (recommended)",
|
|
291
|
+
hint: "Native macOS app with actions and AO-specific behavior",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
value: "auto",
|
|
295
|
+
label: existingBackend === "auto" ? "Auto fallback (current)" : "Auto fallback",
|
|
296
|
+
hint: "AO app if installed, then terminal-notifier, then osascript",
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
value: "terminal-notifier",
|
|
300
|
+
label: existingBackend === "terminal-notifier" ? "terminal-notifier (current)" : "terminal-notifier",
|
|
301
|
+
hint: "Requires Homebrew package; supports click-to-open",
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
value: "osascript",
|
|
305
|
+
label: existingBackend === "osascript" ? "osascript (current)" : "osascript",
|
|
306
|
+
hint: "Built into macOS; basic notifications only",
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
});
|
|
310
|
+
if (clack.isCancel(choice)) {
|
|
311
|
+
clack.cancel("Setup cancelled.");
|
|
312
|
+
throw new DesktopSetupError("Setup cancelled.", 0);
|
|
313
|
+
}
|
|
314
|
+
return choice;
|
|
315
|
+
}
|
|
316
|
+
function resolveDashboardUrl(opts, rawConfig, existingDesktop) {
|
|
317
|
+
return (stringValue(opts.dashboardUrl) ??
|
|
318
|
+
dashboardUrlFromConfig(rawConfig) ??
|
|
319
|
+
stringValue(existingDesktop["dashboardUrl"]));
|
|
320
|
+
}
|
|
321
|
+
async function maybeInstallTerminalNotifier(nonInteractive) {
|
|
322
|
+
if (commandExists("terminal-notifier"))
|
|
323
|
+
return;
|
|
324
|
+
if (nonInteractive) {
|
|
325
|
+
throw new DesktopSetupError("terminal-notifier is not installed. Install it with: brew install terminal-notifier");
|
|
326
|
+
}
|
|
327
|
+
const clack = await import("@clack/prompts");
|
|
328
|
+
const install = await clack.confirm({
|
|
329
|
+
message: "terminal-notifier is not installed. Install it with Homebrew now?",
|
|
330
|
+
initialValue: true,
|
|
331
|
+
});
|
|
332
|
+
if (clack.isCancel(install) || !install) {
|
|
333
|
+
throw new DesktopSetupError("terminal-notifier is required for this backend. Install it with: brew install terminal-notifier");
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
execFileSync("brew", ["install", "terminal-notifier"], { stdio: "inherit" });
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
throw new DesktopSetupError(`Could not install terminal-notifier with Homebrew: ${formatExecError(error)}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
function assertOsascriptAvailable() {
|
|
343
|
+
if (!commandExists("osascript")) {
|
|
344
|
+
throw new DesktopSetupError("osascript is not available on this system.");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function resolveAutoBackend(appPath) {
|
|
348
|
+
if (currentPlatform() === "darwin" && isAppInstalled(appPath))
|
|
349
|
+
return "ao-app";
|
|
350
|
+
if (commandExists("terminal-notifier"))
|
|
351
|
+
return "terminal-notifier";
|
|
352
|
+
if (commandExists("osascript"))
|
|
353
|
+
return "osascript";
|
|
354
|
+
throw new DesktopSetupError("No desktop notification backend is available. Run `athene setup desktop --backend ao-app`, or install terminal-notifier.");
|
|
355
|
+
}
|
|
356
|
+
async function resolveDesktopSetup(opts, context, nonInteractive) {
|
|
357
|
+
const explicitBackend = parseDesktopBackend(opts.backend);
|
|
358
|
+
const existingBackend = parseDesktopBackend(context.existingDesktop["backend"]);
|
|
359
|
+
const optionRoutingPreset = resolveDesktopRoutingPreset(opts.routingPreset);
|
|
360
|
+
while (true) {
|
|
361
|
+
const backend = explicitBackend ??
|
|
362
|
+
(await chooseDesktopBackend(opts.refresh ? existingBackend : undefined, nonInteractive));
|
|
363
|
+
const appPath = stringValue(opts.appPath) ??
|
|
364
|
+
stringValue(context.existingDesktop["appPath"]) ??
|
|
365
|
+
getInstalledNotifierAppPath();
|
|
366
|
+
const routingSelection = optionRoutingPreset ??
|
|
367
|
+
(nonInteractive || !context.configPath
|
|
368
|
+
? opts.refresh
|
|
369
|
+
? undefined
|
|
370
|
+
: "all"
|
|
371
|
+
: await promptNotifierRoutingPreset(await import("@clack/prompts"), context.rawConfig, "desktop", "desktop", () => {
|
|
372
|
+
throw new DesktopSetupError("Setup cancelled.", 0);
|
|
373
|
+
}));
|
|
374
|
+
if (routingSelection === "back")
|
|
375
|
+
continue;
|
|
376
|
+
return {
|
|
377
|
+
backend,
|
|
378
|
+
dashboardUrl: resolveDashboardUrl(opts, context.rawConfig, context.existingDesktop),
|
|
379
|
+
appPath,
|
|
380
|
+
shouldWriteAppPath: Boolean(stringValue(opts.appPath)) ||
|
|
381
|
+
stringValue(context.existingDesktop["appPath"]) !== undefined,
|
|
382
|
+
shouldSendTest: opts.test !== false,
|
|
383
|
+
refresh: Boolean(opts.refresh),
|
|
384
|
+
routingPreset: routingSelection === "preserve" ? undefined : routingSelection,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
function resolveDesktopRoutingPreset(value) {
|
|
389
|
+
try {
|
|
390
|
+
return resolveRoutingPresetOption(value, "desktop");
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
throw new DesktopSetupError(error instanceof Error ? error.message : String(error));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
async function prepareDesktopBackend(resolved, force, nonInteractive) {
|
|
397
|
+
if (currentPlatform() !== "darwin") {
|
|
398
|
+
throw new DesktopSetupError("athene setup desktop is currently only supported on macOS.");
|
|
399
|
+
}
|
|
400
|
+
if (resolved.backend === "ao-app") {
|
|
401
|
+
const shouldInstall = !resolved.refresh || force || !isAppInstalled(resolved.appPath);
|
|
402
|
+
if (shouldInstall) {
|
|
403
|
+
const appPath = copyBundledApp(resolved.appPath);
|
|
404
|
+
console.log(chalk.green(`✓ Installed ${APP_NAME} to ${appPath}`));
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
console.log(chalk.green(`✓ ${APP_NAME} is installed at ${resolved.appPath}`));
|
|
408
|
+
}
|
|
409
|
+
requestPermission(resolved.appPath);
|
|
410
|
+
console.log(chalk.green("✓ Notification permission checked"));
|
|
411
|
+
return "ao-app";
|
|
412
|
+
}
|
|
413
|
+
if (resolved.backend === "terminal-notifier") {
|
|
414
|
+
await maybeInstallTerminalNotifier(nonInteractive);
|
|
415
|
+
console.log(chalk.green("✓ terminal-notifier is available"));
|
|
416
|
+
return "terminal-notifier";
|
|
417
|
+
}
|
|
418
|
+
if (resolved.backend === "osascript") {
|
|
419
|
+
assertOsascriptAvailable();
|
|
420
|
+
console.log(chalk.green("✓ osascript is available"));
|
|
421
|
+
return "osascript";
|
|
422
|
+
}
|
|
423
|
+
const effectiveBackend = resolveAutoBackend(resolved.appPath);
|
|
424
|
+
if (effectiveBackend === "ao-app") {
|
|
425
|
+
requestPermission(resolved.appPath);
|
|
426
|
+
console.log(chalk.green(`✓ auto backend resolved to ${APP_NAME}`));
|
|
427
|
+
}
|
|
428
|
+
else if (effectiveBackend === "terminal-notifier") {
|
|
429
|
+
console.log(chalk.green("✓ auto backend resolved to terminal-notifier"));
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
console.log(chalk.green("✓ auto backend resolved to osascript"));
|
|
433
|
+
}
|
|
434
|
+
return effectiveBackend;
|
|
435
|
+
}
|
|
436
|
+
function sendBackendSetupNotification(effectiveBackend, resolved) {
|
|
437
|
+
try {
|
|
438
|
+
if (effectiveBackend === "ao-app") {
|
|
439
|
+
sendAoAppSetupNotification(resolved.appPath, resolved.dashboardUrl);
|
|
440
|
+
}
|
|
441
|
+
else if (effectiveBackend === "terminal-notifier") {
|
|
442
|
+
sendTerminalNotifierSetupNotification(resolved.dashboardUrl);
|
|
443
|
+
}
|
|
444
|
+
else if (effectiveBackend === "osascript") {
|
|
445
|
+
sendOsascriptSetupNotification();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
throw new DesktopSetupError(`Could not send desktop setup test notification: ${formatExecError(error)}`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
async function wireDesktopConfig(configPath, force, nonInteractive, resolved, conflictAlreadyChecked = false) {
|
|
453
|
+
if (!configPath) {
|
|
454
|
+
console.log(chalk.dim("No agent-orchestrator.yaml found; skipping config wiring."));
|
|
455
|
+
return false;
|
|
456
|
+
}
|
|
457
|
+
const rawYaml = readFileSync(configPath, "utf-8");
|
|
458
|
+
const doc = parseDocument(rawYaml);
|
|
459
|
+
const rawConfig = doc.toJS() ?? {};
|
|
460
|
+
const notifiers = rawConfig["notifiers"] ?? {};
|
|
461
|
+
const existingDesktop = notifiers["desktop"] ?? {};
|
|
462
|
+
if (!conflictAlreadyChecked &&
|
|
463
|
+
!(await shouldReplaceConflictingDesktop(existingDesktop["plugin"], force, nonInteractive))) {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
const desktopConfig = {
|
|
467
|
+
...existingDesktop,
|
|
468
|
+
plugin: "desktop",
|
|
469
|
+
backend: resolved.backend,
|
|
470
|
+
};
|
|
471
|
+
if (resolved.dashboardUrl)
|
|
472
|
+
desktopConfig["dashboardUrl"] = resolved.dashboardUrl;
|
|
473
|
+
if (resolved.shouldWriteAppPath)
|
|
474
|
+
desktopConfig["appPath"] = resolved.appPath;
|
|
475
|
+
notifiers["desktop"] = desktopConfig;
|
|
476
|
+
rawConfig["notifiers"] = notifiers;
|
|
477
|
+
const defaults = rawConfig["defaults"] ?? {};
|
|
478
|
+
rawConfig["defaults"] = defaults;
|
|
479
|
+
applyNotifierRoutingPreset(rawConfig, "desktop", resolved.routingPreset);
|
|
480
|
+
if (!isCanonicalGlobalConfigPath(configPath)) {
|
|
481
|
+
const currentSchema = doc.get("$schema");
|
|
482
|
+
if (!(typeof currentSchema === "string" && currentSchema.trim().length > 0)) {
|
|
483
|
+
doc.set("$schema", CONFIG_SCHEMA_URL);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
doc.setIn(["notifiers"], rawConfig["notifiers"]);
|
|
487
|
+
doc.setIn(["defaults"], rawConfig["defaults"]);
|
|
488
|
+
if (rawConfig["notificationRouting"] !== undefined) {
|
|
489
|
+
doc.setIn(["notificationRouting"], rawConfig["notificationRouting"]);
|
|
490
|
+
}
|
|
491
|
+
writeFileSync(configPath, doc.toString({ indent: 2 }));
|
|
492
|
+
console.log(chalk.green(`✓ Config written to ${configPath}`));
|
|
493
|
+
return true;
|
|
494
|
+
}
|
|
495
|
+
async function canWireDesktopConfig(configPath, force, nonInteractive) {
|
|
496
|
+
if (!configPath)
|
|
497
|
+
return false;
|
|
498
|
+
const rawYaml = readFileSync(configPath, "utf-8");
|
|
499
|
+
const doc = parseDocument(rawYaml);
|
|
500
|
+
const rawConfig = doc.toJS() ?? {};
|
|
501
|
+
const notifiers = rawConfig["notifiers"] ?? {};
|
|
502
|
+
const existingDesktop = notifiers["desktop"] ?? {};
|
|
503
|
+
return shouldReplaceConflictingDesktop(existingDesktop["plugin"], force, nonInteractive);
|
|
504
|
+
}
|
|
505
|
+
function uninstallDesktopApp() {
|
|
506
|
+
const appPath = getInstalledNotifierAppPath();
|
|
507
|
+
rmSync(appPath, { recursive: true, force: true });
|
|
508
|
+
console.log(chalk.green(`✓ Removed ${appPath}`));
|
|
509
|
+
console.log(chalk.dim("AO config was not changed."));
|
|
510
|
+
}
|
|
511
|
+
export async function runDesktopSetupAction(opts) {
|
|
512
|
+
const nonInteractive = opts.nonInteractive || !process.stdin.isTTY;
|
|
513
|
+
const force = Boolean(opts.force);
|
|
514
|
+
if (opts.status) {
|
|
515
|
+
printStatus();
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
if (opts.uninstall) {
|
|
519
|
+
uninstallDesktopApp();
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
const context = readConfigContext();
|
|
523
|
+
const shouldWireConfig = await canWireDesktopConfig(context.configPath, force, nonInteractive);
|
|
524
|
+
if (context.configPath && !shouldWireConfig) {
|
|
525
|
+
console.log(chalk.dim("Skipped config wiring."));
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
const resolved = await resolveDesktopSetup(opts, context, nonInteractive);
|
|
529
|
+
const effectiveBackend = await prepareDesktopBackend(resolved, force, nonInteractive);
|
|
530
|
+
if (resolved.shouldSendTest) {
|
|
531
|
+
sendBackendSetupNotification(effectiveBackend, resolved);
|
|
532
|
+
console.log(chalk.green("✓ Sent desktop setup test notification"));
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
console.log(chalk.dim("Skipped desktop setup test notification."));
|
|
536
|
+
}
|
|
537
|
+
if (shouldWireConfig) {
|
|
538
|
+
await wireDesktopConfig(context.configPath, force, nonInteractive, resolved, true);
|
|
539
|
+
}
|
|
540
|
+
else if (!context.configPath) {
|
|
541
|
+
console.log(chalk.dim("No agent-orchestrator.yaml found; skipping config wiring."));
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
console.log(chalk.dim("Skipped config wiring."));
|
|
545
|
+
}
|
|
546
|
+
if (!nonInteractive) {
|
|
547
|
+
const clack = await import("@clack/prompts");
|
|
548
|
+
clack.outro(`${chalk.green("Desktop setup complete!")} AO will use ${resolved.backend} for desktop notifications.\n` +
|
|
549
|
+
chalk.dim(" Test it with: athene notify test --to desktop --template basic"));
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
console.log(chalk.green("\n✓ Desktop setup complete."));
|
|
553
|
+
console.log(chalk.dim("Test it with: athene notify test --to desktop --template basic"));
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=desktop-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-setup.js","sourceRoot":"","sources":["../../src/lib/desktop-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent runtime detection — discovers available agent runtimes via plugin detect() methods.
|
|
3
|
+
*
|
|
4
|
+
* No hardcoded binary paths — relies entirely on each plugin's detect() export.
|
|
5
|
+
*/
|
|
6
|
+
export interface DetectedAgent {
|
|
7
|
+
name: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Discover which agent runtimes are available on this system.
|
|
12
|
+
* Imports each agent plugin and calls its detect() method.
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectAvailableAgents(): Promise<DetectedAgent[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Select the agent runtime to use for config generation.
|
|
17
|
+
*
|
|
18
|
+
* - No agents detected → default to "claude-code"
|
|
19
|
+
* - One agent available → auto-select it
|
|
20
|
+
* - Multiple agents available + human caller → prompt to pick
|
|
21
|
+
* - Multiple agents available + non-human → pick first (claude-code if available)
|
|
22
|
+
*/
|
|
23
|
+
export declare function detectAgentRuntime(preDetected?: DetectedAgent[]): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=detect-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-agent.d.ts","sourceRoot":"","sources":["../../src/lib/detect-agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAoBtE;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBvF"}
|