@nairon-ai/aegis 0.4.4 → 0.4.5
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/README.md
CHANGED
|
@@ -68,12 +68,14 @@ If you see `No ready bugs found`, check `MONITORED_REPO`, exact label names, iss
|
|
|
68
68
|
|
|
69
69
|
During `setup`, choose one:
|
|
70
70
|
|
|
71
|
-
- `One-click GitHub App`: recommended. Aegis opens a browser page, creates the app, asks you to install it on the repo, then saves the credentials.
|
|
71
|
+
- `One-click GitHub App`: recommended. Aegis opens a browser page, creates the app, asks you to install it on the repo, then saves the credentials. If you rerun setup later, Aegis reuses the existing app instead of creating another one.
|
|
72
72
|
- `GitHub token`: quick local test if you already know how to create fine-grained GitHub tokens.
|
|
73
73
|
- `Paste existing GitHub App credentials`: only if you already made an app manually.
|
|
74
74
|
|
|
75
75
|
Aegis auto-detects `git remote origin` and origin's default branch when you run setup inside your product repo, so it normally will not ask which repo or base branch to use. If no GitHub origin exists, it asks for `owner/repo` or a full GitHub URL like `https://github.com/KeyLead-Team/keylead`.
|
|
76
76
|
|
|
77
|
+
If you connect Linear, Aegis fetches your Linear teams after you paste the API key and lets you choose by name, for example `Engineering (ENG)`. You do not need to hunt for Linear UUIDs manually.
|
|
78
|
+
|
|
77
79
|
### Deployed AFK Mode
|
|
78
80
|
|
|
79
81
|
Deploy only after the local dry-run works.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,YAAY,qDAKvB,CAAC;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCpD"}
|
|
@@ -44,8 +44,8 @@ export async function runSetupWizard() {
|
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
46
|
if (error instanceof SetupCancelledError) {
|
|
47
|
-
consola.log("\nSetup cancelled
|
|
48
|
-
consola.log("If
|
|
47
|
+
consola.log("\nSetup cancelled before the final save.");
|
|
48
|
+
consola.log("If GitHub App credentials were created in the browser, Aegis saved them immediately so rerun setup can reuse them.");
|
|
49
49
|
process.exitCode = 130;
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
@@ -103,59 +103,29 @@ async function setupGitHub(config) {
|
|
|
103
103
|
"If you are unsure, choose the one-click GitHub App. It opens GitHub in your browser and avoids manual tokens.",
|
|
104
104
|
"Use a GitHub token only if you already know how to create fine-grained tokens.",
|
|
105
105
|
]);
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
"Click Generate token, then paste the token here. It usually starts with github_pat_.",
|
|
119
|
-
"Keep it secret. Aegis saves it to .aegis/.env, which should not be committed.",
|
|
106
|
+
if (hasGitHubAppConfig(config)) {
|
|
107
|
+
consola.info(`Using existing GitHub App installation ${config.githubInstallationId}. Rerun disconnect if you want to remove it.`);
|
|
108
|
+
config.githubToken = undefined;
|
|
109
|
+
}
|
|
110
|
+
else if (config.githubToken) {
|
|
111
|
+
consola.info("Using existing GitHub token from .aegis config.");
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const method = await promptSelect("Auth method:", [
|
|
115
|
+
{ label: "One-click GitHub App (recommended)", value: "app-flow" },
|
|
116
|
+
{ label: "GitHub token (quick local test)", value: "token" },
|
|
117
|
+
{ label: "Paste existing GitHub App credentials", value: "app-manual" },
|
|
120
118
|
]);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
config.githubAppPrivateKey = undefined;
|
|
124
|
-
config.githubInstallationId = undefined;
|
|
125
|
-
}
|
|
126
|
-
else if (method === "app-flow") {
|
|
127
|
-
if (!config.monitoredRepo) {
|
|
128
|
-
consola.warn("Set the monitored repo first.");
|
|
129
|
-
return;
|
|
119
|
+
if (method === "token") {
|
|
120
|
+
await setupGitHubToken(config);
|
|
130
121
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
"Click Create GitHub App.",
|
|
134
|
-
"Then click Install and choose Only select repositories.",
|
|
135
|
-
"Select the repo from Step 1, then approve the install.",
|
|
136
|
-
"When GitHub sends you back, this CLI saves the credentials automatically.",
|
|
137
|
-
]);
|
|
138
|
-
try {
|
|
139
|
-
const app = await runGitHubAppFlow({
|
|
140
|
-
monitoredRepo: config.monitoredRepo,
|
|
141
|
-
workerUrl: config.workerUrl,
|
|
142
|
-
});
|
|
143
|
-
config.githubAppId = app.appId;
|
|
144
|
-
config.githubAppPrivateKey = Buffer.from(app.privateKey, "utf-8").toString("base64");
|
|
145
|
-
config.githubInstallationId = app.installationId;
|
|
146
|
-
config.githubWebhookSecret = app.webhookSecret;
|
|
147
|
-
config.githubToken = undefined;
|
|
148
|
-
consola.success("Saved GitHub App credentials from GitHub.");
|
|
122
|
+
else if (method === "app-flow") {
|
|
123
|
+
await setupGitHubAppFlow(config);
|
|
149
124
|
}
|
|
150
|
-
|
|
151
|
-
consola.warn(error instanceof Error ? error.message : String(error));
|
|
152
|
-
consola.info("Falling back to manual GitHub App credentials.");
|
|
125
|
+
else {
|
|
153
126
|
await setupGitHubAppManual(config);
|
|
154
127
|
}
|
|
155
128
|
}
|
|
156
|
-
else {
|
|
157
|
-
await setupGitHubAppManual(config);
|
|
158
|
-
}
|
|
159
129
|
if (config.githubWebhookSecret) {
|
|
160
130
|
consola.info("GitHub webhook secret is already configured.");
|
|
161
131
|
return;
|
|
@@ -173,6 +143,52 @@ async function setupGitHub(config) {
|
|
|
173
143
|
consola.info("Use this same value when you add the GitHub App or repo webhook.");
|
|
174
144
|
}
|
|
175
145
|
}
|
|
146
|
+
async function setupGitHubToken(config) {
|
|
147
|
+
printStep("Create a fine-grained GitHub token", [
|
|
148
|
+
"Open: https://github.com/settings/personal-access-tokens/new",
|
|
149
|
+
"Token name: Aegis",
|
|
150
|
+
"Repository access: Only select repositories, then choose the repo from Step 1.",
|
|
151
|
+
"Repository permissions: Contents read/write, Issues read/write, Pull requests read/write.",
|
|
152
|
+
"Metadata stays read-only automatically.",
|
|
153
|
+
"Click Generate token, then paste the token here. It usually starts with github_pat_.",
|
|
154
|
+
"Keep it secret. Aegis saves it to .aegis/.env, which should not be committed.",
|
|
155
|
+
]);
|
|
156
|
+
config.githubToken = await promptText("Paste GitHub token:", config.githubToken);
|
|
157
|
+
config.githubAppId = undefined;
|
|
158
|
+
config.githubAppPrivateKey = undefined;
|
|
159
|
+
config.githubInstallationId = undefined;
|
|
160
|
+
}
|
|
161
|
+
async function setupGitHubAppFlow(config) {
|
|
162
|
+
if (!config.monitoredRepo) {
|
|
163
|
+
consola.warn("Set the monitored repo first.");
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
printStep("Create the GitHub App in your browser", [
|
|
167
|
+
"Aegis will open a local setup page.",
|
|
168
|
+
"Click Create GitHub App.",
|
|
169
|
+
"Then click Install and choose Only select repositories.",
|
|
170
|
+
"Select the repo from Step 1, then approve the install.",
|
|
171
|
+
"When GitHub sends you back, this CLI saves the credentials automatically.",
|
|
172
|
+
]);
|
|
173
|
+
try {
|
|
174
|
+
const app = await runGitHubAppFlow({
|
|
175
|
+
monitoredRepo: config.monitoredRepo,
|
|
176
|
+
workerUrl: config.workerUrl,
|
|
177
|
+
});
|
|
178
|
+
config.githubAppId = app.appId;
|
|
179
|
+
config.githubAppPrivateKey = Buffer.from(app.privateKey, "utf-8").toString("base64");
|
|
180
|
+
config.githubInstallationId = app.installationId;
|
|
181
|
+
config.githubWebhookSecret = app.webhookSecret;
|
|
182
|
+
config.githubToken = undefined;
|
|
183
|
+
saveConfig(config);
|
|
184
|
+
consola.success(`Saved GitHub App credentials to ${resolveEnvFileForWrite()}.`);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
consola.warn(error instanceof Error ? error.message : String(error));
|
|
188
|
+
consola.info("Falling back to manual GitHub App credentials.");
|
|
189
|
+
await setupGitHubAppManual(config);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
176
192
|
async function setupGitHubAppManual(config) {
|
|
177
193
|
printStep("Paste existing GitHub App credentials", [
|
|
178
194
|
"Use this only if you already created a GitHub App manually.",
|
|
@@ -197,6 +213,9 @@ async function setupGitHubAppManual(config) {
|
|
|
197
213
|
config.githubInstallationId = await promptText("GitHub App installation ID:", config.githubInstallationId);
|
|
198
214
|
config.githubToken = undefined;
|
|
199
215
|
}
|
|
216
|
+
function hasGitHubAppConfig(config) {
|
|
217
|
+
return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
|
|
218
|
+
}
|
|
200
219
|
async function setupLinear(config) {
|
|
201
220
|
printStep("Step 4: optional Linear connection", [
|
|
202
221
|
"Use this only if your team tracks bugs in Linear.",
|
|
@@ -211,6 +230,7 @@ async function setupLinear(config) {
|
|
|
211
230
|
"Aegis uses it to read ready bug tickets and comment with status updates.",
|
|
212
231
|
]);
|
|
213
232
|
config.linearApiKey = await promptText("Linear API key:", config.linearApiKey);
|
|
233
|
+
await setupLinearTeam(config);
|
|
214
234
|
printStep("Linear webhook secret", [
|
|
215
235
|
"This protects Linear webhook calls after deploy.",
|
|
216
236
|
"Choose yes and Aegis will generate one.",
|
|
@@ -219,12 +239,6 @@ async function setupLinear(config) {
|
|
|
219
239
|
config.linearWebhookSecret = generateSecret
|
|
220
240
|
? crypto.randomUUID()
|
|
221
241
|
: await promptText("Linear webhook signing secret:", config.linearWebhookSecret);
|
|
222
|
-
printStep("Linear team/project", [
|
|
223
|
-
"Team ID is required so Aegis knows which Linear team to watch.",
|
|
224
|
-
"Project ID is optional. Leave it blank to watch the whole team.",
|
|
225
|
-
]);
|
|
226
|
-
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
227
|
-
config.linearProjectId = await promptText("Linear project ID (optional):", config.linearProjectId);
|
|
228
242
|
printStep("Linear statuses and labels", [
|
|
229
243
|
"These names must match your Linear workflow.",
|
|
230
244
|
"If your team uses the default names, press Enter through these prompts.",
|
|
@@ -235,6 +249,66 @@ async function setupLinear(config) {
|
|
|
235
249
|
config.linearBlockedStatus = await promptText("Linear blocked status name:", config.linearBlockedStatus ?? "Blocked");
|
|
236
250
|
config.linearBugLabel = await promptText("Linear bug label:", config.linearBugLabel ?? "bug");
|
|
237
251
|
}
|
|
252
|
+
async function setupLinearTeam(config) {
|
|
253
|
+
if (!config.linearApiKey)
|
|
254
|
+
return;
|
|
255
|
+
printStep("Linear team/project", [
|
|
256
|
+
"Aegis will fetch your Linear teams so you can pick one by name.",
|
|
257
|
+
"Project ID is optional. Leave it blank to watch the whole team.",
|
|
258
|
+
]);
|
|
259
|
+
try {
|
|
260
|
+
const teams = await fetchLinearTeams(config.linearApiKey);
|
|
261
|
+
if (teams.length === 0) {
|
|
262
|
+
consola.warn("No Linear teams were returned for this API key.");
|
|
263
|
+
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
264
|
+
}
|
|
265
|
+
else if (teams.length === 1) {
|
|
266
|
+
const team = teams[0];
|
|
267
|
+
config.linearTeamId = team.id;
|
|
268
|
+
consola.info(`Using Linear team ${formatLinearTeam(team)}.`);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
config.linearTeamId = await promptSelect("Linear team:", teams.map((team) => ({
|
|
272
|
+
label: formatLinearTeam(team),
|
|
273
|
+
value: team.id,
|
|
274
|
+
})), config.linearTeamId);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
consola.warn(`Could not fetch Linear teams: ${error instanceof Error ? error.message : String(error)}`);
|
|
279
|
+
consola.info("Falling back to manual Linear team ID.");
|
|
280
|
+
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
281
|
+
}
|
|
282
|
+
config.linearProjectId = await promptText("Linear project ID (optional, blank = whole team):", config.linearProjectId);
|
|
283
|
+
}
|
|
284
|
+
async function fetchLinearTeams(apiKey) {
|
|
285
|
+
const result = await linearGraphql(apiKey, `query Teams {
|
|
286
|
+
teams {
|
|
287
|
+
nodes { id name key }
|
|
288
|
+
}
|
|
289
|
+
}`);
|
|
290
|
+
return result.teams.nodes.sort((a, b) => a.name.localeCompare(b.name));
|
|
291
|
+
}
|
|
292
|
+
async function linearGraphql(apiKey, query) {
|
|
293
|
+
const response = await fetch("https://api.linear.app/graphql", {
|
|
294
|
+
method: "POST",
|
|
295
|
+
headers: {
|
|
296
|
+
Authorization: apiKey,
|
|
297
|
+
"Content-Type": "application/json",
|
|
298
|
+
},
|
|
299
|
+
body: JSON.stringify({ query }),
|
|
300
|
+
});
|
|
301
|
+
const payload = (await response.json());
|
|
302
|
+
if (!response.ok || payload.errors?.length) {
|
|
303
|
+
throw new Error(`Linear API failed: ${response.status} ${payload.errors?.map((error) => error.message).join("; ") ?? ""}`);
|
|
304
|
+
}
|
|
305
|
+
if (!payload.data)
|
|
306
|
+
throw new Error("Linear API returned no data.");
|
|
307
|
+
return payload.data;
|
|
308
|
+
}
|
|
309
|
+
function formatLinearTeam(team) {
|
|
310
|
+
return `${team.name} (${team.key})`;
|
|
311
|
+
}
|
|
238
312
|
async function setupAutomation(config) {
|
|
239
313
|
printStep("Step 5: GitHub labels Aegis should watch", [
|
|
240
314
|
"Aegis only picks up open issues with both labels.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/docs/SETUP.md
CHANGED
|
@@ -153,7 +153,8 @@ Important answers:
|
|
|
153
153
|
|
|
154
154
|
- `Repo to monitor`: Aegis detects `git remote origin` when you run setup inside your product repo, so this is normally automatic. If no GitHub origin exists, paste `acme/web-app` / `https://github.com/acme/web-app`.
|
|
155
155
|
- `Base branch`: Aegis detects origin's default branch automatically. If detection fails, it uses `main`; edit `BASE_BRANCH` in `.aegis/.env` only if your repo uses something else.
|
|
156
|
-
- GitHub auth: use `One-click GitHub App` unless you already know how to create a fine-grained GitHub token
|
|
156
|
+
- GitHub auth: use `One-click GitHub App` unless you already know how to create a fine-grained GitHub token. If setup already saved a GitHub App, Aegis reuses it on reruns.
|
|
157
|
+
- Linear team: after you paste the Linear API key, Aegis fetches your teams and lets you choose by name. You do not need to copy the Linear team UUID manually.
|
|
157
158
|
- `GitHub webhook secret`: generate one and keep it in `.aegis/.env`
|
|
158
159
|
- `Automation mode`: start with `plan-first`
|
|
159
160
|
- `Context profile`: start with `minimal`
|
|
@@ -326,7 +327,7 @@ Resource types: Issue, Comment
|
|
|
326
327
|
|
|
327
328
|
Configure Linear to match the setup wizard:
|
|
328
329
|
|
|
329
|
-
- Team
|
|
330
|
+
- Team selected in setup
|
|
330
331
|
- Optional project ID
|
|
331
332
|
- Ready status, default `Ready to Implement`
|
|
332
333
|
- Bug label, default `bug`
|
package/package.json
CHANGED
|
@@ -10,6 +10,12 @@ import { detectSetupState, printState, saveConfig } from "../state.js";
|
|
|
10
10
|
|
|
11
11
|
type PromptOptions = NonNullable<Parameters<typeof consola.prompt>[1]>;
|
|
12
12
|
|
|
13
|
+
type LinearTeam = {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
key: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
13
19
|
class SetupCancelledError extends Error {
|
|
14
20
|
constructor() {
|
|
15
21
|
super("Setup cancelled.");
|
|
@@ -51,9 +57,9 @@ export async function runSetupWizard(): Promise<void> {
|
|
|
51
57
|
consola.log("");
|
|
52
58
|
} catch (error) {
|
|
53
59
|
if (error instanceof SetupCancelledError) {
|
|
54
|
-
consola.log("\nSetup cancelled
|
|
60
|
+
consola.log("\nSetup cancelled before the final save.");
|
|
55
61
|
consola.log(
|
|
56
|
-
"If
|
|
62
|
+
"If GitHub App credentials were created in the browser, Aegis saved them immediately so rerun setup can reuse them.",
|
|
57
63
|
);
|
|
58
64
|
process.exitCode = 130;
|
|
59
65
|
return;
|
|
@@ -111,56 +117,28 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
|
|
|
111
117
|
"If you are unsure, choose the one-click GitHub App. It opens GitHub in your browser and avoids manual tokens.",
|
|
112
118
|
"Use a GitHub token only if you already know how to create fine-grained tokens.",
|
|
113
119
|
]);
|
|
114
|
-
const method = await promptSelect("Auth method:", [
|
|
115
|
-
{ label: "One-click GitHub App (recommended)", value: "app-flow" },
|
|
116
|
-
{ label: "GitHub token (quick local test)", value: "token" },
|
|
117
|
-
{ label: "Paste existing GitHub App credentials", value: "app-manual" },
|
|
118
|
-
]);
|
|
119
120
|
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
config.githubAppPrivateKey = undefined;
|
|
133
|
-
config.githubInstallationId = undefined;
|
|
134
|
-
} else if (method === "app-flow") {
|
|
135
|
-
if (!config.monitoredRepo) {
|
|
136
|
-
consola.warn("Set the monitored repo first.");
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
printStep("Create the GitHub App in your browser", [
|
|
140
|
-
"Aegis will open a local setup page.",
|
|
141
|
-
"Click Create GitHub App.",
|
|
142
|
-
"Then click Install and choose Only select repositories.",
|
|
143
|
-
"Select the repo from Step 1, then approve the install.",
|
|
144
|
-
"When GitHub sends you back, this CLI saves the credentials automatically.",
|
|
121
|
+
if (hasGitHubAppConfig(config)) {
|
|
122
|
+
consola.info(
|
|
123
|
+
`Using existing GitHub App installation ${config.githubInstallationId}. Rerun disconnect if you want to remove it.`,
|
|
124
|
+
);
|
|
125
|
+
config.githubToken = undefined;
|
|
126
|
+
} else if (config.githubToken) {
|
|
127
|
+
consola.info("Using existing GitHub token from .aegis config.");
|
|
128
|
+
} else {
|
|
129
|
+
const method = await promptSelect("Auth method:", [
|
|
130
|
+
{ label: "One-click GitHub App (recommended)", value: "app-flow" },
|
|
131
|
+
{ label: "GitHub token (quick local test)", value: "token" },
|
|
132
|
+
{ label: "Paste existing GitHub App credentials", value: "app-manual" },
|
|
145
133
|
]);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
config.githubAppPrivateKey = Buffer.from(app.privateKey, "utf-8").toString("base64");
|
|
153
|
-
config.githubInstallationId = app.installationId;
|
|
154
|
-
config.githubWebhookSecret = app.webhookSecret;
|
|
155
|
-
config.githubToken = undefined;
|
|
156
|
-
consola.success("Saved GitHub App credentials from GitHub.");
|
|
157
|
-
} catch (error) {
|
|
158
|
-
consola.warn(error instanceof Error ? error.message : String(error));
|
|
159
|
-
consola.info("Falling back to manual GitHub App credentials.");
|
|
134
|
+
|
|
135
|
+
if (method === "token") {
|
|
136
|
+
await setupGitHubToken(config);
|
|
137
|
+
} else if (method === "app-flow") {
|
|
138
|
+
await setupGitHubAppFlow(config);
|
|
139
|
+
} else {
|
|
160
140
|
await setupGitHubAppManual(config);
|
|
161
141
|
}
|
|
162
|
-
} else {
|
|
163
|
-
await setupGitHubAppManual(config);
|
|
164
142
|
}
|
|
165
143
|
|
|
166
144
|
if (config.githubWebhookSecret) {
|
|
@@ -185,6 +163,53 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
|
|
|
185
163
|
}
|
|
186
164
|
}
|
|
187
165
|
|
|
166
|
+
async function setupGitHubToken(config: AegisCliConfig): Promise<void> {
|
|
167
|
+
printStep("Create a fine-grained GitHub token", [
|
|
168
|
+
"Open: https://github.com/settings/personal-access-tokens/new",
|
|
169
|
+
"Token name: Aegis",
|
|
170
|
+
"Repository access: Only select repositories, then choose the repo from Step 1.",
|
|
171
|
+
"Repository permissions: Contents read/write, Issues read/write, Pull requests read/write.",
|
|
172
|
+
"Metadata stays read-only automatically.",
|
|
173
|
+
"Click Generate token, then paste the token here. It usually starts with github_pat_.",
|
|
174
|
+
"Keep it secret. Aegis saves it to .aegis/.env, which should not be committed.",
|
|
175
|
+
]);
|
|
176
|
+
config.githubToken = await promptText("Paste GitHub token:", config.githubToken);
|
|
177
|
+
config.githubAppId = undefined;
|
|
178
|
+
config.githubAppPrivateKey = undefined;
|
|
179
|
+
config.githubInstallationId = undefined;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async function setupGitHubAppFlow(config: AegisCliConfig): Promise<void> {
|
|
183
|
+
if (!config.monitoredRepo) {
|
|
184
|
+
consola.warn("Set the monitored repo first.");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
printStep("Create the GitHub App in your browser", [
|
|
188
|
+
"Aegis will open a local setup page.",
|
|
189
|
+
"Click Create GitHub App.",
|
|
190
|
+
"Then click Install and choose Only select repositories.",
|
|
191
|
+
"Select the repo from Step 1, then approve the install.",
|
|
192
|
+
"When GitHub sends you back, this CLI saves the credentials automatically.",
|
|
193
|
+
]);
|
|
194
|
+
try {
|
|
195
|
+
const app = await runGitHubAppFlow({
|
|
196
|
+
monitoredRepo: config.monitoredRepo,
|
|
197
|
+
workerUrl: config.workerUrl,
|
|
198
|
+
});
|
|
199
|
+
config.githubAppId = app.appId;
|
|
200
|
+
config.githubAppPrivateKey = Buffer.from(app.privateKey, "utf-8").toString("base64");
|
|
201
|
+
config.githubInstallationId = app.installationId;
|
|
202
|
+
config.githubWebhookSecret = app.webhookSecret;
|
|
203
|
+
config.githubToken = undefined;
|
|
204
|
+
saveConfig(config);
|
|
205
|
+
consola.success(`Saved GitHub App credentials to ${resolveEnvFileForWrite()}.`);
|
|
206
|
+
} catch (error) {
|
|
207
|
+
consola.warn(error instanceof Error ? error.message : String(error));
|
|
208
|
+
consola.info("Falling back to manual GitHub App credentials.");
|
|
209
|
+
await setupGitHubAppManual(config);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
188
213
|
async function setupGitHubAppManual(config: AegisCliConfig): Promise<void> {
|
|
189
214
|
printStep("Paste existing GitHub App credentials", [
|
|
190
215
|
"Use this only if you already created a GitHub App manually.",
|
|
@@ -214,6 +239,10 @@ async function setupGitHubAppManual(config: AegisCliConfig): Promise<void> {
|
|
|
214
239
|
config.githubToken = undefined;
|
|
215
240
|
}
|
|
216
241
|
|
|
242
|
+
function hasGitHubAppConfig(config: AegisCliConfig): boolean {
|
|
243
|
+
return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
|
|
244
|
+
}
|
|
245
|
+
|
|
217
246
|
async function setupLinear(config: AegisCliConfig): Promise<void> {
|
|
218
247
|
printStep("Step 4: optional Linear connection", [
|
|
219
248
|
"Use this only if your team tracks bugs in Linear.",
|
|
@@ -228,6 +257,8 @@ async function setupLinear(config: AegisCliConfig): Promise<void> {
|
|
|
228
257
|
"Aegis uses it to read ready bug tickets and comment with status updates.",
|
|
229
258
|
]);
|
|
230
259
|
config.linearApiKey = await promptText("Linear API key:", config.linearApiKey);
|
|
260
|
+
await setupLinearTeam(config);
|
|
261
|
+
|
|
231
262
|
printStep("Linear webhook secret", [
|
|
232
263
|
"This protects Linear webhook calls after deploy.",
|
|
233
264
|
"Choose yes and Aegis will generate one.",
|
|
@@ -239,15 +270,6 @@ async function setupLinear(config: AegisCliConfig): Promise<void> {
|
|
|
239
270
|
config.linearWebhookSecret = generateSecret
|
|
240
271
|
? crypto.randomUUID()
|
|
241
272
|
: await promptText("Linear webhook signing secret:", config.linearWebhookSecret);
|
|
242
|
-
printStep("Linear team/project", [
|
|
243
|
-
"Team ID is required so Aegis knows which Linear team to watch.",
|
|
244
|
-
"Project ID is optional. Leave it blank to watch the whole team.",
|
|
245
|
-
]);
|
|
246
|
-
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
247
|
-
config.linearProjectId = await promptText(
|
|
248
|
-
"Linear project ID (optional):",
|
|
249
|
-
config.linearProjectId,
|
|
250
|
-
);
|
|
251
273
|
printStep("Linear statuses and labels", [
|
|
252
274
|
"These names must match your Linear workflow.",
|
|
253
275
|
"If your team uses the default names, press Enter through these prompts.",
|
|
@@ -271,6 +293,84 @@ async function setupLinear(config: AegisCliConfig): Promise<void> {
|
|
|
271
293
|
config.linearBugLabel = await promptText("Linear bug label:", config.linearBugLabel ?? "bug");
|
|
272
294
|
}
|
|
273
295
|
|
|
296
|
+
async function setupLinearTeam(config: AegisCliConfig): Promise<void> {
|
|
297
|
+
if (!config.linearApiKey) return;
|
|
298
|
+
|
|
299
|
+
printStep("Linear team/project", [
|
|
300
|
+
"Aegis will fetch your Linear teams so you can pick one by name.",
|
|
301
|
+
"Project ID is optional. Leave it blank to watch the whole team.",
|
|
302
|
+
]);
|
|
303
|
+
|
|
304
|
+
try {
|
|
305
|
+
const teams = await fetchLinearTeams(config.linearApiKey);
|
|
306
|
+
if (teams.length === 0) {
|
|
307
|
+
consola.warn("No Linear teams were returned for this API key.");
|
|
308
|
+
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
309
|
+
} else if (teams.length === 1) {
|
|
310
|
+
const team = teams[0];
|
|
311
|
+
config.linearTeamId = team.id;
|
|
312
|
+
consola.info(`Using Linear team ${formatLinearTeam(team)}.`);
|
|
313
|
+
} else {
|
|
314
|
+
config.linearTeamId = await promptSelect(
|
|
315
|
+
"Linear team:",
|
|
316
|
+
teams.map((team) => ({
|
|
317
|
+
label: formatLinearTeam(team),
|
|
318
|
+
value: team.id,
|
|
319
|
+
})),
|
|
320
|
+
config.linearTeamId,
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
} catch (error) {
|
|
324
|
+
consola.warn(
|
|
325
|
+
`Could not fetch Linear teams: ${error instanceof Error ? error.message : String(error)}`,
|
|
326
|
+
);
|
|
327
|
+
consola.info("Falling back to manual Linear team ID.");
|
|
328
|
+
config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
config.linearProjectId = await promptText(
|
|
332
|
+
"Linear project ID (optional, blank = whole team):",
|
|
333
|
+
config.linearProjectId,
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
async function fetchLinearTeams(apiKey: string): Promise<LinearTeam[]> {
|
|
338
|
+
const result = await linearGraphql<{ teams: { nodes: LinearTeam[] } }>(
|
|
339
|
+
apiKey,
|
|
340
|
+
`query Teams {
|
|
341
|
+
teams {
|
|
342
|
+
nodes { id name key }
|
|
343
|
+
}
|
|
344
|
+
}`,
|
|
345
|
+
);
|
|
346
|
+
return result.teams.nodes.sort((a, b) => a.name.localeCompare(b.name));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
async function linearGraphql<T>(apiKey: string, query: string): Promise<T> {
|
|
350
|
+
const response = await fetch("https://api.linear.app/graphql", {
|
|
351
|
+
method: "POST",
|
|
352
|
+
headers: {
|
|
353
|
+
Authorization: apiKey,
|
|
354
|
+
"Content-Type": "application/json",
|
|
355
|
+
},
|
|
356
|
+
body: JSON.stringify({ query }),
|
|
357
|
+
});
|
|
358
|
+
const payload = (await response.json()) as { data?: T; errors?: Array<{ message: string }> };
|
|
359
|
+
if (!response.ok || payload.errors?.length) {
|
|
360
|
+
throw new Error(
|
|
361
|
+
`Linear API failed: ${response.status} ${
|
|
362
|
+
payload.errors?.map((error) => error.message).join("; ") ?? ""
|
|
363
|
+
}`,
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
if (!payload.data) throw new Error("Linear API returned no data.");
|
|
367
|
+
return payload.data;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function formatLinearTeam(team: LinearTeam): string {
|
|
371
|
+
return `${team.name} (${team.key})`;
|
|
372
|
+
}
|
|
373
|
+
|
|
274
374
|
async function setupAutomation(config: AegisCliConfig): Promise<void> {
|
|
275
375
|
printStep("Step 5: GitHub labels Aegis should watch", [
|
|
276
376
|
"Aegis only picks up open issues with both labels.",
|