@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,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web directory locator ā finds the @made-by-moonlight/athene-web package.
|
|
3
|
+
* Shared utility to avoid duplication between dashboard.ts and start.ts.
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
import { Socket } from "node:net";
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { resolve, dirname } from "node:path";
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import { formatCommandError } from "./cli-errors.js";
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
/** Default terminal server base port (14800 range: zero IANA registrations, no dev tool conflicts) */
|
|
16
|
+
const DEFAULT_TERMINAL_PORT = 14800;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a TCP port is available by attempting to connect to it.
|
|
19
|
+
* A successful connect means something is already listening (port in use).
|
|
20
|
+
* ECONNREFUSED means nothing is listening (port free).
|
|
21
|
+
*
|
|
22
|
+
* Connect-based detection is more reliable than bind-based because it works
|
|
23
|
+
* regardless of whether the occupying process is bound to 127.0.0.1, ::1,
|
|
24
|
+
* 0.0.0.0, or :: (IPv6 wildcard).
|
|
25
|
+
*/
|
|
26
|
+
export function isPortAvailable(port) {
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const s = new Socket();
|
|
29
|
+
s.setTimeout(300);
|
|
30
|
+
s.once("connect", () => { s.destroy(); resolve(false); }); // something listening ā in use
|
|
31
|
+
s.once("error", () => { s.destroy(); resolve(true); }); // ECONNREFUSED ā free
|
|
32
|
+
s.once("timeout", () => { s.destroy(); resolve(true); }); // no response ā free
|
|
33
|
+
s.connect(port, "127.0.0.1");
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** How many consecutive ports to scan before giving up. */
|
|
37
|
+
export const MAX_PORT_SCAN = 100;
|
|
38
|
+
/**
|
|
39
|
+
* Find the first available port starting from `start`, scanning upward.
|
|
40
|
+
* Returns `null` if no free port is found within `maxScan` attempts.
|
|
41
|
+
*/
|
|
42
|
+
export async function findFreePort(start, maxScan = MAX_PORT_SCAN) {
|
|
43
|
+
for (let port = start; port < start + maxScan; port++) {
|
|
44
|
+
if (await isPortAvailable(port))
|
|
45
|
+
return port;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Open a URL in the user's browser without throwing back into the caller.
|
|
51
|
+
*/
|
|
52
|
+
export function openUrl(url) {
|
|
53
|
+
const [cmd, args] = process.platform === "win32"
|
|
54
|
+
? ["cmd.exe", ["/c", "start", "", url]]
|
|
55
|
+
: [process.platform === "linux" ? "xdg-open" : "open", [url]];
|
|
56
|
+
const browser = spawn(cmd, args, { stdio: "ignore" });
|
|
57
|
+
browser.on("error", (err) => {
|
|
58
|
+
console.warn(formatCommandError(err, {
|
|
59
|
+
cmd,
|
|
60
|
+
args,
|
|
61
|
+
action: `open ${url} in a browser`,
|
|
62
|
+
installHints: process.platform === "linux"
|
|
63
|
+
? ["Install xdg-utils so `xdg-open` is available on PATH."]
|
|
64
|
+
: process.platform === "win32"
|
|
65
|
+
? []
|
|
66
|
+
: [],
|
|
67
|
+
}).message);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Poll until a port is accepting connections, then open a URL in the browser.
|
|
72
|
+
* Respects an AbortSignal so the caller can cancel if the dashboard process
|
|
73
|
+
* exits early. Gives up silently after timeoutMs (default 30s).
|
|
74
|
+
*/
|
|
75
|
+
export async function waitForPortAndOpen(port, url, signal, timeoutMs = 30_000) {
|
|
76
|
+
const start = Date.now();
|
|
77
|
+
while (!signal.aborted && Date.now() - start < timeoutMs) {
|
|
78
|
+
const free = await isPortAvailable(port);
|
|
79
|
+
if (!free) {
|
|
80
|
+
openUrl(url);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Find a pair of consecutive available ports starting from `base`.
|
|
88
|
+
* Scans upward in steps of 2 (keeping ports paired) until both are free.
|
|
89
|
+
* Returns [terminalPort, directTerminalPort].
|
|
90
|
+
*/
|
|
91
|
+
async function findAvailablePortPair(base) {
|
|
92
|
+
const MAX_ATTEMPTS = 50;
|
|
93
|
+
for (let i = 0; i < MAX_ATTEMPTS; i++) {
|
|
94
|
+
const p1 = base + i * 2;
|
|
95
|
+
const p2 = p1 + 1;
|
|
96
|
+
const [free1, free2] = await Promise.all([isPortAvailable(p1), isPortAvailable(p2)]);
|
|
97
|
+
if (free1 && free2) {
|
|
98
|
+
return [p1, p2];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// If all 50 pairs exhausted, fall back to the base (will fail at bind time with clear error)
|
|
102
|
+
return [base, base + 1];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Build environment variables for spawning the dashboard process.
|
|
106
|
+
* Shared between `athene start` and `athene dashboard` to avoid duplication.
|
|
107
|
+
*
|
|
108
|
+
* Terminal server ports default to 14800/14801 but can be overridden via config.
|
|
109
|
+
* When no explicit port is set, auto-detects available ports to allow multiple
|
|
110
|
+
* dashboard instances to run simultaneously without EADDRINUSE conflicts.
|
|
111
|
+
*/
|
|
112
|
+
export async function buildDashboardEnv(port, configPath, terminalPort, directTerminalPort) {
|
|
113
|
+
const env = { ...process.env };
|
|
114
|
+
// Pass config path so dashboard uses the same config as the CLI
|
|
115
|
+
if (configPath) {
|
|
116
|
+
env["AO_CONFIG_PATH"] = configPath;
|
|
117
|
+
}
|
|
118
|
+
env["PORT"] = String(port);
|
|
119
|
+
// If explicit ports provided (config or env var), use them directly.
|
|
120
|
+
// Otherwise, auto-detect an available pair starting from the default.
|
|
121
|
+
const explicitTerminal = terminalPort ?? (env["TERMINAL_PORT"] ? parseInt(env["TERMINAL_PORT"], 10) : undefined);
|
|
122
|
+
const explicitDirect = directTerminalPort ?? (env["DIRECT_TERMINAL_PORT"] ? parseInt(env["DIRECT_TERMINAL_PORT"], 10) : undefined);
|
|
123
|
+
let resolvedTerminal;
|
|
124
|
+
let resolvedDirect;
|
|
125
|
+
if (explicitTerminal !== undefined && explicitDirect !== undefined) {
|
|
126
|
+
// Both explicitly set ā use as-is
|
|
127
|
+
resolvedTerminal = explicitTerminal;
|
|
128
|
+
resolvedDirect = explicitDirect;
|
|
129
|
+
}
|
|
130
|
+
else if (explicitTerminal !== undefined) {
|
|
131
|
+
// Terminal port set, derive direct from it
|
|
132
|
+
resolvedTerminal = explicitTerminal;
|
|
133
|
+
resolvedDirect = explicitTerminal + 1;
|
|
134
|
+
}
|
|
135
|
+
else if (explicitDirect !== undefined) {
|
|
136
|
+
// Direct port set, derive terminal from it
|
|
137
|
+
resolvedTerminal = explicitDirect - 1;
|
|
138
|
+
resolvedDirect = explicitDirect;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Neither set ā auto-detect available pair
|
|
142
|
+
[resolvedTerminal, resolvedDirect] = await findAvailablePortPair(DEFAULT_TERMINAL_PORT);
|
|
143
|
+
}
|
|
144
|
+
env["TERMINAL_PORT"] = String(resolvedTerminal);
|
|
145
|
+
env["DIRECT_TERMINAL_PORT"] = String(resolvedDirect);
|
|
146
|
+
env["NEXT_PUBLIC_TERMINAL_PORT"] = String(resolvedTerminal);
|
|
147
|
+
env["NEXT_PUBLIC_DIRECT_TERMINAL_PORT"] = String(resolvedDirect);
|
|
148
|
+
return env;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Locate the @made-by-moonlight/athene-web package directory.
|
|
152
|
+
* Uses createRequire for ESM-compatible require.resolve, with fallback
|
|
153
|
+
* to sibling package paths that work from both src/ and dist/.
|
|
154
|
+
*/
|
|
155
|
+
export function findWebDir() {
|
|
156
|
+
// Try to resolve from node_modules first (installed as workspace dep)
|
|
157
|
+
try {
|
|
158
|
+
const pkgJson = require.resolve("@made-by-moonlight/athene-web/package.json");
|
|
159
|
+
return resolve(pkgJson, "..");
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Fallback: sibling package in monorepo (works both from src/ and dist/)
|
|
163
|
+
// packages/cli/src/lib/ ā packages/web
|
|
164
|
+
// packages/cli/dist/lib/ ā packages/web
|
|
165
|
+
const candidates = [
|
|
166
|
+
resolve(__dirname, "../../../web"),
|
|
167
|
+
resolve(__dirname, "../../../../packages/web"),
|
|
168
|
+
];
|
|
169
|
+
for (const candidate of candidates) {
|
|
170
|
+
if (existsSync(resolve(candidate, "package.json"))) {
|
|
171
|
+
return candidate;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
throw new Error("Could not find @made-by-moonlight/athene-web package.\n" +
|
|
175
|
+
" If installed via npm: npm install -g @made-by-moonlight/athene\n" +
|
|
176
|
+
" If cloned from source: pnpm install && pnpm build");
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=web-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-dir.js","sourceRoot":"","sources":["../../src/lib/web-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface WebhookSetupOptions {
|
|
2
|
+
url?: string;
|
|
3
|
+
authToken?: string;
|
|
4
|
+
refresh?: boolean;
|
|
5
|
+
status?: boolean;
|
|
6
|
+
test?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
nonInteractive?: boolean;
|
|
9
|
+
routingPreset?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class WebhookSetupError extends Error {
|
|
12
|
+
readonly exitCode: number;
|
|
13
|
+
constructor(message: string, exitCode?: number);
|
|
14
|
+
}
|
|
15
|
+
export declare function runWebhookSetupAction(opts: WebhookSetupOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=webhook-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-setup.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-setup.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwBD,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,QAAQ;gBADxB,OAAO,EAAE,MAAM,EACC,QAAQ,SAAI;CAK/B;AAmbD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpF"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { parseDocument } from "yaml";
|
|
4
|
+
import { CONFIG_SCHEMA_URL, findConfigFile, isCanonicalGlobalConfigPath } from "@made-by-moonlight/athene-core";
|
|
5
|
+
import { applyNotifierRoutingPreset, getNotifierRoutingState, promptNotifierRoutingPreset, resolveRoutingPresetOption, } from "./notifier-routing.js";
|
|
6
|
+
const DEFAULT_RETRIES = 2;
|
|
7
|
+
const DEFAULT_RETRY_DELAY_MS = 1000;
|
|
8
|
+
const SETUP_TIMEOUT_MS = 10_000;
|
|
9
|
+
export class WebhookSetupError extends Error {
|
|
10
|
+
exitCode;
|
|
11
|
+
constructor(message, exitCode = 1) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.exitCode = exitCode;
|
|
14
|
+
this.name = "WebhookSetupError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function isRecord(value) {
|
|
18
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
function stringValue(value) {
|
|
21
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
22
|
+
}
|
|
23
|
+
function validateWebhookUrl(url) {
|
|
24
|
+
let parsed;
|
|
25
|
+
try {
|
|
26
|
+
parsed = new URL(url);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new WebhookSetupError("Webhook URL is invalid.");
|
|
30
|
+
}
|
|
31
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
32
|
+
throw new WebhookSetupError("Webhook URL must start with http:// or https://.");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function readConfigContext() {
|
|
36
|
+
const configPath = findConfigFile() ?? undefined;
|
|
37
|
+
if (!configPath) {
|
|
38
|
+
throw new WebhookSetupError("No agent-orchestrator.yaml found. Run 'athene start' first to create one.");
|
|
39
|
+
}
|
|
40
|
+
const rawYaml = readFileSync(configPath, "utf-8");
|
|
41
|
+
const doc = parseDocument(rawYaml);
|
|
42
|
+
const rawConfig = doc.toJS() ?? {};
|
|
43
|
+
return { configPath, rawConfig };
|
|
44
|
+
}
|
|
45
|
+
function getExistingWebhook(rawConfig) {
|
|
46
|
+
const notifiers = isRecord(rawConfig["notifiers"]) ? rawConfig["notifiers"] : {};
|
|
47
|
+
const existing = notifiers["webhook"];
|
|
48
|
+
return isRecord(existing) ? existing : {};
|
|
49
|
+
}
|
|
50
|
+
function getBearerToken(headers) {
|
|
51
|
+
if (!isRecord(headers))
|
|
52
|
+
return undefined;
|
|
53
|
+
const authorization = stringValue(headers["Authorization"] ?? headers["authorization"]);
|
|
54
|
+
const match = authorization?.match(/^Bearer\s+(.+)$/i);
|
|
55
|
+
return match?.[1]?.trim();
|
|
56
|
+
}
|
|
57
|
+
function numberValue(value, fallback) {
|
|
58
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : fallback;
|
|
59
|
+
}
|
|
60
|
+
function formatFetchError(error) {
|
|
61
|
+
if (error instanceof Error)
|
|
62
|
+
return error.message;
|
|
63
|
+
return String(error);
|
|
64
|
+
}
|
|
65
|
+
function buildSetupPayload() {
|
|
66
|
+
return {
|
|
67
|
+
type: "notification",
|
|
68
|
+
event: {
|
|
69
|
+
id: `webhook-setup-${Date.now()}`,
|
|
70
|
+
type: "setup.webhook",
|
|
71
|
+
priority: "info",
|
|
72
|
+
sessionId: "setup",
|
|
73
|
+
projectId: "ao",
|
|
74
|
+
timestamp: new Date().toISOString(),
|
|
75
|
+
message: "AO webhook notifications are ready.",
|
|
76
|
+
data: {
|
|
77
|
+
source: "ao-setup-webhook",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function sendSetupProbe(resolved) {
|
|
83
|
+
const controller = new AbortController();
|
|
84
|
+
const timer = setTimeout(() => controller.abort(), SETUP_TIMEOUT_MS);
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(resolved.url, {
|
|
87
|
+
method: "POST",
|
|
88
|
+
headers: {
|
|
89
|
+
"Content-Type": "application/json",
|
|
90
|
+
...(resolved.headers ?? {}),
|
|
91
|
+
},
|
|
92
|
+
body: JSON.stringify(buildSetupPayload()),
|
|
93
|
+
signal: controller.signal,
|
|
94
|
+
});
|
|
95
|
+
if (response.ok)
|
|
96
|
+
return;
|
|
97
|
+
const body = await response.text().catch(() => "");
|
|
98
|
+
throw new WebhookSetupError(`Webhook setup test failed (${response.status}${response.statusText ? ` ${response.statusText}` : ""})${body ? `: ${body}` : ""}`);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error instanceof WebhookSetupError)
|
|
102
|
+
throw error;
|
|
103
|
+
throw new WebhookSetupError(`Webhook setup test failed: ${formatFetchError(error)}`);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
clearTimeout(timer);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function shouldReplaceConflictingWebhook(existingPlugin, force, nonInteractive) {
|
|
110
|
+
if (existingPlugin === undefined || existingPlugin === "webhook" || force)
|
|
111
|
+
return true;
|
|
112
|
+
if (nonInteractive) {
|
|
113
|
+
throw new WebhookSetupError(`notifiers.webhook already uses plugin "${String(existingPlugin)}". Re-run with --force to replace it.`);
|
|
114
|
+
}
|
|
115
|
+
const clack = await import("@clack/prompts");
|
|
116
|
+
const replace = await clack.confirm({
|
|
117
|
+
message: `notifiers.webhook already uses plugin "${String(existingPlugin)}". Replace it?`,
|
|
118
|
+
initialValue: false,
|
|
119
|
+
});
|
|
120
|
+
if (clack.isCancel(replace) || !replace) {
|
|
121
|
+
console.log(chalk.dim("Keeping existing webhook notifier config."));
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
function cancelSetup(clack) {
|
|
127
|
+
clack.cancel("Setup cancelled.");
|
|
128
|
+
throw new WebhookSetupError("Setup cancelled.", 0);
|
|
129
|
+
}
|
|
130
|
+
async function promptWebhookUrl(clack, initialValue) {
|
|
131
|
+
const urlInput = await clack.text({
|
|
132
|
+
message: "Webhook URL:",
|
|
133
|
+
placeholder: "https://example.com/ao-events",
|
|
134
|
+
initialValue,
|
|
135
|
+
validate: (value) => {
|
|
136
|
+
if (!value)
|
|
137
|
+
return "URL is required";
|
|
138
|
+
try {
|
|
139
|
+
validateWebhookUrl(String(value));
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return error instanceof Error ? error.message : String(error);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
if (clack.isCancel(urlInput)) {
|
|
147
|
+
cancelSetup(clack);
|
|
148
|
+
}
|
|
149
|
+
return String(urlInput);
|
|
150
|
+
}
|
|
151
|
+
async function promptChangeWebhookUrl(clack, existingUrl) {
|
|
152
|
+
const next = await clack.select({
|
|
153
|
+
message: "How do you want to configure the webhook URL?",
|
|
154
|
+
options: [
|
|
155
|
+
{
|
|
156
|
+
value: "enter-url",
|
|
157
|
+
label: "Add new webhook URL",
|
|
158
|
+
hint: "Paste a different HTTP endpoint",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
value: "back",
|
|
162
|
+
label: "Back",
|
|
163
|
+
hint: "Return to the previous options",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
value: "cancel",
|
|
167
|
+
label: "Cancel setup",
|
|
168
|
+
hint: "Do not change config",
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
});
|
|
172
|
+
if (clack.isCancel(next) || next === "cancel") {
|
|
173
|
+
cancelSetup(clack);
|
|
174
|
+
}
|
|
175
|
+
if (next === "back")
|
|
176
|
+
return "back";
|
|
177
|
+
return promptWebhookUrl(clack, existingUrl);
|
|
178
|
+
}
|
|
179
|
+
async function resolveInteractiveUrl(clack, opts, existingUrl) {
|
|
180
|
+
const providedUrl = stringValue(opts.url);
|
|
181
|
+
if (providedUrl)
|
|
182
|
+
return providedUrl;
|
|
183
|
+
while (true) {
|
|
184
|
+
if (!existingUrl) {
|
|
185
|
+
return promptWebhookUrl(clack, undefined);
|
|
186
|
+
}
|
|
187
|
+
const source = await clack.select({
|
|
188
|
+
message: "Webhook notifier is already configured. What do you want to do?",
|
|
189
|
+
options: [
|
|
190
|
+
{
|
|
191
|
+
value: "use-existing",
|
|
192
|
+
label: "Use existing webhook URL",
|
|
193
|
+
hint: "Keep sending to the currently configured endpoint",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
value: "add-new",
|
|
197
|
+
label: "Add new webhook URL",
|
|
198
|
+
hint: "Paste a different HTTP endpoint",
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
value: "cancel",
|
|
202
|
+
label: "Cancel setup",
|
|
203
|
+
hint: "Do not change config",
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
});
|
|
207
|
+
if (clack.isCancel(source) || source === "cancel") {
|
|
208
|
+
cancelSetup(clack);
|
|
209
|
+
}
|
|
210
|
+
if (source === "use-existing") {
|
|
211
|
+
return existingUrl;
|
|
212
|
+
}
|
|
213
|
+
if (source === "add-new") {
|
|
214
|
+
const result = await promptChangeWebhookUrl(clack, existingUrl);
|
|
215
|
+
if (result === "back")
|
|
216
|
+
continue;
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async function resolveInteractiveSetup(opts, existingWebhook, rawConfig) {
|
|
222
|
+
const clack = await import("@clack/prompts");
|
|
223
|
+
const existingUrl = stringValue(existingWebhook["url"]);
|
|
224
|
+
const existingToken = getBearerToken(existingWebhook["headers"]);
|
|
225
|
+
const optionRoutingPreset = resolveWebhookRoutingPreset(opts.routingPreset);
|
|
226
|
+
clack.intro(chalk.bgCyan(chalk.black(" athene setup webhook ")));
|
|
227
|
+
while (true) {
|
|
228
|
+
const resolvedUrl = await resolveInteractiveUrl(clack, opts, existingUrl);
|
|
229
|
+
let authToken = stringValue(opts.authToken);
|
|
230
|
+
if (!authToken && existingToken) {
|
|
231
|
+
const keepExisting = await clack.confirm({
|
|
232
|
+
message: "Keep the existing Authorization bearer token?",
|
|
233
|
+
initialValue: true,
|
|
234
|
+
});
|
|
235
|
+
if (clack.isCancel(keepExisting)) {
|
|
236
|
+
cancelSetup(clack);
|
|
237
|
+
}
|
|
238
|
+
if (keepExisting)
|
|
239
|
+
authToken = existingToken;
|
|
240
|
+
}
|
|
241
|
+
if (!authToken) {
|
|
242
|
+
const tokenInput = await clack.password({
|
|
243
|
+
message: "Auth token (optional; leave blank for none):",
|
|
244
|
+
});
|
|
245
|
+
if (clack.isCancel(tokenInput)) {
|
|
246
|
+
cancelSetup(clack);
|
|
247
|
+
}
|
|
248
|
+
authToken = stringValue(tokenInput);
|
|
249
|
+
}
|
|
250
|
+
const routingSelection = optionRoutingPreset ??
|
|
251
|
+
(await promptNotifierRoutingPreset(clack, rawConfig, "webhook", "webhook", () => cancelSetup(clack)));
|
|
252
|
+
if (routingSelection === "back")
|
|
253
|
+
continue;
|
|
254
|
+
const retries = numberValue(existingWebhook["retries"], DEFAULT_RETRIES);
|
|
255
|
+
const retryDelayMs = numberValue(existingWebhook["retryDelayMs"], DEFAULT_RETRY_DELAY_MS);
|
|
256
|
+
return buildResolvedSetup(resolvedUrl, authToken, retries, retryDelayMs, routingSelection === "preserve" ? undefined : routingSelection, opts);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function resolveNonInteractiveSetup(opts, existingWebhook) {
|
|
260
|
+
const url = stringValue(opts.url) ?? (opts.refresh ? stringValue(existingWebhook["url"]) : undefined);
|
|
261
|
+
if (!url) {
|
|
262
|
+
throw new WebhookSetupError("Webhook URL is required. Pass --url, or run `athene setup webhook --refresh` with an existing webhook config.");
|
|
263
|
+
}
|
|
264
|
+
const authToken = stringValue(opts.authToken) ?? getBearerToken(existingWebhook["headers"]);
|
|
265
|
+
const retries = numberValue(existingWebhook["retries"], DEFAULT_RETRIES);
|
|
266
|
+
const retryDelayMs = numberValue(existingWebhook["retryDelayMs"], DEFAULT_RETRY_DELAY_MS);
|
|
267
|
+
const routingPreset = resolveWebhookRoutingPreset(opts.routingPreset) ?? (opts.refresh ? undefined : "all");
|
|
268
|
+
return buildResolvedSetup(url, authToken, retries, retryDelayMs, routingPreset, opts);
|
|
269
|
+
}
|
|
270
|
+
function buildResolvedSetup(url, authToken, retries, retryDelayMs, routingPreset, opts) {
|
|
271
|
+
const normalizedUrl = url.trim();
|
|
272
|
+
validateWebhookUrl(normalizedUrl);
|
|
273
|
+
const headers = authToken ? { Authorization: `Bearer ${authToken}` } : undefined;
|
|
274
|
+
return {
|
|
275
|
+
url: normalizedUrl,
|
|
276
|
+
headers,
|
|
277
|
+
retries,
|
|
278
|
+
retryDelayMs,
|
|
279
|
+
shouldSendTest: opts.test !== false,
|
|
280
|
+
routingPreset,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function resolveWebhookRoutingPreset(value) {
|
|
284
|
+
try {
|
|
285
|
+
return resolveRoutingPresetOption(value, "webhook");
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
throw new WebhookSetupError(error instanceof Error ? error.message : String(error));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function toWebhookConfig(resolved) {
|
|
292
|
+
return {
|
|
293
|
+
plugin: "webhook",
|
|
294
|
+
url: resolved.url,
|
|
295
|
+
...(resolved.headers ? { headers: resolved.headers } : {}),
|
|
296
|
+
retries: resolved.retries,
|
|
297
|
+
retryDelayMs: resolved.retryDelayMs,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function writeWebhookConfig(configPath, resolved) {
|
|
301
|
+
const rawYaml = readFileSync(configPath, "utf-8");
|
|
302
|
+
const doc = parseDocument(rawYaml);
|
|
303
|
+
const rawConfig = doc.toJS() ?? {};
|
|
304
|
+
const notifiers = isRecord(rawConfig["notifiers"]) ? rawConfig["notifiers"] : {};
|
|
305
|
+
notifiers["webhook"] = toWebhookConfig(resolved);
|
|
306
|
+
rawConfig["notifiers"] = notifiers;
|
|
307
|
+
const defaults = isRecord(rawConfig["defaults"]) ? rawConfig["defaults"] : {};
|
|
308
|
+
rawConfig["defaults"] = defaults;
|
|
309
|
+
applyNotifierRoutingPreset(rawConfig, "webhook", resolved.routingPreset);
|
|
310
|
+
if (!isCanonicalGlobalConfigPath(configPath)) {
|
|
311
|
+
const currentSchema = doc.get("$schema");
|
|
312
|
+
if (!(typeof currentSchema === "string" && currentSchema.trim().length > 0)) {
|
|
313
|
+
doc.set("$schema", CONFIG_SCHEMA_URL);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
doc.setIn(["notifiers"], rawConfig["notifiers"]);
|
|
317
|
+
doc.setIn(["defaults"], rawConfig["defaults"]);
|
|
318
|
+
if (rawConfig["notificationRouting"] !== undefined) {
|
|
319
|
+
doc.setIn(["notificationRouting"], rawConfig["notificationRouting"]);
|
|
320
|
+
}
|
|
321
|
+
writeFileSync(configPath, doc.toString({ indent: 2 }));
|
|
322
|
+
}
|
|
323
|
+
async function printStatus() {
|
|
324
|
+
const context = readConfigContext();
|
|
325
|
+
const existingWebhook = getExistingWebhook(context.rawConfig);
|
|
326
|
+
const plugin = stringValue(existingWebhook["plugin"]);
|
|
327
|
+
const url = stringValue(existingWebhook["url"]);
|
|
328
|
+
const hasAuth = Boolean(getBearerToken(existingWebhook["headers"]));
|
|
329
|
+
const retries = numberValue(existingWebhook["retries"], DEFAULT_RETRIES);
|
|
330
|
+
const retryDelayMs = numberValue(existingWebhook["retryDelayMs"], DEFAULT_RETRY_DELAY_MS);
|
|
331
|
+
console.log(chalk.bold("Webhook notifier status"));
|
|
332
|
+
console.log(` Config: ${context.configPath}`);
|
|
333
|
+
console.log(` Plugin: ${plugin ?? chalk.dim("not configured")}`);
|
|
334
|
+
console.log(` URL: ${url ?? chalk.dim("not configured")}`);
|
|
335
|
+
console.log(` Auth: ${hasAuth ? "Authorization bearer token configured" : "none"}`);
|
|
336
|
+
console.log(` Retries: ${retries}`);
|
|
337
|
+
console.log(` Retry delay: ${retryDelayMs}ms`);
|
|
338
|
+
console.log(` Routing: ${getNotifierRoutingState(context.rawConfig, "webhook").label}`);
|
|
339
|
+
if (plugin !== "webhook" || !url)
|
|
340
|
+
return;
|
|
341
|
+
try {
|
|
342
|
+
await sendSetupProbe(buildResolvedSetup(url, getBearerToken(existingWebhook["headers"]), retries, retryDelayMs, undefined, { test: true }));
|
|
343
|
+
console.log(chalk.green(" Probe: PASS"));
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
console.log(chalk.red(` Probe: FAIL ${error instanceof Error ? error.message : String(error)}`));
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
export async function runWebhookSetupAction(opts) {
|
|
350
|
+
const nonInteractive = opts.nonInteractive || !process.stdin.isTTY;
|
|
351
|
+
const force = Boolean(opts.force);
|
|
352
|
+
if (opts.status) {
|
|
353
|
+
await printStatus();
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const context = readConfigContext();
|
|
357
|
+
const existingWebhook = getExistingWebhook(context.rawConfig);
|
|
358
|
+
const shouldWire = await shouldReplaceConflictingWebhook(existingWebhook["plugin"], force, nonInteractive);
|
|
359
|
+
if (!shouldWire)
|
|
360
|
+
return;
|
|
361
|
+
const resolved = nonInteractive
|
|
362
|
+
? resolveNonInteractiveSetup(opts, existingWebhook)
|
|
363
|
+
: await resolveInteractiveSetup(opts, existingWebhook, context.rawConfig);
|
|
364
|
+
if (resolved.shouldSendTest) {
|
|
365
|
+
await sendSetupProbe(resolved);
|
|
366
|
+
console.log(chalk.green("ā Webhook setup test passed"));
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
console.log(chalk.dim("Skipped webhook setup test."));
|
|
370
|
+
}
|
|
371
|
+
writeWebhookConfig(context.configPath, resolved);
|
|
372
|
+
console.log(chalk.green(`ā Config written to ${context.configPath}`));
|
|
373
|
+
if (!nonInteractive) {
|
|
374
|
+
const clack = await import("@clack/prompts");
|
|
375
|
+
clack.outro(`${chalk.green("Webhook setup complete!")} AO will send notifications to ${resolved.url}.\n` +
|
|
376
|
+
chalk.dim(" Test it with: athene notify test --to webhook --template basic"));
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
console.log(chalk.green("\nā Webhook setup complete."));
|
|
380
|
+
console.log(chalk.dim("Test it with: athene notify test --to webhook --template basic"));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=webhook-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-setup.js","sourceRoot":"","sources":["../../src/lib/webhook-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/options/version.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,MAAM,CAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/options/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;IACzE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,aAAa,IAAI,OAAO,CAyCvC"}
|