@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.
Files changed (315) hide show
  1. package/LICENSE +22 -0
  2. package/dist/assets/plugin-registry.json +67 -0
  3. package/dist/assets/scripts/athene-doctor.ps1 +352 -0
  4. package/dist/assets/scripts/athene-doctor.sh +552 -0
  5. package/dist/assets/scripts/athene-update.ps1 +224 -0
  6. package/dist/assets/scripts/athene-update.sh +252 -0
  7. package/dist/commands/completion.d.ts +3 -0
  8. package/dist/commands/completion.d.ts.map +1 -0
  9. package/dist/commands/completion.js +26 -0
  10. package/dist/commands/completion.js.map +1 -0
  11. package/dist/commands/config.d.ts +11 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +89 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/dashboard.d.ts +3 -0
  16. package/dist/commands/dashboard.d.ts.map +1 -0
  17. package/dist/commands/dashboard.js +103 -0
  18. package/dist/commands/dashboard.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +3 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +329 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/events.d.ts +3 -0
  24. package/dist/commands/events.d.ts.map +1 -0
  25. package/dist/commands/events.js +172 -0
  26. package/dist/commands/events.js.map +1 -0
  27. package/dist/commands/migrate-storage.d.ts +3 -0
  28. package/dist/commands/migrate-storage.d.ts.map +1 -0
  29. package/dist/commands/migrate-storage.js +78 -0
  30. package/dist/commands/migrate-storage.js.map +1 -0
  31. package/dist/commands/notify.d.ts +3 -0
  32. package/dist/commands/notify.d.ts.map +1 -0
  33. package/dist/commands/notify.js +143 -0
  34. package/dist/commands/notify.js.map +1 -0
  35. package/dist/commands/open.d.ts +3 -0
  36. package/dist/commands/open.d.ts.map +1 -0
  37. package/dist/commands/open.js +167 -0
  38. package/dist/commands/open.js.map +1 -0
  39. package/dist/commands/plugin.d.ts +3 -0
  40. package/dist/commands/plugin.d.ts.map +1 -0
  41. package/dist/commands/plugin.js +462 -0
  42. package/dist/commands/plugin.js.map +1 -0
  43. package/dist/commands/project.d.ts +3 -0
  44. package/dist/commands/project.d.ts.map +1 -0
  45. package/dist/commands/project.js +143 -0
  46. package/dist/commands/project.js.map +1 -0
  47. package/dist/commands/report.d.ts +19 -0
  48. package/dist/commands/report.d.ts.map +1 -0
  49. package/dist/commands/report.js +114 -0
  50. package/dist/commands/report.js.map +1 -0
  51. package/dist/commands/review-check.d.ts +3 -0
  52. package/dist/commands/review-check.d.ts.map +1 -0
  53. package/dist/commands/review-check.js +122 -0
  54. package/dist/commands/review-check.js.map +1 -0
  55. package/dist/commands/review.d.ts +3 -0
  56. package/dist/commands/review.d.ts.map +1 -0
  57. package/dist/commands/review.js +215 -0
  58. package/dist/commands/review.js.map +1 -0
  59. package/dist/commands/send.d.ts +3 -0
  60. package/dist/commands/send.d.ts.map +1 -0
  61. package/dist/commands/send.js +187 -0
  62. package/dist/commands/send.js.map +1 -0
  63. package/dist/commands/session.d.ts +3 -0
  64. package/dist/commands/session.d.ts.map +1 -0
  65. package/dist/commands/session.js +439 -0
  66. package/dist/commands/session.js.map +1 -0
  67. package/dist/commands/setup.d.ts +5 -0
  68. package/dist/commands/setup.d.ts.map +1 -0
  69. package/dist/commands/setup.js +297 -0
  70. package/dist/commands/setup.js.map +1 -0
  71. package/dist/commands/spawn.d.ts +4 -0
  72. package/dist/commands/spawn.d.ts.map +1 -0
  73. package/dist/commands/spawn.js +436 -0
  74. package/dist/commands/spawn.js.map +1 -0
  75. package/dist/commands/start.d.ts +21 -0
  76. package/dist/commands/start.d.ts.map +1 -0
  77. package/dist/commands/start.js +1836 -0
  78. package/dist/commands/start.js.map +1 -0
  79. package/dist/commands/status.d.ts +3 -0
  80. package/dist/commands/status.d.ts.map +1 -0
  81. package/dist/commands/status.js +556 -0
  82. package/dist/commands/status.js.map +1 -0
  83. package/dist/commands/update.d.ts +15 -0
  84. package/dist/commands/update.d.ts.map +1 -0
  85. package/dist/commands/update.js +652 -0
  86. package/dist/commands/update.js.map +1 -0
  87. package/dist/commands/verify.d.ts +3 -0
  88. package/dist/commands/verify.d.ts.map +1 -0
  89. package/dist/commands/verify.js +131 -0
  90. package/dist/commands/verify.js.map +1 -0
  91. package/dist/index.d.ts +3 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +24 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/lib/bun-tmp-janitor.d.ts +18 -0
  96. package/dist/lib/bun-tmp-janitor.d.ts.map +1 -0
  97. package/dist/lib/bun-tmp-janitor.js +127 -0
  98. package/dist/lib/bun-tmp-janitor.js.map +1 -0
  99. package/dist/lib/caller-context.d.ts +13 -0
  100. package/dist/lib/caller-context.d.ts.map +1 -0
  101. package/dist/lib/caller-context.js +20 -0
  102. package/dist/lib/caller-context.js.map +1 -0
  103. package/dist/lib/cli-errors.d.ts +8 -0
  104. package/dist/lib/cli-errors.d.ts.map +1 -0
  105. package/dist/lib/cli-errors.js +20 -0
  106. package/dist/lib/cli-errors.js.map +1 -0
  107. package/dist/lib/completion.d.ts +13 -0
  108. package/dist/lib/completion.d.ts.map +1 -0
  109. package/dist/lib/completion.js +428 -0
  110. package/dist/lib/completion.js.map +1 -0
  111. package/dist/lib/composio-setup.d.ts +65 -0
  112. package/dist/lib/composio-setup.d.ts.map +1 -0
  113. package/dist/lib/composio-setup.js +3255 -0
  114. package/dist/lib/composio-setup.js.map +1 -0
  115. package/dist/lib/config-instruction.d.ts +2 -0
  116. package/dist/lib/config-instruction.d.ts.map +1 -0
  117. package/dist/lib/config-instruction.js +193 -0
  118. package/dist/lib/config-instruction.js.map +1 -0
  119. package/dist/lib/constants.d.ts +3 -0
  120. package/dist/lib/constants.d.ts.map +1 -0
  121. package/dist/lib/constants.js +3 -0
  122. package/dist/lib/constants.js.map +1 -0
  123. package/dist/lib/create-session-manager.d.ts +26 -0
  124. package/dist/lib/create-session-manager.d.ts.map +1 -0
  125. package/dist/lib/create-session-manager.js +55 -0
  126. package/dist/lib/create-session-manager.js.map +1 -0
  127. package/dist/lib/credential-resolver.d.ts +37 -0
  128. package/dist/lib/credential-resolver.d.ts.map +1 -0
  129. package/dist/lib/credential-resolver.js +105 -0
  130. package/dist/lib/credential-resolver.js.map +1 -0
  131. package/dist/lib/daemon.d.ts +69 -0
  132. package/dist/lib/daemon.d.ts.map +1 -0
  133. package/dist/lib/daemon.js +77 -0
  134. package/dist/lib/daemon.js.map +1 -0
  135. package/dist/lib/dashboard-rebuild.d.ts +53 -0
  136. package/dist/lib/dashboard-rebuild.d.ts.map +1 -0
  137. package/dist/lib/dashboard-rebuild.js +188 -0
  138. package/dist/lib/dashboard-rebuild.js.map +1 -0
  139. package/dist/lib/dashboard-setup.d.ts +14 -0
  140. package/dist/lib/dashboard-setup.d.ts.map +1 -0
  141. package/dist/lib/dashboard-setup.js +192 -0
  142. package/dist/lib/dashboard-setup.js.map +1 -0
  143. package/dist/lib/dashboard-url.d.ts +19 -0
  144. package/dist/lib/dashboard-url.d.ts.map +1 -0
  145. package/dist/lib/dashboard-url.js +25 -0
  146. package/dist/lib/dashboard-url.js.map +1 -0
  147. package/dist/lib/desktop-setup.d.ts +21 -0
  148. package/dist/lib/desktop-setup.d.ts.map +1 -0
  149. package/dist/lib/desktop-setup.js +556 -0
  150. package/dist/lib/desktop-setup.js.map +1 -0
  151. package/dist/lib/detect-agent.d.ts +24 -0
  152. package/dist/lib/detect-agent.d.ts.map +1 -0
  153. package/dist/lib/detect-agent.js +69 -0
  154. package/dist/lib/detect-agent.js.map +1 -0
  155. package/dist/lib/detect-env.d.ts +14 -0
  156. package/dist/lib/detect-env.d.ts.map +1 -0
  157. package/dist/lib/detect-env.js +46 -0
  158. package/dist/lib/detect-env.js.map +1 -0
  159. package/dist/lib/discord-setup.d.ts +20 -0
  160. package/dist/lib/discord-setup.d.ts.map +1 -0
  161. package/dist/lib/discord-setup.js +584 -0
  162. package/dist/lib/discord-setup.js.map +1 -0
  163. package/dist/lib/format.d.ts +11 -0
  164. package/dist/lib/format.d.ts.map +1 -0
  165. package/dist/lib/format.js +116 -0
  166. package/dist/lib/format.js.map +1 -0
  167. package/dist/lib/git-utils.d.ts +14 -0
  168. package/dist/lib/git-utils.d.ts.map +1 -0
  169. package/dist/lib/git-utils.js +45 -0
  170. package/dist/lib/git-utils.js.map +1 -0
  171. package/dist/lib/install-helpers.d.ts +24 -0
  172. package/dist/lib/install-helpers.d.ts.map +1 -0
  173. package/dist/lib/install-helpers.js +76 -0
  174. package/dist/lib/install-helpers.js.map +1 -0
  175. package/dist/lib/lifecycle-service.d.ts +11 -0
  176. package/dist/lib/lifecycle-service.d.ts.map +1 -0
  177. package/dist/lib/lifecycle-service.js +65 -0
  178. package/dist/lib/lifecycle-service.js.map +1 -0
  179. package/dist/lib/notifier-routing.d.ts +35 -0
  180. package/dist/lib/notifier-routing.d.ts.map +1 -0
  181. package/dist/lib/notifier-routing.js +133 -0
  182. package/dist/lib/notifier-routing.js.map +1 -0
  183. package/dist/lib/notify-test.d.ts +72 -0
  184. package/dist/lib/notify-test.d.ts.map +1 -0
  185. package/dist/lib/notify-test.js +674 -0
  186. package/dist/lib/notify-test.js.map +1 -0
  187. package/dist/lib/openclaw-probe.d.ts +38 -0
  188. package/dist/lib/openclaw-probe.d.ts.map +1 -0
  189. package/dist/lib/openclaw-probe.js +146 -0
  190. package/dist/lib/openclaw-probe.js.map +1 -0
  191. package/dist/lib/openclaw-setup.d.ts +19 -0
  192. package/dist/lib/openclaw-setup.d.ts.map +1 -0
  193. package/dist/lib/openclaw-setup.js +684 -0
  194. package/dist/lib/openclaw-setup.js.map +1 -0
  195. package/dist/lib/path-equality.d.ts +29 -0
  196. package/dist/lib/path-equality.d.ts.map +1 -0
  197. package/dist/lib/path-equality.js +52 -0
  198. package/dist/lib/path-equality.js.map +1 -0
  199. package/dist/lib/plugin-marketplace.d.ts +24 -0
  200. package/dist/lib/plugin-marketplace.d.ts.map +1 -0
  201. package/dist/lib/plugin-marketplace.js +175 -0
  202. package/dist/lib/plugin-marketplace.js.map +1 -0
  203. package/dist/lib/plugin-scaffold.d.ts +14 -0
  204. package/dist/lib/plugin-scaffold.d.ts.map +1 -0
  205. package/dist/lib/plugin-scaffold.js +174 -0
  206. package/dist/lib/plugin-scaffold.js.map +1 -0
  207. package/dist/lib/plugin-store.d.ts +9 -0
  208. package/dist/lib/plugin-store.d.ts.map +1 -0
  209. package/dist/lib/plugin-store.js +121 -0
  210. package/dist/lib/plugin-store.js.map +1 -0
  211. package/dist/lib/plugins.d.ts +17 -0
  212. package/dist/lib/plugins.d.ts.map +1 -0
  213. package/dist/lib/plugins.js +65 -0
  214. package/dist/lib/plugins.js.map +1 -0
  215. package/dist/lib/portfolio-display.d.ts +10 -0
  216. package/dist/lib/portfolio-display.d.ts.map +1 -0
  217. package/dist/lib/portfolio-display.js +17 -0
  218. package/dist/lib/portfolio-display.js.map +1 -0
  219. package/dist/lib/preflight.d.ts +27 -0
  220. package/dist/lib/preflight.d.ts.map +1 -0
  221. package/dist/lib/preflight.js +77 -0
  222. package/dist/lib/preflight.js.map +1 -0
  223. package/dist/lib/prevent-sleep.d.ts +34 -0
  224. package/dist/lib/prevent-sleep.d.ts.map +1 -0
  225. package/dist/lib/prevent-sleep.js +65 -0
  226. package/dist/lib/prevent-sleep.js.map +1 -0
  227. package/dist/lib/project-detection.d.ts +11 -0
  228. package/dist/lib/project-detection.d.ts.map +1 -0
  229. package/dist/lib/project-detection.js +206 -0
  230. package/dist/lib/project-detection.js.map +1 -0
  231. package/dist/lib/project-resolution.d.ts +10 -0
  232. package/dist/lib/project-resolution.d.ts.map +1 -0
  233. package/dist/lib/project-resolution.js +17 -0
  234. package/dist/lib/project-resolution.js.map +1 -0
  235. package/dist/lib/project-supervisor.d.ts +28 -0
  236. package/dist/lib/project-supervisor.d.ts.map +1 -0
  237. package/dist/lib/project-supervisor.js +167 -0
  238. package/dist/lib/project-supervisor.js.map +1 -0
  239. package/dist/lib/prompts.d.ts +7 -0
  240. package/dist/lib/prompts.d.ts.map +1 -0
  241. package/dist/lib/prompts.js +37 -0
  242. package/dist/lib/prompts.js.map +1 -0
  243. package/dist/lib/repo-utils.d.ts +16 -0
  244. package/dist/lib/repo-utils.d.ts.map +1 -0
  245. package/dist/lib/repo-utils.js +26 -0
  246. package/dist/lib/repo-utils.js.map +1 -0
  247. package/dist/lib/resolve-project.d.ts +113 -0
  248. package/dist/lib/resolve-project.d.ts.map +1 -0
  249. package/dist/lib/resolve-project.js +433 -0
  250. package/dist/lib/resolve-project.js.map +1 -0
  251. package/dist/lib/routes.d.ts +2 -0
  252. package/dist/lib/routes.d.ts.map +1 -0
  253. package/dist/lib/routes.js +5 -0
  254. package/dist/lib/routes.js.map +1 -0
  255. package/dist/lib/running-state.d.ts +76 -0
  256. package/dist/lib/running-state.d.ts.map +1 -0
  257. package/dist/lib/running-state.js +338 -0
  258. package/dist/lib/running-state.js.map +1 -0
  259. package/dist/lib/script-runner.d.ts +10 -0
  260. package/dist/lib/script-runner.d.ts.map +1 -0
  261. package/dist/lib/script-runner.js +189 -0
  262. package/dist/lib/script-runner.js.map +1 -0
  263. package/dist/lib/session-utils.d.ts +14 -0
  264. package/dist/lib/session-utils.d.ts.map +1 -0
  265. package/dist/lib/session-utils.js +58 -0
  266. package/dist/lib/session-utils.js.map +1 -0
  267. package/dist/lib/shell.d.ts +17 -0
  268. package/dist/lib/shell.d.ts.map +1 -0
  269. package/dist/lib/shell.js +90 -0
  270. package/dist/lib/shell.js.map +1 -0
  271. package/dist/lib/shutdown.d.ts +30 -0
  272. package/dist/lib/shutdown.d.ts.map +1 -0
  273. package/dist/lib/shutdown.js +177 -0
  274. package/dist/lib/shutdown.js.map +1 -0
  275. package/dist/lib/slack-setup.d.ts +17 -0
  276. package/dist/lib/slack-setup.d.ts.map +1 -0
  277. package/dist/lib/slack-setup.js +485 -0
  278. package/dist/lib/slack-setup.js.map +1 -0
  279. package/dist/lib/startup-preflight.d.ts +36 -0
  280. package/dist/lib/startup-preflight.d.ts.map +1 -0
  281. package/dist/lib/startup-preflight.js +273 -0
  282. package/dist/lib/startup-preflight.js.map +1 -0
  283. package/dist/lib/update-channel-onboarding.d.ts +52 -0
  284. package/dist/lib/update-channel-onboarding.d.ts.map +1 -0
  285. package/dist/lib/update-channel-onboarding.js +107 -0
  286. package/dist/lib/update-channel-onboarding.js.map +1 -0
  287. package/dist/lib/update-check.d.ts +161 -0
  288. package/dist/lib/update-check.d.ts.map +1 -0
  289. package/dist/lib/update-check.js +504 -0
  290. package/dist/lib/update-check.js.map +1 -0
  291. package/dist/lib/web-dir.d.ts +47 -0
  292. package/dist/lib/web-dir.d.ts.map +1 -0
  293. package/dist/lib/web-dir.js +179 -0
  294. package/dist/lib/web-dir.js.map +1 -0
  295. package/dist/lib/webhook-setup.d.ts +16 -0
  296. package/dist/lib/webhook-setup.d.ts.map +1 -0
  297. package/dist/lib/webhook-setup.js +383 -0
  298. package/dist/lib/webhook-setup.js.map +1 -0
  299. package/dist/options/version.d.ts +2 -0
  300. package/dist/options/version.d.ts.map +1 -0
  301. package/dist/options/version.js +7 -0
  302. package/dist/options/version.js.map +1 -0
  303. package/dist/program.d.ts +3 -0
  304. package/dist/program.d.ts.map +1 -0
  305. package/dist/program.js +63 -0
  306. package/dist/program.js.map +1 -0
  307. package/package.json +80 -0
  308. package/templates/rules/base.md +4 -0
  309. package/templates/rules/go.md +8 -0
  310. package/templates/rules/javascript.md +4 -0
  311. package/templates/rules/nextjs.md +7 -0
  312. package/templates/rules/pnpm-workspaces.md +4 -0
  313. package/templates/rules/python.md +8 -0
  314. package/templates/rules/react.md +8 -0
  315. package/templates/rules/typescript.md +6 -0
