@cryptiklemur/lattice 1.4.0 → 1.6.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/bun.lock +71 -0
- package/client/package.json +1 -0
- package/client/src/components/analytics/AnalyticsView.tsx +119 -0
- package/client/src/components/analytics/ChartCard.tsx +22 -0
- package/client/src/components/analytics/PeriodSelector.tsx +42 -0
- package/client/src/components/analytics/QuickStats.tsx +99 -0
- package/client/src/components/analytics/charts/CacheEfficiencyChart.tsx +60 -0
- package/client/src/components/analytics/charts/ContextUtilizationChart.tsx +110 -0
- package/client/src/components/analytics/charts/CostAreaChart.tsx +83 -0
- package/client/src/components/analytics/charts/CostDistributionChart.tsx +62 -0
- package/client/src/components/analytics/charts/CostDonutChart.tsx +93 -0
- package/client/src/components/analytics/charts/CumulativeCostChart.tsx +62 -0
- package/client/src/components/analytics/charts/ResponseTimeScatter.tsx +101 -0
- package/client/src/components/analytics/charts/SessionBubbleChart.tsx +122 -0
- package/client/src/components/analytics/charts/TokenFlowChart.tsx +82 -0
- package/client/src/components/analytics/charts/TokenSankeyChart.tsx +89 -0
- package/client/src/components/dashboard/DashboardView.tsx +5 -0
- package/client/src/components/sidebar/Sidebar.tsx +10 -2
- package/client/src/hooks/useAnalytics.ts +75 -0
- package/client/src/router.tsx +4 -0
- package/client/src/stores/analytics.ts +54 -0
- package/client/src/stores/sidebar.ts +8 -0
- package/client/vite.config.ts +1 -0
- package/package.json +1 -1
- package/server/src/analytics/engine.ts +606 -0
- package/server/src/daemon.ts +1 -0
- package/server/src/handlers/analytics.ts +34 -0
- package/server/src/project/session.ts +4 -4
- package/shared/src/analytics.ts +28 -0
- package/shared/src/index.ts +1 -0
- package/shared/src/messages.ts +30 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface AnalyticsPayload {
|
|
2
|
+
totalCost: number;
|
|
3
|
+
totalSessions: number;
|
|
4
|
+
totalTokens: { input: number; output: number; cacheRead: number; cacheCreation: number };
|
|
5
|
+
cacheHitRate: number;
|
|
6
|
+
avgSessionCost: number;
|
|
7
|
+
avgSessionDuration: number;
|
|
8
|
+
|
|
9
|
+
costOverTime: Array<{ date: string; total: number; opus: number; sonnet: number; haiku: number; other: number }>;
|
|
10
|
+
cumulativeCost: Array<{ date: string; total: number }>;
|
|
11
|
+
sessionsOverTime: Array<{ date: string; count: number }>;
|
|
12
|
+
tokensOverTime: Array<{ date: string; input: number; output: number; cacheRead: number }>;
|
|
13
|
+
cacheHitRateOverTime: Array<{ date: string; rate: number }>;
|
|
14
|
+
|
|
15
|
+
costDistribution: Array<{ bucket: string; count: number }>;
|
|
16
|
+
sessionBubbles: Array<{ id: string; title: string; cost: number; tokens: number; timestamp: number; project: string }>;
|
|
17
|
+
|
|
18
|
+
modelUsage: Array<{ model: string; sessions: number; cost: number; tokens: number; percentage: number }>;
|
|
19
|
+
projectBreakdown: Array<{ project: string; cost: number; sessions: number; tokens: number }>;
|
|
20
|
+
toolUsage: Array<{ tool: string; count: number; avgCost: number }>;
|
|
21
|
+
|
|
22
|
+
responseTimeData: Array<{ tokens: number; duration: number; model: string; sessionId: string }>;
|
|
23
|
+
contextUtilization: Array<{ messageIndex: number; contextPercent: number; sessionId: string; title: string }>;
|
|
24
|
+
tokenFlowSankey: { nodes: Array<{ name: string }>; links: Array<{ source: number; target: number; value: number }> };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type AnalyticsPeriod = "24h" | "7d" | "30d" | "90d" | "all";
|
|
28
|
+
export type AnalyticsScope = "global" | "project" | "session";
|
package/shared/src/index.ts
CHANGED
package/shared/src/messages.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AnalyticsPayload } from "./analytics.js";
|
|
1
2
|
import type {
|
|
2
3
|
FileEntry,
|
|
3
4
|
HistoryMessage,
|
|
@@ -384,6 +385,30 @@ export interface SessionStopExternalMessage {
|
|
|
384
385
|
sessionId: string;
|
|
385
386
|
}
|
|
386
387
|
|
|
388
|
+
export interface AnalyticsRequestMessage {
|
|
389
|
+
type: "analytics:request";
|
|
390
|
+
requestId: string;
|
|
391
|
+
scope: "global" | "project" | "session";
|
|
392
|
+
projectSlug?: string;
|
|
393
|
+
sessionId?: string;
|
|
394
|
+
period: "24h" | "7d" | "30d" | "90d" | "all";
|
|
395
|
+
forceRefresh?: boolean;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export interface AnalyticsDataMessage {
|
|
399
|
+
type: "analytics:data";
|
|
400
|
+
requestId: string;
|
|
401
|
+
scope: "global" | "project" | "session";
|
|
402
|
+
period: "24h" | "7d" | "30d" | "90d" | "all";
|
|
403
|
+
data: AnalyticsPayload;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export interface AnalyticsErrorMessage {
|
|
407
|
+
type: "analytics:error";
|
|
408
|
+
scope: "global" | "project" | "session";
|
|
409
|
+
message: string;
|
|
410
|
+
}
|
|
411
|
+
|
|
387
412
|
export type ClientMessage =
|
|
388
413
|
| SessionCreateMessage
|
|
389
414
|
| SessionActivateMessage
|
|
@@ -439,7 +464,8 @@ export type ClientMessage =
|
|
|
439
464
|
| BrowseSuggestionsMessage
|
|
440
465
|
| EditorOpenMessage
|
|
441
466
|
| EditorDetectMessage
|
|
442
|
-
| ChatPromptResponseMessage
|
|
467
|
+
| ChatPromptResponseMessage
|
|
468
|
+
| AnalyticsRequestMessage;
|
|
443
469
|
|
|
444
470
|
export interface SessionListMessage {
|
|
445
471
|
type: "session:list";
|
|
@@ -828,7 +854,9 @@ export type ServerMessage =
|
|
|
828
854
|
| ChatPromptRequestMessage
|
|
829
855
|
| ChatPromptResolvedMessage
|
|
830
856
|
| ChatTodoUpdateMessage
|
|
831
|
-
| ChatPlanModeMessage
|
|
857
|
+
| ChatPlanModeMessage
|
|
858
|
+
| AnalyticsDataMessage
|
|
859
|
+
| AnalyticsErrorMessage;
|
|
832
860
|
|
|
833
861
|
export interface MeshHelloMessage {
|
|
834
862
|
type: "mesh:hello";
|