usage-board 4.0.0 → 4.0.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/dist/index.mjs CHANGED
@@ -539,7 +539,7 @@ defineLazyProperty(apps, "safari", () => detectPlatformBinary({ darwin: "Safari"
539
539
  //#endregion
540
540
  //#region package.json
541
541
  var name = "usage-board";
542
- var version = "4.0.0";
542
+ var version = "4.0.1";
543
543
  //#endregion
544
544
  //#region src/index.ts
545
545
  const cli = cac(name);
@@ -1 +1 @@
1
- {"id":"7ce9c611-6071-4cbd-8926-1e53d9ef21bd","timestamp":1779784299130}
1
+ {"id":"34b12f78-e5b7-490f-99ba-b4a8ab41b914","timestamp":1779787205815}
@@ -0,0 +1 @@
1
+ {"id":"34b12f78-e5b7-490f-99ba-b4a8ab41b914","timestamp":1779787205815,"prerendered":[]}
@@ -2,7 +2,7 @@ import process from 'node:process';globalThis._importMeta_=globalThis._importMet
2
2
  import https from 'node:https';
3
3
  import { EventEmitter } from 'node:events';
4
4
  import { Buffer as Buffer$1 } from 'node:buffer';
5
- import { promises, existsSync, mkdirSync, readFileSync, statSync, readdirSync, accessSync, constants } from 'node:fs';
5
+ import { promises, existsSync, rmSync, mkdirSync, readFileSync, statSync, readdirSync, accessSync, constants } from 'node:fs';
6
6
  import { resolve as resolve$1, dirname as dirname$1, join, sep, basename as basename$1 } from 'node:path';
7
7
  import { createHash } from 'node:crypto';
8
8
  import { DatabaseSync } from 'node:sqlite';
@@ -4271,7 +4271,7 @@ function _expandFromEnv(value) {
4271
4271
  const _inlineRuntimeConfig = {
4272
4272
  "app": {
4273
4273
  "baseURL": "/",
4274
- "buildId": "7ce9c611-6071-4cbd-8926-1e53d9ef21bd",
4274
+ "buildId": "34b12f78-e5b7-490f-99ba-b4a8ab41b914",
4275
4275
  "buildAssetsDir": "/_nuxt/",
4276
4276
  "cdnURL": ""
4277
4277
  },
@@ -4299,7 +4299,7 @@ const _inlineRuntimeConfig = {
4299
4299
  }
4300
4300
  },
4301
4301
  "public": {
4302
- "appVersion": "4.0.0",
4302
+ "appVersion": "4.0.1",
4303
4303
  "home": "/Users/tangchenghui"
4304
4304
  },
4305
4305
  "icon": {
@@ -5082,7 +5082,7 @@ function createEmptyDailyPlatformTokenUsage() {
5082
5082
 
5083
5083
  var __defProp$1 = Object.defineProperty;
5084
5084
  var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5085
- var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, key + "" , value);
5085
+ var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
5086
5086
  const CACHE_SCHEMA_VERSION = 9;
5087
5087
  const ROW_KEY_SEPARATOR = "";
5088
5088
  const CACHE_SCHEMA_SQL = `
@@ -5404,9 +5404,10 @@ const CACHE_SCHEMA_SQL = `
5404
5404
  class UsageCacheRepository {
5405
5405
  constructor(databasePath) {
5406
5406
  __publicField$1(this, "database");
5407
+ __publicField$1(this, "databasePath");
5407
5408
  mkdirParentDirectory(databasePath);
5408
- this.database = openSqliteDatabase(databasePath);
5409
- this.database.exec("PRAGMA foreign_keys = ON");
5409
+ this.databasePath = databasePath;
5410
+ this.database = this.openDatabase();
5410
5411
  this.initializeSchema();
5411
5412
  }
5412
5413
  loadBootstrap() {
@@ -5649,15 +5650,15 @@ class UsageCacheRepository {
5649
5650
  }
5650
5651
  const deleteFileStatement = this.database.prepare("DELETE FROM indexed_files WHERE path = ?");
5651
5652
  const insertFileStatement = this.database.prepare(`
5652
- INSERT INTO indexed_files (path, platform, cache_signature, size, mtime_ms, updated_at)
5653
+ INSERT OR REPLACE INTO indexed_files (path, platform, cache_signature, size, mtime_ms, updated_at)
5653
5654
  VALUES (?, ?, ?, ?, ?, ?)
5654
5655
  `);
5655
5656
  const insertProjectStatement = this.database.prepare(`
5656
- INSERT INTO indexed_file_projects (path, project_name, project_order)
5657
+ INSERT OR REPLACE INTO indexed_file_projects (path, project_name, project_order)
5657
5658
  VALUES (?, ?, ?)
5658
5659
  `);
5659
5660
  const insertFragmentStatement = this.database.prepare(`
5660
- INSERT INTO indexed_file_fragments (
5661
+ INSERT OR REPLACE INTO indexed_file_fragments (
5661
5662
  path,
5662
5663
  fragment_order,
5663
5664
  fragment_key,
@@ -5671,7 +5672,7 @@ class UsageCacheRepository {
5671
5672
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
5672
5673
  `);
5673
5674
  const insertInteractionStatement = this.database.prepare(`
5674
- INSERT INTO indexed_fragment_interactions (
5675
+ INSERT OR REPLACE INTO indexed_fragment_interactions (
5675
5676
  fragment_id,
5676
5677
  interaction_order,
5677
5678
  interaction_index,
@@ -5768,11 +5769,11 @@ class UsageCacheRepository {
5768
5769
  }
5769
5770
  replaceProjectDetails(details) {
5770
5771
  const insertProjectStatement = this.database.prepare(`
5771
- INSERT INTO projects (label, create_time, session_count, updated_at)
5772
+ INSERT OR REPLACE INTO projects (label, create_time, session_count, updated_at)
5772
5773
  VALUES (?, ?, ?, ?)
5773
5774
  `);
5774
5775
  const insertProjectModelStatement = this.database.prepare(`
5775
- INSERT INTO project_models (project_label, model, model_order)
5776
+ INSERT OR REPLACE INTO project_models (project_label, model, model_order)
5776
5777
  VALUES (?, ?, ?)
5777
5778
  `);
5778
5779
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -5811,16 +5812,11 @@ class UsageCacheRepository {
5811
5812
  }
5812
5813
  initializeSchema() {
5813
5814
  this.database.exec(CACHE_SCHEMA_SQL);
5814
- this.ensureIndexedFilesCacheSignatureColumn();
5815
- this.ensureDailyUsageModelCostColumn();
5816
- this.ensureOverviewCardSubvalueColumn();
5817
- this.ensureProjectCatalogColumns();
5818
- this.ensureInteractionExtraTotalTokenColumns();
5819
5815
  const currentSchemaVersion = this.getCurrentSchemaVersion();
5820
- if (currentSchemaVersion >= CACHE_SCHEMA_VERSION) {
5821
- return;
5816
+ if (this.shouldResetCache(currentSchemaVersion)) {
5817
+ this.resetCacheDatabase();
5818
+ this.database.exec(CACHE_SCHEMA_SQL);
5822
5819
  }
5823
- this.migrateLegacyDataIfNeeded();
5824
5820
  this.setSchemaVersion(CACHE_SCHEMA_VERSION);
5825
5821
  }
5826
5822
  getCurrentSchemaVersion() {
@@ -5831,6 +5827,49 @@ class UsageCacheRepository {
5831
5827
  WHERE id = 1
5832
5828
  `).get()) == null ? void 0 : _a.schema_version) != null ? _b : 0;
5833
5829
  }
5830
+ openDatabase() {
5831
+ const database = openSqliteDatabase(this.databasePath);
5832
+ database.exec("PRAGMA foreign_keys = ON");
5833
+ return database;
5834
+ }
5835
+ shouldResetCache(currentSchemaVersion) {
5836
+ if (this.hasLegacyData() || !this.hasCompatibleNormalizedSchema()) {
5837
+ return true;
5838
+ }
5839
+ if (currentSchemaVersion === CACHE_SCHEMA_VERSION) {
5840
+ return false;
5841
+ }
5842
+ return currentSchemaVersion !== 0 || this.hasCachedData();
5843
+ }
5844
+ hasCompatibleNormalizedSchema() {
5845
+ return this.hasTableColumns("indexed_files", ["cache_signature"]) && this.hasTableColumns("project_catalog_entries", ["platforms_json", "total_tokens"]) && !this.hasTableColumns("project_catalog_entries", ["type"]) && this.hasTableColumns("usage_scope_daily_usage_models", ["cost_usd"]) && this.hasTableColumns("usage_scope_overview_cards", ["subvalue_json"]) && this.hasTableColumns("usage_scope_interactions", ["extra_total_tokens"]) && this.hasTableColumns("indexed_fragment_interactions", ["extra_total_tokens"]);
5846
+ }
5847
+ hasTableColumns(tableName, columnNames) {
5848
+ if (!this.hasTable(tableName)) {
5849
+ return false;
5850
+ }
5851
+ const columns = this.database.prepare(`PRAGMA table_info(${tableName})`).all();
5852
+ return columnNames.every((columnName) => columns.some((column) => column.name === columnName));
5853
+ }
5854
+ hasCachedData() {
5855
+ return ["cache_state", "indexed_files", "project_catalog_entries", "projects", "usage_scopes"].some((tableName) => {
5856
+ var _a, _b;
5857
+ if (!this.hasTable(tableName)) {
5858
+ return false;
5859
+ }
5860
+ return ((_b = (_a = this.database.prepare(`SELECT COUNT(*) AS total FROM ${tableName}`).get()) == null ? void 0 : _a.total) != null ? _b : 0) > 0;
5861
+ });
5862
+ }
5863
+ resetCacheDatabase() {
5864
+ this.database.close();
5865
+ for (const path of [this.databasePath, `${this.databasePath}-shm`, `${this.databasePath}-wal`]) {
5866
+ rmSync(path, {
5867
+ force: true,
5868
+ recursive: false
5869
+ });
5870
+ }
5871
+ this.database = this.openDatabase();
5872
+ }
5834
5873
  setSchemaVersion(version) {
5835
5874
  this.database.prepare(`
5836
5875
  INSERT INTO cache_schema_meta (id, schema_version)
@@ -6012,7 +6051,7 @@ class UsageCacheRepository {
6012
6051
  const payloadHash = (_b = options.payloadHash) != null ? _b : createPayloadHash(JSON.stringify(payload));
6013
6052
  const deleteStatement = this.database.prepare("DELETE FROM project_catalog_entries");
6014
6053
  const insertStatement = this.database.prepare(`
6015
- INSERT INTO project_catalog_entries (label, platforms_json, total_tokens, updated_at)
6054
+ INSERT OR REPLACE INTO project_catalog_entries (label, platforms_json, total_tokens, updated_at)
6016
6055
  VALUES (?, ?, ?, ?)
6017
6056
  `);
6018
6057
  this.database.exec("BEGIN");
@@ -6043,7 +6082,7 @@ class UsageCacheRepository {
6043
6082
  const scopeKey = createUsageScopeKey(options.kind, options.platform, options.projectLabel);
6044
6083
  const payloadHash = createPayloadHash(JSON.stringify(options.usage));
6045
6084
  const insertScopeStatement = this.database.prepare(`
6046
- INSERT INTO usage_scopes (
6085
+ INSERT OR REPLACE INTO usage_scopes (
6047
6086
  scope_key,
6048
6087
  scope_kind,
6049
6088
  project_label,
@@ -6060,7 +6099,7 @@ class UsageCacheRepository {
6060
6099
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6061
6100
  `);
6062
6101
  const insertOverviewCardStatement = this.database.prepare(`
6063
- INSERT INTO usage_scope_overview_cards (
6102
+ INSERT OR REPLACE INTO usage_scope_overview_cards (
6064
6103
  scope_key,
6065
6104
  position,
6066
6105
  icon,
@@ -6074,7 +6113,7 @@ class UsageCacheRepository {
6074
6113
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
6075
6114
  `);
6076
6115
  const insertTokenRowStatement = this.database.prepare(`
6077
- INSERT INTO usage_scope_token_rows (
6116
+ INSERT OR REPLACE INTO usage_scope_token_rows (
6078
6117
  scope_key,
6079
6118
  bucket,
6080
6119
  row_order,
@@ -6092,7 +6131,7 @@ class UsageCacheRepository {
6092
6131
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6093
6132
  `);
6094
6133
  const insertTokenRowModelStatement = this.database.prepare(`
6095
- INSERT INTO usage_scope_token_row_models (
6134
+ INSERT OR REPLACE INTO usage_scope_token_row_models (
6096
6135
  scope_key,
6097
6136
  bucket,
6098
6137
  row_id,
@@ -6102,7 +6141,7 @@ class UsageCacheRepository {
6102
6141
  VALUES (?, ?, ?, ?, ?)
6103
6142
  `);
6104
6143
  const insertTokenRowProjectStatement = this.database.prepare(`
6105
- INSERT INTO usage_scope_token_row_projects (
6144
+ INSERT OR REPLACE INTO usage_scope_token_row_projects (
6106
6145
  scope_key,
6107
6146
  bucket,
6108
6147
  row_id,
@@ -6112,7 +6151,7 @@ class UsageCacheRepository {
6112
6151
  VALUES (?, ?, ?, ?, ?)
6113
6152
  `);
6114
6153
  const insertDailyUsageStatement = this.database.prepare(`
6115
- INSERT INTO usage_scope_daily_usage (
6154
+ INSERT OR REPLACE INTO usage_scope_daily_usage (
6116
6155
  scope_key,
6117
6156
  row_order,
6118
6157
  date,
@@ -6126,7 +6165,7 @@ class UsageCacheRepository {
6126
6165
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
6127
6166
  `);
6128
6167
  const insertDailyUsageModelStatement = this.database.prepare(`
6129
- INSERT INTO usage_scope_daily_usage_models (
6168
+ INSERT OR REPLACE INTO usage_scope_daily_usage_models (
6130
6169
  scope_key,
6131
6170
  date,
6132
6171
  model,
@@ -6142,7 +6181,7 @@ class UsageCacheRepository {
6142
6181
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6143
6182
  `);
6144
6183
  const insertMonthlyModelStatement = this.database.prepare(`
6145
- INSERT INTO usage_scope_monthly_model_usage (
6184
+ INSERT OR REPLACE INTO usage_scope_monthly_model_usage (
6146
6185
  scope_key,
6147
6186
  row_order,
6148
6187
  month,
@@ -6152,7 +6191,7 @@ class UsageCacheRepository {
6152
6191
  VALUES (?, ?, ?, ?, ?)
6153
6192
  `);
6154
6193
  const insertProjectUsageStatement = this.database.prepare(`
6155
- INSERT INTO usage_scope_project_usage (
6194
+ INSERT OR REPLACE INTO usage_scope_project_usage (
6156
6195
  scope_key,
6157
6196
  row_order,
6158
6197
  label,
@@ -6168,7 +6207,7 @@ class UsageCacheRepository {
6168
6207
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6169
6208
  `);
6170
6209
  const insertSessionStatement = this.database.prepare(`
6171
- INSERT INTO usage_scope_sessions (
6210
+ INSERT OR REPLACE INTO usage_scope_sessions (
6172
6211
  scope_key,
6173
6212
  session_key,
6174
6213
  session_order,
@@ -6195,7 +6234,7 @@ class UsageCacheRepository {
6195
6234
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6196
6235
  `);
6197
6236
  const insertSessionModelStatement = this.database.prepare(`
6198
- INSERT INTO usage_scope_session_models (
6237
+ INSERT OR REPLACE INTO usage_scope_session_models (
6199
6238
  scope_key,
6200
6239
  session_key,
6201
6240
  model,
@@ -6204,7 +6243,7 @@ class UsageCacheRepository {
6204
6243
  VALUES (?, ?, ?, ?)
6205
6244
  `);
6206
6245
  const insertInteractionStatement = this.database.prepare(`
6207
- INSERT INTO usage_scope_interactions (
6246
+ INSERT OR REPLACE INTO usage_scope_interactions (
6208
6247
  scope_key,
6209
6248
  session_key,
6210
6249
  interaction_order,
@@ -11932,166 +11971,166 @@ const plugins = [
11932
11971
  ];
11933
11972
 
11934
11973
  const assets = {
11935
- "/logo.svg": {
11936
- "type": "image/svg+xml",
11937
- "etag": "\"1550-fwYFdULdJ83Qp0FjnnX31iQz9oI\"",
11938
- "mtime": "2026-05-26T08:31:48.218Z",
11939
- "size": 5456,
11940
- "path": "../public/logo.svg"
11974
+ "/favicon.ico": {
11975
+ "type": "image/vnd.microsoft.icon",
11976
+ "etag": "\"1083e-LfyFZ+1JmdianDqe/sQN2Ou0IzQ\"",
11977
+ "mtime": "2026-05-26T09:20:13.950Z",
11978
+ "size": 67646,
11979
+ "path": "../public/favicon.ico"
11941
11980
  },
11942
11981
  "/robots.txt": {
11943
11982
  "type": "text/plain; charset=utf-8",
11944
11983
  "etag": "\"18-j8OIsL9qGDmNZ+lHhp2tyH4XtaE\"",
11945
- "mtime": "2026-05-26T08:31:48.218Z",
11984
+ "mtime": "2026-05-26T09:20:13.949Z",
11946
11985
  "size": 24,
11947
11986
  "path": "../public/robots.txt"
11948
11987
  },
11949
- "/_nuxt/37OOe3RF.js": {
11950
- "type": "text/javascript; charset=utf-8",
11951
- "etag": "\"433-9g1fS7jC4SfhMOz/zYtzEkjj3l4\"",
11952
- "mtime": "2026-05-26T08:31:48.215Z",
11953
- "size": 1075,
11954
- "path": "../public/_nuxt/37OOe3RF.js"
11955
- },
11956
- "/favicon.ico": {
11957
- "type": "image/vnd.microsoft.icon",
11958
- "etag": "\"1083e-LfyFZ+1JmdianDqe/sQN2Ou0IzQ\"",
11959
- "mtime": "2026-05-26T08:31:48.218Z",
11960
- "size": 67646,
11961
- "path": "../public/favicon.ico"
11962
- },
11963
11988
  "/_nuxt/65Ayv2XK.js": {
11964
11989
  "type": "text/javascript; charset=utf-8",
11965
11990
  "etag": "\"bb0d-ldbgmGlpc1qx4bYEx4cXkSFSCg8\"",
11966
- "mtime": "2026-05-26T08:31:48.215Z",
11991
+ "mtime": "2026-05-26T09:20:13.946Z",
11967
11992
  "size": 47885,
11968
11993
  "path": "../public/_nuxt/65Ayv2XK.js"
11969
11994
  },
11970
11995
  "/_nuxt/BOWwkrCY.js": {
11971
11996
  "type": "text/javascript; charset=utf-8",
11972
11997
  "etag": "\"540a-Q/6WhDpXkujbyVqTxKp+MDIjyN8\"",
11973
- "mtime": "2026-05-26T08:31:48.215Z",
11998
+ "mtime": "2026-05-26T09:20:13.946Z",
11974
11999
  "size": 21514,
11975
12000
  "path": "../public/_nuxt/BOWwkrCY.js"
11976
12001
  },
11977
12002
  "/_nuxt/D7qEPtpx.js": {
11978
12003
  "type": "text/javascript; charset=utf-8",
11979
12004
  "etag": "\"eb4-cYfHtGVwvBnjUla1c7r6p8WQ+fU\"",
11980
- "mtime": "2026-05-26T08:31:48.215Z",
12005
+ "mtime": "2026-05-26T09:20:13.947Z",
11981
12006
  "size": 3764,
11982
12007
  "path": "../public/_nuxt/D7qEPtpx.js"
11983
12008
  },
11984
- "/_nuxt/D9-Yw1TR.js": {
11985
- "type": "text/javascript; charset=utf-8",
11986
- "etag": "\"42dc-z2VCBVgr0YDv874MuLF5LmD+w6g\"",
11987
- "mtime": "2026-05-26T08:31:48.215Z",
11988
- "size": 17116,
11989
- "path": "../public/_nuxt/D9-Yw1TR.js"
11990
- },
11991
- "/_nuxt/DF2WsXH3.js": {
11992
- "type": "text/javascript; charset=utf-8",
11993
- "etag": "\"101-2rfNy5z/IaUQM5ONN45oT3dPyOw\"",
11994
- "mtime": "2026-05-26T08:31:48.215Z",
11995
- "size": 257,
11996
- "path": "../public/_nuxt/DF2WsXH3.js"
12009
+ "/logo.svg": {
12010
+ "type": "image/svg+xml",
12011
+ "etag": "\"1550-fwYFdULdJ83Qp0FjnnX31iQz9oI\"",
12012
+ "mtime": "2026-05-26T09:20:13.949Z",
12013
+ "size": 5456,
12014
+ "path": "../public/logo.svg"
11997
12015
  },
11998
12016
  "/_nuxt/C0GhHHgI.js": {
11999
12017
  "type": "text/javascript; charset=utf-8",
12000
12018
  "etag": "\"cf91-HNazofOinHCfSBf403LLacaEnfc\"",
12001
- "mtime": "2026-05-26T08:31:48.215Z",
12019
+ "mtime": "2026-05-26T09:20:13.947Z",
12002
12020
  "size": 53137,
12003
12021
  "path": "../public/_nuxt/C0GhHHgI.js"
12004
12022
  },
12005
12023
  "/_nuxt/DXWxIyGU.js": {
12006
12024
  "type": "text/javascript; charset=utf-8",
12007
12025
  "etag": "\"d7b-TUo4s2vJwQ7SvlmJq8Lc5JpszPo\"",
12008
- "mtime": "2026-05-26T08:31:48.216Z",
12026
+ "mtime": "2026-05-26T09:20:13.947Z",
12009
12027
  "size": 3451,
12010
12028
  "path": "../public/_nuxt/DXWxIyGU.js"
12011
12029
  },
12012
12030
  "/_nuxt/De8DvPWL.js": {
12013
12031
  "type": "text/javascript; charset=utf-8",
12014
12032
  "etag": "\"14f9-ru/D4lCOWqCP3lvQM3EWGPMYRaw\"",
12015
- "mtime": "2026-05-26T08:31:48.215Z",
12033
+ "mtime": "2026-05-26T09:20:13.947Z",
12016
12034
  "size": 5369,
12017
12035
  "path": "../public/_nuxt/De8DvPWL.js"
12018
12036
  },
12019
12037
  "/_nuxt/DKaPq50Z.js": {
12020
12038
  "type": "text/javascript; charset=utf-8",
12021
12039
  "etag": "\"f34c-URgC7Dz0Xf+JUUuL4yo1mSHnYmQ\"",
12022
- "mtime": "2026-05-26T08:31:48.216Z",
12040
+ "mtime": "2026-05-26T09:20:13.947Z",
12023
12041
  "size": 62284,
12024
12042
  "path": "../public/_nuxt/DKaPq50Z.js"
12025
12043
  },
12026
12044
  "/_nuxt/DxvuOJRP.js": {
12027
12045
  "type": "text/javascript; charset=utf-8",
12028
12046
  "etag": "\"10890-8PgC64ZUxoVro0//XJbLva3lqK0\"",
12029
- "mtime": "2026-05-26T08:31:48.216Z",
12047
+ "mtime": "2026-05-26T09:20:13.947Z",
12030
12048
  "size": 67728,
12031
12049
  "path": "../public/_nuxt/DxvuOJRP.js"
12032
12050
  },
12033
- "/_nuxt/DgMMKsPE.js": {
12051
+ "/_nuxt/DF2WsXH3.js": {
12034
12052
  "type": "text/javascript; charset=utf-8",
12035
- "etag": "\"35763-ZIXCcb7yuHkNvDqXH2EEhwlcyV4\"",
12036
- "mtime": "2026-05-26T08:31:48.216Z",
12037
- "size": 218979,
12038
- "path": "../public/_nuxt/DgMMKsPE.js"
12053
+ "etag": "\"101-2rfNy5z/IaUQM5ONN45oT3dPyOw\"",
12054
+ "mtime": "2026-05-26T09:20:13.947Z",
12055
+ "size": 257,
12056
+ "path": "../public/_nuxt/DF2WsXH3.js"
12039
12057
  },
12040
12058
  "/_nuxt/Jp5cgQZi.js": {
12041
12059
  "type": "text/javascript; charset=utf-8",
12042
12060
  "etag": "\"3c6da-89AEgPN5OI/3SCYBdFqSxRLSihE\"",
12043
- "mtime": "2026-05-26T08:31:48.216Z",
12061
+ "mtime": "2026-05-26T09:20:13.947Z",
12044
12062
  "size": 247514,
12045
12063
  "path": "../public/_nuxt/Jp5cgQZi.js"
12046
12064
  },
12047
- "/_nuxt/error-404.CFBEg71j.css": {
12048
- "type": "text/css; charset=utf-8",
12049
- "etag": "\"97e-GvhaEAryQvrSXyDcP4RiHXzYb5o\"",
12050
- "mtime": "2026-05-26T08:31:48.216Z",
12051
- "size": 2430,
12052
- "path": "../public/_nuxt/error-404.CFBEg71j.css"
12053
- },
12054
- "/_nuxt/error-500.BqCnH31G.css": {
12065
+ "/_nuxt/entry.DnkKc-6G.css": {
12055
12066
  "type": "text/css; charset=utf-8",
12056
- "etag": "\"773-Tpf6lA6A2FEDtjLyWUXKolBZ3hM\"",
12057
- "mtime": "2026-05-26T08:31:48.216Z",
12058
- "size": 1907,
12059
- "path": "../public/_nuxt/error-500.BqCnH31G.css"
12067
+ "etag": "\"1d8a6-KK9a3JMzAwbSGw5SnlSiODNKxHg\"",
12068
+ "mtime": "2026-05-26T09:20:13.947Z",
12069
+ "size": 120998,
12070
+ "path": "../public/_nuxt/entry.DnkKc-6G.css"
12060
12071
  },
12061
- "/_nuxt/qXgLTL_3.js": {
12072
+ "/_nuxt/D9-Yw1TR.js": {
12062
12073
  "type": "text/javascript; charset=utf-8",
12063
- "etag": "\"993e-F6dGXZ77Rf6Afn6RLLvwifZFe5Q\"",
12064
- "mtime": "2026-05-26T08:31:48.216Z",
12065
- "size": 39230,
12066
- "path": "../public/_nuxt/qXgLTL_3.js"
12074
+ "etag": "\"42dc-z2VCBVgr0YDv874MuLF5LmD+w6g\"",
12075
+ "mtime": "2026-05-26T09:20:13.947Z",
12076
+ "size": 17116,
12077
+ "path": "../public/_nuxt/D9-Yw1TR.js"
12067
12078
  },
12068
12079
  "/_nuxt/y6mAKUDU.js": {
12069
12080
  "type": "text/javascript; charset=utf-8",
12070
12081
  "etag": "\"2c57-7lVqV+qTY/Dqb4M0PdxYAItocQw\"",
12071
- "mtime": "2026-05-26T08:31:48.216Z",
12082
+ "mtime": "2026-05-26T09:20:13.948Z",
12072
12083
  "size": 11351,
12073
12084
  "path": "../public/_nuxt/y6mAKUDU.js"
12074
12085
  },
12086
+ "/_nuxt/error-500.BqCnH31G.css": {
12087
+ "type": "text/css; charset=utf-8",
12088
+ "etag": "\"773-Tpf6lA6A2FEDtjLyWUXKolBZ3hM\"",
12089
+ "mtime": "2026-05-26T09:20:13.948Z",
12090
+ "size": 1907,
12091
+ "path": "../public/_nuxt/error-500.BqCnH31G.css"
12092
+ },
12075
12093
  "/_nuxt/builds/latest.json": {
12076
12094
  "type": "application/json",
12077
- "etag": "\"47-yneWhd0H1nYqEdMbDKqzhQJ6sxE\"",
12078
- "mtime": "2026-05-26T08:31:48.213Z",
12095
+ "etag": "\"47-CJGTH5V2PgEnTbyyZ4uy2lsmACw\"",
12096
+ "mtime": "2026-05-26T09:20:13.944Z",
12079
12097
  "size": 71,
12080
12098
  "path": "../public/_nuxt/builds/latest.json"
12081
12099
  },
12082
- "/_nuxt/builds/meta/7ce9c611-6071-4cbd-8926-1e53d9ef21bd.json": {
12100
+ "/_nuxt/builds/meta/34b12f78-e5b7-490f-99ba-b4a8ab41b914.json": {
12083
12101
  "type": "application/json",
12084
- "etag": "\"58-ozcqeghbP4BbYZVRtP6bwTCHhN8\"",
12085
- "mtime": "2026-05-26T08:31:48.211Z",
12102
+ "etag": "\"58-iY4/Az2+aPYQew2Wa/IxNv6uE3Q\"",
12103
+ "mtime": "2026-05-26T09:20:13.942Z",
12086
12104
  "size": 88,
12087
- "path": "../public/_nuxt/builds/meta/7ce9c611-6071-4cbd-8926-1e53d9ef21bd.json"
12105
+ "path": "../public/_nuxt/builds/meta/34b12f78-e5b7-490f-99ba-b4a8ab41b914.json"
12088
12106
  },
12089
- "/_nuxt/entry.DnkKc-6G.css": {
12107
+ "/_nuxt/error-404.CFBEg71j.css": {
12090
12108
  "type": "text/css; charset=utf-8",
12091
- "etag": "\"1d8a6-KK9a3JMzAwbSGw5SnlSiODNKxHg\"",
12092
- "mtime": "2026-05-26T08:31:48.216Z",
12093
- "size": 120998,
12094
- "path": "../public/_nuxt/entry.DnkKc-6G.css"
12109
+ "etag": "\"97e-GvhaEAryQvrSXyDcP4RiHXzYb5o\"",
12110
+ "mtime": "2026-05-26T09:20:13.947Z",
12111
+ "size": 2430,
12112
+ "path": "../public/_nuxt/error-404.CFBEg71j.css"
12113
+ },
12114
+ "/_nuxt/37OOe3RF.js": {
12115
+ "type": "text/javascript; charset=utf-8",
12116
+ "etag": "\"433-9g1fS7jC4SfhMOz/zYtzEkjj3l4\"",
12117
+ "mtime": "2026-05-26T09:20:13.946Z",
12118
+ "size": 1075,
12119
+ "path": "../public/_nuxt/37OOe3RF.js"
12120
+ },
12121
+ "/_nuxt/DgMMKsPE.js": {
12122
+ "type": "text/javascript; charset=utf-8",
12123
+ "etag": "\"35763-ZIXCcb7yuHkNvDqXH2EEhwlcyV4\"",
12124
+ "mtime": "2026-05-26T09:20:13.947Z",
12125
+ "size": 218979,
12126
+ "path": "../public/_nuxt/DgMMKsPE.js"
12127
+ },
12128
+ "/_nuxt/qXgLTL_3.js": {
12129
+ "type": "text/javascript; charset=utf-8",
12130
+ "etag": "\"993e-F6dGXZ77Rf6Afn6RLLvwifZFe5Q\"",
12131
+ "mtime": "2026-05-26T09:20:13.948Z",
12132
+ "size": 39230,
12133
+ "path": "../public/_nuxt/qXgLTL_3.js"
12095
12134
  }
12096
12135
  };
12097
12136
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "usage-board-prod",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "usage-board",
3
3
  "type": "module",
4
- "version": "4.0.0",
4
+ "version": "4.0.1",
5
5
  "packageManager": "pnpm@10.33.0",
6
6
  "description": "An all-in-one dashboard to quickly analyze token usage from local json files",
7
7
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"id":"7ce9c611-6071-4cbd-8926-1e53d9ef21bd","timestamp":1779784299130,"prerendered":[]}