zozul-cli 0.2.0 → 0.2.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.
- package/README.md +10 -7
- package/dist/dashboard/index.html +2 -1
- package/package.json +1 -1
- package/src/dashboard/index.html +2 -1
package/README.md
CHANGED
|
@@ -42,13 +42,16 @@ open http://localhost:7890/dashboard
|
|
|
42
42
|
|
|
43
43
|
`http://localhost:7890/dashboard`
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
50
|
-
- **Sessions
|
|
51
|
-
|
|
45
|
+
Four views, all with time window filtering (7d / 30d / All):
|
|
46
|
+
|
|
47
|
+
- **Summary** — total cost, sessions, and tasks at a glance; 30-day cost chart; cost breakdown by project
|
|
48
|
+
- **Tasks** — groups turns by tag combination (e.g. `[API] [Backend] [DB]`), shows process time, cost, and human interventions per group; click to drill into individual turns
|
|
49
|
+
- **Tags** — per-tag stats with drill-down into paginated turns and per-prompt cost
|
|
50
|
+
- **Sessions** — sortable, filterable, paginated session table; click any session for the full conversation with per-turn token counts and expandable tool call inputs/outputs
|
|
51
|
+
|
|
52
|
+
The dashboard auto-detects whether a remote backend is available (via health check) and falls back to the local API transparently. A badge in the header shows "Remote" or "Local".
|
|
53
|
+
|
|
54
|
+
Auto-refresh polls every 10s on the active view.
|
|
52
55
|
|
|
53
56
|
## Commands
|
|
54
57
|
|
|
@@ -590,6 +590,7 @@
|
|
|
590
590
|
let dataSource = 'local';
|
|
591
591
|
let autoRefreshTimer = null;
|
|
592
592
|
let currentView = 'summary';
|
|
593
|
+
let currentTimeWindow = '7d';
|
|
593
594
|
let previousView = 'tasks';
|
|
594
595
|
let allTaskGroups = [];
|
|
595
596
|
let allTagStats = [];
|
|
@@ -844,7 +845,7 @@ async function loadSummary() {
|
|
|
844
845
|
const [stats, tasks, costSeries, sessionsResp] = await Promise.all([
|
|
845
846
|
fetchJson('/api/stats'),
|
|
846
847
|
fetchJson('/api/tasks'),
|
|
847
|
-
fetchJson('/api/metrics/cost?range=
|
|
848
|
+
fetchJson('/api/metrics/cost?range=' + (currentTimeWindow === 'all' ? '90d' : currentTimeWindow) + '&step=1d'),
|
|
848
849
|
fetchJson('/api/sessions?limit=500&offset=0'),
|
|
849
850
|
]);
|
|
850
851
|
renderSummaryStats({
|
package/package.json
CHANGED
package/src/dashboard/index.html
CHANGED
|
@@ -590,6 +590,7 @@
|
|
|
590
590
|
let dataSource = 'local';
|
|
591
591
|
let autoRefreshTimer = null;
|
|
592
592
|
let currentView = 'summary';
|
|
593
|
+
let currentTimeWindow = '7d';
|
|
593
594
|
let previousView = 'tasks';
|
|
594
595
|
let allTaskGroups = [];
|
|
595
596
|
let allTagStats = [];
|
|
@@ -844,7 +845,7 @@ async function loadSummary() {
|
|
|
844
845
|
const [stats, tasks, costSeries, sessionsResp] = await Promise.all([
|
|
845
846
|
fetchJson('/api/stats'),
|
|
846
847
|
fetchJson('/api/tasks'),
|
|
847
|
-
fetchJson('/api/metrics/cost?range=
|
|
848
|
+
fetchJson('/api/metrics/cost?range=' + (currentTimeWindow === 'all' ? '90d' : currentTimeWindow) + '&step=1d'),
|
|
848
849
|
fetchJson('/api/sessions?limit=500&offset=0'),
|
|
849
850
|
]);
|
|
850
851
|
renderSummaryStats({
|