@getaegis/cli 0.8.0 → 0.9.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 (242) hide show
  1. package/README.md +43 -14
  2. package/dist/agent/agent.d.ts +98 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.js +212 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/index.d.ts +3 -0
  7. package/dist/agent/index.d.ts.map +1 -0
  8. package/dist/agent/index.js +2 -0
  9. package/dist/agent/index.js.map +1 -0
  10. package/dist/cli/auth.d.ts +19 -0
  11. package/dist/cli/auth.d.ts.map +1 -0
  12. package/dist/cli/auth.js +44 -0
  13. package/dist/cli/auth.js.map +1 -0
  14. package/dist/cli/commands/agent.d.ts +6 -0
  15. package/dist/cli/commands/agent.d.ts.map +1 -0
  16. package/dist/cli/commands/agent.js +241 -0
  17. package/dist/cli/commands/agent.js.map +1 -0
  18. package/dist/cli/commands/config.d.ts +6 -0
  19. package/dist/cli/commands/config.d.ts.map +1 -0
  20. package/dist/cli/commands/config.js +125 -0
  21. package/dist/cli/commands/config.js.map +1 -0
  22. package/dist/cli/commands/dashboard.d.ts +6 -0
  23. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  24. package/dist/cli/commands/dashboard.js +195 -0
  25. package/dist/cli/commands/dashboard.js.map +1 -0
  26. package/dist/cli/commands/db.d.ts +6 -0
  27. package/dist/cli/commands/db.d.ts.map +1 -0
  28. package/dist/cli/commands/db.js +139 -0
  29. package/dist/cli/commands/db.js.map +1 -0
  30. package/dist/cli/commands/doctor.d.ts +6 -0
  31. package/dist/cli/commands/doctor.d.ts.map +1 -0
  32. package/dist/cli/commands/doctor.js +39 -0
  33. package/dist/cli/commands/doctor.js.map +1 -0
  34. package/dist/cli/commands/gate.d.ts +6 -0
  35. package/dist/cli/commands/gate.d.ts.map +1 -0
  36. package/dist/cli/commands/gate.js +202 -0
  37. package/dist/cli/commands/gate.js.map +1 -0
  38. package/dist/cli/commands/init.d.ts +6 -0
  39. package/dist/cli/commands/init.d.ts.map +1 -0
  40. package/dist/cli/commands/init.js +175 -0
  41. package/dist/cli/commands/init.js.map +1 -0
  42. package/dist/cli/commands/key.d.ts +6 -0
  43. package/dist/cli/commands/key.d.ts.map +1 -0
  44. package/dist/cli/commands/key.js +49 -0
  45. package/dist/cli/commands/key.js.map +1 -0
  46. package/dist/cli/commands/ledger.d.ts +6 -0
  47. package/dist/cli/commands/ledger.d.ts.map +1 -0
  48. package/dist/cli/commands/ledger.js +140 -0
  49. package/dist/cli/commands/ledger.js.map +1 -0
  50. package/dist/cli/commands/mcp.d.ts +6 -0
  51. package/dist/cli/commands/mcp.d.ts.map +1 -0
  52. package/dist/cli/commands/mcp.js +224 -0
  53. package/dist/cli/commands/mcp.js.map +1 -0
  54. package/dist/cli/commands/policy.d.ts +6 -0
  55. package/dist/cli/commands/policy.d.ts.map +1 -0
  56. package/dist/cli/commands/policy.js +126 -0
  57. package/dist/cli/commands/policy.js.map +1 -0
  58. package/dist/cli/commands/user.d.ts +6 -0
  59. package/dist/cli/commands/user.d.ts.map +1 -0
  60. package/dist/cli/commands/user.js +150 -0
  61. package/dist/cli/commands/user.js.map +1 -0
  62. package/dist/cli/commands/vault-manager.d.ts +6 -0
  63. package/dist/cli/commands/vault-manager.d.ts.map +1 -0
  64. package/dist/cli/commands/vault-manager.js +240 -0
  65. package/dist/cli/commands/vault-manager.js.map +1 -0
  66. package/dist/cli/commands/vault.d.ts +6 -0
  67. package/dist/cli/commands/vault.d.ts.map +1 -0
  68. package/dist/cli/commands/vault.js +265 -0
  69. package/dist/cli/commands/vault.js.map +1 -0
  70. package/dist/cli/commands/webhook.d.ts +6 -0
  71. package/dist/cli/commands/webhook.d.ts.map +1 -0
  72. package/dist/cli/commands/webhook.js +151 -0
  73. package/dist/cli/commands/webhook.js.map +1 -0
  74. package/dist/cli/helpers.d.ts +12 -0
  75. package/dist/cli/helpers.d.ts.map +1 -0
  76. package/dist/cli/helpers.js +61 -0
  77. package/dist/cli/helpers.js.map +1 -0
  78. package/dist/cli/index.d.ts +19 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +19 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/cli/validation.d.ts +37 -0
  83. package/dist/cli/validation.d.ts.map +1 -0
  84. package/dist/cli/validation.js +104 -0
  85. package/dist/cli/validation.js.map +1 -0
  86. package/dist/cli.d.ts +3 -0
  87. package/dist/cli.d.ts.map +1 -0
  88. package/dist/cli.js +37 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/config.d.ts +120 -0
  91. package/dist/config.d.ts.map +1 -0
  92. package/dist/config.js +401 -0
  93. package/dist/config.js.map +1 -0
  94. package/dist/dashboard/dashboard-server.d.ts +95 -0
  95. package/dist/dashboard/dashboard-server.d.ts.map +1 -0
  96. package/dist/dashboard/dashboard-server.js +329 -0
  97. package/dist/dashboard/dashboard-server.js.map +1 -0
  98. package/dist/dashboard/index.d.ts +3 -0
  99. package/dist/dashboard/index.d.ts.map +1 -0
  100. package/dist/dashboard/index.js +2 -0
  101. package/dist/dashboard/index.js.map +1 -0
  102. package/dist/dashboard/public/assets/index-Cah0_BKk.js +148 -0
  103. package/dist/dashboard/public/assets/index-CpMruPNh.css +1 -0
  104. package/dist/dashboard/public/favicon.svg +6 -0
  105. package/dist/dashboard/public/index.html +14 -0
  106. package/dist/db.d.ts +27 -0
  107. package/dist/db.d.ts.map +1 -0
  108. package/dist/db.js +209 -0
  109. package/dist/db.js.map +1 -0
  110. package/dist/doctor.d.ts +37 -0
  111. package/dist/doctor.d.ts.map +1 -0
  112. package/dist/doctor.js +216 -0
  113. package/dist/doctor.js.map +1 -0
  114. package/dist/gate/body-inspector.d.ts +31 -0
  115. package/dist/gate/body-inspector.d.ts.map +1 -0
  116. package/dist/gate/body-inspector.js +193 -0
  117. package/dist/gate/body-inspector.js.map +1 -0
  118. package/dist/gate/gate.d.ts +190 -0
  119. package/dist/gate/gate.d.ts.map +1 -0
  120. package/dist/gate/gate.js +1243 -0
  121. package/dist/gate/gate.js.map +1 -0
  122. package/dist/gate/index.d.ts +7 -0
  123. package/dist/gate/index.d.ts.map +1 -0
  124. package/dist/gate/index.js +4 -0
  125. package/dist/gate/index.js.map +1 -0
  126. package/dist/gate/rate-limiter.d.ts +59 -0
  127. package/dist/gate/rate-limiter.d.ts.map +1 -0
  128. package/dist/gate/rate-limiter.js +120 -0
  129. package/dist/gate/rate-limiter.js.map +1 -0
  130. package/dist/index.d.ts +28 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +17 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/key-storage/credential-manager-windows.d.ts +19 -0
  135. package/dist/key-storage/credential-manager-windows.d.ts.map +1 -0
  136. package/dist/key-storage/credential-manager-windows.js +87 -0
  137. package/dist/key-storage/credential-manager-windows.js.map +1 -0
  138. package/dist/key-storage/file-fallback.d.ts +21 -0
  139. package/dist/key-storage/file-fallback.d.ts.map +1 -0
  140. package/dist/key-storage/file-fallback.js +62 -0
  141. package/dist/key-storage/file-fallback.js.map +1 -0
  142. package/dist/key-storage/index.d.ts +6 -0
  143. package/dist/key-storage/index.d.ts.map +1 -0
  144. package/dist/key-storage/index.js +6 -0
  145. package/dist/key-storage/index.js.map +1 -0
  146. package/dist/key-storage/key-storage.d.ts +41 -0
  147. package/dist/key-storage/key-storage.d.ts.map +1 -0
  148. package/dist/key-storage/key-storage.js +70 -0
  149. package/dist/key-storage/key-storage.js.map +1 -0
  150. package/dist/key-storage/keychain-macos.d.ts +19 -0
  151. package/dist/key-storage/keychain-macos.d.ts.map +1 -0
  152. package/dist/key-storage/keychain-macos.js +51 -0
  153. package/dist/key-storage/keychain-macos.js.map +1 -0
  154. package/dist/key-storage/secret-service-linux.d.ts +19 -0
  155. package/dist/key-storage/secret-service-linux.d.ts.map +1 -0
  156. package/dist/key-storage/secret-service-linux.js +55 -0
  157. package/dist/key-storage/secret-service-linux.js.map +1 -0
  158. package/dist/ledger/index.d.ts +3 -0
  159. package/dist/ledger/index.d.ts.map +1 -0
  160. package/dist/ledger/index.js +2 -0
  161. package/dist/ledger/index.js.map +1 -0
  162. package/dist/ledger/ledger.d.ts +98 -0
  163. package/dist/ledger/ledger.d.ts.map +1 -0
  164. package/dist/ledger/ledger.js +145 -0
  165. package/dist/ledger/ledger.js.map +1 -0
  166. package/dist/logger/index.d.ts +3 -0
  167. package/dist/logger/index.d.ts.map +1 -0
  168. package/dist/logger/index.js +2 -0
  169. package/dist/logger/index.js.map +1 -0
  170. package/dist/logger/logger.d.ts +58 -0
  171. package/dist/logger/logger.d.ts.map +1 -0
  172. package/dist/logger/logger.js +201 -0
  173. package/dist/logger/logger.js.map +1 -0
  174. package/dist/mcp/index.d.ts +3 -0
  175. package/dist/mcp/index.d.ts.map +1 -0
  176. package/dist/mcp/index.js +2 -0
  177. package/dist/mcp/index.js.map +1 -0
  178. package/dist/mcp/mcp-server.d.ts +130 -0
  179. package/dist/mcp/mcp-server.d.ts.map +1 -0
  180. package/dist/mcp/mcp-server.js +775 -0
  181. package/dist/mcp/mcp-server.js.map +1 -0
  182. package/dist/metrics/index.d.ts +3 -0
  183. package/dist/metrics/index.d.ts.map +1 -0
  184. package/dist/metrics/index.js +2 -0
  185. package/dist/metrics/index.js.map +1 -0
  186. package/dist/metrics/metrics.d.ts +88 -0
  187. package/dist/metrics/metrics.d.ts.map +1 -0
  188. package/dist/metrics/metrics.js +179 -0
  189. package/dist/metrics/metrics.js.map +1 -0
  190. package/dist/policy/index.d.ts +3 -0
  191. package/dist/policy/index.d.ts.map +1 -0
  192. package/dist/policy/index.js +2 -0
  193. package/dist/policy/index.js.map +1 -0
  194. package/dist/policy/policy.d.ts +119 -0
  195. package/dist/policy/policy.d.ts.map +1 -0
  196. package/dist/policy/policy.js +426 -0
  197. package/dist/policy/policy.js.map +1 -0
  198. package/dist/user/index.d.ts +3 -0
  199. package/dist/user/index.d.ts.map +1 -0
  200. package/dist/user/index.js +2 -0
  201. package/dist/user/index.js.map +1 -0
  202. package/dist/user/user.d.ts +102 -0
  203. package/dist/user/user.d.ts.map +1 -0
  204. package/dist/user/user.js +216 -0
  205. package/dist/user/user.js.map +1 -0
  206. package/dist/vault/crypto.d.ts +28 -0
  207. package/dist/vault/crypto.d.ts.map +1 -0
  208. package/dist/vault/crypto.js +44 -0
  209. package/dist/vault/crypto.js.map +1 -0
  210. package/dist/vault/index.d.ts +10 -0
  211. package/dist/vault/index.d.ts.map +1 -0
  212. package/dist/vault/index.js +6 -0
  213. package/dist/vault/index.js.map +1 -0
  214. package/dist/vault/seal.d.ts +68 -0
  215. package/dist/vault/seal.d.ts.map +1 -0
  216. package/dist/vault/seal.js +110 -0
  217. package/dist/vault/seal.js.map +1 -0
  218. package/dist/vault/shamir.d.ts +33 -0
  219. package/dist/vault/shamir.d.ts.map +1 -0
  220. package/dist/vault/shamir.js +174 -0
  221. package/dist/vault/shamir.js.map +1 -0
  222. package/dist/vault/vault-manager.d.ts +62 -0
  223. package/dist/vault/vault-manager.d.ts.map +1 -0
  224. package/dist/vault/vault-manager.js +151 -0
  225. package/dist/vault/vault-manager.js.map +1 -0
  226. package/dist/vault/vault.d.ts +104 -0
  227. package/dist/vault/vault.d.ts.map +1 -0
  228. package/dist/vault/vault.js +259 -0
  229. package/dist/vault/vault.js.map +1 -0
  230. package/dist/version.d.ts +3 -0
  231. package/dist/version.d.ts.map +1 -0
  232. package/dist/version.js +18 -0
  233. package/dist/version.js.map +1 -0
  234. package/dist/webhook/index.d.ts +3 -0
  235. package/dist/webhook/index.d.ts.map +1 -0
  236. package/dist/webhook/index.js +2 -0
  237. package/dist/webhook/index.js.map +1 -0
  238. package/dist/webhook/webhook.d.ts +114 -0
  239. package/dist/webhook/webhook.d.ts.map +1 -0
  240. package/dist/webhook/webhook.js +269 -0
  241. package/dist/webhook/webhook.js.map +1 -0
  242. package/package.json +12 -6
