@mbeato/contextscope 0.1.5 → 0.2.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 (50) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  4. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  13. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  16. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/standalone/.next/server/app/context/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/items/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/items/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/page.js +2 -2
  23. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0q3rzj9._.js +3 -0
  27. package/.next/standalone/.next/server/chunks/ssr/app_page_tsx_0fwe3kl._.js +3 -0
  28. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  29. package/.next/standalone/.next/server/pages/404.html +1 -1
  30. package/.next/standalone/.next/server/pages/500.html +1 -1
  31. package/.next/standalone/README.md +16 -6
  32. package/.next/standalone/app/page.tsx +290 -257
  33. package/.next/standalone/bin/cli.js +44 -13
  34. package/.next/standalone/bin/summary.js +558 -0
  35. package/.next/standalone/package.json +2 -1
  36. package/.next/standalone/plugin/commands/usage.md +1 -1
  37. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  38. package/.next/static/chunks/0pb14~6.l8.f9.css +1 -0
  39. package/README.md +16 -6
  40. package/bin/cli.js +44 -13
  41. package/bin/summary.js +558 -0
  42. package/lib/model-prices.json +147 -0
  43. package/package.json +2 -1
  44. package/plugin/commands/usage.md +1 -1
  45. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lbywin._.js +0 -3
  46. package/.next/standalone/.next/server/chunks/ssr/_0j0avc7._.js +0 -3
  47. package/.next/static/chunks/118uk9v3812u1.css +0 -1
  48. /package/.next/static/{I-W1iV4XdkTRyjis8Ros1 → JpNIY4MdsJTSd7Guhgw3Z}/_buildManifest.js +0 -0
  49. /package/.next/static/{I-W1iV4XdkTRyjis8Ros1 → JpNIY4MdsJTSd7Guhgw3Z}/_clientMiddlewareManifest.js +0 -0
  50. /package/.next/static/{I-W1iV4XdkTRyjis8Ros1 → JpNIY4MdsJTSd7Guhgw3Z}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--color-red-50:#fef2f2;--color-red-300:#ffa3a3;--color-red-400:#ff6568;--color-red-600:#e40014;--color-red-700:#bf000f;--color-red-800:#9f0712;--color-red-950:#460809;--color-amber-50:#fffbeb;--color-amber-100:#fef3c6;--color-amber-200:#fee685;--color-amber-300:#ffd236;--color-amber-400:#fcbb00;--color-amber-600:#dd7400;--color-amber-800:#953d00;--color-amber-900:#7b3306;--color-amber-950:#461901;--color-emerald-50:#ecfdf5;--color-emerald-300:#5ee9b5;--color-emerald-400:#00d294;--color-emerald-600:#009767;--color-emerald-700:#007956;--color-emerald-800:#005f46;--color-emerald-950:#002c22;--color-sky-500:#00a5ef;--color-sky-600:#0084cc;--color-zinc-50:#fafafa;--color-zinc-100:#f4f4f5;--color-zinc-200:#e4e4e7;--color-zinc-300:#d4d4d8;--color-zinc-400:#9f9fa9;--color-zinc-500:#71717b;--color-zinc-600:#52525c;--color-zinc-700:#3f3f46;--color-zinc-800:#27272a;--color-zinc-900:#18181b;--color-zinc-950:#09090b;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wider:.05em;--tracking-widest:.1em;--radius-md:.375rem;--radius-lg:.5rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-mono);--default-mono-font-family:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}@supports (color:lab(0% 0 0)){:root,:host{--color-red-50:lab(96.5005% 4.18508 1.52328);--color-red-300:lab(76.5514% 36.422 15.5335);--color-red-400:lab(63.7053% 60.745 31.3109);--color-red-600:lab(48.4493% 77.4328 61.5452);--color-red-700:lab(40.4273% 67.2623 53.7441);--color-red-800:lab(33.7174% 55.8993 41.0293);--color-red-950:lab(13.003% 29.04 16.7519);--color-amber-50:lab(98.6252% -.635922 8.42309);--color-amber-100:lab(95.916% -1.21653 23.111);--color-amber-200:lab(91.7203% -.505269 49.9084);--color-amber-300:lab(86.4156% 6.13147 78.3961);--color-amber-400:lab(80.1641% 16.6016 99.2089);--color-amber-600:lab(60.3514% 40.5624 87.1228);--color-amber-800:lab(37.8822% 37.1699 52.2718);--color-amber-900:lab(31.2288% 30.2627 40.0378);--color-amber-950:lab(15.8111% 20.9107 23.3752);--color-emerald-50:lab(97.8462% -6.94966 1.85487);--color-emerald-300:lab(83.9203% -48.7124 13.8849);--color-emerald-400:lab(75.0771% -60.7313 19.4147);--color-emerald-600:lab(55.0481% -49.9246 15.93);--color-emerald-700:lab(44.4871% -41.0396 11.0361);--color-emerald-800:lab(35.3675% -33.1188 8.04002);--color-emerald-950:lab(15.0582% -17.9507 2.38369);--color-sky-500:lab(63.3038% -18.433 -51.0407);--color-sky-600:lab(51.7754% -11.4712 -49.8349);--color-zinc-50:lab(98.26% 0 0);--color-zinc-100:lab(96.1634% .0993311 -.364041);--color-zinc-200:lab(90.6853% .399232 -1.45452);--color-zinc-300:lab(84.9837% .601262 -2.17986);--color-zinc-400:lab(65.6464% 1.53497 -5.42429);--color-zinc-500:lab(47.8878% 1.65477 -5.77283);--color-zinc-600:lab(35.1166% 1.78212 -6.1173);--color-zinc-700:lab(26.8019% 1.35387 -4.68303);--color-zinc-800:lab(15.7305% .613764 -2.16959);--color-zinc-900:lab(8.30603% .618205 -2.16572);--color-zinc-950:lab(2.51107% .242703 -.886115)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing) * 0)}.top-10{top:calc(var(--spacing) * 10)}.z-10{z-index:10}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-24{height:calc(var(--spacing) * 24)}.h-28{height:calc(var(--spacing) * 28)}.h-64{height:calc(var(--spacing) * 64)}.h-72{height:calc(var(--spacing) * 72)}.h-full{height:100%}.h-screen{height:100vh}.min-h-full{min-height:100%}.w-4\/6{width:66.6667%}.w-5\/6{width:83.3333%}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[160px\]{max-width:160px}.max-w-\[280px\]{max-width:280px}.max-w-\[400px\]{max-width:400px}.max-w-\[420px\]{max-width:420px}.max-w-\[480px\]{max-width:480px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-\[280px\]{min-width:280px}.flex-1{flex:1}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_2fr\]{grid-template-columns:minmax(0,1fr) 2fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-zinc-200>:not(:last-child)){border-color:var(--color-zinc-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-amber-300{border-color:var(--color-amber-300)}.border-emerald-300\/60{border-color:#5ee9b599}@supports (color:color-mix(in lab, red, red)){.border-emerald-300\/60{border-color:color-mix(in oklab, var(--color-emerald-300) 60%, transparent)}}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-200\/60{border-color:#e4e4e799}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\/60{border-color:color-mix(in oklab, var(--color-zinc-200) 60%, transparent)}}.border-zinc-300{border-color:var(--color-zinc-300)}.bg-amber-50\/40{background-color:#fffbeb66}@supports (color:color-mix(in lab, red, red)){.bg-amber-50\/40{background-color:color-mix(in oklab, var(--color-amber-50) 40%, transparent)}}.bg-amber-50\/50{background-color:#fffbeb80}@supports (color:color-mix(in lab, red, red)){.bg-amber-50\/50{background-color:color-mix(in oklab, var(--color-amber-50) 50%, transparent)}}.bg-amber-200{background-color:var(--color-amber-200)}.bg-emerald-50\/50{background-color:#ecfdf580}@supports (color:color-mix(in lab, red, red)){.bg-emerald-50\/50{background-color:color-mix(in oklab, var(--color-emerald-50) 50%, transparent)}}.bg-red-50\/40{background-color:#fef2f266}@supports (color:color-mix(in lab, red, red)){.bg-red-50\/40{background-color:color-mix(in oklab, var(--color-red-50) 40%, transparent)}}.bg-sky-600{background-color:var(--color-sky-600)}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-200\/60{background-color:#e4e4e799}@supports (color:color-mix(in lab, red, red)){.bg-zinc-200\/60{background-color:color-mix(in oklab, var(--color-zinc-200) 60%, transparent)}}.bg-zinc-200\/70{background-color:#e4e4e7b3}@supports (color:color-mix(in lab, red, red)){.bg-zinc-200\/70{background-color:color-mix(in oklab, var(--color-zinc-200) 70%, transparent)}}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-700{background-color:var(--color-zinc-700)}.bg-zinc-900{background-color:var(--color-zinc-900)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-900{color:var(--color-amber-900)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-900{color:var(--color-zinc-900)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.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,)}.underline{text-decoration-line:underline}.decoration-zinc-400{-webkit-text-decoration-color:var(--color-zinc-400);-webkit-text-decoration-color:var(--color-zinc-400);-webkit-text-decoration-color:var(--color-zinc-400);text-decoration-color:var(--color-zinc-400)}.decoration-1{text-decoration-thickness:1px}.underline-offset-\[6px\]{text-underline-offset:6px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.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);-webkit-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,);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:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-emerald-300\/60:hover{border-color:#5ee9b599}@supports (color:color-mix(in lab, red, red)){.hover\:border-emerald-300\/60:hover{border-color:color-mix(in oklab, var(--color-emerald-300) 60%, transparent)}}.hover\:border-red-300:hover{border-color:var(--color-red-300)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:bg-amber-50\/60:hover{background-color:#fffbeb99}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-50\/60:hover{background-color:color-mix(in oklab, var(--color-amber-50) 60%, transparent)}}.hover\:bg-amber-300:hover{background-color:var(--color-amber-300)}.hover\:bg-emerald-50\/50:hover{background-color:#ecfdf580}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-50\/50:hover{background-color:color-mix(in oklab, var(--color-emerald-50) 50%, transparent)}}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-50\/60:hover{background-color:#fef2f299}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-50\/60:hover{background-color:color-mix(in oklab, var(--color-red-50) 60%, transparent)}}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:text-emerald-700:hover{color:var(--color-emerald-700)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:items-baseline{align-items:baseline}.sm\:justify-between{justify-content:space-between}}@media (min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:px-8{padding-inline:calc(var(--spacing) * 8)}.md\:py-5{padding-block:calc(var(--spacing) * 5)}.md\:py-7{padding-block:calc(var(--spacing) * 7)}}@media (prefers-color-scheme:dark){:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border-amber-900\/50{border-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-900\/50{border-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.dark\:border-emerald-800\/60{border-color:#005f4699}@supports (color:color-mix(in lab, red, red)){.dark\:border-emerald-800\/60{border-color:color-mix(in oklab, var(--color-emerald-800) 60%, transparent)}}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-zinc-800\/60{border-color:#27272a99}@supports (color:color-mix(in lab, red, red)){.dark\:border-zinc-800\/60{border-color:color-mix(in oklab, var(--color-zinc-800) 60%, transparent)}}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-950\/10{background-color:#4619011a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/10{background-color:color-mix(in oklab, var(--color-amber-950) 10%, transparent)}}.dark\:bg-emerald-950\/30{background-color:#002c224d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/30{background-color:color-mix(in oklab, var(--color-emerald-950) 30%, transparent)}}.dark\:bg-red-950\/20{background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-950\/20{background-color:color-mix(in oklab, var(--color-red-950) 20%, transparent)}}.dark\:bg-sky-500{background-color:var(--color-sky-500)}.dark\:bg-zinc-50{background-color:var(--color-zinc-50)}.dark\:bg-zinc-300{background-color:var(--color-zinc-300)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/60{background-color:#27272a99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-800\/60{background-color:color-mix(in oklab, var(--color-zinc-800) 60%, transparent)}}.dark\:bg-zinc-800\/70{background-color:#27272ab3}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-800\/70{background-color:color-mix(in oklab, var(--color-zinc-800) 70%, transparent)}}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-950{background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/40{background-color:#09090b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-950\/40{background-color:color-mix(in oklab, var(--color-zinc-950) 40%, transparent)}}.dark\:text-amber-100{color:var(--color-amber-100)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-zinc-50{color:var(--color-zinc-50)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-900{color:var(--color-zinc-900)}@media (hover:hover){.dark\:hover\:border-emerald-800\/60:hover{border-color:#005f4699}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:border-emerald-800\/60:hover{border-color:color-mix(in oklab, var(--color-emerald-800) 60%, transparent)}}.dark\:hover\:border-red-800:hover{border-color:var(--color-red-800)}.dark\:hover\:border-zinc-700:hover{border-color:var(--color-zinc-700)}.dark\:hover\:bg-amber-800:hover{background-color:var(--color-amber-800)}.dark\:hover\:bg-amber-950\/20:hover{background-color:#46190133}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-950\/20:hover{background-color:color-mix(in oklab, var(--color-amber-950) 20%, transparent)}}.dark\:hover\:bg-emerald-950\/30:hover{background-color:#002c224d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-950\/30:hover{background-color:color-mix(in oklab, var(--color-emerald-950) 30%, transparent)}}.dark\:hover\:bg-red-950\/30:hover{background-color:#4608094d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-red-950\/30:hover{background-color:color-mix(in oklab, var(--color-red-950) 30%, transparent)}}.dark\:hover\:bg-red-950\/40:hover{background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-red-950\/40:hover{background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.dark\:hover\:bg-zinc-900:hover{background-color:var(--color-zinc-900)}.dark\:hover\:bg-zinc-900\/50:hover{background-color:#18181b80}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-zinc-900\/50:hover{background-color:color-mix(in oklab, var(--color-zinc-900) 50%, transparent)}}.dark\:hover\:bg-zinc-950\/40:hover{background-color:#09090b66}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-zinc-950\/40:hover{background-color:color-mix(in oklab, var(--color-zinc-950) 40%, transparent)}}.dark\:hover\:text-emerald-300:hover{color:var(--color-emerald-300)}.dark\:hover\:text-red-400:hover{color:var(--color-red-400)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-400:hover{color:var(--color-zinc-400)}}}}:root{--background:#fff;--foreground:#18181b}@media (prefers-color-scheme:dark){:root{--background:#09090b;--foreground:#fafafa}}body{background:var(--background);color:var(--foreground);font-family:var(--font-mono)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
