ccgauge 0.3.0 → 0.4.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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +28 -28
- package/.next/standalone/.next/app-path-routes-manifest.json +5 -5
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/blocks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/export/usage/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/scan/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/usage/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/usage/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +5 -5
- package/.next/standalone/.next/server/chunks/520.js +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +3 -3
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/css/c34cd36ce5fc39e2.css +3 -0
- package/.next/standalone/package.json +20 -2
- package/CHANGELOG.md +77 -0
- package/README.md +198 -4
- package/README.zh-CN.md +194 -4
- package/bin/cli.mjs +41 -1
- package/dist/mcp/server.mjs +23580 -0
- package/package.json +20 -2
- package/.next/standalone/.next/static/css/2e5f36bcdf442844.css +0 -3
- package/.next/standalone/node_modules/semver/classes/comparator.js +0 -143
- package/.next/standalone/node_modules/semver/classes/range.js +0 -557
- package/.next/standalone/node_modules/semver/classes/semver.js +0 -333
- package/.next/standalone/node_modules/semver/functions/cmp.js +0 -54
- package/.next/standalone/node_modules/semver/functions/coerce.js +0 -62
- package/.next/standalone/node_modules/semver/functions/compare.js +0 -7
- package/.next/standalone/node_modules/semver/functions/eq.js +0 -5
- package/.next/standalone/node_modules/semver/functions/gt.js +0 -5
- package/.next/standalone/node_modules/semver/functions/gte.js +0 -5
- package/.next/standalone/node_modules/semver/functions/lt.js +0 -5
- package/.next/standalone/node_modules/semver/functions/lte.js +0 -5
- package/.next/standalone/node_modules/semver/functions/neq.js +0 -5
- package/.next/standalone/node_modules/semver/functions/parse.js +0 -18
- package/.next/standalone/node_modules/semver/functions/satisfies.js +0 -12
- package/.next/standalone/node_modules/semver/internal/constants.js +0 -37
- package/.next/standalone/node_modules/semver/internal/debug.js +0 -11
- package/.next/standalone/node_modules/semver/internal/identifiers.js +0 -29
- package/.next/standalone/node_modules/semver/internal/lrucache.js +0 -42
- package/.next/standalone/node_modules/semver/internal/parse-options.js +0 -17
- package/.next/standalone/node_modules/semver/internal/re.js +0 -223
- package/.next/standalone/node_modules/semver/package.json +0 -78
- /package/.next/standalone/.next/static/{LW65XPeaTassGgkhAhxTb → w_l54xHgbhALYXmZcmUxC}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{LW65XPeaTassGgkhAhxTb → w_l54xHgbhALYXmZcmUxC}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/settings/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"7152":{"*":{"id":"75268","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"39472","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"82140","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"60505","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"17290","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"32560","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"88253","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"95546","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"99955","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"72267","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"24919","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"28607","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"77731","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"3991","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"88267","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"48507","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/globals.css":{"id":41290,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/nav.tsx":{"id":57581,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/providers.tsx":{"id":12112,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error.tsx":{"id":49567,"name":"*","chunks":["454","static/chunks/454-d0e7d0fa6f643c41.js","39","static/chunks/app/error-89ee9e078058915d.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/token-stack-chart.tsx":{"id":38059,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/block-progress.tsx":{"id":25763,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/model-bar-chart.tsx":{"id":8608,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/language-switcher.tsx":{"id":21264,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/pricing-table.tsx":{"id":8783,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/scan-refresh.tsx":{"id":91107,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/theme-switcher.tsx":{"id":44703,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/granularity-picker.tsx":{"id":16633,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/model-filter.tsx":{"id":8336,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/project-filter.tsx":{"id":14920,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/range-picker.tsx":{"id":7152,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/usage-table.tsx":{"id":25577,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/layout":[{"inlined":false,"path":"static/css/2e5f36bcdf442844.css"}],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/loading":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/page":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/settings/page":[]},"rscModuleMapping":{"7152":{"*":{"id":"58258","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"36666","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"60798","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"87639","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"66664","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"21966","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"49863","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"98392","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"21092","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"88622","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"89605","name":"*","chunks":[],"async":false}},"41290":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"29509","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"41697","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"65169","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"64285","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"84701","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/settings/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"7152":{"*":{"id":"75268","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"39472","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"82140","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"60505","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"17290","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"32560","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"88253","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"95546","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"99955","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"72267","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"24919","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"28607","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"77731","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"3991","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"88267","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"48507","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/globals.css":{"id":41290,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/nav.tsx":{"id":57581,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/providers.tsx":{"id":12112,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error.tsx":{"id":49567,"name":"*","chunks":["454","static/chunks/454-d0e7d0fa6f643c41.js","39","static/chunks/app/error-89ee9e078058915d.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/token-stack-chart.tsx":{"id":38059,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/block-progress.tsx":{"id":25763,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/model-bar-chart.tsx":{"id":8608,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/language-switcher.tsx":{"id":21264,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/pricing-table.tsx":{"id":8783,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/scan-refresh.tsx":{"id":91107,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/theme-switcher.tsx":{"id":44703,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","454","static/chunks/454-d0e7d0fa6f643c41.js","662","static/chunks/app/settings/page-334168b522eac1b1.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/granularity-picker.tsx":{"id":16633,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/model-filter.tsx":{"id":8336,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/project-filter.tsx":{"id":14920,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/range-picker.tsx":{"id":7152,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/usage-table.tsx":{"id":25577,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/layout":[{"inlined":false,"path":"static/css/c34cd36ce5fc39e2.css"}],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/loading":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/page":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/settings/page":[]},"rscModuleMapping":{"7152":{"*":{"id":"58258","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"36666","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"60798","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"87639","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"66664","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"21966","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"49863","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"98392","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"21092","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"88622","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"89605","name":"*","chunks":[],"async":false}},"41290":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"29509","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"41697","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"65169","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"64285","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"84701","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/usage/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"7152":{"*":{"id":"75268","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"39472","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"82140","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"60505","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"17290","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"32560","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"88253","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"95546","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"99955","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"72267","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"24919","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"28607","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"77731","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"3991","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"88267","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"48507","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/globals.css":{"id":41290,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/nav.tsx":{"id":57581,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/providers.tsx":{"id":12112,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error.tsx":{"id":49567,"name":"*","chunks":["454","static/chunks/454-d0e7d0fa6f643c41.js","39","static/chunks/app/error-89ee9e078058915d.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/token-stack-chart.tsx":{"id":38059,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/block-progress.tsx":{"id":25763,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/model-bar-chart.tsx":{"id":8608,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/language-switcher.tsx":{"id":21264,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/pricing-table.tsx":{"id":8783,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/scan-refresh.tsx":{"id":91107,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/theme-switcher.tsx":{"id":44703,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/granularity-picker.tsx":{"id":16633,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/model-filter.tsx":{"id":8336,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/project-filter.tsx":{"id":14920,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/range-picker.tsx":{"id":7152,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/usage-table.tsx":{"id":25577,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false}},"entryCSSFiles":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/layout":[{"inlined":false,"path":"static/css/2e5f36bcdf442844.css"}],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/loading":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/page":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/usage/page":[]},"rscModuleMapping":{"7152":{"*":{"id":"58258","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"36666","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"60798","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"87639","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"66664","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"21966","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"49863","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"98392","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"21092","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"88622","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"89605","name":"*","chunks":[],"async":false}},"41290":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"29509","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"41697","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"65169","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"64285","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"84701","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/usage/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"7152":{"*":{"id":"75268","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"39472","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"82140","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"60505","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"17290","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"32560","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"88253","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"95546","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"99955","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"72267","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"24919","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"28607","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"77731","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"3991","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"88267","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"48507","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":57150,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-page.js":{"id":81959,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/client-segment.js":{"id":17989,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":63886,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":15278,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":98924,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":24431,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":80622,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/globals.css":{"id":41290,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/nav.tsx":{"id":57581,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/providers.tsx":{"id":12112,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","619","static/chunks/619-f072ac750404f9da.js","454","static/chunks/454-d0e7d0fa6f643c41.js","177","static/chunks/app/layout-a6e30ba3a7f39737.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error.tsx":{"id":49567,"name":"*","chunks":["454","static/chunks/454-d0e7d0fa6f643c41.js","39","static/chunks/app/error-89ee9e078058915d.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/token-stack-chart.tsx":{"id":38059,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/node_modules/next/dist/esm/client/app-dir/link.js":{"id":52619,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/block-progress.tsx":{"id":25763,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/charts/model-bar-chart.tsx":{"id":8608,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","974","static/chunks/app/page-9347dfa20dabb24b.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/language-switcher.tsx":{"id":21264,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/pricing-table.tsx":{"id":8783,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/scan-refresh.tsx":{"id":91107,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/theme-switcher.tsx":{"id":44703,"name":"*","chunks":[],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/granularity-picker.tsx":{"id":16633,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/model-filter.tsx":{"id":8336,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/project-filter.tsx":{"id":14920,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/range-picker.tsx":{"id":7152,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false},"/Users/zuopeng.cheng/personal/workspace/ccgauge/components/usage-table.tsx":{"id":25577,"name":"*","chunks":["760","static/chunks/760-24bf5ac5820b9230.js","930","static/chunks/930-3035d0b294080d0b.js","454","static/chunks/454-d0e7d0fa6f643c41.js","430","static/chunks/app/usage/page-7789fec27778df9a.js"],"async":false}},"entryCSSFiles":{"/Users/zuopeng.cheng/personal/workspace/ccgauge/":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/layout":[{"inlined":false,"path":"static/css/c34cd36ce5fc39e2.css"}],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/error":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/loading":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/page":[],"/Users/zuopeng.cheng/personal/workspace/ccgauge/app/usage/page":[]},"rscModuleMapping":{"7152":{"*":{"id":"58258","name":"*","chunks":[],"async":false}},"8336":{"*":{"id":"36666","name":"*","chunks":[],"async":false}},"8608":{"*":{"id":"60798","name":"*","chunks":[],"async":false}},"8783":{"*":{"id":"87639","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}},"12112":{"*":{"id":"66664","name":"*","chunks":[],"async":false}},"14920":{"*":{"id":"21966","name":"*","chunks":[],"async":false}},"15278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"16633":{"*":{"id":"49863","name":"*","chunks":[],"async":false}},"17989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"21264":{"*":{"id":"98392","name":"*","chunks":[],"async":false}},"24431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"25577":{"*":{"id":"21092","name":"*","chunks":[],"async":false}},"25763":{"*":{"id":"88622","name":"*","chunks":[],"async":false}},"38059":{"*":{"id":"89605","name":"*","chunks":[],"async":false}},"41290":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"44703":{"*":{"id":"29509","name":"*","chunks":[],"async":false}},"49567":{"*":{"id":"41697","name":"*","chunks":[],"async":false}},"52619":{"*":{"id":"65169","name":"*","chunks":[],"async":false}},"57150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"57581":{"*":{"id":"64285","name":"*","chunks":[],"async":false}},"63886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"80622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"81959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"91107":{"*":{"id":"84701","name":"*","chunks":[],"async":false}},"98924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"/_not-found/page": "app/_not-found/page.js",
|
|
3
3
|
"/api/blocks/route": "app/api/blocks/route.js",
|
|
4
|
+
"/api/pricing/route": "app/api/pricing/route.js",
|
|
4
5
|
"/api/projects/route": "app/api/projects/route.js",
|
|
5
6
|
"/api/scan/route": "app/api/scan/route.js",
|
|
6
|
-
"/api/pricing/route": "app/api/pricing/route.js",
|
|
7
7
|
"/api/sessions/route": "app/api/sessions/route.js",
|
|
8
8
|
"/api/usage/route": "app/api/usage/route.js",
|
|
9
9
|
"/api/export/usage/route": "app/api/export/usage/route.js",
|
|
10
|
-
"/models/page": "app/models/page.js",
|
|
11
10
|
"/projects/[id]/page": "app/projects/[id]/page.js",
|
|
12
|
-
"/page": "app/page.js",
|
|
13
11
|
"/sessions/page": "app/sessions/page.js",
|
|
12
|
+
"/models/page": "app/models/page.js",
|
|
14
13
|
"/projects/page": "app/projects/page.js",
|
|
14
|
+
"/sessions/[id]/page": "app/sessions/[id]/page.js",
|
|
15
|
+
"/page": "app/page.js",
|
|
15
16
|
"/settings/page": "app/settings/page.js",
|
|
16
|
-
"/usage/page": "app/usage/page.js"
|
|
17
|
-
"/sessions/[id]/page": "app/sessions/[id]/page.js"
|
|
17
|
+
"/usage/page": "app/usage/page.js"
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=520,exports.ids=[520],exports.modules={27520:(a,b,c)=>{c.d(b,{So:()=>q,mo:()=>s,TF:()=>r});var d=c(60704),e=c(73024),f=c(76760),g=c.n(f),h=c(48161),i=c.n(h);function j(){return g().join(process.env.CCGAUGE_STATE_DIR?process.env.CCGAUGE_STATE_DIR:g().join(i().homedir(),".ccgauge"),"cache","index-v2.json")}async function k(){let a=j();try{let b=await e.promises.readFile(a,"utf8"),c=JSON.parse(b);if(2!==c.schemaVersion||!Array.isArray(c.files))return null;return c}catch{return null}}async function l(a){let b=j(),c=g().dirname(b);await e.promises.mkdir(c,{recursive:!0});let d={schemaVersion:2,savedAt:a.savedAt,files:a.files},f=`${b}.tmp-${process.pid}`;await e.promises.writeFile(f,JSON.stringify(d)),await e.promises.rename(f,b)}class m{init(){return this.initPromise||(this.initPromise=this.doInit()),this.initPromise}async doInit(){let a=Date.now();this.isIndexing=!0,this.lastWorkStart=a;try{await this.detectProviderDirs();let b=await k();this.loadedFromDisk=null!==b;let c=new Map;if(b)for(let a of b.files)c.set(a.filePath,a);await this.fullScan(c),this.rebuildSnapshotNow(),this.indexDurationMs=Date.now()-a,this.lastIndexedAt=new Date().toISOString(),this.syncWatchersToDirs(),this.setupPolling(),this.schedulePersist()}finally{this.isIndexing=!1}}async detectProviderDirs(){let a=new Map,b=[];for(let c of(0,d.R0)())for(let d of c.getDirs())await n(d)&&!a.has(d)&&(a.set(d,c),b.push(d));let c=[],e=[];for(let b of a.keys())this.dirToProvider.has(b)||c.push(b);for(let b of this.dirToProvider.keys())a.has(b)||e.push(b);return this.dirToProvider=a,this.existingDirs=b,{added:c,removed:e}}async fullScan(a){let b=[];for(let[a,c]of this.dirToProvider)for(let d of(await o(a,c)))b.push({file:d,provider:c});let c=new Set(b.map(a=>a.file));for(let d of(await Promise.all(b.map(async({file:b,provider:c})=>{try{let d=await e.promises.stat(b),f=a.get(b);if(f&&f.source===c.id&&f.parserVersion===c.parserVersion&&f.mtimeMs===d.mtimeMs&&f.size===d.size)return void this.files.set(b,{source:c.id,parserVersion:c.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:f.assistantRecords,userRecords:f.userRecords,parentLinks:f.parentLinks});let g=await c.parseFile(b);this.files.set(b,{source:c.id,parserVersion:c.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:g.assistant,userRecords:g.user,parentLinks:g.parentLinks})}catch(a){this.recordError(`parse ${b}: ${a.message}`)}})),Array.from(this.files.keys())))c.has(d)||this.files.delete(d)}syncWatchersToDirs(){for(let[a,b]of this.watchers)if(!this.dirToProvider.has(a)){try{b.close()}catch{}this.watchers.delete(a)}for(let[a,b]of this.dirToProvider)if(!this.watchers.has(a))try{let c=(0,e.watch)(a,{recursive:!0},(c,d)=>{if(!d||"string"!=typeof d||!d.endsWith(".jsonl"))return;let e=g().join(a,d);this.scheduleFileReconcile(e,b)});c.on("error",b=>{this.recordError(`watcher ${a}: ${b.message}`)}),this.watchers.set(a,c)}catch(b){this.recordError(`watch ${a}: ${b.message}`)}}setupPolling(){this.pollTimer&&clearInterval(this.pollTimer),this.pollTimer=setInterval(()=>{this.pollOnce().catch(a=>this.recordError(`poll: ${a.message}`))},3e4),this.pollTimer.unref?.()}async pollOnce(){let a=Date.now(),b=await this.detectProviderDirs(),c=b.added.length>0||b.removed.length>0;c&&this.syncWatchersToDirs();let d=[];for(let[a,b]of this.dirToProvider)for(let c of(await o(a,b)))d.push({file:c,provider:b});let f=new Set(d.map(a=>a.file));for(let a of(await Promise.all(d.map(async({file:a,provider:b})=>{try{let d=await e.promises.stat(a),f=this.files.get(a);if(f&&f.mtimeMs===d.mtimeMs&&f.size===d.size)return;let g=await b.parseFile(a);this.files.set(a,{source:b.id,parserVersion:b.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:g.assistant,userRecords:g.user,parentLinks:g.parentLinks}),c=!0}catch(b){this.recordError(`poll-parse ${a}: ${b.message}`)}})),Array.from(this.files.keys())))f.has(a)||(this.files.delete(a),c=!0);c&&(this.lastWorkStart=a,this.scheduleSnapshotRebuild(),this.schedulePersist())}scheduleFileReconcile(a,b){let c=this.fileDebouncers.get(a);c&&clearTimeout(c);let d=setTimeout(()=>{this.fileDebouncers.delete(a),this.reconcileFile(a,b).catch(b=>this.recordError(`reconcile ${a}: ${b.message}`))},200);d.unref?.(),this.fileDebouncers.set(a,d)}async reconcileFile(a,b){let c=Date.now(),d=null;try{d=await e.promises.stat(a)}catch{}if(!d||!d.isFile()){this.files.has(a)&&(this.files.delete(a),this.lastWorkStart=c,this.scheduleSnapshotRebuild(),this.schedulePersist());return}let f=this.files.get(a);if(!f||f.mtimeMs!==d.mtimeMs||f.size!==d.size)try{let e=await b.parseFile(a);this.files.set(a,{source:b.id,parserVersion:b.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:e.assistant,userRecords:e.user,parentLinks:e.parentLinks}),this.lastWorkStart=c,this.scheduleSnapshotRebuild(),this.schedulePersist()}catch(b){this.recordError(`parse ${a}: ${b.message}`)}}scheduleSnapshotRebuild(){this.snapshotRebuildTimer&&clearTimeout(this.snapshotRebuildTimer),this.snapshotRebuildTimer=setTimeout(()=>{this.snapshotRebuildTimer=null,this.rebuildSnapshotNow()},100),this.snapshotRebuildTimer.unref?.()}rebuildSnapshotNow(){let a=Date.now(),b=this.lastWorkStart??a,c=[],d=[],e={},f=0,g={claude:{source:"claude",filesScanned:0,recordsParsed:0,assistantRecords:0,scannedDirs:[]},codex:{source:"codex",filesScanned:0,recordsParsed:0,assistantRecords:0,scannedDirs:[]}};for(let[a,b]of this.dirToProvider)g[b.id].scannedDirs.push(a);for(let a of this.files.values()){for(let[b,f]of(c.push(...a.assistantRecords),d.push(...a.userRecords),a.parentLinks))e[b]=f;f+=a.assistantRecords.length+a.userRecords.length,g[a.source].filesScanned+=1,g[a.source].recordsParsed+=a.assistantRecords.length+a.userRecords.length}let h=(function(a){let b=new Map;for(let c of a){let a=function(a){let b=`${a.source}:`;return a.messageId&&a.requestId?`${b}${a.messageId}::${a.requestId}`:a.messageId?`${b}mid:${a.messageId}`:a.requestId?`${b}req:${a.requestId}`:`${b}uuid:${a.uuid}`}(c),d=b.get(a);if(!d){b.set(a,c);continue}c.timestamp<d.timestamp&&b.set(a,c)}return Array.from(b.values())})(c).sort((a,b)=>a.timestamp.localeCompare(b.timestamp)),i=(function(a){let b=new Set;return a.filter(a=>{let c=a.uuid;return!c||!b.has(c)&&(b.add(c),!0)})})(d).sort((a,b)=>a.timestamp.localeCompare(b.timestamp));for(let a of h)g[a.source].assistantRecords+=1;let j={filesScanned:this.files.size,recordsParsed:f,assistantRecords:h.length,durationMs:Date.now()-b,scannedDirs:this.existingDirs};this.snapshot={records:h,userRecords:i,parentMap:e,stats:j,bySource:Object.values(g)},this.lastWorkStart=null}getSnapshot(){if(!this.snapshot)throw Error("Indexer not initialized — call init() first.");return this.snapshot}async forceRescan(){if(!this.initPromise)return await this.init(),this.snapshot;if(this.rescanPromise)return this.rescanPromise;this.rescanPromise=this.runRescan();try{return await this.rescanPromise}finally{this.rescanPromise=null}}async runRescan(){let a=Date.now();this.isIndexing=!0,this.lastWorkStart=a;try{return this.files.clear(),await this.detectProviderDirs(),await this.fullScan(new Map),this.rebuildSnapshotNow(),this.indexDurationMs=Date.now()-a,this.lastIndexedAt=new Date().toISOString(),this.syncWatchersToDirs(),this.schedulePersist(),this.snapshot}finally{this.isIndexing=!1}}getStatus(){let a=this.snapshot;return{initialized:null!==a,isIndexing:this.isIndexing,lastIndexedAt:this.lastIndexedAt,indexDurationMs:this.indexDurationMs,filesIndexed:this.files.size,recordsIndexed:a?.stats.assistantRecords??0,bySource:a?.bySource??[],watchers:this.watchers.size,errors:this.errors.slice(-20),pendingReconciles:this.fileDebouncers.size,loadedFromDisk:this.loadedFromDisk}}schedulePersist(){this.persistTimer&&clearTimeout(this.persistTimer),this.persistTimer=setTimeout(()=>{this.persistTimer=null;let a=[];for(let[b,c]of this.files)a.push({filePath:b,source:c.source,parserVersion:c.parserVersion,mtimeMs:c.mtimeMs,size:c.size,assistantRecords:c.assistantRecords,userRecords:c.userRecords,parentLinks:c.parentLinks});l({savedAt:new Date().toISOString(),files:a}).catch(a=>this.recordError(`persist: ${a.message}`))},2e3),this.persistTimer.unref?.()}recordError(a){let b=`${new Date().toISOString()} ${function(a){let b=i().homedir();if(!b)return a;let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return a.replace(RegExp(c,"g"),"~")}(a)}`;this.errors.push(b),this.errors.length>40&&this.errors.splice(0,this.errors.length-20),process.env.CCGAUGE_DEBUG&&console.error(`[ccgauge:indexer] ${new Date().toISOString()} ${a}`)}disposeWatchers(){for(let a of this.watchers.values())try{a.close()}catch{}this.watchers.clear()}dispose(){for(let a of(this.disposeWatchers(),this.pollTimer&&clearInterval(this.pollTimer),this.snapshotRebuildTimer&&clearTimeout(this.snapshotRebuildTimer),this.persistTimer&&clearTimeout(this.persistTimer),this.fileDebouncers.values()))clearTimeout(a);this.fileDebouncers.clear()}constructor(){this.files=new Map,this.snapshot=null,this.watchers=new Map,this.pollTimer=null,this.snapshotRebuildTimer=null,this.persistTimer=null,this.fileDebouncers=new Map,this.initPromise=null,this.isIndexing=!1,this.lastIndexedAt=null,this.indexDurationMs=null,this.existingDirs=[],this.dirToProvider=new Map,this.errors=[],this.loadedFromDisk=!1,this.lastWorkStart=null,this.rescanPromise=null}}async function n(a){try{return(await e.promises.stat(a)).isDirectory()}catch{return!1}}async function o(a,b){let c=[];async function d(a,f){let h;if(!(f>8)){try{h=await e.promises.readdir(a,{withFileTypes:!0})}catch{return}for(let e of h){let h=g().join(a,e.name);if(e.isDirectory()){if(b.shouldSkipDir(e.name))continue;await d(h,f+1)}else e.isFile()&&e.name.endsWith(".jsonl")&&c.push(h)}}}return await d(a,0),c}let p=(globalThis.__ccgaugeIndexer||(globalThis.__ccgaugeIndexer=new m),globalThis.__ccgaugeIndexer);async function q(a={}){return a.force?p.forceRescan():(await p.init(),p.getSnapshot())}function r(){return(0,d.R0)().map(a=>({source:a.id,dirs:a.getDirs()}))}function s(){return p.getStatus()}}};
|
|
1
|
+
"use strict";exports.id=520,exports.ids=[520],exports.modules={27520:(a,b,c)=>{c.d(b,{So:()=>r,mo:()=>t,TF:()=>s});var d=c(60704),e=c(73024),f=c(76760),g=c.n(f),h=c(48161),i=c.n(h);let j="default";function k(a){let b=a===j?"index-v2.json":`index-${a}-v2.json`;return g().join(process.env.CCGAUGE_STATE_DIR?process.env.CCGAUGE_STATE_DIR:g().join(i().homedir(),".ccgauge"),"cache",b)}async function l(a=j){let b=k(a);try{let a=await e.promises.readFile(b,"utf8"),c=JSON.parse(a);if(2!==c.schemaVersion||!Array.isArray(c.files))return null;return c}catch{return null}}async function m(a,b=j){let c=k(b),d=g().dirname(c);await e.promises.mkdir(d,{recursive:!0});let f={schemaVersion:2,savedAt:a.savedAt,files:a.files},h=`${c}.tmp-${process.pid}`;await e.promises.writeFile(h,JSON.stringify(f)),await e.promises.rename(h,c)}class n{constructor(a=j){this.files=new Map,this.snapshot=null,this.watchers=new Map,this.pollTimer=null,this.snapshotRebuildTimer=null,this.persistTimer=null,this.fileDebouncers=new Map,this.initPromise=null,this.isIndexing=!1,this.lastIndexedAt=null,this.indexDurationMs=null,this.existingDirs=[],this.dirToProvider=new Map,this.errors=[],this.loadedFromDisk=!1,this.lastWorkStart=null,this.rescanPromise=null,this.cacheName=a}init(){return this.initPromise||(this.initPromise=this.doInit()),this.initPromise}async doInit(){let a=Date.now();this.isIndexing=!0,this.lastWorkStart=a;try{await this.detectProviderDirs();let b=await l(this.cacheName);this.loadedFromDisk=null!==b;let c=new Map;if(b)for(let a of b.files)c.set(a.filePath,a);await this.fullScan(c),this.rebuildSnapshotNow(),this.indexDurationMs=Date.now()-a,this.lastIndexedAt=new Date().toISOString(),this.syncWatchersToDirs(),this.setupPolling(),this.schedulePersist()}finally{this.isIndexing=!1}}async detectProviderDirs(){let a=new Map,b=[];for(let c of(0,d.R0)())for(let d of c.getDirs())await o(d)&&!a.has(d)&&(a.set(d,c),b.push(d));let c=[],e=[];for(let b of a.keys())this.dirToProvider.has(b)||c.push(b);for(let b of this.dirToProvider.keys())a.has(b)||e.push(b);return this.dirToProvider=a,this.existingDirs=b,{added:c,removed:e}}async fullScan(a){let b=[];for(let[a,c]of this.dirToProvider)for(let d of(await p(a,c)))b.push({file:d,provider:c});let c=new Set(b.map(a=>a.file));for(let d of(await Promise.all(b.map(async({file:b,provider:c})=>{try{let d=await e.promises.stat(b),f=a.get(b);if(f&&f.source===c.id&&f.parserVersion===c.parserVersion&&f.mtimeMs===d.mtimeMs&&f.size===d.size)return void this.files.set(b,{source:c.id,parserVersion:c.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:f.assistantRecords,userRecords:f.userRecords,parentLinks:f.parentLinks});let g=await c.parseFile(b);this.files.set(b,{source:c.id,parserVersion:c.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:g.assistant,userRecords:g.user,parentLinks:g.parentLinks})}catch(a){this.recordError(`parse ${b}: ${a.message}`)}})),Array.from(this.files.keys())))c.has(d)||this.files.delete(d)}syncWatchersToDirs(){for(let[a,b]of this.watchers)if(!this.dirToProvider.has(a)){try{b.close()}catch{}this.watchers.delete(a)}for(let[a,b]of this.dirToProvider)if(!this.watchers.has(a))try{let c=(0,e.watch)(a,{recursive:!0},(c,d)=>{if(!d||"string"!=typeof d||!d.endsWith(".jsonl"))return;let e=g().join(a,d);this.scheduleFileReconcile(e,b)});c.on("error",b=>{this.recordError(`watcher ${a}: ${b.message}`)}),this.watchers.set(a,c)}catch(b){this.recordError(`watch ${a}: ${b.message}`)}}setupPolling(){this.pollTimer&&clearInterval(this.pollTimer),this.pollTimer=setInterval(()=>{this.pollOnce().catch(a=>this.recordError(`poll: ${a.message}`))},3e4),this.pollTimer.unref?.()}async pollOnce(){let a=Date.now(),b=await this.detectProviderDirs(),c=b.added.length>0||b.removed.length>0;c&&this.syncWatchersToDirs();let d=[];for(let[a,b]of this.dirToProvider)for(let c of(await p(a,b)))d.push({file:c,provider:b});let f=new Set(d.map(a=>a.file));for(let a of(await Promise.all(d.map(async({file:a,provider:b})=>{try{let d=await e.promises.stat(a),f=this.files.get(a);if(f&&f.mtimeMs===d.mtimeMs&&f.size===d.size)return;let g=await b.parseFile(a);this.files.set(a,{source:b.id,parserVersion:b.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:g.assistant,userRecords:g.user,parentLinks:g.parentLinks}),c=!0}catch(b){this.recordError(`poll-parse ${a}: ${b.message}`)}})),Array.from(this.files.keys())))f.has(a)||(this.files.delete(a),c=!0);c&&(this.lastWorkStart=a,this.scheduleSnapshotRebuild(),this.schedulePersist())}scheduleFileReconcile(a,b){let c=this.fileDebouncers.get(a);c&&clearTimeout(c);let d=setTimeout(()=>{this.fileDebouncers.delete(a),this.reconcileFile(a,b).catch(b=>this.recordError(`reconcile ${a}: ${b.message}`))},200);d.unref?.(),this.fileDebouncers.set(a,d)}async reconcileFile(a,b){let c=Date.now(),d=null;try{d=await e.promises.stat(a)}catch{}if(!d||!d.isFile()){this.files.has(a)&&(this.files.delete(a),this.lastWorkStart=c,this.scheduleSnapshotRebuild(),this.schedulePersist());return}let f=this.files.get(a);if(!f||f.mtimeMs!==d.mtimeMs||f.size!==d.size)try{let e=await b.parseFile(a);this.files.set(a,{source:b.id,parserVersion:b.parserVersion,mtimeMs:d.mtimeMs,size:d.size,assistantRecords:e.assistant,userRecords:e.user,parentLinks:e.parentLinks}),this.lastWorkStart=c,this.scheduleSnapshotRebuild(),this.schedulePersist()}catch(b){this.recordError(`parse ${a}: ${b.message}`)}}scheduleSnapshotRebuild(){this.snapshotRebuildTimer&&clearTimeout(this.snapshotRebuildTimer),this.snapshotRebuildTimer=setTimeout(()=>{this.snapshotRebuildTimer=null,this.rebuildSnapshotNow()},100),this.snapshotRebuildTimer.unref?.()}rebuildSnapshotNow(){let a=Date.now(),b=this.lastWorkStart??a,c=[],d=[],e={},f=0,g={claude:{source:"claude",filesScanned:0,recordsParsed:0,assistantRecords:0,scannedDirs:[]},codex:{source:"codex",filesScanned:0,recordsParsed:0,assistantRecords:0,scannedDirs:[]}};for(let[a,b]of this.dirToProvider)g[b.id].scannedDirs.push(a);for(let a of this.files.values()){for(let[b,f]of(c.push(...a.assistantRecords),d.push(...a.userRecords),a.parentLinks))e[b]=f;f+=a.assistantRecords.length+a.userRecords.length,g[a.source].filesScanned+=1,g[a.source].recordsParsed+=a.assistantRecords.length+a.userRecords.length}let h=(function(a){let b=new Map;for(let c of a){let a=function(a){let b=`${a.source}:`;return a.messageId&&a.requestId?`${b}${a.messageId}::${a.requestId}`:a.messageId?`${b}mid:${a.messageId}`:a.requestId?`${b}req:${a.requestId}`:`${b}uuid:${a.uuid}`}(c),d=b.get(a);if(!d){b.set(a,c);continue}c.timestamp<d.timestamp&&b.set(a,c)}return Array.from(b.values())})(c).sort((a,b)=>a.timestamp.localeCompare(b.timestamp)),i=(function(a){let b=new Set;return a.filter(a=>{let c=a.uuid;return!c||!b.has(c)&&(b.add(c),!0)})})(d).sort((a,b)=>a.timestamp.localeCompare(b.timestamp));for(let a of h)g[a.source].assistantRecords+=1;let j={filesScanned:this.files.size,recordsParsed:f,assistantRecords:h.length,durationMs:Date.now()-b,scannedDirs:this.existingDirs};this.snapshot={records:h,userRecords:i,parentMap:e,stats:j,bySource:Object.values(g)},this.lastWorkStart=null}getSnapshot(){if(!this.snapshot)throw Error("Indexer not initialized — call init() first.");return this.snapshot}async forceRescan(){if(!this.initPromise)return await this.init(),this.snapshot;if(this.rescanPromise)return this.rescanPromise;this.rescanPromise=this.runRescan();try{return await this.rescanPromise}finally{this.rescanPromise=null}}async runRescan(){let a=Date.now();this.isIndexing=!0,this.lastWorkStart=a;try{return this.files.clear(),await this.detectProviderDirs(),await this.fullScan(new Map),this.rebuildSnapshotNow(),this.indexDurationMs=Date.now()-a,this.lastIndexedAt=new Date().toISOString(),this.syncWatchersToDirs(),this.schedulePersist(),this.snapshot}finally{this.isIndexing=!1}}getStatus(){let a=this.snapshot;return{initialized:null!==a,isIndexing:this.isIndexing,lastIndexedAt:this.lastIndexedAt,indexDurationMs:this.indexDurationMs,filesIndexed:this.files.size,recordsIndexed:a?.stats.assistantRecords??0,bySource:a?.bySource??[],watchers:this.watchers.size,errors:this.errors.slice(-20),pendingReconciles:this.fileDebouncers.size,loadedFromDisk:this.loadedFromDisk}}schedulePersist(){this.persistTimer&&clearTimeout(this.persistTimer),this.persistTimer=setTimeout(()=>{this.persistTimer=null;let a=[];for(let[b,c]of this.files)a.push({filePath:b,source:c.source,parserVersion:c.parserVersion,mtimeMs:c.mtimeMs,size:c.size,assistantRecords:c.assistantRecords,userRecords:c.userRecords,parentLinks:c.parentLinks});m({savedAt:new Date().toISOString(),files:a},this.cacheName).catch(a=>this.recordError(`persist: ${a.message}`))},2e3),this.persistTimer.unref?.()}recordError(a){let b=`${new Date().toISOString()} ${function(a){let b=i().homedir();if(!b)return a;let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return a.replace(RegExp(c,"g"),"~")}(a)}`;this.errors.push(b),this.errors.length>40&&this.errors.splice(0,this.errors.length-20),process.env.CCGAUGE_DEBUG&&console.error(`[ccgauge:indexer] ${new Date().toISOString()} ${a}`)}disposeWatchers(){for(let a of this.watchers.values())try{a.close()}catch{}this.watchers.clear()}dispose(){for(let a of(this.disposeWatchers(),this.pollTimer&&clearInterval(this.pollTimer),this.snapshotRebuildTimer&&clearTimeout(this.snapshotRebuildTimer),this.persistTimer&&clearTimeout(this.persistTimer),this.fileDebouncers.values()))clearTimeout(a);this.fileDebouncers.clear()}}async function o(a){try{return(await e.promises.stat(a)).isDirectory()}catch{return!1}}async function p(a,b){let c=[];async function d(a,f){let h;if(!(f>8)){try{h=await e.promises.readdir(a,{withFileTypes:!0})}catch{return}for(let e of h){let h=g().join(a,e.name);if(e.isDirectory()){if(b.shouldSkipDir(e.name))continue;await d(h,f+1)}else e.isFile()&&e.name.endsWith(".jsonl")&&c.push(h)}}}return await d(a,0),c}let q=function(a=j){let b=(globalThis.__ccgaugeIndexers||(globalThis.__ccgaugeIndexers=new Map),globalThis.__ccgaugeIndexers),c=b.get(a);return c||(c=new n(a),b.set(a,c)),c}();async function r(a={}){return a.force?q.forceRescan():(await q.init(),q.getSnapshot())}function s(){return(0,d.R0)().map(a=>({source:a.id,dirs:a.getDirs()}))}function t(){return q.getStatus()}}};
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"functions": {
|
|
4
4
|
"/api/pricing": {},
|
|
5
|
-
"/api/blocks": {},
|
|
6
|
-
"/api/projects": {},
|
|
7
5
|
"/api/scan": {},
|
|
6
|
+
"/api/blocks": {},
|
|
8
7
|
"/api/sessions": {},
|
|
9
8
|
"/api/usage": {},
|
|
10
|
-
"/api/export/usage": {}
|
|
9
|
+
"/api/export/usage": {},
|
|
10
|
+
"/api/projects": {}
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3fcacae817f3ffab.js" defer=""></script><script src="/_next/static/chunks/framework-1a308e28e19f1a97.js" defer=""></script><script src="/_next/static/chunks/main-69f0897f4e7ce710.js" defer=""></script><script src="/_next/static/chunks/pages/_app-5addca2b3b969fde.js" defer=""></script><script src="/_next/static/chunks/pages/_error-022e4ac7bbb9914f.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3fcacae817f3ffab.js" defer=""></script><script src="/_next/static/chunks/framework-1a308e28e19f1a97.js" defer=""></script><script src="/_next/static/chunks/main-69f0897f4e7ce710.js" defer=""></script><script src="/_next/static/chunks/pages/_app-5addca2b3b969fde.js" defer=""></script><script src="/_next/static/chunks/pages/_error-022e4ac7bbb9914f.js" defer=""></script><script src="/_next/static/w_l54xHgbhALYXmZcmUxC/_buildManifest.js" defer=""></script><script src="/_next/static/w_l54xHgbhALYXmZcmUxC/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"w_l54xHgbhALYXmZcmUxC","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"gtvHBKUaPLvmZui4XJoupoJ5kvvb1t0i0zmlC2eEWTM="}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
+
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
3
|
+
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-mono),ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.card{border-radius:12px;border-width:1px;--tw-bg-opacity:1;background-color:rgb(var(--bg-surface)/var(--tw-bg-opacity,1))}.card-pad{padding:1.5rem}.label{font-size:.75rem;line-height:1rem;font-weight:500;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(var(--text-tertiary)/var(--tw-text-opacity,1))}.num-hero{overflow-wrap:break-word;font-size:1.875rem;line-height:2.25rem;font-weight:600;--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(var(--text-primary)/var(--tw-text-opacity,1))}@media (min-width:640px){.num-hero{font-size:2.25rem;line-height:2.5rem}}.num-mid{font-size:1.5rem;line-height:2rem;font-weight:600;--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);--tw-text-opacity:1;color:rgb(var(--text-primary)/var(--tw-text-opacity,1))}.num-mono{font-family:var(--font-mono),ui-monospace,monospace;--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.pill{display:inline-flex;align-items:center;border-radius:8px;padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.pill-muted{padding:.125rem .5rem;font-size:.75rem;line-height:1rem;--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(var(--bg-surface-hi)/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(var(--text-secondary)/var(--tw-text-opacity,1))}.btn,.pill-muted{display:inline-flex;align-items:center;border-radius:8px;font-weight:500;border-width:1px;border-color:rgb(var(--border)/var(--tw-border-opacity,1))}.btn{justify-content:center;gap:.375rem;background-color:rgb(var(--bg-surface)/var(--tw-bg-opacity,1));padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn,.btn:hover{--tw-border-opacity:1;--tw-bg-opacity:1}.btn:hover{border-color:rgb(var(--border-hi)/var(--tw-border-opacity,1));background-color:rgb(var(--bg-surface-hi)/var(--tw-bg-opacity,1))}.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;border-radius:8px;padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(var(--text-secondary)/var(--tw-text-opacity,1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-ghost:hover{--tw-bg-opacity:1;background-color:rgb(var(--bg-surface-hi)/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(var(--text-primary)/var(--tw-text-opacity,1))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-auto{margin-top:auto}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-full{height:100%}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.min-h-\[128px\]{min-height:128px}.min-h-\[180px\]{min-height:180px}.min-h-\[280px\]{min-height:280px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[120px\]{min-width:120px}.min-w-\[200px\]{min-width:200px}.min-w-\[80px\]{min-width:80px}.max-w-2xl{max-width:42rem}.max-w-7xl{max-width:80rem}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[280px\]{max-width:280px}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1\.5{row-gap:.375rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-button{border-radius:8px}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-border{--tw-border-opacity:1;border-color:rgb(var(--border)/var(--tw-border-opacity,1))}.border-border-hi{--tw-border-opacity:1;border-color:rgb(var(--border-hi)/var(--tw-border-opacity,1))}.border-border\/60{border-color:rgb(var(--border)/.6)}.border-brand{--tw-border-opacity:1;border-color:rgb(var(--brand)/var(--tw-border-opacity,1))}.border-brand\/20{border-color:rgb(var(--brand)/.2)}.border-brand\/30{border-color:rgb(var(--brand)/.3)}.border-success\/20{border-color:rgb(var(--success)/.2)}.border-success\/30{border-color:rgb(var(--success)/.3)}.border-warning\/20{border-color:rgb(var(--warning)/.2)}.border-warning\/30{border-color:rgb(var(--warning)/.3)}.bg-bg{--tw-bg-opacity:1;background-color:rgb(var(--bg-base)/var(--tw-bg-opacity,1))}.bg-bg-surface{--tw-bg-opacity:1;background-color:rgb(var(--bg-surface)/var(--tw-bg-opacity,1))}.bg-bg-surface-hi{--tw-bg-opacity:1;background-color:rgb(var(--bg-surface-hi)/var(--tw-bg-opacity,1))}.bg-bg-surface-hi\/20{background-color:rgb(var(--bg-surface-hi)/.2)}.bg-bg-surface-hi\/30{background-color:rgb(var(--bg-surface-hi)/.3)}.bg-bg-surface-hi\/40{background-color:rgb(var(--bg-surface-hi)/.4)}.bg-brand{--tw-bg-opacity:1;background-color:rgb(var(--brand)/var(--tw-bg-opacity,1))}.bg-brand\/10{background-color:rgb(var(--brand)/.1)}.bg-chart-cache-create{--tw-bg-opacity:1;background-color:rgb(var(--chart-cache-create)/var(--tw-bg-opacity,1))}.bg-chart-cache-create\/15{background-color:rgb(var(--chart-cache-create)/.15)}.bg-chart-cache-read{--tw-bg-opacity:1;background-color:rgb(var(--chart-cache-read)/var(--tw-bg-opacity,1))}.bg-chart-input{--tw-bg-opacity:1;background-color:rgb(var(--chart-input)/var(--tw-bg-opacity,1))}.bg-chart-output{--tw-bg-opacity:1;background-color:rgb(var(--chart-output)/var(--tw-bg-opacity,1))}.bg-danger{--tw-bg-opacity:1;background-color:rgb(var(--danger)/var(--tw-bg-opacity,1))}.bg-danger\/10{background-color:rgb(var(--danger)/.1)}.bg-success{--tw-bg-opacity:1;background-color:rgb(var(--success)/var(--tw-bg-opacity,1))}.bg-success\/10{background-color:rgb(var(--success)/.1)}.bg-warning{--tw-bg-opacity:1;background-color:rgb(var(--warning)/var(--tw-bg-opacity,1))}.bg-warning\/10{background-color:rgb(var(--warning)/.1)}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-bg-surface{--tw-gradient-from:rgb(var(--bg-surface)/1) var(--tw-gradient-from-position);--tw-gradient-to:rgb(var(--bg-surface)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-brand{--tw-gradient-from:rgb(var(--brand)/1) var(--tw-gradient-from-position);--tw-gradient-to:rgb(var(--brand)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-brand-hover{--tw-gradient-to:rgb(var(--brand-hover)/1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.fill-brand{fill:rgb(var(--brand)/1)}.fill-white{fill:#fff}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1\.5{padding-bottom:.375rem}.pb-3{padding-bottom:.75rem}.pl-2{padding-left:.5rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-1\.5{padding-right:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-brand{--tw-text-opacity:1;color:rgb(var(--brand)/var(--tw-text-opacity,1))}.text-brand\/70{color:rgb(var(--brand)/.7)}.text-chart-cache-create{--tw-text-opacity:1;color:rgb(var(--chart-cache-create)/var(--tw-text-opacity,1))}.text-danger{--tw-text-opacity:1;color:rgb(var(--danger)/var(--tw-text-opacity,1))}.text-success{--tw-text-opacity:1;color:rgb(var(--success)/var(--tw-text-opacity,1))}.text-text-primary{--tw-text-opacity:1;color:rgb(var(--text-primary)/var(--tw-text-opacity,1))}.text-text-secondary{--tw-text-opacity:1;color:rgb(var(--text-secondary)/var(--tw-text-opacity,1))}.text-text-tertiary{--tw-text-opacity:1;color:rgb(var(--text-tertiary)/var(--tw-text-opacity,1))}.text-warning{--tw-text-opacity:1;color:rgb(var(--warning)/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.accent-brand{accent-color:rgb(var(--brand)/1)}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0/0.1),0 4px 6px -4px rgb(0 0 0/0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgb(0 0 0/0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgb(0 0 0/0.1),0 8px 10px -6px rgb(0 0 0/0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-brand\/40{--tw-ring-color:rgb(var(--brand)/0.4)}.ring-white\/40{--tw-ring-color:rgb(255 255 255/0.4)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.\[ccgauge\:api\]{ccgauge:api}.\[ccgauge\:indexer\]{ccgauge:indexer}.theme-dark,:root{--bg-base:10 10 10;--bg-surface:20 20 20;--bg-surface-hi:28 28 28;--border:38 38 38;--border-hi:64 64 64;--text-primary:250 250 250;--text-secondary:163 163 163;--text-tertiary:115 115 115;--brand:129 140 248;--brand-hover:165 180 252;--success:34 197 94;--warning:250 204 21;--danger:248 113 113;--chart-input:96 165 250;--chart-output:251 146 60;--chart-cache-read:52 211 153;--chart-cache-create:167 139 250;--chart-grid:38 38 38;--chart-axis:115 115 115}.theme-light{--bg-base:255 255 255;--bg-surface:250 250 250;--bg-surface-hi:244 244 245;--border:228 228 231;--border-hi:212 212 216;--text-primary:23 23 23;--text-secondary:82 82 91;--text-tertiary:161 161 170;--brand:79 70 229;--brand-hover:67 56 202;--success:22 163 74;--warning:217 119 6;--danger:220 38 38;--chart-input:37 99 235;--chart-output:234 88 12;--chart-cache-read:22 163 74;--chart-cache-create:124 58 237;--chart-grid:228 228 231;--chart-axis:113 113 122}:root{--font-sans:"Geist Sans","Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--font-mono:"Geist Mono","JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace}*{border-color:rgb(var(--border))}html{overflow-y:scroll;scrollbar-gutter:stable}body,html{background:rgb(var(--bg-base));color:rgb(var(--text-primary));font-family:var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{min-height:100vh}::-moz-selection{background:rgb(var(--brand)/.3);color:rgb(var(--text-primary))}::selection{background:rgb(var(--brand)/.3);color:rgb(var(--text-primary))}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgb(var(--border-hi));border-radius:5px}::-webkit-scrollbar-thumb:hover{background:rgb(var(--text-tertiary))}.scrollbar-thin::-webkit-scrollbar{width:4px;height:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background:rgb(var(--border-hi)/.5)}.placeholder\:text-text-tertiary::-moz-placeholder{--tw-text-opacity:1;color:rgb(var(--text-tertiary)/var(--tw-text-opacity,1))}.placeholder\:text-text-tertiary::placeholder{--tw-text-opacity:1;color:rgb(var(--text-tertiary)/var(--tw-text-opacity,1))}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-border-hi:hover{--tw-border-opacity:1;border-color:rgb(var(--border-hi)/var(--tw-border-opacity,1))}.hover\:border-text-tertiary:hover{--tw-border-opacity:1;border-color:rgb(var(--text-tertiary)/var(--tw-border-opacity,1))}.hover\:bg-bg-surface:hover{--tw-bg-opacity:1;background-color:rgb(var(--bg-surface)/var(--tw-bg-opacity,1))}.hover\:bg-bg-surface-hi:hover{--tw-bg-opacity:1;background-color:rgb(var(--bg-surface-hi)/var(--tw-bg-opacity,1))}.hover\:bg-bg-surface-hi\/30:hover{background-color:rgb(var(--bg-surface-hi)/.3)}.hover\:bg-bg-surface-hi\/40:hover{background-color:rgb(var(--bg-surface-hi)/.4)}.hover\:bg-brand\/15:hover{background-color:rgb(var(--brand)/.15)}.hover\:text-brand:hover{--tw-text-opacity:1;color:rgb(var(--brand)/var(--tw-text-opacity,1))}.hover\:text-text-primary:hover{--tw-text-opacity:1;color:rgb(var(--text-primary)/var(--tw-text-opacity,1))}.focus\:border-border-hi:focus{--tw-border-opacity:1;border-color:rgb(var(--border-hi)/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-brand\/40:focus-visible{--tw-ring-color:rgb(var(--brand)/0.4)}.disabled\:opacity-40:disabled{opacity:.4}.group:hover .group-hover\:text-brand{--tw-text-opacity:1;color:rgb(var(--brand)/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:inline{display:inline}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:pt-5{padding-top:1.25rem}}@media (min-width:768px){.md\:inline-flex{display:inline-flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1024px){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:inline{display:inline}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccgauge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Local web dashboard for Claude Code and OpenAI Codex CLI token usage and cost",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -15,6 +15,19 @@
|
|
|
15
15
|
"cost"
|
|
16
16
|
],
|
|
17
17
|
"license": "MIT",
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "chengzuopeng",
|
|
20
|
+
"email": "mrchengzp@qq.com",
|
|
21
|
+
"url": "https://github.com/chengzuopeng"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/chengzuopeng/ccgauge#readme",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/chengzuopeng/ccgauge.git"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/chengzuopeng/ccgauge/issues"
|
|
30
|
+
},
|
|
18
31
|
"type": "module",
|
|
19
32
|
"engines": {
|
|
20
33
|
"node": ">=20"
|
|
@@ -26,6 +39,7 @@
|
|
|
26
39
|
"files": [
|
|
27
40
|
"bin/cli.mjs",
|
|
28
41
|
".next/standalone",
|
|
42
|
+
"dist/mcp",
|
|
29
43
|
"README.md",
|
|
30
44
|
"README.zh-CN.md",
|
|
31
45
|
"CHANGELOG.md",
|
|
@@ -33,17 +47,20 @@
|
|
|
33
47
|
],
|
|
34
48
|
"scripts": {
|
|
35
49
|
"dev": "next dev -p 3737",
|
|
36
|
-
"build": "next build && node scripts/postbuild.mjs",
|
|
50
|
+
"build": "next build && node scripts/build-mcp.mjs && node scripts/postbuild.mjs",
|
|
51
|
+
"build:mcp": "node scripts/build-mcp.mjs",
|
|
37
52
|
"start": "node bin/cli.mjs",
|
|
38
53
|
"start:next": "next start -p 3737",
|
|
39
54
|
"lint": "eslint .",
|
|
40
55
|
"typecheck": "tsc --noEmit",
|
|
41
56
|
"test": "node --experimental-strip-types --no-warnings scripts/test-codex-parser.mjs",
|
|
57
|
+
"test:mcp": "node scripts/test-mcp-server.mjs",
|
|
42
58
|
"clean": "rm -rf .next node_modules tsconfig.tsbuildinfo",
|
|
43
59
|
"screenshots": "node scripts/screenshots.mjs",
|
|
44
60
|
"prepack": "pnpm build"
|
|
45
61
|
},
|
|
46
62
|
"dependencies": {
|
|
63
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
47
64
|
"commander": "^13.1.0",
|
|
48
65
|
"get-port": "^7.1.0",
|
|
49
66
|
"open": "^10.1.0"
|
|
@@ -56,6 +73,7 @@
|
|
|
56
73
|
"autoprefixer": "^10.4.20",
|
|
57
74
|
"clsx": "^2.1.1",
|
|
58
75
|
"date-fns": "^4.1.0",
|
|
76
|
+
"esbuild": "^0.28.0",
|
|
59
77
|
"eslint": "^9.17.0",
|
|
60
78
|
"eslint-config-next": "^15.1.0",
|
|
61
79
|
"next": "^15.1.0",
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,81 @@ All notable changes to **ccgauge** are documented here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
|
|
6
6
|
this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.4.0] — 2026-05-05
|
|
9
|
+
|
|
10
|
+
This release ships an **MCP (Model Context Protocol) server** so any
|
|
11
|
+
MCP-aware LLM client (Claude Desktop, Cursor, Cline, your own agent…)
|
|
12
|
+
can query your Claude Code + Codex CLI usage history through structured
|
|
13
|
+
tools. The on-disk index introduced in 0.3.0 is reused, so the MCP
|
|
14
|
+
server boots cold in ~110 ms and answers warm calls in O(1).
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **MCP server** (`ccgauge mcp`) — stdio JSON-RPC server bundled as
|
|
19
|
+
`dist/mcp/server.mjs` (esbuild single-file ESM, ~800 KB). Wires into
|
|
20
|
+
Claude Desktop / Cursor / Cline / generic MCP clients via standard
|
|
21
|
+
`{ command, args }` config blocks. Documented in the README.
|
|
22
|
+
- **8 MCP tools**:
|
|
23
|
+
- `usage_summary` — totals + per-source breakdown for any window
|
|
24
|
+
- `usage_by_time` — bucketed time-series (hour / day / week / month)
|
|
25
|
+
- `usage_by_model` — per-model cost share
|
|
26
|
+
- `usage_by_project` — per-project cost share + last-activity
|
|
27
|
+
- `usage_by_session` — session list with title / model / duration / cost
|
|
28
|
+
- `daily_summary` — "what did I do on day X" with sessions grouped by project
|
|
29
|
+
- `weekly_summary` — 7-day roll-up with per-day cost trend + top sessions / projects
|
|
30
|
+
- `recent_activity` — N most recently active sessions
|
|
31
|
+
- **1 MCP resource** — `ccgauge://providers` (detected providers, dirs,
|
|
32
|
+
record counts, indexer status).
|
|
33
|
+
- **`source: 'all'` (default)** on every analytical tool — the response
|
|
34
|
+
carries combined totals **and** a `bySource: { claude, codex }`
|
|
35
|
+
breakdown so the LLM can answer combined or provider-specific
|
|
36
|
+
questions in a single call.
|
|
37
|
+
- **Reasoning-tokens breakdown** in the dashboard's token-total hover
|
|
38
|
+
card and per-message session timeline. `output_tokens` still includes
|
|
39
|
+
reasoning for OpenAI billing parity; the new `reasoning_tokens` field
|
|
40
|
+
is display-only and never double-counted.
|
|
41
|
+
- **Per-named indexer instance** — `getIndexer(name)` lets the web
|
|
42
|
+
dashboard and the MCP server have independent persisted caches
|
|
43
|
+
(`index-v2.json` vs `index-mcp-v2.json`) so they never fight for the
|
|
44
|
+
same on-disk state file.
|
|
45
|
+
- **Strict input validation** for MCP date arguments — invalid `range`,
|
|
46
|
+
`from`, `to`, or `daily_summary.date` values are rejected at parse
|
|
47
|
+
time (zod refinement) and at runtime (defensive throws), instead of
|
|
48
|
+
silently falling back to all-time data.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- **`top_tools` now respects `source`** in `daily_summary` /
|
|
53
|
+
`weekly_summary`. Previously it ignored the source arg and returned
|
|
54
|
+
identical tool counts for `claude` / `codex` / `all`, mixing
|
|
55
|
+
per-provider stats together.
|
|
56
|
+
- **`usage_by_time` now carries `reasoning_tokens` per bucket.** The
|
|
57
|
+
field was hard-coded to 0, breaking any "reasoning over time"
|
|
58
|
+
question even though the `usage_summary` total was correct.
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
|
|
62
|
+
- Codex parser bumped to `codex-v3-reasoning-detail` (schema change to
|
|
63
|
+
expose `reasoning_tokens`); persisted entries from earlier parsers
|
|
64
|
+
are auto-invalidated on next startup.
|
|
65
|
+
- `lib/aggregator/index.ts` exports `bucketKey` so external callers
|
|
66
|
+
(the MCP layer) can re-bucket records under the same key scheme.
|
|
67
|
+
|
|
68
|
+
## [0.3.1] — 2026-05-05
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
|
|
72
|
+
- README screenshots and the English ↔ 简体中文 cross-link now use
|
|
73
|
+
absolute GitHub URLs so the npm package page renders the hero image
|
|
74
|
+
inline and the language switcher no longer 404s. Relative paths only
|
|
75
|
+
resolve on GitHub, not on `npmjs.com`.
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
|
|
79
|
+
- `repository`, `homepage`, `bugs`, and `author` fields in
|
|
80
|
+
`package.json` so the npm sidebar links back to GitHub Issues / repo
|
|
81
|
+
/ maintainer profile.
|
|
82
|
+
|
|
8
83
|
## [0.3.0] — 2026-05-05
|
|
9
84
|
|
|
10
85
|
This release adds **OpenAI Codex CLI** as a first-class data source alongside
|
|
@@ -118,5 +193,7 @@ of HTML to the browser.
|
|
|
118
193
|
- Initial public release as `ccgauge`: local Next.js dashboard for
|
|
119
194
|
Claude Code token usage, cost, and 5-hour block tracking.
|
|
120
195
|
|
|
196
|
+
[0.4.0]: https://github.com/chengzuopeng/ccgauge/compare/v0.3.1...v0.4.0
|
|
197
|
+
[0.3.1]: https://github.com/chengzuopeng/ccgauge/compare/v0.3.0...v0.3.1
|
|
121
198
|
[0.3.0]: https://github.com/chengzuopeng/ccgauge/compare/v0.2.0...v0.3.0
|
|
122
199
|
[0.2.0]: https://github.com/chengzuopeng/ccgauge/compare/v0.1.1...v0.2.0
|