@nairon-ai/aegis 0.2.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.
Files changed (167) hide show
  1. package/.agents/skills/bug-fix/SKILL.md +91 -0
  2. package/.flue/agents/bug-fix.ts +107 -0
  3. package/.flue/app.ts +16 -0
  4. package/Dockerfile +8 -0
  5. package/LICENSE +21 -0
  6. package/README.md +251 -0
  7. package/dist-node/agent/bug-fix-skill.d.ts +2 -0
  8. package/dist-node/agent/bug-fix-skill.d.ts.map +1 -0
  9. package/dist-node/agent/bug-fix-skill.js +64 -0
  10. package/dist-node/agent/bug-fix-skill.js.map +1 -0
  11. package/dist-node/agent/client.d.ts +14 -0
  12. package/dist-node/agent/client.d.ts.map +1 -0
  13. package/dist-node/agent/client.js +110 -0
  14. package/dist-node/agent/client.js.map +1 -0
  15. package/dist-node/cli/commands/deploy.d.ts +3 -0
  16. package/dist-node/cli/commands/deploy.d.ts.map +1 -0
  17. package/dist-node/cli/commands/deploy.js +94 -0
  18. package/dist-node/cli/commands/deploy.js.map +1 -0
  19. package/dist-node/cli/commands/init.d.ts +3 -0
  20. package/dist-node/cli/commands/init.d.ts.map +1 -0
  21. package/dist-node/cli/commands/init.js +115 -0
  22. package/dist-node/cli/commands/init.js.map +1 -0
  23. package/dist-node/cli/commands/pickup.d.ts +11 -0
  24. package/dist-node/cli/commands/pickup.d.ts.map +1 -0
  25. package/dist-node/cli/commands/pickup.js +43 -0
  26. package/dist-node/cli/commands/pickup.js.map +1 -0
  27. package/dist-node/cli/commands/setup.d.ts +3 -0
  28. package/dist-node/cli/commands/setup.d.ts.map +1 -0
  29. package/dist-node/cli/commands/setup.js +163 -0
  30. package/dist-node/cli/commands/setup.js.map +1 -0
  31. package/dist-node/cli/commands/status.d.ts +3 -0
  32. package/dist-node/cli/commands/status.d.ts.map +1 -0
  33. package/dist-node/cli/commands/status.js +26 -0
  34. package/dist-node/cli/commands/status.js.map +1 -0
  35. package/dist-node/cli/index.d.ts +3 -0
  36. package/dist-node/cli/index.d.ts.map +1 -0
  37. package/dist-node/cli/index.js +36 -0
  38. package/dist-node/cli/index.js.map +1 -0
  39. package/dist-node/cli/paths.d.ts +7 -0
  40. package/dist-node/cli/paths.d.ts.map +1 -0
  41. package/dist-node/cli/paths.js +29 -0
  42. package/dist-node/cli/paths.js.map +1 -0
  43. package/dist-node/cli/state.d.ts +16 -0
  44. package/dist-node/cli/state.d.ts.map +1 -0
  45. package/dist-node/cli/state.js +214 -0
  46. package/dist-node/cli/state.js.map +1 -0
  47. package/dist-node/core/pickup.d.ts +14 -0
  48. package/dist-node/core/pickup.d.ts.map +1 -0
  49. package/dist-node/core/pickup.js +42 -0
  50. package/dist-node/core/pickup.js.map +1 -0
  51. package/dist-node/github/index.d.ts +3 -0
  52. package/dist-node/github/index.d.ts.map +1 -0
  53. package/dist-node/github/index.js +2 -0
  54. package/dist-node/github/index.js.map +1 -0
  55. package/dist-node/github/manifest.d.ts +34 -0
  56. package/dist-node/github/manifest.d.ts.map +1 -0
  57. package/dist-node/github/manifest.js +71 -0
  58. package/dist-node/github/manifest.js.map +1 -0
  59. package/dist-node/integrations/github.d.ts +29 -0
  60. package/dist-node/integrations/github.d.ts.map +1 -0
  61. package/dist-node/integrations/github.js +199 -0
  62. package/dist-node/integrations/github.js.map +1 -0
  63. package/dist-node/integrations/linear.d.ts +15 -0
  64. package/dist-node/integrations/linear.d.ts.map +1 -0
  65. package/dist-node/integrations/linear.js +146 -0
  66. package/dist-node/integrations/linear.js.map +1 -0
  67. package/dist-node/integrations/telegram.d.ts +24 -0
  68. package/dist-node/integrations/telegram.d.ts.map +1 -0
  69. package/dist-node/integrations/telegram.js +39 -0
  70. package/dist-node/integrations/telegram.js.map +1 -0
  71. package/dist-node/integrations/webhooks.d.ts +3 -0
  72. package/dist-node/integrations/webhooks.d.ts.map +1 -0
  73. package/dist-node/integrations/webhooks.js +37 -0
  74. package/dist-node/integrations/webhooks.js.map +1 -0
  75. package/dist-node/sandbox/github-token.d.ts +7 -0
  76. package/dist-node/sandbox/github-token.d.ts.map +1 -0
  77. package/dist-node/sandbox/github-token.js +66 -0
  78. package/dist-node/sandbox/github-token.js.map +1 -0
  79. package/dist-node/sandbox/index.d.ts +2 -0
  80. package/dist-node/sandbox/index.d.ts.map +1 -0
  81. package/dist-node/sandbox/index.js +2 -0
  82. package/dist-node/sandbox/index.js.map +1 -0
  83. package/dist-node/server/app.d.ts +9 -0
  84. package/dist-node/server/app.d.ts.map +1 -0
  85. package/dist-node/server/app.js +216 -0
  86. package/dist-node/server/app.js.map +1 -0
  87. package/dist-node/shared/config.d.ts +5 -0
  88. package/dist-node/shared/config.d.ts.map +1 -0
  89. package/dist-node/shared/config.js +135 -0
  90. package/dist-node/shared/config.js.map +1 -0
  91. package/dist-node/shared/constants.d.ts +16 -0
  92. package/dist-node/shared/constants.d.ts.map +1 -0
  93. package/dist-node/shared/constants.js +29 -0
  94. package/dist-node/shared/constants.js.map +1 -0
  95. package/dist-node/shared/format.d.ts +12 -0
  96. package/dist-node/shared/format.d.ts.map +1 -0
  97. package/dist-node/shared/format.js +71 -0
  98. package/dist-node/shared/format.js.map +1 -0
  99. package/dist-node/shared/index.d.ts +7 -0
  100. package/dist-node/shared/index.d.ts.map +1 -0
  101. package/dist-node/shared/index.js +7 -0
  102. package/dist-node/shared/index.js.map +1 -0
  103. package/dist-node/shared/readiness.d.ts +3 -0
  104. package/dist-node/shared/readiness.d.ts.map +1 -0
  105. package/dist-node/shared/readiness.js +91 -0
  106. package/dist-node/shared/readiness.js.map +1 -0
  107. package/dist-node/shared/run-state.d.ts +5 -0
  108. package/dist-node/shared/run-state.d.ts.map +1 -0
  109. package/dist-node/shared/run-state.js +26 -0
  110. package/dist-node/shared/run-state.js.map +1 -0
  111. package/dist-node/shared/types.d.ts +230 -0
  112. package/dist-node/shared/types.d.ts.map +1 -0
  113. package/dist-node/shared/types.js +5 -0
  114. package/dist-node/shared/types.js.map +1 -0
  115. package/dist-node/sources/github.d.ts +15 -0
  116. package/dist-node/sources/github.d.ts.map +1 -0
  117. package/dist-node/sources/github.js +44 -0
  118. package/dist-node/sources/github.js.map +1 -0
  119. package/dist-node/sources/index.d.ts +6 -0
  120. package/dist-node/sources/index.d.ts.map +1 -0
  121. package/dist-node/sources/index.js +16 -0
  122. package/dist-node/sources/index.js.map +1 -0
  123. package/dist-node/sources/linear.d.ts +15 -0
  124. package/dist-node/sources/linear.d.ts.map +1 -0
  125. package/dist-node/sources/linear.js +32 -0
  126. package/dist-node/sources/linear.js.map +1 -0
  127. package/dist-node/sources/types.d.ts +15 -0
  128. package/dist-node/sources/types.d.ts.map +1 -0
  129. package/dist-node/sources/types.js +2 -0
  130. package/dist-node/sources/types.js.map +1 -0
  131. package/docs/RELEASING.md +52 -0
  132. package/docs/SETUP.md +439 -0
  133. package/package.json +64 -0
  134. package/src/agent/bug-fix-skill.ts +63 -0
  135. package/src/agent/client.ts +156 -0
  136. package/src/cli/commands/deploy.ts +106 -0
  137. package/src/cli/commands/init.ts +119 -0
  138. package/src/cli/commands/pickup.ts +44 -0
  139. package/src/cli/commands/setup.ts +217 -0
  140. package/src/cli/commands/status.ts +24 -0
  141. package/src/cli/index.ts +38 -0
  142. package/src/cli/paths.ts +29 -0
  143. package/src/cli/state.ts +228 -0
  144. package/src/core/pickup.ts +66 -0
  145. package/src/github/index.ts +2 -0
  146. package/src/github/manifest.ts +97 -0
  147. package/src/integrations/github.ts +241 -0
  148. package/src/integrations/linear.ts +195 -0
  149. package/src/integrations/telegram.ts +48 -0
  150. package/src/integrations/webhooks.ts +53 -0
  151. package/src/sandbox/github-token.ts +92 -0
  152. package/src/sandbox/index.ts +1 -0
  153. package/src/server/app.ts +292 -0
  154. package/src/shared/config.ts +154 -0
  155. package/src/shared/constants.ts +30 -0
  156. package/src/shared/format.ts +84 -0
  157. package/src/shared/index.ts +6 -0
  158. package/src/shared/readiness.ts +116 -0
  159. package/src/shared/run-state.ts +32 -0
  160. package/src/shared/types.ts +257 -0
  161. package/src/sources/github.ts +57 -0
  162. package/src/sources/index.ts +20 -0
  163. package/src/sources/linear.ts +44 -0
  164. package/src/sources/types.ts +16 -0
  165. package/tsconfig.json +25 -0
  166. package/tsconfig.node.json +16 -0
  167. package/wrangler.jsonc +43 -0
