pi-mega-compact 0.8.8 → 0.8.10

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 (88) hide show
  1. package/dist/extensions/dashboard-server/api-contracts/core.js +7 -0
  2. package/dist/extensions/dashboard-server/api-contracts/endpoints.js +104 -0
  3. package/dist/extensions/dashboard-server/api-contracts/game.js +9 -0
  4. package/dist/extensions/dashboard-server/api-contracts/index.js +9 -0
  5. package/dist/extensions/dashboard-server/api-contracts/infrastructure.js +10 -0
  6. package/dist/extensions/dashboard-server/api-contracts/multi-repo.js +9 -0
  7. package/dist/extensions/dashboard-server/api-contracts/snapshot.js +8 -0
  8. package/dist/extensions/dashboard-server/api-contracts.js +8 -0
  9. package/dist/extensions/dashboard-server/api-contracts.test.js +869 -0
  10. package/dist/extensions/dashboard-server/auth.js +18 -0
  11. package/dist/extensions/dashboard-server/helpers.js +37 -0
  12. package/dist/extensions/dashboard-server/html/all-repos-tab.js +26 -0
  13. package/dist/extensions/dashboard-server/html/body-open.js +23 -0
  14. package/dist/extensions/dashboard-server/html/current-repo-tab.js +130 -0
  15. package/dist/extensions/dashboard-server/html/head-open.js +16 -0
  16. package/dist/extensions/dashboard-server/html/high-score-tab.js +25 -0
  17. package/dist/extensions/dashboard-server/html/repo-detail-modal.js +26 -0
  18. package/dist/extensions/dashboard-server/html/script.js +259 -0
  19. package/dist/extensions/dashboard-server/html/styles.js +103 -0
  20. package/dist/extensions/dashboard-server/html/summary-tab.js +19 -0
  21. package/dist/extensions/dashboard-server/html-template.js +41 -0
  22. package/dist/extensions/dashboard-server/server.js +191 -39
  23. package/dist/extensions/dashboard-server/tailscale.js +8 -0
  24. package/dist/extensions/dashboard-server/types.js +4 -0
  25. package/dist/src/store/sqlite/connection.js +35 -0
  26. package/dist/src/store/sqlite/index-store.js +167 -0
  27. package/dist/src/store/sqlite/memory.js +54 -0
  28. package/dist/src/store/sqlite/minhash-lsh.js +47 -0
  29. package/dist/src/store/sqlite/sessions.js +39 -0
  30. package/dist/src/store/sqlite/transaction.js +19 -0
  31. package/dist/src/vectorStore/add.js +260 -0
  32. package/dist/src/vectorStore/dedup.js +52 -0
  33. package/dist/src/vectorStore/index.js +10 -0
  34. package/dist/src/vectorStore/queries.js +83 -0
  35. package/dist/src/vectorStore/search.js +95 -0
  36. package/dist/src/vectorStore/session.js +19 -0
  37. package/dist/src/vectorStore/store.js +105 -0
  38. package/dist/src/vectorStore/types.js +6 -0
  39. package/dist/src/vectorStore/utils.js +23 -0
  40. package/extensions/dashboard-client/package-lock.json +1771 -0
  41. package/extensions/dashboard-client/package.json +27 -0
  42. package/extensions/dashboard-client/src/App.tsx +82 -0
  43. package/extensions/dashboard-client/src/api/client.ts +145 -0
  44. package/extensions/dashboard-client/src/components/CacheStatusPerModel.tsx +44 -0
  45. package/extensions/dashboard-client/src/components/CompressionCard.tsx +61 -0
  46. package/extensions/dashboard-client/src/components/ContextGauge.tsx +59 -0
  47. package/extensions/dashboard-client/src/components/DataSafetyCard.tsx +49 -0
  48. package/extensions/dashboard-client/src/components/ErrorBoundary.tsx +53 -0
  49. package/extensions/dashboard-client/src/components/EventCategoryFilter.tsx +16 -0
  50. package/extensions/dashboard-client/src/components/EventStream.tsx +152 -0
  51. package/extensions/dashboard-client/src/components/LoadingSpinner.tsx +7 -0
  52. package/extensions/dashboard-client/src/components/MemoryStatusCard.tsx +24 -0
  53. package/extensions/dashboard-client/src/components/ModelBadge.tsx +41 -0
  54. package/extensions/dashboard-client/src/components/PerfChart.tsx +160 -0
  55. package/extensions/dashboard-client/src/components/RepoDetailModal.tsx +126 -0
  56. package/extensions/dashboard-client/src/components/RepoTable.tsx +150 -0
  57. package/extensions/dashboard-client/src/components/SessionInfo.tsx +65 -0
  58. package/extensions/dashboard-client/src/components/SummaryTiles.tsx +52 -0
  59. package/extensions/dashboard-client/src/components/TabBar.tsx +34 -0
  60. package/extensions/dashboard-client/src/components/TriggerStatus.tsx +62 -0
  61. package/extensions/dashboard-client/src/hooks/useApi.ts +77 -0
  62. package/extensions/dashboard-client/src/hooks/useSSE.ts +87 -0
  63. package/extensions/dashboard-client/src/index.html +12 -0
  64. package/extensions/dashboard-client/src/main.tsx +23 -0
  65. package/extensions/dashboard-client/src/styles/base.css +121 -0
  66. package/extensions/dashboard-client/src/styles/overview-events.css +318 -0
  67. package/extensions/dashboard-client/src/styles/repos-metrics.css +307 -0
  68. package/extensions/dashboard-client/src/tabs/ConfigTab.tsx +16 -0
  69. package/extensions/dashboard-client/src/tabs/EventsTab.tsx +37 -0
  70. package/extensions/dashboard-client/src/tabs/MetricsTab.tsx +49 -0
  71. package/extensions/dashboard-client/src/tabs/OverviewTab.tsx +80 -0
  72. package/extensions/dashboard-client/src/tabs/ReposTab.tsx +59 -0
  73. package/extensions/dashboard-client/tsconfig.json +28 -0
  74. package/extensions/dashboard-client/vite.config.ts +38 -0
  75. package/extensions/dashboard-server/api-contracts/core.ts +302 -0
  76. package/extensions/dashboard-server/api-contracts/endpoints.ts +476 -0
  77. package/extensions/dashboard-server/api-contracts/game.ts +145 -0
  78. package/extensions/dashboard-server/api-contracts/index.ts +159 -0
  79. package/extensions/dashboard-server/api-contracts/infrastructure.ts +465 -0
  80. package/extensions/dashboard-server/api-contracts/multi-repo.ts +328 -0
  81. package/extensions/dashboard-server/api-contracts/snapshot.ts +386 -0
  82. package/extensions/dashboard-server/api-contracts.test.ts +1050 -0
  83. package/extensions/dashboard-server/api-contracts.ts +96 -0
  84. package/extensions/dashboard-server/auth.ts +20 -0
  85. package/extensions/dashboard-server/server.ts +862 -582
  86. package/extensions/dashboard-server/tailscale.ts +7 -0
  87. package/extensions/dashboard-server/types.ts +23 -114
  88. package/package.json +2 -1