@@ -0,0 +1,104 @@
1
+ /**
2
+ * CLI input validation helpers.
3
+ *
4
+ * Pure functions that validate user-provided CLI flags and exit with a
5
+ * descriptive error when the input is invalid. Extracted from cli.ts so
6
+ * they can be unit-tested independently.
7
+ */
8
+ // ─── Constants ───────────────────────────────────────────────────
9
+ export const IDENTIFIER_RE = /^[a-zA-Z0-9_-]+$/;
10
+ export const VALID_AUTH_TYPES = ['bearer', 'header', 'basic', 'query'];
11
+ export const VALID_BODY_INSPECTION_MODES = ['off', 'warn', 'block'];
12
+ export const VALID_POLICY_MODES = ['enforce', 'dry-run', 'off'];
13
+ export const VALID_LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
14
+ export const VALID_MCP_TRANSPORTS = ['stdio', 'streamable-http'];
15
+ // ─── Validators ──────────────────────────────────────────────────
16
+ /** Validate an identifier (name, service, etc.) used as a DB key or URL path segment. */
17
+ export function validateIdentifier(value, fieldName) {
18
+ if (!value || !IDENTIFIER_RE.test(value)) {
19
+ console.error(`\n✗ Invalid ${fieldName}: "${value}"\n Must contain only letters, numbers, hyphens, and underscores.\n`);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ /** Validate a value is one of the allowed enum values. */
24
+ export function validateEnum(value, allowed, fieldName) {
25
+ if (!allowed.includes(value)) {
26
+ console.error(`\n✗ Invalid ${fieldName}: "${value}"\n Must be one of: ${allowed.join(', ')}\n`);
27
+ process.exit(1);
28
+ }
29
+ return value;
30
+ }
31
+ /** Validate a port number (1–65535). */
32
+ export function validatePort(value, fieldName) {
33
+ if (Number.isNaN(value) || !Number.isFinite(value) || value < 1 || value > 65535) {
34
+ console.error(`\n✗ Invalid ${fieldName}: must be a number between 1 and 65535.\n`);
35
+ process.exit(1);
36
+ }
37
+ }
38
+ /** Validate a positive integer. */
39
+ export function validatePositiveInt(value, fieldName) {
40
+ if (Number.isNaN(value) || !Number.isFinite(value) || value < 1 || !Number.isInteger(value)) {
41
+ console.error(`\n✗ Invalid ${fieldName}: must be a positive integer.\n`);
42
+ process.exit(1);
43
+ }
44
+ }
45
+ /** Validate a non-negative float. */
46
+ export function validateNonNegativeFloat(value, fieldName) {
47
+ if (Number.isNaN(value) || !Number.isFinite(value) || value < 0) {
48
+ console.error(`\n✗ Invalid ${fieldName}: must be a non-negative number.\n`);
49
+ process.exit(1);
50
+ }
51
+ }
52
+ /** Validate a rate limit string (e.g. 100/min) early, before storing. */
53
+ export function validateRateLimit(value) {
54
+ // Re-uses the same regex from rate-limiter.ts
55
+ const match = value.match(/^(\d+)\/(sec(?:ond)?|min(?:ute)?|hr|hour|day)$/i);
56
+ if (!match) {
57
+ console.error(`\n✗ Invalid rate limit: "${value}"\n Expected format: <number>/<unit> (e.g. 100/min, 1000/hour, 10/sec)\n`);
58
+ process.exit(1);
59
+ }
60
+ const count = parseInt(match[1], 10);
61
+ if (count <= 0) {
62
+ console.error(`\n✗ Invalid rate limit: count must be positive.\n`);
63
+ process.exit(1);
64
+ }
65
+ }
66
+ /** Validate a comma-separated domain list. */
67
+ export function validateDomains(raw) {
68
+ const domains = raw
69
+ .split(',')
70
+ .map((d) => d.trim())
71
+ .filter((d) => d.length > 0);
72
+ if (domains.length === 0) {
73
+ console.error(`\n✗ At least one valid domain is required.\n`);
74
+ process.exit(1);
75
+ }
76
+ for (const domain of domains) {
77
+ // Allow wildcards like *.slack.com — basic sanity check
78
+ if (!/^[a-zA-Z0-9.*_-]+(\.[a-zA-Z0-9.*_-]+)*$/.test(domain)) {
79
+ console.error(`\n✗ Invalid domain: "${domain}"\n Domains must be valid hostnames (e.g. api.slack.com, *.example.com)\n`);
80
+ process.exit(1);
81
+ }
82
+ }
83
+ return domains;
84
+ }
85
+ /** Validate an ISO date string. */
86
+ export function validateIsoDate(value, fieldName) {
87
+ const d = new Date(value);
88
+ if (Number.isNaN(d.getTime())) {
89
+ console.error(`\n✗ Invalid ${fieldName}: "${value}"\n Expected ISO 8601 format (e.g. 2026-01-01, 2026-01-01T00:00:00Z)\n`);
90
+ process.exit(1);
91
+ }
92
+ }
93
+ // ─── Formatting ──────────────────────────────────────────────────
94
+ /**
95
+ * Convert a UTC timestamp from SQLite (e.g. "2026-03-09 00:31:38") to
96
+ * the user's local time string. SQLite's datetime('now') stores UTC but
97
+ * omits the 'Z' suffix, so we append it before parsing so JavaScript's
98
+ * Date constructor treats it as UTC rather than local.
99
+ */
100
+ export function localTime(utcTimestamp) {
101
+ const ts = utcTimestamp.endsWith('Z') ? utcTimestamp : `${utcTimestamp}Z`;
102
+ return new Date(ts).toLocaleString();
103
+ }
104
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/cli/validation.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerAgent, registerConfig, registerDashboard, registerDb, registerDoctor, registerGate, registerInit, registerKey, registerLedger, registerMcp, registerPolicy, registerUser, registerVault, registerVaultManager, registerWebhook, } from './cli/index.js';
4
+ import { VERSION } from './version.js';
5
+ const program = new Command();
6
+ program
7
+ .name('aegis')
8
+ .description('Credential isolation for AI agents. Store, guard, and record.')
9
+ .version(VERSION);
10
+ // Register all command groups
11
+ registerVault(program);
12
+ registerVaultManager(program);
13
+ registerGate(program);
14
+ registerAgent(program);
15
+ registerPolicy(program);
16
+ registerMcp(program);
17
+ registerWebhook(program);
18
+ registerLedger(program);
19
+ registerUser(program);
20
+ registerConfig(program);
21
+ registerInit(program);
22
+ registerKey(program);
23
+ registerDoctor(program);
24
+ registerDashboard(program);
25
+ registerDb(program);
26
+ // ── Global error handlers — catch unhandled errors and print clean messages ──
27
+ process.on('uncaughtException', (err) => {
28
+ console.error(`\n✗ ${err.message}\n`);
29
+ process.exit(1);
30
+ });
31
+ process.on('unhandledRejection', (reason) => {
32
+ const message = reason instanceof Error ? reason.message : String(reason);
33
+ console.error(`\n✗ Unhandled async error: ${message}\n`);
34
+ process.exit(1);
35
+ });
36
+ program.parse();
37
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,8BAA8B;AAC9B,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,UAAU,CAAC,OAAO,CAAC,CAAC;AAEpB,gFAAgF;AAChF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAA8B,EAAE,EAAE;IACjE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAe,EAAE,EAAE;IACnD,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,120 @@
1
+ /** Gate proxy configuration. */
2
+ export interface GateConfig {
3
+ port: number;
4
+ tls?: {
5
+ cert: string;
6
+ key: string;
7
+ };
8
+ require_agent_auth: boolean;
9
+ policy_mode: 'enforce' | 'dry-run' | 'off';
10
+ policies_dir?: string;
11
+ /** Maximum request body size in bytes (default: 1048576 = 1 MB). Bodies exceeding this return 413. */
12
+ max_body_size: number;
13
+ /** Request timeout in milliseconds (default: 30000 = 30s). Prevents slowloris attacks. */
14
+ request_timeout: number;
15
+ /** Maximum concurrent in-flight requests per agent (default: 50). Prevents socket exhaustion. */
16
+ max_connections_per_agent: number;
17
+ }
18
+ /** Vault configuration. */
19
+ export interface VaultConfig {
20
+ name: string;
21
+ data_dir: string;
22
+ master_key: string;
23
+ }
24
+ /** Observability configuration. */
25
+ export interface ObservabilityConfig {
26
+ log_level: 'debug' | 'info' | 'warn' | 'error';
27
+ log_format: 'json' | 'pretty';
28
+ metrics: boolean;
29
+ dashboard?: {
30
+ enabled: boolean;
31
+ port: number;
32
+ };
33
+ }
34
+ /** MCP server configuration. */
35
+ export interface McpConfig {
36
+ transport: 'stdio' | 'streamable-http';
37
+ port: number;
38
+ }
39
+ /** Webhook configuration (inline in config file). */
40
+ export interface WebhookConfigEntry {
41
+ url: string;
42
+ secret?: string;
43
+ events: string[];
44
+ }
45
+ /** Complete aegis.config.yaml schema. */
46
+ export interface AegisConfigFile {
47
+ gate?: Partial<GateConfig>;
48
+ vault?: Partial<VaultConfig>;
49
+ observability?: Partial<ObservabilityConfig>;
50
+ mcp?: Partial<McpConfig>;
51
+ webhooks?: WebhookConfigEntry[];
52
+ }
53
+ /** Resolved Aegis configuration — all fields have values. */
54
+ export interface AegisConfig {
55
+ port: number;
56
+ masterKey: string;
57
+ salt: string;
58
+ dataDir: string;
59
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
60
+ logFormat: 'json' | 'pretty';
61
+ vaultName: string;
62
+ tls?: {
63
+ cert: string;
64
+ key: string;
65
+ };
66
+ requireAgentAuth: boolean;
67
+ policyMode: 'enforce' | 'dry-run' | 'off';
68
+ policiesDir?: string;
69
+ metricsEnabled: boolean;
70
+ dashboard: {
71
+ enabled: boolean;
72
+ port: number;
73
+ };
74
+ mcp: {
75
+ transport: 'stdio' | 'streamable-http';
76
+ port: number;
77
+ };
78
+ webhooks: WebhookConfigEntry[];
79
+ /** Maximum request body size in bytes (default: 1 MB). */
80
+ maxBodySize: number;
81
+ /** Request timeout in milliseconds (default: 30s). */
82
+ requestTimeout: number;
83
+ /** Max concurrent in-flight requests per agent (default: 50). */
84
+ maxConnectionsPerAgent: number;
85
+ /** Path to the config file used, if any. */
86
+ configFilePath?: string;
87
+ }
88
+ /**
89
+ * Find the config file path, checking CWD first, then the CLI script's directory.
90
+ * The script directory fallback ensures MCP servers spawned by Claude Desktop /
91
+ * Cursor (which set cwd=/) can still find the config file next to the CLI.
92
+ * Returns absolute path or null if not found.
93
+ */
94
+ export declare function findConfigFile(cwd?: string): string | null;
95
+ /**
96
+ * Parse a YAML config file. Returns the parsed object.
97
+ * Throws on invalid YAML or file read errors.
98
+ */
99
+ export declare function parseConfigFile(filePath: string): AegisConfigFile;
100
+ export interface ConfigValidationError {
101
+ path: string;
102
+ message: string;
103
+ }
104
+ /**
105
+ * Validate a parsed config file. Returns an array of errors (empty = valid).
106
+ */
107
+ export declare function validateConfigFile(config: AegisConfigFile): ConfigValidationError[];
108
+ /**
109
+ * Load and resolve the full Aegis configuration.
110
+ *
111
+ * Resolution order (highest priority wins):
112
+ * 1. Environment variables (AEGIS_*)
113
+ * 2. Config file (aegis.config.yaml)
114
+ * 3. Built-in defaults
115
+ *
116
+ * The .env file is loaded into the environment variable layer.
117
+ * The master key has special handling: env → unseal key file → empty.
118
+ */
119
+ export declare function getConfig(): AegisConfig;
120
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}