@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,436 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { resolve } from "node:path";
4
+ import { loadConfig, recordActivityEvent, resolveSpawnTarget, TERMINAL_STATUSES, } from "@made-by-moonlight/athene-core";
5
+ import { DEFAULT_PORT } from "../lib/constants.js";
6
+ import { exec } from "../lib/shell.js";
7
+ import { banner } from "../lib/format.js";
8
+ import { getPluginRegistry, getSessionManager } from "../lib/create-session-manager.js";
9
+ import { findProjectForDirectory } from "../lib/project-resolution.js";
10
+ import { getRunning } from "../lib/running-state.js";
11
+ import { projectSessionUrl } from "../lib/routes.js";
12
+ /**
13
+ * Auto-detect the project ID from the config.
14
+ * - If only one project exists, use it.
15
+ * - If multiple projects exist, match cwd against project paths.
16
+ * - Falls back to AO_PROJECT_ID env var (set when called from an agent session).
17
+ */
18
+ function autoDetectProject(config) {
19
+ const projectIds = Object.keys(config.projects);
20
+ if (projectIds.length === 0) {
21
+ throw new Error("No projects configured. Run 'athene start' first.");
22
+ }
23
+ if (projectIds.length === 1) {
24
+ return projectIds[0];
25
+ }
26
+ // Try AO_PROJECT_ID env var (set by AO when spawning agent sessions)
27
+ const envProject = process.env.AO_PROJECT_ID;
28
+ if (envProject && config.projects[envProject]) {
29
+ return envProject;
30
+ }
31
+ // Try matching cwd to a project path
32
+ const cwd = resolve(process.cwd());
33
+ const matchedProjectId = findProjectForDirectory(config.projects, cwd);
34
+ if (matchedProjectId) {
35
+ return matchedProjectId;
36
+ }
37
+ throw new Error(`Multiple projects configured. Specify one: ${projectIds.join(", ")}\n` +
38
+ `Or run from within a project directory.`);
39
+ }
40
+ /**
41
+ * Non-throwing variant — returns null when the project can't be resolved
42
+ * unambiguously. Used to feed `resolveSpawnTarget`'s fallback parameter so
43
+ * the prefix/no-prefix and issue/no-issue paths share one code path.
44
+ */
45
+ function tryAutoDetectProject(config) {
46
+ try {
47
+ return autoDetectProject(config);
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Resolve the project + issue from a single optional CLI argument.
55
+ *
56
+ * Single source of truth for the four cases:
57
+ * - `athene spawn` → auto-detect project, no issue
58
+ * - `athene spawn 42` → auto-detect project, issue=42
59
+ * - `athene spawn xid/42` → prefix match, issue=42
60
+ * - `athene spawn x402-identity/42` → exact projectId match, issue=42
61
+ *
62
+ * Throws (via autoDetectProject) when the project can't be resolved — the
63
+ * caller wraps in one try/catch instead of duplicating it across branches.
64
+ */
65
+ function resolveProjectAndIssue(config, issue) {
66
+ const fallback = tryAutoDetectProject(config);
67
+ if (issue) {
68
+ const target = resolveSpawnTarget(config.projects, issue, fallback ?? undefined);
69
+ if (target)
70
+ return { projectId: target.projectId, issueId: target.issueId };
71
+ autoDetectProject(config); // throws with the real error message
72
+ throw new Error("unreachable");
73
+ }
74
+ if (!fallback) {
75
+ autoDetectProject(config); // throws
76
+ throw new Error("unreachable");
77
+ }
78
+ return { projectId: fallback };
79
+ }
80
+ /**
81
+ * Lifecycle polling runs in-process inside the long-lived `athene start` process.
82
+ * `athene spawn` is a one-shot CLI — it can't start polling in its own process
83
+ * (the interval would keep the CLI alive forever and duplicate work).
84
+ *
85
+ * Refuse to spawn if no `athene start` is running, or if the running instance is
86
+ * not polling this project. Without an active daemon, sessions get worktrees
87
+ * and tmux panes but no lifecycle reactions (CI-failure routing, review
88
+ * comments, revive transitions, event log). That silent blackout is a
89
+ * worse failure mode than creating no session at all — so fail fast with
90
+ * an actionable error.
91
+ */
92
+ async function ensureAOPollingProject(projectId) {
93
+ const running = await getRunning();
94
+ if (!running) {
95
+ throw new Error(`AO is not running — lifecycle polling is inactive. Run \`athene start\` before spawning sessions so they get CI/review routing and state advancement.`);
96
+ }
97
+ if (!running.projects.includes(projectId)) {
98
+ throw new Error(`The running AO instance (pid ${running.pid}) is not polling project "${projectId}". Run \`athene start ${projectId}\` before spawning so sessions get tracked.`);
99
+ }
100
+ }
101
+ /**
102
+ * Run pre-flight checks for a project once, before any sessions are spawned.
103
+ *
104
+ * Iterates the plugins selected for this spawn and calls each one's optional
105
+ * `preflight()`. Plugins own their own prerequisites (binary present, auth
106
+ * configured, etc.) so this CLI helper does not need to know which plugin
107
+ * needs which tool. Adding a new runtime/tracker/scm plugin only requires
108
+ * the plugin to declare its own preflight — no edits here.
109
+ *
110
+ * Collects every plugin's failure rather than aborting at the first one, so a
111
+ * user with multiple broken prerequisites (e.g. tmux missing AND gh logged
112
+ * out) sees both errors in a single run instead of fixing one and re-invoking.
113
+ */
114
+ async function runSpawnPreflight(config, projectId, options) {
115
+ const project = config.projects[projectId];
116
+ if (!project)
117
+ return;
118
+ const ctx = {
119
+ project,
120
+ intent: {
121
+ role: "worker",
122
+ willClaimExistingPR: !!options?.claimPr,
123
+ },
124
+ };
125
+ const registry = await getPluginRegistry(config);
126
+ // DefaultPluginsSchema (config.ts) defaults runtime/agent/workspace via
127
+ // .default(), so these are guaranteed strings — no literal fallback needed.
128
+ const runtimeName = project.runtime ?? config.defaults.runtime;
129
+ const agentName = project.agent ?? config.defaults.agent;
130
+ const workspaceName = project.workspace ?? config.defaults.workspace;
131
+ const trackerName = project.tracker?.plugin;
132
+ const scmName = project.scm?.plugin;
133
+ // Only iterate plugins that the spawn will actually exercise. SCM is
134
+ // skipped unless the user passed --claim-pr; otherwise an unconfigured
135
+ // gh auth would block spawns that don't touch PRs.
136
+ const candidates = [
137
+ registry.get("runtime", runtimeName),
138
+ registry.get("agent", agentName),
139
+ registry.get("workspace", workspaceName),
140
+ trackerName ? registry.get("tracker", trackerName) : null,
141
+ options?.claimPr && scmName ? registry.get("scm", scmName) : null,
142
+ ];
143
+ const errors = [];
144
+ for (const plugin of candidates) {
145
+ const preflight = plugin
146
+ ?.preflight;
147
+ if (!preflight)
148
+ continue;
149
+ try {
150
+ await preflight.call(plugin, ctx);
151
+ }
152
+ catch (err) {
153
+ errors.push(err instanceof Error ? err : new Error(String(err)));
154
+ }
155
+ }
156
+ if (errors.length === 1)
157
+ throw errors[0];
158
+ if (errors.length > 1) {
159
+ throw new Error(`${errors.length} preflight checks failed:\n` +
160
+ errors.map((e, i) => ` ${i + 1}. ${e.message}`).join("\n"));
161
+ }
162
+ }
163
+ async function spawnSession(config, projectId, issueId, openTab, agent, claimOptions, prompt) {
164
+ const spinner = ora("Creating session").start();
165
+ try {
166
+ const sm = await getSessionManager(config);
167
+ spinner.text = "Spawning session via core";
168
+ // Validate and sanitize prompt (strip newlines to prevent metadata injection)
169
+ const sanitizedPrompt = prompt?.replace(/[\r\n]/g, " ").trim() || undefined;
170
+ if (sanitizedPrompt && sanitizedPrompt.length > 4096) {
171
+ throw new Error("Prompt must be at most 4096 characters");
172
+ }
173
+ recordActivityEvent({
174
+ projectId,
175
+ source: "cli",
176
+ kind: "cli.spawn_invoked",
177
+ level: "info",
178
+ summary: `athene spawn invoked${issueId ? ` for issue ${issueId}` : ""}`,
179
+ data: {
180
+ issueId: issueId ?? null,
181
+ agent: agent ?? null,
182
+ hasPrompt: !!sanitizedPrompt,
183
+ claimPr: claimOptions?.claimPr ?? null,
184
+ },
185
+ });
186
+ const session = await sm.spawn({
187
+ projectId,
188
+ issueId,
189
+ agent,
190
+ prompt: sanitizedPrompt,
191
+ });
192
+ let claimedPrUrl = null;
193
+ if (claimOptions?.claimPr) {
194
+ spinner.text = `Claiming PR ${claimOptions.claimPr}`;
195
+ try {
196
+ const claimResult = await sm.claimPR(session.id, claimOptions.claimPr, {
197
+ assignOnGithub: claimOptions.assignOnGithub,
198
+ });
199
+ claimedPrUrl = claimResult.pr.url;
200
+ }
201
+ catch (err) {
202
+ throw new Error(`Session ${session.id} was created, but failed to claim PR ${claimOptions.claimPr}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
203
+ }
204
+ }
205
+ const issueLabel = issueId ? ` for issue #${issueId}` : "";
206
+ const claimLabel = claimedPrUrl ? ` (claimed ${claimedPrUrl})` : "";
207
+ const port = config.port ?? DEFAULT_PORT;
208
+ spinner.succeed(`Session ${chalk.green(session.id)} spawned${issueLabel}${claimLabel}`);
209
+ console.log(` View: ${chalk.dim(projectSessionUrl(port, projectId, session.id))}`);
210
+ // Open terminal tab if requested
211
+ if (openTab) {
212
+ try {
213
+ const tmuxTarget = session.runtimeHandle?.id ?? session.id;
214
+ await exec("open-iterm-tab", [tmuxTarget]);
215
+ }
216
+ catch {
217
+ // Terminal plugin not available
218
+ }
219
+ }
220
+ // Output for scripting
221
+ console.log(`SESSION=${session.id}`);
222
+ }
223
+ catch (err) {
224
+ spinner.fail("Failed to create or initialize session");
225
+ recordActivityEvent({
226
+ projectId,
227
+ source: "cli",
228
+ kind: "cli.spawn_failed",
229
+ level: "error",
230
+ summary: `athene spawn failed${issueId ? ` for issue ${issueId}` : ""}`,
231
+ data: {
232
+ issueId: issueId ?? null,
233
+ agent: agent ?? null,
234
+ errorMessage: err instanceof Error ? err.message : String(err),
235
+ },
236
+ });
237
+ throw err;
238
+ }
239
+ }
240
+ export function registerSpawn(program) {
241
+ program
242
+ .command("spawn")
243
+ .description("Spawn a single agent session")
244
+ .argument("[issue]", "Issue identifier. Accepts bare ids (42, INT-100) or prefixed forms (x402-identity/42, xid/42) to target a specific project by id or sessionPrefix.")
245
+ .allowExcessArguments()
246
+ .option("--open", "Open session in terminal tab")
247
+ .option("--agent <name>", "Override the agent plugin (e.g. codex, claude-code)")
248
+ .option("--claim-pr <pr>", "Immediately claim an existing PR for the spawned session")
249
+ .option("--assign-on-github", "Assign the claimed PR to the authenticated GitHub user")
250
+ .option("--prompt <text>", "Initial prompt/instructions for the agent (use instead of an issue)")
251
+ .action(async (issue, opts, command) => {
252
+ if (command.args.length > 1) {
253
+ console.error(chalk.red(`✗ \`athene spawn\` accepts at most 1 argument, but ${command.args.length} were provided.\n\n` +
254
+ `Use:\n` +
255
+ ` athene spawn [issue]`));
256
+ process.exit(1);
257
+ }
258
+ const config = loadConfig();
259
+ let projectId;
260
+ let issueId;
261
+ try {
262
+ ({ projectId, issueId } = resolveProjectAndIssue(config, issue));
263
+ }
264
+ catch (err) {
265
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
266
+ process.exit(1);
267
+ }
268
+ if (!opts.claimPr && opts.assignOnGithub) {
269
+ console.error(chalk.red("--assign-on-github requires --claim-pr on `athene spawn`."));
270
+ process.exit(1);
271
+ }
272
+ const claimOptions = {
273
+ claimPr: opts.claimPr,
274
+ assignOnGithub: opts.assignOnGithub,
275
+ };
276
+ try {
277
+ await runSpawnPreflight(config, projectId, claimOptions);
278
+ await ensureAOPollingProject(projectId);
279
+ }
280
+ catch (err) {
281
+ recordActivityEvent({
282
+ projectId,
283
+ source: "cli",
284
+ kind: "cli.spawn_failed",
285
+ level: "error",
286
+ summary: `athene spawn preflight failed${issueId ? ` for issue ${issueId}` : ""}`,
287
+ data: {
288
+ issueId: issueId ?? null,
289
+ agent: opts.agent ?? null,
290
+ claimPr: claimOptions.claimPr ?? null,
291
+ errorMessage: err instanceof Error ? err.message : String(err),
292
+ },
293
+ });
294
+ console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
295
+ process.exit(1);
296
+ }
297
+ try {
298
+ await spawnSession(config, projectId, issueId, opts.open, opts.agent, claimOptions, opts.prompt);
299
+ }
300
+ catch (err) {
301
+ console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
302
+ process.exit(1);
303
+ }
304
+ });
305
+ }
306
+ export function registerBatchSpawn(program) {
307
+ program
308
+ .command("batch-spawn")
309
+ .description("Spawn sessions for multiple issues with duplicate detection")
310
+ .argument("<issues...>", "Issue identifiers. Accepts bare ids or prefixed forms (x402-identity/42, xid/42); mixed projects are grouped automatically.")
311
+ .option("--open", "Open sessions in terminal tabs")
312
+ .action(async (issues, opts) => {
313
+ const config = loadConfig();
314
+ // Resolve each issue to its target project. Issues without a prefix fall
315
+ // back to auto-detection; prefixed issues route to the matched project.
316
+ let fallbackProjectId = null;
317
+ const needsFallback = issues.some((issue) => resolveSpawnTarget(config.projects, issue) === null);
318
+ if (needsFallback) {
319
+ try {
320
+ fallbackProjectId = autoDetectProject(config);
321
+ }
322
+ catch (err) {
323
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
324
+ process.exit(1);
325
+ }
326
+ }
327
+ // Group issues by resolved project so each group preflights once.
328
+ const groups = new Map();
329
+ for (const issue of issues) {
330
+ const target = resolveSpawnTarget(config.projects, issue, fallbackProjectId ?? undefined);
331
+ if (!target) {
332
+ console.error(chalk.red(`Could not resolve project for issue: ${issue}`));
333
+ process.exit(1);
334
+ }
335
+ if (!config.projects[target.projectId]) {
336
+ console.error(chalk.red(`Unknown project: ${target.projectId}\nAvailable: ${Object.keys(config.projects).join(", ")}`));
337
+ process.exit(1);
338
+ }
339
+ if (!groups.has(target.projectId))
340
+ groups.set(target.projectId, []);
341
+ groups.get(target.projectId).push({ original: issue, resolved: target.issueId });
342
+ }
343
+ console.log(banner("BATCH SESSION SPAWNER"));
344
+ console.log();
345
+ for (const [pid, items] of groups) {
346
+ console.log(` ${chalk.bold(pid)}: ${items.map((i) => i.original).join(", ")}`);
347
+ }
348
+ console.log();
349
+ const created = [];
350
+ const skipped = [];
351
+ const failed = [];
352
+ const sm = await getSessionManager(config);
353
+ for (const [groupProjectId, items] of groups) {
354
+ // Pre-flight once per project group so a missing prerequisite fails fast.
355
+ try {
356
+ await runSpawnPreflight(config, groupProjectId);
357
+ await ensureAOPollingProject(groupProjectId);
358
+ }
359
+ catch (err) {
360
+ recordActivityEvent({
361
+ projectId: groupProjectId,
362
+ source: "cli",
363
+ kind: "cli.spawn_failed",
364
+ level: "error",
365
+ summary: `batch-spawn preflight failed for group`,
366
+ data: {
367
+ batchSize: items.length,
368
+ errorMessage: err instanceof Error ? err.message : String(err),
369
+ },
370
+ });
371
+ console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
372
+ process.exit(1);
373
+ }
374
+ // Load existing sessions once per group (exclude terminal sessions so
375
+ // merged/completed sessions don't block respawning a reopened issue).
376
+ const existingSessions = await sm.list(groupProjectId);
377
+ const existingIssueMap = new Map(existingSessions
378
+ .filter((s) => s.issueId && !TERMINAL_STATUSES.has(s.status))
379
+ .map((s) => [s.issueId.toLowerCase(), s.id]));
380
+ const spawnedIssues = new Set();
381
+ for (const { original, resolved } of items) {
382
+ if (spawnedIssues.has(resolved.toLowerCase())) {
383
+ console.log(chalk.yellow(` Skip ${original} — duplicate in this batch`));
384
+ skipped.push({ issue: original, existing: "(this batch)" });
385
+ continue;
386
+ }
387
+ const existingSessionId = existingIssueMap.get(resolved.toLowerCase());
388
+ if (existingSessionId) {
389
+ console.log(chalk.yellow(` Skip ${original} — already has session ${existingSessionId}`));
390
+ skipped.push({ issue: original, existing: existingSessionId });
391
+ continue;
392
+ }
393
+ try {
394
+ const session = await sm.spawn({ projectId: groupProjectId, issueId: resolved });
395
+ created.push({ session: session.id, issue: original });
396
+ spawnedIssues.add(resolved.toLowerCase());
397
+ console.log(chalk.green(` Created ${session.id} for ${original}`));
398
+ if (opts.open) {
399
+ try {
400
+ const tmuxTarget = session.runtimeHandle?.id ?? session.id;
401
+ await exec("open-iterm-tab", [tmuxTarget]);
402
+ }
403
+ catch {
404
+ // best effort
405
+ }
406
+ }
407
+ }
408
+ catch (err) {
409
+ failed.push({
410
+ issue: original,
411
+ error: err instanceof Error ? err.message : String(err),
412
+ });
413
+ console.log(chalk.red(` Failed ${original} — ${err instanceof Error ? err.message : String(err)}`));
414
+ }
415
+ }
416
+ }
417
+ console.log();
418
+ if (created.length > 0) {
419
+ console.log(chalk.green(`Created ${created.length} sessions:`));
420
+ for (const item of created)
421
+ console.log(` ${item.session} ← ${item.issue}`);
422
+ }
423
+ if (skipped.length > 0) {
424
+ console.log(chalk.yellow(`Skipped ${skipped.length} issues:`));
425
+ for (const item of skipped)
426
+ console.log(` ${item.issue} (existing: ${item.existing})`);
427
+ }
428
+ if (failed.length > 0) {
429
+ console.log(chalk.red(`Failed ${failed.length} issues:`));
430
+ for (const item of failed)
431
+ console.log(` ${item.issue}: ${item.error}`);
432
+ }
433
+ console.log();
434
+ });
435
+ }
436
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/commands/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAA0B;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,qEAAqE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC7C,IAAI,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qCAAqC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8CAA8C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACrE,yCAAyC,CAC5C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,MAA0B;IACtD,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,sBAAsB,CAC7B,MAA0B,EAC1B,KAAyB;IAEzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;QACjF,IAAI,MAAM;YAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5E,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,qCAAqC;QAChE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACpC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAOD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,uJAAuJ,CACxJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,gCAAgC,OAAO,CAAC,GAAG,6BAA6B,SAAS,yBAAyB,SAAS,6CAA6C,CACjK,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAA0B,EAC1B,SAAiB,EACjB,OAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,GAAG,GAAqB;QAC5B,OAAO;QACP,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO;SACxC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IAEpC,qEAAqE;IACrE,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,UAAU,GAAmB;QACjC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC;QACxC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;QACzD,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;KAClE,CAAC;IAEF,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,SAAS,GAAI,MAA0E;YAC3F,EAAE,SAAS,CAAC;QACd,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,CAAC,MAAM,6BAA6B;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAA0B,EAC1B,SAAiB,EACjB,OAAgB,EAChB,OAAiB,EACjB,KAAc,EACd,YAAgC,EAChC,MAAe;IAEf,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC;QAE3C,8EAA8E;QAC9E,MAAM,eAAe,GAAG,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QAC5E,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,mBAAmB,CAAC;YAClB,SAAS;YACT,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,uBAAuB,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACxE,IAAI,EAAE;gBACJ,OAAO,EAAE,OAAO,IAAI,IAAI;gBACxB,KAAK,EAAE,KAAK,IAAI,IAAI;gBACpB,SAAS,EAAE,CAAC,CAAC,eAAe;gBAC5B,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,IAAI;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;YAC7B,SAAS;YACT,OAAO;YACP,KAAK;YACL,MAAM,EAAE,eAAe;SACxB,CAAC,CAAC;QAEH,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,GAAG,eAAe,YAAY,CAAC,OAAO,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE;oBACrE,cAAc,EAAE,YAAY,CAAC,cAAc;iBAC5C,CAAC,CAAC;gBACH,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC;YACpC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,WAAW,OAAO,CAAC,EAAE,wCAAwC,YAAY,CAAC,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACxI,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAExF,iCAAiC;QACjC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACvD,mBAAmB,CAAC;YAClB,SAAS;YACT,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,sBAAsB,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACvE,IAAI,EAAE;gBACJ,OAAO,EAAE,OAAO,IAAI,IAAI;gBACxB,KAAK,EAAE,KAAK,IAAI,IAAI;gBACpB,YAAY,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC/D;SACF,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CACP,SAAS,EACT,oJAAoJ,CACrJ;SACA,oBAAoB,EAAE;SACtB,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;SACrF,MAAM,CAAC,oBAAoB,EAAE,wDAAwD,CAAC;SACtF,MAAM,CACL,iBAAiB,EACjB,qEAAqE,CACtE;SACA,MAAM,CACL,KAAK,EACH,KAAyB,EACzB,IAMC,EACD,OAAgB,EAChB,EAAE;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,sDAAsD,OAAO,CAAC,IAAI,CAAC,MAAM,qBAAqB;gBAC5F,QAAQ;gBACR,wBAAwB,CAC3B,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,SAAiB,CAAC;QACtB,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,YAAY,GAAsB;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC;gBAClB,SAAS;gBACT,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,gCAAgC,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjF,IAAI,EAAE;oBACJ,OAAO,EAAE,OAAO,IAAI,IAAI;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;oBACzB,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,IAAI;oBACrC,YAAY,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC/D;aACF,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,CAChB,MAAM,EACN,SAAS,EACT,OAAO,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,YAAY,EACZ,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CACP,aAAa,EACb,6HAA6H,CAC9H;SACA,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,IAAwB,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,iBAAiB,GAAkB,IAAI,CAAC;QAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAC/B,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,IAAI,CAC/D,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyD,CAAC;QAChF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,iBAAiB,IAAI,SAAS,CAAC,CAAC;YAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,oBAAoB,MAAM,CAAC,SAAS,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9F,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,OAAO,GAA8C,EAAE,CAAC;QAC9D,MAAM,OAAO,GAA+C,EAAE,CAAC;QAC/D,MAAM,MAAM,GAA4C,EAAE,CAAC;QAE3D,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAC7C,0EAA0E;YAC1E,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAChD,MAAM,sBAAsB,CAAC,cAAc,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mBAAmB,CAAC;oBAClB,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,wCAAwC;oBACjD,IAAI,EAAE;wBACJ,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,YAAY,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBAC/D;iBACF,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,gBAAgB;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;iBAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAChD,CAAC;YACF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;YAExC,KAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;gBAC3C,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,QAAQ,4BAA4B,CAAC,CAAC,CAAC;oBAC1E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;oBAC5D,SAAS;gBACX,CAAC;gBACD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBACvE,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,UAAU,QAAQ,0BAA0B,iBAAiB,EAAE,CAAC,CAC9E,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAC/D,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACjF,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACvD,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAEpE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,IAAI,CAAC;4BACH,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC;4BAC3D,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;wBAC7C,CAAC;wBAAC,MAAM,CAAC;4BACP,cAAc;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,QAAQ;wBACf,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACxD,CAAC,CAAC;oBACH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,YAAY,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7E,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;YAChE,KAAK,MAAM,IAAI,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,IAAI,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `athene start` and `athene stop` commands — unified orchestrator startup.
3
+ *
4
+ * Supports two modes:
5
+ * 1. `athene start [project]` — start from existing config
6
+ * 2. `athene start <url>` — clone repo, auto-generate config, then start
7
+ *
8
+ * The orchestrator prompt is passed to the agent via --append-system-prompt
9
+ * (or equivalent flag) at launch time — no file writing required.
10
+ */
11
+ import type { Command } from "commander";
12
+ import { type OrchestratorConfig } from "@made-by-moonlight/athene-core";
13
+ /**
14
+ * Auto-create agent-orchestrator.yaml when no config exists.
15
+ * Detects environment, project type, and generates config with smart defaults.
16
+ * Returns the loaded config.
17
+ */
18
+ export declare function autoCreateConfig(workingDir: string): Promise<OrchestratorConfig>;
19
+ export declare function registerStart(program: Command): void;
20
+ export declare function registerStop(program: Command): void;
21
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAmBL,KAAK,kBAAkB,EAWxB,MAAM,gCAAgC,CAAC;AA8bxC;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoItF;AAwxBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmcpD;AAoDD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkTnD"}