@nairon-ai/aegis 0.3.0 → 0.4.0

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
@@ -49,8 +49,8 @@ No Cloudflare required for this part.
49
49
 
50
50
  1. `cd` into the product repo Aegis should monitor.
51
51
  2. Run `npx --yes @nairon-ai/aegis@latest init`.
52
- 3. Create a GitHub token for that repo with Contents, Issues, and Pull Requests read/write access.
53
- 4. Run `npx --yes @nairon-ai/aegis@latest setup`.
52
+ 3. Run `npx --yes @nairon-ai/aegis@latest setup`.
53
+ 4. Choose `One-click GitHub App` unless you already know how to create a GitHub token.
54
54
  5. Choose `plan-first` and `minimal` for the first test.
55
55
  6. Add `bug` and `ready to implement` labels to the monitored GitHub repo.
56
56
  7. Create a test bug issue with both labels.
@@ -68,8 +68,8 @@ 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
- - `GitHub token (recommended first test)`: fastest path. Best for proving Aegis can see ready bugs.
72
- - `One-click GitHub App`: best for deployed/team use. 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.
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
  The repo prompt accepts either `owner/repo` or a full GitHub URL like `https://github.com/KeyLead-Team/keylead`.
@@ -165,6 +165,22 @@ npx @nairon-ai/aegis deploy
165
165
 
166
166
  Then configure webhooks using the Worker URL printed by deploy. Full details: [docs/SETUP.md](docs/SETUP.md).
167
167
 
168
+ ## Disconnect Aegis
169
+
170
+ Run this from the product repo to print the shutdown checklist:
171
+
172
+ ```bash
173
+ npx --yes @nairon-ai/aegis@latest disconnect
174
+ ```
175
+
176
+ To fully stop using Aegis:
177
+
178
+ 1. Delete the Cloudflare Worker if deployed: `npx wrangler delete aegis-worker`.
179
+ 2. Uninstall the Aegis GitHub App from the repo, or revoke the GitHub token.
180
+ 3. Delete Aegis webhooks from GitHub, Linear, and Telegram if configured.
181
+ 4. Remove local config: `rm -rf .aegis`.
182
+ 5. Optionally remove Aegis-only labels: `aegis:in-progress`, `aegis:needs-info`, `aegis:blocked`, `aegis:pr-opened`.
183
+
168
184
  ## How Pickup Works
169
185
 
170
186
  Aegis scans every 10 minutes and also reacts to GitHub/Linear webhooks.
@@ -0,0 +1,3 @@
1
+ export declare const disconnectCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export declare function runDisconnectGuide(): void;
3
+ //# sourceMappingURL=disconnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/disconnect.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,qDAQ5B,CAAC;AAEH,wBAAgB,kBAAkB,IAAI,IAAI,CAuDzC"}
@@ -0,0 +1,59 @@
1
+ import { defineCommand } from "citty";
2
+ import { consola } from "consola";
3
+ import { loadConfig } from "../state.js";
4
+ export const disconnectCommand = defineCommand({
5
+ meta: {
6
+ name: "disconnect",
7
+ description: "Show how to fully disconnect Aegis from this repo",
8
+ },
9
+ run() {
10
+ runDisconnectGuide();
11
+ },
12
+ });
13
+ export function runDisconnectGuide() {
14
+ const config = loadConfig();
15
+ const workerName = "aegis-worker";
16
+ const repo = config.monitoredRepo ?? "your GitHub repo";
17
+ consola.log("\n Disconnect Aegis\n");
18
+ consola.log("This prints the safe shutdown checklist. It does not delete anything automatically.\n");
19
+ consola.log("1. Stop the cloud worker");
20
+ consola.log(" If you deployed Aegis, delete the Cloudflare Worker:");
21
+ consola.log(` npx wrangler delete ${workerName}`);
22
+ consola.log(" Also remove any Cloudflare secrets for Aegis if they remain.\n");
23
+ consola.log("2. Remove GitHub access");
24
+ if (config.githubAppId) {
25
+ consola.log(" You used a GitHub App.");
26
+ consola.log(` Open GitHub -> ${repo} -> Settings -> GitHub Apps, then uninstall the Aegis app.`);
27
+ consola.log(" Or open your GitHub account/org settings -> GitHub Apps -> Aegis -> Uninstall.");
28
+ }
29
+ else if (config.githubToken) {
30
+ consola.log(" You used a GitHub token.");
31
+ consola.log(" Open https://github.com/settings/personal-access-tokens");
32
+ consola.log(" Find the token you created for Aegis and revoke/delete it.");
33
+ }
34
+ else {
35
+ consola.log(" No GitHub token/app is saved in local config.");
36
+ }
37
+ consola.log("");
38
+ consola.log("3. Remove webhooks");
39
+ consola.log(` GitHub: open ${repo} -> Settings -> Webhooks, delete the Aegis webhook.`);
40
+ if (config.linearApiKey) {
41
+ consola.log(" Linear: open Linear Settings -> API/Webhooks, delete the Aegis webhook.");
42
+ }
43
+ if (config.telegramBotToken) {
44
+ consola.log(" Telegram: remove the webhook:");
45
+ consola.log(' curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/deleteWebhook"');
46
+ }
47
+ consola.log("");
48
+ consola.log("4. Remove local config from this repo");
49
+ consola.log(" rm -rf .aegis");
50
+ consola.log(" If you installed Aegis as a dev dependency:");
51
+ consola.log(" npm remove @nairon-ai/aegis");
52
+ consola.log("");
53
+ consola.log("5. Optional cleanup");
54
+ consola.log(" Leave labels like bug and ready to implement if your team uses them.");
55
+ consola.log(" Remove Aegis-only labels if you do not want them:");
56
+ consola.log(" aegis:in-progress, aegis:needs-info, aegis:blocked, aegis:pr-opened");
57
+ consola.log("");
58
+ }
59
+ //# sourceMappingURL=disconnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/cli/commands/disconnect.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AA0FA,eAAO,MAAM,WAAW,qDAKtB,CAAC;AAEH,wBAAgB,OAAO,IAAI,IAAI,CAa9B"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAkGA,eAAO,MAAM,WAAW,qDAKtB,CAAC;AAEH,wBAAgB,OAAO,IAAI,IAAI,CAc9B"}
@@ -84,6 +84,14 @@ Telegram: https://YOUR_WORKER.workers.dev/webhook/telegram
84
84
  \`\`\`
85
85
 
86
86
  Keep \`.aegis/.env\` out of git.
87
+
88
+ ## Disconnect
89
+
90
+ \`\`\`bash
91
+ npx --yes @nairon-ai/aegis@latest disconnect
92
+ \`\`\`
93
+
94
+ This prints the checklist for removing the Worker, GitHub access, webhooks, and local config.
87
95
  `;