@@ -0,0 +1,91 @@
1
+ const BUG_WORDS = [
2
+ "bug",
3
+ "crash",
4
+ "error",
5
+ "exception",
6
+ "fails",
7
+ "failure",
8
+ "broken",
9
+ "regression",
10
+ "incorrect",
11
+ "wrong",
12
+ ];
13
+ const CONTEXT_WORDS = [
14
+ "expected",
15
+ "actual",
16
+ "reproduce",
17
+ "steps",
18
+ "stack",
19
+ "trace",
20
+ "error",
21
+ "logs",
22
+ "when",
23
+ "click",
24
+ "route",
25
+ "page",
26
+ "api",
27
+ ];
28
+ export function evaluateReadiness(item, config) {
29
+ const labels = normalizedLabels(item.labels);
30
+ const titleAndBody = `${item.title}\n${item.body}`.toLowerCase();
31
+ if (!isBug(item, config, labels, titleAndBody)) {
32
+ return {
33
+ ready: false,
34
+ reason: "not labeled or described as a bug",
35
+ question: "Please label this as a bug once it describes broken behavior.",
36
+ };
37
+ }
38
+ if (!isReady(item, config, labels)) {
39
+ return {
40
+ ready: false,
41
+ reason: "not marked ready to implement",
42
+ question: `Please add the "${config.readyLabel}" label or move it to the configured ready status.`,
43
+ };
44
+ }
45
+ if (!item.repo) {
46
+ return {
47
+ ready: false,
48
+ reason: "no repository mapping",
49
+ question: "Which GitHub repository should Aegis fix this in?",
50
+ };
51
+ }
52
+ if (item.body.trim().length < 40 || !hasEnoughBugContext(titleAndBody)) {
53
+ return {
54
+ ready: false,
55
+ reason: "bug report is too thin",
56
+ question: "What happened, what should have happened, and where can Aegis look to reproduce or verify it?",
57
+ };
58
+ }
59
+ const risk = hasRiskyLabel(labels, config) ? "high" : "low";
60
+ const autoImplementAllowed = config.automationMode === "auto-low-risk" &&
61
+ risk === "low" &&
62
+ config.lowRiskLabels.some((label) => labels.has(label.toLowerCase()));
63
+ return {
64
+ ready: true,
65
+ reason: autoImplementAllowed
66
+ ? "ready low-risk bug; auto-implement allowed"
67
+ : "ready bug; approval checkpoint required",
68
+ risk,
69
+ autoImplementAllowed,
70
+ };
71
+ }
72
+ function isBug(item, config, labels, titleAndBody) {
73
+ return (labels.has(config.bugLabel.toLowerCase()) ||
74
+ labels.has(config.linear?.bugLabel?.toLowerCase() ?? "") ||
75
+ BUG_WORDS.some((word) => titleAndBody.includes(word)));
76
+ }
77
+ function isReady(item, config, labels) {
78
+ return (labels.has(config.readyLabel.toLowerCase()) ||
79
+ item.statusName?.toLowerCase() === config.linear?.readyStatusName.toLowerCase());
80
+ }
81
+ function hasEnoughBugContext(text) {
82
+ const hits = CONTEXT_WORDS.filter((word) => text.includes(word)).length;
83
+ return hits >= 2;
84
+ }
85
+ function hasRiskyLabel(labels, config) {
86
+ return config.alwaysRequireApprovalLabels.some((label) => labels.has(label.toLowerCase()));
87
+ }
88
+ function normalizedLabels(labels) {
89
+ return new Set(labels.map((label) => label.toLowerCase()));
90
+ }
91
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/shared/readiness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { AutomationMode, WorkItem, WorkRun } from "./types.js";
2
+ export declare function runIdFor(item: WorkItem): string;
3
+ export declare function runFromItem(item: WorkItem, mode: AutomationMode): WorkRun;
4
+ export declare function isActivelyTracked(item: WorkItem, labels: string[]): boolean;
5
+ //# sourceMappingURL=run-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-state.d.ts","sourceRoot":"","sources":["../../src/shared/run-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAI/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAezE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAK3E"}
@@ -0,0 +1,26 @@
1
+ import { branchNameFor } from "./format.js";
2
+ export function runIdFor(item) {
3
+ const sourceId = item.source === "github" ? `gh-${item.repo.replace("/", "-")}-${item.number}` : item.identifier;
4
+ return sourceId.toLowerCase().replace(/[^a-z0-9-]+/g, "-");
5
+ }
6
+ export function runFromItem(item, mode) {
7
+ const now = new Date().toISOString();
8
+ return {
9
+ id: runIdFor(item),
10
+ source: item.source,
11
+ externalId: item.id,
12
+ identifier: item.identifier,
13
+ repo: item.repo,
14
+ branchName: branchNameFor(item),
15
+ status: "claimed",
16
+ mode,
17
+ createdAt: now,
18
+ updatedAt: now,
19
+ itemUrl: item.url,
20
+ };
21
+ }
22
+ export function isActivelyTracked(item, labels) {
23
+ const lowered = labels.map((label) => label.toLowerCase());
24
+ return lowered.some((label) => ["aegis:in-progress", "aegis:needs-info", "aegis:blocked", "aegis:pr-opened"].includes(label));
25
+ }
26
+ //# sourceMappingURL=run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/shared/run-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,UAAU,QAAQ,CAAC,IAAc;IACtC,MAAM,QAAQ,GACb,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACjG,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,IAAoB;IAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACN,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,EAAE;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;QAC/B,MAAM,EAAE,SAAS;QACjB,IAAI;QACJ,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,IAAI,CAAC,GAAG;KACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,MAAgB;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7F,CAAC;AACH,CAAC"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Shared types for Aegis - an issue-driven AFK bug-fixing agent.
3
+ */
4
+ export type WorkSource = "github" | "linear";
5
+ export type AutomationMode = "plan-first" | "auto-low-risk";
6
+ export type ContextProfile = "minimal" | "production";
7
+ export type WorkItemStatus = "ready" | "needs-info" | "claimed" | "planning" | "awaiting-approval" | "implementing" | "pr-opened" | "blocked" | "failed" | "cancelled";
8
+ export type RiskLevel = "low" | "medium" | "high";
9
+ export type WorkItem = {
10
+ source: WorkSource;
11
+ id: string;
12
+ number?: number;
13
+ identifier: string;
14
+ title: string;
15
+ body: string;
16
+ url: string;
17
+ repo: string;
18
+ labels: string[];
19
+ statusName?: string;
20
+ createdAt?: string;
21
+ updatedAt?: string;
22
+ author?: string;
23
+ };
24
+ export type ReadinessDecision = {
25
+ ready: true;
26
+ reason: string;
27
+ risk: RiskLevel;
28
+ autoImplementAllowed: boolean;
29
+ } | {
30
+ ready: false;
31
+ reason: string;
32
+ question: string;
33
+ };
34
+ export type WorkRun = {
35
+ id: string;
36
+ source: WorkSource;
37
+ externalId: string;
38
+ identifier: string;
39
+ repo: string;
40
+ branchName: string;
41
+ status: WorkItemStatus;
42
+ mode: AutomationMode;
43
+ createdAt: string;
44
+ updatedAt: string;
45
+ itemUrl: string;
46
+ prUrl?: string;
47
+ lastError?: string;
48
+ planSummary?: string;
49
+ };
50
+ export type RunRef = {
51
+ runId: string;
52
+ source: WorkSource;
53
+ identifier: string;
54
+ repo: string;
55
+ branchName: string;
56
+ itemUrl: string;
57
+ };
58
+ export type AgentCommand = "plan" | "implement";
59
+ export type AgentRunContext = {
60
+ runId: string;
61
+ command: AgentCommand;
62
+ mode: AutomationMode;
63
+ contextProfile: ContextProfile;
64
+ item: WorkItem;
65
+ branchName: string;
66
+ baseBranch: string;
67
+ repoCloneUrl: string;
68
+ production?: {
69
+ databaseUrl?: string;
70
+ vercelToken?: string;
71
+ vercelProjectId?: string;
72
+ vercelTeamId?: string;
73
+ logLookbackMinutes: number;
74
+ };
75
+ approval?: {
76
+ approvedBy: string;
77
+ approvedAt: string;
78
+ };
79
+ };
80
+ export type AgentPlanResult = {
81
+ outcome: "awaiting-approval" | "needs-info" | "blocked";
82
+ confidence: "low" | "medium" | "high";
83
+ risk: RiskLevel;
84
+ technicalSummary: string;
85
+ humanSummary: string;
86
+ proposedFix: string;
87
+ question?: string;
88
+ blocker?: string;
89
+ requiresApproval: boolean;
90
+ };
91
+ export type AgentImplementationResult = {
92
+ outcome: "implemented" | "blocked" | "needs-info";
93
+ confidence: "low" | "medium" | "high";
94
+ risk: RiskLevel;
95
+ technicalSummary: string;
96
+ humanSummary: string;
97
+ filesChanged: string[];
98
+ testsRun: string[];
99
+ branchName?: string;
100
+ commitSha?: string;
101
+ prTitle?: string;
102
+ prBody?: string;
103
+ question?: string;
104
+ blocker?: string;
105
+ };
106
+ export type AegisConfig = {
107
+ workerUrl?: string;
108
+ monitoredRepo: string;
109
+ baseBranch: string;
110
+ automationMode: AutomationMode;
111
+ contextProfile: ContextProfile;
112
+ maxConcurrentRuns: number;
113
+ readyLabel: string;
114
+ bugLabel: string;
115
+ inProgressLabel: string;
116
+ needsInfoLabel: string;
117
+ blockedLabel: string;
118
+ prOpenedLabel: string;
119
+ lowRiskLabels: string[];
120
+ alwaysRequireApprovalLabels: string[];
121
+ alwaysRequireApprovalPaths: string[];
122
+ github?: {
123
+ appId?: string;
124
+ privateKey?: string;
125
+ installationId?: string;
126
+ webhookSecret?: string;
127
+ token?: string;
128
+ };
129
+ linear?: {
130
+ apiKey?: string;
131
+ webhookSecret?: string;
132
+ teamId?: string;
133
+ projectId?: string;
134
+ readyStatusName: string;
135
+ inProgressStatusName: string;
136
+ needsInfoStatusName?: string;
137
+ blockedStatusName?: string;
138
+ bugLabel: string;
139
+ readyLabel?: string;
140
+ };
141
+ telegram?: {
142
+ botToken?: string;
143
+ chatId?: string;
144
+ webhookSecret?: string;
145
+ };
146
+ production?: {
147
+ databaseUrl?: string;
148
+ vercelToken?: string;
149
+ vercelProjectId?: string;
150
+ vercelTeamId?: string;
151
+ logLookbackMinutes: number;
152
+ };
153
+ model: string;
154
+ };
155
+ export type Bindings = {
156
+ Sandbox: DurableObjectNamespace;
157
+ AEGIS_WORKER_URL?: string;
158
+ MONITORED_REPO: string;
159
+ BASE_BRANCH?: string;
160
+ AUTOMATION_MODE?: AutomationMode;
161
+ CONTEXT_PROFILE?: ContextProfile;
162
+ MAX_CONCURRENT_RUNS?: string;
163
+ READY_LABEL?: string;
164
+ BUG_LABEL?: string;
165
+ IN_PROGRESS_LABEL?: string;
166
+ NEEDS_INFO_LABEL?: string;
167
+ BLOCKED_LABEL?: string;
168
+ PR_OPENED_LABEL?: string;
169
+ LOW_RISK_LABELS?: string;
170
+ ALWAYS_REQUIRE_APPROVAL_LABELS?: string;
171
+ ALWAYS_REQUIRE_APPROVAL_PATHS?: string;
172
+ GITHUB_APP_ID?: string;
173
+ GITHUB_APP_PRIVATE_KEY?: string;
174
+ GITHUB_INSTALLATION_ID?: string;
175
+ GITHUB_WEBHOOK_SECRET?: string;
176
+ GITHUB_TOKEN?: string;
177
+ LINEAR_API_KEY?: string;
178
+ LINEAR_WEBHOOK_SECRET?: string;
179
+ LINEAR_TEAM_ID?: string;
180
+ LINEAR_PROJECT_ID?: string;
181
+ LINEAR_READY_STATUS?: string;
182
+ LINEAR_IN_PROGRESS_STATUS?: string;
183
+ LINEAR_NEEDS_INFO_STATUS?: string;
184
+ LINEAR_BLOCKED_STATUS?: string;
185
+ LINEAR_BUG_LABEL?: string;
186
+ LINEAR_READY_LABEL?: string;
187
+ TELEGRAM_BOT_TOKEN?: string;
188
+ TELEGRAM_CHAT_ID?: string;
189
+ TELEGRAM_WEBHOOK_SECRET?: string;
190
+ DATABASE_URL?: string;
191
+ VERCEL_TOKEN?: string;
192
+ VERCEL_PROJECT_ID?: string;
193
+ VERCEL_TEAM_ID?: string;
194
+ VERCEL_LOG_LOOKBACK_MINUTES?: string;
195
+ AGENT_MODEL?: string;
196
+ OPENAI_API_KEY?: string;
197
+ };
198
+ export type AegisCliConfig = {
199
+ workerUrl?: string;
200
+ monitoredRepo?: string;
201
+ baseBranch?: string;
202
+ automationMode?: AutomationMode;
203
+ contextProfile?: ContextProfile;
204
+ readyLabel?: string;
205
+ bugLabel?: string;
206
+ githubAppId?: string;
207
+ githubAppPrivateKey?: string;
208
+ githubInstallationId?: string;
209
+ githubWebhookSecret?: string;
210
+ githubToken?: string;
211
+ linearApiKey?: string;
212
+ linearWebhookSecret?: string;
213
+ linearTeamId?: string;
214
+ linearProjectId?: string;
215
+ linearReadyStatus?: string;
216
+ linearInProgressStatus?: string;
217
+ linearNeedsInfoStatus?: string;
218
+ linearBlockedStatus?: string;
219
+ linearBugLabel?: string;
220
+ telegramBotToken?: string;
221
+ telegramChatId?: string;
222
+ telegramWebhookSecret?: string;
223
+ databaseUrl?: string;
224
+ vercelToken?: string;
225
+ vercelProjectId?: string;
226
+ vercelTeamId?: string;
227
+ agentModel?: string;
228
+ openaiApiKey?: string;
229
+ };
230
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for Aegis - an issue-driven AFK bug-fixing agent.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,15 @@
1
+ import type { AegisConfig, WorkItem } from "../shared/types.js";
2
+ import type { ClaimOptions, IssueSource } from "./types.js";
3
+ export declare class GitHubIssueSource implements IssueSource {
4
+ readonly name: "github";
5
+ private readonly config;
6
+ private readonly github;
7
+ constructor(config: AegisConfig);
8
+ listReadyBugs(): Promise<WorkItem[]>;
9
+ claim(item: WorkItem, options: ClaimOptions): Promise<void>;
10
+ postNeedsInfo(item: WorkItem, question: string): Promise<void>;
11
+ postPlan(item: WorkItem, body: string): Promise<void>;
12
+ linkPullRequest(item: WorkItem, prUrl: string): Promise<void>;
13
+ markBlocked(item: WorkItem, body: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,iBAAkB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,WAAW;IAK/B,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI9B,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7D,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM9D"}
@@ -0,0 +1,44 @@
1
+ import { GitHubClient } from "../integrations/github.js";
2
+ export class GitHubIssueSource {
3
+ name = "github";
4
+ config;
5
+ github;
6
+ constructor(config) {
7
+ this.config = config;
8
+ this.github = new GitHubClient(config);
9
+ }
10
+ listReadyBugs() {
11
+ return this.github.listReadyIssues();
12
+ }
13
+ async claim(item, options) {
14
+ const number = requireIssueNumber(item);
15
+ await this.github.addLabels(item.repo, number, [this.config.inProgressLabel]);
16
+ await this.github.comment(item.repo, number, `Aegis claimed this bug.\n\nRun: \`${options.runId}\`\nBranch: \`${options.branchName}\``);
17
+ }
18
+ async postNeedsInfo(item, question) {
19
+ const number = requireIssueNumber(item);
20
+ await this.github.addLabels(item.repo, number, [this.config.needsInfoLabel]);
21
+ await this.github.comment(item.repo, number, question);
22
+ }
23
+ async postPlan(item, body) {
24
+ await this.github.comment(item.repo, requireIssueNumber(item), body);
25
+ }
26
+ async linkPullRequest(item, prUrl) {
27
+ const number = requireIssueNumber(item);
28
+ await this.github.addLabels(item.repo, number, [this.config.prOpenedLabel]);
29
+ await this.github.removeLabel(item.repo, number, this.config.inProgressLabel);
30
+ await this.github.comment(item.repo, number, `Aegis opened a PR: ${prUrl}`);
31
+ }
32
+ async markBlocked(item, body) {
33
+ const number = requireIssueNumber(item);
34
+ await this.github.addLabels(item.repo, number, [this.config.blockedLabel]);
35
+ await this.github.removeLabel(item.repo, number, this.config.inProgressLabel);
36
+ await this.github.comment(item.repo, number, body);
37
+ }
38
+ }
39
+ function requireIssueNumber(item) {
40
+ if (!item.number)
41
+ throw new Error(`GitHub issue number missing for ${item.identifier}`);
42
+ return item.number;
43
+ }
44
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AegisConfig, WorkSource } from "../shared/types.js";
2
+ import type { IssueSource } from "./types.js";
3
+ export declare function createSources(config: AegisConfig): IssueSource[];
4
+ export declare function sourceFor(config: AegisConfig, source: WorkSource): IssueSource;
5
+ export type { IssueSource } from "./types.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAMhE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,CAI9E;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { GitHubIssueSource } from "./github.js";
2
+ import { LinearIssueSource } from "./linear.js";
3
+ export function createSources(config) {
4
+ const sources = [new GitHubIssueSource(config)];
5
+ if (config.linear?.apiKey && config.linear.teamId) {
6
+ sources.push(new LinearIssueSource(config));
7
+ }
8
+ return sources;
9
+ }
10
+ export function sourceFor(config, source) {
11
+ const match = createSources(config).find((candidate) => candidate.name === source);
12
+ if (!match)
13
+ throw new Error(`${source} source is not configured`);
14
+ return match;
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,UAAU,aAAa,CAAC,MAAmB;IAChD,MAAM,OAAO,GAAkB,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAmB,EAAE,MAAkB;IAChE,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,2BAA2B,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { AegisConfig, WorkItem } from "../shared/types.js";
2
+ import type { ClaimOptions, IssueSource } from "./types.js";
3
+ export declare class LinearIssueSource implements IssueSource {
4
+ readonly name: "linear";
5
+ private readonly config;
6
+ private readonly linear;
7
+ constructor(config: AegisConfig);
8
+ listReadyBugs(): Promise<WorkItem[]>;
9
+ claim(item: WorkItem, options: ClaimOptions): Promise<void>;
10
+ postNeedsInfo(item: WorkItem, question: string): Promise<void>;
11
+ postPlan(item: WorkItem, body: string): Promise<void>;
12
+ linkPullRequest(item: WorkItem, prUrl: string): Promise<void>;
13
+ markBlocked(item: WorkItem, body: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/sources/linear.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,iBAAkB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,WAAW;IAK/B,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI9B,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI9D"}
@@ -0,0 +1,32 @@
1
+ import { LinearClient } from "../integrations/linear.js";
2
+ export class LinearIssueSource {
3
+ name = "linear";
4
+ config;
5
+ linear;
6
+ constructor(config) {
7
+ this.config = config;
8
+ this.linear = new LinearClient(config);
9
+ }
10
+ listReadyBugs() {
11
+ return this.linear.listReadyIssues();
12
+ }
13
+ async claim(item, options) {
14
+ await this.linear.moveToStatus(item.id, this.config.linear?.inProgressStatusName);
15
+ await this.linear.comment(item.id, `Aegis claimed this bug.\n\nRun: \`${options.runId}\`\nBranch: \`${options.branchName}\``);
16
+ }
17
+ async postNeedsInfo(item, question) {
18
+ await this.linear.moveToStatus(item.id, this.config.linear?.needsInfoStatusName);
19
+ await this.linear.comment(item.id, question);
20
+ }
21
+ async postPlan(item, body) {
22
+ await this.linear.comment(item.id, body);
23
+ }
24
+ async linkPullRequest(item, prUrl) {
25
+ await this.linear.linkPullRequest(item.id, prUrl);
26
+ }
27
+ async markBlocked(item, body) {
28
+ await this.linear.moveToStatus(item.id, this.config.linear?.blockedStatusName);
29
+ await this.linear.comment(item.id, body);
30
+ }
31
+ }
32
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/sources/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,MAAM,OAAO,iBAAiB;IACpB,IAAI,GAAG,QAAiB,CAAC;IACjB,MAAM,CAAc;IACpB,MAAM,CAAe;IAEtC,YAAY,MAAmB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc,EAAE,OAAqB;QAChD,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,IAAI,CAAC,EAAE,EACP,qCAAqC,OAAO,CAAC,KAAK,iBAAiB,OAAO,CAAC,UAAU,IAAI,CACzF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAc,EAAE,QAAgB;QACnD,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAc,EAAE,IAAY;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAc,EAAE,KAAa;QAClD,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,IAAY;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACD"}
@@ -0,0 +1,15 @@
1
+ import type { WorkItem } from "../shared/types.js";
2
+ export type ClaimOptions = {
3
+ runId: string;
4
+ branchName: string;
5
+ };
6
+ export interface IssueSource {
7
+ name: "github" | "linear";
8
+ listReadyBugs(): Promise<WorkItem[]>;
9
+ claim(item: WorkItem, options: ClaimOptions): Promise<void>;
10
+ postNeedsInfo(item: WorkItem, question: string): Promise<void>;
11
+ postPlan(item: WorkItem, body: string): Promise<void>;
12
+ linkPullRequest(item: WorkItem, prUrl: string): Promise<void>;
13
+ markBlocked(item: WorkItem, body: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ # Releasing
2
+
3
+ Aegis releases are automated with semantic-release.
4
+
5
+ ## Commit Message Rules
6
+
7
+ The release version is decided from commits pushed to `main`:
8
+
9
+ - `fix: ...` creates a patch release, for example `1.2.3` -> `1.2.4`
10
+ - `feat: ...` creates a minor release, for example `1.2.3` -> `1.3.0`
11
+ - `feat!: ...` or a `BREAKING CHANGE:` footer creates a major release, for example `1.2.3` -> `2.0.0`
12
+ - `docs(README): ...`, `refactor: ...`, and `perf: ...` create patch releases
13
+ - `chore: ...`, `test: ...`, and `ci: ...` do not release by default
14
+
15
+ Examples:
16
+
17
+ ```text
18
+ fix: correct deploy path for npx installs
19
+ feat: add Linear project picker
20
+ feat!: change Aegis config file format
21
+
22
+ BREAKING CHANGE: .aegis/.env has been replaced by aegis.config.json.
23
+ ```
24
+
25
+ ## GitHub Actions
26
+
27
+ `.github/workflows/release.yml` runs on every push to `main`.
28
+
29
+ The workflow:
30
+
31
+ 1. Installs dependencies.
32
+ 2. Runs typecheck and Biome.
33
+ 3. Builds the Cloudflare/Flue worker.
34
+ 4. Builds the Node CLI.
35
+ 5. Runs semantic-release.
36
+ 6. Publishes `@nairon-ai/aegis` to npm when the commit history requires a release.
37
+ 7. Creates the GitHub release and tag.
38
+
39
+ ## Required npm Setup
40
+
41
+ Use one of these:
42
+
43
+ - Recommended: configure npm trusted publishing for `@nairon-ai/aegis` with GitHub Actions OIDC.
44
+ - Fallback: add a GitHub Actions secret named `NPM_TOKEN` with publish access.
45
+
46
+ The workflow already grants `id-token: write` for trusted publishing.
47
+
48
+ ## Important
49
+
50
+ Publishing only happens from `main`.
51
+
52
+ If a push contains no release-worthy commits, semantic-release exits successfully without publishing.