package/README.md CHANGED
@@ -1,25 +1,34 @@
1
1
  # contextscope
2
2
 
3
- A local dashboard that audits the **per-turn token context** Claude Code loads on every conversation turn — and gives you toggle-based control to disable what you don't use.
3
+ A CLI + local dashboard that audits the **per-turn token context** Claude Code loads on every conversation turn — and gives you toggle-based control to disable what you don't use.
4
4
 
5
5
  `/stats`, `/cost`, and `ccusage` show **aggregate** spend. None of them break down what's *inside* the per-turn baseline or let you act on the audit. At 1M-context Opus, every unused skill, agent, command, or hook output that lives in the available-list block is paying full cache-read cost on every turn — for a heavy user, that's hundreds of millions of tokens per month.
6
6
 
7
- ## Install + run
7
+ ## Quick look (CLI)
8
8
 
9
9
  ```bash
10
10
  npx @mbeato/contextscope
11
11
  ```
12
12
 
13
- Picks a free port starting at 3939, opens your browser, audits in real time.
13
+ Prints a 30-day audit to stdout in ~3s. Per-turn baseline, 30-day burn + API-equivalent cost, top disable candidates, context overhead. No browser, no server.
14
+
15
+ ## Full dashboard (browser)
16
+
17
+ ```bash
18
+ npx @mbeato/contextscope ui
19
+ ```
20
+
21
+ Picks a free port starting at 3939, opens your browser. Adds: toggle-to-disable buttons, per-session drilldown, daily burn graph, by-project breakdown, hook + MCP detail.
14
22
 