@@ -0,0 +1,485 @@
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 SLACK_APPS_URL = "https://api.slack.com/apps";
7
+ const DEFAULT_USERNAME = "Athene";
8
+ const SETUP_TIMEOUT_MS = 10_000;
9
+ export class SlackSetupError extends Error {
10
+ exitCode;
11
+ constructor(message, exitCode = 1) {
12
+ super(message);
13
+ this.exitCode = exitCode;
14
+ this.name = "SlackSetupError";
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 validateSlackWebhookUrl(webhookUrl) {
24
+ let parsed;
25
+ try {
26
+ parsed = new URL(webhookUrl);
27
+ }
28
+ catch {
29
+ throw new SlackSetupError("Slack webhook URL is invalid.");
30
+ }
31
+ const validHost = parsed.hostname === "hooks.slack.com" || parsed.hostname === "hooks.slack-gov.com";
32
+ if (parsed.protocol !== "https:" || !validHost || !parsed.pathname.startsWith("/services/")) {
33
+ throw new SlackSetupError("Slack webhook URL must look like https://hooks.slack.com/services/...");
34
+ }
35
+ }
36
+ function readConfigContext() {
37
+ const configPath = findConfigFile() ?? undefined;
38
+ if (!configPath) {
39
+ throw new SlackSetupError("No agent-orchestrator.yaml found. Run 'athene start' first to create one.");
40
+ }
41
+ const rawYaml = readFileSync(configPath, "utf-8");
42
+ const doc = parseDocument(rawYaml);
43
+ const rawConfig = doc.toJS() ?? {};
44
+ return { configPath, rawConfig };
45
+ }
46
+ function getExistingSlack(rawConfig) {
47
+ const notifiers = isRecord(rawConfig["notifiers"]) ? rawConfig["notifiers"] : {};
48
+ const existing = notifiers["slack"];
49
+ return isRecord(existing) ? existing : {};
50
+ }
51
+ function formatFetchError(error) {
52
+ if (error instanceof Error)
53
+ return error.message;
54
+ return String(error);
55
+ }
56
+ function buildSetupPayload(resolved) {
57
+ const payload = {
58
+ username: resolved.username,
59
+ text: "AO Slack notifications are ready.",
60
+ blocks: [
61
+ {
62
+ type: "header",
63
+ text: {
64
+ type: "plain_text",
65
+ text: "AO Slack notifications are ready",
66
+ emoji: true,
67
+ },
68
+ },
69
+ {
70
+ type: "section",
71
+ text: {
72
+ type: "mrkdwn",
73
+ text: "This channel is now configured to receive AO notifications.",
74
+ },
75
+ },
76
+ ],
77
+ };
78
+ if (resolved.channel)
79
+ payload["channel"] = resolved.channel;
80
+ return payload;
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.webhookUrl, {
87
+ method: "POST",
88
+ headers: { "Content-Type": "application/json" },
89
+ body: JSON.stringify(buildSetupPayload(resolved)),
90
+ signal: controller.signal,
91
+ });
92
+ if (response.ok)
93
+ return;
94
+ const body = await response.text().catch(() => "");
95
+ throw new SlackSetupError(`Slack setup test failed (${response.status}${response.statusText ? ` ${response.statusText}` : ""})${body ? `: ${body}` : ""}`);
96
+ }
97
+ catch (error) {
98
+ if (error instanceof SlackSetupError)
99
+ throw error;
100
+ throw new SlackSetupError(`Slack setup test failed: ${formatFetchError(error)}`);
101
+ }
102
+ finally {
103
+ clearTimeout(timer);
104
+ }
105
+ }
106
+ async function shouldReplaceConflictingSlack(existingPlugin, force, nonInteractive) {
107
+ if (existingPlugin === undefined || existingPlugin === "slack" || force)
108
+ return true;
109
+ if (nonInteractive) {
110
+ throw new SlackSetupError(`notifiers.slack already uses plugin "${String(existingPlugin)}". Re-run with --force to replace it.`);
111
+ }
112
+ const clack = await import("@clack/prompts");
113
+ const replace = await clack.confirm({
114
+ message: `notifiers.slack already uses plugin "${String(existingPlugin)}". Replace it?`,
115
+ initialValue: false,
116
+ });
117
+ if (clack.isCancel(replace) || !replace) {
118
+ console.log(chalk.dim("Keeping existing Slack notifier config."));
119
+ return false;
120
+ }
121
+ return true;
122
+ }
123
+ function printManualWebhookInstructions() {
124
+ console.log("");
125
+ console.log(chalk.bold("Create a Slack incoming webhook"));
126
+ console.log(` 1. Open ${SLACK_APPS_URL}`);
127
+ console.log(" 2. Create a new app, or select an existing app.");
128
+ console.log(" 3. Open Incoming Webhooks and activate them.");
129
+ console.log(" 4. Click Add New Webhook to Workspace.");
130
+ console.log(" 5. Pick the channel AO should post to and authorize.");
131
+ console.log(" 6. Copy the generated webhook URL and paste it here.");
132
+ console.log(chalk.dim("For private channels, the installing Slack user must already be in the channel."));
133
+ console.log("");
134
+ }
135
+ function explainChannelBinding() {
136
+ console.log(chalk.dim("Slack incoming webhook URLs are bound to the channel selected during Slack authorization. To change channels, create a webhook for that channel."));
137
+ }
138
+ function cancelSetup(clack) {
139
+ clack.cancel("Setup cancelled.");
140
+ throw new SlackSetupError("Setup cancelled.", 0);
141
+ }
142
+ async function promptSlackWebhookUrl(clack, initialValue) {
143
+ const webhookUrlInput = await clack.text({
144
+ message: "Slack incoming webhook URL:",
145
+ placeholder: "https://hooks.slack.com/services/...",
146
+ initialValue,
147
+ validate: (value) => {
148
+ if (!value)
149
+ return "Slack webhook URL is required";
150
+ try {
151
+ validateSlackWebhookUrl(String(value));
152
+ }
153
+ catch (error) {
154
+ return error instanceof Error ? error.message : String(error);
155
+ }
156
+ },
157
+ });
158
+ if (clack.isCancel(webhookUrlInput)) {
159
+ cancelSetup(clack);
160
+ }
161
+ return String(webhookUrlInput);
162
+ }
163
+ async function promptAfterWebhookInstructions(clack, initialValue) {
164
+ printManualWebhookInstructions();
165
+ while (true) {
166
+ const next = await clack.select({
167
+ message: "After creating the Slack webhook, what do you want to do?",
168
+ options: [
169
+ {
170
+ value: "enter-url",
171
+ label: "Paste webhook URL",
172
+ hint: "Continue setup",
173
+ },
174
+ {
175
+ value: "show-steps",
176
+ label: "Show steps again",
177
+ hint: "Reprint the Slack app URL and steps",
178
+ },
179
+ {
180
+ value: "back",
181
+ label: "Back",
182
+ hint: "Return to the previous options",
183
+ },
184
+ {
185
+ value: "cancel",
186
+ label: "Cancel setup",
187
+ hint: "Do not change config",
188
+ },
189
+ ],
190
+ });
191
+ if (clack.isCancel(next) || next === "cancel") {
192
+ cancelSetup(clack);
193
+ }
194
+ if (next === "back")
195
+ return "back";
196
+ if (next === "show-steps") {
197
+ printManualWebhookInstructions();
198
+ continue;
199
+ }
200
+ if (next === "enter-url") {
201
+ return promptSlackWebhookUrl(clack, initialValue);
202
+ }
203
+ }
204
+ }
205
+ async function promptChangeWebhookUrl(clack, existingWebhookUrl) {
206
+ while (true) {
207
+ const next = await clack.select({
208
+ message: "How do you want to change the Slack webhook URL?",
209
+ options: [
210
+ {
211
+ value: "enter-url",
212
+ label: "Paste new webhook URL",
213
+ hint: "Use a different Slack incoming webhook URL",
214
+ },
215
+ {
216
+ value: "need-url",
217
+ label: "Show me how to create a new webhook",
218
+ hint: "AO will print the Slack app URL and steps",
219
+ },
220
+ {
221
+ value: "back",
222
+ label: "Back",
223
+ hint: "Return to the previous options",
224
+ },
225
+ {
226
+ value: "cancel",
227
+ label: "Cancel setup",
228
+ hint: "Do not change config",
229
+ },
230
+ ],
231
+ });
232
+ if (clack.isCancel(next) || next === "cancel") {
233
+ cancelSetup(clack);
234
+ }
235
+ if (next === "back")
236
+ return "back";
237
+ if (next === "enter-url") {
238
+ return promptSlackWebhookUrl(clack, existingWebhookUrl);
239
+ }
240
+ if (next === "need-url") {
241
+ const result = await promptAfterWebhookInstructions(clack, undefined);
242
+ if (result === "back")
243
+ continue;
244
+ return result;
245
+ }
246
+ }
247
+ }
248
+ async function resolveInteractiveWebhookUrl(clack, opts, existingWebhookUrl) {
249
+ const providedWebhookUrl = stringValue(opts.webhookUrl);
250
+ if (providedWebhookUrl)
251
+ return providedWebhookUrl;
252
+ while (true) {
253
+ const source = existingWebhookUrl
254
+ ? await clack.select({
255
+ message: "Slack notifier is already configured. What do you want to do?",
256
+ options: [
257
+ {
258
+ value: "use-existing",
259
+ label: "Use existing webhook URL",
260
+ hint: "Keep sending to the currently configured Slack channel",
261
+ },
262
+ {
263
+ value: "change-url",
264
+ label: "Change webhook URL",
265
+ hint: "Paste a different Slack incoming webhook URL",
266
+ },
267
+ {
268
+ value: "need-url",
269
+ label: "Show me how to create a new webhook",
270
+ hint: "AO will print the Slack app URL and steps",
271
+ },
272
+ {
273
+ value: "cancel",
274
+ label: "Cancel setup",
275
+ hint: "Do not change config",
276
+ },
277
+ ],
278
+ })
279
+ : await clack.select({
280
+ message: "Do you already have a Slack incoming webhook URL?",
281
+ options: [
282
+ {
283
+ value: "have-url",
284
+ label: "Yes, I have the URL",
285
+ hint: "Paste the existing Slack webhook URL",
286
+ },
287
+ {
288
+ value: "need-url",
289
+ label: "No, show me how to create one",
290
+ hint: "AO will print the Slack app URL and steps",
291
+ },
292
+ {
293
+ value: "cancel",
294
+ label: "Cancel setup",
295
+ hint: "Do not change config",
296
+ },
297
+ ],
298
+ });
299
+ if (clack.isCancel(source) || source === "cancel") {
300
+ cancelSetup(clack);
301
+ }
302
+ if (source === "use-existing" && existingWebhookUrl) {
303
+ return existingWebhookUrl;
304
+ }
305
+ if (source === "change-url") {
306
+ const result = await promptChangeWebhookUrl(clack, existingWebhookUrl);
307
+ if (result === "back")
308
+ continue;
309
+ return result;
310
+ }
311
+ if (source === "have-url") {
312
+ return promptSlackWebhookUrl(clack, undefined);
313
+ }
314
+ if (source === "need-url") {
315
+ const result = await promptAfterWebhookInstructions(clack, undefined);
316
+ if (result === "back")
317
+ continue;
318
+ return result;
319
+ }
320
+ }
321
+ }
322
+ async function resolveInteractiveSetup(opts, existingSlack, rawConfig) {
323
+ const clack = await import("@clack/prompts");
324
+ const existingWebhookUrl = stringValue(existingSlack["webhookUrl"]);
325
+ const optionRoutingPreset = resolveSlackRoutingPreset(opts.routingPreset);
326
+ clack.intro(chalk.bgCyan(chalk.black(" athene setup slack ")));
327
+ explainChannelBinding();
328
+ while (true) {
329
+ const resolvedWebhookUrl = await resolveInteractiveWebhookUrl(clack, opts, existingWebhookUrl);
330
+ const channelInput = await clack.text({
331
+ message: "Channel name (optional; must match the channel selected when creating the webhook):",
332
+ placeholder: "#agents",
333
+ initialValue: stringValue(opts.channel) ?? stringValue(existingSlack["channel"]),
334
+ });
335
+ if (clack.isCancel(channelInput)) {
336
+ cancelSetup(clack);
337
+ }
338
+ const usernameInput = await clack.text({
339
+ message: "Display name (optional):",
340
+ placeholder: DEFAULT_USERNAME,
341
+ initialValue: stringValue(opts.username) ?? stringValue(existingSlack["username"]) ?? DEFAULT_USERNAME,
342
+ });
343
+ if (clack.isCancel(usernameInput)) {
344
+ cancelSetup(clack);
345
+ }
346
+ const routingSelection = optionRoutingPreset ??
347
+ (await promptNotifierRoutingPreset(clack, rawConfig, "slack", "Slack", () => cancelSetup(clack)));
348
+ if (routingSelection === "back")
349
+ continue;
350
+ return buildResolvedSetup(resolvedWebhookUrl, stringValue(channelInput), stringValue(usernameInput), routingSelection === "preserve" ? undefined : routingSelection, opts);
351
+ }
352
+ }
353
+ function resolveNonInteractiveSetup(opts, existingSlack) {
354
+ const webhookUrl = stringValue(opts.webhookUrl) ??
355
+ (opts.refresh ? stringValue(existingSlack["webhookUrl"]) : undefined);
356
+ if (!webhookUrl) {
357
+ throw new SlackSetupError("Slack webhook URL is required. Pass --webhook-url, or run `athene setup slack --refresh` with an existing Slack config.");
358
+ }
359
+ const channel = stringValue(opts.channel) ?? stringValue(existingSlack["channel"]);
360
+ const username = stringValue(opts.username) ?? stringValue(existingSlack["username"]) ?? DEFAULT_USERNAME;
361
+ const routingPreset = resolveSlackRoutingPreset(opts.routingPreset) ?? (opts.refresh ? undefined : "all");
362
+ return buildResolvedSetup(webhookUrl, channel, username, routingPreset, opts);
363
+ }
364
+ function buildResolvedSetup(webhookUrl, channel, username, routingPreset, opts) {
365
+ const normalizedWebhookUrl = webhookUrl.trim();
366
+ validateSlackWebhookUrl(normalizedWebhookUrl);
367
+ return {
368
+ webhookUrl: normalizedWebhookUrl,
369
+ channel,
370
+ username: username ?? DEFAULT_USERNAME,
371
+ shouldSendTest: opts.test !== false,
372
+ routingPreset,
373
+ };
374
+ }
375
+ function resolveSlackRoutingPreset(value) {
376
+ try {
377
+ return resolveRoutingPresetOption(value, "Slack");
378
+ }
379
+ catch (error) {
380
+ throw new SlackSetupError(error instanceof Error ? error.message : String(error));
381
+ }
382
+ }
383
+ function writeSlackConfig(configPath, resolved) {
384
+ const rawYaml = readFileSync(configPath, "utf-8");
385
+ const doc = parseDocument(rawYaml);
386
+ const rawConfig = doc.toJS() ?? {};
387
+ const notifiers = isRecord(rawConfig["notifiers"]) ? rawConfig["notifiers"] : {};
388
+ const existingSlack = isRecord(notifiers["slack"]) ? notifiers["slack"] : {};
389
+ const slackConfig = {
390
+ ...existingSlack,
391
+ plugin: "slack",
392
+ webhookUrl: resolved.webhookUrl,
393
+ username: resolved.username,
394
+ };
395
+ if (resolved.channel)
396
+ slackConfig["channel"] = resolved.channel;
397
+ else
398
+ delete slackConfig["channel"];
399
+ notifiers["slack"] = slackConfig;
400
+ rawConfig["notifiers"] = notifiers;
401
+ const defaults = isRecord(rawConfig["defaults"]) ? rawConfig["defaults"] : {};
402
+ rawConfig["defaults"] = defaults;
403
+ applyNotifierRoutingPreset(rawConfig, "slack", resolved.routingPreset);
404
+ if (!isCanonicalGlobalConfigPath(configPath)) {
405
+ const currentSchema = doc.get("$schema");
406
+ if (!(typeof currentSchema === "string" && currentSchema.trim().length > 0)) {
407
+ doc.set("$schema", CONFIG_SCHEMA_URL);
408
+ }
409
+ }
410
+ doc.setIn(["notifiers"], rawConfig["notifiers"]);
411
+ doc.setIn(["defaults"], rawConfig["defaults"]);
412
+ if (rawConfig["notificationRouting"] !== undefined) {
413
+ doc.setIn(["notificationRouting"], rawConfig["notificationRouting"]);
414
+ }
415
+ writeFileSync(configPath, doc.toString({ indent: 2 }));
416
+ }
417
+ function webhookUrlStatus(webhookUrl) {
418
+ if (!webhookUrl)
419
+ return "not configured";
420
+ try {
421
+ return `configured (${new URL(webhookUrl).hostname})`;
422
+ }
423
+ catch {
424
+ return "configured";
425
+ }
426
+ }
427
+ async function printStatus() {
428
+ const context = readConfigContext();
429
+ const existingSlack = getExistingSlack(context.rawConfig);
430
+ const plugin = stringValue(existingSlack["plugin"]);
431
+ const webhookUrl = stringValue(existingSlack["webhookUrl"]);
432
+ const channel = stringValue(existingSlack["channel"]);
433
+ const username = stringValue(existingSlack["username"]) ?? DEFAULT_USERNAME;
434
+ console.log(chalk.bold("Slack notifier status"));
435
+ console.log(` Config: ${context.configPath}`);
436
+ console.log(` Plugin: ${plugin ?? chalk.dim("not configured")}`);
437
+ console.log(` Webhook URL: ${webhookUrlStatus(webhookUrl)}`);
438
+ console.log(` Channel: ${channel ?? chalk.dim("webhook default")}`);
439
+ console.log(` Username: ${username}`);
440
+ console.log(` Routing: ${getNotifierRoutingState(context.rawConfig, "slack").label}`);
441
+ if (plugin !== "slack" || !webhookUrl)
442
+ return;
443
+ try {
444
+ await sendSetupProbe(buildResolvedSetup(webhookUrl, channel, username, undefined, { test: true }));
445
+ console.log(chalk.green(" Probe: PASS"));
446
+ }
447
+ catch (error) {
448
+ console.log(chalk.red(` Probe: FAIL ${error instanceof Error ? error.message : String(error)}`));
449
+ }
450
+ }
451
+ export async function runSlackSetupAction(opts) {
452
+ const nonInteractive = opts.nonInteractive || !process.stdin.isTTY;
453
+ const force = Boolean(opts.force);
454
+ if (opts.status) {
455
+ await printStatus();
456
+ return;
457
+ }
458
+ const context = readConfigContext();
459
+ const existingSlack = getExistingSlack(context.rawConfig);
460
+ const shouldWire = await shouldReplaceConflictingSlack(existingSlack["plugin"], force, nonInteractive);
461
+ if (!shouldWire)
462
+ return;
463
+ const resolved = nonInteractive
464
+ ? resolveNonInteractiveSetup(opts, existingSlack)
465
+ : await resolveInteractiveSetup(opts, existingSlack, context.rawConfig);
466
+ if (resolved.shouldSendTest) {
467
+ await sendSetupProbe(resolved);
468
+ console.log(chalk.green("✓ Slack setup test passed"));
469
+ }
470
+ else {
471
+ console.log(chalk.dim("Skipped Slack setup test."));
472
+ }
473
+ writeSlackConfig(context.configPath, resolved);
474
+ console.log(chalk.green(`✓ Config written to ${context.configPath}`));
475
+ if (!nonInteractive) {
476
+ const clack = await import("@clack/prompts");
477
+ clack.outro(`${chalk.green("Slack setup complete!")} AO will send notifications through the configured Slack webhook.\n` +
478
+ chalk.dim(" Test it with: athene notify test --to slack --template basic"));
479
+ }
480
+ else {
481
+ console.log(chalk.green("\n✓ Slack setup complete."));
482
+ console.log(chalk.dim("Test it with: athene notify test --to slack --template basic"));
483
+ }
484
+ }
485
+ //# sourceMappingURL=slack-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-setup.js","sourceRoot":"","sources":["../../src/lib/slack-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Runtime preflight checks for `athene start`.
3
+ *
4
+ * Distinct from `lib/preflight.ts` (which validates dashboard build
5
+ * artifacts). This module verifies system tools (git, tmux), warns about
6
+ * legacy storage and OpenClaw status, and applies side effects like idle
7
+ * sleep prevention and credential injection.
8
+ *
9
+ * Each check is exported individually for callers that need it at a
10
+ * specific point in the flow (e.g. `ensureGit` before clone). The
11
+ * top-level `runtimePreflight(config)` orchestrates the checks that
12
+ * `runStartup` runs once at process start.
13
+ */
14
+ import { type OrchestratorConfig } from "@made-by-moonlight/athene-core";
15
+ export declare function ensureGit(context: string): Promise<void>;
16
+ /**
17
+ * Ensure tmux is available — interactive install with user consent if missing.
18
+ * Called from runtimePreflight() so all `athene start` paths are covered.
19
+ *
20
+ * On Windows, tmux cannot run; instead, offer to rewrite the project config
21
+ * to `runtime: process`. Returns `{ switchedToProcess: true }` if the rewrite
22
+ * succeeded so the caller can update the in-memory config.
23
+ */
24
+ export declare function ensureTmux(configPath?: string): Promise<{
25
+ switchedToProcess: boolean;
26
+ }>;
27
+ export declare function warnAboutLegacyStorage(): void;
28
+ export declare function warnAboutOpenClawStatus(config: OrchestratorConfig): Promise<void>;
29
+ /**
30
+ * Top-level orchestrator: tools + state warnings + idle-sleep + credentials.
31
+ * Replaces the inline preflight block in `runStartup`. Idempotent within a
32
+ * single process — the side effects (caffeinate spawn, env injection) latch
33
+ * for the lifetime of the process.
34
+ */
35
+ export declare function runtimePreflight(config: OrchestratorConfig): Promise<void>;
36
+ //# sourceMappingURL=startup-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-preflight.d.ts","sourceRoot":"","sources":["../../src/lib/startup-preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AA+DxC,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9D;AA0DD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAAC,CAsC7F;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAqB7C;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCvF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChF"}