@getaegis/cli 0.8.0 → 0.8.1

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 (210) hide show
  1. package/README.md +5 -0
  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 +189 -0
  25. package/dist/cli/commands/dashboard.js.map +1 -0
  26. package/dist/cli/commands/doctor.d.ts +6 -0
  27. package/dist/cli/commands/doctor.d.ts.map +1 -0
  28. package/dist/cli/commands/doctor.js +39 -0
  29. package/dist/cli/commands/doctor.js.map +1 -0
  30. package/dist/cli/commands/gate.d.ts +6 -0
  31. package/dist/cli/commands/gate.d.ts.map +1 -0
  32. package/dist/cli/commands/gate.js +196 -0
  33. package/dist/cli/commands/gate.js.map +1 -0
  34. package/dist/cli/commands/init.d.ts +6 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +109 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/ledger.d.ts +6 -0
  39. package/dist/cli/commands/ledger.d.ts.map +1 -0
  40. package/dist/cli/commands/ledger.js +140 -0
  41. package/dist/cli/commands/ledger.js.map +1 -0
  42. package/dist/cli/commands/mcp.d.ts +6 -0
  43. package/dist/cli/commands/mcp.d.ts.map +1 -0
  44. package/dist/cli/commands/mcp.js +224 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/policy.d.ts +6 -0
  47. package/dist/cli/commands/policy.d.ts.map +1 -0
  48. package/dist/cli/commands/policy.js +126 -0
  49. package/dist/cli/commands/policy.js.map +1 -0
  50. package/dist/cli/commands/user.d.ts +6 -0
  51. package/dist/cli/commands/user.d.ts.map +1 -0
  52. package/dist/cli/commands/user.js +150 -0
  53. package/dist/cli/commands/user.js.map +1 -0
  54. package/dist/cli/commands/vault-manager.d.ts +6 -0
  55. package/dist/cli/commands/vault-manager.d.ts.map +1 -0
  56. package/dist/cli/commands/vault-manager.js +240 -0
  57. package/dist/cli/commands/vault-manager.js.map +1 -0
  58. package/dist/cli/commands/vault.d.ts +6 -0
  59. package/dist/cli/commands/vault.d.ts.map +1 -0
  60. package/dist/cli/commands/vault.js +241 -0
  61. package/dist/cli/commands/vault.js.map +1 -0
  62. package/dist/cli/commands/webhook.d.ts +6 -0
  63. package/dist/cli/commands/webhook.d.ts.map +1 -0
  64. package/dist/cli/commands/webhook.js +151 -0
  65. package/dist/cli/commands/webhook.js.map +1 -0
  66. package/dist/cli/helpers.d.ts +12 -0
  67. package/dist/cli/helpers.d.ts.map +1 -0
  68. package/dist/cli/helpers.js +61 -0
  69. package/dist/cli/helpers.js.map +1 -0
  70. package/dist/cli/index.d.ts +17 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +17 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/validation.d.ts +37 -0
  75. package/dist/cli/validation.d.ts.map +1 -0
  76. package/dist/cli/validation.js +104 -0
  77. package/dist/cli/validation.js.map +1 -0
  78. package/dist/cli.d.ts +3 -0
  79. package/dist/cli.d.ts.map +1 -0
  80. package/dist/cli.js +30 -0
  81. package/dist/cli.js.map +1 -0
  82. package/dist/config.d.ts +108 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +355 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/dashboard/dashboard-server.d.ts +95 -0
  87. package/dist/dashboard/dashboard-server.d.ts.map +1 -0
  88. package/dist/dashboard/dashboard-server.js +329 -0
  89. package/dist/dashboard/dashboard-server.js.map +1 -0
  90. package/dist/dashboard/index.d.ts +3 -0
  91. package/dist/dashboard/index.d.ts.map +1 -0
  92. package/dist/dashboard/index.js +2 -0
  93. package/dist/dashboard/index.js.map +1 -0
  94. package/dist/dashboard/public/assets/index-CpMruPNh.css +1 -0
  95. package/dist/dashboard/public/assets/index-DkHiw9_f.js +148 -0
  96. package/dist/dashboard/public/favicon.svg +6 -0
  97. package/dist/dashboard/public/index.html +14 -0
  98. package/dist/db.d.ts +15 -0
  99. package/dist/db.d.ts.map +1 -0
  100. package/dist/db.js +190 -0
  101. package/dist/db.js.map +1 -0
  102. package/dist/doctor.d.ts +37 -0
  103. package/dist/doctor.d.ts.map +1 -0
  104. package/dist/doctor.js +196 -0
  105. package/dist/doctor.js.map +1 -0
  106. package/dist/gate/body-inspector.d.ts +31 -0
  107. package/dist/gate/body-inspector.d.ts.map +1 -0
  108. package/dist/gate/body-inspector.js +193 -0
  109. package/dist/gate/body-inspector.js.map +1 -0
  110. package/dist/gate/gate.d.ts +168 -0
  111. package/dist/gate/gate.d.ts.map +1 -0
  112. package/dist/gate/gate.js +1016 -0
  113. package/dist/gate/gate.js.map +1 -0
  114. package/dist/gate/index.d.ts +7 -0
  115. package/dist/gate/index.d.ts.map +1 -0
  116. package/dist/gate/index.js +4 -0
  117. package/dist/gate/index.js.map +1 -0
  118. package/dist/gate/rate-limiter.d.ts +59 -0
  119. package/dist/gate/rate-limiter.d.ts.map +1 -0
  120. package/dist/gate/rate-limiter.js +120 -0
  121. package/dist/gate/rate-limiter.js.map +1 -0
  122. package/dist/index.d.ts +26 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +16 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/ledger/index.d.ts +3 -0
  127. package/dist/ledger/index.d.ts.map +1 -0
  128. package/dist/ledger/index.js +2 -0
  129. package/dist/ledger/index.js.map +1 -0
  130. package/dist/ledger/ledger.d.ts +98 -0
  131. package/dist/ledger/ledger.d.ts.map +1 -0
  132. package/dist/ledger/ledger.js +145 -0
  133. package/dist/ledger/ledger.js.map +1 -0
  134. package/dist/logger/index.d.ts +3 -0
  135. package/dist/logger/index.d.ts.map +1 -0
  136. package/dist/logger/index.js +2 -0
  137. package/dist/logger/index.js.map +1 -0
  138. package/dist/logger/logger.d.ts +58 -0
  139. package/dist/logger/logger.d.ts.map +1 -0
  140. package/dist/logger/logger.js +201 -0
  141. package/dist/logger/logger.js.map +1 -0
  142. package/dist/mcp/index.d.ts +3 -0
  143. package/dist/mcp/index.d.ts.map +1 -0
  144. package/dist/mcp/index.js +2 -0
  145. package/dist/mcp/index.js.map +1 -0
  146. package/dist/mcp/mcp-server.d.ts +130 -0
  147. package/dist/mcp/mcp-server.d.ts.map +1 -0
  148. package/dist/mcp/mcp-server.js +775 -0
  149. package/dist/mcp/mcp-server.js.map +1 -0
  150. package/dist/metrics/index.d.ts +3 -0
  151. package/dist/metrics/index.d.ts.map +1 -0
  152. package/dist/metrics/index.js +2 -0
  153. package/dist/metrics/index.js.map +1 -0
  154. package/dist/metrics/metrics.d.ts +88 -0
  155. package/dist/metrics/metrics.d.ts.map +1 -0
  156. package/dist/metrics/metrics.js +179 -0
  157. package/dist/metrics/metrics.js.map +1 -0
  158. package/dist/policy/index.d.ts +3 -0
  159. package/dist/policy/index.d.ts.map +1 -0
  160. package/dist/policy/index.js +2 -0
  161. package/dist/policy/index.js.map +1 -0
  162. package/dist/policy/policy.d.ts +119 -0
  163. package/dist/policy/policy.d.ts.map +1 -0
  164. package/dist/policy/policy.js +426 -0
  165. package/dist/policy/policy.js.map +1 -0
  166. package/dist/user/index.d.ts +3 -0
  167. package/dist/user/index.d.ts.map +1 -0
  168. package/dist/user/index.js +2 -0
  169. package/dist/user/index.js.map +1 -0
  170. package/dist/user/user.d.ts +102 -0
  171. package/dist/user/user.d.ts.map +1 -0
  172. package/dist/user/user.js +216 -0
  173. package/dist/user/user.js.map +1 -0
  174. package/dist/vault/crypto.d.ts +28 -0
  175. package/dist/vault/crypto.d.ts.map +1 -0
  176. package/dist/vault/crypto.js +44 -0
  177. package/dist/vault/crypto.js.map +1 -0
  178. package/dist/vault/index.d.ts +10 -0
  179. package/dist/vault/index.d.ts.map +1 -0
  180. package/dist/vault/index.js +6 -0
  181. package/dist/vault/index.js.map +1 -0
  182. package/dist/vault/seal.d.ts +68 -0
  183. package/dist/vault/seal.d.ts.map +1 -0
  184. package/dist/vault/seal.js +110 -0
  185. package/dist/vault/seal.js.map +1 -0
  186. package/dist/vault/shamir.d.ts +33 -0
  187. package/dist/vault/shamir.d.ts.map +1 -0
  188. package/dist/vault/shamir.js +174 -0
  189. package/dist/vault/shamir.js.map +1 -0
  190. package/dist/vault/vault-manager.d.ts +62 -0
  191. package/dist/vault/vault-manager.d.ts.map +1 -0
  192. package/dist/vault/vault-manager.js +141 -0
  193. package/dist/vault/vault-manager.js.map +1 -0
  194. package/dist/vault/vault.d.ts +104 -0
  195. package/dist/vault/vault.d.ts.map +1 -0
  196. package/dist/vault/vault.js +259 -0
  197. package/dist/vault/vault.js.map +1 -0
  198. package/dist/version.d.ts +3 -0
  199. package/dist/version.d.ts.map +1 -0
  200. package/dist/version.js +18 -0
  201. package/dist/version.js.map +1 -0
  202. package/dist/webhook/index.d.ts +3 -0
  203. package/dist/webhook/index.d.ts.map +1 -0
  204. package/dist/webhook/index.js +2 -0
  205. package/dist/webhook/index.js.map +1 -0
  206. package/dist/webhook/webhook.d.ts +114 -0
  207. package/dist/webhook/webhook.d.ts.map +1 -0
  208. package/dist/webhook/webhook.js +269 -0
  209. package/dist/webhook/webhook.js.map +1 -0
  210. package/package.json +7 -3
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Webhook commands: add, list, remove, test, check-expiry.
3
+ */
4
+ import { getConfig } from '../../config.js';
5
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
6
+ import { deriveKey, Vault } from '../../vault/index.js';
7
+ import { WEBHOOK_EVENT_TYPES, WebhookManager } from '../../webhook/index.js';
8
+ import { requireUserAuth } from '../auth.js';
9
+ import { localTime } from '../validation.js';
10
+ export function register(program) {
11
+ const webhookCmd = program.command('webhook').description('Manage webhook alert endpoints');
12
+ webhookCmd
13
+ .command('add')
14
+ .description('Register a webhook endpoint for event notifications')
15
+ .requiredOption('-u, --url <url>', 'Webhook endpoint URL (http or https)')
16
+ .requiredOption('-e, --events <events>', 'Comma-separated event types: blocked_request, credential_expiry, rate_limit_exceeded, agent_auth_failure, body_inspection')
17
+ .option('-l, --label <label>', 'Human-readable label for this webhook')
18
+ .action((opts) => {
19
+ const config = getConfig();
20
+ const db = getDb(config);
21
+ migrate(db);
22
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
23
+ requireUserAuth(db, key, 'webhook:write');
24
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
25
+ const events = opts.events.split(',').map((e) => e.trim());
26
+ for (const event of events) {
27
+ if (!WEBHOOK_EVENT_TYPES.includes(event)) {
28
+ console.error(`\n ✗ Invalid event type: ${event}\n Valid types: ${WEBHOOK_EVENT_TYPES.join(', ')}\n`);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ try {
33
+ const webhook = webhookManager.add({
34
+ url: opts.url,
35
+ events: events,
36
+ label: opts.label,
37
+ });
38
+ console.log(`\n ✔ Webhook registered`);
39
+ console.log(` ID: ${webhook.id}`);
40
+ console.log(` URL: ${webhook.url}`);
41
+ console.log(` Events: ${webhook.events.join(', ')}`);
42
+ if (webhook.label)
43
+ console.log(` Label: ${webhook.label}`);
44
+ console.log(` Secret: ${webhook.secret}`);
45
+ console.log(`\n Use the secret to verify payload signatures (X-Aegis-Signature header).\n`);
46
+ }
47
+ catch (err) {
48
+ console.error(`\n ✗ ${err instanceof Error ? err.message : String(err)}\n`);
49
+ process.exit(1);
50
+ }
51
+ db.close();
52
+ });
53
+ webhookCmd
54
+ .command('list')
55
+ .description('List all registered webhooks')
56
+ .action(() => {
57
+ const config = getConfig();
58
+ const db = getDb(config);
59
+ migrate(db);
60
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
61
+ requireUserAuth(db, key, 'webhook:read');
62
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
63
+ const webhooks = webhookManager.list();
64
+ if (webhooks.length === 0) {
65
+ console.log('\n No webhooks registered. Add one with: aegis webhook add --url https://example.com/hook --events blocked_request\n');
66
+ }
67
+ else {
68
+ console.log(`\n Aegis Webhooks — ${webhooks.length} registered\n`);
69
+ for (const w of webhooks) {
70
+ console.log(` ${w.label ?? w.id}`);
71
+ console.log(` URL: ${w.url}`);
72
+ console.log(` Events: ${w.events.join(', ')}`);
73
+ console.log(` Added: ${localTime(w.createdAt)}`);
74
+ console.log();
75
+ }
76
+ }
77
+ db.close();
78
+ });
79
+ webhookCmd
80
+ .command('remove')
81
+ .description('Remove a webhook by ID')
82
+ .requiredOption('--id <id>', 'Webhook ID to remove')
83
+ .action((opts) => {
84
+ const config = getConfig();
85
+ const db = getDb(config);
86
+ migrate(db);
87
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
88
+ requireUserAuth(db, key, 'webhook:write');
89
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
90
+ if (webhookManager.remove(opts.id)) {
91
+ console.log(`\n ✔ Webhook removed: ${opts.id}\n`);
92
+ }
93
+ else {
94
+ console.error(`\n ✗ Webhook not found: ${opts.id}\n`);
95
+ process.exit(1);
96
+ }
97
+ db.close();
98
+ });
99
+ webhookCmd
100
+ .command('test')
101
+ .description('Send a test event to a webhook')
102
+ .requiredOption('--id <id>', 'Webhook ID to test')
103
+ .action(async (opts) => {
104
+ const config = getConfig();
105
+ const db = getDb(config);
106
+ migrate(db);
107
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
108
+ requireUserAuth(db, key, 'webhook:read');
109
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
110
+ const webhook = webhookManager.getById(opts.id);
111
+ if (!webhook) {
112
+ console.error(`\n ✗ Webhook not found: ${opts.id}\n`);
113
+ db.close();
114
+ process.exit(1);
115
+ }
116
+ console.log(`\n Sending test event to ${webhook.url}...`);
117
+ webhookManager.emit('blocked_request', {
118
+ test: true,
119
+ service: 'test-service',
120
+ reason: 'test_event',
121
+ message: 'This is a test webhook delivery from Aegis',
122
+ });
123
+ // Give it a moment to deliver
124
+ await new Promise((resolve) => setTimeout(resolve, 3000));
125
+ console.log(` ✔ Test event sent\n`);
126
+ db.close();
127
+ });
128
+ webhookCmd
129
+ .command('check-expiry')
130
+ .description('Check for credentials approaching expiry and emit webhook alerts')
131
+ .option('--threshold <days>', 'Alert threshold in days (default: 7)', '7')
132
+ .action((opts) => {
133
+ const config = getConfig();
134
+ const db = getDb(config);
135
+ migrate(db);
136
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
137
+ requireUserAuth(db, key, 'webhook:read');
138
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
139
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
140
+ const thresholdDays = Number.parseInt(opts.threshold, 10) || 7;
141
+ const alertCount = webhookManager.checkExpiringCredentials(vaultInstance, thresholdDays);
142
+ if (alertCount === 0) {
143
+ console.log(`\n ✔ No credentials expiring within ${thresholdDays} days\n`);
144
+ }
145
+ else {
146
+ console.log(`\n ⚠ ${alertCount} credential(s) expiring within ${thresholdDays} days — webhook alerts sent\n`);
147
+ }
148
+ db.close();
149
+ });
150
+ }
151
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/cli/commands/webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared CLI helper utilities.
3
+ */
4
+ /**
5
+ * Generate a self-signed TLS certificate using openssl.
6
+ * Creates certs/aegis.key and certs/aegis.crt in the given base directory.
7
+ *
8
+ * The certificate is valid for 365 days, issued to CN=localhost with
9
+ * SubjectAltNames for localhost and 127.0.0.1.
10
+ */
11
+ export declare function generateSelfSignedCert(baseDir: string): void;
12
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAqD5D"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shared CLI helper utilities.
3
+ */
4
+ import { execSync } from 'node:child_process';
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ /**
8
+ * Generate a self-signed TLS certificate using openssl.
9
+ * Creates certs/aegis.key and certs/aegis.crt in the given base directory.
10
+ *
11
+ * The certificate is valid for 365 days, issued to CN=localhost with
12
+ * SubjectAltNames for localhost and 127.0.0.1.
13
+ */
14
+ export function generateSelfSignedCert(baseDir) {
15
+ const certsDir = path.join(baseDir, 'certs');
16
+ if (!fs.existsSync(certsDir)) {
17
+ fs.mkdirSync(certsDir, { recursive: true });
18
+ }
19
+ const keyPath = path.join(certsDir, 'aegis.key');
20
+ const certPath = path.join(certsDir, 'aegis.crt');
21
+ if (fs.existsSync(keyPath) && fs.existsSync(certPath)) {
22
+ console.log(`\n TLS certificate already exists at ${certsDir}/`);
23
+ console.log(` ${keyPath}`);
24
+ console.log(` ${certPath}\n`);
25
+ return;
26
+ }
27
+ try {
28
+ // Check openssl is available
29
+ execSync('openssl version', { stdio: 'pipe' });
30
+ }
31
+ catch {
32
+ console.error('\n ✗ openssl not found. Install OpenSSL to generate self-signed certificates.\n');
33
+ return;
34
+ }
35
+ try {
36
+ // Generate RSA private key (2048 bits)
37
+ execSync(`openssl genrsa -out "${keyPath}" 2048`, { stdio: 'pipe' });
38
+ fs.chmodSync(keyPath, 0o600);
39
+ // Generate self-signed certificate with SAN for localhost
40
+ const opensslCmd = [
41
+ 'openssl req -new -x509',
42
+ `-key "${keyPath}"`,
43
+ `-out "${certPath}"`,
44
+ '-days 365',
45
+ '-subj "/CN=localhost/O=Aegis Local Dev"',
46
+ '-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"',
47
+ ].join(' ');
48
+ execSync(opensslCmd, { stdio: 'pipe' });
49
+ console.log(`\n 🔒 Self-signed TLS certificate generated:`);
50
+ console.log(` Key: ${keyPath}`);
51
+ console.log(` Cert: ${certPath}`);
52
+ console.log(` Valid for 365 days (localhost + 127.0.0.1)\n`);
53
+ console.log(` Start Gate with TLS: aegis gate --tls`);
54
+ console.log(` Or specify paths: aegis gate --tls --cert ${certPath} --key ${keyPath}\n`);
55
+ }
56
+ catch (err) {
57
+ const message = err instanceof Error ? err.message : String(err);
58
+ console.error(`\n ✗ Failed to generate certificate: ${message}\n`);
59
+ }
60
+ }
61
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAElD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,6BAA6B;QAC7B,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,kFAAkF,CACnF,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,uCAAuC;QACvC,QAAQ,CAAC,wBAAwB,OAAO,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE7B,0DAA0D;QAC1D,MAAM,UAAU,GAAG;YACjB,wBAAwB;YACxB,SAAS,OAAO,GAAG;YACnB,SAAS,QAAQ,GAAG;YACpB,WAAW;YACX,yCAAyC;YACzC,qDAAqD;SACtD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAExC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,oDAAoD,QAAQ,UAAU,OAAO,IAAI,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,yCAAyC,OAAO,IAAI,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI module barrel — re-exports all command registration functions.
3
+ */
4
+ export { register as registerAgent } from './commands/agent.js';
5
+ export { register as registerConfig } from './commands/config.js';
6
+ export { register as registerDashboard } from './commands/dashboard.js';
7
+ export { register as registerDoctor } from './commands/doctor.js';
8
+ export { register as registerGate } from './commands/gate.js';
9
+ export { register as registerInit } from './commands/init.js';
10
+ export { register as registerLedger } from './commands/ledger.js';
11
+ export { register as registerMcp } from './commands/mcp.js';
12
+ export { register as registerPolicy } from './commands/policy.js';
13
+ export { register as registerUser } from './commands/user.js';
14
+ export { register as registerVault } from './commands/vault.js';
15
+ export { register as registerVaultManager } from './commands/vault-manager.js';
16
+ export { register as registerWebhook } from './commands/webhook.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI module barrel — re-exports all command registration functions.
3
+ */
4
+ export { register as registerAgent } from './commands/agent.js';
5
+ export { register as registerConfig } from './commands/config.js';
6
+ export { register as registerDashboard } from './commands/dashboard.js';
7
+ export { register as registerDoctor } from './commands/doctor.js';
8
+ export { register as registerGate } from './commands/gate.js';
9
+ export { register as registerInit } from './commands/init.js';
10
+ export { register as registerLedger } from './commands/ledger.js';
11
+ export { register as registerMcp } from './commands/mcp.js';
12
+ export { register as registerPolicy } from './commands/policy.js';
13
+ export { register as registerUser } from './commands/user.js';
14
+ export { register as registerVault } from './commands/vault.js';
15
+ export { register as registerVaultManager } from './commands/vault-manager.js';
16
+ export { register as registerWebhook } from './commands/webhook.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,37 @@
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
+ export declare const IDENTIFIER_RE: RegExp;
9
+ export declare const VALID_AUTH_TYPES: readonly ["bearer", "header", "basic", "query"];
10
+ export declare const VALID_BODY_INSPECTION_MODES: readonly ["off", "warn", "block"];
11
+ export declare const VALID_POLICY_MODES: readonly ["enforce", "dry-run", "off"];
12
+ export declare const VALID_LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
13
+ export declare const VALID_MCP_TRANSPORTS: readonly ["stdio", "streamable-http"];
14
+ /** Validate an identifier (name, service, etc.) used as a DB key or URL path segment. */
15
+ export declare function validateIdentifier(value: string, fieldName: string): void;
16
+ /** Validate a value is one of the allowed enum values. */
17
+ export declare function validateEnum<T extends string>(value: string, allowed: readonly T[], fieldName: string): T;
18
+ /** Validate a port number (1–65535). */
19
+ export declare function validatePort(value: number, fieldName: string): void;
20
+ /** Validate a positive integer. */
21
+ export declare function validatePositiveInt(value: number, fieldName: string): void;
22
+ /** Validate a non-negative float. */
23
+ export declare function validateNonNegativeFloat(value: number, fieldName: string): void;
24
+ /** Validate a rate limit string (e.g. 100/min) early, before storing. */
25
+ export declare function validateRateLimit(value: string): void;
26
+ /** Validate a comma-separated domain list. */
27
+ export declare function validateDomains(raw: string): string[];
28
+ /** Validate an ISO date string. */
29
+ export declare function validateIsoDate(value: string, fieldName: string): void;
30
+ /**
31
+ * Convert a UTC timestamp from SQLite (e.g. "2026-03-09 00:31:38") to
32
+ * the user's local time string. SQLite's datetime('now') stores UTC but
33
+ * omits the 'Z' suffix, so we append it before parsing so JavaScript's
34
+ * Date constructor treats it as UTC rather than local.
35
+ */
36
+ export declare function localTime(utcTimestamp: string): string;
37
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/cli/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,aAAa,QAAqB,CAAC;AAEhD,eAAO,MAAM,gBAAgB,iDAAkD,CAAC;AAChF,eAAO,MAAM,2BAA2B,mCAAoC,CAAC;AAC7E,eAAO,MAAM,kBAAkB,wCAAyC,CAAC;AACzE,eAAO,MAAM,gBAAgB,6CAA8C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,uCAAwC,CAAC;AAI1E,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOzE;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,SAAS,EAAE,MAAM,GAChB,CAAC,CAQH;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAKnE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAK1E;AAED,qCAAqC;AACrC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAK/E;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAcrD;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrD;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQtE;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGtD"}
@@ -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,30 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerAgent, registerConfig, registerDashboard, registerDoctor, registerGate, registerInit, 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
+ registerDoctor(program);
23
+ registerDashboard(program);
24
+ // ── Global error handler — catch unhandled errors and print clean messages ──
25
+ process.on('uncaughtException', (err) => {
26
+ console.error(`\n✗ ${err.message}\n`);
27
+ process.exit(1);
28
+ });
29
+ program.parse();
30
+ //# 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,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,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,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE3B,+EAA+E;AAC/E,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,KAAK,EAAE,CAAC"}
@@ -0,0 +1,108 @@
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
+ }
12
+ /** Vault configuration. */
13
+ export interface VaultConfig {
14
+ name: string;
15
+ data_dir: string;
16
+ master_key: string;
17
+ }
18
+ /** Observability configuration. */
19
+ export interface ObservabilityConfig {
20
+ log_level: 'debug' | 'info' | 'warn' | 'error';
21
+ log_format: 'json' | 'pretty';
22
+ metrics: boolean;
23
+ dashboard?: {
24
+ enabled: boolean;
25
+ port: number;
26
+ };
27
+ }
28
+ /** MCP server configuration. */
29
+ export interface McpConfig {
30
+ transport: 'stdio' | 'streamable-http';
31
+ port: number;
32
+ }
33
+ /** Webhook configuration (inline in config file). */
34
+ export interface WebhookConfigEntry {
35
+ url: string;
36
+ secret?: string;
37
+ events: string[];
38
+ }
39
+ /** Complete aegis.config.yaml schema. */
40
+ export interface AegisConfigFile {
41
+ gate?: Partial<GateConfig>;
42
+ vault?: Partial<VaultConfig>;
43
+ observability?: Partial<ObservabilityConfig>;
44
+ mcp?: Partial<McpConfig>;
45
+ webhooks?: WebhookConfigEntry[];
46
+ }
47
+ /** Resolved Aegis configuration — all fields have values. */
48
+ export interface AegisConfig {
49
+ port: number;
50
+ masterKey: string;
51
+ salt: string;
52
+ dataDir: string;
53
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
54
+ logFormat: 'json' | 'pretty';
55
+ vaultName: string;
56
+ tls?: {
57
+ cert: string;
58
+ key: string;
59
+ };
60
+ requireAgentAuth: boolean;
61
+ policyMode: 'enforce' | 'dry-run' | 'off';
62
+ policiesDir?: string;
63
+ metricsEnabled: boolean;
64
+ dashboard: {
65
+ enabled: boolean;
66
+ port: number;
67
+ };
68
+ mcp: {
69
+ transport: 'stdio' | 'streamable-http';
70
+ port: number;
71
+ };
72
+ webhooks: WebhookConfigEntry[];
73
+ /** Path to the config file used, if any. */
74
+ configFilePath?: string;
75
+ }
76
+ /**
77
+ * Find the config file path, checking CWD first, then the CLI script's directory.
78
+ * The script directory fallback ensures MCP servers spawned by Claude Desktop /
79
+ * Cursor (which set cwd=/) can still find the config file next to the CLI.
80
+ * Returns absolute path or null if not found.
81
+ */
82
+ export declare function findConfigFile(cwd?: string): string | null;
83
+ /**
84
+ * Parse a YAML config file. Returns the parsed object.
85
+ * Throws on invalid YAML or file read errors.
86
+ */
87
+ export declare function parseConfigFile(filePath: string): AegisConfigFile;
88
+ export interface ConfigValidationError {
89
+ path: string;
90
+ message: string;
91
+ }
92
+ /**
93
+ * Validate a parsed config file. Returns an array of errors (empty = valid).
94
+ */
95
+ export declare function validateConfigFile(config: AegisConfigFile): ConfigValidationError[];
96
+ /**
97
+ * Load and resolve the full Aegis configuration.
98
+ *
99
+ * Resolution order (highest priority wins):
100
+ * 1. Environment variables (AEGIS_*)
101
+ * 2. Config file (aegis.config.yaml)
102
+ * 3. Built-in defaults
103
+ *
104
+ * The .env file is loaded into the environment variable layer.
105
+ * The master key has special handling: env → unseal key file → empty.
106
+ */
107
+ export declare function getConfig(): AegisConfig;
108
+ //# 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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"}