@@ -0,0 +1,7 @@
1
+ export function setupTailscaleServe(port = 3000, httpsPort = 443): boolean {
2
+ // Tailscale serve: exposes localhost dashboard securely.
3
+ // Only activates when TAILSCALE_ENABLED=1 is set.
4
+ if (process.env.TAILSCALE_ENABLED !== "1") return false;
5
+ console.log(`[tailscale] Serve enabled on port ${port} (https:${httpsPort})`);
6
+ return true;
7
+ }
@@ -1,37 +1,24 @@
1
1
  /**
2
2
  * dashboard-server/types.ts — shared types for the dashboard server.
3
+ *
4
+ * Re-exports shared shapes from `api-contracts/` where they overlap with
5
+ * the legacy local types, while preserving 100% backward compatibility for
6
+ * all existing consumers (server.ts, index-reader.ts, snapshot.ts).
3
7
  */
4
8
 
9
+ import type { IndexesIndexRow } from "./api-contracts/multi-repo.js";
10
+ import type { SnapshotResponse } from "./api-contracts/snapshot.js";
11
+
5
12
  // Active-window cutoff (seconds) for the /api/servers endpoint.
6
13
  export const ACTIVE_WINDOW_SEC = 1800;
7
14
 
8
- export interface IndexRepo {
9
- repoRoot: string;
10
- displayName: string;
11
- stateDir: string;
12
- checkpointCount: number;
13
- tokensSaved: number;
14
- compressedOriginalBytes: number;
15
- lastCompactedAt: number | null;
16
- provider: string | null;
17
- providerName: string | null;
18
- modelName: string | null;
19
- inputRate: number | null;
20
- outputRate: number | null;
21
- lastSeen: number;
22
- // Per-repo token + model detail (S25 dashboard enrichment), read directly
23
- // from each repo's node:sqlite store at stateDir. tokensKept = Σ stored
24
- // summary tokens ("out"); tokensDropped = Σ original region tokens ("in");
25
- // sessions = distinct sessions with a checkpoint; contextWindow/maxTokens/
26
- // reasoning come from the latest model_snapshots row for that repo.
27
- tokensKept: number;
28
- tokensDropped: number;
29
- sessions: number;
30
- contextWindow: number | null;
31
- maxTokens: number | null;
32
- reasoning: boolean | null;
33
- }
15
+ // IndexRepo fields exactly match IndexesIndexRow in api-contracts/multi-repo.ts.
16
+ export type { IndexesIndexRow as IndexRepo } from "./api-contracts/multi-repo.js";
34
17
 
