@agentgazer/cli 0.2.1 → 0.3.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 (116) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +786 -408
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/agent.d.ts +2 -0
  5. package/dist/commands/agent.d.ts.map +1 -0
  6. package/dist/commands/agent.js +469 -0
  7. package/dist/commands/agent.js.map +1 -0
  8. package/dist/commands/agents.d.ts +2 -0
  9. package/dist/commands/agents.d.ts.map +1 -0
  10. package/dist/commands/agents.js +70 -0
  11. package/dist/commands/agents.js.map +1 -0
  12. package/dist/commands/events.d.ts +21 -0
  13. package/dist/commands/events.d.ts.map +1 -0
  14. package/dist/commands/events.js +247 -0
  15. package/dist/commands/events.js.map +1 -0
  16. package/dist/commands/overview.d.ts +2 -0
  17. package/dist/commands/overview.d.ts.map +1 -0
  18. package/dist/commands/overview.js +8 -0
  19. package/dist/commands/overview.js.map +1 -0
  20. package/dist/commands/provider.d.ts +2 -0
  21. package/dist/commands/provider.d.ts.map +1 -0
  22. package/dist/commands/provider.js +210 -0
  23. package/dist/commands/provider.js.map +1 -0
  24. package/dist/commands/providers.d.ts +2 -0
  25. package/dist/commands/providers.d.ts.map +1 -0
  26. package/dist/commands/providers.js +77 -0
  27. package/dist/commands/providers.js.map +1 -0
  28. package/dist/config.d.ts +46 -0
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +97 -60
  31. package/dist/config.js.map +1 -1
  32. package/dist/dashboard/assets/index-5AtWzXiJ.js +143 -0
  33. package/dist/dashboard/assets/index-B7NvhJW9.js +143 -0
  34. package/dist/dashboard/assets/index-B9izZ4lr.js +139 -0
  35. package/dist/dashboard/assets/index-BADwu2fU.js +143 -0
  36. package/dist/dashboard/assets/index-BBonREkg.js +143 -0
  37. package/dist/dashboard/assets/index-BGdw1Ss1.js +139 -0
  38. package/dist/dashboard/assets/index-BLIagyHw.css +1 -0
  39. package/dist/dashboard/assets/index-BN2gLOCd.js +143 -0
  40. package/dist/dashboard/assets/index-BOcemxE3.js +143 -0
  41. package/dist/dashboard/assets/index-BYYSUJ-G.js +143 -0
  42. package/dist/dashboard/assets/index-BhGhcADW.js +143 -0
  43. package/dist/dashboard/assets/index-Bjr8f_u_.js +143 -0
  44. package/dist/dashboard/assets/index-BsaxUL45.js +143 -0
  45. package/dist/dashboard/assets/index-C-DguelG.css +1 -0
  46. package/dist/dashboard/assets/index-C-QgKsob.js +143 -0
  47. package/dist/dashboard/assets/index-C6t4YWSY.js +143 -0
  48. package/dist/dashboard/assets/index-C9EQrGpe.js +143 -0
  49. package/dist/dashboard/assets/index-CB6k7nz0.js +143 -0
  50. package/dist/dashboard/assets/index-CBCLOBvd.js +139 -0
  51. package/dist/dashboard/assets/index-CGwUmIVh.js +139 -0
  52. package/dist/dashboard/assets/index-CLMyGFxA.js +145 -0
  53. package/dist/dashboard/assets/index-CYnfgO3k.js +143 -0
  54. package/dist/dashboard/assets/index-CiGGhaUw.js +143 -0
  55. package/dist/dashboard/assets/index-Cj3GjdoQ.js +143 -0
  56. package/dist/dashboard/assets/index-CxEl0O9p.js +143 -0
  57. package/dist/dashboard/assets/index-D2mLKlRw.css +1 -0
  58. package/dist/dashboard/assets/index-D5AUmtdo.js +139 -0
  59. package/dist/dashboard/assets/index-DACbampq.css +1 -0
  60. package/dist/dashboard/assets/index-DB0fFjgr.js +139 -0
  61. package/dist/dashboard/assets/index-DI-JqWdh.css +1 -0
  62. package/dist/dashboard/assets/index-DRcLEFcl.js +143 -0
  63. package/dist/dashboard/assets/index-DaUEJqLn.css +1 -0
  64. package/dist/dashboard/assets/index-Db5ik9Wo.js +143 -0
  65. package/dist/dashboard/assets/index-DfV-2ewH.css +1 -0
  66. package/dist/dashboard/assets/index-DgEq2MBB.css +1 -0
  67. package/dist/dashboard/assets/index-DhmVjP8v.js +143 -0
  68. package/dist/dashboard/assets/index-Dipd1pd3.js +143 -0
  69. package/dist/dashboard/assets/index-DirRSEOl.js +143 -0
  70. package/dist/dashboard/assets/index-Dr9wOl47.js +143 -0
  71. package/dist/dashboard/assets/index-ee-BCW5i.js +143 -0
  72. package/dist/dashboard/assets/index-g4KzDTwu.js +139 -0
  73. package/dist/dashboard/assets/index-odup_N3G.css +1 -0
  74. package/dist/dashboard/assets/index-wHHHG0bR.css +1 -0
  75. package/dist/dashboard/assets/index-wNn2zMSu.js +143 -0
  76. package/dist/dashboard/assets/index-wvU3UdVf.js +143 -0
  77. package/dist/dashboard/assets/index-yHwKni1U.css +1 -0
  78. package/dist/dashboard/assets/index-z-YzEeVY.js +143 -0
  79. package/dist/dashboard/index.html +2 -2
  80. package/dist/index.js +1 -11
  81. package/dist/index.js.map +1 -1
  82. package/dist/secret-store.js +26 -68
  83. package/dist/secret-store.js.map +1 -1
  84. package/dist/tui/AgentTable.d.ts +15 -0
  85. package/dist/tui/AgentTable.d.ts.map +1 -0
  86. package/dist/tui/AgentTable.js +35 -0
  87. package/dist/tui/AgentTable.js.map +1 -0
  88. package/dist/tui/EventLog.d.ts +15 -0
  89. package/dist/tui/EventLog.d.ts.map +1 -0
  90. package/dist/tui/EventLog.js +15 -0
  91. package/dist/tui/EventLog.js.map +1 -0
  92. package/dist/tui/HelpOverlay.d.ts +7 -0
  93. package/dist/tui/HelpOverlay.d.ts.map +1 -0
  94. package/dist/tui/HelpOverlay.js +11 -0
  95. package/dist/tui/HelpOverlay.js.map +1 -0
  96. package/dist/tui/Overview.d.ts +7 -0
  97. package/dist/tui/Overview.d.ts.map +1 -0
  98. package/dist/tui/Overview.js +69 -0
  99. package/dist/tui/Overview.js.map +1 -0
  100. package/dist/tui/StatusBar.d.ts +11 -0
  101. package/dist/tui/StatusBar.d.ts.map +1 -0
  102. package/dist/tui/StatusBar.js +27 -0
  103. package/dist/tui/StatusBar.js.map +1 -0
  104. package/dist/utils/api.d.ts +10 -0
  105. package/dist/utils/api.d.ts.map +1 -0
  106. package/dist/utils/api.js +114 -0
  107. package/dist/utils/api.js.map +1 -0
  108. package/dist/utils/format.d.ts +7 -0
  109. package/dist/utils/format.d.ts.map +1 -0
  110. package/dist/utils/format.js +56 -0
  111. package/dist/utils/format.js.map +1 -0
  112. package/dist/utils/prompt.d.ts +4 -0
  113. package/dist/utils/prompt.d.ts.map +1 -0
  114. package/dist/utils/prompt.js +40 -0
  115. package/dist/utils/prompt.js.map +1 -0
  116. package/package.json +13 -6
