fleetlens 1.0.13 → 1.0.15

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 (69) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/build-manifest.json +3 -3
  3. package/app/apps/web/.next/prerender-manifest.json +3 -3
  4. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/app/apps/web/.next/server/app/agent/page_client-reference-manifest.js +1 -1
  13. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  14. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  15. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  16. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  17. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  18. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  19. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  20. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  21. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  22. package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
  23. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  24. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  25. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  26. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  28. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  29. package/app/apps/web/.next/server/app/team/onboarding/page_client-reference-manifest.js +1 -1
  30. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
  31. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  32. package/app/apps/web/.next/server/chunks/[root-of-the-server]__02.51sr._.js +1 -1
  33. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0zyh554._.js +1 -1
  34. package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
  35. package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
  36. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0s~wd1k._.js +1 -1
  37. package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
  38. package/app/apps/web/.next/server/chunks/ssr/apps_web_0epqfet._.js +1 -1
  39. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0x014hn._.js +1 -1
  40. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
  41. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
  42. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +1 -1
  43. package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
  44. package/app/apps/web/.next/server/middleware-manifest.json +5 -5
  45. package/app/apps/web/.next/server/pages/500.html +1 -1
  46. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  47. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  48. package/app/apps/web/.next/static/chunks/00_9zw_tjem-o.js +14 -0
  49. package/app/apps/web/.next/static/chunks/0266xq7gs43sq.js +1 -0
  50. package/app/apps/web/.next/static/chunks/{0r~~~j3kmv7s_.js → 08os0c_3cdpqn.js} +1 -1
  51. package/app/apps/web/app/usage/page.tsx +264 -1
  52. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  53. package/app/apps/web/lib/usage-data.ts +1 -1
  54. package/app/apps/web/lib/usage-display.test.ts +15 -0
  55. package/app/apps/web/lib/usage-display.ts +22 -3
  56. package/app/apps/web/package.json +1 -1
  57. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  58. package/dist/daemon-worker.js +689 -265
  59. package/dist/index.js +920 -284
  60. package/menubar/Fleetlens.app/Contents/Info.plist +2 -2
  61. package/menubar/Fleetlens.app/Contents/MacOS/FleetlensMenubar +0 -0
  62. package/menubar/Fleetlens.app/Contents/Resources/command-code.svg +4 -0
  63. package/menubar/Fleetlens.app/Contents/_CodeSignature/CodeResources +11 -0
  64. package/package.json +1 -1
  65. package/app/apps/web/.next/static/chunks/0lcq6isl3n79m.js +0 -1
  66. package/app/apps/web/.next/static/chunks/0livk1wjx5m4o.js +0 -14
  67. /package/app/apps/web/.next/static/{h9pB-Efqh5oayfi0_lGfY → HNG9JDuajDbJlU07fqf3C}/_buildManifest.js +0 -0
  68. /package/app/apps/web/.next/static/{h9pB-Efqh5oayfi0_lGfY → HNG9JDuajDbJlU07fqf3C}/_clientMiddlewareManifest.js +0 -0
  69. /package/app/apps/web/.next/static/{h9pB-Efqh5oayfi0_lGfY → HNG9JDuajDbJlU07fqf3C}/_ssgManifest.js +0 -0