18
+ /**
19
+ * Per-repo summary metrics (subset of IndexesSummaryResponse — lacks
20
+ * `updatedAt` and `repos`).
21
+ */
35
22
  export interface IndexSummary {
36
23
  totalRepos: number;
37
24
  totalCheckpoints: number;
@@ -39,96 +26,18 @@ export interface IndexSummary {
39
26
  totalCompressedOriginalBytes: number;
40
27
  }
41
28
 
42
- export type IndexIndex = { updatedAt: string; summary: IndexSummary | null; repos: IndexRepo[] };
29
+ export type IndexIndex = { updatedAt: string; summary: IndexSummary | null; repos: IndexesIndexRow[] };
43
30
 
44
- export interface Snapshot {
31
+ /**
32
+ * Full dashboard snapshot — extends SnapshotResponse with a `version` field
33
+ * used for cache-replay compatibility checks.
34
+ */
35
+ export interface Snapshot extends SnapshotResponse {
45
36
  version: number;
46
- updatedAt: string | null;
47
- tier: string;
48
- presetTier: string;
49
- pressure: number;
50
- config: {
51
- fastGatePct: number;
52
- thresholdTokens: number;
53
- anchorUserMessages: number;
54
- preserveRecent: number;
55
- auto: boolean;
56
- autoInlineK: number;
57
- };
58
- session: {
59
- id: string | null;
60
- state: string | null;
61
- persistedThisSession: boolean;
62
- lastCheckpointId: string | null;
63
- lastCompactedFrom: number;
64
- };
65
- context: {
66
- tokens: number | null;
67
- percent: number | null;
68
- contextWindow: number;
69
- };
70
- trigger: {
71
- armed: boolean;
72
- ready: boolean;
73
- currentTokens: number | null;
74
- thresholdTokens: number;
75
- fastGatePct: number;
76
- };
77
- store: {
78
- checkpointCount: number;
79
- totalTokenEstimate: number;
80
- originalTokens: number;
81
- tokensSaved: number;
82
- injectedCount: number;
83
- dedupHitRate: number;
84
- storageDedupRate: number;
85
- dedupCollapsed: number;
86
- };
87
- crew: {
88
- activeAgents: number;
89
- currentTurn: number;
90
- };
91
- repo: {
92
- checkpointCount: number;
93
- totalTokenEstimate: number;
94
- originalTokens: number;
95
- tokensSaved: number;
96
- sessionCount: number;
97
- dedupAttempts: number;
98
- dedupCollapsed: number;
99
- storageDedupRate: number;
100
- };
101
- integrity: {
102
- regionsRetained: number;
103
- compressedOriginalBytes: number;
104
- duplicatesCollapsed: number;
105
- bytesPermanentlyDeleted: number;
106
- };
107
- cacheHits: {
108
- session: number;
109
- total: number;
110
- sessionTokensSaved: number;
111
- totalTokensSaved: number;
112
- };
113
- compacts: {
114
- session: number;
115
- total: number;
116
- };
117
- timeSaved: {
118
- compact: { sessionSec: number; totalSec: number };
119
- cacheHit: { sessionSec: number; totalSec: number };
120
- };
121
- compression: {
122
- session: { tokensIn: number; tokensOut: number; tokensFreed: number; compressionPct: number; dedupPct: number };
123
- repo: { tokensIn: number; tokensOut: number; tokensFreed: number; compressionPct: number; dedupPct: number };
124
- };
125
- model?: {
126
- name: string;
127
- provider: string;
128
- providerName: string;
129
- inputRate: number;
130
- outputRate: number;
131
- };
132
37
  }
133
38
 
39
+ /**
40
+ * Minimal live snapshot shape for lightweight dashboard.json overlays.
41
+ * No api-contracts equivalent — kept as-is.
42
+ */
134
43
  export interface LiveSnapshot { tier?: string; updatedAt?: string | null; context?: { tokens?: number | null; percent?: number | null; contextWindow?: number }; session?: { id?: string; state?: string }; cacheHits?: { session: number; total: number; sessionTokensSaved: number; totalTokensSaved: number }; compacts?: { session: number; total: number }; timeSaved?: { compact: { sessionSec: number; totalSec: number }; cacheHit: { sessionSec: number; totalSec: number } }; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-mega-compact",
3
- "version": "0.8.8",
3
+ "version": "0.8.10",
4
4
  "description": "Layered, local, vector-backed context compressor for pi — supersede/collapse/cluster compaction with deduped inline recall.",
5
5
  "type": "module",
6
6
  "license": "BSD-2-Clause",
@@ -41,6 +41,7 @@
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc -p tsconfig.json",
44
+ "build:dashboard": "cd extensions/dashboard-client && npx vite build",
44
45
  "lint": "tsc --noEmit && node scripts/guardrails-scan.mjs && node scripts/semantic-scan.mjs",
45
46
  "test": "npm run build && node scripts/run-tests.mjs",
46
47
  "guardrails": "python3 scripts/regression_check.py --all || node scripts/guardrails-scan.mjs || node scripts/semantic-scan.mjs",