15
23
  Or install globally so the `contextscope` command stays around:
16
24
 
17
25
  ```bash
18
26
  npm install -g @mbeato/contextscope
19
- contextscope
27
+ contextscope # quick CLI summary
28
+ contextscope ui # dashboard
20
29
  ```
21
30
 
22
- Flags:
31
+ Flags (ui only):
23
32
  - `--port <n>` — pin a port
24
33
  - `--no-open` — don't auto-open the browser
25
34
  - `--help` — full usage
@@ -90,7 +99,8 @@ Requires Node 18+. macOS/Linux paths; Windows untested but uses `os.homedir()` t
90
99
  - **`lib/mcp.ts`** — reads `.claude.json` mcpServers, parses PTC's downstream config.yaml
91
100
  - **`app/actions.ts`** — server actions for toggles + bulk disable; backs up settings before write
92
101
  - **`app/page.tsx`** — single server-rendered page; filesystem re-read on every load (cached internally)
93
- - **`bin/cli.js`** — CLI entry: spawns Next.js standalone server, opens browser, ships subcommands
102
+ - **`bin/cli.js`** — CLI entry: routes to `summary.js` (default) or launches the Next.js dashboard (`ui` subcommand)
103
+ - **`bin/summary.js`** — pure-JS CLI summary; mirrors the lib/* logic without Next.js for the fast first-impression printout
94
104
 
95
105
  ## License
96
106
 
package/bin/cli.js CHANGED
@@ -3,11 +3,12 @@
3
3
  * contextscope CLI
4
4
  *
5
5
  * Subcommands:
6
- * (default) spawn the dashboard server + open browser
6
+ * (default) print 30-day summary to stdout (fast, no browser)
7
+ * ui spawn the dashboard server + open browser
7
8
  * install-plugin install the /usage slash command for Claude Code
8
9
  * uninstall-plugin remove the slash command
9
10
  *
10
- * Flags (default cmd):
11
+ * Flags (ui cmd):
11
12
  * --port <n> pin a port (errors if taken)
12
13
  * --no-open skip auto-opening the browser
13
14
  * --help show this
@@ -35,14 +36,15 @@ const subcommand = args[0] && !args[0].startsWith("-") ? args[0] : null;
35
36
  if (args.includes("--help") || args.includes("-h")) {
36
37
  process.stdout.write(
37
38
  [
38
- "contextscope — local dashboard for Claude Code per-turn context audit",
39
+ "contextscope — Claude Code per-turn context audit",
39
40
  "",
40
41
  "Usage:",
41
- " contextscope start the dashboard (default)",
42
+ " contextscope print 30-day summary (fast, no browser)",
43
+ " contextscope ui launch the dashboard (toggles + sessions + by-project)",
42
44
  " contextscope install-plugin install the /usage slash command",
43
45
  " contextscope uninstall-plugin remove the /usage slash command",
44
46
  "",
45
- "Flags (default cmd):",
47
+ "Flags (ui cmd):",
46
48
  " --port <n> pin a port (default: find first free starting at 3939)",
47
49
  " --no-open do not open the browser automatically",
48
50
  " --help show this message",
@@ -75,6 +77,20 @@ if (subcommand === "uninstall-plugin") {
75
77
  process.exit(0);
76
78
  }
77
79
 
80
+ // Default: print summary. `ui` subcommand: launch dashboard.
81
+ if (subcommand !== "ui") {
82
+ const { printSummary } = await import("./summary.js");
83
+ try {
84
+ await printSummary({ days: 30 });
85
+ process.exit(0);
86
+ } catch (err) {
87
+ process.stderr.write(`fatal: ${err?.message ?? err}\n`);
88
+ process.exit(1);
89
+ }
90
+ }
91
+
92
+ // ── UI mode below ──────────────────────────────────────────────────────────
93
+
78
94
  const pinnedPortIdx = args.indexOf("--port");
79
95
  const pinnedPort = pinnedPortIdx >= 0 ? Number(args[pinnedPortIdx + 1]) : null;
80
96
  const noOpen = args.includes("--no-open");
@@ -134,7 +150,7 @@ async function findPort() {
134
150
  process.exit(1);
135
151
  }
136
152
 
137
- async function main() {
153
+ async function launchUi() {
138
154
  await ensureStaticAssets();
139
155
  const port = await findPort();
140
156
  const url = `http://localhost:${port}`;
@@ -148,27 +164,42 @@ async function main() {
148
164
  stdio: "inherit",
149
165
  });
150
166
 
151
- // Open browser once server is ready. Sequential polling (await between
152
- // attempts) so we never have concurrent fetches racing to call open().
167
+ process.stdout.write(`contextscope running on ${url}\n`);
168
+
169
+ // Wait for server to respond, warm the cache by hitting `/` (which triggers
170
+ // the heavy transcript scans), then open the browser. Shifts the cold wait
171
+ // from "blank skeleton in browser" to "scanning... in terminal" so the page
172
+ // renders almost instantly when the browser opens.
153
173
  if (!noOpen) {
154
174
  const { default: open } = await import("open");
155
175
  (async () => {
176
+ let ready = false;
156
177
  for (let i = 0; i < 50; i++) {
157
178
  try {
158
- const res = await fetch(url, { method: "HEAD" });
179
+ const res = await fetch(`${url}/_not-found`, { method: "HEAD" });
159
180
  if (res.status < 500) {
160
- await open(url).catch(() => {});
161
- return;
181
+ ready = true;
182
+ break;
162
183
  }
163
184
  } catch {
164
185
  // not yet ready
165
186
  }
166
187
  await new Promise((r) => setTimeout(r, 200));
167
188
  }
189
+ if (!ready) return;
190
+ process.stdout.write(` scanning ~/.claude/projects ...`);
191
+ const start = Date.now();
192
+ try {
193
+ await fetch(url);
194
+ } catch {
195
+ // best-effort warm-up; open browser anyway
196
+ }
197
+ process.stdout.write(` ${((Date.now() - start) / 1000).toFixed(1)}s\n`);
198
+ await open(url).catch(() => {});
168
199
  })();
169
200
  }
170
201
 
171
- process.stdout.write(`contextscope running on ${url}\n (Ctrl+C to stop)\n`);
202
+ process.stdout.write(` (Ctrl+C to stop)\n`);
172
203
 
173
204
  const shutdown = (code = 0) => {
174
205
  if (!child.killed) child.kill("SIGTERM");
@@ -179,7 +210,7 @@ async function main() {
179
210
  child.on("exit", (code) => process.exit(code ?? 0));
180
211
  }
181
212
 
182
- main().catch((err) => {
213
+ launchUi().catch((err) => {
183
214
  process.stderr.write(`fatal: ${err?.message ?? err}\n`);
184
215
  process.exit(1);
185
216
  });