tokentrace 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-build-manifest.json +167 -0
  3. package/.next/app-path-routes-manifest.json +22 -0
  4. package/.next/build-manifest.json +33 -0
  5. package/.next/export-marker.json +6 -0
  6. package/.next/images-manifest.json +58 -0
  7. package/.next/next-minimal-server.js.nft.json +1 -0
  8. package/.next/next-server.js.nft.json +1 -0
  9. package/.next/package.json +1 -0
  10. package/.next/prerender-manifest.json +37 -0
  11. package/.next/react-loadable-manifest.json +1 -0
  12. package/.next/required-server-files.json +323 -0
  13. package/.next/routes-manifest.json +119 -0
  14. package/.next/server/app/_not-found/page.js +2 -0
  15. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  17. package/.next/server/app/_not-found.html +1 -0
  18. package/.next/server/app/_not-found.meta +8 -0
  19. package/.next/server/app/_not-found.rsc +37 -0
  20. package/.next/server/app/api/analytics/route.js +1 -0
  21. package/.next/server/app/api/analytics/route.js.nft.json +1 -0
  22. package/.next/server/app/api/analytics/route_client-reference-manifest.js +1 -0
  23. package/.next/server/app/api/data/route.js +151 -0
  24. package/.next/server/app/api/data/route.js.nft.json +1 -0
  25. package/.next/server/app/api/data/route_client-reference-manifest.js +1 -0
  26. package/.next/server/app/api/export/route.js +1 -0
  27. package/.next/server/app/api/export/route.js.nft.json +1 -0
  28. package/.next/server/app/api/export/route_client-reference-manifest.js +1 -0
  29. package/.next/server/app/api/files/route.js +1 -0
  30. package/.next/server/app/api/files/route.js.nft.json +1 -0
  31. package/.next/server/app/api/files/route_client-reference-manifest.js +1 -0
  32. package/.next/server/app/api/prices/route.js +151 -0
  33. package/.next/server/app/api/prices/route.js.nft.json +1 -0
  34. package/.next/server/app/api/prices/route_client-reference-manifest.js +1 -0
  35. package/.next/server/app/api/scan/route.js +144 -0
  36. package/.next/server/app/api/scan/route.js.nft.json +1 -0
  37. package/.next/server/app/api/scan/route_client-reference-manifest.js +1 -0
  38. package/.next/server/app/api/settings/route.js +128 -0
  39. package/.next/server/app/api/settings/route.js.nft.json +1 -0
  40. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  41. package/.next/server/app/debug/page.js +2 -0
  42. package/.next/server/app/debug/page.js.nft.json +1 -0
  43. package/.next/server/app/debug/page_client-reference-manifest.js +1 -0
  44. package/.next/server/app/diagnostics/page.js +2 -0
  45. package/.next/server/app/diagnostics/page.js.nft.json +1 -0
  46. package/.next/server/app/diagnostics/page_client-reference-manifest.js +1 -0
  47. package/.next/server/app/discovery/page.js +2 -0
  48. package/.next/server/app/discovery/page.js.nft.json +1 -0
  49. package/.next/server/app/discovery/page_client-reference-manifest.js +1 -0
  50. package/.next/server/app/models/page.js +2 -0
  51. package/.next/server/app/models/page.js.nft.json +1 -0
  52. package/.next/server/app/models/page_client-reference-manifest.js +1 -0
  53. package/.next/server/app/optimisation/page.js +2 -0
  54. package/.next/server/app/optimisation/page.js.nft.json +1 -0
  55. package/.next/server/app/optimisation/page_client-reference-manifest.js +1 -0
  56. package/.next/server/app/page.js +2 -0
  57. package/.next/server/app/page.js.nft.json +1 -0
  58. package/.next/server/app/page_client-reference-manifest.js +1 -0
  59. package/.next/server/app/parser-debug/page.js +2 -0
  60. package/.next/server/app/parser-debug/page.js.nft.json +1 -0
  61. package/.next/server/app/parser-debug/page_client-reference-manifest.js +1 -0
  62. package/.next/server/app/pricing/page.js +152 -0
  63. package/.next/server/app/pricing/page.js.nft.json +1 -0
  64. package/.next/server/app/pricing/page_client-reference-manifest.js +1 -0
  65. package/.next/server/app/projects/page.js +2 -0
  66. package/.next/server/app/projects/page.js.nft.json +1 -0
  67. package/.next/server/app/projects/page_client-reference-manifest.js +1 -0
  68. package/.next/server/app/sessions/page.js +2 -0
  69. package/.next/server/app/sessions/page.js.nft.json +1 -0
  70. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -0
  71. package/.next/server/app/settings/page.js +129 -0
  72. package/.next/server/app/settings/page.js.nft.json +1 -0
  73. package/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  74. package/.next/server/app/tools/page.js +2 -0
  75. package/.next/server/app/tools/page.js.nft.json +1 -0
  76. package/.next/server/app/tools/page_client-reference-manifest.js +1 -0
  77. package/.next/server/app-paths-manifest.json +22 -0
  78. package/.next/server/chunks/123.js +9 -0
  79. package/.next/server/chunks/153.js +1 -0
  80. package/.next/server/chunks/237.js +13 -0
  81. package/.next/server/chunks/331.js +22 -0
  82. package/.next/server/chunks/366.js +1 -0
  83. package/.next/server/chunks/444.js +267 -0
  84. package/.next/server/chunks/611.js +6 -0
  85. package/.next/server/chunks/692.js +1 -0
  86. package/.next/server/chunks/779.js +1 -0
  87. package/.next/server/chunks/815.js +1 -0
  88. package/.next/server/chunks/868.js +1 -0
  89. package/.next/server/functions-config-manifest.json +4 -0
  90. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  91. package/.next/server/middleware-build-manifest.js +1 -0
  92. package/.next/server/middleware-manifest.json +6 -0
  93. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  94. package/.next/server/next-font-manifest.js +1 -0
  95. package/.next/server/next-font-manifest.json +1 -0
  96. package/.next/server/pages/404.html +1 -0
  97. package/.next/server/pages/500.html +1 -0
  98. package/.next/server/pages/_app.js +1 -0
  99. package/.next/server/pages/_app.js.nft.json +1 -0
  100. package/.next/server/pages/_document.js +1 -0
  101. package/.next/server/pages/_document.js.nft.json +1 -0
  102. package/.next/server/pages/_error.js +19 -0
  103. package/.next/server/pages/_error.js.nft.json +1 -0
  104. package/.next/server/pages-manifest.json +6 -0
  105. package/.next/server/server-reference-manifest.js +1 -0
  106. package/.next/server/server-reference-manifest.json +1 -0
  107. package/.next/server/webpack-runtime.js +1 -0
  108. package/.next/static/Fh8usqK3dgfncUx9s3VR1/_buildManifest.js +1 -0
  109. package/.next/static/Fh8usqK3dgfncUx9s3VR1/_ssgManifest.js +1 -0
  110. package/.next/static/chunks/125-ab0f8db8f84c1166.js +1 -0
  111. package/.next/static/chunks/255-e881f48ae1d2333a.js +1 -0
  112. package/.next/static/chunks/4bd1b696-409494caf8c83275.js +1 -0
  113. package/.next/static/chunks/619-f072ac750404f9da.js +1 -0
  114. package/.next/static/chunks/850-8bc31e41590b5831.js +1 -0
  115. package/.next/static/chunks/938-23236de1c47554ea.js +1 -0
  116. package/.next/static/chunks/app/_not-found/page-6d75243350d9e0b5.js +1 -0
  117. package/.next/static/chunks/app/api/analytics/route-33d3f29973de91a4.js +1 -0
  118. package/.next/static/chunks/app/api/data/route-33d3f29973de91a4.js +1 -0
  119. package/.next/static/chunks/app/api/export/route-33d3f29973de91a4.js +1 -0
  120. package/.next/static/chunks/app/api/files/route-33d3f29973de91a4.js +1 -0
  121. package/.next/static/chunks/app/api/prices/route-33d3f29973de91a4.js +1 -0
  122. package/.next/static/chunks/app/api/scan/route-33d3f29973de91a4.js +1 -0
  123. package/.next/static/chunks/app/api/settings/route-33d3f29973de91a4.js +1 -0
  124. package/.next/static/chunks/app/debug/page-33d3f29973de91a4.js +1 -0
  125. package/.next/static/chunks/app/diagnostics/page-053a5e810a59e548.js +1 -0
  126. package/.next/static/chunks/app/discovery/page-33d3f29973de91a4.js +1 -0
  127. package/.next/static/chunks/app/layout-8942804176ff26f3.js +1 -0
  128. package/.next/static/chunks/app/models/page-c0acf74dd8197e01.js +1 -0
  129. package/.next/static/chunks/app/optimisation/page-33d3f29973de91a4.js +1 -0
  130. package/.next/static/chunks/app/page-b6886ec802c03cbf.js +1 -0
  131. package/.next/static/chunks/app/parser-debug/page-33d3f29973de91a4.js +1 -0
  132. package/.next/static/chunks/app/pricing/page-5e27b1ae27314539.js +1 -0
  133. package/.next/static/chunks/app/projects/page-b6886ec802c03cbf.js +1 -0
  134. package/.next/static/chunks/app/sessions/page-0abcdc88aac9dcaf.js +1 -0
  135. package/.next/static/chunks/app/settings/page-59fc80673f0750cd.js +1 -0
  136. package/.next/static/chunks/app/tools/page-c0acf74dd8197e01.js +1 -0
  137. package/.next/static/chunks/framework-3457b9c2619cdd96.js +1 -0
  138. package/.next/static/chunks/main-8744520a8a31e6ae.js +1 -0
  139. package/.next/static/chunks/main-app-e9ccddef393e28c3.js +1 -0
  140. package/.next/static/chunks/pages/_app-5addca2b3b969fde.js +1 -0
  141. package/.next/static/chunks/pages/_error-022e4ac7bbb9914f.js +1 -0
  142. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  143. package/.next/static/chunks/webpack-3fcacae817f3ffab.js +1 -0
  144. package/.next/static/css/366bb38b386229a5.css +3 -0
  145. package/LICENSE +21 -0
  146. package/README.md +216 -0
  147. package/app/api/analytics/route.ts +8 -0
  148. package/app/api/data/route.ts +9 -0
  149. package/app/api/export/route.ts +26 -0
  150. package/app/api/files/route.ts +8 -0
  151. package/app/api/prices/route.ts +33 -0
  152. package/app/api/scan/route.ts +15 -0
  153. package/app/api/settings/route.ts +25 -0
  154. package/app/debug/page.tsx +101 -0
  155. package/app/diagnostics/page.tsx +113 -0
  156. package/app/discovery/page.tsx +61 -0
  157. package/app/globals.css +51 -0
  158. package/app/layout.tsx +30 -0
  159. package/app/models/page.tsx +97 -0
  160. package/app/optimisation/page.tsx +67 -0
  161. package/app/page.tsx +164 -0
  162. package/app/parser-debug/page.tsx +57 -0
  163. package/app/pricing/page.tsx +18 -0
  164. package/app/projects/page.tsx +111 -0
  165. package/app/sessions/page.tsx +24 -0
  166. package/app/settings/page.tsx +26 -0
  167. package/app/tools/page.tsx +92 -0
  168. package/bin/tokentrace.js +316 -0
  169. package/components/charts/rank-bar-chart.tsx +69 -0
  170. package/components/charts/trend-chart.tsx +123 -0
  171. package/components/empty-state.tsx +14 -0
  172. package/components/pricing-settings.tsx +171 -0
  173. package/components/session-explorer.tsx +210 -0
  174. package/components/settings-panel.tsx +203 -0
  175. package/components/sidebar.tsx +88 -0
  176. package/components/ui/badge.tsx +30 -0
  177. package/components/ui/button.tsx +47 -0
  178. package/components/ui/card.tsx +22 -0
  179. package/components/ui/input.tsx +19 -0
  180. package/components/ui/label.tsx +6 -0
  181. package/components/ui/table.tsx +31 -0
  182. package/components/ui/textarea.tsx +18 -0
  183. package/components.json +16 -0
  184. package/dist/runtime/db-migrate.mjs +410 -0
  185. package/dist/runtime/db-seed.mjs +506 -0
  186. package/dist/runtime/reset.mjs +519 -0
  187. package/dist/runtime/scan.mjs +1817 -0
  188. package/fixtures/generic-jsonl/sample.jsonl +2 -0
  189. package/next.config.mjs +7 -0
  190. package/package.json +96 -0
  191. package/postcss.config.mjs +8 -0
  192. package/scripts/build-cli-runtime.mjs +40 -0
  193. package/scripts/db-migrate.ts +5 -0
  194. package/scripts/db-seed.ts +5 -0
  195. package/scripts/reset.ts +5 -0
  196. package/scripts/scan.ts +30 -0
  197. package/src/db/client.ts +32 -0
  198. package/src/db/migrate-core.ts +147 -0
  199. package/src/db/reset.ts +14 -0
  200. package/src/db/schema.ts +259 -0
  201. package/src/db/seed.ts +110 -0
  202. package/src/db/settings.ts +47 -0
  203. package/src/ingestion/adapters/claude-code.ts +78 -0
  204. package/src/ingestion/adapters/codex-cli.ts +82 -0
  205. package/src/ingestion/adapters/generic-json.ts +93 -0
  206. package/src/ingestion/adapters/generic-jsonl.ts +62 -0
  207. package/src/ingestion/adapters/generic-log.ts +144 -0
  208. package/src/ingestion/adapters/generic-records.ts +178 -0
  209. package/src/ingestion/adapters/helpers.ts +309 -0
  210. package/src/ingestion/adapters/index.ts +15 -0
  211. package/src/ingestion/discovery.ts +130 -0
  212. package/src/ingestion/persist.ts +283 -0
  213. package/src/ingestion/scan.ts +247 -0
  214. package/src/ingestion/types.ts +78 -0
  215. package/src/lib/analytics.ts +592 -0
  216. package/src/lib/cost.ts +62 -0
  217. package/src/lib/csv.ts +15 -0
  218. package/src/lib/format.ts +51 -0
  219. package/src/lib/ids.ts +23 -0
  220. package/src/lib/pricing.ts +86 -0
  221. package/src/lib/token-estimator.ts +24 -0
  222. package/src/lib/utils.ts +6 -0
  223. package/tailwind.config.ts +53 -0
  224. package/tsconfig.json +28 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[492],{24585:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"styles",{enumerable:!0,get:function(){return l}});let l={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},38886:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}});let r=l(95155),n=l(24585);function o(e){let{status:t,message:l}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("title",{children:t+": "+l}),(0,r.jsx)("div",{style:n.styles.error,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"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)}}"}}),(0,r.jsx)("h1",{className:"next-error-h1",style:n.styles.h1,children:t}),(0,r.jsx)("div",{style:n.styles.desc,children:(0,r.jsx)("h2",{style:n.styles.h2,children:l})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},47693:(e,t,l)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return l(79520)}])},79520:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=l(95155),n=l(38886),o=function(){return(0,r.jsx)("html",{children:(0,r.jsx)("body",{children:(0,r.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})})})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[441,255,358],()=>e(e.s=47693)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[149],{66398:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,52619,23))}},e=>{e.O(0,[619,441,255,358],()=>e(e.s=66398)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[558],{11914:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,41290,23)),Promise.resolve().then(n.t.bind(n,52619,23))},41290:()=>{}},e=>{e.O(0,[741,619,441,255,358],()=>e(e.s=11914)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[329,554],{2821:(t,e,n)=>{"use strict";function r(){for(var t,e,n=0,r="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=function t(e){var n,r,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(n=0;n<i;n++)e[n]&&(r=t(e[n]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}(t))&&(r&&(r+=" "),r+=e);return r}n.d(e,{$:()=>r,A:()=>o});let o=r},5813:(t,e,n)=>{"use strict";n.d(e,{RankBarChart:()=>f});var r=n(95155),o=n(26991),i=n(98128),a=n(68425),u=n(47734),c=n(73697),s=n(23508),l=n(30757),m=n(20467);function f(t){let{data:e,nameKey:n,valueKey:f,mode:d="tokens",color:h="#ea580c"}=t,k=e.slice(0,8).map(t=>{var e,r;return{name:String(null!=(e=t[n])?e:"Unknown"),value:Number(null!=(r=t[f])?r:0)}}).filter(t=>t.value>0);return(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(o.u,{width:"100%",height:"100%",children:(0,r.jsxs)(i.E,{data:k,layout:"vertical",margin:{left:16,right:12,top:8,bottom:0},children:[(0,r.jsx)(a.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(u.W,{type:"number",tick:{fontSize:12},stroke:"#786f65",tickFormatter:t=>"cost"===d?"$".concat(Number(t).toFixed(0)):(0,m._y)(Number(t))}),(0,r.jsx)(c.h,{dataKey:"name",type:"category",width:120,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(s.m,{formatter:t=>"cost"===d?(0,m.vv)(Number(t)):"tokens"===d?"".concat((0,m._y)(Number(t))," tokens"):Number(t).toLocaleString()}),(0,r.jsx)(l.y,{dataKey:"value",fill:h,radius:[0,4,4,0]})]})})})}},20467:(t,e,n)=>{"use strict";function r(t){let e=null!=t?t:0;return e>=1e6?"".concat((e/1e6).toFixed(2),"M"):e>=1e3?"".concat((e/1e3).toFixed(1),"K"):e.toLocaleString()}function o(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return null==t?"Unknown":new Intl.NumberFormat("en-US",{style:"currency",currency:e,maximumFractionDigits:t<1?4:2}).format(t)}function i(t){if(!t)return"Unknown";let e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function a(t){if(!t)return"Unknown";let e=new Date("string"==typeof t?"".concat(t,"T00:00:00"):t);return Number.isNaN(e.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(e)}function u(t){if(!t||t<0)return"Unknown";let e=Math.round(t/1e3);if(e<60)return"".concat(e,"s");let n=Math.round(e/60);return n<60?"".concat(n,"m"):"".concat((n/60).toFixed(1),"h")}n.d(e,{Yq:()=>i,_y:()=>r,a3:()=>u,sL:()=>a,vv:()=>o})},81228:(t,e,n)=>{Promise.resolve().then(n.bind(n,5813))}},t=>{t.O(0,[938,441,255,358],()=>t(t.s=81228)),_N_E=t.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893,974],{5813:(e,t,n)=>{"use strict";n.d(t,{RankBarChart:()=>m});var r=n(95155),o=n(26991),a=n(98128),s=n(68425),i=n(47734),c=n(73697),l=n(23508),u=n(30757),d=n(20467);function m(e){let{data:t,nameKey:n,valueKey:m,mode:f="tokens",color:h="#ea580c"}=e,k=t.slice(0,8).map(e=>{var t,r;return{name:String(null!=(t=e[n])?t:"Unknown"),value:Number(null!=(r=e[m])?r:0)}}).filter(e=>e.value>0);return(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(o.u,{width:"100%",height:"100%",children:(0,r.jsxs)(a.E,{data:k,layout:"vertical",margin:{left:16,right:12,top:8,bottom:0},children:[(0,r.jsx)(s.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(i.W,{type:"number",tick:{fontSize:12},stroke:"#786f65",tickFormatter:e=>"cost"===f?"$".concat(Number(e).toFixed(0)):(0,d._y)(Number(e))}),(0,r.jsx)(c.h,{dataKey:"name",type:"category",width:120,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(l.m,{formatter:e=>"cost"===f?(0,d.vv)(Number(e)):"tokens"===f?"".concat((0,d._y)(Number(e))," tokens"):Number(e).toLocaleString()}),(0,r.jsx)(u.y,{dataKey:"value",fill:h,radius:[0,4,4,0]})]})})})}},20467:(e,t,n)=>{"use strict";function r(e){let t=null!=e?e:0;return t>=1e6?"".concat((t/1e6).toFixed(2),"M"):t>=1e3?"".concat((t/1e3).toFixed(1),"K"):t.toLocaleString()}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return null==e?"Unknown":new Intl.NumberFormat("en-US",{style:"currency",currency:t,maximumFractionDigits:e<1?4:2}).format(e)}function a(e){if(!e)return"Unknown";let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function s(e){if(!e)return"Unknown";let t=new Date("string"==typeof e?"".concat(e,"T00:00:00"):e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(t)}function i(e){if(!e||e<0)return"Unknown";let t=Math.round(e/1e3);if(t<60)return"".concat(t,"s");let n=Math.round(t/60);return n<60?"".concat(n,"m"):"".concat((n/60).toFixed(1),"h")}n.d(t,{Yq:()=>a,_y:()=>r,a3:()=>i,sL:()=>s,vv:()=>o})},23050:(e,t,n)=>{"use strict";n.d(t,{TrendChart:()=>h});var r=n(95155),o=n(12115),a=n(26991),s=n(73850),i=n(68425),c=n(47734),l=n(73697),u=n(23508),d=n(77568),m=n(20467),f=n(97003);function h(e){let{data:t,metric:n,color:h="#0f766e"}=e,[k,g]=(0,o.useState)("daily"),p=(0,o.useMemo)(()=>{let e=new Map;return t.forEach(t=>{var n;let r=function(e,t){let n=new Date("".concat(e,"T00:00:00"));if("monthly"===t)return"".concat(n.getFullYear(),"-").concat(String(n.getMonth()+1).padStart(2,"0"),"-01");if("weekly"===t){let e=n.getDay()||7;return n.setDate(n.getDate()-e+1),n.toISOString().slice(0,10)}return e}(t.date,k),o=null!=(n=e.get(r))?n:{date:r,totalTokens:0,inputTokens:0,outputTokens:0,cachedTokens:0,reasoningTokens:0,cost:0};o.totalTokens+=t.totalTokens,o.inputTokens+=t.inputTokens,o.outputTokens+=t.outputTokens,o.cachedTokens+=t.cachedTokens,o.reasoningTokens+=t.reasoningTokens,o.cost+=t.cost,e.set(r,o)}),Array.from(e.values()).sort((e,t)=>e.date.localeCompare(t.date))},[t,k]);return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"flex flex-wrap gap-2",children:["daily","weekly","monthly"].map(e=>(0,r.jsx)(f.$,{size:"sm",variant:k===e?"default":"outline",onClick:()=>g(e),children:e[0].toUpperCase()+e.slice(1)},e))}),(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(a.u,{width:"100%",height:"100%",children:(0,r.jsxs)(s.Q,{data:p,margin:{left:0,right:8,top:8,bottom:0},children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("linearGradient",{id:"trend-".concat(n),x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:h,stopOpacity:.35}),(0,r.jsx)("stop",{offset:"95%",stopColor:h,stopOpacity:.02})]})}),(0,r.jsx)(i.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(c.W,{dataKey:"date",tickFormatter:m.sL,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(l.h,{tick:{fontSize:12},stroke:"#786f65",tickFormatter:e=>"cost"===n?"$".concat(Number(e).toFixed(0)):(0,m._y)(Number(e))}),(0,r.jsx)(u.m,{formatter:e=>"cost"===n?(0,m.vv)(Number(e)):"".concat((0,m._y)(Number(e))," tokens"),labelFormatter:m.sL}),(0,r.jsx)(d.G,{type:"monotone",dataKey:n,stroke:h,fill:"url(#trend-".concat(n,")"),strokeWidth:2})]})})})]})}},44535:(e,t,n)=>{Promise.resolve().then(n.bind(n,5813)),Promise.resolve().then(n.bind(n,23050)),Promise.resolve().then(n.t.bind(n,52619,23))},64269:(e,t,n)=>{"use strict";n.d(t,{cn:()=>a});var r=n(2821),o=n(75889);function a(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.QP)((0,r.$)(t))}},97003:(e,t,n)=>{"use strict";n.d(t,{$:()=>l});var r=n(95155),o=n(12115),a=n(46673),s=n(83101),i=n(64269);let c=(0,s.F)("inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/90",outline:"border bg-card hover:bg-muted",ghost:"hover:bg-muted",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90"},size:{default:"h-9 px-3",sm:"h-8 px-2.5 text-xs",lg:"h-10 px-4",icon:"h-9 w-9 px-0"}},defaultVariants:{variant:"default",size:"default"}}),l=o.forwardRef((e,t)=>{let{className:n,variant:o,size:s,asChild:l=!1,...u}=e,d=l?a.DX:"button";return(0,r.jsx)(d,{className:(0,i.cn)(c({variant:o,size:s,className:n})),ref:t,...u})});l.displayName="Button"}},e=>{e.O(0,[125,938,619,850,441,255,358],()=>e(e.s=44535)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[70,177,295,302,344,550,606,620,627,635,949],{84441:()=>{}},_=>{_.O(0,[441,255,358],()=>_(_.s=84441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[907],{33789:(e,r,t)=>{"use strict";t.d(r,{p:()=>i});var n=t(95155),s=t(12115),a=t(64269);let i=s.forwardRef((e,r)=>{let{className:t,type:s,...i}=e;return(0,n.jsx)("input",{type:s,className:(0,a.cn)("flex h-9 w-full rounded-md border bg-card px-3 py-1 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",t),ref:r,...i})});i.displayName="Input"},34941:(e,r,t)=>{Promise.resolve().then(t.bind(t,40675))},40675:(e,r,t)=>{"use strict";t.d(r,{PricingSettings:()=>h});var n=t(95155),s=t(12115),a=t(71847);let i=(0,a.A)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]),c=(0,a.A)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);var o=t(97003),l=t(83209),d=t(33789),u=t(90235),p=t(96633);function m(e){return null==e?"":String(e)}function h(e){let{initialRows:r}=e,[t,a]=(0,s.useState)(r),[h,x]=(0,s.useTransition)(),[v,f]=(0,s.useState)("");function g(e,r){a(t=>t.map((t,n)=>n===e?{...t,...r}:t))}return(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)(l.Zp,{children:[(0,n.jsxs)(l.aR,{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)(l.ZB,{children:"Model Pricing"}),(0,n.jsx)(l.BT,{children:"Prices are per 1M tokens. Seed values are editable placeholders."})]}),(0,n.jsxs)(o.$,{variant:"outline",onClick:function(){a(e=>[{id:"new-".concat(Date.now()),providerId:"custom",provider:"Custom",providerName:"Custom",model:"",inputTokenPrice:null,outputTokenPrice:null,cachedInputTokenPrice:null,currency:"USD",effectiveFrom:null},...e])},children:[(0,n.jsx)(i,{className:"h-4 w-4"}),"Add model"]})]}),(0,n.jsxs)(l.Wu,{className:"table-scroll",children:[(0,n.jsxs)(p.XI,{children:[(0,n.jsx)(p.A0,{children:(0,n.jsxs)(p.Hj,{children:[(0,n.jsx)(p.nd,{children:"Provider ID"}),(0,n.jsx)(p.nd,{children:"Provider"}),(0,n.jsx)(p.nd,{children:"Model"}),(0,n.jsx)(p.nd,{children:"Input / 1M"}),(0,n.jsx)(p.nd,{children:"Output / 1M"}),(0,n.jsx)(p.nd,{children:"Cached input / 1M"}),(0,n.jsx)(p.nd,{children:"Currency"}),(0,n.jsx)(p.nd,{})]})}),(0,n.jsx)(p.BF,{children:t.map((e,r)=>{var t;return(0,n.jsxs)(p.Hj,{children:[(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{value:e.providerId,onChange:e=>g(r,{providerId:e.target.value})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{value:null!=(t=e.providerName)?t:e.provider,onChange:e=>g(r,{providerName:e.target.value})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{value:e.model,onChange:e=>g(r,{model:e.target.value})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{inputMode:"decimal",value:m(e.inputTokenPrice),onChange:e=>g(r,{inputTokenPrice:""===e.target.value?null:Number(e.target.value)})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{inputMode:"decimal",value:m(e.outputTokenPrice),onChange:e=>g(r,{outputTokenPrice:""===e.target.value?null:Number(e.target.value)})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{inputMode:"decimal",value:m(e.cachedInputTokenPrice),onChange:e=>g(r,{cachedInputTokenPrice:""===e.target.value?null:Number(e.target.value)})})}),(0,n.jsx)(p.nA,{children:(0,n.jsx)(d.p,{value:e.currency,onChange:e=>g(r,{currency:e.target.value})})}),(0,n.jsx)(p.nA,{children:(0,n.jsxs)(o.$,{size:"sm",onClick:()=>{x(async()=>{var r;if(f(""),!(await fetch("/api/prices",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({providerId:e.providerId,providerName:null!=(r=e.providerName)?r:e.provider,model:e.model,inputTokenPrice:e.inputTokenPrice,outputTokenPrice:e.outputTokenPrice,cachedInputTokenPrice:e.cachedInputTokenPrice,currency:e.currency})})).ok)return void f("Price save failed.");a(await fetch("/api/prices").then(e=>e.json())),f("Price saved.")})},disabled:h||!e.model,children:[(0,n.jsx)(c,{className:"h-4 w-4"}),"Save"]})})]},e.id)})})]}),v?(0,n.jsx)("div",{className:"mt-3 text-sm text-muted-foreground",children:v}):null]})]}),(0,n.jsxs)(l.Zp,{children:[(0,n.jsxs)(l.aR,{children:[(0,n.jsx)(l.ZB,{children:"Cost Formula"}),(0,n.jsx)(l.BT,{children:"Costs are computed per interaction and then aggregated."})]}),(0,n.jsxs)(l.Wu,{className:"space-y-3 text-sm text-muted-foreground",children:[(0,n.jsx)(u.J,{children:"Formula"}),(0,n.jsx)("div",{className:"rounded-md border bg-muted/40 p-3 font-mono text-xs text-foreground",children:"input * inputPrice + output * outputPrice + cacheRead * cachedInputPrice + cacheWrite * inputPrice"}),(0,n.jsx)("p",{children:"TokenTrace separates exact token counts from estimated counts. Unknown model prices produce unknown costs."})]})]})]})}},64269:(e,r,t)=>{"use strict";t.d(r,{cn:()=>a});var n=t(2821),s=t(75889);function a(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return(0,s.QP)((0,n.$)(r))}},71847:(e,r,t)=>{"use strict";t.d(r,{A:()=>c});var n=t(12115);let s=function(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return r.filter((e,r,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===r).join(" ").trim()};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.forwardRef)((e,r)=>{let{color:t="currentColor",size:i=24,strokeWidth:c=2,absoluteStrokeWidth:o,className:l="",children:d,iconNode:u,...p}=e;return(0,n.createElement)("svg",{ref:r,...a,width:i,height:i,stroke:t,strokeWidth:o?24*Number(c)/Number(i):c,className:s("lucide",l),...p},[...u.map(e=>{let[r,t]=e;return(0,n.createElement)(r,t)}),...Array.isArray(d)?d:[d]])}),c=(e,r)=>{let t=(0,n.forwardRef)((t,a)=>{let{className:c,...o}=t;return(0,n.createElement)(i,{ref:a,iconNode:r,className:s("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),c),...o})});return t.displayName="".concat(e),t}},83209:(e,r,t)=>{"use strict";t.d(r,{BT:()=>o,Wu:()=>l,ZB:()=>c,Zp:()=>a,aR:()=>i});var n=t(95155);t(12115);var s=t(64269);function a(e){let{className:r,...t}=e;return(0,n.jsx)("div",{className:(0,s.cn)("rounded-lg border bg-card text-card-foreground",r),...t})}function i(e){let{className:r,...t}=e;return(0,n.jsx)("div",{className:(0,s.cn)("flex flex-col gap-1.5 p-4",r),...t})}function c(e){let{className:r,...t}=e;return(0,n.jsx)("h3",{className:(0,s.cn)("text-sm font-semibold",r),...t})}function o(e){let{className:r,...t}=e;return(0,n.jsx)("p",{className:(0,s.cn)("text-sm text-muted-foreground",r),...t})}function l(e){let{className:r,...t}=e;return(0,n.jsx)("div",{className:(0,s.cn)("p-4 pt-0",r),...t})}},90235:(e,r,t)=>{"use strict";t.d(r,{J:()=>a});var n=t(95155);t(12115);var s=t(64269);function a(e){let{className:r,...t}=e;return(0,n.jsx)("label",{className:(0,s.cn)("text-sm font-medium leading-none",r),...t})}},96633:(e,r,t)=>{"use strict";t.d(r,{A0:()=>i,BF:()=>c,Hj:()=>o,XI:()=>a,nA:()=>d,nd:()=>l});var n=t(95155);t(12115);var s=t(64269);function a(e){let{className:r,...t}=e;return(0,n.jsx)("table",{className:(0,s.cn)("w-full caption-bottom text-sm",r),...t})}function i(e){let{className:r,...t}=e;return(0,n.jsx)("thead",{className:(0,s.cn)("[&_tr]:border-b",r),...t})}function c(e){let{className:r,...t}=e;return(0,n.jsx)("tbody",{className:(0,s.cn)("[&_tr:last-child]:border-0",r),...t})}function o(e){let{className:r,...t}=e;return(0,n.jsx)("tr",{className:(0,s.cn)("border-b transition-colors hover:bg-muted/50",r),...t})}function l(e){let{className:r,...t}=e;return(0,n.jsx)("th",{className:(0,s.cn)("h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground",r),...t})}function d(e){let{className:r,...t}=e;return(0,n.jsx)("td",{className:(0,s.cn)("p-3 align-middle",r),...t})}},97003:(e,r,t)=>{"use strict";t.d(r,{$:()=>l});var n=t(95155),s=t(12115),a=t(46673),i=t(83101),c=t(64269);let o=(0,i.F)("inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/90",outline:"border bg-card hover:bg-muted",ghost:"hover:bg-muted",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90"},size:{default:"h-9 px-3",sm:"h-8 px-2.5 text-xs",lg:"h-10 px-4",icon:"h-9 w-9 px-0"}},defaultVariants:{variant:"default",size:"default"}}),l=s.forwardRef((e,r)=>{let{className:t,variant:s,size:i,asChild:l=!1,...d}=e,u=l?a.DX:"button";return(0,n.jsx)(u,{className:(0,c.cn)(o({variant:s,size:i,className:t})),ref:r,...d})});l.displayName="Button"}},e=>{e.O(0,[125,441,255,358],()=>e(e.s=34941)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[893,974],{5813:(e,t,n)=>{"use strict";n.d(t,{RankBarChart:()=>m});var r=n(95155),o=n(26991),a=n(98128),s=n(68425),i=n(47734),c=n(73697),l=n(23508),u=n(30757),d=n(20467);function m(e){let{data:t,nameKey:n,valueKey:m,mode:f="tokens",color:h="#ea580c"}=e,k=t.slice(0,8).map(e=>{var t,r;return{name:String(null!=(t=e[n])?t:"Unknown"),value:Number(null!=(r=e[m])?r:0)}}).filter(e=>e.value>0);return(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(o.u,{width:"100%",height:"100%",children:(0,r.jsxs)(a.E,{data:k,layout:"vertical",margin:{left:16,right:12,top:8,bottom:0},children:[(0,r.jsx)(s.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(i.W,{type:"number",tick:{fontSize:12},stroke:"#786f65",tickFormatter:e=>"cost"===f?"$".concat(Number(e).toFixed(0)):(0,d._y)(Number(e))}),(0,r.jsx)(c.h,{dataKey:"name",type:"category",width:120,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(l.m,{formatter:e=>"cost"===f?(0,d.vv)(Number(e)):"tokens"===f?"".concat((0,d._y)(Number(e))," tokens"):Number(e).toLocaleString()}),(0,r.jsx)(u.y,{dataKey:"value",fill:h,radius:[0,4,4,0]})]})})})}},20467:(e,t,n)=>{"use strict";function r(e){let t=null!=e?e:0;return t>=1e6?"".concat((t/1e6).toFixed(2),"M"):t>=1e3?"".concat((t/1e3).toFixed(1),"K"):t.toLocaleString()}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return null==e?"Unknown":new Intl.NumberFormat("en-US",{style:"currency",currency:t,maximumFractionDigits:e<1?4:2}).format(e)}function a(e){if(!e)return"Unknown";let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function s(e){if(!e)return"Unknown";let t=new Date("string"==typeof e?"".concat(e,"T00:00:00"):e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(t)}function i(e){if(!e||e<0)return"Unknown";let t=Math.round(e/1e3);if(t<60)return"".concat(t,"s");let n=Math.round(t/60);return n<60?"".concat(n,"m"):"".concat((n/60).toFixed(1),"h")}n.d(t,{Yq:()=>a,_y:()=>r,a3:()=>i,sL:()=>s,vv:()=>o})},23050:(e,t,n)=>{"use strict";n.d(t,{TrendChart:()=>h});var r=n(95155),o=n(12115),a=n(26991),s=n(73850),i=n(68425),c=n(47734),l=n(73697),u=n(23508),d=n(77568),m=n(20467),f=n(97003);function h(e){let{data:t,metric:n,color:h="#0f766e"}=e,[k,g]=(0,o.useState)("daily"),p=(0,o.useMemo)(()=>{let e=new Map;return t.forEach(t=>{var n;let r=function(e,t){let n=new Date("".concat(e,"T00:00:00"));if("monthly"===t)return"".concat(n.getFullYear(),"-").concat(String(n.getMonth()+1).padStart(2,"0"),"-01");if("weekly"===t){let e=n.getDay()||7;return n.setDate(n.getDate()-e+1),n.toISOString().slice(0,10)}return e}(t.date,k),o=null!=(n=e.get(r))?n:{date:r,totalTokens:0,inputTokens:0,outputTokens:0,cachedTokens:0,reasoningTokens:0,cost:0};o.totalTokens+=t.totalTokens,o.inputTokens+=t.inputTokens,o.outputTokens+=t.outputTokens,o.cachedTokens+=t.cachedTokens,o.reasoningTokens+=t.reasoningTokens,o.cost+=t.cost,e.set(r,o)}),Array.from(e.values()).sort((e,t)=>e.date.localeCompare(t.date))},[t,k]);return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"flex flex-wrap gap-2",children:["daily","weekly","monthly"].map(e=>(0,r.jsx)(f.$,{size:"sm",variant:k===e?"default":"outline",onClick:()=>g(e),children:e[0].toUpperCase()+e.slice(1)},e))}),(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(a.u,{width:"100%",height:"100%",children:(0,r.jsxs)(s.Q,{data:p,margin:{left:0,right:8,top:8,bottom:0},children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("linearGradient",{id:"trend-".concat(n),x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:h,stopOpacity:.35}),(0,r.jsx)("stop",{offset:"95%",stopColor:h,stopOpacity:.02})]})}),(0,r.jsx)(i.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(c.W,{dataKey:"date",tickFormatter:m.sL,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(l.h,{tick:{fontSize:12},stroke:"#786f65",tickFormatter:e=>"cost"===n?"$".concat(Number(e).toFixed(0)):(0,m._y)(Number(e))}),(0,r.jsx)(u.m,{formatter:e=>"cost"===n?(0,m.vv)(Number(e)):"".concat((0,m._y)(Number(e))," tokens"),labelFormatter:m.sL}),(0,r.jsx)(d.G,{type:"monotone",dataKey:n,stroke:h,fill:"url(#trend-".concat(n,")"),strokeWidth:2})]})})})]})}},44535:(e,t,n)=>{Promise.resolve().then(n.bind(n,5813)),Promise.resolve().then(n.bind(n,23050)),Promise.resolve().then(n.t.bind(n,52619,23))},64269:(e,t,n)=>{"use strict";n.d(t,{cn:()=>a});var r=n(2821),o=n(75889);function a(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.QP)((0,r.$)(t))}},97003:(e,t,n)=>{"use strict";n.d(t,{$:()=>l});var r=n(95155),o=n(12115),a=n(46673),s=n(83101),i=n(64269);let c=(0,s.F)("inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/90",outline:"border bg-card hover:bg-muted",ghost:"hover:bg-muted",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90"},size:{default:"h-9 px-3",sm:"h-8 px-2.5 text-xs",lg:"h-10 px-4",icon:"h-9 w-9 px-0"}},defaultVariants:{variant:"default",size:"default"}}),l=o.forwardRef((e,t)=>{let{className:n,variant:o,size:s,asChild:l=!1,...u}=e,d=l?a.DX:"button";return(0,r.jsx)(d,{className:(0,i.cn)(c({variant:o,size:s,className:n})),ref:t,...u})});l.displayName="Button"}},e=>{e.O(0,[125,938,619,850,441,255,358],()=>e(e.s=44535)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[898],{20467:(e,t,r)=>{"use strict";function n(e){let t=null!=e?e:0;return t>=1e6?"".concat((t/1e6).toFixed(2),"M"):t>=1e3?"".concat((t/1e3).toFixed(1),"K"):t.toLocaleString()}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return null==e?"Unknown":new Intl.NumberFormat("en-US",{style:"currency",currency:t,maximumFractionDigits:e<1?4:2}).format(e)}function l(e){if(!e)return"Unknown";let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function a(e){if(!e)return"Unknown";let t=new Date("string"==typeof e?"".concat(e,"T00:00:00"):e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(t)}function o(e){if(!e||e<0)return"Unknown";let t=Math.round(e/1e3);if(t<60)return"".concat(t,"s");let r=Math.round(t/60);return r<60?"".concat(r,"m"):"".concat((r/60).toFixed(1),"h")}r.d(t,{Yq:()=>l,_y:()=>n,a3:()=>o,sL:()=>a,vv:()=>s})},33055:(e,t,r)=>{"use strict";r.d(t,{SessionExplorer:()=>f});var n=r(95155),s=r(12115),l=r(71847);let a=(0,l.A)("Filter",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]),o=(0,l.A)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);var i=r(20467),c=r(67812),d=r(97003),u=r(83209),m=r(33789),x=r(90235),h=r(96633);function f(e){let{sessions:t,initialProject:r}=e,[l,f]=(0,s.useState)(""),[p,j]=(0,s.useState)("all"),[g,v]=(0,s.useState)("all"),[b,y]=(0,s.useState)(null!=r?r:"all"),[N,w]=(0,s.useState)("all"),[k,A]=(0,s.useState)(""),[F,S]=(0,s.useState)(""),[C,T]=(0,s.useState)(!1),M=(0,s.useMemo)(()=>Array.from(new Set(t.map(e=>e.tool))).sort(),[t]),D=(0,s.useMemo)(()=>Array.from(new Set(t.flatMap(e=>e.models.split(",").map(e=>e.trim()).filter(Boolean)))).sort(),[t]),E=(0,s.useMemo)(()=>Array.from(new Set(t.map(e=>e.project))).sort(),[t]),B=(0,s.useMemo)(()=>{let e=t.map(e=>{var t;return null!=(t=e.cost)?t:0}).filter(e=>e>0).sort((e,t)=>e-t);return e.length?e[Math.floor(.85*e.length)]:0},[t]),U=(0,s.useMemo)(()=>{let e=k?new Date("".concat(k,"T00:00:00")).getTime():null,r=F?new Date("".concat(F,"T23:59:59")).getTime():null,n=l.toLowerCase();return t.filter(t=>{var s;return("all"===p||t.tool===p)&&("all"===g||!!t.models.split(",").map(e=>e.trim()).includes(g))&&("all"===b||t.project===b)&&("exact"!==N||!t.estimatedTokens)&&("estimated"!==N||!!t.estimatedTokens)&&(!e||!!t.startedAt&&!(t.startedAt<e))&&(!r||!!t.startedAt&&!(t.startedAt>r))&&(!C||!((null!=(s=t.cost)?s:0)<B))&&(!n||[t.title,t.sourceFile,t.tool,t.project,t.models].join(" ").toLowerCase().includes(n))})},[N,k,C,B,g,b,l,t,F,p]);return(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)(u.Zp,{children:[(0,n.jsxs)(u.aR,{children:[(0,n.jsxs)(u.ZB,{className:"flex items-center gap-2",children:[(0,n.jsx)(a,{className:"h-4 w-4"}),"Filters"]}),(0,n.jsx)(u.BT,{children:"Search by date, tool, model, project, estimated status, or high cost."})]}),(0,n.jsx)(u.Wu,{children:(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-4",children:[(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"query",children:"Search"}),(0,n.jsx)(m.p,{id:"query",value:l,onChange:e=>f(e.target.value),placeholder:"Title, file, model"})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"tool",children:"Tool"}),(0,n.jsxs)("select",{id:"tool",className:"h-9 w-full rounded-md border bg-card px-3 text-sm",value:p,onChange:e=>j(e.target.value),children:[(0,n.jsx)("option",{value:"all",children:"All tools"}),M.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"model",children:"Model"}),(0,n.jsxs)("select",{id:"model",className:"h-9 w-full rounded-md border bg-card px-3 text-sm",value:g,onChange:e=>v(e.target.value),children:[(0,n.jsx)("option",{value:"all",children:"All models"}),D.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"project",children:"Project"}),(0,n.jsxs)("select",{id:"project",className:"h-9 w-full rounded-md border bg-card px-3 text-sm",value:b,onChange:e=>y(e.target.value),children:[(0,n.jsx)("option",{value:"all",children:"All projects"}),E.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"from",children:"From"}),(0,n.jsx)(m.p,{id:"from",type:"date",value:k,onChange:e=>A(e.target.value)})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"to",children:"To"}),(0,n.jsx)(m.p,{id:"to",type:"date",value:F,onChange:e=>S(e.target.value)})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)(x.J,{htmlFor:"exact",children:"Token source"}),(0,n.jsxs)("select",{id:"exact",className:"h-9 w-full rounded-md border bg-card px-3 text-sm",value:N,onChange:e=>w(e.target.value),children:[(0,n.jsx)("option",{value:"all",children:"Exact and estimated"}),(0,n.jsx)("option",{value:"exact",children:"Exact only"}),(0,n.jsx)("option",{value:"estimated",children:"Estimated only"})]})]}),(0,n.jsx)("div",{className:"flex items-end",children:(0,n.jsxs)("label",{className:"flex h-9 items-center gap-2 rounded-md border bg-card px-3 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:C,onChange:e=>T(e.target.checked)}),"High-cost sessions"]})})]})})]}),(0,n.jsxs)(u.Zp,{children:[(0,n.jsxs)(u.aR,{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)(u.ZB,{children:"Sessions"}),(0,n.jsxs)(u.BT,{children:[U.length.toLocaleString()," sessions match the current filters."]})]}),(0,n.jsx)("div",{className:"flex gap-2",children:(0,n.jsx)(d.$,{asChild:!0,variant:"outline",size:"sm",children:(0,n.jsxs)("a",{href:"/api/export?type=sessions",children:[(0,n.jsx)(o,{className:"h-4 w-4"}),"CSV"]})})})]}),(0,n.jsx)(u.Wu,{className:"table-scroll",children:(0,n.jsxs)(h.XI,{children:[(0,n.jsx)(h.A0,{children:(0,n.jsxs)(h.Hj,{children:[(0,n.jsx)(h.nd,{children:"Date"}),(0,n.jsx)(h.nd,{children:"Tool"}),(0,n.jsx)(h.nd,{children:"Project"}),(0,n.jsx)(h.nd,{children:"Model"}),(0,n.jsx)(h.nd,{children:"Tokens"}),(0,n.jsx)(h.nd,{children:"Cost"}),(0,n.jsx)(h.nd,{children:"Duration"}),(0,n.jsx)(h.nd,{children:"Flag"}),(0,n.jsx)(h.nd,{children:"Source file"})]})}),(0,n.jsx)(h.BF,{children:U.map(e=>(0,n.jsxs)(h.Hj,{children:[(0,n.jsx)(h.nA,{children:(0,i.Yq)(e.startedAt)}),(0,n.jsx)(h.nA,{className:"font-medium",children:e.tool}),(0,n.jsx)(h.nA,{children:e.project}),(0,n.jsx)(h.nA,{className:"max-w-44 truncate",children:e.models}),(0,n.jsx)(h.nA,{children:(0,i._y)(e.totalTokens)}),(0,n.jsx)(h.nA,{children:(0,i.vv)(e.cost)}),(0,n.jsx)(h.nA,{children:(0,i.a3)(e.durationMs)}),(0,n.jsx)(h.nA,{children:(0,n.jsx)(c.E,{variant:"exact"===e.tokenConfidence?"success":"unknown"===e.tokenConfidence?"destructive":"warning",children:e.tokenConfidence})}),(0,n.jsx)(h.nA,{className:"max-w-72 truncate",children:e.sourceFile})]},e.id))})]})})]})]})}},33789:(e,t,r)=>{"use strict";r.d(t,{p:()=>a});var n=r(95155),s=r(12115),l=r(64269);let a=s.forwardRef((e,t)=>{let{className:r,type:s,...a}=e;return(0,n.jsx)("input",{type:s,className:(0,l.cn)("flex h-9 w-full rounded-md border bg-card px-3 py-1 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",r),ref:t,...a})});a.displayName="Input"},50381:(e,t,r)=>{Promise.resolve().then(r.bind(r,33055))},64269:(e,t,r)=>{"use strict";r.d(t,{cn:()=>l});var n=r(2821),s=r(75889);function l(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,n.$)(t))}},67812:(e,t,r)=>{"use strict";r.d(t,{E:()=>o});var n=r(95155);r(12115);var s=r(83101),l=r(64269);let a=(0,s.F)("inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-muted text-muted-foreground",outline:"text-foreground",warning:"border-amber-300 bg-amber-50 text-amber-800",success:"border-emerald-300 bg-emerald-50 text-emerald-800",destructive:"border-red-300 bg-red-50 text-red-800"}},defaultVariants:{variant:"default"}});function o(e){let{className:t,variant:r,...s}=e;return(0,n.jsx)("div",{className:(0,l.cn)(a({variant:r}),t),...s})}},71847:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(12115);let s=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()};var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,n.forwardRef)((e,t)=>{let{color:r="currentColor",size:a=24,strokeWidth:o=2,absoluteStrokeWidth:i,className:c="",children:d,iconNode:u,...m}=e;return(0,n.createElement)("svg",{ref:t,...l,width:a,height:a,stroke:r,strokeWidth:i?24*Number(o)/Number(a):o,className:s("lucide",c),...m},[...u.map(e=>{let[t,r]=e;return(0,n.createElement)(t,r)}),...Array.isArray(d)?d:[d]])}),o=(e,t)=>{let r=(0,n.forwardRef)((r,l)=>{let{className:o,...i}=r;return(0,n.createElement)(a,{ref:l,iconNode:t,className:s("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),o),...i})});return r.displayName="".concat(e),r}},83209:(e,t,r)=>{"use strict";r.d(t,{BT:()=>i,Wu:()=>c,ZB:()=>o,Zp:()=>l,aR:()=>a});var n=r(95155);r(12115);var s=r(64269);function l(e){let{className:t,...r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("rounded-lg border bg-card text-card-foreground",t),...r})}function a(e){let{className:t,...r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("flex flex-col gap-1.5 p-4",t),...r})}function o(e){let{className:t,...r}=e;return(0,n.jsx)("h3",{className:(0,s.cn)("text-sm font-semibold",t),...r})}function i(e){let{className:t,...r}=e;return(0,n.jsx)("p",{className:(0,s.cn)("text-sm text-muted-foreground",t),...r})}function c(e){let{className:t,...r}=e;return(0,n.jsx)("div",{className:(0,s.cn)("p-4 pt-0",t),...r})}},90235:(e,t,r)=>{"use strict";r.d(t,{J:()=>l});var n=r(95155);r(12115);var s=r(64269);function l(e){let{className:t,...r}=e;return(0,n.jsx)("label",{className:(0,s.cn)("text-sm font-medium leading-none",t),...r})}},96633:(e,t,r)=>{"use strict";r.d(t,{A0:()=>a,BF:()=>o,Hj:()=>i,XI:()=>l,nA:()=>d,nd:()=>c});var n=r(95155);r(12115);var s=r(64269);function l(e){let{className:t,...r}=e;return(0,n.jsx)("table",{className:(0,s.cn)("w-full caption-bottom text-sm",t),...r})}function a(e){let{className:t,...r}=e;return(0,n.jsx)("thead",{className:(0,s.cn)("[&_tr]:border-b",t),...r})}function o(e){let{className:t,...r}=e;return(0,n.jsx)("tbody",{className:(0,s.cn)("[&_tr:last-child]:border-0",t),...r})}function i(e){let{className:t,...r}=e;return(0,n.jsx)("tr",{className:(0,s.cn)("border-b transition-colors hover:bg-muted/50",t),...r})}function c(e){let{className:t,...r}=e;return(0,n.jsx)("th",{className:(0,s.cn)("h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground",t),...r})}function d(e){let{className:t,...r}=e;return(0,n.jsx)("td",{className:(0,s.cn)("p-3 align-middle",t),...r})}},97003:(e,t,r)=>{"use strict";r.d(t,{$:()=>c});var n=r(95155),s=r(12115),l=r(46673),a=r(83101),o=r(64269);let i=(0,a.F)("inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/90",outline:"border bg-card hover:bg-muted",ghost:"hover:bg-muted",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90"},size:{default:"h-9 px-3",sm:"h-8 px-2.5 text-xs",lg:"h-10 px-4",icon:"h-9 w-9 px-0"}},defaultVariants:{variant:"default",size:"default"}}),c=s.forwardRef((e,t)=>{let{className:r,variant:s,size:a,asChild:c=!1,...d}=e,u=c?l.DX:"button";return(0,n.jsx)(u,{className:(0,o.cn)(i({variant:s,size:a,className:r})),ref:t,...d})});c.displayName="Button"}},e=>{e.O(0,[125,441,255,358],()=>e(e.s=50381)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[662],{26833:(e,t,s)=>{Promise.resolve().then(s.bind(s,36918))},33789:(e,t,s)=>{"use strict";s.d(t,{p:()=>d});var r=s(95155),a=s(12115),n=s(64269);let d=a.forwardRef((e,t)=>{let{className:s,type:a,...d}=e;return(0,r.jsx)("input",{type:a,className:(0,n.cn)("flex h-9 w-full rounded-md border bg-card px-3 py-1 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",s),ref:t,...d})});d.displayName="Input"},36918:(e,t,s)=>{"use strict";s.d(t,{SettingsPanel:()=>p});var r=s(95155),a=s(12115),n=s(71847);let d=(0,n.A)("FolderPlus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]),i=(0,n.A)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]),l=(0,n.A)("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]),o=(0,n.A)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);var c=s(97003),u=s(83209),m=s(33789),x=s(90235),h=s(67812);function p(e){let{initialSettings:t}=e,[s,n]=(0,a.useState)(t.customFolders),[p,f]=(0,a.useState)(t.storeRawMessageContent),[g,v]=(0,a.useState)(""),[b,j]=(0,a.useState)(!1),[y,N]=(0,a.useState)(""),[w,k]=(0,a.useState)(null),[S,C]=(0,a.useTransition)();return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(u.Zp,{children:[(0,r.jsxs)(u.aR,{children:[(0,r.jsx)(u.ZB,{children:"Local Storage"}),(0,r.jsx)(u.BT,{children:"SQLite database location and raw-content controls."})]}),(0,r.jsxs)(u.Wu,{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)(x.J,{children:"Database path"}),(0,r.jsx)("div",{className:"rounded-md border bg-muted/40 p-3 font-mono text-xs",children:t.databasePath})]}),(0,r.jsxs)("label",{className:"flex items-center gap-3 rounded-md border bg-card p-3 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:p,onChange:e=>f(e.target.checked)}),"Store raw message content",(0,r.jsx)(h.E,{variant:p?"warning":"success",children:p?"On":"Default off"})]})]})]}),(0,r.jsxs)(u.Zp,{children:[(0,r.jsxs)(u.aR,{children:[(0,r.jsx)(u.ZB,{children:"Custom Folders"}),(0,r.jsx)(u.BT,{children:"Add folders outside the default Claude, Codex, OpenAI, and project paths."})]}),(0,r.jsxs)(u.Wu,{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,r.jsx)(m.p,{value:g,onChange:e=>v(e.target.value),placeholder:"~/Library/Logs/my-ai-cli"}),(0,r.jsxs)(c.$,{type:"button",variant:"outline",onClick:function(){let e=g.trim();e&&(s.includes(e)||n(t=>[...t,e]),v(""))},children:[(0,r.jsx)(d,{className:"h-4 w-4"}),"Add"]})]}),(0,r.jsx)("div",{className:"space-y-2",children:s.length?s.map(e=>(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-md border bg-muted/40 p-2",children:[(0,r.jsx)("span",{className:"min-w-0 truncate font-mono text-xs",children:e}),(0,r.jsx)(c.$,{type:"button",size:"sm",variant:"ghost",onClick:()=>{n(t=>t.filter(t=>t!==e))},children:"Remove"})]},e)):(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No custom folders configured."})})]})]}),(0,r.jsxs)(u.Zp,{children:[(0,r.jsxs)(u.aR,{children:[(0,r.jsx)(u.ZB,{children:"Scan Controls"}),(0,r.jsx)(u.BT,{children:"Run discovery and import locally. Duplicate files are skipped by default."})]}),(0,r.jsxs)(u.Wu,{className:"space-y-4",children:[(0,r.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:b,onChange:e=>j(e.target.checked)}),"Force rescan files with previously imported hashes"]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,r.jsxs)(c.$,{onClick:function(){C(async()=>{N(""),N((await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({customFolders:s,storeRawMessageContent:p})})).ok?"Settings saved.":"Settings save failed.")})},disabled:S,children:[(0,r.jsx)(i,{className:"h-4 w-4"}),"Save settings"]}),(0,r.jsxs)(c.$,{onClick:function(){C(async()=>{N("Scanning local files..."),k(null),await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({customFolders:s,storeRawMessageContent:p})});let e=await fetch("/api/scan",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({force:b})});k(await e.json()),N(e.ok?"Scan complete.":"Scan failed.")})},disabled:S,variant:"secondary",children:[(0,r.jsx)(l,{className:"h-4 w-4"}),"Scan now"]}),(0,r.jsxs)(c.$,{onClick:function(){window.confirm("Clear imported sessions, interactions, projects, and scan history?")&&C(async()=>{N((await fetch("/api/data",{method:"DELETE"})).ok?"Imported data cleared.":"Clear failed."),k(null)})},disabled:S,variant:"destructive",children:[(0,r.jsx)(o,{className:"h-4 w-4"}),"Clear imported data"]})]}),y?(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:y}):null,w?(0,r.jsxs)("div",{className:"grid gap-3 rounded-md border bg-muted/40 p-3 text-sm sm:grid-cols-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"Files scanned"}),(0,r.jsx)("div",{className:"font-semibold",children:w.filesScanned.toLocaleString()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"Records imported"}),(0,r.jsx)("div",{className:"font-semibold",children:w.recordsImported.toLocaleString()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"Warnings"}),(0,r.jsx)("div",{className:"font-semibold",children:w.warnings.length.toLocaleString()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"Errors"}),(0,r.jsx)("div",{className:"font-semibold",children:w.errors.length.toLocaleString()})]})]}):null]})]})]})}},64269:(e,t,s)=>{"use strict";s.d(t,{cn:()=>n});var r=s(2821),a=s(75889);function n(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,a.QP)((0,r.$)(t))}},67812:(e,t,s)=>{"use strict";s.d(t,{E:()=>i});var r=s(95155);s(12115);var a=s(83101),n=s(64269);let d=(0,a.F)("inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-muted text-muted-foreground",outline:"text-foreground",warning:"border-amber-300 bg-amber-50 text-amber-800",success:"border-emerald-300 bg-emerald-50 text-emerald-800",destructive:"border-red-300 bg-red-50 text-red-800"}},defaultVariants:{variant:"default"}});function i(e){let{className:t,variant:s,...a}=e;return(0,r.jsx)("div",{className:(0,n.cn)(d({variant:s}),t),...a})}},71847:(e,t,s)=>{"use strict";s.d(t,{A:()=>i});var r=s(12115);let a=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let d=(0,r.forwardRef)((e,t)=>{let{color:s="currentColor",size:d=24,strokeWidth:i=2,absoluteStrokeWidth:l,className:o="",children:c,iconNode:u,...m}=e;return(0,r.createElement)("svg",{ref:t,...n,width:d,height:d,stroke:s,strokeWidth:l?24*Number(i)/Number(d):i,className:a("lucide",o),...m},[...u.map(e=>{let[t,s]=e;return(0,r.createElement)(t,s)}),...Array.isArray(c)?c:[c]])}),i=(e,t)=>{let s=(0,r.forwardRef)((s,n)=>{let{className:i,...l}=s;return(0,r.createElement)(d,{ref:n,iconNode:t,className:a("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),i),...l})});return s.displayName="".concat(e),s}},83209:(e,t,s)=>{"use strict";s.d(t,{BT:()=>l,Wu:()=>o,ZB:()=>i,Zp:()=>n,aR:()=>d});var r=s(95155);s(12115);var a=s(64269);function n(e){let{className:t,...s}=e;return(0,r.jsx)("div",{className:(0,a.cn)("rounded-lg border bg-card text-card-foreground",t),...s})}function d(e){let{className:t,...s}=e;return(0,r.jsx)("div",{className:(0,a.cn)("flex flex-col gap-1.5 p-4",t),...s})}function i(e){let{className:t,...s}=e;return(0,r.jsx)("h3",{className:(0,a.cn)("text-sm font-semibold",t),...s})}function l(e){let{className:t,...s}=e;return(0,r.jsx)("p",{className:(0,a.cn)("text-sm text-muted-foreground",t),...s})}function o(e){let{className:t,...s}=e;return(0,r.jsx)("div",{className:(0,a.cn)("p-4 pt-0",t),...s})}},90235:(e,t,s)=>{"use strict";s.d(t,{J:()=>n});var r=s(95155);s(12115);var a=s(64269);function n(e){let{className:t,...s}=e;return(0,r.jsx)("label",{className:(0,a.cn)("text-sm font-medium leading-none",t),...s})}},97003:(e,t,s)=>{"use strict";s.d(t,{$:()=>o});var r=s(95155),a=s(12115),n=s(46673),d=s(83101),i=s(64269);let l=(0,d.F)("inline-flex h-9 items-center justify-center gap-2 whitespace-nowrap rounded-md px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/90",outline:"border bg-card hover:bg-muted",ghost:"hover:bg-muted",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90"},size:{default:"h-9 px-3",sm:"h-8 px-2.5 text-xs",lg:"h-10 px-4",icon:"h-9 w-9 px-0"}},defaultVariants:{variant:"default",size:"default"}}),o=a.forwardRef((e,t)=>{let{className:s,variant:a,size:d,asChild:o=!1,...c}=e,u=o?n.DX:"button";return(0,r.jsx)(u,{className:(0,i.cn)(l({variant:a,size:d,className:s})),ref:t,...c})});o.displayName="Button"}},e=>{e.O(0,[125,441,255,358],()=>e(e.s=26833)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[329,554],{2821:(t,e,n)=>{"use strict";function r(){for(var t,e,n=0,r="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=function t(e){var n,r,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(n=0;n<i;n++)e[n]&&(r=t(e[n]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}(t))&&(r&&(r+=" "),r+=e);return r}n.d(e,{$:()=>r,A:()=>o});let o=r},5813:(t,e,n)=>{"use strict";n.d(e,{RankBarChart:()=>f});var r=n(95155),o=n(26991),i=n(98128),a=n(68425),u=n(47734),c=n(73697),s=n(23508),l=n(30757),m=n(20467);function f(t){let{data:e,nameKey:n,valueKey:f,mode:d="tokens",color:h="#ea580c"}=t,k=e.slice(0,8).map(t=>{var e,r;return{name:String(null!=(e=t[n])?e:"Unknown"),value:Number(null!=(r=t[f])?r:0)}}).filter(t=>t.value>0);return(0,r.jsx)("div",{className:"h-72",children:(0,r.jsx)(o.u,{width:"100%",height:"100%",children:(0,r.jsxs)(i.E,{data:k,layout:"vertical",margin:{left:16,right:12,top:8,bottom:0},children:[(0,r.jsx)(a.d,{strokeDasharray:"3 3",stroke:"#e7ded3"}),(0,r.jsx)(u.W,{type:"number",tick:{fontSize:12},stroke:"#786f65",tickFormatter:t=>"cost"===d?"$".concat(Number(t).toFixed(0)):(0,m._y)(Number(t))}),(0,r.jsx)(c.h,{dataKey:"name",type:"category",width:120,tick:{fontSize:12},stroke:"#786f65"}),(0,r.jsx)(s.m,{formatter:t=>"cost"===d?(0,m.vv)(Number(t)):"tokens"===d?"".concat((0,m._y)(Number(t))," tokens"):Number(t).toLocaleString()}),(0,r.jsx)(l.y,{dataKey:"value",fill:h,radius:[0,4,4,0]})]})})})}},20467:(t,e,n)=>{"use strict";function r(t){let e=null!=t?t:0;return e>=1e6?"".concat((e/1e6).toFixed(2),"M"):e>=1e3?"".concat((e/1e3).toFixed(1),"K"):e.toLocaleString()}function o(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return null==t?"Unknown":new Intl.NumberFormat("en-US",{style:"currency",currency:e,maximumFractionDigits:t<1?4:2}).format(t)}function i(t){if(!t)return"Unknown";let e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function a(t){if(!t)return"Unknown";let e=new Date("string"==typeof t?"".concat(t,"T00:00:00"):t);return Number.isNaN(e.getTime())?"Unknown":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(e)}function u(t){if(!t||t<0)return"Unknown";let e=Math.round(t/1e3);if(e<60)return"".concat(e,"s");let n=Math.round(e/60);return n<60?"".concat(n,"m"):"".concat((n/60).toFixed(1),"h")}n.d(e,{Yq:()=>i,_y:()=>r,a3:()=>u,sL:()=>a,vv:()=>o})},81228:(t,e,n)=>{Promise.resolve().then(n.bind(n,5813))}},t=>{t.O(0,[938,441,255,358],()=>t(t.s=81228)),_N_E=t.O()}]);