@@ -0,0 +1,77 @@
1
+ import { apiGet, handleApiError } from "../utils/api.js";
2
+ import { formatCurrency } from "../utils/format.js";
3
+ // ANSI color codes
4
+ const colors = {
5
+ reset: "\x1b[0m",
6
+ bold: "\x1b[1m",
7
+ dim: "\x1b[2m",
8
+ green: "\x1b[32m",
9
+ yellow: "\x1b[33m",
10
+ cyan: "\x1b[36m",
11
+ gray: "\x1b[90m",
12
+ };
13
+ function formatTokens(n) {
14
+ if (n >= 1_000_000)
15
+ return `${(n / 1_000_000).toFixed(1)}M`;
16
+ if (n >= 1_000)
17
+ return `${(n / 1_000).toFixed(1)}K`;
18
+ return String(n);
19
+ }
20
+ export async function cmdProviders(port = 18800) {
21
+ try {
22
+ const resp = await apiGet("/api/providers", port);
23
+ const providers = resp.providers;
24
+ if (!providers || providers.length === 0) {
25
+ console.log("\n No providers configured. Use 'agentgazer provider add' to add one.\n");
26
+ return;
27
+ }
28
+ const c = colors;
29
+ console.log(`
30
+ ${c.bold} AgentGazer — Providers${c.reset}
31
+ ───────────────────────────────────────────────────────────────
32
+ `);
33
+ // Header
34
+ const header = ` ${"Provider".padEnd(12)}${"Status".padEnd(12)}${"API Key".padEnd(14)}${"Tokens".padStart(10)} ${"Today".padStart(8)} ${"Total".padStart(8)}`;
35
+ console.log(`${c.dim}${header}${c.reset}`);
36
+ console.log(`${c.dim} ${"─".repeat(header.length - 2)}${c.reset}`);
37
+ for (const p of providers) {
38
+ const name = p.name.padEnd(12);
39
+ // Status with color
40
+ let status;
41
+ if (!p.active) {
42
+ status = `${c.gray}inactive${c.reset}`.padEnd(12 + 9); // Account for ANSI codes
43
+ }
44
+ else {
45
+ status = `${c.green}● active${c.reset}`.padEnd(12 + 9);
46
+ }
47
+ // Key status with icon
48
+ let keyStatus;
49
+ if (p.configured) {
50
+ keyStatus = `${c.green}✓ secured${c.reset}`.padEnd(14 + 9);
51
+ }
52
+ else {
53
+ keyStatus = `${c.yellow}○ not set${c.reset}`.padEnd(14 + 9);
54
+ }
55
+ const tokens = formatTokens(p.total_tokens ?? 0).padStart(10);
56
+ const todayCost = formatCurrency(p.today_cost ?? 0).padStart(8);
57
+ const totalCost = formatCurrency(p.total_cost ?? 0).padStart(8);
58
+ console.log(` ${c.cyan}${name}${c.reset}${status}${keyStatus}${c.dim}${tokens}${c.reset} ${todayCost} ${c.bold}${totalCost}${c.reset}`);
59
+ }
60
+ // Summary
61
+ const totalCostSum = providers.reduce((sum, p) => sum + (p.total_cost ?? 0), 0);
62
+ const todayCostSum = providers.reduce((sum, p) => sum + (p.today_cost ?? 0), 0);
63
+ const configuredCount = providers.filter(p => p.configured).length;
64
+ console.log(`${c.dim} ${"─".repeat(header.length - 2)}${c.reset}`);
65
+ console.log(` ${c.dim}${configuredCount}/${providers.length} configured${c.reset} ${formatCurrency(todayCostSum).padStart(8)} ${c.bold}${formatCurrency(totalCostSum).padStart(8)}${c.reset}`);
66
+ console.log(`
67
+ ${c.dim}Commands:${c.reset}
68
+ agentgazer provider add <name> Add API key
69
+ agentgazer provider <name> stat View statistics
70
+ agentgazer provider <name> models List available models
71
+ `);
72
+ }
73
+ catch (err) {
74
+ handleApiError(err);
75
+ }
76
+ }
77
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -11,11 +11,51 @@ export interface ProviderConfig {
11
11
  /** @deprecated Rate limits are now managed in the Dashboard. This field is ignored. */
12
12
  rateLimit?: ProviderRateLimit;
13
13
  }
