pi-mega-compact 0.11.2 → 0.11.4

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 (112) hide show
  1. package/dist/extensions/dashboard-server/api-contracts/endpoints.js +9 -1
  2. package/dist/extensions/dashboard-server/api-contracts/provider-cache.js +7 -0
  3. package/dist/extensions/dashboard-server/api-contracts.test.js +3 -2
  4. package/dist/extensions/dashboard-server/index-reader.js +22 -0
  5. package/dist/extensions/dashboard-server/routes-cache.js +80 -0
  6. package/dist/extensions/dashboard-server/routes-cache.test.js +248 -0
  7. package/dist/extensions/dashboard-server/routes-maintenance.js +7 -7
  8. package/dist/extensions/dashboard-server/routes-repo.js +24 -0
  9. package/dist/extensions/dashboard-server/routes.js +1 -0
  10. package/dist/extensions/dashboard-server/server.js +3 -1
  11. package/dist/extensions/mega-cache-replay.test.js +233 -24
  12. package/dist/extensions/mega-compact-s38.test.js +778 -20
  13. package/dist/extensions/mega-config.js +4 -0
  14. package/dist/extensions/mega-events/agent-handlers.js +44 -8
  15. package/dist/extensions/mega-events/context-handler.js +37 -19
  16. package/dist/extensions/mega-events/error-classifier.js +125 -135
  17. package/dist/extensions/mega-events/outage-advisor.js +53 -0
  18. package/dist/extensions/mega-runtime/reset-runtime.js +1 -0
  19. package/dist/extensions/mega-runtime/runtime-snapshot.js +14 -4
  20. package/dist/extensions/mega-runtime/runtime.js +1 -0
  21. package/dist/extensions/mega-runtime/snapshot.js +1 -1
  22. package/dist/extensions/mega-runtime/snapshot.test.js +127 -0
  23. package/dist/extensions/mega-runtime/widget.js +4 -4
  24. package/dist/extensions/mega-runtime/widget.test.js +103 -12
  25. package/dist/src/pricing.js +78 -0
  26. package/dist/src/store/sqlite/perf-samples.js +104 -0
  27. package/dist/src/store/sqlite/perf-samples.test.js +93 -1
  28. package/extensions/dashboard-client/dist/assets/{AchievementTiles-Cml6YC8w.js → AchievementTiles-vEo2MtE2.js} +2 -2
  29. package/extensions/dashboard-client/dist/assets/{AchievementTiles-Cml6YC8w.js.map → AchievementTiles-vEo2MtE2.js.map} +1 -1
  30. package/extensions/dashboard-client/dist/assets/AchievementsTab-DjxfYrDc.js +2 -0
  31. package/extensions/dashboard-client/dist/assets/{AchievementsTab-B8NqDt7I.js.map → AchievementsTab-DjxfYrDc.js.map} +1 -1
  32. package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js +2 -0
  33. package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js.map +1 -0
  34. package/extensions/dashboard-client/dist/assets/{ConfigTab-CBYvp2mV.js → ConfigTab-Cm6ymbmx.js} +2 -2
  35. package/extensions/dashboard-client/dist/assets/{ConfigTab-CBYvp2mV.js.map → ConfigTab-Cm6ymbmx.js.map} +1 -1
  36. package/extensions/dashboard-client/dist/assets/{EventsTab-DlTJqiDm.js → EventsTab-DXWl_YzI.js} +2 -2
  37. package/extensions/dashboard-client/dist/assets/{EventsTab-DlTJqiDm.js.map → EventsTab-DXWl_YzI.js.map} +1 -1
  38. package/extensions/dashboard-client/dist/assets/{GameTab-DkGTqKJW.js → GameTab-BLDudcO5.js} +2 -2
  39. package/extensions/dashboard-client/dist/assets/{GameTab-DkGTqKJW.js.map → GameTab-BLDudcO5.js.map} +1 -1
  40. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DLkKCztn.js +2 -0
  41. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DLkKCztn.js.map +1 -0
  42. package/extensions/dashboard-client/dist/assets/{MetricsTab-BFo7pKM-.js → MetricsTab-Cq4u-rZF.js} +2 -2
  43. package/extensions/dashboard-client/dist/assets/{MetricsTab-BFo7pKM-.js.map → MetricsTab-Cq4u-rZF.js.map} +1 -1
  44. package/extensions/dashboard-client/dist/assets/{OverviewTab-CClCUd3-.js → OverviewTab-D4kGvsiQ.js} +2 -2
  45. package/extensions/dashboard-client/dist/assets/{OverviewTab-CClCUd3-.js.map → OverviewTab-D4kGvsiQ.js.map} +1 -1
  46. package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js +2 -0
  47. package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js.map +1 -0
  48. package/extensions/dashboard-client/dist/assets/{SessionsTab-CCYd-kSz.js → SessionsTab-DZC2-GCn.js} +2 -2
  49. package/extensions/dashboard-client/dist/assets/{SessionsTab-CCYd-kSz.js.map → SessionsTab-DZC2-GCn.js.map} +1 -1
  50. package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js +2 -0
  51. package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js.map +1 -0
  52. package/extensions/dashboard-client/dist/assets/{TopicsTab-DRLJmVv0.js → TopicsTab-01G71hv1.js} +2 -2
  53. package/extensions/dashboard-client/dist/assets/{TopicsTab-DRLJmVv0.js.map → TopicsTab-01G71hv1.js.map} +1 -1
  54. package/extensions/dashboard-client/dist/assets/{TurnsTab-CLNM0T5R.js → TurnsTab-DLRg0LZT.js} +2 -2
  55. package/extensions/dashboard-client/dist/assets/{TurnsTab-CLNM0T5R.js.map → TurnsTab-DLRg0LZT.js.map} +1 -1
  56. package/extensions/dashboard-client/dist/assets/index-BEdKlpAB.css +1 -0
  57. package/extensions/dashboard-client/dist/assets/{index-BcoSz-L4.js → index-BX0bcgLu.js} +4 -4
  58. package/extensions/dashboard-client/dist/assets/{index-BcoSz-L4.js.map → index-BX0bcgLu.js.map} +1 -1
  59. package/extensions/dashboard-client/dist/assets/{useSSE-Cezlih5V.js → useSSE-BBYt5UPB.js} +2 -2
  60. package/extensions/dashboard-client/dist/assets/{useSSE-Cezlih5V.js.map → useSSE-BBYt5UPB.js.map} +1 -1
  61. package/extensions/dashboard-client/dist/index.html +2 -2
  62. package/extensions/dashboard-client/src/api/client.ts +6 -0
  63. package/extensions/dashboard-client/src/components/ActiveReposTable.tsx +13 -1
  64. package/extensions/dashboard-client/src/components/ProviderCacheCard.tsx +141 -0
  65. package/extensions/dashboard-client/src/components/SavingsByModelTable.tsx +31 -3
  66. package/extensions/dashboard-client/src/main.tsx +1 -0
  67. package/extensions/dashboard-client/src/styles/maintenance.css +267 -0
  68. package/extensions/dashboard-client/src/styles/overview-extra.css +9 -0
  69. package/extensions/dashboard-client/src/tabs/CacheTab.tsx +83 -29
  70. package/extensions/dashboard-client/src/tabs/MaintenanceTab.tsx +301 -136
  71. package/extensions/dashboard-client/src/utils/format.ts +42 -7
  72. package/extensions/dashboard-server/api-contracts/endpoints.ts +31 -8
  73. package/extensions/dashboard-server/api-contracts/index.ts +4 -0
  74. package/extensions/dashboard-server/api-contracts/multi-repo.ts +6 -0
  75. package/extensions/dashboard-server/api-contracts/provider-cache.ts +30 -0
  76. package/extensions/dashboard-server/api-contracts.test.ts +3 -2
  77. package/extensions/dashboard-server/index-reader.ts +23 -0
  78. package/extensions/dashboard-server/routes-cache.test.ts +302 -0
  79. package/extensions/dashboard-server/routes-cache.ts +123 -0
  80. package/extensions/dashboard-server/routes-maintenance.ts +18 -11
  81. package/extensions/dashboard-server/routes-repo.ts +31 -4
  82. package/extensions/dashboard-server/routes.ts +1 -0
  83. package/extensions/dashboard-server/server.ts +2 -0
  84. package/extensions/mega-cache-replay.test.ts +481 -166
  85. package/extensions/mega-compact-s38.test.ts +785 -20
  86. package/extensions/mega-config.ts +14 -0
  87. package/extensions/mega-events/agent-handlers.ts +48 -7
  88. package/extensions/mega-events/context-handler.ts +59 -24
  89. package/extensions/mega-events/error-classifier.ts +167 -129
  90. package/extensions/mega-events/outage-advisor.ts +73 -0
  91. package/extensions/mega-runtime/helpers.ts +2 -0
  92. package/extensions/mega-runtime/reset-runtime.ts +1 -0
  93. package/extensions/mega-runtime/runtime-snapshot.ts +31 -9
  94. package/extensions/mega-runtime/runtime.ts +1 -0
  95. package/extensions/mega-runtime/snapshot.test.ts +139 -0
  96. package/extensions/mega-runtime/snapshot.ts +6 -4
  97. package/extensions/mega-runtime/widget.test.ts +290 -105
  98. package/extensions/mega-runtime/widget.ts +29 -6
  99. package/package.json +1 -1
  100. package/src/pricing.ts +95 -0
  101. package/src/store/sqlite/perf-samples.test.ts +107 -3
  102. package/src/store/sqlite/perf-samples.ts +142 -6
  103. package/extensions/dashboard-client/dist/assets/AchievementsTab-B8NqDt7I.js +0 -2
  104. package/extensions/dashboard-client/dist/assets/CacheTab-BCLzVL4S.js +0 -2
  105. package/extensions/dashboard-client/dist/assets/CacheTab-BCLzVL4S.js.map +0 -1
  106. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Cw43zmUx.js +0 -2
  107. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Cw43zmUx.js.map +0 -1
  108. package/extensions/dashboard-client/dist/assets/ReposTab-_3R4RSLZ.js +0 -2
  109. package/extensions/dashboard-client/dist/assets/ReposTab-_3R4RSLZ.js.map +0 -1
  110. package/extensions/dashboard-client/dist/assets/TimeSavedCard-0TqsrY6y.js +0 -2
  111. package/extensions/dashboard-client/dist/assets/TimeSavedCard-0TqsrY6y.js.map +0 -1
  112. package/extensions/dashboard-client/dist/assets/index-gn66lYD2.css +0 -1
