@made-by-moonlight/athene-cli 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/dist/assets/plugin-registry.json +67 -0
- package/dist/assets/scripts/athene-doctor.ps1 +352 -0
- package/dist/assets/scripts/athene-doctor.sh +552 -0
- package/dist/assets/scripts/athene-update.ps1 +224 -0
- package/dist/assets/scripts/athene-update.sh +252 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +26 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +89 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +103 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +329 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.d.ts +3 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +172 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/migrate-storage.d.ts +3 -0
- package/dist/commands/migrate-storage.d.ts.map +1 -0
- package/dist/commands/migrate-storage.js +78 -0
- package/dist/commands/migrate-storage.js.map +1 -0
- package/dist/commands/notify.d.ts +3 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +143 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +167 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +462 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +143 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/report.d.ts +19 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +114 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/review-check.d.ts +3 -0
- package/dist/commands/review-check.d.ts.map +1 -0
- package/dist/commands/review-check.js +122 -0
- package/dist/commands/review-check.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +215 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +187 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +439 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +297 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/spawn.d.ts +4 -0
- package/dist/commands/spawn.d.ts.map +1 -0
- package/dist/commands/spawn.js +436 -0
- package/dist/commands/spawn.js.map +1 -0
- package/dist/commands/start.d.ts +21 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +1836 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +556 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +15 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +652 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +131 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/bun-tmp-janitor.d.ts +18 -0
- package/dist/lib/bun-tmp-janitor.d.ts.map +1 -0
- package/dist/lib/bun-tmp-janitor.js +127 -0
- package/dist/lib/bun-tmp-janitor.js.map +1 -0
- package/dist/lib/caller-context.d.ts +13 -0
- package/dist/lib/caller-context.d.ts.map +1 -0
- package/dist/lib/caller-context.js +20 -0
- package/dist/lib/caller-context.js.map +1 -0
- package/dist/lib/cli-errors.d.ts +8 -0
- package/dist/lib/cli-errors.d.ts.map +1 -0
- package/dist/lib/cli-errors.js +20 -0
- package/dist/lib/cli-errors.js.map +1 -0
- package/dist/lib/completion.d.ts +13 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +428 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/composio-setup.d.ts +65 -0
- package/dist/lib/composio-setup.d.ts.map +1 -0
- package/dist/lib/composio-setup.js +3255 -0
- package/dist/lib/composio-setup.js.map +1 -0
- package/dist/lib/config-instruction.d.ts +2 -0
- package/dist/lib/config-instruction.d.ts.map +1 -0
- package/dist/lib/config-instruction.js +193 -0
- package/dist/lib/config-instruction.js.map +1 -0
- package/dist/lib/constants.d.ts +3 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +3 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/create-session-manager.d.ts +26 -0
- package/dist/lib/create-session-manager.d.ts.map +1 -0
- package/dist/lib/create-session-manager.js +55 -0
- package/dist/lib/create-session-manager.js.map +1 -0
- package/dist/lib/credential-resolver.d.ts +37 -0
- package/dist/lib/credential-resolver.d.ts.map +1 -0
- package/dist/lib/credential-resolver.js +105 -0
- package/dist/lib/credential-resolver.js.map +1 -0
- package/dist/lib/daemon.d.ts +69 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +77 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/dashboard-rebuild.d.ts +53 -0
- package/dist/lib/dashboard-rebuild.d.ts.map +1 -0
- package/dist/lib/dashboard-rebuild.js +188 -0
- package/dist/lib/dashboard-rebuild.js.map +1 -0
- package/dist/lib/dashboard-setup.d.ts +14 -0
- package/dist/lib/dashboard-setup.d.ts.map +1 -0
- package/dist/lib/dashboard-setup.js +192 -0
- package/dist/lib/dashboard-setup.js.map +1 -0
- package/dist/lib/dashboard-url.d.ts +19 -0
- package/dist/lib/dashboard-url.d.ts.map +1 -0
- package/dist/lib/dashboard-url.js +25 -0
- package/dist/lib/dashboard-url.js.map +1 -0
- package/dist/lib/desktop-setup.d.ts +21 -0
- package/dist/lib/desktop-setup.d.ts.map +1 -0
- package/dist/lib/desktop-setup.js +556 -0
- package/dist/lib/desktop-setup.js.map +1 -0
- package/dist/lib/detect-agent.d.ts +24 -0
- package/dist/lib/detect-agent.d.ts.map +1 -0
- package/dist/lib/detect-agent.js +69 -0
- package/dist/lib/detect-agent.js.map +1 -0
- package/dist/lib/detect-env.d.ts +14 -0
- package/dist/lib/detect-env.d.ts.map +1 -0
- package/dist/lib/detect-env.js +46 -0
- package/dist/lib/detect-env.js.map +1 -0
- package/dist/lib/discord-setup.d.ts +20 -0
- package/dist/lib/discord-setup.d.ts.map +1 -0
- package/dist/lib/discord-setup.js +584 -0
- package/dist/lib/discord-setup.js.map +1 -0
- package/dist/lib/format.d.ts +11 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +116 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/git-utils.d.ts +14 -0
- package/dist/lib/git-utils.d.ts.map +1 -0
- package/dist/lib/git-utils.js +45 -0
- package/dist/lib/git-utils.js.map +1 -0
- package/dist/lib/install-helpers.d.ts +24 -0
- package/dist/lib/install-helpers.d.ts.map +1 -0
- package/dist/lib/install-helpers.js +76 -0
- package/dist/lib/install-helpers.js.map +1 -0
- package/dist/lib/lifecycle-service.d.ts +11 -0
- package/dist/lib/lifecycle-service.d.ts.map +1 -0
- package/dist/lib/lifecycle-service.js +65 -0
- package/dist/lib/lifecycle-service.js.map +1 -0
- package/dist/lib/notifier-routing.d.ts +35 -0
- package/dist/lib/notifier-routing.d.ts.map +1 -0
- package/dist/lib/notifier-routing.js +133 -0
- package/dist/lib/notifier-routing.js.map +1 -0
- package/dist/lib/notify-test.d.ts +72 -0
- package/dist/lib/notify-test.d.ts.map +1 -0
- package/dist/lib/notify-test.js +674 -0
- package/dist/lib/notify-test.js.map +1 -0
- package/dist/lib/openclaw-probe.d.ts +38 -0
- package/dist/lib/openclaw-probe.d.ts.map +1 -0
- package/dist/lib/openclaw-probe.js +146 -0
- package/dist/lib/openclaw-probe.js.map +1 -0
- package/dist/lib/openclaw-setup.d.ts +19 -0
- package/dist/lib/openclaw-setup.d.ts.map +1 -0
- package/dist/lib/openclaw-setup.js +684 -0
- package/dist/lib/openclaw-setup.js.map +1 -0
- package/dist/lib/path-equality.d.ts +29 -0
- package/dist/lib/path-equality.d.ts.map +1 -0
- package/dist/lib/path-equality.js +52 -0
- package/dist/lib/path-equality.js.map +1 -0
- package/dist/lib/plugin-marketplace.d.ts +24 -0
- package/dist/lib/plugin-marketplace.d.ts.map +1 -0
- package/dist/lib/plugin-marketplace.js +175 -0
- package/dist/lib/plugin-marketplace.js.map +1 -0
- package/dist/lib/plugin-scaffold.d.ts +14 -0
- package/dist/lib/plugin-scaffold.d.ts.map +1 -0
- package/dist/lib/plugin-scaffold.js +174 -0
- package/dist/lib/plugin-scaffold.js.map +1 -0
- package/dist/lib/plugin-store.d.ts +9 -0
- package/dist/lib/plugin-store.d.ts.map +1 -0
- package/dist/lib/plugin-store.js +121 -0
- package/dist/lib/plugin-store.js.map +1 -0
- package/dist/lib/plugins.d.ts +17 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/plugins.js +65 -0
- package/dist/lib/plugins.js.map +1 -0
- package/dist/lib/portfolio-display.d.ts +10 -0
- package/dist/lib/portfolio-display.d.ts.map +1 -0
- package/dist/lib/portfolio-display.js +17 -0
- package/dist/lib/portfolio-display.js.map +1 -0
- package/dist/lib/preflight.d.ts +27 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +77 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/prevent-sleep.d.ts +34 -0
- package/dist/lib/prevent-sleep.d.ts.map +1 -0
- package/dist/lib/prevent-sleep.js +65 -0
- package/dist/lib/prevent-sleep.js.map +1 -0
- package/dist/lib/project-detection.d.ts +11 -0
- package/dist/lib/project-detection.d.ts.map +1 -0
- package/dist/lib/project-detection.js +206 -0
- package/dist/lib/project-detection.js.map +1 -0
- package/dist/lib/project-resolution.d.ts +10 -0
- package/dist/lib/project-resolution.d.ts.map +1 -0
- package/dist/lib/project-resolution.js +17 -0
- package/dist/lib/project-resolution.js.map +1 -0
- package/dist/lib/project-supervisor.d.ts +28 -0
- package/dist/lib/project-supervisor.d.ts.map +1 -0
- package/dist/lib/project-supervisor.js +167 -0
- package/dist/lib/project-supervisor.js.map +1 -0
- package/dist/lib/prompts.d.ts +7 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +37 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/repo-utils.d.ts +16 -0
- package/dist/lib/repo-utils.d.ts.map +1 -0
- package/dist/lib/repo-utils.js +26 -0
- package/dist/lib/repo-utils.js.map +1 -0
- package/dist/lib/resolve-project.d.ts +113 -0
- package/dist/lib/resolve-project.d.ts.map +1 -0
- package/dist/lib/resolve-project.js +433 -0
- package/dist/lib/resolve-project.js.map +1 -0
- package/dist/lib/routes.d.ts +2 -0
- package/dist/lib/routes.d.ts.map +1 -0
- package/dist/lib/routes.js +5 -0
- package/dist/lib/routes.js.map +1 -0
- package/dist/lib/running-state.d.ts +76 -0
- package/dist/lib/running-state.d.ts.map +1 -0
- package/dist/lib/running-state.js +338 -0
- package/dist/lib/running-state.js.map +1 -0
- package/dist/lib/script-runner.d.ts +10 -0
- package/dist/lib/script-runner.d.ts.map +1 -0
- package/dist/lib/script-runner.js +189 -0
- package/dist/lib/script-runner.js.map +1 -0
- package/dist/lib/session-utils.d.ts +14 -0
- package/dist/lib/session-utils.d.ts.map +1 -0
- package/dist/lib/session-utils.js +58 -0
- package/dist/lib/session-utils.js.map +1 -0
- package/dist/lib/shell.d.ts +17 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +90 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/shutdown.d.ts +30 -0
- package/dist/lib/shutdown.d.ts.map +1 -0
- package/dist/lib/shutdown.js +177 -0
- package/dist/lib/shutdown.js.map +1 -0
- package/dist/lib/slack-setup.d.ts +17 -0
- package/dist/lib/slack-setup.d.ts.map +1 -0
- package/dist/lib/slack-setup.js +485 -0
- package/dist/lib/slack-setup.js.map +1 -0
- package/dist/lib/startup-preflight.d.ts +36 -0
- package/dist/lib/startup-preflight.d.ts.map +1 -0
- package/dist/lib/startup-preflight.js +273 -0
- package/dist/lib/startup-preflight.js.map +1 -0
- package/dist/lib/update-channel-onboarding.d.ts +52 -0
- package/dist/lib/update-channel-onboarding.d.ts.map +1 -0
- package/dist/lib/update-channel-onboarding.js +107 -0
- package/dist/lib/update-channel-onboarding.js.map +1 -0
- package/dist/lib/update-check.d.ts +161 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +504 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/web-dir.d.ts +47 -0
- package/dist/lib/web-dir.d.ts.map +1 -0
- package/dist/lib/web-dir.js +179 -0
- package/dist/lib/web-dir.js.map +1 -0
- package/dist/lib/webhook-setup.d.ts +16 -0
- package/dist/lib/webhook-setup.d.ts.map +1 -0
- package/dist/lib/webhook-setup.js +383 -0
- package/dist/lib/webhook-setup.js.map +1 -0
- package/dist/options/version.d.ts +2 -0
- package/dist/options/version.d.ts.map +1 -0
- package/dist/options/version.js +7 -0
- package/dist/options/version.js.map +1 -0
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +63 -0
- package/dist/program.js.map +1 -0
- package/package.json +80 -0
- package/templates/rules/base.md +4 -0
- package/templates/rules/go.md +8 -0
- package/templates/rules/javascript.md +4 -0
- package/templates/rules/nextjs.md +7 -0
- package/templates/rules/pnpm-workspaces.md +4 -0
- package/templates/rules/python.md +8 -0
- package/templates/rules/react.md +8 -0
- package/templates/rules/typescript.md +6 -0
|
@@ -0,0 +1,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":"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"}
|
|
@@ -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"}
|