14
+ export interface ServerConfig {
15
+ /** Dashboard port (default: 18800) */
16
+ port?: number;
17
+ /** LLM proxy port (default: 18900) */
18
+ proxyPort?: number;
19
+ /** Auto-open browser on start (default: true) */
20
+ autoOpen?: boolean;
21
+ }
22
+ export interface DataConfig {
23
+ /** Data retention period in days (default: 30) */
24
+ retentionDays?: number;
25
+ }
26
+ export interface TelegramDefaults {
27
+ botToken?: string;
28
+ chatId?: string;
29
+ }
30
+ export interface WebhookDefaults {
31
+ url?: string;
32
+ }
33
+ export interface EmailDefaults {
34
+ host?: string;
35
+ port?: number;
36
+ secure?: boolean;
37
+ user?: string;
38
+ pass?: string;
39
+ from?: string;
40
+ to?: string;
41
+ }
42
+ export interface AlertDefaults {
43
+ telegram?: TelegramDefaults;
44
+ webhook?: WebhookDefaults;
45
+ email?: EmailDefaults;
46
+ }
47
+ export interface AlertsConfig {
48
+ defaults?: AlertDefaults;
49
+ }
14
50
  export interface AgentGazerConfig {
15
51
  token: string;
52
+ server?: ServerConfig;
53
+ data?: DataConfig;
54
+ alerts?: AlertsConfig;
16
55
  providers?: Record<string, ProviderConfig>;
17
56
  }
