@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.
Files changed (31) hide show
  1. package/bun.lock +71 -0
  2. package/client/package.json +1 -0
  3. package/client/src/components/analytics/AnalyticsView.tsx +119 -0
  4. package/client/src/components/analytics/ChartCard.tsx +22 -0
  5. package/client/src/components/analytics/PeriodSelector.tsx +42 -0
  6. package/client/src/components/analytics/QuickStats.tsx +99 -0
  7. package/client/src/components/analytics/charts/CacheEfficiencyChart.tsx +60 -0
  8. package/client/src/components/analytics/charts/ContextUtilizationChart.tsx +110 -0
  9. package/client/src/components/analytics/charts/CostAreaChart.tsx +83 -0
  10. package/client/src/components/analytics/charts/CostDistributionChart.tsx +62 -0
  11. package/client/src/components/analytics/charts/CostDonutChart.tsx +93 -0
  12. package/client/src/components/analytics/charts/CumulativeCostChart.tsx +62 -0
  13. package/client/src/components/analytics/charts/ResponseTimeScatter.tsx +101 -0
  14. package/client/src/components/analytics/charts/SessionBubbleChart.tsx +122 -0
  15. package/client/src/components/analytics/charts/TokenFlowChart.tsx +82 -0
  16. package/client/src/components/analytics/charts/TokenSankeyChart.tsx +89 -0
  17. package/client/src/components/dashboard/DashboardView.tsx +5 -0
  18. package/client/src/components/sidebar/Sidebar.tsx +10 -2
  19. package/client/src/hooks/useAnalytics.ts +75 -0
  20. package/client/src/router.tsx +4 -0
  21. package/client/src/stores/analytics.ts +54 -0
  22. package/client/src/stores/sidebar.ts +8 -0
  23. package/client/vite.config.ts +1 -0
  24. package/package.json +1 -1
  25. package/server/src/analytics/engine.ts +606 -0
  26. package/server/src/daemon.ts +1 -0
  27. package/server/src/handlers/analytics.ts +34 -0
  28. package/server/src/project/session.ts +4 -4
  29. package/shared/src/analytics.ts +28 -0
  30. package/shared/src/index.ts +1 -0
  31. 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";
@@ -1,3 +1,4 @@
1
+ export * from "./analytics.js";
1
2
  export * from "./constants.js";
2
3
  export * from "./messages.js";
3
4
  export * from "./models.js";
@@ -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";