@nairon-ai/aegis 0.4.6 → 0.4.8

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.
@@ -6,6 +6,7 @@ import { BUG_FIX_SKILL_TEXT } from "../../src/agent/bug-fix-skill.js";
6
6
  import {
7
7
  AGENT_CONTEXT_PATH,
8
8
  BUG_FIX_SKILL,
9
+ DEFAULT_AGENT_MODEL,
9
10
  SANDBOX_REPO_PATH,
10
11
  } from "../../src/shared/constants.js";
11
12
  import type { AgentRunContext } from "../../src/shared/types.js";
@@ -50,7 +51,7 @@ export default async function ({ init, id, payload, env }: FlueContext) {
50
51
  const setupHarness = await init({
51
52
  name: "setup",
52
53
  sandbox: sandboxFactory,
53
- model: env.AGENT_MODEL ?? "openai/gpt-5.1",
54
+ model: env.AGENT_MODEL ?? DEFAULT_AGENT_MODEL,
54
55
  });
55
56
  const setup = await setupHarness.session();
56
57
 
@@ -77,7 +78,7 @@ export default async function ({ init, id, payload, env }: FlueContext) {
77
78
  name: "project",
78
79
  sandbox: sandboxFactory,
79
80
  cwd: SANDBOX_REPO_PATH,
80
- model: env.AGENT_MODEL ?? "openai/gpt-5.1",
81
+ model: env.AGENT_MODEL ?? DEFAULT_AGENT_MODEL,
81
82
  });
82
83
  const session = await projectHarness.session();
83
84
 
package/README.md CHANGED
@@ -74,6 +74,8 @@ During `setup`, choose one:
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
+ GitHub App credentials are saved in `.aegis/.env` and backed up for your Mac user under `~/.aegis/github-apps/`, so future setup runs reuse the same app automatically. GitHub only requires a new private-key download if those local credentials were never saved or were deleted.
78
+
77
79
  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
80
 
79
81
  ### Deployed AFK Mode
@@ -132,7 +134,7 @@ Cloudflare Sandbox is currently available on Workers Paid and uses Docker during
132
134
  - Docker running locally for Cloudflare Sandbox image deploy
133
135
  - Cloudflare account and Workers Paid for deployed mode
134
136
  - GitHub App or GitHub token with Contents, Issues, and Pull Requests read/write access
135
- - OpenAI API key or another Flue-supported model provider key
137
+ - OpenAI API key for the default `openai/gpt-5.5` model, or another Flue-supported model provider key
136
138
  - Optional: Linear API key
137
139
  - Optional: Telegram bot
138
140
  - Optional: read-only production database URL
@@ -181,7 +183,8 @@ To fully stop using Aegis:
181
183
  2. Uninstall the Aegis GitHub App from the repo, or revoke the GitHub token.
182
184
  3. Delete Aegis webhooks from GitHub, Linear, and Telegram if configured.
183
185
  4. Remove local config: `rm -rf .aegis`.
184
- 5. Optionally remove Aegis-only labels: `aegis:in-progress`, `aegis:needs-info`, `aegis:blocked`, `aegis:pr-opened`.
186
+ 5. Remove cached GitHub App credentials if you used the app flow: `rm -f ~/.aegis/github-apps/YOUR-ORG-YOUR-REPO.env`.
187
+ 6. Optionally remove Aegis-only labels: `aegis:in-progress`, `aegis:needs-info`, `aegis:blocked`, `aegis:pr-opened`.
185
188
 
186
189
  ## How Pickup Works
187
190
 
@@ -1 +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"}
1
+ {"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/disconnect.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,qDAQ5B,CAAC;AAEH,wBAAgB,kBAAkB,IAAI,IAAI,CA2DzC"}
@@ -1,5 +1,6 @@
1
1
  import { defineCommand } from "citty";
2
2
  import { consola } from "consola";
3
+ import { getGitHubAppCacheFile } from "../github-app-cache.js";
3
4
  import { loadConfig } from "../state.js";