@@ -76,6 +76,8 @@ export default async function UsagePage({
76
76
  const cycles7d = calibration ? previousCyclesTrend(calibration, "7d", 12) : [];
77
77
  const isGrok = selected === "grok";
78
78
  const isCopilot = selected === "copilot";
79
+ const isCommandCode = selected === "command-code";
80
+ const commandCodeAccent = agentAccent("command-code");
79
81
  const codexWeeklyOnly =
80
82
  selected === "codex" && latest?.five_hour?.utilization == null;
81
83
 
@@ -175,6 +177,26 @@ export default async function UsagePage({
175
177
  </span>
176
178
  </span>
177
179
  )}
180
+ {isCommandCode && latest?.plan_type && (
181
+ <span
182
+ style={{
183
+ marginLeft: "auto",
184
+ display: "inline-flex",
185
+ alignItems: "center",
186
+ gap: 8,
187
+ fontSize: 12,
188
+ padding: "4px 10px",
189
+ border: "1px solid var(--af-border-subtle)",
190
+ borderRadius: 999,
191
+ fontFamily: "var(--font-mono)",
192
+ }}
193
+ >
194
+ <span style={{ color: "var(--af-text-tertiary)" }}>plan</span>
195
+ <span style={{ color: "var(--af-text)", fontWeight: 600 }}>
196
+ Command Code · {latest.plan_type}
197
+ </span>
198
+ </span>
199
+ )}
178
200
  {selected === "zai" && latest?.plan_type && (
179
201
  <span
180
202
  style={{
@@ -225,6 +247,21 @@ export default async function UsagePage({
225
247
  planType={latest.plan_type}
226
248
  />
227
249
  )}
250
+ {isCommandCode && (
251
+ <>
252
+ <CommandCodeRateLimitsCard
253
+ fiveHour={latest.five_hour}
254
+ weekly={latest.seven_day}
255
+ />
256
+ {latest.monthly && (
257
+ <CommandCodeMonthlyCard
258
+ window={latest.monthly}
259
+ quota={latest.monthly_quota}
260
+ planType={latest.plan_type}
261
+ />
262
+ )}
263
+ </>
264
+ )}
228
265
  {isCopilot && latest.monthly && (
229
266
  <CopilotMonthlyCard
230
267
  window={latest.monthly}
@@ -259,6 +296,27 @@ export default async function UsagePage({
259
296
  colorVar: agentAccent("copilot"),
260
297
  },
261
298
  ]
299
+ : isCommandCode
300
+ ? [
301
+ {
302
+ key: "five_hour",
303
+ label: "5h utilization",
304
+ windowMs: 5 * 60 * 60 * 1000,
305
+ colorVar: "var(--af-success)",
306
+ },
307
+ {
308
+ key: "seven_day",
309
+ label: "Weekly utilization",
310
+ windowMs: 7 * 24 * 60 * 60 * 1000,
311
+ colorVar: commandCodeAccent,
312
+ },
313
+ {
314
+ key: "monthly",
315
+ label: "Monthly credit utilization",
316
+ windowMs: 30 * 24 * 60 * 60 * 1000,
317
+ colorVar: commandCodeAccent,
318
+ },
319
+ ]
262
320
  : codexWeeklyOnly
263
321
  ? [
264
322
  {
@@ -270,7 +328,7 @@ export default async function UsagePage({
270
328
  ]
271
329
  : undefined
272
330
  }
273
- hideSonnet={isGrok || isCopilot || selected === "codex"}
331
+ hideSonnet={isGrok || isCopilot || isCommandCode || selected === "codex"}
274
332
  />
275
333
  {selected === "zai" && latest?.web_search_quota && (
276
334
  <WebSearchQuotaCard quota={latest.web_search_quota} />
@@ -287,6 +345,7 @@ export default async function UsagePage({
287
345
  {snapshots.length} snapshot{snapshots.length === 1 ? "" : "s"} on disk
288
346
  {isGrok ? " · weekly shared-pool % (no 5h window)" : ""}
289
347
  {isCopilot ? " · monthly AI-credit allowance (no 5h/7d windows)" : ""}
348
+ {isCommandCode ? " · monthly credits + 5-hour and weekly windows" : ""}
290
349
  {codexWeeklyOnly ? " · weekly-only Codex limit" : ""}
291
350
  </div>
292
351
  </>
@@ -506,6 +565,172 @@ function AgentTabs({ agents, selected }: { agents: AgentKind[]; selected: AgentK
506
565
  );
507
566
  }
508
567
 
568
+ function CommandCodeRateLimitsCard({
569
+ fiveHour,
570
+ weekly,
571
+ }: {
572
+ fiveHour: { utilization: number | null; resets_at: string | null };
573
+ weekly: { utilization: number | null; resets_at: string | null };
574
+ }) {
575
+ return (
576
+ <div
577
+ style={{
578
+ display: "grid",
579
+ gridTemplateColumns: "repeat(auto-fit, minmax(240px, 1fr))",
580
+ gap: 12,
581
+ }}
582
+ >
583
+ <CommandCodeWindowCard
584
+ label="5-hour window"
585
+ window={fiveHour}
586
+ hint="Rolling 5-hour rate limit on this plan."
587
+ />
588
+ <CommandCodeWindowCard
589
+ label="Weekly window"
590
+ window={weekly}
591
+ hint="Rolling 7-day rate limit. Extra purchased credits bypass this cap."
592
+ />
593
+ </div>
594
+ );
595
+ }
596
+
597
+ function CommandCodeWindowCard({
598
+ label,
599
+ window,
600
+ hint,
601
+ }: {
602
+ label: string;
603
+ window: { utilization: number | null; resets_at: string | null };
604
+ hint: string;
605
+ }) {
606
+ const has = window.utilization != null;
607
+ const pct = has ? Math.min(100, Math.max(0, window.utilization!)) : 0;
608
+ return (
609
+ <div className="af-card" style={{ padding: "16px 18px" }}>
610
+ <div
611
+ style={{
612
+ fontSize: 11,
613
+ color: "var(--af-text-tertiary)",
614
+ textTransform: "uppercase",
615
+ letterSpacing: "0.05em",
616
+ fontWeight: 600,
617
+ }}
618
+ >
619
+ {label}
620
+ </div>
621
+ <div
622
+ style={{
623
+ fontSize: 28,
624
+ fontWeight: 700,
625
+ marginTop: 8,
626
+ letterSpacing: "-0.02em",
627
+ lineHeight: 1.1,
628
+ fontVariantNumeric: "tabular-nums",
629
+ }}
630
+ >
631
+ {has ? `${pct.toFixed(1)}%` : "—"}
632
+ </div>
633
+ <div
634
+ style={{
635
+ marginTop: 10,
636
+ height: 8,
637
+ borderRadius: 999,
638
+ background: "var(--af-border-subtle)",
639
+ overflow: "hidden",
640
+ }}
641
+ >
642
+ <div
643
+ style={{
644
+ width: has ? `${pct}%` : "0%",
645
+ height: "100%",
646
+ borderRadius: 999,
647
+ background: agentAccent("command-code"),
648
+ }}
649
+ />
650
+ </div>
651
+ <p style={{ fontSize: 12, color: "var(--af-text-tertiary)", marginTop: 10, marginBottom: 0 }}>
652
+ {hint}
653
+ {window.resets_at ? ` Resets ${new Date(window.resets_at).toLocaleString()}.` : ""}
654
+ </p>
655
+ </div>
656
+ );
657
+ }
658
+
659
+ function CommandCodeMonthlyCard({
660
+ window,
661
+ quota,
662
+ planType,
663
+ }: {
664
+ window: { utilization: number | null; resets_at: string | null };
665
+ quota?: CopilotMonthlyQuota | null;
666
+ planType?: string | null;
667
+ }) {
668
+ const pct = window.utilization;
669
+ const presentation = copilotQuotaPresentation(pct, quota);
670
+ return (
671
+ <div className="af-card" style={{ padding: "16px 18px" }}>
672
+ <div
673
+ style={{
674
+ fontSize: 11,
675
+ color: "var(--af-text-tertiary)",
676
+ textTransform: "uppercase",
677
+ letterSpacing: "0.05em",
678
+ fontWeight: 600,
679
+ }}
680
+ >
681
+ Monthly credits
682
+ {planType ? (
683
+ <span style={{ marginLeft: 8, fontWeight: 500, textTransform: "none" }}>
684
+ · {planType}
685
+ </span>
686
+ ) : null}
687
+ </div>
688
+ <div
689
+ style={{
690
+ fontSize: 28,
691
+ fontWeight: 700,
692
+ marginTop: 8,
693
+ letterSpacing: "-0.02em",
694
+ lineHeight: 1.1,
695
+ fontVariantNumeric: "tabular-nums",
696
+ }}
697
+ >
698
+ {presentation.headline}
699
+ </div>
700
+ {presentation.detail && (
701
+ <div style={{ marginTop: 6, fontSize: 12, color: "var(--af-text-secondary)" }}>
702
+ {presentation.detail}
703
+ </div>
704
+ )}
705
+ {pct !== null && (
706
+ <div
707
+ style={{
708
+ marginTop: 10,
709
+ height: 8,
710
+ borderRadius: 999,
711
+ background: "var(--af-border-subtle)",
712
+ overflow: "hidden",
713
+ }}
714
+ >
715
+ <div
716
+ style={{
717
+ width: `${Math.min(100, Math.max(0, pct))}%`,
718
+ height: "100%",
719
+ borderRadius: 999,
720
+ background: agentAccent("command-code"),
721
+ }}
722
+ />
723
+ </div>
724
+ )}
725
+ <p style={{ fontSize: 12, color: "var(--af-text-tertiary)", marginTop: 10, marginBottom: 0 }}>
726
+ Plan credit allocation for this billing cycle. Extra purchased credits sit on top and are not
727
+ in this meter.
728
+ {window.resets_at ? ` Resets ${new Date(window.resets_at).toLocaleString()}.` : ""}
729
+ </p>
730
+ </div>
731
+ );
732
+ }
733
+
509
734
  function GrokWeeklyCard({
510
735
  utilization,
511
736
  resetsAt,
@@ -615,6 +840,44 @@ function EmptyState({ agent }: { agent: AgentKind }) {
615
840
  </div>
616
841
  );
617
842
  }
843
+ if (agent === "command-code") {
844
+ return (
845
+ <div className="af-card" style={{ padding: "48px 32px", textAlign: "center" }}>
846
+ <div style={{ fontSize: 15, fontWeight: 600, color: "var(--af-text)" }}>
847
+ No Command Code usage samples yet
848
+ </div>
849
+ <p
850
+ style={{
851
+ fontSize: 12,
852
+ color: "var(--af-text-tertiary)",
853
+ margin: "8px auto 0",
854
+ maxWidth: 520,
855
+ lineHeight: 1.5,
856
+ }}
857
+ >
858
+ The daemon polls Command Code&apos;s monthly credits plus 5-hour and
859
+ weekly windows (the same billing API the <code style={{ fontSize: 11 }}>cmd</code>{" "}
860
+ /usage overlay uses). Run <code style={{ fontSize: 11 }}>cmd login</code> if needed,
861
+ then start the daemon.
862
+ </p>
863
+ <pre
864
+ style={{
865
+ display: "inline-block",
866
+ marginTop: 14,
867
+ background: "var(--background)",
868
+ border: "1px solid var(--af-border-subtle)",
869
+ padding: "8px 16px",
870
+ borderRadius: 6,
871
+ fontSize: 13,
872
+ fontFamily: "var(--font-mono)",
873
+ color: "var(--af-text)",
874
+ }}
875
+ >
876
+ fleetlens daemon start
877
+ </pre>
878
+ </div>
879
+ );
880
+ }
618
881
  if (agent === "grok") {
619
882
  return (
620
883
  <div