@@ -1,50 +1,104 @@
1
1
  /**
2
- * dashboard-client/src/tabs/CacheTab.tsx — Cache tab (NEW).
2
+ * dashboard-client/src/tabs/CacheTab.tsx — Cache tab (B.3).
3
3
  *
4
- * Renders CacheHitsCard + TimeSavedCard from /api/snapshot
5
- * via the useApi hook with 5s polling.
4
+ * Two sections, each with its own header:
5
+ * 1. Provider Prompt Cache → ProviderCacheCard (/api/provider-cache)
6
+ * 2. Mega-Compact Dedup Cache → CacheHitsCard + TimeSavedCard (/api/snapshot)
7
+ *
8
+ * Both fetch at 5s polling (same interval). Loading / error shown per-section
9
+ * only when its own fetch fails; the other section keeps rendering.
6
10
  */
7
11
 
8
12
  import type React from "react";
9
13
  import { useCallback } from "react";
10
- import type { SnapshotResponse } from "@contracts";
14
+ import type { SnapshotResponse, ProviderCacheResponse } from "@contracts";
11
15
  import { useApi } from "../hooks/useApi";
12
- import { fetchSnapshot } from "../api/client";
16
+ import { fetchSnapshot, fetchProviderCache } from "../api/client";
13
17
  import { CacheHitsCard } from "../components/CacheHitsCard";