4
5
  export const disconnectCommand = defineCommand({
5
6
  meta: {
@@ -47,6 +48,10 @@ export function runDisconnectGuide() {
47
48
  consola.log("");
48
49
  consola.log("4. Remove local config from this repo");
49
50
  consola.log(" rm -rf .aegis");
51
+ if (config.monitoredRepo) {
52
+ consola.log(" Remove this user's cached GitHub App credentials too:");
53
+ consola.log(` rm -f ${getGitHubAppCacheFile(config.monitoredRepo)}`);
54
+ }
50
55
  consola.log(" If you installed Aegis as a dev dependency:");
51
56
  consola.log(" npm remove @nairon-ai/aegis");
52
57
  consola.log("");
@@ -1 +1 @@
1
- {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/cli/commands/disconnect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/cli/commands/disconnect.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { PROJECT_AEGIS_DIR } from "../paths.js";
6
6
  const ENV_EXAMPLE = `# Required
7
7
  MONITORED_REPO=KeyLead-Team/keylead
8
8
  BASE_BRANCH=main
9
- AGENT_MODEL=openai/gpt-5.1
9
+ AGENT_MODEL=openai/gpt-5.5
10
10
  OPENAI_API_KEY=sk-...
11
11
 
12
12
  # Labels / automation
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAgCA,eAAO,MAAM,YAAY,qDAKvB,CAAC;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCpD"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,YAAY,qDAKvB,CAAC;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCpD"}
@@ -1,8 +1,10 @@
1
- import { execFileSync } from "node:child_process";
2
- import { existsSync, readFileSync } from "node:fs";
1
+ import { execFileSync, spawn } from "node:child_process";
2
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { defineCommand } from "citty";
5
5
  import { consola } from "consola";
6
+ import { AGENT_MODEL_OPTIONS, DEFAULT_AGENT_MODEL } from "../../shared/constants.js";
7
+ import { restoreGitHubAppCache, saveGitHubAppCache } from "../github-app-cache.js";
6
8
  import { runGitHubAppFlow } from "../github-app-flow.js";
7
9
  import { resolveEnvFileForWrite } from "../paths.js";
8
10
  import { detectSetupState, printState, saveConfig } from "../state.js";
@@ -106,10 +108,15 @@ async function setupGitHub(config) {
106
108
  if (hasGitHubAppConfig(config)) {
107
109
  consola.info(`Using existing GitHub App installation ${config.githubInstallationId}. Rerun disconnect if you want to remove it.`);
108
110
  config.githubToken = undefined;
111
+ saveGitHubAppCache(config);
109
112
  }
110
113
  else if (config.githubToken) {
111
114
  consola.info("Using existing GitHub token from .aegis config.");
112
115
  }
116
+ else if (restoreGitHubAppCache(config)) {
117
+ consola.info("Restored GitHub App credentials from this user's Aegis cache.");
118
+ saveConfig(config);
119
+ }
113
120
  else {
114
121
  const installedApps = detectInstalledAegisApps(config.monitoredRepo);
115
122
  if (installedApps.length > 0) {
@@ -187,6 +194,7 @@ async function setupGitHubAppFlow(config) {
187
194
  config.githubWebhookSecret = app.webhookSecret;
188
195
  config.githubToken = undefined;
189
196
  saveConfig(config);
197
+ saveGitHubAppCache(config);
190
198
  consola.success(`Saved GitHub App credentials to ${resolveEnvFileForWrite()}.`);
191
199
  }
192
200
  catch (error) {
@@ -219,7 +227,7 @@ async function setupDetectedGitHubApp(config, installedApps) {
219
227
  printStep("Existing Aegis GitHub App found", [
220
228
  `Found ${selected.slug} installed on this GitHub org.`,
221
229
  "GitHub does not let Aegis read an old private key back.",
222
- "To reuse this app, generate a new private key from the app settings and paste it here.",
230
+ "To reuse this app, Aegis will help you generate one new private key.",
223
231
  "If you would rather create a fresh app, answer no.",
224
232
  ]);
225
233
  const useExisting = await promptConfirm("Reuse this installed GitHub App?", true);
@@ -230,29 +238,88 @@ async function setupDetectedGitHubApp(config, installedApps) {
230
238
  config.githubToken = undefined;
231
239
  await promptGitHubAppPrivateKey(config, selected.settingsUrl);
232
240
  saveConfig(config);
241
+ saveGitHubAppCache(config);
233
242
  consola.success(`Saved existing GitHub App credentials to ${resolveEnvFileForWrite()}.`);
234
243
  }
235
244
  async function promptGitHubAppPrivateKey(config, settingsUrl) {
236
245
  printStep("GitHub App private key", [
237
- settingsUrl ? `Open: ${settingsUrl}` : "Open the GitHub App settings page.",
238
- "Find Private keys, click Generate a private key, then paste the downloaded .pem path.",
246
+ settingsUrl ? `Opening: ${settingsUrl}` : "Open the GitHub App settings page.",
247
+ "Click Generate a private key.",
248
+ "Aegis will watch Downloads/Desktop and load the downloaded .pem automatically.",
239
249
  "GitHub only gives private keys at creation/download time; Aegis cannot fetch old keys.",
240
250
  ]);
241
- const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
242
- if (keyPath) {
243
- const resolved = resolve(keyPath.replace(/^~/, process.env.HOME ?? "~"));
244
- if (existsSync(resolved)) {
245
- config.githubAppPrivateKey = Buffer.from(readFileSync(resolved, "utf-8")).toString("base64");
246
- consola.success("Loaded private key");
247
- }
248
- else {
249
- consola.warn(`File not found: ${resolved}`);
251
+ const startedAt = Date.now();
252
+ if (settingsUrl)
253
+ openBrowser(settingsUrl);
254
+ const detected = settingsUrl ? await waitForDownloadedPem(startedAt) : undefined;
255
+ if (detected) {
256
+ loadPrivateKey(config, detected);
257
+ consola.success(`Loaded private key from ${detected}`);
258
+ }
259
+ if (!config.githubAppPrivateKey) {
260
+ const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
261
+ if (keyPath) {
262
+ const resolved = resolve(keyPath.replace(/^~/, process.env.HOME ?? "~"));
263
+ if (existsSync(resolved)) {
264
+ loadPrivateKey(config, resolved);
265
+ consola.success("Loaded private key");
266
+ }
267
+ else {
268
+ consola.warn(`File not found: ${resolved}`);
269
+ }
250
270
  }
251
271
  }
252
272
  if (!config.githubAppPrivateKey) {
253
273
  config.githubAppPrivateKey = Buffer.from(await promptText("Paste GitHub App private key PEM:", config.githubAppPrivateKey)).toString("base64");
254
274
  }
255
275
  }
276
+ async function waitForDownloadedPem(startedAt) {
277
+ consola.info("Waiting up to 2 minutes for a new .pem file in Downloads or Desktop...");
278
+ for (let attempt = 0; attempt < 120; attempt += 1) {
279
+ const candidates = findRecentPemFiles(startedAt - 5_000);
280
+ if (candidates.length === 1)
281
+ return candidates[0].path;
282
+ if (candidates.length > 1) {
283
+ return await promptSelect("Downloaded private key:", candidates.map((file) => ({
284
+ label: file.path,
285
+ value: file.path,
286
+ })));
287
+ }
288
+ await sleep(1000);
289
+ }
290
+ consola.warn("No new .pem file detected.");
291
+ return undefined;
292
+ }
293
+ function findRecentPemFiles(sinceMs) {
294
+ const home = process.env.HOME;
295
+ if (!home)
296
+ return [];
297
+ const dirs = [resolve(home, "Downloads"), resolve(home, "Desktop")];
298
+ const files = [];
299
+ for (const dir of dirs) {
300
+ try {
301
+ for (const entry of readdirSync(dir)) {
302
+ if (!entry.toLowerCase().endsWith(".pem"))
303
+ continue;
304
+ const path = resolve(dir, entry);
305
+ const stat = statSync(path);
306
+ if (stat.isFile() && stat.mtimeMs >= sinceMs) {
307
+ files.push({ path, mtimeMs: stat.mtimeMs });
308
+ }
309
+ }
310
+ }
311
+ catch {
312
+ // Ignore missing/unreadable directories.
313
+ }
314
+ }
315
+ return files.sort((a, b) => b.mtimeMs - a.mtimeMs).slice(0, 5);
316
+ }
317
+ function loadPrivateKey(config, path) {
318
+ config.githubAppPrivateKey = Buffer.from(readFileSync(path, "utf-8")).toString("base64");
319
+ }
320
+ function sleep(ms) {
321
+ return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
322
+ }
256
323
  function hasGitHubAppConfig(config) {
257
324
  return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
258
325
  }
@@ -291,6 +358,12 @@ function runGhApi(args) {
291
358
  return undefined;
292
359
  }
293
360
  }
361
+ function openBrowser(url) {
362
+ const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
363
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
364
+ const child = spawn(command, args, { detached: true, stdio: "ignore" });
365
+ child.unref();
366
+ }
294
367
  function slugify(value) {
295
368
  return value
296
369
  .toLowerCase()
@@ -408,10 +481,11 @@ async function setupAutomation(config) {
408
481
  { label: "Auto-implement only bugs labeled low-risk", value: "auto-low-risk" },
409
482
  ], config.automationMode ?? "plan-first");
410
483
  printStep("Step 7: AI model", [
411
- "Use the default unless you know you want a different Flue-supported model.",
412
- "You also need the matching provider API key.",
484
+ "Use GPT-5.5 unless you know you want another Flue provider/model string.",
485
+ "Flue model names look like provider/model-id, for example openai/gpt-5.5.",
486
+ "Custom models need their provider key configured manually.",
413
487
  ]);
414
- config.agentModel = await promptText("Flue model:", config.agentModel ?? "openai/gpt-5.1");
488
+ config.agentModel = await promptAgentModel(config.agentModel);
415
489
  printStep("OpenAI API key", [
416
490
  "Paste your OpenAI API key if using an openai/... model.",
417
491
  "It is stored in .aegis/.env and later copied to Cloudflare secrets during deploy.",
@@ -419,6 +493,17 @@ async function setupAutomation(config) {
419
493
  ]);
420
494
  config.openaiApiKey = await promptText("OpenAI API key:", config.openaiApiKey);
421
495
  }
496
+ async function promptAgentModel(current) {
497
+ const selectedModel = current ?? DEFAULT_AGENT_MODEL;
498
+ const knownValues = AGENT_MODEL_OPTIONS.map((option) => option.value);
499
+ const customValue = "__custom__";
500
+ const selected = await promptSelect("Flue model:", [...AGENT_MODEL_OPTIONS, { label: "Custom Flue provider/model string", value: customValue }], (knownValues.includes(selectedModel)
501
+ ? selectedModel
502
+ : customValue));
503
+ if (selected !== customValue)
504
+ return selected;
505
+ return await promptText("Custom Flue model:", selectedModel);
506
+ }
422
507
  async function setupProductionContext(config) {
423
508
  printStep("Step 8: production context", [
424
509
  "Start with Minimal. It uses only issue text and repo code.",
@@ -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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"}
@@ -0,0 +1,5 @@
1
+ import type { AegisCliConfig } from "../shared/types.js";
2
+ export declare function restoreGitHubAppCache(config: AegisCliConfig): boolean;
3
+ export declare function saveGitHubAppCache(config: AegisCliConfig): void;
4
+ export declare function getGitHubAppCacheFile(monitoredRepo: string): string;
5
+ //# sourceMappingURL=github-app-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-app-cache.d.ts","sourceRoot":"","sources":["../../src/cli/github-app-cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASzD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAUrE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAa/D;AA6BD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGnE"}
@@ -0,0 +1,70 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ export function restoreGitHubAppCache(config) {
4
+ if (!config.monitoredRepo || hasGitHubAppConfig(config))
5
+ return false;
6
+ const cached = readGitHubAppCache(config.monitoredRepo);
7
+ if (!cached)
8
+ return false;
9
+ config.githubAppId = cached.appId;
10
+ config.githubAppPrivateKey = cached.privateKey;
11
+ config.githubInstallationId = cached.installationId;
12
+ config.githubWebhookSecret ??= cached.webhookSecret;
13
+ config.githubToken = undefined;
14
+ return true;
15
+ }
16
+ export function saveGitHubAppCache(config) {
17
+ if (!config.monitoredRepo || !hasGitHubAppConfig(config))
18
+ return;
19
+ const file = getGitHubAppCacheFile(config.monitoredRepo);
20
+ const lines = [
21
+ "# Aegis GitHub App cache. Do not share this file.",
22
+ `GITHUB_APP_ID=${config.githubAppId}`,
23
+ `GITHUB_APP_PRIVATE_KEY=${config.githubAppPrivateKey}`,
24
+ `GITHUB_INSTALLATION_ID=${config.githubInstallationId}`,
25
+ config.githubWebhookSecret ? `GITHUB_WEBHOOK_SECRET=${config.githubWebhookSecret}` : undefined,
26
+ ].filter(Boolean);
27
+ mkdirSync(dirname(file), { recursive: true });
28
+ writeFileSync(file, `${lines.join("\n")}\n`, { mode: 0o600 });
29
+ chmodSync(file, 0o600);
30
+ }
31
+ function readGitHubAppCache(monitoredRepo) {
32
+ const file = getGitHubAppCacheFile(monitoredRepo);
33
+ if (!existsSync(file))
34
+ return undefined;
35
+ const values = new Map();
36
+ for (const line of readFileSync(file, "utf-8").split("\n")) {
37
+ const trimmed = line.trim();
38
+ if (!trimmed || trimmed.startsWith("#"))
39
+ continue;
40
+ const idx = trimmed.indexOf("=");
41
+ if (idx === -1)
42
+ continue;
43
+ values.set(trimmed.slice(0, idx), trimmed.slice(idx + 1));
44
+ }
45
+ const appId = values.get("GITHUB_APP_ID");
46
+ const privateKey = values.get("GITHUB_APP_PRIVATE_KEY");
47
+ const installationId = values.get("GITHUB_INSTALLATION_ID");
48
+ if (!appId || !privateKey || !installationId)
49
+ return undefined;
50
+ return {
51
+ appId,
52
+ privateKey,
53
+ installationId,
54
+ webhookSecret: values.get("GITHUB_WEBHOOK_SECRET"),
55
+ };
56
+ }
57
+ function hasGitHubAppConfig(config) {
58
+ return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
59
+ }
60
+ export function getGitHubAppCacheFile(monitoredRepo) {
61
+ const home = process.env.HOME ?? process.cwd();
62
+ return resolve(home, ".aegis", "github-apps", `${slugify(monitoredRepo)}.env`);
63
+ }
64
+ function slugify(value) {
65
+ return value
66
+ .toLowerCase()
67
+ .replace(/[^a-z0-9]+/g, "-")
68
+ .replace(/^-|-$/g, "");
69
+ }
70
+ //# sourceMappingURL=github-app-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-app-cache.js","sourceRoot":"","sources":["../../src/cli/github-app-cache.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,14 @@ export declare const DEFAULT_NEEDS_INFO_LABEL = "aegis:needs-info";
5
5
  export declare const DEFAULT_BLOCKED_LABEL = "aegis:blocked";
6
6
  export declare const DEFAULT_PR_OPENED_LABEL = "aegis:pr-opened";
7
7
  export declare const DEFAULT_BASE_BRANCH = "main";
8
- export declare const DEFAULT_AGENT_MODEL = "openai/gpt-5.1";
8
+ export declare const DEFAULT_AGENT_MODEL = "openai/gpt-5.5";
9
+ export declare const AGENT_MODEL_OPTIONS: readonly [{
10
+ readonly label: "OpenAI GPT-5.5 (recommended)";
11
+ readonly value: "openai/gpt-5.5";
12
+ }, {
13
+ readonly label: "OpenAI GPT-5.1";
14
+ readonly value: "openai/gpt-5.1";
15
+ }];
9
16
  export declare const DEFAULT_LOG_LOOKBACK_MINUTES = 45;
10
17
  export declare const BRANCH_PREFIX = "aegis/bug-";
11
18
  export declare const AGENT_CONTEXT_PATH = "/tmp/aegis-context.json";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AACxD,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAC7D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AACzD,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AACtD,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,gCAAgC,UAM5C,CAAC;AAEF,eAAO,MAAM,+BAA+B,UAO3C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AACxD,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAC7D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AACzD,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,mBAAmB;;;;;;EAStB,CAAC;AACX,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AACtD,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,gCAAgC,UAM5C,CAAC;AAEF,eAAO,MAAM,+BAA+B,UAO3C,CAAC"}
@@ -5,7 +5,17 @@ export const DEFAULT_NEEDS_INFO_LABEL = "aegis:needs-info";
5
5
  export const DEFAULT_BLOCKED_LABEL = "aegis:blocked";
6
6
  export const DEFAULT_PR_OPENED_LABEL = "aegis:pr-opened";
7
7
  export const DEFAULT_BASE_BRANCH = "main";
8
- export const DEFAULT_AGENT_MODEL = "openai/gpt-5.1";
8
+ export const DEFAULT_AGENT_MODEL = "openai/gpt-5.5";
9
+ export const AGENT_MODEL_OPTIONS = [
10
+ {
11
+ label: "OpenAI GPT-5.5 (recommended)",
12
+ value: "openai/gpt-5.5",
13
+ },
14
+ {
15
+ label: "OpenAI GPT-5.1",
16
+ value: "openai/gpt-5.1",
17
+ },
18
+ ];
9
19
  export const DEFAULT_LOG_LOOKBACK_MINUTES = 45;
10
20
  export const BRANCH_PREFIX = "aegis/bug-";
11
21
  export const AGENT_CONTEXT_PATH = "/tmp/aegis-context.json";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC/C,UAAU;IACV,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC9C,SAAS;IACT,YAAY;IACZ,aAAa;IACb,OAAO;IACP,aAAa;IACb,eAAe;CACf,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC;QACC,KAAK,EAAE,8BAA8B;QACrC,KAAK,EAAE,gBAAgB;KACvB;IACD;QACC,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,gBAAgB;KACvB;CACQ,CAAC;AACX,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC/C,UAAU;IACV,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC9C,SAAS;IACT,YAAY;IACZ,aAAa;IACb,OAAO;IACP,aAAa;IACb,eAAe;CACf,CAAC"}
package/docs/SETUP.md CHANGED
@@ -154,10 +154,12 @@ Important answers:
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
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. If GitHub has an installed Aegis app but local credentials are missing, setup detects it and asks you to generate a new app private key so it can recover the existing app.
157
+ - GitHub App reuse: Aegis saves app credentials in `.aegis/.env` and backs them up for your Mac user under `~/.aegis/github-apps/`. Future setup runs restore them automatically.
157
158
  - 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.
158
159
  - `GitHub webhook secret`: generate one and keep it in `.aegis/.env`
159
160
  - `Automation mode`: start with `plan-first`
160
161
  - `Context profile`: start with `minimal`
162
+ - `AI model`: choose `OpenAI GPT-5.5` unless you need a custom Flue provider/model
161
163
  - `OpenAI API key`: required for the default `openai/...` model
162
164
 
163
165
  This writes `.aegis/.env`. Do not commit it.
@@ -173,7 +175,7 @@ AUTOMATION_MODE=plan-first
173
175
  CONTEXT_PROFILE=minimal
174
176
  GITHUB_TOKEN=github_pat_...
175
177
  GITHUB_WEBHOOK_SECRET=...
176
- AGENT_MODEL=openai/gpt-5.1
178
+ AGENT_MODEL=openai/gpt-5.5
177
179
  OPENAI_API_KEY=sk-...
178
180
  ```
179
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nairon-ai/aegis",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "description": "Self-hosted AFK bug-fixing agent for GitHub Issues and Linear",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,5 +1,6 @@
1
1
  import { defineCommand } from "citty";
2
2
  import { consola } from "consola";
3
+ import { getGitHubAppCacheFile } from "../github-app-cache.js";
3
4
  import { loadConfig } from "../state.js";
4
5
 
5
6
  export const disconnectCommand = defineCommand({
@@ -58,6 +59,10 @@ export function runDisconnectGuide(): void {
58
59
 
59
60
  consola.log("4. Remove local config from this repo");
60
61
  consola.log(" rm -rf .aegis");
62
+ if (config.monitoredRepo) {
63
+ consola.log(" Remove this user's cached GitHub App credentials too:");
64
+ consola.log(` rm -f ${getGitHubAppCacheFile(config.monitoredRepo)}`);
65
+ }
61
66
  consola.log(" If you installed Aegis as a dev dependency:");
62
67
  consola.log(" npm remove @nairon-ai/aegis");
63
68
  consola.log("");
@@ -7,7 +7,7 @@ import { PROJECT_AEGIS_DIR } from "../paths.js";
7
7
  const ENV_EXAMPLE = `# Required
8
8
  MONITORED_REPO=KeyLead-Team/keylead
9
9
  BASE_BRANCH=main
10
- AGENT_MODEL=openai/gpt-5.1
10
+ AGENT_MODEL=openai/gpt-5.5
11
11
  OPENAI_API_KEY=sk-...
12
12
 
13
13
  # Labels / automation
@@ -1,9 +1,11 @@
1
- import { execFileSync } from "node:child_process";
2
- import { existsSync, readFileSync } from "node:fs";
1
+ import { execFileSync, spawn } from "node:child_process";
2
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { defineCommand } from "citty";
5
5
  import { consola } from "consola";
6
+ import { AGENT_MODEL_OPTIONS, DEFAULT_AGENT_MODEL } from "../../shared/constants.js";
6
7
  import type { AegisCliConfig } from "../../shared/types.js";
8
+ import { restoreGitHubAppCache, saveGitHubAppCache } from "../github-app-cache.js";
7
9
  import { runGitHubAppFlow } from "../github-app-flow.js";
8
10
  import { resolveEnvFileForWrite } from "../paths.js";
9
11
  import { detectSetupState, printState, saveConfig } from "../state.js";
@@ -23,6 +25,11 @@ type InstalledGitHubApp = {
23
25
  settingsUrl: string;
24
26
  };
25
27
 
28
+ type PemFile = {
29
+ path: string;
30
+ mtimeMs: number;
31
+ };
32
+
26
33
  class SetupCancelledError extends Error {
27
34
  constructor() {
28
35
  super("Setup cancelled.");
@@ -130,8 +137,12 @@ async function setupGitHub(config: AegisCliConfig): Promise<void> {
130
137
  `Using existing GitHub App installation ${config.githubInstallationId}. Rerun disconnect if you want to remove it.`,
131
138
  );
132
139
  config.githubToken = undefined;
140
+ saveGitHubAppCache(config);
133
141
  } else if (config.githubToken) {
134
142
  consola.info("Using existing GitHub token from .aegis config.");
143
+ } else if (restoreGitHubAppCache(config)) {
144
+ consola.info("Restored GitHub App credentials from this user's Aegis cache.");
145
+ saveConfig(config);
135
146
  } else {
136
147
  const installedApps = detectInstalledAegisApps(config.monitoredRepo);
137
148
  if (installedApps.length > 0) {
@@ -216,6 +227,7 @@ async function setupGitHubAppFlow(config: AegisCliConfig): Promise<void> {
216
227
  config.githubWebhookSecret = app.webhookSecret;
217
228
  config.githubToken = undefined;
218
229
  saveConfig(config);
230
+ saveGitHubAppCache(config);
219
231
  consola.success(`Saved GitHub App credentials to ${resolveEnvFileForWrite()}.`);
220
232
  } catch (error) {
221
233
  consola.warn(error instanceof Error ? error.message : String(error));
@@ -259,7 +271,7 @@ async function setupDetectedGitHubApp(
259
271
  printStep("Existing Aegis GitHub App found", [
260
272
  `Found ${selected.slug} installed on this GitHub org.`,
261
273
  "GitHub does not let Aegis read an old private key back.",
262
- "To reuse this app, generate a new private key from the app settings and paste it here.",
274
+ "To reuse this app, Aegis will help you generate one new private key.",
263
275
  "If you would rather create a fresh app, answer no.",
264
276
  ]);
265
277
  const useExisting = await promptConfirm("Reuse this installed GitHub App?", true);
@@ -270,6 +282,7 @@ async function setupDetectedGitHubApp(
270
282
  config.githubToken = undefined;
271
283
  await promptGitHubAppPrivateKey(config, selected.settingsUrl);
272
284
  saveConfig(config);
285
+ saveGitHubAppCache(config);
273
286
  consola.success(`Saved existing GitHub App credentials to ${resolveEnvFileForWrite()}.`);
274
287
  }
275
288
 
@@ -278,18 +291,28 @@ async function promptGitHubAppPrivateKey(
278
291
  settingsUrl?: string,
279
292
  ): Promise<void> {
280
293
  printStep("GitHub App private key", [
281
- settingsUrl ? `Open: ${settingsUrl}` : "Open the GitHub App settings page.",
282
- "Find Private keys, click Generate a private key, then paste the downloaded .pem path.",
294
+ settingsUrl ? `Opening: ${settingsUrl}` : "Open the GitHub App settings page.",
295
+ "Click Generate a private key.",
296
+ "Aegis will watch Downloads/Desktop and load the downloaded .pem automatically.",
283
297
  "GitHub only gives private keys at creation/download time; Aegis cannot fetch old keys.",
284
298
  ]);
285
- const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
286
- if (keyPath) {
287
- const resolved = resolve(keyPath.replace(/^~/, process.env.HOME ?? "~"));
288
- if (existsSync(resolved)) {
289
- config.githubAppPrivateKey = Buffer.from(readFileSync(resolved, "utf-8")).toString("base64");
290
- consola.success("Loaded private key");
291
- } else {
292
- consola.warn(`File not found: ${resolved}`);
299
+ const startedAt = Date.now();
300
+ if (settingsUrl) openBrowser(settingsUrl);
301
+ const detected = settingsUrl ? await waitForDownloadedPem(startedAt) : undefined;
302
+ if (detected) {
303
+ loadPrivateKey(config, detected);
304
+ consola.success(`Loaded private key from ${detected}`);
305
+ }
306
+ if (!config.githubAppPrivateKey) {
307
+ const keyPath = await promptText("Path to GitHub App private key .pem:", undefined);
308
+ if (keyPath) {
309
+ const resolved = resolve(keyPath.replace(/^~/, process.env.HOME ?? "~"));
310
+ if (existsSync(resolved)) {
311
+ loadPrivateKey(config, resolved);
312
+ consola.success("Loaded private key");
313
+ } else {
314
+ consola.warn(`File not found: ${resolved}`);
315
+ }
293
316
  }
294
317
  }
295
318
  if (!config.githubAppPrivateKey) {
@@ -299,6 +322,56 @@ async function promptGitHubAppPrivateKey(
299
322
  }
300
323
  }
301
324
 
325
+ async function waitForDownloadedPem(startedAt: number): Promise<string | undefined> {
326
+ consola.info("Waiting up to 2 minutes for a new .pem file in Downloads or Desktop...");
327
+ for (let attempt = 0; attempt < 120; attempt += 1) {
328
+ const candidates = findRecentPemFiles(startedAt - 5_000);
329
+ if (candidates.length === 1) return candidates[0].path;
330
+ if (candidates.length > 1) {
331
+ return await promptSelect(
332
+ "Downloaded private key:",
333
+ candidates.map((file) => ({
334
+ label: file.path,
335
+ value: file.path,
336
+ })),
337
+ );
338
+ }
339
+ await sleep(1000);
340
+ }
341
+ consola.warn("No new .pem file detected.");
342
+ return undefined;
343
+ }
344
+
345
+ function findRecentPemFiles(sinceMs: number): PemFile[] {
346
+ const home = process.env.HOME;
347
+ if (!home) return [];
348
+ const dirs = [resolve(home, "Downloads"), resolve(home, "Desktop")];
349
+ const files: PemFile[] = [];
350
+ for (const dir of dirs) {
351
+ try {
352
+ for (const entry of readdirSync(dir)) {
353
+ if (!entry.toLowerCase().endsWith(".pem")) continue;
354
+ const path = resolve(dir, entry);
355
+ const stat = statSync(path);
356
+ if (stat.isFile() && stat.mtimeMs >= sinceMs) {
357
+ files.push({ path, mtimeMs: stat.mtimeMs });
358
+ }
359
+ }
360
+ } catch {
361
+ // Ignore missing/unreadable directories.
362
+ }
363
+ }
364
+ return files.sort((a, b) => b.mtimeMs - a.mtimeMs).slice(0, 5);
365
+ }
366
+
367
+ function loadPrivateKey(config: AegisCliConfig, path: string): void {
368
+ config.githubAppPrivateKey = Buffer.from(readFileSync(path, "utf-8")).toString("base64");
369
+ }
370
+
371
+ function sleep(ms: number): Promise<void> {
372
+ return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
373
+ }
374
+
302
375
  function hasGitHubAppConfig(config: AegisCliConfig): boolean {
303
376
  return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
304
377
  }
@@ -348,6 +421,14 @@ function runGhApi<T>(args: string[]): T | undefined {
348
421
  }
349
422
  }
350
423
 
424
+ function openBrowser(url: string): void {
425
+ const command =
426
+ process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
427
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
428
+ const child = spawn(command, args, { detached: true, stdio: "ignore" });
429
+ child.unref();
430
+ }
431
+
351
432
  function slugify(value: string): string {
352
433
  return value
353
434
  .toLowerCase()
@@ -508,10 +589,11 @@ async function setupAutomation(config: AegisCliConfig): Promise<void> {
508
589
  config.automationMode ?? "plan-first",
509
590
  );
510
591
  printStep("Step 7: AI model", [
511
- "Use the default unless you know you want a different Flue-supported model.",
512
- "You also need the matching provider API key.",
592
+ "Use GPT-5.5 unless you know you want another Flue provider/model string.",
593
+ "Flue model names look like provider/model-id, for example openai/gpt-5.5.",
594
+ "Custom models need their provider key configured manually.",
513
595
  ]);
514
- config.agentModel = await promptText("Flue model:", config.agentModel ?? "openai/gpt-5.1");
596
+ config.agentModel = await promptAgentModel(config.agentModel);
515
597
  printStep("OpenAI API key", [
516
598
  "Paste your OpenAI API key if using an openai/... model.",
517
599
  "It is stored in .aegis/.env and later copied to Cloudflare secrets during deploy.",
@@ -520,6 +602,21 @@ async function setupAutomation(config: AegisCliConfig): Promise<void> {
520
602
  config.openaiApiKey = await promptText("OpenAI API key:", config.openaiApiKey);
521
603
  }
522
604
 
605
+ async function promptAgentModel(current: string | undefined): Promise<string> {
606
+ const selectedModel = current ?? DEFAULT_AGENT_MODEL;
607
+ const knownValues = AGENT_MODEL_OPTIONS.map((option) => option.value);
608
+ const customValue = "__custom__";
609
+ const selected = await promptSelect(
610
+ "Flue model:",
611
+ [...AGENT_MODEL_OPTIONS, { label: "Custom Flue provider/model string", value: customValue }],
612
+ (knownValues.includes(selectedModel as (typeof knownValues)[number])
613
+ ? selectedModel
614
+ : customValue) as (typeof AGENT_MODEL_OPTIONS)[number]["value"] | typeof customValue,
615
+ );
616
+ if (selected !== customValue) return selected;
617
+ return await promptText("Custom Flue model:", selectedModel);
618
+ }
619
+
523
620
  async function setupProductionContext(config: AegisCliConfig): Promise<void> {
524
621
  printStep("Step 8: production context", [
525
622
  "Start with Minimal. It uses only issue text and repo code.",
@@ -0,0 +1,76 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import type { AegisCliConfig } from "../shared/types.js";
4
+
5
+ type CachedGitHubApp = {
6
+ appId: string;
7
+ privateKey: string;
8
+ installationId: string;
9
+ webhookSecret?: string;
10
+ };
11
+
12
+ export function restoreGitHubAppCache(config: AegisCliConfig): boolean {
13
+ if (!config.monitoredRepo || hasGitHubAppConfig(config)) return false;
14
+ const cached = readGitHubAppCache(config.monitoredRepo);
15
+ if (!cached) return false;
16
+ config.githubAppId = cached.appId;
17
+ config.githubAppPrivateKey = cached.privateKey;
18
+ config.githubInstallationId = cached.installationId;
19
+ config.githubWebhookSecret ??= cached.webhookSecret;
20
+ config.githubToken = undefined;
21
+ return true;
22
+ }
23
+
24
+ export function saveGitHubAppCache(config: AegisCliConfig): void {
25
+ if (!config.monitoredRepo || !hasGitHubAppConfig(config)) return;
26
+ const file = getGitHubAppCacheFile(config.monitoredRepo);
27
+ const lines = [
28
+ "# Aegis GitHub App cache. Do not share this file.",
29
+ `GITHUB_APP_ID=${config.githubAppId}`,
30
+ `GITHUB_APP_PRIVATE_KEY=${config.githubAppPrivateKey}`,
31
+ `GITHUB_INSTALLATION_ID=${config.githubInstallationId}`,
32
+ config.githubWebhookSecret ? `GITHUB_WEBHOOK_SECRET=${config.githubWebhookSecret}` : undefined,
33
+ ].filter(Boolean);
34
+ mkdirSync(dirname(file), { recursive: true });
35
+ writeFileSync(file, `${lines.join("\n")}\n`, { mode: 0o600 });
36
+ chmodSync(file, 0o600);
37
+ }
38
+
39
+ function readGitHubAppCache(monitoredRepo: string): CachedGitHubApp | undefined {
40
+ const file = getGitHubAppCacheFile(monitoredRepo);
41
+ if (!existsSync(file)) return undefined;
42
+ const values = new Map<string, string>();
43
+ for (const line of readFileSync(file, "utf-8").split("\n")) {
44
+ const trimmed = line.trim();
45
+ if (!trimmed || trimmed.startsWith("#")) continue;
46
+ const idx = trimmed.indexOf("=");
47
+ if (idx === -1) continue;
48
+ values.set(trimmed.slice(0, idx), trimmed.slice(idx + 1));
49
+ }
50
+ const appId = values.get("GITHUB_APP_ID");
51
+ const privateKey = values.get("GITHUB_APP_PRIVATE_KEY");
52
+ const installationId = values.get("GITHUB_INSTALLATION_ID");
53
+ if (!appId || !privateKey || !installationId) return undefined;
54
+ return {
55
+ appId,
56
+ privateKey,
57
+ installationId,
58
+ webhookSecret: values.get("GITHUB_WEBHOOK_SECRET"),
59
+ };
60
+ }
61
+
62
+ function hasGitHubAppConfig(config: AegisCliConfig): boolean {
63
+ return Boolean(config.githubAppId && config.githubAppPrivateKey && config.githubInstallationId);
64
+ }
65
+
66
+ export function getGitHubAppCacheFile(monitoredRepo: string): string {
67
+ const home = process.env.HOME ?? process.cwd();
68
+ return resolve(home, ".aegis", "github-apps", `${slugify(monitoredRepo)}.env`);
69
+ }
70
+
71
+ function slugify(value: string): string {
72
+ return value
73
+ .toLowerCase()
74
+ .replace(/[^a-z0-9]+/g, "-")
75
+ .replace(/^-|-$/g, "");
76
+ }
@@ -5,7 +5,17 @@ export const DEFAULT_NEEDS_INFO_LABEL = "aegis:needs-info";
5
5
  export const DEFAULT_BLOCKED_LABEL = "aegis:blocked";
6
6
  export const DEFAULT_PR_OPENED_LABEL = "aegis:pr-opened";
7
7
  export const DEFAULT_BASE_BRANCH = "main";
8
- export const DEFAULT_AGENT_MODEL = "openai/gpt-5.1";
8
+ export const DEFAULT_AGENT_MODEL = "openai/gpt-5.5";
9
+ export const AGENT_MODEL_OPTIONS = [
10
+ {
11
+ label: "OpenAI GPT-5.5 (recommended)",
12
+ value: "openai/gpt-5.5",
13
+ },
14
+ {
15
+ label: "OpenAI GPT-5.1",
16
+ value: "openai/gpt-5.1",
17
+ },
18
+ ] as const;
9
19
  export const DEFAULT_LOG_LOOKBACK_MINUTES = 45;
10
20
  export const BRANCH_PREFIX = "aegis/bug-";
11
21
  export const AGENT_CONTEXT_PATH = "/tmp/aegis-context.json";