88
96
  export const initCommand = defineCommand({
89
97
  meta: { name: "init", description: "Scaffold .aegis config in this repo" },
@@ -103,6 +111,7 @@ export function runInit() {
103
111
  consola.log(" 3. create a tiny test bug issue");
104
112
  consola.log(" 4. npx --yes @nairon-ai/aegis@latest pickup --dry-run");
105
113
  consola.log(" 5. npx --yes @nairon-ai/aegis@latest deploy");
114
+ consola.log(" Later: npx --yes @nairon-ai/aegis@latest disconnect");
106
115
  consola.log("");
107
116
  }
108
117
  function writeIfMissing(path, contents) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CnB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCd,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC1E,KAAK,CAAC,GAAG;QACR,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC,CAAC;AAEH,MAAM,UAAU,OAAO;IACtB,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC;IAC1E,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACxE,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO;IACR,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CnB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Cd,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC1E,KAAK,CAAC,GAAG;QACR,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC,CAAC;AAEH,MAAM,UAAU,OAAO;IACtB,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC;IAC1E,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACxE,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO;IACR,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,qDAKvB,CAAC;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBpD"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,qDAKvB,CAAC;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBpD"}
@@ -28,28 +28,50 @@ export async function runSetupWizard() {
28
28
  consola.log("\nNext:");
29
29
  consola.log(" 1. Create labels in the monitored repo: bug, ready to implement");
30
30
  consola.log(" 2. Create a test GitHub issue with both labels");
31
- consola.log(" 3. npx @nairon-ai/aegis pickup --dry-run");
32
- consola.log(" 4. npx @nairon-ai/aegis deploy");
31
+ consola.log(" 3. npx --yes @nairon-ai/aegis@latest pickup --dry-run");
32
+ consola.log(" 4. npx --yes @nairon-ai/aegis@latest deploy");
33
33
  consola.log(" 5. Add GitHub/Linear/Telegram webhook URLs after deploy");
34
+ consola.log(" Later: npx --yes @nairon-ai/aegis@latest disconnect");
34
35
  consola.log("");
35
36
  }
36
37
  async function setupRepo(config) {
37
- config.monitoredRepo = normalizeGitHubRepo(await promptText("GitHub repo to monitor (owner/repo):", config.monitoredRepo));
38
- config.baseBranch = await promptText("Base branch:", config.baseBranch ?? "main");
38
+ printStep("Step 1: choose the GitHub repo Aegis should fix", [
39
+ "This is your product repo, not the Aegis repo.",
40
+ "Paste the GitHub URL from your browser, or type owner/repo.",
41
+ "Example: https://github.com/KeyLead-Team/keylead",
42
+ ]);
43
+ config.monitoredRepo = normalizeGitHubRepo(await promptText("Repo to monitor:", config.monitoredRepo));
44
+ printStep("Step 2: choose the base branch", [
45
+ "This is the branch Aegis will open PRs against.",
46
+ "Most repos use main. If your repo uses master, develop, or staging, enter that.",
47
+ ]);
48
+ config.baseBranch = await promptText("Base branch:", config.baseBranch ?? detectCurrentBranch());
39
49
  }
40
50
  async function setupGitHub(config) {
41
- consola.log("\nGitHub access");
42
- consola.info("For the first test, a fine-grained token is fastest. For deployed/team use, use the one-click GitHub App flow.");
51
+ printStep("Step 3: give Aegis GitHub access", [
52
+ "Aegis needs permission to read issues, create branches, push fixes, and open PRs.",
53
+ "If you are unsure, choose the one-click GitHub App. It opens GitHub in your browser and avoids manual tokens.",
54
+ "Use a GitHub token only if you already know how to create fine-grained tokens.",
55
+ ]);
43
56
  const method = (await consola.prompt("Auth method:", {
44
57
  type: "select",
45
58
  options: [
46
- { label: "GitHub token (recommended first test)", value: "token" },
47
- { label: "One-click GitHub App (best for deployed/team use)", value: "app-flow" },
59
+ { label: "One-click GitHub App (recommended)", value: "app-flow" },
60
+ { label: "GitHub token (quick local test)", value: "token" },
48
61
  { label: "Paste existing GitHub App credentials", value: "app-manual" },
49
62
  ],
50
63
  }));
51
64
  if (method === "token") {
52
- config.githubToken = await promptText("GitHub token with contents/issues/PR read-write access:", config.githubToken);
65
+ printStep("Create a fine-grained GitHub token", [
66
+ "Open: https://github.com/settings/personal-access-tokens/new",
67
+ "Token name: Aegis",
68
+ "Repository access: Only select repositories, then choose the repo from Step 1.",
69
+ "Repository permissions: Contents read/write, Issues read/write, Pull requests read/write.",
70
+ "Metadata stays read-only automatically.",
71
+ "Click Generate token, then paste the token here. It usually starts with github_pat_.",
72
+ "Keep it secret. Aegis saves it to .aegis/.env, which should not be committed.",
73
+ ]);
74
+ config.githubToken = await promptText("Paste GitHub token:", config.githubToken);
53
75
  config.githubAppId = undefined;
54
76
  config.githubAppPrivateKey = undefined;
55
77
  config.githubInstallationId = undefined;
@@ -59,6 +81,13 @@ async function setupGitHub(config) {
59
81
  consola.warn("Set the monitored repo first.");
60
82
  return;
61
83
  }
84
+ printStep("Create the GitHub App in your browser", [
85
+ "Aegis will open a local setup page.",
86
+ "Click Create GitHub App.",
87
+ "Then click Install and choose Only select repositories.",
88
+ "Select the repo from Step 1, then approve the install.",
89
+ "When GitHub sends you back, this CLI saves the credentials automatically.",
90
+ ]);
62
91
  try {
63
92
  const app = await runGitHubAppFlow({
64
93
  monitoredRepo: config.monitoredRepo,
@@ -84,6 +113,11 @@ async function setupGitHub(config) {
84
113
  consola.info("GitHub webhook secret is already configured.");
85
114
  return;
86
115
  }
116
+ printStep("GitHub webhook secret", [
117
+ "This protects webhook calls from GitHub after you deploy.",
118
+ "Choose yes and Aegis will generate a random secret for you.",
119
+ "You do not need to remember it; it is saved in .aegis/.env.",
120
+ ]);
87
121
  const generateSecret = (await consola.prompt("Generate a GitHub webhook secret?", {
88
122
  type: "confirm",
89
123
  initial: !config.githubWebhookSecret,
@@ -96,6 +130,11 @@ async function setupGitHub(config) {
96
130
  }
97
131
  }
98
132
  async function setupGitHubAppManual(config) {
133
+ printStep("Paste existing GitHub App credentials", [
134
+ "Use this only if you already created a GitHub App manually.",
135
+ "You need the App ID, the private key .pem file, and the installation ID.",
136
+ "If that sounds unfamiliar, cancel and rerun setup with the one-click GitHub App option.",
137
+ ]);
99
138
  config.githubAppId = await promptText("GitHub App ID:", config.githubAppId);
100
139
  const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
101
140
  if (keyPath) {
@@ -115,13 +154,26 @@ async function setupGitHubAppManual(config) {
115
154
  config.githubToken = undefined;
116
155
  }
117
156
  async function setupLinear(config) {
157
+ printStep("Step 4: optional Linear connection", [
158
+ "Use this only if your team tracks bugs in Linear.",
159
+ "If you only use GitHub Issues, choose no.",
160
+ "You can rerun setup later to add Linear.",
161
+ ]);
118
162
  const enable = (await consola.prompt("Connect Linear too?", {
119
163
  type: "confirm",
120
164
  initial: Boolean(config.linearApiKey),
121
165
  }));
122
166
  if (!enable)
123
167
  return;
168
+ printStep("Linear API key", [
169
+ "Open Linear settings, create a personal API key, then paste it here.",
170
+ "Aegis uses it to read ready bug tickets and comment with status updates.",
171
+ ]);
124
172
  config.linearApiKey = await promptText("Linear API key:", config.linearApiKey);
173
+ printStep("Linear webhook secret", [
174
+ "This protects Linear webhook calls after deploy.",
175
+ "Choose yes and Aegis will generate one.",
176
+ ]);
125
177
  const generateSecret = (await consola.prompt("Generate a Linear webhook signing secret?", {
126
178
  type: "confirm",
127
179
  initial: !config.linearWebhookSecret,
@@ -129,8 +181,16 @@ async function setupLinear(config) {
129
181
  config.linearWebhookSecret = generateSecret
130
182
  ? crypto.randomUUID()
131
183
  : await promptText("Linear webhook signing secret:", config.linearWebhookSecret);
184
+ printStep("Linear team/project", [
185
+ "Team ID is required so Aegis knows which Linear team to watch.",
186
+ "Project ID is optional. Leave it blank to watch the whole team.",
187
+ ]);
132
188
  config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
133
189
  config.linearProjectId = await promptText("Linear project ID (optional):", config.linearProjectId);
190
+ printStep("Linear statuses and labels", [
191
+ "These names must match your Linear workflow.",
192
+ "If your team uses the default names, press Enter through these prompts.",
193
+ ]);
134
194
  config.linearReadyStatus = await promptText("Linear ready status name:", config.linearReadyStatus ?? "Ready to Implement");
135
195
  config.linearInProgressStatus = await promptText("Linear in-progress status name:", config.linearInProgressStatus ?? "In Progress");
136
196
  config.linearNeedsInfoStatus = await promptText("Linear needs-info status name:", config.linearNeedsInfoStatus ?? "Needs Info");
@@ -138,8 +198,18 @@ async function setupLinear(config) {
138
198
  config.linearBugLabel = await promptText("Linear bug label:", config.linearBugLabel ?? "bug");
139
199
  }
140
200
  async function setupAutomation(config) {
201
+ printStep("Step 5: GitHub labels Aegis should watch", [
202
+ "Aegis only picks up open issues with both labels.",
203
+ "Default labels are bug and ready to implement.",
204
+ "Create these labels in GitHub after setup if they do not exist yet.",
205
+ ]);
141
206
  config.readyLabel = await promptText("GitHub ready label:", config.readyLabel ?? "ready to implement");
142
207
  config.bugLabel = await promptText("GitHub bug label:", config.bugLabel ?? "bug");
208
+ printStep("Step 6: automation mode", [
209
+ "Choose plan-first for the first real use.",
210
+ "Plan-first means Aegis investigates and asks for approval before changing code.",
211
+ "Auto-low-risk is for later, after you trust the workflow.",
212
+ ]);
143
213
  config.automationMode = (await consola.prompt("Automation mode:", {
144
214
  type: "select",
145
215
  options: [
@@ -148,10 +218,24 @@ async function setupAutomation(config) {
148
218
  ],
149
219
  initial: config.automationMode ?? "plan-first",
150
220
  }));
221
+ printStep("Step 7: AI model", [
222
+ "Use the default unless you know you want a different Flue-supported model.",
223
+ "You also need the matching provider API key.",
224
+ ]);
151
225
  config.agentModel = await promptText("Flue model:", config.agentModel ?? "openai/gpt-5.1");
152
- config.openaiApiKey = await promptText("OpenAI API key (if using an OpenAI model):", config.openaiApiKey);
226
+ printStep("OpenAI API key", [
227
+ "Paste your OpenAI API key if using an openai/... model.",
228
+ "It is stored in .aegis/.env and later copied to Cloudflare secrets during deploy.",
229
+ "Leave blank only if you configured a different model provider yourself.",
230
+ ]);
231
+ config.openaiApiKey = await promptText("OpenAI API key:", config.openaiApiKey);
153
232
  }
154
233
  async function setupProductionContext(config) {
234
+ printStep("Step 8: production context", [
235
+ "Start with Minimal. It uses only issue text and repo code.",
236
+ "Production context lets Aegis inspect read-only database data and Vercel logs.",
237
+ "Do not choose Production until the basic dry-run works.",
238
+ ]);
155
239
  const profile = (await consola.prompt("Context profile:", {
156
240
  type: "select",
157
241
  options: [
@@ -163,21 +247,37 @@ async function setupProductionContext(config) {
163
247
  config.contextProfile = profile;
164
248
  if (profile !== "production")
165
249
  return;
166
- consola.warn("Use a read-only DB user or replica. Do not give Aegis write access.");
250
+ printStep("Production context details", [
251
+ "Use a read-only DB user or read replica. Do not give Aegis write access.",
252
+ "All fields here are optional. Leave unknown fields blank.",
253
+ ]);
167
254
  config.databaseUrl = await promptText("Read-only DATABASE_URL (optional):", config.databaseUrl);
168
255
  config.vercelToken = await promptText("Vercel API token (optional):", config.vercelToken);
169
256
  config.vercelProjectId = await promptText("Vercel project ID (optional):", config.vercelProjectId);
170
257
  config.vercelTeamId = await promptText("Vercel team ID (optional):", config.vercelTeamId);
171
258
  }
172
259
  async function setupTelegram(config) {
260
+ printStep("Step 9: optional Telegram approval pings", [
261
+ "Use this if you want Aegis to message you when it needs approval.",
262
+ "For the first local dry-run, choose no.",
263
+ "You can rerun setup later to add Telegram.",
264
+ ]);
173
265
  const enable = (await consola.prompt("Enable Telegram approval pings?", {
174
266
  type: "confirm",
175
267
  initial: Boolean(config.telegramBotToken),
176
268
  }));
177
269
  if (!enable)
178
270
  return;
271
+ printStep("Telegram bot", [
272
+ "Create a bot with BotFather, paste the bot token, then paste your chat ID.",
273
+ "Aegis will send short approval summaries to that chat.",
274
+ ]);
179
275
  config.telegramBotToken = await promptText("Telegram bot token:", config.telegramBotToken);
180
276
  config.telegramChatId = await promptText("Telegram chat ID:", config.telegramChatId);
277
+ printStep("Telegram webhook secret", [
278
+ "This protects Telegram webhook calls after deploy.",
279
+ "Choose yes and Aegis will generate one.",
280
+ ]);
181
281
  const generateSecret = (await consola.prompt("Generate a Telegram webhook secret?", {
182
282
  type: "confirm",
183
283
  initial: !config.telegramWebhookSecret,
@@ -187,6 +287,11 @@ async function setupTelegram(config) {
187
287
  : await promptText("Telegram webhook secret:", config.telegramWebhookSecret);
188
288
  }
189
289
  async function setupWorker(config) {
290
+ printStep("Step 10: Worker URL", [
291
+ "Leave this blank before your first deploy.",
292
+ "After deploy, Aegis saves the Worker URL automatically.",
293
+ "If you are rerunning setup after deploy, paste the workers.dev URL here.",
294
+ ]);
190
295
  config.workerUrl = await promptText("Deployed Worker URL (can fill after first deploy):", config.workerUrl);
191
296
  }
192
297
  async function promptText(message, initial) {
@@ -209,4 +314,23 @@ function normalizeGitHubRepo(input) {
209
314
  return `${shorthandMatch[1]}/${shorthandMatch[2]}`;
210
315
  return value;
211
316
  }
317
+ function detectCurrentBranch() {
318
+ try {
319
+ const branch = readFileSync(".git/HEAD", "utf-8").trim();
320
+ if (branch.startsWith("ref: refs/heads/")) {
321
+ return branch.replace("ref: refs/heads/", "");
322
+ }
323
+ }
324
+ catch {
325
+ // Ignore and fall back to the normal default.
326
+ }
327
+ return "main";
328
+ }
329
+ function printStep(title, lines) {
330
+ consola.log(`\n${title}`);
331
+ for (const line of lines) {
332
+ consola.log(` - ${line}`);
333
+ }
334
+ consola.log("");
335
+ }
212
336
  //# sourceMappingURL=setup.js.map
@@ -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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"}
@@ -1,14 +1,18 @@
1
1
  #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
2
4
  import { defineCommand, runMain } from "citty";
3
5
  import { deployCommand } from "./commands/deploy.js";
6
+ import { disconnectCommand } from "./commands/disconnect.js";
4
7
  import { initCommand } from "./commands/init.js";
5
8
  import { pickupCommand } from "./commands/pickup.js";
6
9
  import { setupCommand } from "./commands/setup.js";
7
10
  import { statusCommand } from "./commands/status.js";
11
+ import { findPackageRoot } from "./paths.js";
8
12
  const main = defineCommand({
9
13
  meta: {
10
14
  name: "aegis",
11
- version: "0.2.0",
15
+ version: getPackageVersion(),
12
16
  description: "Aegis - self-hosted AFK bug-fixing agent",
13
17
  },
14
18
  default: "menu",
@@ -18,6 +22,7 @@ const main = defineCommand({
18
22
  pickup: pickupCommand,
19
23
  status: statusCommand,
20
24
  deploy: deployCommand,
25
+ disconnect: disconnectCommand,
21
26
  menu: defineCommand({
22
27
  meta: { name: "menu", description: "Open the interactive menu", hidden: true },
23
28
  async run() {
@@ -33,4 +38,14 @@ const main = defineCommand({
33
38
  },
34
39
  });
35
40
  runMain(main);
41
+ function getPackageVersion() {
42
+ try {
43
+ const packageRoot = findPackageRoot(import.meta.url);
44
+ const pkg = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf-8"));
45
+ return pkg.version ?? "0.0.0";
46
+ }
47
+ catch {
48
+ return "0.0.0";
49
+ }
50
+ }
36
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,0CAA0C;KACvD;IACD,OAAO,EAAE,MAAM;IACf,WAAW,EAAE;QACZ,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,aAAa,CAAC;YACnB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9E,KAAK,CAAC,GAAG;gBACR,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC5E,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAClC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAC/D,MAAM,cAAc,EAAE,CAAC;oBACvB,OAAO;gBACR,CAAC;gBACD,MAAM,kBAAkB,EAAE,CAAC;YAC5B,CAAC;SACD,CAAC;KACF;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iBAAiB,EAAE;QAC5B,WAAW,EAAE,0CAA0C;KACvD;IACD,OAAO,EAAE,MAAM;IACf,WAAW,EAAE;QACZ,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,iBAAiB;QAC7B,IAAI,EAAE,aAAa,CAAC;YACnB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9E,KAAK,CAAC,GAAG;gBACR,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC5E,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAClC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAC/D,MAAM,cAAc,EAAE,CAAC;oBACvB,OAAO;gBACR,CAAC;gBACD,MAAM,kBAAkB,EAAE,CAAC;YAC5B,CAAC;SACD,CAAC;KACF;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC;AAEd,SAAS,iBAAiB;IACzB,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAEjF,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/cli/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAyG3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA0CvD;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAoB7C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAUlD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BxD"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/cli/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAyG3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA0CvD;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAoB7C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAUlD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+BxD"}
@@ -192,6 +192,7 @@ export async function runInteractiveMenu() {
192
192
  { label: "Run setup", value: "setup" },
193
193
  { label: "View status", value: "status" },
194
194
  { label: "Deploy worker", value: "deploy" },
195
+ { label: "Disconnect Aegis", value: "disconnect" },
195
196
  ],
196
197
  });
197
198
  if (choice === "pickup") {
@@ -210,5 +211,9 @@ export async function runInteractiveMenu() {
210
211
  const { runDeploy } = await import("./commands/deploy.js");
211
212
  await runDeploy();
212
213
  }
214
+ if (choice === "disconnect") {
215
+ const { runDisconnectGuide } = await import("./commands/disconnect.js");
216
+ runDisconnectGuide();
217
+ }
213
218
  }
214
219
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/cli/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/cli/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAY3E,MAAM,UAAU,UAAU;IACzB,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,QAAQ,GAAG,EAAE,CAAC;YACb,KAAK,kBAAkB;gBACtB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;gBACzB,MAAM;YACP,KAAK,gBAAgB;gBACpB,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC7B,MAAM;YACP,KAAK,aAAa;gBACjB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC1B,MAAM;YACP,KAAK,iBAAiB;gBACrB,MAAM,CAAC,cAAc,GAAG,KAAyC,CAAC;gBAClE,MAAM;YACP,KAAK,iBAAiB;gBACrB,MAAM,CAAC,cAAc,GAAG,KAAyC,CAAC;gBAClE,MAAM;YACP,KAAK,aAAa;gBACjB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC1B,MAAM;YACP,KAAK,WAAW;gBACf,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,MAAM;YACP,KAAK,eAAe;gBACnB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,MAAM;YACP,KAAK,wBAAwB;gBAC5B,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACnC,MAAM;YACP,KAAK,wBAAwB;gBAC5B,MAAM,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBACpC,MAAM;YACP,KAAK,uBAAuB;gBAC3B,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACnC,MAAM;YACP,KAAK,cAAc;gBAClB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,MAAM;YACP,KAAK,gBAAgB;gBACpB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5B,MAAM;YACP,KAAK,uBAAuB;gBAC3B,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACnC,MAAM;YACP,KAAK,gBAAgB;gBACpB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5B,MAAM;YACP,KAAK,mBAAmB;gBACvB,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC/B,MAAM;YACP,KAAK,qBAAqB;gBACzB,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACjC,MAAM;YACP,KAAK,2BAA2B;gBAC/B,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACtC,MAAM;YACP,KAAK,0BAA0B;gBAC9B,MAAM,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBACrC,MAAM;YACP,KAAK,uBAAuB;gBAC3B,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACnC,MAAM;YACP,KAAK,kBAAkB;gBACtB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC9B,MAAM;YACP,KAAK,oBAAoB;gBACxB,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAChC,MAAM;YACP,KAAK,kBAAkB;gBACtB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC9B,MAAM;YACP,KAAK,yBAAyB;gBAC7B,MAAM,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBACrC,MAAM;YACP,KAAK,cAAc;gBAClB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,MAAM;YACP,KAAK,cAAc;gBAClB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,MAAM;YACP,KAAK,mBAAmB;gBACvB,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC/B,MAAM;YACP,KAAK,gBAAgB;gBACpB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5B,MAAM;YACP,KAAK,aAAa;gBACjB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC1B,MAAM;YACP,KAAK,gBAAgB;gBACpB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5B,MAAM;QACR,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAsB;IAChD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG;QACb,iDAAiD;QACjD,qEAAqE;QACrE,EAAE;KACF,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,KAAyB,EAAE,EAAE;QACtD,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5C,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC9C,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC9C,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC1D,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC3D,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACzD,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACzD,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChE,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC9D,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACzD,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/C,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnD,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/C,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,aAAa,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CACrB,MAAM,CAAC,aAAa;QACnB,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,oBAAoB,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,CACrB,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO;QACN,MAAM;QACN,MAAM;QACN,QAAQ;QACR,UAAU;QACV,MAAM;QACN,QAAQ,EAAE,MAAM;QAChB,MAAM;KACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC3C,MAAM,KAAK,GAAG,CAAC,EAAW,EAAE,KAAa,EAAE,EAAE,CAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;IACrD,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACpD,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;IAClE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;IACpE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,4BAA4B,EAAE;QACjE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACR,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE;YACtC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;YACzC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC3C,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;SAClD;KACD,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,cAAc,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC7B,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACxE,kBAAkB,EAAE,CAAC;IACtB,CAAC;AACF,CAAC"}
package/docs/SETUP.md CHANGED
@@ -88,7 +88,7 @@ Pick one path.
88
88
 
89
89
  ### Option A: GitHub Token
90
90
 
91
- Fastest first setup. Use this for the first local dry-run.
91
+ Use this only if you already know how to create GitHub tokens. Most users should use the one-click GitHub App flow.
92
92
 
93
93
  Create a fine-grained personal access token:
94
94
 
@@ -102,7 +102,7 @@ The token lets Aegis scan issues, create branches, push fixes, and open PRs.
102
102
 
103
103
  ### Option B: One-Click GitHub App
104
104
 
105
- Better for deployed/team use. The setup wizard can create the GitHub App for you.
105
+ Recommended for most users. The setup wizard can create the GitHub App for you.
106
106
 
107
107
  When `aegis setup` asks for `Auth method`, choose:
108
108
 
@@ -141,7 +141,7 @@ Then:
141
141
  4. Save the Installation ID from the installation URL.
142
142
  5. Keep the private key `.pem` available for setup.
143
143
 
144
- If you do not know which one to pick, use a GitHub token first, then move to a GitHub App once the flow works.
144
+ If you do not know which one to pick, use the one-click GitHub App.
145
145
 
146
146
  ## Step 4: Run The Setup Wizard
147
147
 
@@ -153,7 +153,7 @@ Important answers:
153
153
 
154
154
  - `GitHub repo to monitor`: the app repo, for example `acme/web-app` or `https://github.com/acme/web-app`
155
155
  - `Base branch`: usually `main`
156
- - GitHub auth: use `GitHub token` for the first test, or `One-click GitHub App` for deployed/team use
156
+ - GitHub auth: use `One-click GitHub App` unless you already know how to create a fine-grained GitHub token
157
157
  - `GitHub webhook secret`: generate one and keep it in `.aegis/.env`
158
158
  - `Automation mode`: start with `plan-first`
159
159
  - `Context profile`: start with `minimal`
@@ -403,6 +403,51 @@ Rules:
403
403
  - Do not provide write credentials.
404
404
  - Paste provider links/errors into the issue whenever possible.
405
405
 
406
+ ## Disconnect Aegis
407
+
408
+ Run this from the product repo:
409
+
410
+ ```bash
411
+ npx --yes @nairon-ai/aegis@latest disconnect
412
+ ```
413
+
414
+ That prints the safe shutdown checklist. It does not delete anything automatically.
415
+
416
+ Manual checklist:
417
+
418
+ 1. Stop the Worker if deployed:
419
+
420
+ ```bash
421
+ npx wrangler delete aegis-worker
422
+ ```
423
+
424
+ 2. Remove GitHub access:
425
+
426
+ - If you used the one-click GitHub App: open the repo's GitHub settings, go to GitHub Apps, and uninstall the Aegis app.
427
+ - If you used a GitHub token: open https://github.com/settings/personal-access-tokens and revoke the Aegis token.
428
+
429
+ 3. Remove webhooks:
430
+
431
+ - GitHub: repo settings -> Webhooks -> delete Aegis webhook.
432
+ - Linear: Linear settings -> API/Webhooks -> delete Aegis webhook.
433
+ - Telegram:
434
+
435
+ ```bash
436
+ curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/deleteWebhook"
437
+ ```
438
+
439
+ 4. Remove local config:
440
+
441
+ ```bash
442
+ rm -rf .aegis
443
+ npm remove @nairon-ai/aegis
444
+ ```
445
+
446
+ 5. Optional cleanup:
447
+
448
+ - Keep `bug` and `ready to implement` if your team uses them.
449
+ - Remove Aegis-only labels if you want: `aegis:in-progress`, `aegis:needs-info`, `aegis:blocked`, `aegis:pr-opened`.
450
+
406
451
  ## Troubleshooting
407
452
 
408
453
  `No ready bugs found.`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nairon-ai/aegis",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Self-hosted AFK bug-fixing agent for GitHub Issues and Linear",
5
5
  "type": "module",
6
6
  "repository": {
@@ -0,0 +1,70 @@
1
+ import { defineCommand } from "citty";
2
+ import { consola } from "consola";
3
+ import { loadConfig } from "../state.js";
4
+
5
+ export const disconnectCommand = defineCommand({
6
+ meta: {
7
+ name: "disconnect",
8
+ description: "Show how to fully disconnect Aegis from this repo",
9
+ },
10
+ run() {
11
+ runDisconnectGuide();
12
+ },
13
+ });
14
+
15
+ export function runDisconnectGuide(): void {
16
+ const config = loadConfig();
17
+ const workerName = "aegis-worker";
18
+ const repo = config.monitoredRepo ?? "your GitHub repo";
19
+
20
+ consola.log("\n Disconnect Aegis\n");
21
+ consola.log(
22
+ "This prints the safe shutdown checklist. It does not delete anything automatically.\n",
23
+ );
24
+
25
+ consola.log("1. Stop the cloud worker");
26
+ consola.log(" If you deployed Aegis, delete the Cloudflare Worker:");
27
+ consola.log(` npx wrangler delete ${workerName}`);
28
+ consola.log(" Also remove any Cloudflare secrets for Aegis if they remain.\n");
29
+
30
+ consola.log("2. Remove GitHub access");
31
+ if (config.githubAppId) {
32
+ consola.log(" You used a GitHub App.");
33
+ consola.log(
34
+ ` Open GitHub -> ${repo} -> Settings -> GitHub Apps, then uninstall the Aegis app.`,
35
+ );
36
+ consola.log(
37
+ " Or open your GitHub account/org settings -> GitHub Apps -> Aegis -> Uninstall.",
38
+ );
39
+ } else if (config.githubToken) {
40
+ consola.log(" You used a GitHub token.");
41
+ consola.log(" Open https://github.com/settings/personal-access-tokens");
42
+ consola.log(" Find the token you created for Aegis and revoke/delete it.");
43
+ } else {
44
+ consola.log(" No GitHub token/app is saved in local config.");
45
+ }
46
+ consola.log("");
47
+
48
+ consola.log("3. Remove webhooks");
49
+ consola.log(` GitHub: open ${repo} -> Settings -> Webhooks, delete the Aegis webhook.`);
50
+ if (config.linearApiKey) {
51
+ consola.log(" Linear: open Linear Settings -> API/Webhooks, delete the Aegis webhook.");
52
+ }
53
+ if (config.telegramBotToken) {
54
+ consola.log(" Telegram: remove the webhook:");
55
+ consola.log(' curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/deleteWebhook"');
56
+ }
57
+ consola.log("");
58
+
59
+ consola.log("4. Remove local config from this repo");
60
+ consola.log(" rm -rf .aegis");
61
+ consola.log(" If you installed Aegis as a dev dependency:");
62
+ consola.log(" npm remove @nairon-ai/aegis");
63
+ consola.log("");
64
+
65
+ consola.log("5. Optional cleanup");
66
+ consola.log(" Leave labels like bug and ready to implement if your team uses them.");
67
+ consola.log(" Remove Aegis-only labels if you do not want them:");
68
+ consola.log(" aegis:in-progress, aegis:needs-info, aegis:blocked, aegis:pr-opened");
69
+ consola.log("");
70
+ }
@@ -86,6 +86,14 @@ Telegram: https://YOUR_WORKER.workers.dev/webhook/telegram
86
86
  \`\`\`
87
87
 
88
88
  Keep \`.aegis/.env\` out of git.
89
+
90
+ ## Disconnect
91
+
92
+ \`\`\`bash
93
+ npx --yes @nairon-ai/aegis@latest disconnect
94
+ \`\`\`
95
+
96
+ This prints the checklist for removing the Worker, GitHub access, webhooks, and local config.
89
97
  `;
90
98
 
91
99
  export const initCommand = defineCommand({
@@ -107,6 +115,7 @@ export function runInit(): void {
107
115
  consola.log(" 3. create a tiny test bug issue");
108
116
  consola.log(" 4. npx --yes @nairon-ai/aegis@latest pickup --dry-run");
109
117
  consola.log(" 5. npx --yes @nairon-ai/aegis@latest deploy");
118
+ consola.log(" Later: npx --yes @nairon-ai/aegis@latest disconnect");
110
119
  consola.log("");
111
120
  }
112
121
 
@@ -33,38 +33,56 @@ export async function runSetupWizard(): Promise<void> {
33
33
  consola.log("\nNext:");
34
34
  consola.log(" 1. Create labels in the monitored repo: bug, ready to implement");
35
35
  consola.log(" 2. Create a test GitHub issue with both labels");
36
- consola.log(" 3. npx @nairon-ai/aegis pickup --dry-run");
37
- consola.log(" 4. npx @nairon-ai/aegis deploy");
36
+ consola.log(" 3. npx --yes @nairon-ai/aegis@latest pickup --dry-run");
37
+ consola.log(" 4. npx --yes @nairon-ai/aegis@latest deploy");
38
38
  consola.log(" 5. Add GitHub/Linear/Telegram webhook URLs after deploy");
39
+ consola.log(" Later: npx --yes @nairon-ai/aegis@latest disconnect");
39
40
  consola.log("");
40
41
  }
41
42
 
42
43
  async function setupRepo(config: AegisCliConfig): Promise<void> {
44
+ printStep("Step 1: choose the GitHub repo Aegis should fix", [
45
+ "This is your product repo, not the Aegis repo.",
46
+ "Paste the GitHub URL from your browser, or type owner/repo.",
47
+ "Example: https://github.com/KeyLead-Team/keylead",
48
+ ]);
43
49
  config.monitoredRepo = normalizeGitHubRepo(
44
- await promptText("GitHub repo to monitor (owner/repo):", config.monitoredRepo),
50
+ await promptText("Repo to monitor:", config.monitoredRepo),
45
51
  );
46
- config.baseBranch = await promptText("Base branch:", config.baseBranch ?? "main");
52
+
53
+ printStep("Step 2: choose the base branch", [
54
+ "This is the branch Aegis will open PRs against.",
55
+ "Most repos use main. If your repo uses master, develop, or staging, enter that.",
56
+ ]);
57
+ config.baseBranch = await promptText("Base branch:", config.baseBranch ?? detectCurrentBranch());
47
58
  }
48
59
 
49
60
  async function setupGitHub(config: AegisCliConfig): Promise<void> {
50
- consola.log("\nGitHub access");
51
- consola.info(
52
- "For the first test, a fine-grained token is fastest. For deployed/team use, use the one-click GitHub App flow.",
53
- );
61
+ printStep("Step 3: give Aegis GitHub access", [
62
+ "Aegis needs permission to read issues, create branches, push fixes, and open PRs.",
63
+ "If you are unsure, choose the one-click GitHub App. It opens GitHub in your browser and avoids manual tokens.",
64
+ "Use a GitHub token only if you already know how to create fine-grained tokens.",
65
+ ]);
54
66
  const method = (await consola.prompt("Auth method:", {
55
67
  type: "select",
56
68
  options: [
57
- { label: "GitHub token (recommended first test)", value: "token" },
58
- { label: "One-click GitHub App (best for deployed/team use)", value: "app-flow" },
69
+ { label: "One-click GitHub App (recommended)", value: "app-flow" },
70
+ { label: "GitHub token (quick local test)", value: "token" },
59
71
  { label: "Paste existing GitHub App credentials", value: "app-manual" },
60
72
  ],
61
73
  })) as string;
62
74
 
63
75
  if (method === "token") {
64
- config.githubToken = await promptText(
65
- "GitHub token with contents/issues/PR read-write access:",
66
- config.githubToken,
67
- );
76
+ printStep("Create a fine-grained GitHub token", [
77
+ "Open: https://github.com/settings/personal-access-tokens/new",
78
+ "Token name: Aegis",
79
+ "Repository access: Only select repositories, then choose the repo from Step 1.",
80
+ "Repository permissions: Contents read/write, Issues read/write, Pull requests read/write.",
81
+ "Metadata stays read-only automatically.",
82
+ "Click Generate token, then paste the token here. It usually starts with github_pat_.",
83
+ "Keep it secret. Aegis saves it to .aegis/.env, which should not be committed.",
84
+ ]);
85
+ config.githubToken = await promptText("Paste GitHub token:", config.githubToken);
68
86
  config.githubAppId = undefined;
69
87
  config.githubAppPrivateKey = undefined;
70
88
  config.githubInstallationId = undefined;
@@ -73,6 +91,13 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
73
91
  consola.warn("Set the monitored repo first.");
74
92
  return;
75
93
  }
94
+ printStep("Create the GitHub App in your browser", [
95
+ "Aegis will open a local setup page.",
96
+ "Click Create GitHub App.",
97
+ "Then click Install and choose Only select repositories.",
98
+ "Select the repo from Step 1, then approve the install.",
99
+ "When GitHub sends you back, this CLI saves the credentials automatically.",
100
+ ]);
76
101
  try {
77
102
  const app = await runGitHubAppFlow({
78
103
  monitoredRepo: config.monitoredRepo,
@@ -98,6 +123,11 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
98
123
  return;
99
124
  }
100
125
 
126
+ printStep("GitHub webhook secret", [
127
+ "This protects webhook calls from GitHub after you deploy.",
128
+ "Choose yes and Aegis will generate a random secret for you.",
129
+ "You do not need to remember it; it is saved in .aegis/.env.",
130
+ ]);
101
131
  const generateSecret = (await consola.prompt("Generate a GitHub webhook secret?", {
102
132
  type: "confirm",
103
133
  initial: !config.githubWebhookSecret,
@@ -111,6 +141,11 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
111
141
  }
112
142
 
113
143
  async function setupGitHubAppManual(config: AegisCliConfig): Promise<void> {
144
+ printStep("Paste existing GitHub App credentials", [
145
+ "Use this only if you already created a GitHub App manually.",
146
+ "You need the App ID, the private key .pem file, and the installation ID.",
147
+ "If that sounds unfamiliar, cancel and rerun setup with the one-click GitHub App option.",
148
+ ]);
114
149
  config.githubAppId = await promptText("GitHub App ID:", config.githubAppId);
115
150
  const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
116
151
  if (keyPath) {
@@ -135,13 +170,26 @@ async function setupGitHubAppManual(config: AegisCliConfig): Promise<void> {
135
170
  }
136
171
 
137
172
  async function setupLinear(config: AegisCliConfig): Promise<void> {
173
+ printStep("Step 4: optional Linear connection", [
174
+ "Use this only if your team tracks bugs in Linear.",
175
+ "If you only use GitHub Issues, choose no.",
176
+ "You can rerun setup later to add Linear.",
177
+ ]);
138
178
  const enable = (await consola.prompt("Connect Linear too?", {
139
179
  type: "confirm",
140
180
  initial: Boolean(config.linearApiKey),
141
181
  })) as boolean;
142
182
  if (!enable) return;
143
183
 
184
+ printStep("Linear API key", [
185
+ "Open Linear settings, create a personal API key, then paste it here.",
186
+ "Aegis uses it to read ready bug tickets and comment with status updates.",
187
+ ]);
144
188
  config.linearApiKey = await promptText("Linear API key:", config.linearApiKey);
189
+ printStep("Linear webhook secret", [
190
+ "This protects Linear webhook calls after deploy.",
191
+ "Choose yes and Aegis will generate one.",
192
+ ]);
145
193
  const generateSecret = (await consola.prompt("Generate a Linear webhook signing secret?", {
146
194
  type: "confirm",
147
195
  initial: !config.linearWebhookSecret,
@@ -149,11 +197,19 @@ async function setupLinear(config: AegisCliConfig): Promise<void> {
149
197
  config.linearWebhookSecret = generateSecret
150
198
  ? crypto.randomUUID()
151
199
  : await promptText("Linear webhook signing secret:", config.linearWebhookSecret);
200
+ printStep("Linear team/project", [
201
+ "Team ID is required so Aegis knows which Linear team to watch.",
202
+ "Project ID is optional. Leave it blank to watch the whole team.",
203
+ ]);
152
204
  config.linearTeamId = await promptText("Linear team ID:", config.linearTeamId);
153
205
  config.linearProjectId = await promptText(
154
206
  "Linear project ID (optional):",
155
207
  config.linearProjectId,
156
208
  );
209
+ printStep("Linear statuses and labels", [
210
+ "These names must match your Linear workflow.",
211
+ "If your team uses the default names, press Enter through these prompts.",
212
+ ]);
157
213
  config.linearReadyStatus = await promptText(
158
214
  "Linear ready status name:",
159
215
  config.linearReadyStatus ?? "Ready to Implement",
@@ -174,11 +230,21 @@ async function setupLinear(config: AegisCliConfig): Promise<void> {
174
230
  }
175
231
 
176
232
  async function setupAutomation(config: AegisCliConfig): Promise<void> {
233
+ printStep("Step 5: GitHub labels Aegis should watch", [
234
+ "Aegis only picks up open issues with both labels.",
235
+ "Default labels are bug and ready to implement.",
236
+ "Create these labels in GitHub after setup if they do not exist yet.",
237
+ ]);
177
238
  config.readyLabel = await promptText(
178
239
  "GitHub ready label:",
179
240
  config.readyLabel ?? "ready to implement",
180
241
  );
181
242
  config.bugLabel = await promptText("GitHub bug label:", config.bugLabel ?? "bug");
243
+ printStep("Step 6: automation mode", [
244
+ "Choose plan-first for the first real use.",
245
+ "Plan-first means Aegis investigates and asks for approval before changing code.",
246
+ "Auto-low-risk is for later, after you trust the workflow.",
247
+ ]);
182
248
  config.automationMode = (await consola.prompt("Automation mode:", {
183
249
  type: "select",
184
250
  options: [
@@ -187,14 +253,25 @@ async function setupAutomation(config: AegisCliConfig): Promise<void> {
187
253
  ],
188
254
  initial: config.automationMode ?? "plan-first",
189
255
  })) as AegisCliConfig["automationMode"];
256
+ printStep("Step 7: AI model", [
257
+ "Use the default unless you know you want a different Flue-supported model.",
258
+ "You also need the matching provider API key.",
259
+ ]);
190
260
  config.agentModel = await promptText("Flue model:", config.agentModel ?? "openai/gpt-5.1");
191
- config.openaiApiKey = await promptText(
192
- "OpenAI API key (if using an OpenAI model):",
193
- config.openaiApiKey,
194
- );
261
+ printStep("OpenAI API key", [
262
+ "Paste your OpenAI API key if using an openai/... model.",
263
+ "It is stored in .aegis/.env and later copied to Cloudflare secrets during deploy.",
264
+ "Leave blank only if you configured a different model provider yourself.",
265
+ ]);
266
+ config.openaiApiKey = await promptText("OpenAI API key:", config.openaiApiKey);
195
267
  }
196
268
 
197
269
  async function setupProductionContext(config: AegisCliConfig): Promise<void> {
270
+ printStep("Step 8: production context", [
271
+ "Start with Minimal. It uses only issue text and repo code.",
272
+ "Production context lets Aegis inspect read-only database data and Vercel logs.",
273
+ "Do not choose Production until the basic dry-run works.",
274
+ ]);
198
275
  const profile = (await consola.prompt("Context profile:", {
199
276
  type: "select",
200
277
  options: [
@@ -206,7 +283,10 @@ async function setupProductionContext(config: AegisCliConfig): Promise<void> {
206
283
  config.contextProfile = profile;
207
284
  if (profile !== "production") return;
208
285
 
209
- consola.warn("Use a read-only DB user or replica. Do not give Aegis write access.");
286
+ printStep("Production context details", [
287
+ "Use a read-only DB user or read replica. Do not give Aegis write access.",
288
+ "All fields here are optional. Leave unknown fields blank.",
289
+ ]);
210
290
  config.databaseUrl = await promptText("Read-only DATABASE_URL (optional):", config.databaseUrl);
211
291
  config.vercelToken = await promptText("Vercel API token (optional):", config.vercelToken);
212
292
  config.vercelProjectId = await promptText(
@@ -217,14 +297,27 @@ async function setupProductionContext(config: AegisCliConfig): Promise<void> {
217
297
  }
218
298
 
219
299
  async function setupTelegram(config: AegisCliConfig): Promise<void> {
300
+ printStep("Step 9: optional Telegram approval pings", [
301
+ "Use this if you want Aegis to message you when it needs approval.",
302
+ "For the first local dry-run, choose no.",
303
+ "You can rerun setup later to add Telegram.",
304
+ ]);
220
305
  const enable = (await consola.prompt("Enable Telegram approval pings?", {
221
306
  type: "confirm",
222
307
  initial: Boolean(config.telegramBotToken),
223
308
  })) as boolean;
224
309
  if (!enable) return;
225
310
 
311
+ printStep("Telegram bot", [
312
+ "Create a bot with BotFather, paste the bot token, then paste your chat ID.",
313
+ "Aegis will send short approval summaries to that chat.",
314
+ ]);
226
315
  config.telegramBotToken = await promptText("Telegram bot token:", config.telegramBotToken);
227
316
  config.telegramChatId = await promptText("Telegram chat ID:", config.telegramChatId);
317
+ printStep("Telegram webhook secret", [
318
+ "This protects Telegram webhook calls after deploy.",
319
+ "Choose yes and Aegis will generate one.",
320
+ ]);
228
321
  const generateSecret = (await consola.prompt("Generate a Telegram webhook secret?", {
229
322
  type: "confirm",
230
323
  initial: !config.telegramWebhookSecret,
@@ -235,6 +328,11 @@ async function setupTelegram(config: AegisCliConfig): Promise<void> {
235
328
  }
236
329
 
237
330
  async function setupWorker(config: AegisCliConfig): Promise<void> {
331
+ printStep("Step 10: Worker URL", [
332
+ "Leave this blank before your first deploy.",
333
+ "After deploy, Aegis saves the Worker URL automatically.",
334
+ "If you are rerunning setup after deploy, paste the workers.dev URL here.",
335
+ ]);
238
336
  config.workerUrl = await promptText(
239
337
  "Deployed Worker URL (can fill after first deploy):",
240
338
  config.workerUrl,
@@ -260,3 +358,23 @@ function normalizeGitHubRepo(input: string): string {
260
358
  if (shorthandMatch) return `${shorthandMatch[1]}/${shorthandMatch[2]}`;
261
359
  return value;
262
360
  }
361
+
362
+ function detectCurrentBranch(): string {
363
+ try {
364
+ const branch = readFileSync(".git/HEAD", "utf-8").trim();
365
+ if (branch.startsWith("ref: refs/heads/")) {
366
+ return branch.replace("ref: refs/heads/", "");
367
+ }
368
+ } catch {
369
+ // Ignore and fall back to the normal default.
370
+ }
371
+ return "main";
372
+ }
373
+
374
+ function printStep(title: string, lines: string[]): void {
375
+ consola.log(`\n${title}`);
376
+ for (const line of lines) {
377
+ consola.log(` - ${line}`);
378
+ }
379
+ consola.log("");
380
+ }
package/src/cli/index.ts CHANGED
@@ -1,16 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { readFileSync } from "node:fs";
4
+ import { resolve } from "node:path";
3
5
  import { defineCommand, runMain } from "citty";
4
6
  import { deployCommand } from "./commands/deploy.js";
7
+ import { disconnectCommand } from "./commands/disconnect.js";
5
8
  import { initCommand } from "./commands/init.js";
6
9
  import { pickupCommand } from "./commands/pickup.js";
7
10
  import { setupCommand } from "./commands/setup.js";
8
11
  import { statusCommand } from "./commands/status.js";
12
+ import { findPackageRoot } from "./paths.js";
9
13
 
10
14
  const main = defineCommand({
11
15
  meta: {
12
16
  name: "aegis",
13
- version: "0.2.0",
17
+ version: getPackageVersion(),
14
18
  description: "Aegis - self-hosted AFK bug-fixing agent",
15
19
  },
16
20
  default: "menu",
@@ -20,6 +24,7 @@ const main = defineCommand({
20
24
  pickup: pickupCommand,
21
25
  status: statusCommand,
22
26
  deploy: deployCommand,
27
+ disconnect: disconnectCommand,
23
28
  menu: defineCommand({
24
29
  meta: { name: "menu", description: "Open the interactive menu", hidden: true },
25
30
  async run() {
@@ -36,3 +41,15 @@ const main = defineCommand({
36
41
  });
37
42
 
38
43
  runMain(main);
44
+
45
+ function getPackageVersion(): string {
46
+ try {
47
+ const packageRoot = findPackageRoot(import.meta.url);
48
+ const pkg = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf-8")) as {
49
+ version?: string;
50
+ };
51
+ return pkg.version ?? "0.0.0";
52
+ } catch {
53
+ return "0.0.0";
54
+ }
55
+ }
package/src/cli/state.ts CHANGED
@@ -207,6 +207,7 @@ export async function runInteractiveMenu(): Promise<void> {
207
207
  { label: "Run setup", value: "setup" },
208
208
  { label: "View status", value: "status" },
209
209
  { label: "Deploy worker", value: "deploy" },
210
+ { label: "Disconnect Aegis", value: "disconnect" },
210
211
  ],
211
212
  });
212
213
  if (choice === "pickup") {
@@ -225,4 +226,8 @@ export async function runInteractiveMenu(): Promise<void> {
225
226
  const { runDeploy } = await import("./commands/deploy.js");
226
227
  await runDeploy();
227
228
  }
229
+ if (choice === "disconnect") {
230
+ const { runDisconnectGuide } = await import("./commands/disconnect.js");
231
+ runDisconnectGuide();
232
+ }
228
233
  }