agent-session-inspector 0.1.8 → 0.1.10

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 (100) hide show
  1. package/README.md +1 -1
  2. package/VERSION +1 -1
  3. package/app/.next/BUILD_ID +1 -1
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +1 -1
  7. package/app/.next/server/app/_global-error.html +1 -1
  8. package/app/.next/server/app/_global-error.rsc +1 -1
  9. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/_not-found.html +1 -1
  15. package/app/.next/server/app/_not-found.rsc +14 -14
  16. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  17. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
  18. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/app/.next/server/app/api/analytics/route.js.nft.json +1 -1
  20. package/app/.next/server/app/api/logs/route.js.nft.json +1 -1
  21. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  22. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  23. package/app/.next/server/app/api/search/route.js.nft.json +1 -1
  24. package/app/.next/server/app/api/sessions/[provider]/[id]/record/route.js.nft.json +1 -1
  25. package/app/.next/server/app/api/sessions/[provider]/[id]/reveal/route.js.nft.json +1 -1
  26. package/app/.next/server/app/api/sessions/[provider]/[id]/route.js.nft.json +1 -1
  27. package/app/.next/server/app/api/sessions/route.js.nft.json +1 -1
  28. package/app/.next/server/app/index.html +1 -1
  29. package/app/.next/server/app/index.rsc +16 -16
  30. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +15 -15
  31. package/app/.next/server/app/index.segments/_full.segment.rsc +16 -16
  32. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  33. package/app/.next/server/app/page.js.nft.json +1 -1
  34. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/sessions/[provider]/[id]/page.js.nft.json +1 -1
  36. package/app/.next/server/app/sessions/[provider]/[id]/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/chunks/[root-of-the-server]__014br-h._.js +1 -1
  38. package/app/.next/server/chunks/[root-of-the-server]__0co499t._.js +1 -1
  39. package/app/.next/server/chunks/[root-of-the-server]__0p_hyq8._.js +1 -1
  40. package/app/.next/server/chunks/[root-of-the-server]__0yxic1z._.js +2 -2
  41. package/app/.next/server/chunks/ssr/_0e8jdju._.js +7 -0
  42. package/app/.next/server/chunks/ssr/_0f8nmc3._.js +1 -1
  43. package/app/.next/server/chunks/ssr/_0gr0upx._.js +7 -0
  44. package/app/.next/server/chunks/ssr/src_app_page_tsx_1chiuah._.js +1 -1
  45. package/app/.next/server/chunks/ssr/src_app_sessions_[provider]_[id]_page_tsx_0uf635h._.js +2 -6
  46. package/app/.next/server/middleware-build-manifest.js +3 -3
  47. package/app/.next/server/pages/404.html +1 -1
  48. package/app/.next/server/pages/500.html +1 -1
  49. package/app/.next/server/server-reference-manifest.js +1 -1
  50. package/app/.next/server/server-reference-manifest.json +1 -1
  51. package/app/.next/static/chunks/0hav9to299upa.js +1 -0
  52. package/app/.next/static/chunks/1-qn722atv1by.css +1 -0
  53. package/app/.next/static/chunks/{1fe2mxakoweia.js → 18c6__lhilfeo.js} +1 -1
  54. package/app/.next/static/chunks/1bgubb_nxxbrk.js +2 -0
  55. package/app/.next/static/chunks/1gwxc9rvk6onv.js +5 -0
  56. package/app/AGENTS.md +9 -0
  57. package/app/CLAUDE.md +1 -0
  58. package/app/CONTRIBUTING.md +90 -0
  59. package/app/Dockerfile +34 -0
  60. package/app/LICENSE +21 -0
  61. package/app/README.md +369 -0
  62. package/app/bin/agent-session-inspector.mjs +185 -0
  63. package/app/components.json +25 -0
  64. package/app/docs/screenshots/analytics-dark.png +0 -0
  65. package/app/docs/screenshots/analytics.png +0 -0
  66. package/app/docs/screenshots/request-table.png +0 -0
  67. package/app/docs/screenshots/session-overview-dark.png +0 -0
  68. package/app/docs/screenshots/session-overview.png +0 -0
  69. package/app/docs/screenshots/sessions-dark.png +0 -0
  70. package/app/docs/screenshots/sessions.png +0 -0
  71. package/app/docs/screenshots/timeline-dark.png +0 -0
  72. package/app/docs/screenshots/timeline.png +0 -0
  73. package/app/docs/screenshots/token-optimizer-dark.png +0 -0
  74. package/app/docs/screenshots/token-optimizer.png +0 -0
  75. package/app/docs/social-preview.png +0 -0
  76. package/app/eslint.config.mjs +20 -0
  77. package/app/install.sh +85 -0
  78. package/app/next.config.ts +17 -0
  79. package/app/package.json +3 -3
  80. package/app/pnpm-lock.yaml +7031 -0
  81. package/app/pnpm-workspace.yaml +3 -0
  82. package/app/postcss.config.mjs +7 -0
  83. package/app/scripts/build-cli.mjs +26 -0
  84. package/app/scripts/demo-data.mjs +337 -0
  85. package/app/scripts/deploy-docker.sh +71 -0
  86. package/app/scripts/package-release.sh +86 -0
  87. package/app/server.js +1 -1
  88. package/app/tsconfig.json +34 -0
  89. package/bin/agent-session-inspector.mjs +2 -2
  90. package/cli/cli.mjs +234 -84
  91. package/package.json +1 -1
  92. package/app/.next/server/chunks/ssr/_0o294sf._.js +0 -3
  93. package/app/.next/server/chunks/ssr/_0wfo2z0._.js +0 -3
  94. package/app/.next/static/chunks/1lmw5sxsr57p6.css +0 -1
  95. package/app/.next/static/chunks/1nuneih_2_kul.js +0 -1
  96. package/app/.next/static/chunks/21ckxredfe3pr.js +0 -6
  97. package/app/.next/static/chunks/3-g9jvt_m-6_4.js +0 -1
  98. /package/app/.next/static/{muuOFZsnyOfIG_5aUuqFV → QagODMnr1on0whIZ_GMxV}/_buildManifest.js +0 -0
  99. /package/app/.next/static/{muuOFZsnyOfIG_5aUuqFV → QagODMnr1on0whIZ_GMxV}/_clientMiddlewareManifest.js +0 -0
  100. /package/app/.next/static/{muuOFZsnyOfIG_5aUuqFV → QagODMnr1on0whIZ_GMxV}/_ssgManifest.js +0 -0
package/cli/cli.mjs CHANGED
@@ -3520,23 +3520,33 @@ function normalizeTable(raw) {
3520
3520
  return table2;
3521
3521
  }
3522
3522
  var BUNDLED = normalizeTable(prices_default);