14
18
  import { TimeSavedCard } from "../components/TimeSavedCard";
19
+ import { ProviderCacheCard } from "../components/ProviderCacheCard";
15
20
 
16
21
  export default function CacheTab(): React.ReactElement {
17
- const { data: snapshot, loading, error } = useApi<SnapshotResponse>(
18
- useCallback(() => fetchSnapshot(), []),
22
+ /* --- Provider prompt cache (5s poll) --- */
23
+ const {
24
+ data: providerCache,
25
+ loading: pcLoading,
26
+ error: pcError,
27
+ } = useApi<ProviderCacheResponse>(
28
+ useCallback(() => fetchProviderCache(), []),
19
29
  { pollInterval: 5000 },
20
30
  );
21
31
 
22
- if (loading && !snapshot)
23
- return <div className="tab-stub">Loading snapshot…</div>;
24
- if (error && !snapshot)
25
- return <div className="tab-stub">Error: {error.message}</div>;
26
- if (!snapshot) return <div className="tab-stub">No snapshot data.</div>;
27
-
28
- const { cacheHits, compacts, timeSaved } = snapshot;
32
+ /* --- Dedup cache snapshot (5s poll) --- */
33
+ const {
34
+ data: snapshot,
35
+ loading: snapLoading,
36
+ error: snapError,
37
+ } = useApi<SnapshotResponse>(
38
+ useCallback(() => fetchSnapshot(), []),
39
+ { pollInterval: 5000 },
40
+ );
29
41
 
30
42
  return (
31
43
  <div className="cache-tab">
32
- <div className="card-grid overview-card-grid">
33
- <CacheHitsCard
34
- cacheHitsSession={cacheHits.session}
35
- cacheHitsTotal={cacheHits.total}
36
- tokensSavedSession={cacheHits.sessionTokensSaved}
37
- tokensSavedTotal={cacheHits.totalTokensSaved}
38
- compactionsSession={compacts.session}
39
- compactionsTotal={compacts.total}
44
+ {/* ==============================================================
45
+ Section 1 — Provider Prompt Cache
46
+ ============================================================== */}
47
+ <h2>Provider Prompt Cache</h2>
48
+ {pcLoading ? (
49
+ <p className="tab-stub">Loading…</p>
50
+ ) : pcError ? (
51
+ <p className="tab-stub">
52
+ Provider cache unavailable: {pcError.message}
53
+ </p>
54
+ ) : providerCache ? (
55
+ <ProviderCacheCard
56
+ hitPct={providerCache.cache.avgHitPct}
57
+ turnCount={providerCache.cache.turnCount}
58
+ totalCacheRead={providerCache.cache.totalCacheRead}
59
+ totalCacheWrite={providerCache.cache.totalCacheWrite}
60
+ totalInput={providerCache.cache.totalInput}
61
+ cacheReadSaved={providerCache.savings?.cacheReadSaved ?? null}
62
+ cacheWriteCost={providerCache.savings?.cacheWriteCost ?? null}
63
+ netSaved={providerCache.savings?.netSaved ?? null}
64
+ modelLabel={providerCache.savings?.model ?? null}
65
+ firstTurnAt={providerCache.cache.firstTurnAt}
66
+ latestTurnAt={providerCache.cache.latestTurnAt}
40
67
  />
41
- <TimeSavedCard
42
- compactSessionSec={timeSaved.compact.sessionSec}
43
- compactTotalSec={timeSaved.compact.totalSec}
44
- cacheHitSessionSec={timeSaved.cacheHit.sessionSec}
45
- cacheHitTotalSec={timeSaved.cacheHit.totalSec}
46
- />
47
- </div>
68
+ ) : null}
69
+
70
+ {/* ==============================================================
71
+ Section 2 — Mega-Compact Dedup Cache
72
+ ============================================================== */}
73
+ <h2>Mega-Compact Dedup Cache</h2>
74
+ {snapLoading ? (
75
+ <p className="tab-stub">Loading…</p>
76
+ ) : snapError ? (
77
+ <p className="tab-stub">Snapshot unavailable: {snapError.message}</p>
78
+ ) : (
79
+ snapshot &&
80
+ (() => {
81
+ const { cacheHits, compacts, timeSaved } = snapshot;
82
+ return (
83
+ <div className="card-grid overview-card-grid">
84
+ <CacheHitsCard
85
+ cacheHitsSession={cacheHits.session}
86
+ cacheHitsTotal={cacheHits.total}
87
+ tokensSavedSession={cacheHits.sessionTokensSaved}
88
+ tokensSavedTotal={cacheHits.totalTokensSaved}
89
+ compactionsSession={compacts.session}
90
+ compactionsTotal={compacts.total}
91
+ />
92
+ <TimeSavedCard
93
+ compactSessionSec={timeSaved.compact.sessionSec}
94
+ compactTotalSec={timeSaved.compact.totalSec}
95
+ cacheHitSessionSec={timeSaved.cacheHit.sessionSec}
96
+ cacheHitTotalSec={timeSaved.cacheHit.totalSec}
97
+ />
98
+ </div>
99
+ );
100
+ })()
101
+ )}
48
102
  </div>
49
103
  );
50
104
  }