@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,116 @@
1
+ import chalk from "chalk";
2
+ export function header(title) {
3
+ const line = "─".repeat(76);
4
+ return [
5
+ chalk.dim(`┌${line}┐`),
6
+ chalk.dim("│") + chalk.bold(` ${title}`.padEnd(76)) + chalk.dim("│"),
7
+ chalk.dim(`└${line}┘`),
8
+ ].join("\n");
9
+ }
10
+ export function banner(title) {
11
+ const line = "═".repeat(76);
12
+ return [
13
+ chalk.dim(`╔${line}╗`),
14
+ chalk.dim("║") + chalk.bold.cyan(` ${title}`.padEnd(76)) + chalk.dim("║"),
15
+ chalk.dim(`╚${line}╝`),
16
+ ].join("\n");
17
+ }
18
+ export function formatAge(epochMs) {
19
+ const diff = Math.floor((Date.now() - epochMs) / 1000);
20
+ if (diff < 60)
21
+ return `${diff}s ago`;
22
+ if (diff < 3600)
23
+ return `${Math.floor(diff / 60)}m ago`;
24
+ if (diff < 86400)
25
+ return `${Math.floor(diff / 3600)}h ago`;
26
+ return `${Math.floor(diff / 86400)}d ago`;
27
+ }
28
+ export function statusColor(status) {
29
+ switch (status) {
30
+ case "working":
31
+ return chalk.green(status);
32
+ case "idle":
33
+ return chalk.yellow(status);
34
+ case "pr_open":
35
+ case "review_pending":
36
+ return chalk.blue(status);
37
+ case "approved":
38
+ case "mergeable":
39
+ case "merged":
40
+ return chalk.green(status);
41
+ case "ci_failed":
42
+ case "errored":
43
+ case "stuck":
44
+ return chalk.red(status);
45
+ case "changes_requested":
46
+ case "needs_input":
47
+ return chalk.magenta(status);
48
+ case "spawning":
49
+ return chalk.cyan(status);
50
+ case "killed":
51
+ case "cleanup":
52
+ return chalk.gray(status);
53
+ default:
54
+ return status;
55
+ }
56
+ }
57
+ export function ciStatusIcon(status) {
58
+ switch (status) {
59
+ case "passing":
60
+ return chalk.green("pass");
61
+ case "failing":
62
+ return chalk.red("fail");
63
+ case "pending":
64
+ return chalk.yellow("pend");
65
+ case "none":
66
+ case null:
67
+ return chalk.dim("-");
68
+ }
69
+ }
70
+ export function reviewDecisionIcon(decision) {
71
+ switch (decision) {
72
+ case "approved":
73
+ return chalk.green("ok");
74
+ case "changes_requested":
75
+ return chalk.red("chg!");
76
+ case "pending":
77
+ return chalk.yellow("rev?");
78
+ case "none":
79
+ case null:
80
+ return chalk.dim("-");
81
+ }
82
+ }
83
+ export function activityIcon(activity) {
84
+ switch (activity) {
85
+ case "active":
86
+ return chalk.green("working");
87
+ case "ready":
88
+ return chalk.cyan("ready");
89
+ case "idle":
90
+ return chalk.yellow("idle");
91
+ case "waiting_input":
92
+ return chalk.magenta("waiting");
93
+ case "blocked":
94
+ return chalk.red("blocked");
95
+ case "exited":
96
+ return chalk.dim("exited");
97
+ case null:
98
+ return chalk.dim("unknown");
99
+ }
100
+ }
101
+ // eslint-disable-next-line no-control-regex
102
+ const ANSI_RE = /\u001b\[[0-9;]*m/g;
103
+ /** Pad/truncate a string to exactly `width` visible characters */
104
+ export function padCol(str, width) {
105
+ // Strip ANSI codes to measure visible length
106
+ const visible = str.replace(ANSI_RE, "");
107
+ if (visible.length > width) {
108
+ // Truncate visible content, re-apply truncation
109
+ const plain = visible.slice(0, width - 1) + "\u2026";
110
+ return plain.padEnd(width);
111
+ }
112
+ // Pad with spaces based on visible length
113
+ const padding = width - visible.length;
114
+ return str + " ".repeat(Math.max(0, padding));
115
+ }
116
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACpE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACzE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACrC,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;IACxD,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,SAAS,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,mBAAmB,CAAC;QACzB,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA+B;IAChE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAA8B;IACzD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,eAAe;YAClB,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAEpC,kEAAkE;AAClE,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC/C,6CAA6C;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC3B,gDAAgD;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QACrD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,0CAA0C;IAC1C,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IACvC,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared git helpers for CLI commands.
3
+ * Avoids duplicating detection logic across init.ts and add-project.ts.
4
+ */
5
+ /**
6
+ * Detect the default branch for a repository using three methods:
7
+ * 1. git symbolic-ref (most reliable — reads what origin/HEAD points to)
8
+ * 2. GitHub API via gh CLI (works when symbolic-ref isn't set)
9
+ * 3. Check which common branch name exists in remote refs
10
+ *
11
+ * Falls back to "main" if all methods fail.
12
+ */
13
+ export declare function detectDefaultBranch(workingDir: string, ownerRepo: string | null): Promise<string>;
14
+ //# sourceMappingURL=git-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/lib/git-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared git helpers for CLI commands.
3
+ * Avoids duplicating detection logic across init.ts and add-project.ts.
4
+ */
5
+ import { git, gh } from "./shell.js";
6
+ /**
7
+ * Detect the default branch for a repository using three methods:
8
+ * 1. git symbolic-ref (most reliable — reads what origin/HEAD points to)
9
+ * 2. GitHub API via gh CLI (works when symbolic-ref isn't set)
10
+ * 3. Check which common branch name exists in remote refs
11
+ *
12
+ * Falls back to "main" if all methods fail.
13
+ */
14
+ export async function detectDefaultBranch(workingDir, ownerRepo) {
15
+ // Method 1: symbolic-ref
16
+ const symbolicRef = await git(["symbolic-ref", "refs/remotes/origin/HEAD"], workingDir);
17
+ if (symbolicRef) {
18
+ const match = symbolicRef.match(/refs\/remotes\/origin\/(.+)$/);
19
+ if (match)
20
+ return match[1];
21
+ }
22
+ // Method 2: GitHub API
23
+ if (ownerRepo) {
24
+ const ghResult = await gh([
25
+ "repo",
26
+ "view",
27
+ ownerRepo,
28
+ "--json",
29
+ "defaultBranchRef",
30
+ "-q",
31
+ ".defaultBranchRef.name",
32
+ ]);
33
+ if (ghResult)
34
+ return ghResult;
35
+ }
36
+ // Method 3: Check common branch names
37
+ const commonBranches = ["main", "master", "next", "develop"];
38
+ for (const branch of commonBranches) {
39
+ const exists = await git(["rev-parse", "--verify", `origin/${branch}`], workingDir);
40
+ if (exists)
41
+ return branch;
42
+ }
43
+ return "main";
44
+ }
45
+ //# sourceMappingURL=git-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/lib/git-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,SAAwB;IAExB,yBAAyB;IACzB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,0BAA0B,CAAC,EAAE,UAAU,CAAC,CAAC;IACxF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;YACxB,MAAM;YACN,MAAM;YACN,SAAS;YACT,QAAQ;YACR,kBAAkB;YAClB,IAAI;YACJ,wBAAwB;SACzB,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QACpF,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared primitives for interactively installing missing CLI tools.
3
+ *
4
+ * Used by `startup-preflight.ts` (ensureGit, ensureTmux), the agent runtime
5
+ * installer, and the optional gh install path in autoCreateConfig. Lives in
6
+ * its own module so the preflight code can be moved out of `start.ts`
7
+ * without re-extracting these helpers later.
8
+ */
9
+ export interface InstallAttempt {
10
+ cmd: string;
11
+ args: string[];
12
+ label: string;
13
+ }
14
+ export declare function canPromptForInstall(): boolean;
15
+ export declare function genericInstallHints(command: string): string[];
16
+ export declare function askYesNo(question: string, defaultYes?: boolean, nonInteractiveDefault?: boolean): Promise<boolean>;
17
+ export declare function runInteractiveCommand(cmd: string, args: string[], options?: {
18
+ cwd?: string;
19
+ env?: Record<string, string>;
20
+ action?: string;
21
+ installHints?: string[];
22
+ }): Promise<void>;
23
+ export declare function tryInstallWithAttempts(attempts: InstallAttempt[], verify: () => Promise<boolean>): Promise<boolean>;
24
+ //# sourceMappingURL=install-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/install-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAY7D;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,UAAO,EACjB,qBAAqB,UAAa,GACjC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EAAE,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAclB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Shared primitives for interactively installing missing CLI tools.
3
+ *
4
+ * Used by `startup-preflight.ts` (ensureGit, ensureTmux), the agent runtime
5
+ * installer, and the optional gh install path in autoCreateConfig. Lives in
6
+ * its own module so the preflight code can be moved out of `start.ts`
7
+ * without re-extracting these helpers later.
8
+ */
9
+ import { spawn } from "node:child_process";
10
+ import chalk from "chalk";
11
+ import { formatCommandError } from "./cli-errors.js";
12
+ import { isHumanCaller } from "./caller-context.js";
13
+ import { promptConfirm } from "./prompts.js";
14
+ export function canPromptForInstall() {
15
+ return isHumanCaller() && Boolean(process.stdin.isTTY && process.stdout.isTTY);
16
+ }
17
+ export function genericInstallHints(command) {
18
+ switch (command) {
19
+ case "node":
20
+ case "npm":
21
+ return ["Install Node.js/npm from https://nodejs.org/"];
22
+ case "pnpm":
23
+ return ["corepack enable && corepack prepare pnpm@latest --activate", "npm install -g pnpm"];
24
+ case "pipx":
25
+ return ["python3 -m pip install --user pipx", "python3 -m pipx ensurepath"];
26
+ default:
27
+ return [];
28
+ }
29
+ }
30
+ export async function askYesNo(question, defaultYes = true, nonInteractiveDefault = defaultYes) {
31
+ if (!canPromptForInstall())
32
+ return nonInteractiveDefault;
33
+ return await promptConfirm(question, defaultYes);
34
+ }
35
+ export async function runInteractiveCommand(cmd, args, options) {
36
+ await new Promise((resolve, reject) => {
37
+ const child = spawn(cmd, args, {
38
+ cwd: options?.cwd,
39
+ env: options?.env ? { ...process.env, ...options.env } : process.env,
40
+ stdio: "inherit",
41
+ });
42
+ child.once("error", (err) => {
43
+ reject(formatCommandError(err, {
44
+ cmd,
45
+ args,
46
+ action: options?.action ?? "run an interactive command",
47
+ installHints: options?.installHints ?? genericInstallHints(cmd),
48
+ }));
49
+ });
50
+ child.once("close", (code) => {
51
+ if (code === 0) {
52
+ resolve();
53
+ return;
54
+ }
55
+ reject(new Error(`Command failed (${code ?? "unknown"}): ${cmd} ${args.join(" ")}`));
56
+ });
57
+ });
58
+ }
59
+ export async function tryInstallWithAttempts(attempts, verify) {
60
+ for (const attempt of attempts) {
61
+ try {
62
+ console.log(chalk.dim(` Running: ${attempt.label}`));
63
+ await runInteractiveCommand(attempt.cmd, attempt.args, {
64
+ action: "run an interactive installer",
65
+ installHints: genericInstallHints(attempt.cmd),
66
+ });
67
+ if (await verify())
68
+ return true;
69
+ }
70
+ catch {
71
+ // Try next installer
72
+ }
73
+ }
74
+ return verify();
75
+ }
76
+ //# sourceMappingURL=install-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-helpers.js","sourceRoot":"","sources":["../../src/lib/install-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type OrchestratorConfig } from "@made-by-moonlight/athene-core";
2
+ export interface LifecycleWorkerStatus {
3
+ running: boolean;
4
+ started: boolean;
5
+ }
6
+ export declare function ensureLifecycleWorker(config: OrchestratorConfig, projectId: string, intervalMs?: number): Promise<LifecycleWorkerStatus>;
7
+ export declare function stopLifecycleWorker(projectId: string): void;
8
+ export declare function stopAllLifecycleWorkers(): void;
9
+ export declare function isLifecycleWorkerRunning(projectId: string): boolean;
10
+ export declare function listLifecycleWorkers(): string[];
11
+ //# sourceMappingURL=lifecycle-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-service.d.ts","sourceRoot":"","sources":["../../src/lib/lifecycle-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAmBxC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAA4B,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAyChC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAU3D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
@@ -0,0 +1,65 @@
1
+ import { createCorrelationId, createProjectObserver, } from "@made-by-moonlight/athene-core";
2
+ import { getLifecycleManager } from "./create-session-manager.js";
3
+ const DEFAULT_INTERVAL_MS = 30_000;
4
+ const active = new Map();
5
+ export async function ensureLifecycleWorker(config, projectId, intervalMs = DEFAULT_INTERVAL_MS) {
6
+ if (!config.projects[projectId]) {
7
+ throw new Error(`Unknown project: ${projectId}`);
8
+ }
9
+ if (active.has(projectId)) {
10
+ return { running: true, started: false };
11
+ }
12
+ const observer = createProjectObserver(config, "lifecycle-service");
13
+ const lifecycle = await getLifecycleManager(config, projectId);
14
+ lifecycle.start(intervalMs);
15
+ observer.setHealth({
16
+ surface: "lifecycle.worker",
17
+ status: "ok",
18
+ projectId,
19
+ correlationId: createCorrelationId("lifecycle-service"),
20
+ details: { projectId, intervalMs, inProcess: true },
21
+ });
22
+ active.set(projectId, {
23
+ lifecycle,
24
+ stop: () => {
25
+ try {
26
+ lifecycle.stop();
27
+ }
28
+ finally {
29
+ observer.setHealth({
30
+ surface: "lifecycle.worker",
31
+ status: "warn",
32
+ projectId,
33
+ correlationId: createCorrelationId("lifecycle-service"),
34
+ reason: "Lifecycle polling stopped",
35
+ details: { projectId },
36
+ });
37
+ }
38
+ },
39
+ });
40
+ return { running: true, started: true };
41
+ }
42
+ export function stopLifecycleWorker(projectId) {
43
+ const entry = active.get(projectId);
44
+ if (!entry)
45
+ return;
46
+ try {
47
+ entry.stop();
48
+ }
49
+ catch {
50
+ // Best-effort
51
+ }
52
+ active.delete(projectId);
53
+ }
54
+ export function stopAllLifecycleWorkers() {
55
+ for (const projectId of Array.from(active.keys())) {
56
+ stopLifecycleWorker(projectId);
57
+ }
58
+ }
59
+ export function isLifecycleWorkerRunning(projectId) {
60
+ return active.has(projectId);
61
+ }
62
+ export function listLifecycleWorkers() {
63
+ return Array.from(active.keys());
64
+ }
65
+ //# sourceMappingURL=lifecycle-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-service.js","sourceRoot":"","sources":["../../src/lib/lifecycle-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAOnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;AAc7C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA0B,EAC1B,SAAiB,EACjB,aAAqB,mBAAmB;IAExC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE/D,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5B,QAAQ,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,IAAI;QACZ,SAAS;QACT,aAAa,EAAE,mBAAmB,CAAC,mBAAmB,CAAC;QACvD,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE;KACpD,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;QACpB,SAAS;QACT,IAAI,EAAE,GAAG,EAAE;YACT,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,QAAQ,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,kBAAkB;oBAC3B,MAAM,EAAE,MAAM;oBACd,SAAS;oBACT,aAAa,EAAE,mBAAmB,CAAC,mBAAmB,CAAC;oBACvD,MAAM,EAAE,2BAA2B;oBACnC,OAAO,EAAE,EAAE,SAAS,EAAE;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClD,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { cancel, confirm, intro, isCancel, log, outro, password, select, spinner, text } from "@clack/prompts";
2
+ export declare const NOTIFICATION_PRIORITIES: readonly ["urgent", "action", "warning", "info"];
3
+ export type NotificationPriority = (typeof NOTIFICATION_PRIORITIES)[number];
4
+ export type NotifierRoutingPreset = "urgent-only" | "urgent-action" | "all";
5
+ export type NotifierRoutingSelection = NotifierRoutingPreset | "preserve" | "back";
6
+ export interface ClackPrompts {
7
+ cancel: typeof cancel;
8
+ confirm: typeof confirm;
9
+ intro: typeof intro;
10
+ isCancel: typeof isCancel;
11
+ log: typeof log;
12
+ outro: typeof outro;
13
+ password: typeof password;
14
+ select: typeof select;
15
+ spinner: typeof spinner;
16
+ text: typeof text;
17
+ }
18
+ export interface NotifierRoutingState {
19
+ preset?: NotifierRoutingPreset;
20
+ priorities: NotificationPriority[];
21
+ hasRouting: boolean;
22
+ isCustom: boolean;
23
+ label: string;
24
+ }
25
+ export declare function asStringArray(value: unknown): string[];
26
+ export declare function isNotifierRoutingPreset(value: string | undefined): value is NotifierRoutingPreset;
27
+ export declare function parseNotifierRoutingPreset(value: string | undefined): NotifierRoutingPreset | undefined;
28
+ export declare function notifierRoutingPresetValues(): string;
29
+ export declare function routingLabel(preset: NotifierRoutingPreset): string;
30
+ export declare function getNotifierRoutingState(rawConfig: Record<string, unknown>, notifierName: string): NotifierRoutingState;
31
+ export declare function ensureNotifierDefault(rawConfig: Record<string, unknown>, notifierName: string): void;
32
+ export declare function applyNotifierRoutingPreset(rawConfig: Record<string, unknown>, notifierName: string, preset: NotifierRoutingPreset | undefined): void;
33
+ export declare function resolveRoutingPresetOption(value: string | undefined, label: string): NotifierRoutingPreset | undefined;
34
+ export declare function promptNotifierRoutingPreset(clack: ClackPrompts, rawConfig: Record<string, unknown>, notifierName: string, notifierLabel: string, cancel: () => never): Promise<NotifierRoutingSelection>;
35
+ //# sourceMappingURL=notifier-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifier-routing.d.ts","sourceRoot":"","sources":["../../src/lib/notifier-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,GAAG,EACH,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,EACL,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,uBAAuB,kDAAmD,CAAC;AAExF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,eAAe,GAAG,KAAK,CAAC;AAC5E,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,IAAI,CAAC;CACnB;AAQD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAMtD;AAUD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,qBAAqB,CAEjG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,GAAG,SAAS,CAEvG;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAIlE;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAgCtB;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAOpG;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,qBAAqB,GAAG,SAAS,GACxC,IAAI,CAsBN;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,SAAS,CAKnC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,KAAK,GAClB,OAAO,CAAC,wBAAwB,CAAC,CA8BnC"}
@@ -0,0 +1,133 @@
1
+ export const NOTIFICATION_PRIORITIES = ["urgent", "action", "warning", "info"];
2
+ const ROUTING_PRESET_PRIORITIES = {
3
+ "urgent-only": ["urgent"],
4
+ "urgent-action": ["urgent", "action"],
5
+ all: ["urgent", "action", "warning", "info"],
6
+ };
7
+ function isRecord(value) {
8
+ return value !== null && typeof value === "object" && !Array.isArray(value);
9
+ }
10
+ export function asStringArray(value) {
11
+ if (Array.isArray(value)) {
12
+ return value.filter((entry) => typeof entry === "string");
13
+ }
14
+ if (typeof value === "string")
15
+ return [value];
16
+ return [];
17
+ }
18
+ function unique(values) {
19
+ return [...new Set(values)];
20
+ }
21
+ function hasOwn(value, key) {
22
+ return Object.prototype.hasOwnProperty.call(value, key);
23
+ }
24
+ export function isNotifierRoutingPreset(value) {
25
+ return value === "urgent-only" || value === "urgent-action" || value === "all";
26
+ }
27
+ export function parseNotifierRoutingPreset(value) {
28
+ return isNotifierRoutingPreset(value) ? value : undefined;
29
+ }
30
+ export function notifierRoutingPresetValues() {
31
+ return "urgent-only | urgent-action | all";
32
+ }
33
+ export function routingLabel(preset) {
34
+ if (preset === "all")
35
+ return "All priorities";
36
+ if (preset === "urgent-only")
37
+ return "Urgent only";
38
+ return "Urgent + action";
39
+ }
40
+ export function getNotifierRoutingState(rawConfig, notifierName) {
41
+ const routing = isRecord(rawConfig["notificationRouting"])
42
+ ? rawConfig["notificationRouting"]
43
+ : {};
44
+ const priorities = NOTIFICATION_PRIORITIES.filter((priority) => asStringArray(routing[priority]).includes(notifierName));
45
+ const hasRouting = priorities.length > 0;
46
+ for (const [preset, presetPriorities] of Object.entries(ROUTING_PRESET_PRIORITIES)) {
47
+ if (priorities.length === presetPriorities.length &&
48
+ presetPriorities.every((priority) => priorities.includes(priority))) {
49
+ return {
50
+ preset,
51
+ priorities,
52
+ hasRouting,
53
+ isCustom: false,
54
+ label: routingLabel(preset),
55
+ };
56
+ }
57
+ }
58
+ return {
59
+ priorities,
60
+ hasRouting,
61
+ isCustom: hasRouting,
62
+ label: hasRouting ? priorities.join(" + ") : "not routed",
63
+ };
64
+ }
65
+ export function ensureNotifierDefault(rawConfig, notifierName) {
66
+ const defaults = isRecord(rawConfig["defaults"]) ? rawConfig["defaults"] : {};
67
+ defaults["notifiers"] = unique([
68
+ ...asStringArray(defaults["notifiers"]).filter((value) => value !== notifierName),
69
+ notifierName,
70
+ ]);
71
+ rawConfig["defaults"] = defaults;
72
+ }
73
+ export function applyNotifierRoutingPreset(rawConfig, notifierName, preset) {
74
+ if (!preset)
75
+ return;
76
+ const defaults = isRecord(rawConfig["defaults"]) ? rawConfig["defaults"] : {};
77
+ const defaultNotifiers = asStringArray(defaults["notifiers"]);
78
+ rawConfig["defaults"] = defaults;
79
+ const notificationRouting = isRecord(rawConfig["notificationRouting"])
80
+ ? rawConfig["notificationRouting"]
81
+ : {};
82
+ const selectedPriorities = new Set(ROUTING_PRESET_PRIORITIES[preset]);
83
+ for (const priority of NOTIFICATION_PRIORITIES) {
84
+ const base = hasOwn(notificationRouting, priority)
85
+ ? asStringArray(notificationRouting[priority])
86
+ : defaultNotifiers;
87
+ const next = base.filter((name) => name !== notifierName);
88
+ if (selectedPriorities.has(priority))
89
+ next.push(notifierName);
90
+ notificationRouting[priority] = unique(next);
91
+ }
92
+ rawConfig["notificationRouting"] = notificationRouting;
93
+ }
94
+ export function resolveRoutingPresetOption(value, label) {
95
+ if (value === undefined)
96
+ return undefined;
97
+ const parsed = parseNotifierRoutingPreset(value);
98
+ if (parsed)
99
+ return parsed;
100
+ throw new Error(`Invalid ${label} routing preset "${value}". Expected ${notifierRoutingPresetValues()}.`);
101
+ }
102
+ export async function promptNotifierRoutingPreset(clack, rawConfig, notifierName, notifierLabel, cancel) {
103
+ const current = getNotifierRoutingState(rawConfig, notifierName);
104
+ const choice = await clack.select({
105
+ message: `Which notifications should ${notifierLabel} receive?`,
106
+ initialValue: current.preset ?? "urgent-action",
107
+ options: [
108
+ ...(current.hasRouting
109
+ ? [
110
+ {
111
+ value: "preserve",
112
+ label: `Keep current routing (${current.label})`,
113
+ hint: "Leave notificationRouting unchanged",
114
+ },
115
+ ]
116
+ : []),
117
+ { value: "urgent-action", label: "Urgent + action", hint: "Recommended" },
118
+ { value: "urgent-only", label: "Urgent only" },
119
+ { value: "all", label: "All priorities" },
120
+ { value: "back", label: "Back", hint: "Return to the previous step" },
121
+ { value: "cancel", label: "Cancel setup", hint: "Do not change config" },
122
+ ],
123
+ });
124
+ if (clack.isCancel(choice) || choice === "cancel") {
125
+ cancel();
126
+ }
127
+ if (choice === "preserve" || choice === "back")
128
+ return choice;
129
+ if (typeof choice === "string" && isNotifierRoutingPreset(choice))
130
+ return choice;
131
+ return "urgent-action";
132
+ }
133
+ //# sourceMappingURL=notifier-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifier-routing.js","sourceRoot":"","sources":["../../src/lib/notifier-routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { type EventPriority, type NotifyAction, type OrchestratorConfig, type OrchestratorEvent, type PluginRegistry } from "@made-by-moonlight/athene-core";
2
+ export declare const NOTIFY_TEST_TEMPLATE_NAMES: readonly ["basic", "agent-stuck", "agent-needs-input", "agent-exited", "ci-failing", "review-changes-requested", "approved-and-green", "merge-ready", "all-complete", "pr-closed"];
3
+ export type NotifyTestTemplateName = (typeof NOTIFY_TEST_TEMPLATE_NAMES)[number];
4
+ export declare const NOTIFY_TEST_ACTIONS: NotifyAction[];
5
+ export interface NotifyTestRequest {
6
+ templateName?: string;
7
+ to?: string[];
8
+ all?: boolean;
9
+ route?: string;
10
+ actions?: boolean;
11
+ message?: string;
12
+ sessionId?: string;
13
+ projectId?: string;
14
+ priority?: string;
15
+ type?: string;
16
+ data?: Record<string, unknown>;
17
+ dryRun?: boolean;
18
+ }
19
+ export interface NotifyTestTarget {
20
+ reference: string;
21
+ pluginName: string;
22
+ }
23
+ export type NotifyDeliveryStatus = "sent" | "dry_run" | "failed" | "unresolved";
24
+ export interface NotifyDeliveryResult {
25
+ reference: string;
26
+ pluginName: string;
27
+ status: NotifyDeliveryStatus;
28
+ method: "notify" | "notifyWithActions" | null;
29
+ warning?: string;
30
+ error?: string;
31
+ }
32
+ export interface NotifyTestResult {
33
+ ok: boolean;
34
+ dryRun: boolean;
35
+ templateName: NotifyTestTemplateName;
36
+ event: OrchestratorEvent;
37
+ actions: NotifyAction[];
38
+ targets: NotifyTestTarget[];
39
+ deliveries: NotifyDeliveryResult[];
40
+ warnings: string[];
41
+ errors: string[];
42
+ }
43
+ export interface NotifySinkRequest {
44
+ method: string;
45
+ url: string;
46
+ headers: Record<string, string | string[] | undefined>;
47
+ body: string;
48
+ json: unknown;
49
+ }
50
+ export interface NotifySinkServer {
51
+ port: number;
52
+ url: string;
53
+ requests: NotifySinkRequest[];
54
+ waitForRequest(timeoutMs?: number): Promise<NotifySinkRequest | null>;
55
+ close(): Promise<void>;
56
+ }
57
+ export declare class NotifyTestError extends Error {
58
+ readonly code: string;
59
+ constructor(code: string, message: string);
60
+ }
61
+ export declare function createNotifyTestEvent(request?: NotifyTestRequest): {
62
+ templateName: NotifyTestTemplateName;
63
+ event: OrchestratorEvent;
64
+ };
65
+ export declare function resolveNotifyTestTargets(config: OrchestratorConfig, eventPriority: EventPriority, request?: NotifyTestRequest): NotifyTestTarget[];
66
+ export declare function runNotifyTest(config: OrchestratorConfig, registry: PluginRegistry, request?: NotifyTestRequest): Promise<NotifyTestResult>;
67
+ export declare function parseNotifyDataJson(input: string | undefined): Record<string, unknown> | undefined;
68
+ export declare function parseNotifyRefs(input: string | undefined): string[] | undefined;
69
+ export declare function parseSinkPort(input: true | string | undefined): number | undefined;
70
+ export declare function addSinkNotifierConfig(config: OrchestratorConfig, sinkUrl: string): OrchestratorConfig;
71
+ export declare function startNotifySink(port?: number): Promise<NotifySinkServer>;
72
+ //# sourceMappingURL=notify-test.d.ts.map