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.
- package/README.md +1 -1
- package/VERSION +1 -1
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/required-server-files.json +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +14 -14
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/search/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sessions/[provider]/[id]/record/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sessions/[provider]/[id]/reveal/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sessions/[provider]/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +16 -16
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +15 -15
- package/app/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/sessions/[provider]/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/sessions/[provider]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__014br-h._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0co499t._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0p_hyq8._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0yxic1z._.js +2 -2
- package/app/.next/server/chunks/ssr/_0e8jdju._.js +7 -0
- package/app/.next/server/chunks/ssr/_0f8nmc3._.js +1 -1
- package/app/.next/server/chunks/ssr/_0gr0upx._.js +7 -0
- package/app/.next/server/chunks/ssr/src_app_page_tsx_1chiuah._.js +1 -1
- package/app/.next/server/chunks/ssr/src_app_sessions_[provider]_[id]_page_tsx_0uf635h._.js +2 -6
- package/app/.next/server/middleware-build-manifest.js +3 -3
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +1 -1
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/0hav9to299upa.js +1 -0
- package/app/.next/static/chunks/1-qn722atv1by.css +1 -0
- package/app/.next/static/chunks/{1fe2mxakoweia.js → 18c6__lhilfeo.js} +1 -1
- package/app/.next/static/chunks/1bgubb_nxxbrk.js +2 -0
- package/app/.next/static/chunks/1gwxc9rvk6onv.js +5 -0
- package/app/AGENTS.md +9 -0
- package/app/CLAUDE.md +1 -0
- package/app/CONTRIBUTING.md +90 -0
- package/app/Dockerfile +34 -0
- package/app/LICENSE +21 -0
- package/app/README.md +369 -0
- package/app/bin/agent-session-inspector.mjs +185 -0
- package/app/components.json +25 -0
- package/app/docs/screenshots/analytics-dark.png +0 -0
- package/app/docs/screenshots/analytics.png +0 -0
- package/app/docs/screenshots/request-table.png +0 -0
- package/app/docs/screenshots/session-overview-dark.png +0 -0
- package/app/docs/screenshots/session-overview.png +0 -0
- package/app/docs/screenshots/sessions-dark.png +0 -0
- package/app/docs/screenshots/sessions.png +0 -0
- package/app/docs/screenshots/timeline-dark.png +0 -0
- package/app/docs/screenshots/timeline.png +0 -0
- package/app/docs/screenshots/token-optimizer-dark.png +0 -0
- package/app/docs/screenshots/token-optimizer.png +0 -0
- package/app/docs/social-preview.png +0 -0
- package/app/eslint.config.mjs +20 -0
- package/app/install.sh +85 -0
- package/app/next.config.ts +17 -0
- package/app/package.json +3 -3
- package/app/pnpm-lock.yaml +7031 -0
- package/app/pnpm-workspace.yaml +3 -0
- package/app/postcss.config.mjs +7 -0
- package/app/scripts/build-cli.mjs +26 -0
- package/app/scripts/demo-data.mjs +337 -0
- package/app/scripts/deploy-docker.sh +71 -0
- package/app/scripts/package-release.sh +86 -0
- package/app/server.js +1 -1
- package/app/tsconfig.json +34 -0
- package/bin/agent-session-inspector.mjs +2 -2
- package/cli/cli.mjs +234 -84
- package/package.json +1 -1
- package/app/.next/server/chunks/ssr/_0o294sf._.js +0 -3
- package/app/.next/server/chunks/ssr/_0wfo2z0._.js +0 -3
- package/app/.next/static/chunks/1lmw5sxsr57p6.css +0 -1
- package/app/.next/static/chunks/1nuneih_2_kul.js +0 -1
- package/app/.next/static/chunks/21ckxredfe3pr.js +0 -6
- package/app/.next/static/chunks/3-g9jvt_m-6_4.js +0 -1
- /package/app/.next/static/{muuOFZsnyOfIG_5aUuqFV → QagODMnr1on0whIZ_GMxV}/_buildManifest.js +0 -0
- /package/app/.next/static/{muuOFZsnyOfIG_5aUuqFV → QagODMnr1on0whIZ_GMxV}/_clientMiddlewareManifest.js +0 -0
- /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
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
4386
|
-
${file.
|
|
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(
|
|
4446
|
-
|
|
4447
|
-
|
|
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(
|
|
4451
|
-
|
|
4452
|
-
|
|
4453
|
-
|
|
4454
|
-
|
|
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(
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
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(
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
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(
|
|
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(
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
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(
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
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(
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
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(
|
|
4524
|
-
|
|
4525
|
-
|
|
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(
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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>")
|
|
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(
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
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(
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
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(
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
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)
|
|
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.
|
|
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
|