@agentgazer/cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +726 -403
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +469 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/agents.d.ts +2 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +70 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/events.d.ts +21 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +247 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/overview.d.ts +2 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +8 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/provider.d.ts +2 -0
- package/dist/commands/provider.d.ts.map +1 -0
- package/dist/commands/provider.js +210 -0
- package/dist/commands/provider.js.map +1 -0
- package/dist/commands/providers.d.ts +2 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +77 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +97 -60
- package/dist/config.js.map +1 -1
- package/dist/dashboard/assets/index-5AtWzXiJ.js +143 -0
- package/dist/dashboard/assets/index-B7NvhJW9.js +143 -0
- package/dist/dashboard/assets/index-B9izZ4lr.js +139 -0
- package/dist/dashboard/assets/index-BADwu2fU.js +143 -0
- package/dist/dashboard/assets/index-BBonREkg.js +143 -0
- package/dist/dashboard/assets/index-BGdw1Ss1.js +139 -0
- package/dist/dashboard/assets/index-BLIagyHw.css +1 -0
- package/dist/dashboard/assets/index-BN2gLOCd.js +143 -0
- package/dist/dashboard/assets/index-BOcemxE3.js +143 -0
- package/dist/dashboard/assets/index-BYYSUJ-G.js +143 -0
- package/dist/dashboard/assets/index-BhGhcADW.js +143 -0
- package/dist/dashboard/assets/index-Bjr8f_u_.js +143 -0
- package/dist/dashboard/assets/index-BsaxUL45.js +143 -0
- package/dist/dashboard/assets/index-C-DguelG.css +1 -0
- package/dist/dashboard/assets/index-C-QgKsob.js +143 -0
- package/dist/dashboard/assets/index-C6t4YWSY.js +143 -0
- package/dist/dashboard/assets/index-C9EQrGpe.js +143 -0
- package/dist/dashboard/assets/index-CB6k7nz0.js +143 -0
- package/dist/dashboard/assets/index-CBCLOBvd.js +139 -0
- package/dist/dashboard/assets/index-CGwUmIVh.js +139 -0
- package/dist/dashboard/assets/index-CLMyGFxA.js +145 -0
- package/dist/dashboard/assets/index-CYnfgO3k.js +143 -0
- package/dist/dashboard/assets/index-CiGGhaUw.js +143 -0
- package/dist/dashboard/assets/index-Cj3GjdoQ.js +143 -0
- package/dist/dashboard/assets/index-CxEl0O9p.js +143 -0
- package/dist/dashboard/assets/index-D2mLKlRw.css +1 -0
- package/dist/dashboard/assets/index-D5AUmtdo.js +139 -0
- package/dist/dashboard/assets/index-DACbampq.css +1 -0
- package/dist/dashboard/assets/index-DB0fFjgr.js +139 -0
- package/dist/dashboard/assets/index-DI-JqWdh.css +1 -0
- package/dist/dashboard/assets/index-DRcLEFcl.js +143 -0
- package/dist/dashboard/assets/index-DaUEJqLn.css +1 -0
- package/dist/dashboard/assets/index-Db5ik9Wo.js +143 -0
- package/dist/dashboard/assets/index-DfV-2ewH.css +1 -0
- package/dist/dashboard/assets/index-DgEq2MBB.css +1 -0
- package/dist/dashboard/assets/index-DhmVjP8v.js +143 -0
- package/dist/dashboard/assets/index-Dipd1pd3.js +143 -0
- package/dist/dashboard/assets/index-DirRSEOl.js +143 -0
- package/dist/dashboard/assets/index-Dr9wOl47.js +143 -0
- package/dist/dashboard/assets/index-ee-BCW5i.js +143 -0
- package/dist/dashboard/assets/index-g4KzDTwu.js +139 -0
- package/dist/dashboard/assets/index-odup_N3G.css +1 -0
- package/dist/dashboard/assets/index-wHHHG0bR.css +1 -0
- package/dist/dashboard/assets/index-wNn2zMSu.js +143 -0
- package/dist/dashboard/assets/index-wvU3UdVf.js +143 -0
- package/dist/dashboard/assets/index-yHwKni1U.css +1 -0
- package/dist/dashboard/assets/index-z-YzEeVY.js +143 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/index.js +1 -11
- package/dist/index.js.map +1 -1
- package/dist/secret-store.js +27 -69
- package/dist/secret-store.js.map +1 -1
- package/dist/tui/AgentTable.d.ts +15 -0
- package/dist/tui/AgentTable.d.ts.map +1 -0
- package/dist/tui/AgentTable.js +35 -0
- package/dist/tui/AgentTable.js.map +1 -0
- package/dist/tui/EventLog.d.ts +15 -0
- package/dist/tui/EventLog.d.ts.map +1 -0
- package/dist/tui/EventLog.js +15 -0
- package/dist/tui/EventLog.js.map +1 -0
- package/dist/tui/HelpOverlay.d.ts +7 -0
- package/dist/tui/HelpOverlay.d.ts.map +1 -0
- package/dist/tui/HelpOverlay.js +11 -0
- package/dist/tui/HelpOverlay.js.map +1 -0
- package/dist/tui/Overview.d.ts +7 -0
- package/dist/tui/Overview.d.ts.map +1 -0
- package/dist/tui/Overview.js +69 -0
- package/dist/tui/Overview.js.map +1 -0
- package/dist/tui/StatusBar.d.ts +11 -0
- package/dist/tui/StatusBar.d.ts.map +1 -0
- package/dist/tui/StatusBar.js +27 -0
- package/dist/tui/StatusBar.js.map +1 -0
- package/dist/utils/api.d.ts +10 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +114 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +56 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/prompt.d.ts +4 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +35 -0
- package/dist/utils/prompt.js.map +1 -0
- package/package.json +13 -6
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { readConfig } from "../config.js";
|
|
2
|
+
export async function apiGet(urlPath, port = 8080) {
|
|
3
|
+
const config = readConfig();
|
|
4
|
+
const token = config?.token ?? "";
|
|
5
|
+
try {
|
|
6
|
+
const res = await fetch(`http://localhost:${port}${urlPath}`, {
|
|
7
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
8
|
+
signal: AbortSignal.timeout(5000),
|
|
9
|
+
});
|
|
10
|
+
if (!res.ok) {
|
|
11
|
+
const error = { status: res.status, message: res.statusText };
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
return (await res.json());
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (err instanceof TypeError &&
|
|
18
|
+
err.cause?.code === "ECONNREFUSED") {
|
|
19
|
+
const error = { status: 0, message: 'Server not running. Run "agentgazer start" first.' };
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function apiPost(urlPath, body, port = 8080) {
|
|
26
|
+
const config = readConfig();
|
|
27
|
+
const token = config?.token ?? "";
|
|
28
|
+
try {
|
|
29
|
+
const res = await fetch(`http://localhost:${port}${urlPath}`, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: {
|
|
32
|
+
Authorization: `Bearer ${token}`,
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify(body),
|
|
36
|
+
signal: AbortSignal.timeout(5000),
|
|
37
|
+
});
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
const error = { status: res.status, message: res.statusText };
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
return (await res.json());
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
if (err instanceof TypeError &&
|
|
46
|
+
err.cause?.code === "ECONNREFUSED") {
|
|
47
|
+
const error = { status: 0, message: 'Server not running. Run "agentgazer start" first.' };
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function apiPut(urlPath, body, port = 8080) {
|
|
54
|
+
const config = readConfig();
|
|
55
|
+
const token = config?.token ?? "";
|
|
56
|
+
try {
|
|
57
|
+
const res = await fetch(`http://localhost:${port}${urlPath}`, {
|
|
58
|
+
method: "PUT",
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: `Bearer ${token}`,
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
},
|
|
63
|
+
body: JSON.stringify(body),
|
|
64
|
+
signal: AbortSignal.timeout(5000),
|
|
65
|
+
});
|
|
66
|
+
if (!res.ok) {
|
|
67
|
+
const error = { status: res.status, message: res.statusText };
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
return (await res.json());
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof TypeError &&
|
|
74
|
+
err.cause?.code === "ECONNREFUSED") {
|
|
75
|
+
const error = { status: 0, message: 'Server not running. Run "agentgazer start" first.' };
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function apiDelete(urlPath, port = 8080) {
|
|
82
|
+
const config = readConfig();
|
|
83
|
+
const token = config?.token ?? "";
|
|
84
|
+
try {
|
|
85
|
+
const res = await fetch(`http://localhost:${port}${urlPath}`, {
|
|
86
|
+
method: "DELETE",
|
|
87
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
88
|
+
signal: AbortSignal.timeout(5000),
|
|
89
|
+
});
|
|
90
|
+
if (!res.ok) {
|
|
91
|
+
const error = { status: res.status, message: res.statusText };
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
return (await res.json());
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err instanceof TypeError &&
|
|
98
|
+
err.cause?.code === "ECONNREFUSED") {
|
|
99
|
+
const error = { status: 0, message: 'Server not running. Run "agentgazer start" first.' };
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export function handleApiError(err) {
|
|
106
|
+
if (err && typeof err === "object" && "message" in err) {
|
|
107
|
+
console.error(err.message);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.error("An unexpected error occurred.");
|
|
111
|
+
}
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,OAAe,EAAE,OAAe,IAAI;IAClE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,OAAO,EAAE,EAAE;YAC5D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IACE,GAAG,YAAY,SAAS;YACvB,GAA6D,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,EAC7F,CAAC;YACD,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;YACpG,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAI,OAAe,EAAE,IAAa,EAAE,OAAe,IAAI;IAClF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,OAAO,EAAE,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IACE,GAAG,YAAY,SAAS;YACvB,GAA6D,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,EAC7F,CAAC;YACD,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;YACpG,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,OAAe,EAAE,IAAa,EAAE,OAAe,IAAI;IACjF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,OAAO,EAAE,EAAE;YAC5D,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IACE,GAAG,YAAY,SAAS;YACvB,GAA6D,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,EAC7F,CAAC;YACD,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;YACpG,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,OAAe,EAAE,OAAe,IAAI;IACrE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,OAAO,EAAE,EAAE;YAC5D,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IACE,GAAG,YAAY,SAAS;YACvB,GAA6D,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,EAC7F,CAAC;YACD,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;YACpG,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACvD,OAAO,CAAC,KAAK,CAAE,GAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function formatNumber(n: number): string;
|
|
2
|
+
export declare function formatCurrency(n: number): string;
|
|
3
|
+
export declare function timeAgo(iso: string | null | undefined): string;
|
|
4
|
+
export declare function formatUptime(startTime: Date): string;
|
|
5
|
+
export declare function formatLatency(ms: number | null | undefined): string;
|
|
6
|
+
export declare function parseRange(range: string): number;
|
|
7
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAY9D;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAMpD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGnE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBhD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function formatNumber(n) {
|
|
2
|
+
return n.toLocaleString("en-US");
|
|
3
|
+
}
|
|
4
|
+
export function formatCurrency(n) {
|
|
5
|
+
return `$${n.toFixed(2)}`;
|
|
6
|
+
}
|
|
7
|
+
export function timeAgo(iso) {
|
|
8
|
+
if (!iso)
|
|
9
|
+
return "—";
|
|
10
|
+
const diff = Date.now() - new Date(iso).getTime();
|
|
11
|
+
if (diff < 0)
|
|
12
|
+
return "just now";
|
|
13
|
+
const seconds = Math.floor(diff / 1000);
|
|
14
|
+
if (seconds < 60)
|
|
15
|
+
return `${seconds}s ago`;
|
|
16
|
+
const minutes = Math.floor(seconds / 60);
|
|
17
|
+
if (minutes < 60)
|
|
18
|
+
return `${minutes}m ago`;
|
|
19
|
+
const hours = Math.floor(minutes / 60);
|
|
20
|
+
if (hours < 24)
|
|
21
|
+
return `${hours}h ago`;
|
|
22
|
+
const days = Math.floor(hours / 24);
|
|
23
|
+
return `${days}d ago`;
|
|
24
|
+
}
|
|
25
|
+
export function formatUptime(startTime) {
|
|
26
|
+
const diff = Date.now() - startTime.getTime();
|
|
27
|
+
const seconds = Math.floor(diff / 1000);
|
|
28
|
+
const minutes = Math.floor(seconds / 60) % 60;
|
|
29
|
+
const hours = Math.floor(seconds / 3600);
|
|
30
|
+
return `${hours}h ${minutes}m`;
|
|
31
|
+
}
|
|
32
|
+
export function formatLatency(ms) {
|
|
33
|
+
if (ms == null)
|
|
34
|
+
return "--";
|
|
35
|
+
return `${formatNumber(ms)}ms`;
|
|
36
|
+
}
|
|
37
|
+
export function parseRange(range) {
|
|
38
|
+
const match = range.match(/^(\d+)([hdwm])$/);
|
|
39
|
+
if (!match)
|
|
40
|
+
return 24 * 60 * 60 * 1000; // default 24h
|
|
41
|
+
const value = parseInt(match[1], 10);
|
|
42
|
+
const unit = match[2];
|
|
43
|
+
switch (unit) {
|
|
44
|
+
case "h":
|
|
45
|
+
return value * 60 * 60 * 1000;
|
|
46
|
+
case "d":
|
|
47
|
+
return value * 24 * 60 * 60 * 1000;
|
|
48
|
+
case "w":
|
|
49
|
+
return value * 7 * 24 * 60 * 60 * 1000;
|
|
50
|
+
case "m":
|
|
51
|
+
return value * 30 * 24 * 60 * 60 * 1000;
|
|
52
|
+
default:
|
|
53
|
+
return 24 * 60 * 60 * 1000;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
2
|
+
export declare function selectProvider(providers: string[]): Promise<string>;
|
|
3
|
+
export declare function inputApiKey(provider: string): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9F;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAUzE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUnE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
export async function confirm(message, defaultValue = false) {
|
|
3
|
+
const { confirmed } = await inquirer.prompt([
|
|
4
|
+
{
|
|
5
|
+
type: "confirm",
|
|
6
|
+
name: "confirmed",
|
|
7
|
+
message,
|
|
8
|
+
default: defaultValue,
|
|
9
|
+
},
|
|
10
|
+
]);
|
|
11
|
+
return confirmed;
|
|
12
|
+
}
|
|
13
|
+
export async function selectProvider(providers) {
|
|
14
|
+
const { provider } = await inquirer.prompt([
|
|
15
|
+
{
|
|
16
|
+
type: "list",
|
|
17
|
+
name: "provider",
|
|
18
|
+
message: "Select provider:",
|
|
19
|
+
choices: providers,
|
|
20
|
+
},
|
|
21
|
+
]);
|
|
22
|
+
return provider;
|
|
23
|
+
}
|
|
24
|
+
export async function inputApiKey(provider) {
|
|
25
|
+
const { apiKey } = await inquirer.prompt([
|
|
26
|
+
{
|
|
27
|
+
type: "password",
|
|
28
|
+
name: "apiKey",
|
|
29
|
+
message: `API key for ${provider}:`,
|
|
30
|
+
mask: "*",
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
return apiKey;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,eAAwB,KAAK;IAC1E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO;YACP,OAAO,EAAE,YAAY;SACtB;KACF,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAmB;IACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACzC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,SAAS;SACnB;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,eAAe,QAAQ,GAAG;YACnC,IAAI,EAAE,GAAG;SACV;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentgazer/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "AgentGazer — AI Agent observability. One command to monitor your agents locally.",
|
|
5
6
|
"license": "Apache-2.0",
|
|
6
7
|
"main": "./dist/index.js",
|
|
@@ -42,18 +43,24 @@
|
|
|
42
43
|
"node": ">=18"
|
|
43
44
|
},
|
|
44
45
|
"scripts": {
|
|
45
|
-
"build": "tsc && node -e \"
|
|
46
|
+
"build": "tsc && node --input-type=module -e \"import fs from 'fs';import path from 'path';import {fileURLToPath} from 'url';const __dirname=path.dirname(fileURLToPath(import.meta.url));const src=path.resolve(__dirname,'../../apps/dashboard-local/dist');const dst=path.resolve(__dirname,'dist/dashboard');if(fs.existsSync(src)){fs.cpSync(src,dst,{recursive:true});console.log('Copied dashboard to dist/dashboard')}else{console.warn('Warning: dashboard-local/dist not found')}\"",
|
|
46
47
|
"dev": "tsc --watch",
|
|
47
48
|
"test": "vitest run",
|
|
48
49
|
"prepublishOnly": "npm run build"
|
|
49
50
|
},
|
|
50
51
|
"dependencies": {
|
|
51
|
-
"@agentgazer/proxy": "^0.
|
|
52
|
-
"@agentgazer/server": "^0.
|
|
53
|
-
"@agentgazer/shared": "^0.
|
|
54
|
-
"
|
|
52
|
+
"@agentgazer/proxy": "^0.3.0",
|
|
53
|
+
"@agentgazer/server": "^0.3.0",
|
|
54
|
+
"@agentgazer/shared": "^0.3.0",
|
|
55
|
+
"ink": "^4.4.1",
|
|
56
|
+
"ink-table": "^3.0.0",
|
|
57
|
+
"inquirer": "^12.3.2",
|
|
58
|
+
"open": "^10.1.0",
|
|
59
|
+
"react": "^18.3.1"
|
|
55
60
|
},
|
|
56
61
|
"devDependencies": {
|
|
62
|
+
"@types/inquirer": "^9.0.7",
|
|
63
|
+
"@types/react": "^18.3.0",
|
|
57
64
|
"dashboard-local": "*",
|
|
58
65
|
"typescript": "^5.5.0",
|
|
59
66
|
"vitest": "^4.0.18"
|