18
57
  export declare function getConfigDir(): string;
58
+ export declare function getConfigPath(): string;
19
59
  export declare function getDbPath(): string;
20
60
  export declare function ensureConfig(): AgentGazerConfig;
21
61
  export declare function readConfig(): AgentGazerConfig | null;
@@ -24,4 +64,10 @@ export declare function setProvider(name: string, providerConfig: ProviderConfig
24
64
  export declare function removeProvider(name: string): AgentGazerConfig;
25
65
  export declare function listProviders(): Record<string, ProviderConfig>;
26
66
  export declare function resetToken(): AgentGazerConfig;
67
+ export declare function getServerPort(config: AgentGazerConfig | null): number;
68
+ export declare function getProxyPort(config: AgentGazerConfig | null): number;
69
+ export declare function getAutoOpen(config: AgentGazerConfig | null): boolean;
70
+ export declare function getRetentionDays(config: AgentGazerConfig | null): number;
71
+ export declare function getAlertDefaults(config: AgentGazerConfig | null): AlertDefaults;
72
+ export declare function updateAlertDefaults(defaults: AlertDefaults): AgentGazerConfig;
27
73
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,wBAAgB,YAAY,IAAI,gBAAgB,CAkB/C;AAED,wBAAgB,UAAU,IAAI,gBAAgB,GAAG,IAAI,CAmBpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAKzD;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,cAAc,GAC7B,gBAAgB,CAQlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAU7D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAG9D;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAQ7C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1,64 +1,70 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getConfigDir = getConfigDir;
37
- exports.getDbPath = getDbPath;
38
- exports.ensureConfig = ensureConfig;
39
- exports.readConfig = readConfig;
40
- exports.saveConfig = saveConfig;
41
- exports.setProvider = setProvider;
42
- exports.removeProvider = removeProvider;
43
- exports.listProviders = listProviders;
44
- exports.resetToken = resetToken;
45
- const fs = __importStar(require("node:fs"));
46
- const path = __importStar(require("node:path"));
47
- const crypto = __importStar(require("node:crypto"));
48
- const os = __importStar(require("node:os"));
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as crypto from "node:crypto";
4
+ import * as os from "node:os";
49
5
  const CONFIG_DIR = path.join(os.homedir(), ".agentgazer");
50
6
  const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
51
7
  const DB_FILE = path.join(CONFIG_DIR, "data.db");
52
- function getConfigDir() {
8
+ export function getConfigDir() {
53
9
  return CONFIG_DIR;
54
10
  }
55
- function getDbPath() {
11
+ export function getConfigPath() {
12
+ return CONFIG_FILE;
13
+ }
14
+ export function getDbPath() {
56
15
  return DB_FILE;
57
16
  }
58
17
  function generateToken() {
59
18
  return crypto.randomBytes(32).toString("hex");
60
19
  }
61
- function ensureConfig() {
20
+ /**
21
+ * Migrate old flat config to new hierarchical structure.
22
+ * Returns true if migration was performed.
23
+ */
24
+ function migrateConfig(parsed) {
25
+ const config = { token: parsed.token };
26
+ let migrated = false;
27
+ // Check for old flat structure
28
+ const hasOldFormat = typeof parsed.port === "number" ||
29
+ typeof parsed.proxyPort === "number" ||
30
+ typeof parsed.autoOpen === "boolean" ||
31
+ typeof parsed.retentionDays === "number";
32
+ if (hasOldFormat) {
33
+ migrated = true;
34
+ // Migrate to new structure
35
+ if (typeof parsed.port === "number" || typeof parsed.proxyPort === "number" || typeof parsed.autoOpen === "boolean") {
36
+ config.server = {};
37
+ if (typeof parsed.port === "number")
38
+ config.server.port = parsed.port;
39
+ if (typeof parsed.proxyPort === "number")
40
+ config.server.proxyPort = parsed.proxyPort;
41
+ if (typeof parsed.autoOpen === "boolean")
42
+ config.server.autoOpen = parsed.autoOpen;
43
+ }
44
+ if (typeof parsed.retentionDays === "number") {
45
+ config.data = { retentionDays: parsed.retentionDays };
46
+ }
47
+ }
48
+ else {
49
+ // Already new format or fresh config
50
+ if (parsed.server && typeof parsed.server === "object") {
51
+ config.server = parsed.server;
52
+ }
53
+ if (parsed.data && typeof parsed.data === "object") {
54
+ config.data = parsed.data;
55
+ }
56
+ }
57
+ // Alerts config (new, no migration needed)
58
+ if (parsed.alerts && typeof parsed.alerts === "object") {
59
+ config.alerts = parsed.alerts;
60
+ }
61
+ // Providers
62
+ if (parsed.providers && typeof parsed.providers === "object") {
63
+ config.providers = parsed.providers;
64
+ }
65
+ return { config, migrated };
66
+ }
67
+ export function ensureConfig() {
62
68
  // Create directory if it doesn't exist
63
69
  if (!fs.existsSync(CONFIG_DIR)) {
64
70
  fs.mkdirSync(CONFIG_DIR, { recursive: true });
@@ -74,7 +80,7 @@ function ensureConfig() {
74
80
  fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
75
81
  return config;
76
82
  }
77
- function readConfig() {
83
+ export function readConfig() {
78
84
  if (!fs.existsSync(CONFIG_FILE)) {
79
85
  return null;
80
86
  }
@@ -82,9 +88,10 @@ function readConfig() {
82
88
  const raw = fs.readFileSync(CONFIG_FILE, "utf-8");
83
89
  const parsed = JSON.parse(raw);
84
90
  if (typeof parsed.token === "string" && parsed.token.length > 0) {
85
- const config = { token: parsed.token };
86
- if (parsed.providers && typeof parsed.providers === "object") {
87
- config.providers = parsed.providers;
91
+ const { config, migrated } = migrateConfig(parsed);
92
+ // Write back if migrated
93
+ if (migrated) {
94
+ saveConfig(config);
88
95
  }
89
96
  return config;
90
97
  }
@@ -94,13 +101,13 @@ function readConfig() {
94
101
  return null;
95
102
  }
96
103
  }
97
- function saveConfig(config) {
104
+ export function saveConfig(config) {
98
105
  if (!fs.existsSync(CONFIG_DIR)) {
99
106
  fs.mkdirSync(CONFIG_DIR, { recursive: true });
100
107
  }
101
108
  fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
102
109
  }
103
- function setProvider(name, providerConfig) {
110
+ export function setProvider(name, providerConfig) {
104
111
  const config = ensureConfig();
105
112
  if (!config.providers) {
106
113
  config.providers = {};
@@ -109,7 +116,7 @@ function setProvider(name, providerConfig) {
109
116
  saveConfig(config);
110
117
  return config;
111
118
  }
112
- function removeProvider(name) {
119
+ export function removeProvider(name) {
113
120
  const config = ensureConfig();
114
121
  if (config.providers) {
115
122
  delete config.providers[name];
@@ -120,11 +127,11 @@ function removeProvider(name) {
120
127
  saveConfig(config);
121
128
  return config;
122
129
  }
123
- function listProviders() {
130
+ export function listProviders() {
124
131
  const config = readConfig();
125
132
  return config?.providers ?? {};
126
133
  }
127
- function resetToken() {
134
+ export function resetToken() {
128
135
  const existing = readConfig();
129
136
  const config = {
130
137
  ...existing,
@@ -133,4 +140,34 @@ function resetToken() {
133
140
  saveConfig(config);
134
141
  return config;
135
142
  }
143
+ // ---------------------------------------------------------------------------
144
+ // Helper functions for accessing config values with defaults
145
+ // ---------------------------------------------------------------------------
146
+ export function getServerPort(config) {
147
+ return config?.server?.port ?? 18800;
148
+ }
149
+ export function getProxyPort(config) {
150
+ return config?.server?.proxyPort ?? 18900;
151
+ }
152
+ export function getAutoOpen(config) {
153
+ return config?.server?.autoOpen ?? true;
154
+ }
155
+ export function getRetentionDays(config) {
156
+ return config?.data?.retentionDays ?? 30;
157
+ }
158
+ export function getAlertDefaults(config) {
159
+ return config?.alerts?.defaults ?? {};
160
+ }
161
+ export function updateAlertDefaults(defaults) {
162
+ const config = ensureConfig();
163
+ if (!config.alerts) {
164
+ config.alerts = {};
165
+ }
166
+ config.alerts.defaults = {
167
+ ...config.alerts.defaults,
168
+ ...defaults,
169
+ };
170
+ saveConfig(config);
171
+ return config;
172
+ }
136
173
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}