3523
- var loadTable = createFileCache((filePath) => {
3523
+ var loadPrices = createFileCache((filePath) => {
3524
3524
  const content = safeReadFile(filePath);
3525
- if (!content) return BUNDLED;
3525
+ if (!content) return { table: BUNDLED, custom: /* @__PURE__ */ new Set() };
3526
3526
  try {
3527
- return { ...BUNDLED, ...normalizeTable(JSON.parse(content)) };
3527
+ const overrides = normalizeTable(JSON.parse(content));
3528
+ return { table: { ...BUNDLED, ...overrides }, custom: new Set(Object.keys(overrides)) };
3528
3529
  } catch {
3529
- return BUNDLED;
3530
+ return { table: BUNDLED, custom: /* @__PURE__ */ new Set() };
3530
3531
  }
3531
3532
  });
3533
+ var loadTable = (filePath) => loadPrices(filePath).table;
3532
3534
  var SNAPSHOT_SUFFIX = /-(\d{8}|\d{4}-\d{2}-\d{2}|latest)$/;
3533
3535
  function normalizeModelId(model) {
3534
3536
  const id = model.toLowerCase().replace(/\[.*\]$/, "").replace(/^.*\//, "").replace(/^([a-z]{2}\.)?anthropic\./, "");
3535
3537
  return id.startsWith("claude") ? id.replace(/\./g, "-") : id;
3536
3538
  }
3539
+ function overrideKeyOf(model) {
3540
+ return normalizeModelId(model).replace(SNAPSHOT_SUFFIX, "");
3541
+ }
3537
3542
  function overridePathLabel() {
3538
3543
  return PRICING_OVERRIDE_PATH.replace(os2.homedir(), "~");
3539
3544
  }
3545
+ function priceKeyOf(model) {
3546
+ const { table: table2, custom } = loadPrices(PRICING_OVERRIDE_PATH);
3547
+ const key = resolveModel(model, table2);
3548
+ return { key: key ?? overrideKeyOf(model), custom: key !== null && custom.has(key) };
3549
+ }
3540
3550
  function resolveModel(model, table2) {
3541
3551
  if (!model) return null;
3542
3552
  const id = normalizeModelId(model);
@@ -3645,12 +3655,16 @@ var CostAccumulator = class {
3645
3655
  const byModel = [...this.models.values()].sort(
3646
3656
  (a, b) => (b.costUSD ?? -1) - (a.costUSD ?? -1)
3647
3657
  );
3648
- const table2 = loadTable(PRICING_OVERRIDE_PATH);
3658
+ const { table: table2, custom } = loadPrices(PRICING_OVERRIDE_PATH);
3649
3659
  const prices = {};
3660
+ const priceKeys = {};
3661
+ const customPriced = [];
3650
3662
  for (const { model } of byModel) {
3651
3663
  if (model === UNKNOWN_MODEL) continue;
3652
3664
  const key = resolveModel(model, table2);
3653
3665
  prices[key ?? normalizeModelId(model)] = key ? table2[key] : null;
3666
+ priceKeys[model] = key ?? overrideKeyOf(model);
3667
+ if (key && custom.has(key)) customPriced.push(model);
3654
3668
  }
3655
3669
  return {
3656
3670
  totalUSD: byModel.reduce((sum, m) => sum + (m.costUSD ?? 0), 0),
@@ -3662,6 +3676,8 @@ var CostAccumulator = class {
3662
3676
  )
3663
3677
  ),
3664
3678
  prices,
3679
+ priceKeys,
3680
+ customPriced,
3665
3681
  overridePath: overridePathLabel(),
3666
3682
  unpricedModels: byModel.filter((m) => m.costUSD === null).map((m) => m.model)
3667
3683
  };
@@ -3702,11 +3718,12 @@ function bucketUsage(events, inherited = false) {
3702
3718
  return [...buckets.values()];
3703
3719
  }
3704
3720
  function priceBucket(bucket) {
3721
+ const lines = costOf(bucket, bucket.day || void 0);
3705
3722
  let cost = null;
3706
- for (const line of costOf(bucket, bucket.day || void 0)) {
3723
+ for (const line of lines) {
3707
3724
  if (line.usd !== null) cost = (cost ?? 0) + line.usd;
3708
3725
  }
3709
- return cost;
3726
+ return { cost, lines };
3710
3727
  }
3711
3728
  function priceBuckets(buckets) {
3712
3729
  if (!buckets || buckets.length === 0) return null;
@@ -4240,7 +4257,8 @@ var ATTACHMENT_LABELS = {
4240
4257
  command_permissions: "Command permissions",
4241
4258
  remote_session_change: "Remote session",
4242
4259
  file: "Attached file",
4243
- image: "Image"
4260
+ image: "Image",
4261
+ synthetic: "Injected context"
4244
4262
  };
4245
4263
  function joinText(value) {
4246
4264
  if (Array.isArray(value)) return value.map((v) => joinText(v)).join("\n");
@@ -4260,6 +4278,7 @@ function describeAttachment(attachment) {
4260
4278
  case "total_tokens_reminder":
4261
4279
  case "batching_reminder_sent":
4262
4280
  case "silent_turn_reminder":
4281
+ case "synthetic":
4263
4282
  case "model":
4264
4283
  body = joinText(attachment.text);
4265
4284
  break;
@@ -4271,7 +4290,9 @@ function describeAttachment(attachment) {
4271
4290
  body = joinText(attachment.snapshot);
4272
4291
  break;
4273
4292
  case "session_context":
4274
- body = Object.values(attachment.context ?? {}).map((v) => joinText(v)).join("\n\n");
4293
+ body = Object.values(
4294
+ attachment.context ?? {}
4295
+ ).map((v) => joinText(v)).join("\n\n");
4275
4296
  break;
4276
4297
  case "deferred_tools_record": {
4277
4298
  const entries = attachment.entries ?? [];
@@ -4368,7 +4389,9 @@ function systemPromptOf(attachment) {
4368
4389
  return sections.filter(Boolean).join("\n\n");
4369
4390
  }
4370
4391
  function describeToolDefinitions(tools, chars) {
4371
- const names = tools.map((tool) => String(tool?.name ?? "tool"));
4392
+ const names = tools.map(
4393
+ (tool) => String(tool?.name ?? "tool")
4394
+ );
4372
4395
  return {
4373
4396
  attachmentType: "tool_definitions",
4374
4397
  label: ATTACHMENT_LABELS.tool_definitions,
@@ -4382,8 +4405,10 @@ function describeToolDefinitions(tools, chars) {
4382
4405
  }
4383
4406
  function instructionFilesText(attachment) {
4384
4407
  const files = attachment.files ?? [];
4385
- return files.map((file) => `# ${file.path ?? "instructions"}${file.type ? ` (${file.type})` : ""}
4386
- ${file.content ?? ""}`).join("\n\n");
4408
+ return files.map(
4409
+ (file) => `# ${file.path ?? "instructions"}${file.type ? ` (${file.type})` : ""}
4410
+ ${file.content ?? ""}`
4411
+ ).join("\n\n");
4387
4412
  }
4388
4413
  function parseClaudeTranscript(filePath, provider = "claude", id = path4.basename(filePath, ".jsonl")) {
4389
4414
  const records = readJsonl(filePath);
@@ -4442,16 +4467,28 @@ function parseClaudeTranscript(filePath, provider = "claude", id = path4.basenam
4442
4467
  continue;
4443
4468
  case "mode":
4444
4469
  case "permission-mode":
4445
- push(ts, "session.mode_change", {
4446
- mode: rec.mode ?? rec.permissionMode
4447
- }, rec.uuid, rec.parentUuid);
4470
+ push(
4471
+ ts,
4472
+ "session.mode_change",
4473
+ {
4474
+ mode: rec.mode ?? rec.permissionMode
4475
+ },
4476
+ rec.uuid,
4477
+ rec.parentUuid
4478
+ );
4448
4479
  continue;
4449
4480
  case "cost-state":
4450
- push(ts, "session.usage_checkpoint", {
4451
- totalCostUSD: rec.totalCostUSD,
4452
- apiDurationMs: rec.totalAPIDuration,
4453
- sessionTotals: { apiDurationMs: rec.totalAPIDuration ?? 0 }
4454
- }, rec.uuid, rec.parentUuid);
4481
+ push(
4482
+ ts,
4483
+ "session.usage_checkpoint",
4484
+ {
4485
+ totalCostUSD: rec.totalCostUSD,
4486
+ apiDurationMs: rec.totalAPIDuration,
4487
+ sessionTotals: { apiDurationMs: rec.totalAPIDuration ?? 0 }
4488
+ },
4489
+ rec.uuid,
4490
+ rec.parentUuid
4491
+ );
4455
4492
  continue;
4456
4493
  case "attachment": {
4457
4494
  const attachment = rec.attachment ?? {};
@@ -4465,12 +4502,18 @@ function parseClaudeTranscript(filePath, provider = "claude", id = path4.basenam
4465
4502
 
4466
4503
  ${prompt}` : prompt
4467
4504
  );
4468
- push(ts, "system.message", {
4469
- role: "system_prompt",
4470
- content: text,
4471
- charLength: chars,
4472
- truncated
4473
- }, rec.uuid, rec.parentUuid);
4505
+ push(
4506
+ ts,
4507
+ "system.message",
4508
+ {
4509
+ role: "system_prompt",
4510
+ content: text,
4511
+ charLength: chars,
4512
+ truncated
4513
+ },
4514
+ rec.uuid,
4515
+ rec.parentUuid
4516
+ );
4474
4517
  }
4475
4518
  if (Array.isArray(attachment.tools)) {
4476
4519
  const serialized = JSON.stringify(attachment.tools);
@@ -4488,60 +4531,126 @@ ${prompt}` : prompt
4488
4531
  continue;
4489
4532
  }
4490
4533
  if (attachment.type === "instructions") {
4491
- const { text, chars, truncated } = capText(instructionFilesText(attachment));
4492
- push(ts, "system.message", {
4493
- role: "instructions",
4494
- content: text,
4495
- charLength: chars,
4496
- truncated
4497
- }, rec.uuid, rec.parentUuid);
4534
+ const { text, chars, truncated } = capText(
4535
+ instructionFilesText(attachment)
4536
+ );
4537
+ push(
4538
+ ts,
4539
+ "system.message",
4540
+ {
4541
+ role: "instructions",
4542
+ content: text,
4543
+ charLength: chars,
4544
+ truncated
4545
+ },
4546
+ rec.uuid,
4547
+ rec.parentUuid
4548
+ );
4498
4549
  continue;
4499
4550
  }
4500
- push(ts, "context.attachment", describeAttachment(attachment), rec.uuid, rec.parentUuid);
4551
+ push(
4552
+ ts,
4553
+ "context.attachment",
4554
+ describeAttachment(attachment),
4555
+ rec.uuid,
4556
+ rec.parentUuid
4557
+ );
4501
4558
  continue;
4502
4559
  }
4503
4560
  case "system": {
4504
4561
  if (rec.subtype === "api_error") {
4505
- push(ts, "session.error", {
4506
- message: rec.error?.message ?? "API error",
4507
- detail: rec.error?.formatted ?? "",
4508
- level: rec.level,
4509
- error: rec.error
4510
- }, rec.uuid, rec.parentUuid);
4562
+ push(
4563
+ ts,
4564
+ "session.error",
4565
+ {
4566
+ message: rec.error?.message ?? "API error",
4567
+ detail: rec.error?.formatted ?? "",
4568
+ level: rec.level,
4569
+ error: rec.error
4570
+ },
4571
+ rec.uuid,
4572
+ rec.parentUuid
4573
+ );
4511
4574
  } else if (rec.subtype === "stop_hook_summary") {
4512
- push(ts, "hook.end", {
4513
- hookType: "Stop",
4514
- hookCount: rec.hookCount,
4515
- success: (rec.hookErrors?.length ?? 0) === 0
4516
- }, rec.uuid, rec.parentUuid);
4575
+ push(
4576
+ ts,
4577
+ "hook.end",
4578
+ {
4579
+ hookType: "Stop",
4580
+ hookCount: rec.hookCount,
4581
+ success: (rec.hookErrors?.length ?? 0) === 0
4582
+ },
4583
+ rec.uuid,
4584
+ rec.parentUuid
4585
+ );
4517
4586
  } else if (rec.subtype === "compact_boundary") {
4518
- push(ts, "session.compaction_start", {
4519
- trigger: rec.compactMetadata?.trigger,
4520
- preTokens: rec.compactMetadata?.preTokens
4521
- }, rec.uuid, rec.parentUuid);
4587
+ push(
4588
+ ts,
4589
+ "session.compaction_start",
4590
+ {
4591
+ trigger: rec.compactMetadata?.trigger,
4592
+ preTokens: rec.compactMetadata?.preTokens
4593
+ },
4594
+ rec.uuid,
4595
+ rec.parentUuid
4596
+ );
4522
4597
  } else if (rec.subtype === "turn_duration") {
4523
- push(ts, "assistant.turn_end", {
4524
- durationMs: rec.durationMs
4525
- }, rec.uuid, rec.parentUuid);
4598
+ push(
4599
+ ts,
4600
+ "assistant.turn_end",
4601
+ {
4602
+ durationMs: rec.durationMs
4603
+ },
4604
+ rec.uuid,
4605
+ rec.parentUuid
4606
+ );
4526
4607
  } else {
4527
4608
  const { text, chars, truncated } = capText(rec.content);
4528
- push(ts, "system.message", {
4529
- role: rec.subtype ?? "system",
4530
- content: text,
4531
- charLength: chars,
4532
- truncated
4533
- }, rec.uuid, rec.parentUuid);
4609
+ push(
4610
+ ts,
4611
+ "system.message",
4612
+ {
4613
+ role: rec.subtype ?? "system",
4614
+ content: text,
4615
+ charLength: chars,
4616
+ truncated
4617
+ },
4618
+ rec.uuid,
4619
+ rec.parentUuid
4620
+ );
4534
4621
  }
4535
4622
  continue;
4536
4623
  }
4537
4624
  case "user": {
4538
4625
  const content = rec.message?.content;
4539
4626
  const pushText = (raw) => {
4627
+ if (rec.isMeta === true) {
4628
+ push(
4629
+ ts,
4630
+ "context.attachment",
4631
+ describeAttachment({ type: "synthetic", text: raw }),
4632
+ rec.uuid,
4633
+ rec.parentUuid
4634
+ );
4635
+ return;
4636
+ }
4540
4637
  const { text } = capText(raw);
4541
4638
  if (INTERRUPTED.test(text)) {
4542
- push(ts, "session.turn_aborted", { reason: "interrupted", message: text }, rec.uuid, rec.parentUuid);
4639
+ push(
4640
+ ts,
4641
+ "session.turn_aborted",
4642
+ { reason: "interrupted", message: text },
4643
+ rec.uuid,
4644
+ rec.parentUuid
4645
+ );
4543
4646
  } else {
4544
- push(ts, "user.message", { content: text }, rec.uuid, rec.parentUuid);
4647
+ push(
4648
+ ts,
4649
+ "user.message",
4650
+ { content: text },
4651
+ rec.uuid,
4652
+ rec.parentUuid
4653
+ );
4545
4654
  }
4546
4655
  };
4547
4656
  if (typeof content === "string") {
@@ -4566,7 +4675,13 @@ ${prompt}` : prompt
4566
4675
  rec.parentUuid
4567
4676
  );
4568
4677
  } else if (block.type === "image") {
4569
- push(ts, "context.attachment", describeAttachment({ type: "image" }), rec.uuid, rec.parentUuid);
4678
+ push(
4679
+ ts,
4680
+ "context.attachment",
4681
+ describeAttachment({ type: "image" }),
4682
+ rec.uuid,
4683
+ rec.parentUuid
4684
+ );
4570
4685
  }
4571
4686
  }
4572
4687
  continue;
@@ -4574,7 +4689,8 @@ ${prompt}` : prompt
4574
4689
  case "assistant": {
4575
4690
  const message = rec.message;
4576
4691
  if (!message) continue;
4577
- if (message.model && message.model !== "<synthetic>") meta.model = message.model;
4692
+ if (message.model && message.model !== "<synthetic>")
4693
+ meta.model = message.model;
4578
4694
  const usage = message.usage;
4579
4695
  const messageKey = message.id ?? rec.requestId ?? rec.uuid ?? "";
4580
4696
  let usageData = {};
@@ -4605,20 +4721,32 @@ ${prompt}` : prompt
4605
4721
  };
4606
4722
  for (const block of blocks) {
4607
4723
  if (block.type === "text") {
4608
- push(ts, "assistant.message", {
4609
- content: capText(block.text).text,
4610
- model: message.model,
4611
- effort: rec.effort,
4612
- requestId: rec.requestId,
4613
- ...attachUsage()
4614
- }, rec.uuid, rec.parentUuid);
4724
+ push(
4725
+ ts,
4726
+ "assistant.message",
4727
+ {
4728
+ content: capText(block.text).text,
4729
+ model: message.model,
4730
+ effort: rec.effort,
4731
+ requestId: rec.requestId,
4732
+ ...attachUsage()
4733
+ },
4734
+ rec.uuid,
4735
+ rec.parentUuid
4736
+ );
4615
4737
  } else if (block.type === "thinking") {
4616
- push(ts, "assistant.thinking", {
4617
- content: capText(block.thinking).text,
4618
- charLength: (block.thinking ?? "").length,
4619
- model: message.model,
4620
- ...attachUsage()
4621
- }, rec.uuid, rec.parentUuid);
4738
+ push(
4739
+ ts,
4740
+ "assistant.thinking",
4741
+ {
4742
+ content: capText(block.thinking).text,
4743
+ charLength: (block.thinking ?? "").length,
4744
+ model: message.model,
4745
+ ...attachUsage()
4746
+ },
4747
+ rec.uuid,
4748
+ rec.parentUuid
4749
+ );
4622
4750
  } else if (block.type === "tool_use") {
4623
4751
  const name = block.name ?? "tool";
4624
4752
  if (block.id) toolNames.set(block.id, name);
@@ -4643,11 +4771,17 @@ ${prompt}` : prompt
4643
4771
  }
4644
4772
  }
4645
4773
  if (!usageAttached && Object.keys(usageData).length > 0) {
4646
- push(ts, "assistant.message", {
4647
- content: "",
4648
- model: message.model,
4649
- ...usageData
4650
- }, rec.uuid, rec.parentUuid);
4774
+ push(
4775
+ ts,
4776
+ "assistant.message",
4777
+ {
4778
+ content: "",
4779
+ model: message.model,
4780
+ ...usageData
4781
+ },
4782
+ rec.uuid,
4783
+ rec.parentUuid
4784
+ );
4651
4785
  }
4652
4786
  continue;
4653
4787
  }
@@ -4675,7 +4809,8 @@ ${prompt}` : prompt
4675
4809
  }
4676
4810
  function parseFile(filePath, projectDir) {
4677
4811
  const parsed = parseClaudeTranscript(filePath);
4678
- if (!parsed.meta.cwd) parsed.meta.cwd = decodeProjectDir(path4.basename(projectDir));
4812
+ if (!parsed.meta.cwd)
4813
+ parsed.meta.cwd = decodeProjectDir(path4.basename(projectDir));
4679
4814
  return parsed;
4680
4815
  }
4681
4816
  var summarize = createFileCache((filePath) => {
@@ -6858,9 +6993,16 @@ function pricedActivity(meta) {
6858
6993
  for (const slot of meta.activity ?? []) slots.set(slot.t, { ...slot });
6859
6994
  const slices = /* @__PURE__ */ new Map();
6860
6995
  const unpriced = /* @__PURE__ */ new Set();
6996
+ const priceKeys = {};
6997
+ const custom = /* @__PURE__ */ new Set();
6861
6998
  for (const bucket of meta.usage ?? []) {
6862
6999
  const model = bucket.model ?? "unknown";
6863
- const cost = priceBucket(bucket);
7000
+ const { cost, lines } = priceBucket(bucket);
7001
+ if (bucket.model && !(model in priceKeys)) {
7002
+ const { key: key2, custom: isCustom } = priceKeyOf(model);
7003
+ priceKeys[model] = key2;
7004
+ if (isCustom) custom.add(model);
7005
+ }
6864
7006
  if (cost === null) unpriced.add(model);
6865
7007
  const slot = bucket.t === void 0 ? void 0 : slots.get(bucket.t);
6866
7008
  if (!slot) continue;
@@ -6875,10 +7017,16 @@ function pricedActivity(meta) {
6875
7017
  outputTokens: 0,
6876
7018
  cacheReadTokens: 0,
6877
7019
  cacheWriteTokens: 0,
6878
- costUSD: cost === null ? null : 0
7020
+ costUSD: cost === null ? null : 0,
7021
+ lines: []
6879
7022
  };
6880
7023
  slices.set(key, slice);
6881
7024
  }
7025
+ for (const line of lines) {
7026
+ const same = slice.lines.find((l) => l.kind === line.kind && l.rate === line.rate);
7027
+ if (same) same.tokens += line.tokens;
7028
+ else slice.lines.push({ kind: line.kind, tokens: line.tokens, rate: line.rate });
7029
+ }
6882
7030
  slice.inputTokens += bucket.inputTokens;
6883
7031
  slice.outputTokens += bucket.outputTokens;
6884
7032
  slice.cacheReadTokens += bucket.cacheReadTokens ?? 0;
@@ -6888,7 +7036,9 @@ function pricedActivity(meta) {
6888
7036
  return {
6889
7037
  activity: [...slots.values()],
6890
7038
  usage: [...slices.values()],
6891
- unpricedModels: unpriced.size > 0 ? [...unpriced] : void 0
7039
+ unpricedModels: unpriced.size > 0 ? [...unpriced] : void 0,
7040
+ priceKeys,
7041
+ customPriced: custom.size > 0 ? [...custom] : void 0
6892
7042
  };
6893
7043
  }
6894
7044
  function listAnalyticsSessions() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-session-inspector",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "See where a coding-agent session's tokens and dollars went: a local inspector for Claude Code, Codex, GitHub Copilot, Cursor, Gemini CLI, OpenCode and Hermes sessions, with a step-by-step timeline, per-step cost and analytics.",
5
5
  "keywords": [
6
6
  "agent",
@@ -1,3 +0,0 @@
1
- module.exports=[97428,a=>{"use strict";let b=(0,a.i(70627).default)("bug",[["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z",key:"uouzyp"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M21 21a4 4 0 0 0-3.81-4",key:"1b0z45"}],["path",{d:"M21 5a4 4 0 0 1-3.55 3.97",key:"5cxbf6"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M3 21a4 4 0 0 1 3.81-4",key:"1fjd4g"}],["path",{d:"M3 5a4 4 0 0 0 3.55 3.97",key:"1d7oge"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M9 7.13V6a3 3 0 1 1 6 0v1.13",key:"1vgav8"}]]);a.s(["Bug",0,b],97428)},73946,a=>{"use strict";let b=(0,a.i(70627).default)("calendar-days",[["path",{d:"M8 2v3",key:"1ioesn"}],["path",{d:"M16 2v3",key:"otl347"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M8 13h.01",key:"1sbv64"}],["path",{d:"M12 13h.01",key:"y0uutt"}],["path",{d:"M16 13h.01",key:"wip0gl"}],["path",{d:"M8 17h.01",key:"p3bg7i"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M16 17h.01",key:"ql8jdd"}]]);a.s(["CalendarDays",0,b],73946)},80995,94687,a=>{"use strict";let b=(0,a.i(70627).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["default",0,b],94687),a.s(["ChevronRight",0,b],80995)},89065,a=>{"use strict";let b=(0,a.i(70627).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",0,b],89065)},44264,a=>{"use strict";let b=(0,a.i(70627).default)("git-branch",[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]]);a.s(["GitBranch",0,b],44264)},89560,a=>{"use strict";let b=(0,a.i(70627).default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);a.s(["Info",0,b],89560)},37303,66535,a=>{"use strict";let b=(0,a.i(70627).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["default",0,b],66535),a.s(["AlertTriangle",0,b],37303)},22598,a=>{"use strict";let b=(0,a.i(70627).default)("zap",[["path",{d:"M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z",key:"1v7up4"}]]);a.s(["Zap",0,b],22598)},4888,a=>{"use strict";var b=a.i(38742),c=a.i(68114);a.s(["BarList",0,function({items:a,color:d="bg-brand",max:e,emptyLabel:f="None",limit:g,format:h=a=>a.toLocaleString()}){if(0===a.length)return(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:f});let i=[...a].sort((a,b)=>b.value-a.value),j=g?i.slice(0,g):i,k=e??i[0].value??1;return(0,b.jsxs)("div",{className:"space-y-1.5",children:[j.map(({name:a,value:e})=>(0,b.jsxs)("div",{className:"flex items-center gap-2.5 text-xs",children:[(0,b.jsx)("div",{className:"w-28 shrink-0 truncate font-mono text-muted-foreground sm:w-36",title:a,children:a}),(0,b.jsx)("div",{className:"h-4 flex-1 overflow-hidden rounded-sm bg-muted",children:(0,b.jsx)("div",{className:(0,c.cn)("h-full rounded-sm",d),style:{width:`${Math.max(e/k*100,2)}%`}})}),(0,b.jsx)("div",{className:"w-12 shrink-0 text-right font-medium tabular-nums text-foreground",children:h(e)})]},a)),g&&i.length>g&&(0,b.jsxs)("p",{className:"pt-1 text-xs text-muted-foreground",children:["+",i.length-g," more"]})]})}])},90892,a=>{"use strict";var b=a.i(38742),c=a.i(68114);a.s(["EmptyState",0,function({icon:a,title:d,description:e,action:f,className:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-border px-6 py-14 text-center",g),children:[(0,b.jsx)("div",{className:"flex size-10 items-center justify-center rounded-full bg-muted text-muted-foreground",children:(0,b.jsx)(a,{className:"size-5","aria-hidden":!0})}),(0,b.jsx)("p",{className:"text-sm font-medium text-foreground",children:d}),e&&(0,b.jsx)("p",{className:"max-w-sm text-xs leading-relaxed text-muted-foreground",children:e}),f&&(0,b.jsx)("div",{className:"mt-2",children:f})]})}])},63167,27855,a=>{"use strict";var b=a.i(38742);let c={A:{badge:"border-emerald-300 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300",bar:"bg-emerald-500"},B:{badge:"border-sky-300 bg-sky-50 text-sky-700 dark:border-sky-900 dark:bg-sky-950/40 dark:text-sky-300",bar:"bg-sky-500"},C:{badge:"border-amber-300 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-300",bar:"bg-amber-500"},D:{badge:"border-orange-300 bg-orange-50 text-orange-700 dark:border-orange-900 dark:bg-orange-950/40 dark:text-orange-300",bar:"bg-orange-500"},F:{badge:"border-red-300 bg-red-50 text-red-700 dark:border-red-900 dark:bg-red-950/40 dark:text-red-300",bar:"bg-red-500"}},d={completed:"The agent had the last word.",in_progress:"The agent is still writing to this session.",abandoned:"The session stops mid-work, or on a prompt the agent never answered.",errored:"The transcript ends on an API error."},e=(a,b,c=`${b}s`)=>`${a.toLocaleString()} ${1===a?b:c}`;a.s(["GRADES",0,["A","B","C","D","F"],"GRADE_STYLES",0,c,"OUTCOMES",0,["completed","in_progress","abandoned","errored"],"OUTCOME_BARS",0,{completed:"bg-emerald-500",in_progress:"bg-sky-500",abandoned:"bg-amber-500",errored:"bg-red-500"},"OUTCOME_LABELS",0,{completed:"Completed",in_progress:"In progress",abandoned:"Abandoned",errored:"Errored"},"OUTCOME_NOTES",0,d,"SIGNAL_INFO",0,{outcome:{label:"Unfinished sessions",describe:(a,b)=>d[b.outcome],advice:"Review errored and abandoned sessions first: they spent tokens without reaching an answer."},tool_failures:{label:"Tool failures",describe:(a,b)=>{let c=Math.max(b.toolResults,a.count);return`${a.count.toLocaleString()} of ${e(c,"tool result")} failed (${Math.round(a.count/c*100)}%).`},advice:"Open the failed calls and look for a recurring cause: wrong paths, missing dependencies, commands that need a flag.",focus:{failures:!0}},retry_loops:{label:"Retry loops",describe:a=>`The same tool failed three or more times in a row, ${e(a.count,"time")}.`,advice:"An agent repeating a failing call lacks the context to try something else. Put the working command in AGENTS.md or CLAUDE.md.",focus:{failures:!0}},api_errors:{label:"API errors",describe:a=>`${e(a.count,"API error")} or retried request${1===a.count?"":"s"}.`,advice:"Each retry re-sends the whole context. Frequent errors point at rate limits or an overloaded model.",focus:{categories:["session"],subKeys:["session.error"]}},aborted_turns:{label:"Interrupted turns",describe:a=>`${e(a.count,"turn")} interrupted before the agent finished.`,advice:"Interruptions usually mean the agent set off in the wrong direction. State the constraints and the success criteria up front.",focus:{categories:["session"],subKeys:["session.turn_aborted"]}},compactions:{label:"Context compactions",describe:a=>`Context was compacted ${e(a.count,"time")}.`,advice:"Split long tasks into separate sessions before the context fills up: compacting mid-task loses detail.",focus:{categories:["session"],subKeys:["session.compaction_start"]}}},"healthSummary",0,function(a){return`${a.grade} \xb7 ${a.score}`}],27855);var f=a.i(68114);a.s(["GradeBadge",0,function({grade:a,score:d,className:e,...g}){return(0,b.jsxs)("span",{...g,className:(0,f.cn)("inline-flex h-5 min-w-5 shrink-0 items-center justify-center gap-1 rounded-sm border px-1 font-mono text-xs font-bold leading-none",c[a].badge,e),children:[a,void 0!==d&&(0,b.jsx)("span",{className:"font-medium tabular-nums",children:d})]})}],63167)},19608,59561,a=>{"use strict";var b=a.i(38742),c=a.i(73895);let d=(0,a.i(70627).default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var e=a.i(99570),f=a.i(85259),g=a.i(68114);function h({className:a}){return(0,b.jsx)("div",{"aria-hidden":!0,className:(0,g.cn)("animate-pulse rounded-md bg-muted",a)})}a.s(["ScrollToTop",0,function({threshold:a=600}){let[h,i]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let b=()=>i(window.scrollY>a);return b(),window.addEventListener("scroll",b,{passive:!0}),()=>window.removeEventListener("scroll",b)},[a]),(0,b.jsxs)(f.Tooltip,{children:[(0,b.jsx)(f.TooltipTrigger,{render:(0,b.jsx)(e.Button,{variant:"outline",size:"icon-lg",onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),"aria-label":"Back to top",tabIndex:h?0:-1,className:(0,g.cn)("fixed bottom-6 right-6 z-30 size-10 rounded-full bg-card text-muted-foreground shadow-lg dark:bg-card",h?"translate-y-0 opacity-100":"pointer-events-none translate-y-2 opacity-0"),children:(0,b.jsx)(d,{"aria-hidden":!0})})}),(0,b.jsx)(f.TooltipContent,{side:"left",children:"Back to top"})]})}],19608),a.s(["SessionCardSkeleton",0,function(){return(0,b.jsxs)("div",{className:"rounded-xl border border-border bg-card px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1 space-y-2",children:[(0,b.jsx)(h,{className:"h-4 w-2/3"}),(0,b.jsx)(h,{className:"h-3 w-1/3"})]}),(0,b.jsx)(h,{className:"h-3 w-16"})]}),(0,b.jsxs)("div",{className:"mt-3 flex gap-2",children:[(0,b.jsx)(h,{className:"h-3 w-20"}),(0,b.jsx)(h,{className:"h-3 w-16"}),(0,b.jsx)(h,{className:"h-3 w-24"})]})]})},"Skeleton",0,h],59561)},84213,a=>{"use strict";var b=a.i(38742),c=a.i(89560),d=a.i(68114);a.s(["StatCard",0,function({label:a,value:e,sub:f,accent:g=!1,onClick:h}){let i=(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("span",{className:"flex items-center justify-between gap-2 text-xs uppercase tracking-wider text-muted-foreground",children:[a,h&&(0,b.jsx)(c.Info,{className:"size-3.5 shrink-0 opacity-60 transition-opacity group-hover:opacity-100","aria-hidden":!0})]}),(0,b.jsx)("span",{className:(0,d.cn)("mt-1.5 block text-2xl font-bold leading-none tabular-nums",g?"text-brand":"text-foreground"),children:e}),f&&(0,b.jsx)("span",{className:"mt-1 block truncate text-xs normal-case text-muted-foreground",title:f,children:f})]});return h?(0,b.jsx)("button",{type:"button",onClick:h,"aria-haspopup":"dialog",className:"group block rounded-xl border border-border bg-card p-4 text-left transition-colors hover:border-brand/40 hover:bg-muted/40 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:i}):(0,b.jsx)("div",{className:"rounded-xl border border-border bg-card p-4",children:i})},"StatCardGrid",0,function({children:a}){return(0,b.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(150px,1fr))] gap-3",children:a})}])},96538,a=>{"use strict";var b=a.i(70627);let c=(0,b.default)("arrow-down-to-line",[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]),d=(0,b.default)("arrow-up-from-line",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);a.s(["InputTokensIcon",0,d,"OutputTokensIcon",0,c],96538)},34597,45128,a=>{"use strict";var b=a.i(38742),c=a.i(73895),d=a.i(40762),e=a.i(97428),f=a.i(89560);let g=(0,a.i(70627).default)("tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);var h=a.i(99570),i=a.i(14574),j=a.i(85259),k=a.i(64151);let l="https://github.com/kishanmundha/agent-session-inspector",m={name:"Agent Session Inspector",description:"A local web UI for reading agent CLI transcripts: what the agent did, how long it took, and where the tokens went. It reads the session files on this machine and never sends them anywhere.",version:"0.1.8",author:{name:"Kishan Mundha",url:"https://github.com/kishanmundha"},repoUrl:l,issuesUrl:`${l}/issues`,releasesUrl:`${l}/releases`};a.s(["APP_INFO",0,m],45128);var n=a.i(80153),o=a.i(68114);function p({className:a}){return(0,b.jsx)("svg",{viewBox:"0 0 16 16",fill:"currentColor",className:a,"aria-hidden":!0,children:(0,b.jsx)("path",{d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"})})}let q={target:"_blank",rel:"noreferrer"};a.s(["AboutDialog",0,function({providers:a,className:l}){let[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(null),v=(0,c.useRef)(!1),w=a??t,x=w?.filter(a=>a.available),y=w?.filter(a=>!a.available)??[];return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(j.Tooltip,{children:[(0,b.jsx)(j.TooltipTrigger,{render:(0,b.jsx)(h.Button,{variant:"outline",size:"icon",onClick:function(){s(!0),a||v.current||(v.current=!0,fetch("/api/providers").then(a=>a.ok?a.json():[]).then(u).catch(()=>u([])))},"aria-label":"About",className:(0,o.cn)("text-muted-foreground",l),children:(0,b.jsx)(f.Info,{className:"size-3.5","aria-hidden":!0})})}),(0,b.jsx)(j.TooltipContent,{children:"About"})]}),(0,b.jsx)(i.Dialog,{open:r,onOpenChange:s,children:(0,b.jsxs)(i.DialogContent,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:"flex size-10 shrink-0 items-center justify-center rounded-lg bg-brand text-brand-foreground",children:(0,b.jsx)(d.Bot,{className:"size-5","aria-hidden":!0})}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)(i.DialogTitle,{children:m.name}),(0,b.jsxs)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[(0,b.jsxs)("span",{className:"font-mono",children:["v",m.version]})," · by ",(0,b.jsx)("a",{href:m.author.url,...q,className:"font-medium text-foreground underline-offset-2 hover:underline",children:m.author.name})]})]})]}),(0,b.jsx)(i.DialogDescription,{children:m.description}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsxs)(h.Button,{variant:"outline",size:"sm",nativeButton:!1,render:(0,b.jsx)("a",{href:m.repoUrl,...q}),children:[(0,b.jsx)(p,{className:"size-3.5"}),"GitHub"]}),(0,b.jsxs)(h.Button,{variant:"outline",size:"sm",nativeButton:!1,render:(0,b.jsx)("a",{href:m.releasesUrl,...q}),children:[(0,b.jsx)(g,{className:"size-3.5","aria-hidden":!0}),"Releases"]}),(0,b.jsxs)(h.Button,{variant:"outline",size:"sm",nativeButton:!1,render:(0,b.jsx)("a",{href:m.issuesUrl,...q}),children:[(0,b.jsx)(e.Bug,{className:"size-3.5","aria-hidden":!0}),"Report an issue"]})]}),(0,b.jsxs)("section",{className:"space-y-2 border-t border-border pt-3",children:[(0,b.jsx)("h3",{className:"text-xs font-medium text-foreground",children:"Data sources"}),x?x.length>0?(0,b.jsx)("ul",{className:"overflow-hidden rounded-lg border border-border text-xs",children:x.map(a=>(0,b.jsxs)("li",{className:"flex items-center gap-2 border-b border-border/60 px-3 py-2 last:border-b-0",children:[(0,b.jsx)("span",{className:(0,o.cn)("size-1.5 shrink-0 rounded-full",(0,n.providerStyle)(a.id).dotCls),"aria-hidden":!0}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("p",{className:"truncate font-medium text-foreground",children:a.label}),(0,b.jsx)("p",{className:"truncate font-mono text-muted-foreground",children:a.rootDir})]}),(0,b.jsx)("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:`${a.sessionCount??0} ${1===a.sessionCount?"session":"sessions"}`}),(0,b.jsx)(k.CopyButton,{value:a.rootDir,label:"Copy path"})]},a.id))}):(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"No agent directories found."}):(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Loading…"}),y.length>0&&(0,b.jsxs)("p",{className:"text-xs text-muted-foreground",children:[x?.length?"Also supports":"Supports"," ",y.map(a=>a.label).join(", "),"."]})]})]})})]})}],34597)},56979,a=>{"use strict";var b=a.i(38742),c=a.i(73895),d=a.i(90075),e=a.i(68114);let f="\0other";function g(a,b){return"costUSD"===a?(0,d.formatCost)(b):(0,d.formatTokens)(b)??"0"}function h(a){if(a<=0)return 1;let b=10**Math.floor(Math.log10(a));return([1,1.5,2,3,4,5,6,8,10].find(c=>c*b>=a)??10)*b}let i=a=>a.toLocaleDateString([],{month:"short",day:"numeric"});a.s(["OTHER",0,f,"OTHER_COLOR",0,"color-mix(in srgb, var(--muted-foreground) 45%, transparent)","SERIES_COLORS",0,["var(--chart-1)","var(--chart-2)","var(--chart-3)","var(--chart-4)","var(--chart-5)"],"StackedBars",0,function({periods:a,breakdownOf:d,series:j,unit:k}){var l;let[m,n]=(0,c.useState)(null),o=h(Math.max(0,...a.map(a=>a[k]))),p=a.map(a=>(function(a,b,c){let d=new Set(b.map(a=>a.name)),e=0;for(let[b,f]of Object.entries(a))d.has(b)||(e+=f[c]);return b.map(b=>b.name===f?e:a[b.name]?.[c]??0)})(d(a),j,k)),q=null!==m&&m<a.length?m:null,r=j.map((a,b)=>p.reduce((a,c)=>a+c[b],0)),s=null===q?r:p[q],t=s.reduce((a,b)=>a+b,0),u=Math.floor((a.length-1)/2);return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)("div",{className:"flex h-48 flex-col justify-between text-right text-[10px] leading-none tabular-nums text-muted-foreground",children:[(0,b.jsx)("span",{children:g(k,o)}),(0,b.jsx)("span",{children:g(k,o/2)}),(0,b.jsx)("span",{children:g(k,0)})]}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{role:"img","aria-label":`${"costUSD"===k?"Cost":"Tokens"} per ${a[0]?.days===1?"day":"week"} over ${a.length} bars`,className:"relative flex h-48 items-end gap-[2px] border-b border-border",onMouseLeave:()=>n(null),children:[(0,b.jsx)("span",{className:"pointer-events-none absolute inset-x-0 top-0 border-t border-dashed border-border"}),(0,b.jsx)("span",{className:"pointer-events-none absolute inset-x-0 top-1/2 border-t border-dashed border-border"}),a.map((a,c)=>(0,b.jsx)("div",{onMouseEnter:()=>n(c),className:(0,e.cn)("relative flex h-full min-w-0 max-w-12 flex-1 flex-col-reverse",null!==q&&q!==c&&"opacity-50"),children:j.map((a,d)=>p[c][d]>0?(0,b.jsx)("div",{className:"w-full shrink-0 border-t-2 border-card first:border-t-0 last:rounded-t-[3px]",style:{height:`${p[c][d]/o*100}%`,minHeight:2,background:a.color}},a.name):null)},a.start.getTime()))]}),(0,b.jsxs)("div",{className:"mt-1.5 flex justify-between text-[10px] text-muted-foreground",children:[(0,b.jsx)("span",{children:a.length>0&&i(a[0].start)}),a.length>4&&(0,b.jsx)("span",{children:i(a[u].start)}),(0,b.jsx)("span",{children:a.length>1&&i(a[a.length-1].start)})]})]})]}),(0,b.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs","aria-live":"polite",children:[(0,b.jsxs)("span",{className:"font-medium tabular-nums",children:[null===q?"Whole range":1===(l=a[q]).days?l.start.toLocaleDateString([],{weekday:"short",month:"short",day:"numeric"}):`Week of ${i(l.start)}`," ·"," ",g(k,t)]}),j.map((a,c)=>(0,b.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-muted-foreground",children:[(0,b.jsx)("span",{className:"size-2.5 shrink-0 rounded-[3px]",style:{background:a.color},"aria-hidden":!0}),(0,b.jsx)("span",{className:"max-w-40 truncate",title:a.label,children:a.label}),(0,b.jsx)("span",{className:"tabular-nums text-foreground",children:g(k,s[c])})]},a.name))]})]})},"Treemap",0,function({items:a,unit:c}){let d=a.filter(a=>a.value>0).sort((a,b)=>b.value-a.value),e=d.reduce((a,b)=>a+b.value,0),f=function(a){let b=a.reduce((a,b)=>a+b,0);if(b<=0)return[];let c=a.map(a=>a/b*5600),d=[],e=0,f=0,g=100,h=56,i=0;for(;i<c.length;){let a=Math.min(g,h),b=(b,c,d)=>Math.max(a*a*d/(b*b),b*b/(a*a*c)),j=c[i],k=i+1;for(;k<c.length;){let a=j+c[k];if(b(a,c[k],c[i])>b(j,c[k-1],c[i]))break;j=a,k++}let l=j/a,m=0;for(let a=i;a<k;a++){let b=c[a]/l;d.push(g>=h?{x:e,y:f+m,w:l,h:b}:{x:e+m,y:f,w:b,h:l}),m+=b}g>=h?(e+=l,g-=l):(f+=l,h-=l),i=k}return d}(d.map(a=>a.value));return(0,b.jsx)("div",{className:"relative w-full",style:{aspectRatio:"100 / 56"},role:"img","aria-label":`Share of ${"costUSD"===c?"cost":"tokens"} across ${d.length} groups`,children:d.map((a,d)=>{let h=f[d],i=a.value/e;return(0,b.jsx)("div",{title:`${a.label}: ${g(c,a.value)} (${(100*i).toFixed(1)}%)`,className:"absolute p-px",style:{left:`${h.x/100*100}%`,top:`${h.y/56*100}%`,width:`${h.w/100*100}%`,height:`${h.h/56*100}%`},children:(0,b.jsx)("div",{className:"size-full overflow-hidden rounded-[4px] border-l-[3px] px-1.5 py-1 hover:ring-1 hover:ring-foreground/50",style:{background:`color-mix(in srgb, ${a.color} 28%, var(--card))`,borderColor:a.color},children:h.w>14&&h.h>11&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"block truncate text-xs font-medium",children:a.label}),(0,b.jsxs)("span",{className:"block truncate text-[11px] tabular-nums text-muted-foreground",children:[g(c,a.value)," · ",(100*i).toFixed(1),"%"]})]})})},a.name)})})},"formatUnit",0,g,"niceCeil",0,h])},86304,a=>{"use strict";var b=a.i(83463),c=a.i(16262),d=a.i(42261),e=a.i(68114);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){var i;return i={defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}},(0,c.useRenderElement)(i.defaultTagName??"div",i,i)}],86304)},69876,64151,a=>{"use strict";var b=a.i(38742);a.s([],89088),a.i(89088);var c=a.i(73895),d=a.i(28050),e=a.i(10764),f=a.i(90874);let g=c.createContext(void 0);function h(){let a=c.useContext(g);if(void 0===a)throw Error((0,f.default)(53));return a}var i=a.i(16262);function j(a,b,c){if(!a)return 0;let d=getComputedStyle(a),e=`${b}${"x"===c?"Inline":"Block"}`,f=parseFloat(d[`${e}Start`]);return"x"===c&&"margin"===b?2*f:f+parseFloat(d[`${e}End`])}var k=a.i(4133),l=a.i(28353);let m=a=>b=>b?{[a]:""}:null,n={hasOverflowX:m("data-has-overflow-x"),hasOverflowY:m("data-has-overflow-y"),overflowXStart:m("data-overflow-x-start"),overflowXEnd:m("data-overflow-x-end"),overflowYStart:m("data-overflow-y-start"),overflowYEnd:m("data-overflow-y-end"),cornerHidden:()=>null};var o=a.i(18727),p=a.i(46621);let q={x:0,y:0},r={width:0,height:0},s={xStart:!1,xEnd:!1,yStart:!1,yEnd:!1},t={x:!0,y:!0,corner:!0},u=c.forwardRef(function(a,f){var h;let m,{render:u,className:v,overflowEdgeThreshold:w,style:x,...y}=a,{xStart:z,xEnd:A,yStart:B,yEnd:C}=(m="number"==typeof(h=w)?{xStart:h,xEnd:h,yStart:h,yEnd:h}:h,{xStart:Math.max(0,m?.xStart||0),xEnd:Math.max(0,m?.xEnd||0),yStart:Math.max(0,m?.yStart||0),yEnd:Math.max(0,m?.yEnd||0)}),D=(0,l.useBaseUiId)(),E=(0,e.useTimeout)(),F=(0,e.useTimeout)(),{nonce:G,disableStyleElements:H}=(0,p.useCSPContext)(),[I,J]=c.useState(!1),[K,L]=c.useState(!1),[M,N]=c.useState(!1),[O,P]=c.useState(!1),[Q,R]=c.useState(!1),[S,T]=c.useState(r),[U,V]=c.useState(r),[W,X]=c.useState(s),[Y,Z]=c.useState(t),$=c.useRef(null),_=c.useRef(null),aa=c.useRef(null),ab=c.useRef(null),ac=c.useRef(null),ad=c.useRef(null),ae=c.useRef(null),af=c.useRef(null),ag=c.useRef(0),ah=c.useRef(0),ai=c.useRef(0),aj=c.useRef(0),ak=c.useRef("vertical"),al=c.useRef(q),am=c.useRef(null);function an(a){let b=a?N:L;b(!0),(a?E:F).start(500,()=>{b(!1)})}let ao=(0,d.useStableCallback)(a=>{let b=a.x-al.current.x,c=a.y-al.current.y;al.current=a,0!==c&&an(!0),0!==b&&an(!1)}),ap=(0,d.useStableCallback)(()=>{let a=_.current;a&&null===am.current&&(am.current=a.style.scrollSnapType,a.style.scrollSnapType="none")}),aq=(0,d.useStableCallback)(a=>{if(0!==a.button)return;if(null!==af.current){let a="vertical"===ak.current?ac.current:ad.current;if(a?.hasPointerCapture(af.current))return}af.current=a.pointerId,ag.current=a.clientY,ah.current=a.clientX,ak.current=a.currentTarget.getAttribute("data-orientation");let b=_.current;b&&(ai.current=b.scrollTop,aj.current=b.scrollLeft,ap());let c="vertical"===ak.current?ac.current:ad.current;c?.setPointerCapture(a.pointerId)}),ar=(0,d.useStableCallback)(a=>{if(a.pointerId!==af.current)return;af.current=null,("vertical"===ak.current?N:L)(!1),null!==am.current&&(_.current&&(_.current.style.scrollSnapType=am.current),am.current=null);let b="vertical"===ak.current?ac.current:ad.current;b?.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId)}),as=(0,d.useStableCallback)(a=>{if(a.pointerId!==af.current)return;if(a.buttons%2==0)return void ar(a);let b=_.current;if(!b)return;let c="vertical"===ak.current,d=c?ac.current:ad.current,e=c?aa.current:ab.current;if(!d||!e)return;let f=c?"y":"x",g=j(e,"padding",f),h=j(d,"margin",f),i=c?d.offsetHeight:d.offsetWidth,k=(c?e.offsetHeight:e.offsetWidth)-i-g-h,l=c?a.clientY-ag.current:a.clientX-ah.current,m=c?b.scrollHeight:b.scrollWidth,n=c?b.clientHeight:b.clientWidth,o=(c?ai.current:aj.current)+(k<=0?0:l/k)*(m-n);c?b.scrollTop=o:b.scrollLeft=o,a.preventDefault(),an(c)});function at(a){P("touch"===a.pointerType)}function au(a){at(a),"touch"!==a.pointerType&&J((0,o.contains)($.current,a.target))}let av=c.useMemo(()=>({scrolling:K||M,hasOverflowX:!Y.x,hasOverflowY:!Y.y,overflowXStart:W.xStart,overflowXEnd:W.xEnd,overflowYStart:W.yStart,overflowYEnd:W.yEnd,cornerHidden:Y.corner}),[K,M,Y.x,Y.y,Y.corner,W]),aw={role:"presentation",onPointerEnter:au,onPointerMove:au,onPointerDown:at,onPointerLeave(){J(!1)},style:{position:"relative","--scroll-area-corner-height":`${S.height}px`,"--scroll-area-corner-width":`${S.width}px`}},ax=(0,i.useRenderElement)("div",a,{state:av,ref:[f,$],props:[aw,y],stateAttributesMapping:n}),ay=c.useMemo(()=>({handlePointerDown:aq,handlePointerMove:as,handlePointerUp:ar,handleScroll:ao,disableViewportSnap:ap,cornerSize:S,setCornerSize:T,thumbSize:U,setThumbSize:V,hasMeasuredScrollbar:Q,setHasMeasuredScrollbar:R,touchModality:O,cornerRef:ae,scrollingX:K,scrollingY:M,hovering:I,setHovering:J,viewportRef:_,scrollbarYRef:aa,scrollbarXRef:ab,thumbYRef:ac,thumbXRef:ad,rootId:D,hiddenState:Y,setHiddenState:Z,overflowEdges:W,setOverflowEdges:X,viewportState:av,overflowEdgeThreshold:{xStart:z,xEnd:A,yStart:B,yEnd:C}}),[aq,as,ar,ao,ap,S,U,Q,O,K,M,I,D,Y,W,av,z,A,B,C]);return(0,b.jsxs)(g.Provider,{value:ay,children:[!H&&k.styleDisableScrollbar.getElement(G),ax]})});var v=a.i(45351),w=a.i(447);let x=c.createContext(void 0);var y=a.i(46781),z=a.i(22226),A=a.i(11194);let B=["--scroll-area-overflow-x-start","--scroll-area-overflow-x-end","--scroll-area-overflow-y-start","--scroll-area-overflow-y-end"],C=!1,D=c.forwardRef(function(a,f){let{render:g,className:l,style:m,...o}=a,{viewportRef:p,scrollbarYRef:q,scrollbarXRef:r,thumbYRef:s,thumbXRef:t,cornerRef:u,cornerSize:z,setCornerSize:D,setThumbSize:G,rootId:H,setHiddenState:I,hiddenState:J,setHasMeasuredScrollbar:K,handleScroll:L,touchModality:M,setHovering:N,setOverflowEdges:O,overflowEdgeThreshold:P,viewportState:Q}=h(),R=(0,y.useDirection)(),S=c.useRef(!0),T=c.useRef([NaN,NaN,NaN,NaN]),U=(0,e.useTimeout)(),V=(0,e.useTimeout)(),W=(0,d.useStableCallback)(()=>{var a;let b,c,d=p.current,e=q.current,f=r.current,g=s.current,h=t.current,i=u.current;if(!d)return;let k=d.scrollHeight,l=d.scrollWidth,m=d.clientHeight,n=d.clientWidth,o=d.scrollTop,v=d.scrollLeft,w=T.current,x=Number.isNaN(w[0]);if(w[0]=m,w[1]=k,w[2]=n,w[3]=l,x&&K(!0),0===k||0===l)return;let y=(b=(a=d).clientHeight>=a.scrollHeight,{y:b,x:c=a.clientWidth>=a.scrollWidth,corner:b||c}),C=y.y,H=y.x,J=n/l,L=m/k,M=Math.max(0,l-n),N=Math.max(0,k-m),Q=0,S=0;H||(Q=(0,A.normalizeScrollOffset)("rtl"===R?-v:v,M),S=M-Q);let U=C?0:(0,A.normalizeScrollOffset)(o,N),V=C?0:N-U,W=H?0:n,X=C?0:m,Y=0,Z=0;H||C||(Y=e?.offsetWidth||0,Z=f?.offsetHeight||0);let $=0===z.width&&0===z.height,_=$?Y:0,aa=$?Z:0,ab=j(f,"padding","x"),ac=j(e,"padding","y"),ad=j(h,"margin","x"),ae=j(g,"margin","y"),af=W-ab-ad,ag=X-ac-ae,ah=f?Math.min(f.offsetWidth-_,af):af,ai=e?Math.min(e.offsetHeight-aa,ag):ag,aj=Math.max(16,ah*J),ak=Math.max(16,ai*L);if(G(a=>E(a,{width:aj,height:ak})),e&&g){let a=e.offsetHeight-ak-ac-ae,b=F(g,"--scroll-area-thumb-height",o,N,k,ak,a);g.style.transform=`translate3d(0,${b}px,0)`}if(f&&h){let a=f.offsetWidth-aj-ab-ad,b=F(h,"--scroll-area-thumb-width","rtl"===R?-v:v,M,l,aj,a);h.style.transform=`translate3d(${"rtl"===R?-b:b}px,0,0)`}let al=[Q,S,U,V];B.forEach((a,b)=>{d.style.setProperty(a,`${al[b]}px`)}),i&&D(a=>E(a,{width:Y,height:Z})),I(a=>E(a,y));let am={xStart:!H&&Q>P.xStart,xEnd:!H&&S>P.xEnd,yStart:!C&&U>P.yStart,yEnd:!C&&V>P.yEnd};O(a=>E(a,am))});function X(){S.current=!1}(0,v.useIsoLayoutEffect)(()=>{C||w.platform.engine.webkit||("u">typeof CSS&&"registerProperty"in CSS&&B.forEach(a=>{try{CSS.registerProperty({name:a,syntax:"<length>",inherits:!1,initialValue:"0px"})}catch{}}),C=!0)},[]),(0,v.useIsoLayoutEffect)(()=>{queueMicrotask(W)},[W,J,R,P.xStart,P.xEnd,P.yStart,P.yEnd]),(0,v.useIsoLayoutEffect)(()=>{p.current?.matches(":hover")&&N(!0)},[p,N]),(0,v.useIsoLayoutEffect)(()=>{let a=p.current;if("u"<typeof ResizeObserver||!a)return;let b=!1,c=new ResizeObserver(()=>{if(!b){b=!0;let c=T.current;if(c[0]===a.clientHeight&&c[1]===a.scrollHeight&&c[2]===a.clientWidth&&c[3]===a.scrollWidth)return}W()});return c.observe(a),V.start(0,()=>{let b=a.getAnimations({subtree:!0});0!==b.length&&Promise.allSettled(b.map(a=>a.finished)).then(W).catch(()=>{})}),()=>{c.disconnect(),V.clear()}},[W,p,V]);let Y={role:"presentation",...H&&{"data-id":`${H}-viewport`},tabIndex:J.x&&J.y?-1:0,className:k.styleDisableScrollbar.className,style:{overflow:"scroll"},onScroll(){p.current&&(W(),(M||!S.current)&&L({x:p.current.scrollLeft,y:p.current.scrollTop}),U.start(100,()=>{S.current=!0}))},onWheel:X,onPointerMove:X,onPointerEnter:X,onKeyDown:X},Z=(0,i.useRenderElement)("div",a,{ref:[f,p],state:Q,props:[Y,o],stateAttributesMapping:n}),$=c.useMemo(()=>({computeThumbPosition:W}),[W]);return(0,b.jsx)(x.Provider,{value:$,children:Z})});function E(a,b){for(let c in b)if(a[c]!==b[c])return b;return a}function F(a,b,c,d,e,f,g){let h=(0,z.clamp)(c,0,d),i=c-h,j=Math.max(16,f*e/(e+Math.abs(i)));return a.style.setProperty(b,i?`${j}px`:""),(d?h/d*g:0)+(i>0?f-j:0)}var G=a.i(37781);let H=c.createContext(void 0),I=c.forwardRef(function(a,d){let{render:e,className:f,orientation:g="vertical",keepMounted:k=!1,style:l,...m}=a,{hovering:p,scrollingX:q,scrollingY:r,hiddenState:s,scrollbarYRef:t,scrollbarXRef:u,viewportRef:v,thumbYRef:w,thumbXRef:x,handlePointerDown:z,handlePointerUp:A,handleScroll:B,disableViewportSnap:C,rootId:D,thumbSize:E,hasMeasuredScrollbar:F,viewportState:I}=h(),J="vertical"===g,K={...I,hovering:p,scrolling:J?r:q,orientation:g},L=(0,y.useDirection)(),M=!F&&!k,N=J?s.y:s.x,O=k||!N;c.useEffect(()=>{if(!O)return;let a=v.current,b=J?t.current:u.current;if(b)return(0,G.addEventListener)(b,"wheel",function(b){if(!a||b.ctrlKey)return;let c=!J,d=c?"scrollLeft":"scrollTop",e=c?b.deltaX:b.deltaY;if(0===e)return;let f=c?a.scrollWidth-a.clientWidth:a.scrollHeight-a.clientHeight,g=c&&"rtl"===L?-f:0,h=c&&"rtl"===L?0:f,i=a[d];i<=g&&e<0||i>=h&&e>0||(b.preventDefault(),a[d]=Math.min(h,Math.max(g,i+e)),B({x:a.scrollLeft,y:a.scrollTop}))},{passive:!1})},[L,B,J,u,t,O,v]);let P={...D&&{"data-id":`${D}-scrollbar`},onPointerDown(a){if(0!==a.button)return;let b=(0,o.getTarget)(a.nativeEvent),c=J?w.current:x.current;if(c&&(0,o.contains)(c,b))return;let d=v.current;if(!d)return;let e=J?t.current:u.current;if(!c||!e)return;let f=J?"y":"x",g=j(c,"margin",f),h=j(e,"padding",f),i=J?c.offsetHeight:c.offsetWidth,k=e.getBoundingClientRect(),l=J?a.clientY-k.top-i/2-h+g/2:a.clientX-k.left-i/2-h+g/2,m=J?d.scrollHeight:d.scrollWidth,n=J?d.clientHeight:d.clientWidth,p=(J?e.offsetHeight:e.offsetWidth)-i-h-g;if(p<=0)return;let q=l/p,r=m-n;C(),J?d.scrollTop=q*r:"rtl"===L?d.scrollLeft=-(1-q)*r:d.scrollLeft=q*r,B({x:d.scrollLeft,y:d.scrollTop}),z(a)},onPointerUp:A,onPointerCancel:A,style:{position:"absolute",touchAction:"none",WebkitUserSelect:"none",userSelect:"none",visibility:M?"hidden":void 0,...J?{top:0,bottom:"var(--scroll-area-corner-height)",insetInlineEnd:0,"--scroll-area-thumb-height":`${E.height}px`}:{insetInlineStart:0,insetInlineEnd:"var(--scroll-area-corner-width)",bottom:0,"--scroll-area-thumb-width":`${E.width}px`}}},Q=(0,i.useRenderElement)("div",a,{ref:[d,J?t:u],state:K,props:[P,m],stateAttributesMapping:n});return O?(0,b.jsx)(H.Provider,{value:g,children:Q}):null}),J=c.forwardRef(function(a,b){let{render:d,className:e,style:g,...j}=a,{computeThumbPosition:k}=function(){let a=c.useContext(x);if(void 0===a)throw Error((0,f.default)(55));return a}(),{hasMeasuredScrollbar:l,viewportState:m}=h(),o=c.useRef(null),p=c.useRef(l);return(0,v.useIsoLayoutEffect)(()=>{if("u"<typeof ResizeObserver)return;let a=!1,b=new ResizeObserver(()=>{(a||(a=!0,p.current))&&k()});return o.current&&b.observe(o.current),()=>{b.disconnect()}},[k]),(0,i.useRenderElement)("div",a,{ref:[b,o],state:m,stateAttributesMapping:n,props:[{role:"presentation",style:{minWidth:"fit-content"}},j]})}),K=c.forwardRef(function(a,b){let{render:d,className:e,style:g,...j}=a,{thumbYRef:k,thumbXRef:l,handlePointerDown:m,handlePointerMove:n,handlePointerUp:o,scrollingX:p,scrollingY:q,hasMeasuredScrollbar:r}=h(),s=function(){let a=c.useContext(H);if(void 0===a)throw Error((0,f.default)(54));return a}(),t="vertical"===s;return(0,i.useRenderElement)("div",a,{ref:[b,t?k:l],state:{scrolling:t?q:p,orientation:s},props:[{onPointerDown:m,onPointerMove:n,onPointerUp:o,onPointerCancel:o,style:{visibility:r?void 0:"hidden",...t?{height:"var(--scroll-area-thumb-height)"}:{width:"var(--scroll-area-thumb-width)"}}},j]})}),L=c.forwardRef(function(a,b){let{render:c,className:d,style:e,...f}=a,{cornerRef:g,cornerSize:j,hiddenState:k}=h(),l=(0,i.useRenderElement)("div",a,{ref:[b,g],props:[{style:{position:"absolute",bottom:0,insetInlineEnd:0,width:j.width,height:j.height}},f]});return k.corner?null:l});a.s(["Content",0,J,"Corner",0,L,"Root",0,u,"Scrollbar",0,I,"Thumb",0,K,"Viewport",0,D],73269);var M=a.i(73269),M=M,N=a.i(68114);function O({className:a,orientation:c="vertical",...d}){return(0,b.jsx)(M.Scrollbar,{"data-slot":"scroll-area-scrollbar","data-orientation":c,orientation:c,className:(0,N.cn)("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",a),...d,children:(0,b.jsx)(M.Thumb,{"data-slot":"scroll-area-thumb",className:"relative flex-1 rounded-full bg-border"})})}a.s(["ScrollArea",0,function({className:a,children:c,...d}){return(0,b.jsxs)(M.Root,{"data-slot":"scroll-area",className:(0,N.cn)("relative",a),...d,children:[(0,b.jsx)(M.Viewport,{"data-slot":"scroll-area-viewport",className:"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",children:c}),(0,b.jsx)(O,{}),(0,b.jsx)(M.Corner,{})]})}],69876);var P=a.i(33898),P=P;let Q=(0,a.i(70627).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);var R=a.i(61055),S=a.i(99570),T=a.i(85259);a.s(["CopyButton",0,function({value:a,label:d="Copy",size:e="xs",icon:f=Q,className:g,children:h}){let[i,j]=(0,c.useState)("idle"),k=(0,c.useRef)(void 0);async function l(){try{await navigator.clipboard.writeText("function"==typeof a?a():a),j("copied")}catch{j("failed")}window.clearTimeout(k.current),k.current=window.setTimeout(()=>j("idle"),1600)}(0,c.useEffect)(()=>()=>window.clearTimeout(k.current),[]);let m="copied"===i?P.default:"failed"===i?R.X:f;return(0,b.jsxs)(T.Tooltip,{children:[(0,b.jsx)(T.TooltipTrigger,{render:(0,b.jsxs)(S.Button,{variant:"ghost",size:h?e:`icon-${e}`,onClick:l,"aria-label":d,className:(0,N.cn)("text-muted-foreground","copied"===i&&"text-emerald-600 dark:text-emerald-400","failed"===i&&"text-destructive",g),children:[(0,b.jsx)(m,{className:"size-3.5","aria-hidden":!0}),h]})}),(0,b.jsx)(T.TooltipContent,{children:"copied"===i?"Copied":"failed"===i?"Copy failed":d})]})}],64151)},6015,a=>{"use strict";var b=a.i(38742),c=a.i(68114);a.s(["Table",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,b.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm",a),...d})})},"TableBody",0,function({className:a,...d}){return(0,b.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",a),...d})},"TableCell",0,function({className:a,...d}){return(0,b.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",a),...d})},"TableFooter",0,function({className:a,...d}){return(0,b.jsx)("tfoot",{"data-slot":"table-footer",className:(0,c.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...d})},"TableHead",0,function({className:a,...d}){return(0,b.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",a),...d})},"TableHeader",0,function({className:a,...d}){return(0,b.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",a),...d})},"TableRow",0,function({className:a,...d}){return(0,b.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",a),...d})}])},75083,a=>{"use strict";var b,c=a.i(38742);a.s([],97541),a.i(97541);var d=a.i(73895),e=a.i(45143),f=a.i(45351),g=a.i(28050),h=a.i(16262),i=a.i(86466),j=a.i(90874);let k=d.createContext(void 0);function l(){let a=d.useContext(k);if(void 0===a)throw Error((0,j.default)(64));return a}let m={tabActivationDirection:a=>({"data-activation-direction":a})};var n=a.i(4268),o=a.i(81353);let p=d.forwardRef(function(a,b){let{className:j,defaultValue:l=0,onValueChange:p,orientation:s="horizontal",render:t,value:u,style:v,...w}=a,x=void 0!==a.defaultValue,y=d.useRef([]),[z,A]=d.useState(()=>new Map),[B,C]=(0,e.useControlled)({controlled:u,default:l,name:"Tabs",state:"value"}),D=void 0!==u,[E,F]=d.useState(()=>new Map),G=d.useRef(void 0),H=d.useCallback(a=>q(E,a),[E]),[I,J]=d.useState(()=>({previousValue:B,tabActivationDirection:"none"})),{previousValue:K,tabActivationDirection:L}=I,M=L,N=!1;K!==B&&(M=r(K,B,s,E),N=null!=K&&null!=B&&null==H(B));let O=N?K:B,P=K!==O||L!==M;(0,f.useIsoLayoutEffect)(()=>{P&&J({previousValue:O,tabActivationDirection:M})},[O,P,M]);let Q=(0,g.useStableCallback)((a,b)=>{b.activationDirection=r(B,a,s,E),p?.(a,b),b.isCanceled||C(a)}),R=(0,g.useStableCallback)((a,b)=>{p?.(a,(0,n.createChangeEventDetails)(b,void 0,void 0,{activationDirection:"none"}))}),S=(0,g.useStableCallback)((a,b)=>(A(c=>{let d=new Map(c);return d.set(a,b),d}),()=>{A(c=>{if(c.get(a)!==b)return c;let d=new Map(c);return d.delete(a),d})})),T=d.useCallback(a=>z.get(a),[z]),U=d.useCallback(a=>{for(let b of E.values())if(a===b.value)return b.id},[E]),V=d.useMemo(()=>({getTabElementBySelectedValue:H,getTabIdByPanelValue:U,getTabPanelIdByValue:T,onValueChange:Q,orientation:s,registerMountedTabPanel:S,setTabMap:F,tabActivationDirection:M,value:B}),[H,U,T,Q,s,S,F,M,B]),W=d.useMemo(()=>{for(let a of E.values())if(a.value===B)return a},[E,B]),X=d.useMemo(()=>{for(let a of E.values())if(!a.disabled)return a.value},[E]),Y=d.useRef(!x),Z=d.useRef(l),$=d.useRef(x),_=d.useRef(!1);(0,f.useIsoLayoutEffect)(()=>{if(D)return;function a(a,b){C(a),J({previousValue:a,tabActivationDirection:"none"}),R(a,b),Y.current=!1}if(0===E.size){_.current&&null!==B&&!G.current?.isConnected&&a(null,o.REASONS.missing);return}_.current=!0,G.current=E.keys().next().value;let b=W?.disabled,c=null==W&&null!==B;if(b||B!==Z.current||($.current=!1),$.current&&b&&B===Z.current)return;let d=Y.current;if(b||c){let c=X??null;if(B===c){Y.current=!1;return}let e=o.REASONS.missing;d?e=o.REASONS.initial:b&&(e=o.REASONS.disabled),a(c,e);return}d&&null!=W&&(R(B,o.REASONS.initial),Y.current=!1)},[X,D,R,W,C,E,B]);let aa={orientation:s,tabActivationDirection:M},ab=(0,h.useRenderElement)("div",a,{state:aa,ref:b,props:w,stateAttributesMapping:m});return(0,c.jsx)(k.Provider,{value:V,children:(0,c.jsx)(i.CompositeList,{elementsRef:y,children:ab})})});function q(a,b){for(let[c,d]of a.entries())if(b===d.value)return c;return null}function r(a,b,c,d){if(null==a||null==b)return"none";let[e,f,g]="horizontal"===c?["left","left","right"]:["top","up","down"],h=q(d,a),i=q(d,b);if(null==h||null==i)return h!==i&&("number"==typeof a||"string"==typeof a)&&typeof a==typeof b?b>a?g:f:"none";let j=h.getBoundingClientRect()[e],k=i.getBoundingClientRect()[e];return k<j?f:k>j?g:"none"}var s=a.i(77875),t=a.i(28353),u=a.i(67107),v=a.i(30619),w=a.i(41425),x=a.i(58299);let y=d.createContext(void 0);function z(){let a=d.useContext(y);if(void 0===a)throw Error((0,j.default)(65));return a}var A=a.i(18727);let B=d.forwardRef(function(a,b){let{className:c,disabled:e=!1,render:i,value:j,id:k,nativeButton:p=!0,style:q,...r}=a,{value:y,getTabPanelIdByValue:B,onValueChange:C,orientation:D,tabActivationDirection:E}=l(),{activateOnFocus:F,registerTabResizeObserverElement:G,tabsListElement:H}=z(),{highlightedIndex:I,onHighlightedIndexChange:J}=(0,x.useCompositeRootContext)(),K=(0,t.useBaseUiId)(k),L=d.useMemo(()=>({disabled:e,id:K,value:j}),[e,K,j]),{compositeProps:M,compositeRef:N,index:O}=(0,w.useCompositeItem)({metadata:L}),P=j===y,Q=d.useRef(!1),R=d.useRef(null),S=(0,g.useStableCallback)(a=>{R.current?.(),R.current=a?G(a):null});(0,f.useIsoLayoutEffect)(()=>{if(Q.current){Q.current=!1;return}if(P&&O>-1&&I!==O){if(null!=H){let a=(0,A.activeElement)((0,s.ownerDocument)(H));if(a&&(0,A.contains)(H,a))return}e||J(O)}},[P,O,I,J,e,H]);let{getButtonProps:T,buttonRef:U}=(0,u.useButton)({disabled:e,native:p,focusableWhenDisabled:!0}),V=B(j),W=d.useRef(!1),X=d.useRef(!1);function Y(a){C(j,(0,n.createChangeEventDetails)(o.REASONS.none,a.nativeEvent,void 0,{activationDirection:"none"}))}return(0,h.useRenderElement)("button",a,{state:{disabled:e,active:P,orientation:D,tabActivationDirection:E},ref:[b,U,N,S],props:[M,{role:"tab","aria-controls":V,"aria-selected":P,id:K,onClick:function(a){P||e||Y(a)},onFocus:function(a){P||e||F&&(!W.current||X.current)&&Y(a)},onPointerDown:function(a){if(P||e)return;W.current=!0,X.current=0===a.button;let b=(0,s.ownerDocument)(a.currentTarget);function c(){W.current=!1,X.current=!1,b.removeEventListener("pointerup",c),b.removeEventListener("pointercancel",c)}b.addEventListener("pointerup",c),b.addEventListener("pointercancel",c)},[v.ACTIVE_COMPOSITE_ITEM]:P?"":void 0,onKeyDownCapture(){Q.current=!0}},r,T],stateAttributesMapping:m})});var C=a.i(81322),D=a.i(43979),E=a.i(13461);function F(){return E.NOOP}function G(){return!1}function H(){return!0}var I=a.i(46621);function J(a){let{script:b}=a,{nonce:d}=(0,I.useCSPContext)();return(0,D.useSyncExternalStore)(F,G,H)?(0,c.jsx)("script",{nonce:d,dangerouslySetInnerHTML:{__html:b},suppressHydrationWarning:!0}):null}let K={...m,activeTabPosition:()=>null,activeTabSize:()=>null},L=d.forwardRef(function(a,e){let{className:f,render:g,renderBeforeHydration:i=!1,style:j,...k}=a,{getTabElementBySelectedValue:m,orientation:n,tabActivationDirection:o,value:p}=l(),{tabsListElement:q,registerIndicatorUpdateListener:r}=z(),s=function(){let[,a]=d.useState({});return d.useCallback(()=>{a({})},[])}();d.useEffect(()=>r(s),[r,s]);let t=0,u=0,v=0,w=0,x=0,y=0,A=!1;if(null!=p&&null!=q){let a=m(p);if(null!=a){A=!0;let{width:b,height:c}=(0,C.getCssDimensions)(a),{width:d,height:e}=(0,C.getCssDimensions)(q),f=a.getBoundingClientRect(),g=q.getBoundingClientRect(),h=d>0?g.width/d:1,i=e>0?g.height/e:1;if(h>Number.EPSILON&&i>Number.EPSILON){let a=f.left-g.left,b=f.top-g.top;t=a/h+q.scrollLeft-q.clientLeft,v=b/i+q.scrollTop-q.clientTop}else t=a.offsetLeft,v=a.offsetTop;x=b,y=c,u=q.scrollWidth-t-x,w=q.scrollHeight-v-y}}let B=A?{left:t,right:u,top:v,bottom:w}:null,D=A?{width:x,height:y}:null,E=A?{"--active-tab-left":`${t}px`,"--active-tab-right":`${u}px`,"--active-tab-top":`${v}px`,"--active-tab-bottom":`${w}px`,"--active-tab-width":`${x}px`,"--active-tab-height":`${y}px`}:void 0,F=A&&x>0&&y>0,G=(0,h.useRenderElement)("span",a,{state:{orientation:n,activeTabPosition:B,activeTabSize:D,tabActivationDirection:o},ref:e,props:[{role:"presentation",style:E,hidden:!F},k,{suppressHydrationWarning:!0}],stateAttributesMapping:K});return null==p?null:(0,c.jsxs)(d.Fragment,{children:[G,i&&(b||(b=(0,c.jsx)(J,{script:'!function(){const t=document.currentScript.previousElementSibling;if(!t)return;const e=t.closest(\'[role="tablist"]\');if(!e)return;const i=e.querySelector("[data-active]");if(!i)return;function o(t){const e=getComputedStyle(t);let i=parseFloat(e.width)||0,o=parseFloat(e.height)||0;return(Math.round(i)!==t.offsetWidth||Math.round(o)!==t.offsetHeight)&&(i=t.offsetWidth,o=t.offsetHeight),{width:i,height:o}}function n(){let n=0,r=0,s=0,h=0;const{width:c,height:f}=o(i),{width:l,height:u}=o(e),d=i.getBoundingClientRect(),a=e.getBoundingClientRect(),g=l>0?a.width/l:1,b=u>0?a.height/u:1;if(Math.abs(g)>Number.EPSILON&&Math.abs(b)>Number.EPSILON){const t=d.left-a.left,i=d.top-a.top;n=t/g+e.scrollLeft-e.clientLeft,s=i/b+e.scrollTop-e.clientTop}else n=i.offsetLeft,s=i.offsetTop;const p=c,m=f;function v(e,i){t.style.setProperty(`--active-tab-${e}`,`${i}px`)}return r=e.scrollWidth-n-p,h=e.scrollHeight-s-m,v("left",n),v("right",r),v("top",s),v("bottom",h),v("width",p),v("height",m),p>0&&m>0&&(t.removeAttribute("hidden"),!0)}if(n()||"undefined"==typeof ResizeObserver)return;let r,s;function h(){s.disconnect(),clearTimeout(r)}s=new ResizeObserver(()=>{t.isConnected&&t.hasAttribute("hidden")&&i.hasAttribute("data-active")?n()&&h():h()}),s.observe(i),r=setTimeout(h,1e4)}();'})))]})});var M=a.i(35571),N=a.i(34469),O=a.i(20580),P=a.i(75302),Q=a.i(55652);let R={...m,...N.transitionStatusMapping},S=d.forwardRef(function(a,b){let{className:c,value:e,render:g,keepMounted:i=!1,style:j,...k}=a,{value:m,getTabIdByPanelValue:n,orientation:o,tabActivationDirection:p,registerMountedTabPanel:q}=l(),r=(0,t.useBaseUiId)(),{ref:s,index:u}=(0,Q.useCompositeListItem)(),v=e===m,{mounted:w,transitionStatus:x,setMounted:y}=(0,P.useTransitionStatus)(v),z=!w,A=n(e),B=d.useRef(null),C=(0,h.useRenderElement)("div",a,{state:{hidden:z,orientation:o,tabActivationDirection:p,transitionStatus:x},ref:[b,s,B],props:[{"aria-labelledby":A,hidden:z,id:r,role:"tabpanel",tabIndex:v?0:-1,inert:(0,M.inertValue)(!v),"data-index":u},k],stateAttributesMapping:R});return((0,O.useOpenChangeComplete)({open:v,ref:B,onComplete(){v||y(!1)}}),(0,f.useIsoLayoutEffect)(()=>{if(null!=r&&(!z||i))return q(e,r)},[z,i,e,r,q]),i||w)?C:null});var T=a.i(50220);let U=d.forwardRef(function(a,b){let{activateOnFocus:e=!1,className:h,loopFocus:i=!0,render:j,style:k,...n}=a,{orientation:o,setTabMap:p,tabActivationDirection:q}=l(),[r,s]=d.useState(0),[t,u]=d.useState(null),v=d.useRef(new Set),w=d.useRef(new Set),x=d.useRef(null);(0,f.useIsoLayoutEffect)(()=>{if("u"<typeof ResizeObserver)return;let a=new ResizeObserver(()=>{v.current.forEach(a=>{a()})});return x.current=a,t&&a.observe(t),w.current.forEach(b=>{a.observe(b)}),()=>{a.disconnect(),x.current=null}},[t]);let z=(0,g.useStableCallback)(a=>(v.current.add(a),()=>{v.current.delete(a)})),A=(0,g.useStableCallback)(a=>(w.current.add(a),x.current?.observe(a),()=>{w.current.delete(a),x.current?.unobserve(a)})),B=d.useMemo(()=>({activateOnFocus:e,registerIndicatorUpdateListener:z,registerTabResizeObserverElement:A,tabsListElement:t}),[e,z,A,t]);return(0,c.jsx)(y.Provider,{value:B,children:(0,c.jsx)(T.CompositeRoot,{render:j,className:h,style:k,state:{orientation:o,tabActivationDirection:q},refs:[b,u],props:[{"aria-orientation":"vertical"===o?"vertical":void 0,role:"tablist"},n],stateAttributesMapping:m,highlightedIndex:r,enableHomeAndEndKeys:!0,loopFocus:i,orientation:o,onHighlightedIndexChange:s,onMapChange:p,disabledIndices:E.EMPTY_ARRAY})})});a.s(["Indicator",0,L,"List",0,U,"Panel",0,S,"Root",0,p,"Tab",0,B],25932);var V=a.i(25932),V=V,W=a.i(42261),X=a.i(68114);let Y=(0,W.cva)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});a.s(["Tabs",0,function({className:a,orientation:b="horizontal",...d}){return(0,c.jsx)(V.Root,{"data-slot":"tabs","data-orientation":b,className:(0,X.cn)("group/tabs flex gap-2 data-horizontal:flex-col",a),...d})},"TabsContent",0,function({className:a,...b}){return(0,c.jsx)(V.Panel,{"data-slot":"tabs-content",className:(0,X.cn)("flex-1 text-sm outline-none",a),...b})},"TabsList",0,function({className:a,variant:b="default",...d}){return(0,c.jsx)(V.List,{"data-slot":"tabs-list","data-variant":b,className:(0,X.cn)(Y({variant:b}),a),...d})},"TabsTrigger",0,function({className:a,...b}){return(0,c.jsx)(V.Tab,{"data-slot":"tabs-trigger",className:(0,X.cn)("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground","after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",a),...b})}],75083)},87105,a=>{"use strict";var b=a.i(73895),c=a.i(1442);function d(a,d){return[(0,c.useSearchParams)().get(a)??d,(0,b.useCallback)(b=>{let c=new URL(window.location.href);b===d?c.searchParams.delete(a):c.searchParams.set(a,b),window.history.replaceState(null,"",c)},[a,d])]}a.s(["useQueryParam",0,d,"useTabParam",0,function(a,b){let[c,e]=d("tab",b);return[a.includes(c)?c:b,e]}])}];
2
-
3
- //# sourceMappingURL=_0o294sf._.js.map