@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,39 @@
1
+ /**
2
+ * Doctor command: run health checks on the Aegis installation.
3
+ */
4
+ import { getConfig } from '../../config.js';
5
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
6
+ import { printDoctorReport, runDoctor } from '../../doctor.js';
7
+ import { deriveKey, VaultManager } from '../../vault/index.js';
8
+ import { requireUserAuth } from '../auth.js';
9
+ export function register(program) {
10
+ program
11
+ .command('doctor')
12
+ .description('Run health checks on your Aegis installation')
13
+ .action(() => {
14
+ console.log('\n Aegis Doctor — running health checks...\n');
15
+ const config = getConfig();
16
+ const manager = new VaultManager(config.dataDir);
17
+ const vaultInfo = manager.getVaultInfo(config.vaultName);
18
+ let db = null;
19
+ if (vaultInfo) {
20
+ try {
21
+ db = getDb(config);
22
+ }
23
+ catch {
24
+ // db stays null — runDoctor handles that case
25
+ }
26
+ }
27
+ if (db) {
28
+ migrate(db);
29
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
30
+ requireUserAuth(db, key, 'doctor:run');
31
+ }
32
+ const report = runDoctor({ config, db });
33
+ printDoctorReport(report);
34
+ if (report.overall === 'fail') {
35
+ process.exit(1);
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,EAAE,GAAoC,IAAI,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;QAED,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9D,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gate command: start the Aegis Gate proxy.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuO/C"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Gate command: start the Aegis Gate proxy.
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ import { AgentRegistry } from '../../agent/index.js';
7
+ import { getConfig } from '../../config.js';
8
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
9
+ import { Gate } from '../../gate/index.js';
10
+ import { Ledger } from '../../ledger/index.js';
11
+ import { AegisMetrics } from '../../metrics/index.js';
12
+ import { deriveKey, Vault } from '../../vault/index.js';
13
+ import { VERSION } from '../../version.js';
14
+ import { WebhookManager } from '../../webhook/index.js';
15
+ import { requireUserAuth } from '../auth.js';
16
+ import { VALID_POLICY_MODES, validateEnum, validatePort } from '../validation.js';
17
+ export function register(program) {
18
+ program
19
+ .command('gate')
20
+ .description('Start the Aegis Gate proxy')
21
+ .option('-p, --port <port>', 'Port to listen on')
22
+ .option('--tls', 'Enable TLS (HTTPS) on Gate')
23
+ .option('--cert <path>', 'Path to TLS certificate file (PEM)')
24
+ .option('--key <path>', 'Path to TLS private key file (PEM)')
25
+ .option('--require-agent-auth', 'Require X-Aegis-Agent token on every request')
26
+ .option('--policies-dir <path>', 'Directory containing YAML policy files')
27
+ .option('--policy-mode <mode>', 'Policy enforcement mode: enforce, dry-run, or off')
28
+ .action(async (opts) => {
29
+ // ── Validate CLI flags ──
30
+ if (opts.port) {
31
+ const p = Number.parseInt(opts.port, 10);
32
+ validatePort(p, 'gate port');
33
+ }
34
+ if (opts.policyMode) {
35
+ validateEnum(opts.policyMode, VALID_POLICY_MODES, 'policy mode');
36
+ }
37
+ let config;
38
+ try {
39
+ config = getConfig();
40
+ }
41
+ catch (err) {
42
+ const msg = err instanceof Error ? err.message : String(err);
43
+ console.error(`\n✗ ${msg}\n`);
44
+ process.exit(1);
45
+ }
46
+ const port = opts.port ? Number.parseInt(opts.port, 10) : config.port;
47
+ let db;
48
+ try {
49
+ db = getDb(config);
50
+ migrate(db);
51
+ }
52
+ catch (err) {
53
+ const msg = err instanceof Error ? err.message : String(err);
54
+ console.error(`\n✗ Cannot open database: ${msg}\n`);
55
+ process.exit(1);
56
+ }
57
+ if (!config.masterKey) {
58
+ console.error('\n✗ AEGIS_MASTER_KEY is not set.\n Run `aegis init` to generate a config and master key.\n');
59
+ process.exit(1);
60
+ }
61
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
62
+ requireUserAuth(db, key, 'gate:start');
63
+ const vaultInstance = new Vault(db, config.masterKey, getVaultSalt(config));
64
+ const ledger = new Ledger(db);
65
+ // Resolve TLS: CLI flags → config file
66
+ const useTls = opts.tls ?? !!config.tls;
67
+ let tlsConfig;
68
+ if (useTls) {
69
+ const certPath = opts.cert ?? config.tls?.cert ?? path.join(process.cwd(), 'certs', 'aegis.crt');
70
+ const keyPath = opts.key ?? config.tls?.key ?? path.join(process.cwd(), 'certs', 'aegis.key');
71
+ if (!fs.existsSync(certPath)) {
72
+ console.error(`\n✗ TLS certificate not found at ${certPath}\n Generate one with: aegis init --generate-cert\n Or specify a path: aegis gate --tls --cert /path/to/cert.pem --key /path/to/key.pem\n`);
73
+ process.exit(1);
74
+ }
75
+ if (!fs.existsSync(keyPath)) {
76
+ console.error(`\n✗ TLS private key not found at ${keyPath}\n Generate one with: aegis init --generate-cert\n Or specify a path: aegis gate --tls --cert /path/to/cert.pem --key /path/to/key.pem\n`);
77
+ process.exit(1);
78
+ }
79
+ tlsConfig = { certPath, keyPath };
80
+ }
81
+ const registry = new AgentRegistry(db, key);
82
+ // Resolve policy: CLI flags → config file
83
+ const effectiveRequireAgentAuth = opts.requireAgentAuth ?? config.requireAgentAuth;
84
+ const effectivePolicyMode = opts.policyMode ??
85
+ (config.policyMode === 'off' ? undefined : config.policyMode);
86
+ const policyDir = opts.policiesDir
87
+ ? path.resolve(opts.policiesDir)
88
+ : config.policiesDir
89
+ ? path.resolve(config.policiesDir)
90
+ : undefined;
91
+ if (policyDir && !fs.existsSync(policyDir)) {
92
+ console.error(`\n✗ Policy directory not found at ${policyDir}\n Create it and add YAML policy files, or omit --policies-dir\n`);
93
+ process.exit(1);
94
+ }
95
+ const webhookManager = new WebhookManager({ db, logLevel: config.logLevel });
96
+ // Metrics: create instance if enabled in config
97
+ const metrics = config.metricsEnabled
98
+ ? new AegisMetrics({ vault: vaultInstance })
99
+ : undefined;
100
+ const gate = new Gate({
101
+ port,
102
+ vault: vaultInstance,
103
+ ledger,
104
+ logLevel: config.logLevel,
105
+ tls: tlsConfig,
106
+ agentRegistry: registry,
107
+ requireAgentAuth: effectiveRequireAgentAuth,
108
+ policyDir,
109
+ policyMode: effectivePolicyMode,
110
+ webhooks: webhookManager,
111
+ metrics,
112
+ });
113
+ const protocol = tlsConfig ? 'https' : 'http';
114
+ console.log(`\n ╔══════════════════════════════════╗`);
115
+ console.log(` ║ Aegis Gate ${VERSION.padEnd(13)}║`);
116
+ console.log(` ╚══════════════════════════════════╝\n`);
117
+ if (tlsConfig) {
118
+ console.log(' 🔒 TLS enabled\n');
119
+ }
120
+ else {
121
+ console.log(' ⚠ Running without TLS — credentials are transmitted in cleartext on localhost\n');
122
+ console.log(' To enable TLS: aegis gate --tls (after running aegis init --generate-cert)\n');
123
+ }
124
+ if (effectiveRequireAgentAuth) {
125
+ console.log(' 🔑 Agent authentication required (X-Aegis-Agent header)\n');
126
+ }
127
+ if (metrics) {
128
+ console.log(' 📊 Metrics enabled (/_aegis/metrics)\n');
129
+ }
130
+ if (policyDir) {
131
+ const modeLabel = effectivePolicyMode === 'dry-run' ? 'DRY-RUN (log only)' : 'ENFORCE (block violations)';
132
+ console.log(` 📋 Policies: ${policyDir}`);
133
+ console.log(` Mode: ${modeLabel}\n`);
134
+ }
135
+ if (config.configFilePath) {
136
+ console.log(` 📄 Config: ${config.configFilePath}\n`);
137
+ }
138
+ const creds = vaultInstance.list();
139
+ if (creds.length === 0) {
140
+ console.log(' ⚠ No credentials in vault. Add some first: aegis vault add\n');
141
+ }
142
+ else {
143
+ console.log(` ${creds.length} credential(s) loaded:\n`);
144
+ for (const c of creds) {
145
+ console.log(` ${c.service} → ${c.domains.join(', ')} (${c.authType})`);
146
+ }
147
+ console.log();
148
+ }
149
+ try {
150
+ await gate.start();
151
+ }
152
+ catch (err) {
153
+ const message = err instanceof Error ? err.message : String(err);
154
+ console.error(`\n✗ Failed to start Gate: ${message}\n`);
155
+ db.close();
156
+ process.exit(1);
157
+ }
158
+ console.log(` Agent config: set your agent's base URL to ${protocol}://localhost:${port}`);
159
+ console.log(` Example: curl ${protocol}://localhost:${port}/slack/api/chat.postMessage\n`);
160
+ console.log(` Press Ctrl+C to stop.\n`);
161
+ // Graceful shutdown
162
+ let shutdownInProgress = false;
163
+ const shutdown = async () => {
164
+ if (shutdownInProgress) {
165
+ console.log('\n Force shutdown — terminating immediately.');
166
+ process.exit(1);
167
+ }
168
+ shutdownInProgress = true;
169
+ console.log('\n Shutting down Aegis Gate...');
170
+ console.log(' (Press Ctrl+C again to force quit)\n');
171
+ const result = await gate.stop();
172
+ if (result.drained) {
173
+ console.log(' All in-flight requests completed.');
174
+ }
175
+ else {
176
+ console.log(` Shutdown timed out — ${result.activeAtClose} request(s) were still in-flight.`);
177
+ }
178
+ // Log shutdown event to Ledger as a system event
179
+ ledger.logSystem({
180
+ service: '_aegis',
181
+ targetDomain: 'localhost',
182
+ method: 'SHUTDOWN',
183
+ path: '/',
184
+ reason: result.drained
185
+ ? 'Graceful shutdown — all requests drained'
186
+ : `Forced shutdown — ${result.activeAtClose} request(s) still active`,
187
+ });
188
+ db.close();
189
+ console.log(' Aegis Gate stopped.\n');
190
+ process.exit(0);
191
+ };
192
+ process.on('SIGINT', shutdown);
193
+ process.on('SIGTERM', shutdown);
194
+ });
195
+ }
196
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/cli/commands/gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Init command: generate master key, config file, and data directory.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmH/C"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Init command: generate master key, config file, and data directory.
3
+ */
4
+ import * as crypto from 'node:crypto';
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import { VaultManager } from '../../vault/index.js';
8
+ import { generateSelfSignedCert } from '../helpers.js';
9
+ export function register(program) {
10
+ program
11
+ .command('init')
12
+ .description('Initialize Aegis — generate master key, config file, and data directory')
13
+ .option('--write-secrets', 'Write master key to config file (convenient but less secure)', false)
14
+ .option('--generate-cert', 'Generate a self-signed TLS certificate for local dev use', false)
15
+ .action((opts) => {
16
+ const configPath = path.join(process.cwd(), 'aegis.config.yaml');
17
+ if (fs.existsSync(configPath)) {
18
+ console.log('\n aegis.config.yaml already exists. To reinitialize, remove it first:\n');
19
+ console.log(' rm aegis.config.yaml && aegis init\n');
20
+ process.exit(1);
21
+ }
22
+ const masterKey = crypto.randomBytes(32).toString('hex');
23
+ const dataDir = path.join(process.cwd(), '.aegis');
24
+ if (!fs.existsSync(dataDir)) {
25
+ fs.mkdirSync(dataDir, { recursive: true });
26
+ }
27
+ // Create the "default" vault through VaultManager (skip if it already exists)
28
+ const manager = new VaultManager(dataDir);
29
+ let salt;
30
+ const existingVaults = manager.list();
31
+ const existing = existingVaults.find((v) => v.name === 'default');
32
+ if (existing) {
33
+ salt = existing.salt;
34
+ }
35
+ else {
36
+ const created = manager.create('default');
37
+ salt = created.salt;
38
+ }
39
+ const masterKeyLine = opts.writeSecrets
40
+ ? ` master_key: "${masterKey}" # ⚠ stored in file — use env var for production`
41
+ : ` # master_key: set AEGIS_MASTER_KEY env var (see below)`;
42
+ const configContent = `# Aegis Configuration — generated by aegis init
43
+ # CLI flags override these values. Environment variables (AEGIS_*) override both.
44
+
45
+ gate:
46
+ port: 3100
47
+ # tls:
48
+ # cert: ./certs/aegis.crt
49
+ # key: ./certs/aegis.key
50
+ # require_agent_auth: false
51
+
52
+ vault:
53
+ ${masterKeyLine}
54
+ name: default
55
+ data_dir: ./.aegis
56
+
57
+ observability:
58
+ log_level: info
59
+ log_format: pretty
60
+ metrics: true
61
+ # dashboard:
62
+ # enabled: true
63
+ # port: 3200
64
+
65
+ # policies:
66
+ # dir: ./policies
67
+ # mode: enforce
68
+
69
+ # mcp:
70
+ # transport: stdio
71
+ # port: 3200
72
+
73
+ # webhooks: []
74
+ `;
75
+ if (opts.writeSecrets) {
76
+ fs.writeFileSync(configPath, configContent, { mode: 0o600 });
77
+ }
78
+ else {
79
+ fs.writeFileSync(configPath, configContent, { mode: 0o644 });
80
+ }
81
+ console.log(`\n ╔══════════════════════════════════╗`);
82
+ console.log(` ║ Aegis Initialized ✓ ║`);
83
+ console.log(` ╚══════════════════════════════════╝\n`);
84
+ console.log(` Config file: aegis.config.yaml`);
85
+ console.log(` Default vault created (salt stored in vault registry)`);
86
+ if (opts.writeSecrets) {
87
+ console.log(` Master key saved to aegis.config.yaml (mode 0600)\n`);
88
+ }
89
+ else {
90
+ console.log(`\n ⚠ Store the following secret securely — it will NOT be shown again.\n`);
91
+ console.log(` AEGIS_MASTER_KEY=${masterKey}\n`);
92
+ console.log(` Export it in your shell profile or use a secrets manager:`);
93
+ console.log(` export AEGIS_MASTER_KEY=${masterKey}\n`);
94
+ console.log(` Or re-run with --write-secrets to save it to the config file (less secure):`);
95
+ console.log(` rm aegis.config.yaml && aegis init --write-secrets`);
96
+ }
97
+ console.log(`\n Vault salt: ${salt} (stored in .aegis/vaults.json)`);
98
+ console.log(` Data directory: ./.aegis\n`);
99
+ console.log(` Next steps:`);
100
+ console.log(` 1. Add a credential: aegis vault add --name slack --service slack --secret xoxb-... --domains api.slack.com`);
101
+ console.log(` 2. Start the gate: aegis gate`);
102
+ console.log(` 3. Point your agent: http://localhost:3100/{service}/api/path\n`);
103
+ // Generate self-signed TLS certificate for local dev
104
+ if (opts.generateCert) {
105
+ generateSelfSignedCert(process.cwd());
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Ledger commands: show, stats, export.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ledger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJ/C"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Ledger commands: show, stats, export.
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import { getConfig } from '../../config.js';
6
+ import { getDb, getVaultSalt, migrate } from '../../db.js';
7
+ import { Ledger } from '../../ledger/index.js';
8
+ import { deriveKey } from '../../vault/index.js';
9
+ import { requireUserAuth } from '../auth.js';
10
+ import { localTime, validateEnum, validateIsoDate, validatePositiveInt } from '../validation.js';
11
+ export function register(program) {
12
+ const ledgerCmd = program.command('ledger').description('View and export audit logs');
13
+ ledgerCmd
14
+ .command('show')
15
+ .description('Show recent audit log entries')
16
+ .option('-s, --service <service>', 'Filter by service')
17
+ .option('-n, --limit <limit>', 'Number of entries to show', '20')
18
+ .option('--since <date>', 'Show entries since date (ISO format)')
19
+ .option('--blocked', 'Show only blocked requests')
20
+ .option('--system', 'Show only system events (startup, shutdown)')
21
+ .option('--agent <name>', 'Filter by agent name')
22
+ .action((opts) => {
23
+ const config = getConfig();
24
+ // ── Validate CLI flags ──
25
+ const parsedLimit = parseInt(opts.limit, 10);
26
+ validatePositiveInt(parsedLimit, 'limit');
27
+ if (opts.since) {
28
+ validateIsoDate(opts.since, '--since date');
29
+ }
30
+ const db = getDb(config);
31
+ migrate(db);
32
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
33
+ requireUserAuth(db, key, 'ledger:read');
34
+ const ledger = new Ledger(db);
35
+ const entries = ledger.query({
36
+ service: opts.service,
37
+ status: opts.blocked ? 'blocked' : opts.system ? 'system' : undefined,
38
+ since: opts.since,
39
+ limit: parsedLimit,
40
+ agentName: opts.agent,
41
+ });
42
+ if (entries.length === 0) {
43
+ console.log('\n No audit entries found.\n');
44
+ db.close();
45
+ return;
46
+ }
47
+ console.log(`\n Aegis Ledger — ${entries.length} entries\n`);
48
+ for (const entry of entries) {
49
+ const icon = entry.status === 'allowed' ? '✓' : entry.status === 'system' ? '●' : '✗';
50
+ const reason = entry.blockedReason ? ` (${entry.blockedReason})` : '';
51
+ const agent = entry.agentName ? ` [${entry.agentName}]` : '';
52
+ const channel = entry.channel !== 'gate' ? ` via ${entry.channel}` : '';
53
+ console.log(` ${icon} ${localTime(entry.timestamp)} | ${entry.method.padEnd(6)} ${entry.service}${entry.path} → ${entry.targetDomain} [${entry.responseCode ?? '-'}]${agent}${channel}${reason}`);
54
+ }
55
+ console.log();
56
+ db.close();
57
+ });
58
+ ledgerCmd
59
+ .command('stats')
60
+ .description('Show audit log statistics')
61
+ .option('--since <date>', 'Stats since date (ISO format)')
62
+ .option('--agent <name>', 'Stats for a specific agent')
63
+ .action((opts) => {
64
+ // ── Validate CLI flags ──
65
+ if (opts.since) {
66
+ validateIsoDate(opts.since, '--since date');
67
+ }
68
+ const config = getConfig();
69
+ const db = getDb(config);
70
+ migrate(db);
71
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
72
+ requireUserAuth(db, key, 'ledger:read');
73
+ const ledger = new Ledger(db);
74
+ const stats = ledger.stats(opts.since, opts.agent);
75
+ console.log(`\n Aegis Ledger — Statistics\n`);
76
+ console.log(` Total requests: ${stats.total}`);
77
+ console.log(` Allowed: ${stats.allowed}`);
78
+ console.log(` Blocked: ${stats.blocked}`);
79
+ if (stats.system > 0) {
80
+ console.log(` System: ${stats.system}`);
81
+ }
82
+ if (Object.keys(stats.byService).length > 0) {
83
+ console.log(`\n By service:`);
84
+ for (const [service, count] of Object.entries(stats.byService)) {
85
+ console.log(` ${service}: ${count}`);
86
+ }
87
+ }
88
+ console.log();
89
+ db.close();
90
+ });
91
+ ledgerCmd
92
+ .command('export')
93
+ .description('Export audit log (CSV, JSON, or JSON Lines)')
94
+ .option('-s, --service <service>', 'Filter by service')
95
+ .option('--since <date>', 'Export entries since date')
96
+ .option('-f, --format <format>', 'Output format: csv, json, or jsonl', 'csv')
97
+ .option('-o, --output <file>', 'Output file path')
98
+ .action((opts) => {
99
+ // ── Validate CLI flags ──
100
+ if (opts.since) {
101
+ validateIsoDate(opts.since, '--since date');
102
+ }
103
+ validateEnum(opts.format, ['csv', 'json', 'jsonl'], 'format');
104
+ const config = getConfig();
105
+ const db = getDb(config);
106
+ migrate(db);
107
+ const key = deriveKey(config.masterKey, getVaultSalt(config));
108
+ requireUserAuth(db, key, 'ledger:export');
109
+ const ledger = new Ledger(db);
110
+ const queryParams = {
111
+ service: opts.service,
112
+ since: opts.since,
113
+ };
114
+ let output;
115
+ switch (opts.format) {
116
+ case 'json':
117
+ output = ledger.exportJson(queryParams);
118
+ break;
119
+ case 'jsonl':
120
+ output = ledger.exportJsonLines(queryParams);
121
+ break;
122
+ case 'csv':
123
+ output = ledger.exportCsv(queryParams);
124
+ break;
125
+ default:
126
+ console.error(`\n✗ Unknown format "${opts.format}". Use csv, json, or jsonl.\n`);
127
+ db.close();
128
+ return;
129
+ }
130
+ if (opts.output) {
131
+ fs.writeFileSync(opts.output, output, 'utf-8');
132
+ console.log(`\n✓ Exported ${opts.format.toUpperCase()} to ${opts.output}\n`);
133
+ }
134
+ else {
135
+ console.log(output);
136
+ }
137
+ db.close();
138
+ });
139
+ }
140
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/cli/commands/ledger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAEtF,SAAS;SACN,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACtD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;SAChE,MAAM,CAAC,WAAW,EAAE,4BAA4B,CAAC;SACjD,MAAM,CAAC,UAAU,EAAE,6CAA6C,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;SAChD,MAAM,CACL,CAAC,IAOA,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,2BAA2B;QAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7C,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACrE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,IAAI,CAAC,KAAK;SACtB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACtF,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,GAAG,CACT,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,IAAI,GAAG,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,EAAE,CACtL,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CACF,CAAC;IAEJ,SAAS;SACN,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,gBAAgB,EAAE,+BAA+B,CAAC;SACzD,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;SACtD,MAAM,CAAC,CAAC,IAAwC,EAAE,EAAE;QACnD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACtD,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,EAAE,KAAK,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,CAAC,IAA2E,EAAE,EAAE;QACtF,2BAA2B;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAU,EAAE,QAAQ,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,IAAI,MAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBACxC,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACvC,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,MAAM,+BAA+B,CAAC,CAAC;gBACjF,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP commands: serve, config.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function register(program: Command): void;
6
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgP/C"}