dsh-context 0.34.0 → 0.34.1
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 +3 -1
- package/lib/client.js +628 -61
- package/lib/index.js +171 -143
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -99,10 +99,39 @@ window.__ModuleLoader__.load({
|
|
|
99
99
|
"files.empty": "该范围内没有文件读取、写入或搜索操作",
|
|
100
100
|
"files.noMatch": "没有匹配当前过滤条件的文件",
|
|
101
101
|
"files.locate": "在上下文浏览器中查看此次操作",
|
|
102
|
+
"files.hits": "{n} 处命中",
|
|
102
103
|
"files.errs": "{n} 次失败",
|
|
103
104
|
"files.form.image": "图片",
|
|
104
105
|
"files.form.dir": "目录",
|
|
105
106
|
"files.form.text": "文件",
|
|
107
|
+
"files.glyph.root": "工作区根",
|
|
108
|
+
"files.glyph.tests": "测试",
|
|
109
|
+
"files.glyph.docs": "文档目录",
|
|
110
|
+
"files.glyph.deps": "依赖",
|
|
111
|
+
"files.glyph.build": "构建产物",
|
|
112
|
+
"files.glyph.scripts": "脚本",
|
|
113
|
+
"files.glyph.config": "配置",
|
|
114
|
+
"files.glyph.assets": "静态资源",
|
|
115
|
+
"files.glyph.hidden": "元数据目录",
|
|
116
|
+
"files.glyph.lock": "锁文件",
|
|
117
|
+
"files.glyph.docker": "Docker",
|
|
118
|
+
"files.glyph.ignore": "忽略规则",
|
|
119
|
+
"files.glyph.license": "许可证",
|
|
120
|
+
"files.glyph.python": "Python",
|
|
121
|
+
"files.glyph.notebook": "Notebook",
|
|
122
|
+
"files.glyph.shell": "Shell",
|
|
123
|
+
"files.glyph.web": "网页",
|
|
124
|
+
"files.glyph.style": "样式",
|
|
125
|
+
"files.glyph.database": "数据库",
|
|
126
|
+
"files.glyph.code": "代码",
|
|
127
|
+
"files.glyph.data": "数据清单",
|
|
128
|
+
"files.glyph.markdown": "标记文档",
|
|
129
|
+
"files.glyph.log": "日志",
|
|
130
|
+
"files.glyph.sheet": "表格",
|
|
131
|
+
"files.glyph.document": "文档",
|
|
132
|
+
"files.glyph.archive": "压缩包",
|
|
133
|
+
"files.glyph.font": "字体",
|
|
134
|
+
"files.glyph.media": "媒体",
|
|
106
135
|
"agents.title": "Agent 网络",
|
|
107
136
|
"agents.sub": "当前 Agent 与子 Agent 的实时上下文 · 点击节点跳转会话",
|
|
108
137
|
"agents.chip.count": "{n} 个 Agent",
|
|
@@ -289,10 +318,39 @@ window.__ModuleLoader__.load({
|
|
|
289
318
|
"files.empty": "No file reads, writes, or searches in this range",
|
|
290
319
|
"files.noMatch": "No files match the current filters",
|
|
291
320
|
"files.locate": "Reveal this operation in the Context Browser",
|
|
321
|
+
"files.hits": "{n} hits",
|
|
292
322
|
"files.errs": "{n} failed",
|
|
293
323
|
"files.form.image": "Image",
|
|
294
324
|
"files.form.dir": "Directory",
|
|
295
325
|
"files.form.text": "File",
|
|
326
|
+
"files.glyph.root": "Workspace root",
|
|
327
|
+
"files.glyph.tests": "Tests",
|
|
328
|
+
"files.glyph.docs": "Docs",
|
|
329
|
+
"files.glyph.deps": "Dependencies",
|
|
330
|
+
"files.glyph.build": "Build output",
|
|
331
|
+
"files.glyph.scripts": "Scripts",
|
|
332
|
+
"files.glyph.config": "Config",
|
|
333
|
+
"files.glyph.assets": "Assets",
|
|
334
|
+
"files.glyph.hidden": "Metadata directory",
|
|
335
|
+
"files.glyph.lock": "Lockfile",
|
|
336
|
+
"files.glyph.docker": "Docker",
|
|
337
|
+
"files.glyph.ignore": "Ignore rules",
|
|
338
|
+
"files.glyph.license": "License",
|
|
339
|
+
"files.glyph.python": "Python",
|
|
340
|
+
"files.glyph.notebook": "Notebook",
|
|
341
|
+
"files.glyph.shell": "Shell",
|
|
342
|
+
"files.glyph.web": "Web page",
|
|
343
|
+
"files.glyph.style": "Styles",
|
|
344
|
+
"files.glyph.database": "Database",
|
|
345
|
+
"files.glyph.code": "Code",
|
|
346
|
+
"files.glyph.data": "Data / manifest",
|
|
347
|
+
"files.glyph.markdown": "Markup document",
|
|
348
|
+
"files.glyph.log": "Log",
|
|
349
|
+
"files.glyph.sheet": "Spreadsheet",
|
|
350
|
+
"files.glyph.document": "Document",
|
|
351
|
+
"files.glyph.archive": "Archive",
|
|
352
|
+
"files.glyph.font": "Font",
|
|
353
|
+
"files.glyph.media": "Media",
|
|
296
354
|
"agents.title": "Agent Network",
|
|
297
355
|
"agents.sub": "Live context of this agent and its subagents · click a node to open its session",
|
|
298
356
|
"agents.chip.count": "{n} agents",
|
|
@@ -2454,6 +2512,17 @@ window.__ModuleLoader__.load({
|
|
|
2454
2512
|
return KIND_BY_TOOL[tool] ?? null;
|
|
2455
2513
|
}
|
|
2456
2514
|
/**
|
|
2515
|
+
* The file purpose of one executed call. Like {@link kindOfTool} except for
|
|
2516
|
+
* the one file tool whose purpose follows its arguments: `str_replace_editor`
|
|
2517
|
+
* reads on `view` and writes on every other command (create / str_replace /
|
|
2518
|
+
* insert — an unknown command writes too; the call failed and the row keeps
|
|
2519
|
+
* its error flag).
|
|
2520
|
+
*/
|
|
2521
|
+
function kindOfCall(tool, args) {
|
|
2522
|
+
if (tool === "str_replace_editor") return args !== null && args.command === "view" ? "read" : "write";
|
|
2523
|
+
return kindOfTool(tool);
|
|
2524
|
+
}
|
|
2525
|
+
/**
|
|
2457
2526
|
* The operation's target path: the path-ish argument of read/write tools;
|
|
2458
2527
|
* for searches the narrowing `path`, else the pattern itself (a pathless
|
|
2459
2528
|
* grep/glob's target IS the pattern — the workspace-wide search text).
|
|
@@ -2483,27 +2552,27 @@ window.__ModuleLoader__.load({
|
|
|
2483
2552
|
for (let i = 0; i < s.length; i++) if (s[i] === "\n") n++;
|
|
2484
2553
|
return s.endsWith("\n") ? n : n + 1;
|
|
2485
2554
|
}
|
|
2555
|
+
/** The added/removed pair of one content-bearing argument set, or zeros. */
|
|
2556
|
+
function pairOf(added, removed) {
|
|
2557
|
+
return {
|
|
2558
|
+
added: typeof added === "string" ? linesOf(added) : 0,
|
|
2559
|
+
removed: typeof removed === "string" ? linesOf(removed) : 0
|
|
2560
|
+
};
|
|
2561
|
+
}
|
|
2486
2562
|
/**
|
|
2487
2563
|
* The signed line footprint of one call: an edit removes its old string and
|
|
2488
2564
|
* adds its new one; a write adds its content (the pre-existing body, if any,
|
|
2489
|
-
* is unknowable from the arguments — the estimate stays honest about that)
|
|
2490
|
-
*
|
|
2565
|
+
* is unknowable from the arguments — the estimate stays honest about that);
|
|
2566
|
+
* `str_replace_editor` splits the same shapes across its commands. Callers
|
|
2567
|
+
* reach here only with parsed args (a null parse yields no path).
|
|
2491
2568
|
*/
|
|
2492
2569
|
function deltaOf(tool, args) {
|
|
2493
|
-
if (tool === "edit")
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
return
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
};
|
|
2500
|
-
}
|
|
2501
|
-
if (tool === "write") {
|
|
2502
|
-
const content = args.content;
|
|
2503
|
-
return {
|
|
2504
|
-
added: typeof content === "string" ? linesOf(content) : 0,
|
|
2505
|
-
removed: 0
|
|
2506
|
-
};
|
|
2570
|
+
if (tool === "edit") return pairOf(args.new_string, args.old_string);
|
|
2571
|
+
if (tool === "write") return pairOf(args.content, void 0);
|
|
2572
|
+
if (tool === "str_replace_editor") {
|
|
2573
|
+
if (args.command === "str_replace") return pairOf(args.new_str, args.old_str);
|
|
2574
|
+
if (args.command === "insert") return pairOf(args.new_str, void 0);
|
|
2575
|
+
if (args.command === "create") return pairOf(args.file_text, void 0);
|
|
2507
2576
|
}
|
|
2508
2577
|
return {
|
|
2509
2578
|
added: 0,
|
|
@@ -2517,6 +2586,470 @@ window.__ModuleLoader__.load({
|
|
|
2517
2586
|
if (path.endsWith("/")) return "dir";
|
|
2518
2587
|
return "text";
|
|
2519
2588
|
}
|
|
2589
|
+
/** Directory buckets, by last path segment (lowercased, explicit plurals). Checked in order, then hidden dirs, then the plain folder. */
|
|
2590
|
+
const DIR_BUCKETS = [
|
|
2591
|
+
[
|
|
2592
|
+
[
|
|
2593
|
+
"test",
|
|
2594
|
+
"tests",
|
|
2595
|
+
"__tests__",
|
|
2596
|
+
"spec",
|
|
2597
|
+
"specs",
|
|
2598
|
+
"e2e"
|
|
2599
|
+
],
|
|
2600
|
+
"🧪",
|
|
2601
|
+
"files.glyph.tests"
|
|
2602
|
+
],
|
|
2603
|
+
[
|
|
2604
|
+
[
|
|
2605
|
+
"doc",
|
|
2606
|
+
"docs",
|
|
2607
|
+
"documentation"
|
|
2608
|
+
],
|
|
2609
|
+
"📚",
|
|
2610
|
+
"files.glyph.docs"
|
|
2611
|
+
],
|
|
2612
|
+
[
|
|
2613
|
+
[
|
|
2614
|
+
"node_modules",
|
|
2615
|
+
"vendor",
|
|
2616
|
+
"third_party",
|
|
2617
|
+
"third-party",
|
|
2618
|
+
"packages"
|
|
2619
|
+
],
|
|
2620
|
+
"📦",
|
|
2621
|
+
"files.glyph.deps"
|
|
2622
|
+
],
|
|
2623
|
+
[
|
|
2624
|
+
[
|
|
2625
|
+
"dist",
|
|
2626
|
+
"build",
|
|
2627
|
+
"out",
|
|
2628
|
+
"target",
|
|
2629
|
+
"release",
|
|
2630
|
+
"debug",
|
|
2631
|
+
"coverage",
|
|
2632
|
+
"artifacts"
|
|
2633
|
+
],
|
|
2634
|
+
"🏗️",
|
|
2635
|
+
"files.glyph.build"
|
|
2636
|
+
],
|
|
2637
|
+
[
|
|
2638
|
+
[
|
|
2639
|
+
"scripts",
|
|
2640
|
+
"tools",
|
|
2641
|
+
"bin"
|
|
2642
|
+
],
|
|
2643
|
+
"🛠️",
|
|
2644
|
+
"files.glyph.scripts"
|
|
2645
|
+
],
|
|
2646
|
+
[
|
|
2647
|
+
[
|
|
2648
|
+
"config",
|
|
2649
|
+
"configs",
|
|
2650
|
+
"settings",
|
|
2651
|
+
".config"
|
|
2652
|
+
],
|
|
2653
|
+
"⚙️",
|
|
2654
|
+
"files.glyph.config"
|
|
2655
|
+
],
|
|
2656
|
+
[
|
|
2657
|
+
[
|
|
2658
|
+
"assets",
|
|
2659
|
+
"static",
|
|
2660
|
+
"public",
|
|
2661
|
+
"images",
|
|
2662
|
+
"fonts",
|
|
2663
|
+
"icons",
|
|
2664
|
+
"media"
|
|
2665
|
+
],
|
|
2666
|
+
"🎨",
|
|
2667
|
+
"files.glyph.assets"
|
|
2668
|
+
]
|
|
2669
|
+
];
|
|
2670
|
+
/** Lockfile base names that do not end in `.lock`. */
|
|
2671
|
+
const LOCK_NAMES = [
|
|
2672
|
+
"package-lock.json",
|
|
2673
|
+
"pnpm-lock.yaml",
|
|
2674
|
+
"npm-shrinkwrap.json"
|
|
2675
|
+
];
|
|
2676
|
+
const MAKE_NAMES = [
|
|
2677
|
+
"makefile",
|
|
2678
|
+
"justfile",
|
|
2679
|
+
"cmakelists.txt"
|
|
2680
|
+
];
|
|
2681
|
+
/** A test file by name: a standalone or delimited `test`, an inline `.test.`/`.spec.`, or their underscore forms. */
|
|
2682
|
+
const TEST_NAME = /(^|[^a-z0-9])test([^a-z0-9]|$)|\.(test|spec)\./;
|
|
2683
|
+
/** Extension buckets, most specific first; the last row catches every programming language. */
|
|
2684
|
+
const EXT_BUCKETS = [
|
|
2685
|
+
[
|
|
2686
|
+
[
|
|
2687
|
+
"py",
|
|
2688
|
+
"pyi",
|
|
2689
|
+
"pyw"
|
|
2690
|
+
],
|
|
2691
|
+
"🐍",
|
|
2692
|
+
"files.glyph.python"
|
|
2693
|
+
],
|
|
2694
|
+
[
|
|
2695
|
+
["ipynb"],
|
|
2696
|
+
"📓",
|
|
2697
|
+
"files.glyph.notebook"
|
|
2698
|
+
],
|
|
2699
|
+
[
|
|
2700
|
+
[
|
|
2701
|
+
"sh",
|
|
2702
|
+
"bash",
|
|
2703
|
+
"zsh",
|
|
2704
|
+
"fish",
|
|
2705
|
+
"ps1"
|
|
2706
|
+
],
|
|
2707
|
+
"🐚",
|
|
2708
|
+
"files.glyph.shell"
|
|
2709
|
+
],
|
|
2710
|
+
[
|
|
2711
|
+
[
|
|
2712
|
+
"html",
|
|
2713
|
+
"htm",
|
|
2714
|
+
"xhtml"
|
|
2715
|
+
],
|
|
2716
|
+
"🌐",
|
|
2717
|
+
"files.glyph.web"
|
|
2718
|
+
],
|
|
2719
|
+
[
|
|
2720
|
+
[
|
|
2721
|
+
"css",
|
|
2722
|
+
"scss",
|
|
2723
|
+
"sass",
|
|
2724
|
+
"less",
|
|
2725
|
+
"styl"
|
|
2726
|
+
],
|
|
2727
|
+
"🎨",
|
|
2728
|
+
"files.glyph.style"
|
|
2729
|
+
],
|
|
2730
|
+
[
|
|
2731
|
+
["sql"],
|
|
2732
|
+
"🗃️",
|
|
2733
|
+
"files.glyph.database"
|
|
2734
|
+
],
|
|
2735
|
+
[
|
|
2736
|
+
[
|
|
2737
|
+
"yaml",
|
|
2738
|
+
"yml",
|
|
2739
|
+
"toml",
|
|
2740
|
+
"ini",
|
|
2741
|
+
"conf",
|
|
2742
|
+
"cfg",
|
|
2743
|
+
"properties",
|
|
2744
|
+
"env"
|
|
2745
|
+
],
|
|
2746
|
+
"⚙️",
|
|
2747
|
+
"files.glyph.config"
|
|
2748
|
+
],
|
|
2749
|
+
[
|
|
2750
|
+
[
|
|
2751
|
+
"json",
|
|
2752
|
+
"jsonc",
|
|
2753
|
+
"json5",
|
|
2754
|
+
"jsonl",
|
|
2755
|
+
"ndjson",
|
|
2756
|
+
"xml"
|
|
2757
|
+
],
|
|
2758
|
+
"🧾",
|
|
2759
|
+
"files.glyph.data"
|
|
2760
|
+
],
|
|
2761
|
+
[
|
|
2762
|
+
[
|
|
2763
|
+
"md",
|
|
2764
|
+
"mdx",
|
|
2765
|
+
"markdown",
|
|
2766
|
+
"rst",
|
|
2767
|
+
"adoc",
|
|
2768
|
+
"org"
|
|
2769
|
+
],
|
|
2770
|
+
"📝",
|
|
2771
|
+
"files.glyph.markdown"
|
|
2772
|
+
],
|
|
2773
|
+
[
|
|
2774
|
+
["log"],
|
|
2775
|
+
"📜",
|
|
2776
|
+
"files.glyph.log"
|
|
2777
|
+
],
|
|
2778
|
+
[
|
|
2779
|
+
[
|
|
2780
|
+
"csv",
|
|
2781
|
+
"tsv",
|
|
2782
|
+
"xls",
|
|
2783
|
+
"xlsx",
|
|
2784
|
+
"ods"
|
|
2785
|
+
],
|
|
2786
|
+
"📊",
|
|
2787
|
+
"files.glyph.sheet"
|
|
2788
|
+
],
|
|
2789
|
+
[
|
|
2790
|
+
[
|
|
2791
|
+
"pdf",
|
|
2792
|
+
"doc",
|
|
2793
|
+
"docx",
|
|
2794
|
+
"odt",
|
|
2795
|
+
"rtf"
|
|
2796
|
+
],
|
|
2797
|
+
"📕",
|
|
2798
|
+
"files.glyph.document"
|
|
2799
|
+
],
|
|
2800
|
+
[
|
|
2801
|
+
[
|
|
2802
|
+
"zip",
|
|
2803
|
+
"gz",
|
|
2804
|
+
"tgz",
|
|
2805
|
+
"tar",
|
|
2806
|
+
"bz2",
|
|
2807
|
+
"xz",
|
|
2808
|
+
"7z",
|
|
2809
|
+
"rar",
|
|
2810
|
+
"jar"
|
|
2811
|
+
],
|
|
2812
|
+
"🗜️",
|
|
2813
|
+
"files.glyph.archive"
|
|
2814
|
+
],
|
|
2815
|
+
[
|
|
2816
|
+
[
|
|
2817
|
+
"ttf",
|
|
2818
|
+
"otf",
|
|
2819
|
+
"woff",
|
|
2820
|
+
"woff2",
|
|
2821
|
+
"eot"
|
|
2822
|
+
],
|
|
2823
|
+
"🔤",
|
|
2824
|
+
"files.glyph.font"
|
|
2825
|
+
],
|
|
2826
|
+
[
|
|
2827
|
+
[
|
|
2828
|
+
"mp4",
|
|
2829
|
+
"mov",
|
|
2830
|
+
"mkv",
|
|
2831
|
+
"webm",
|
|
2832
|
+
"mp3",
|
|
2833
|
+
"wav",
|
|
2834
|
+
"flac",
|
|
2835
|
+
"ogg"
|
|
2836
|
+
],
|
|
2837
|
+
"🎬",
|
|
2838
|
+
"files.glyph.media"
|
|
2839
|
+
],
|
|
2840
|
+
[
|
|
2841
|
+
[
|
|
2842
|
+
"ts",
|
|
2843
|
+
"tsx",
|
|
2844
|
+
"js",
|
|
2845
|
+
"jsx",
|
|
2846
|
+
"mjs",
|
|
2847
|
+
"cjs",
|
|
2848
|
+
"go",
|
|
2849
|
+
"rs",
|
|
2850
|
+
"java",
|
|
2851
|
+
"kt",
|
|
2852
|
+
"kts",
|
|
2853
|
+
"swift",
|
|
2854
|
+
"rb",
|
|
2855
|
+
"php",
|
|
2856
|
+
"c",
|
|
2857
|
+
"h",
|
|
2858
|
+
"cpp",
|
|
2859
|
+
"cc",
|
|
2860
|
+
"cxx",
|
|
2861
|
+
"hpp",
|
|
2862
|
+
"cs",
|
|
2863
|
+
"scala",
|
|
2864
|
+
"lua",
|
|
2865
|
+
"dart",
|
|
2866
|
+
"vue",
|
|
2867
|
+
"svelte"
|
|
2868
|
+
],
|
|
2869
|
+
"🧩",
|
|
2870
|
+
"files.glyph.code"
|
|
2871
|
+
]
|
|
2872
|
+
];
|
|
2873
|
+
function dirGlyph(base) {
|
|
2874
|
+
if (base === "" || base === ".") return {
|
|
2875
|
+
glyph: "🏠",
|
|
2876
|
+
tip: "files.glyph.root"
|
|
2877
|
+
};
|
|
2878
|
+
const name = base.toLowerCase();
|
|
2879
|
+
for (const [names, glyph, tip] of DIR_BUCKETS) if (names.includes(name)) return {
|
|
2880
|
+
glyph,
|
|
2881
|
+
tip
|
|
2882
|
+
};
|
|
2883
|
+
if (name.startsWith(".")) return {
|
|
2884
|
+
glyph: "🗄️",
|
|
2885
|
+
tip: "files.glyph.hidden"
|
|
2886
|
+
};
|
|
2887
|
+
return {
|
|
2888
|
+
glyph: "📁",
|
|
2889
|
+
tip: "files.form.dir"
|
|
2890
|
+
};
|
|
2891
|
+
}
|
|
2892
|
+
function fileGlyph(base) {
|
|
2893
|
+
const name = base.toLowerCase();
|
|
2894
|
+
const dot = name.lastIndexOf(".");
|
|
2895
|
+
const ext = dot > 0 ? name.slice(dot + 1) : "";
|
|
2896
|
+
if (name.endsWith(".lock") || LOCK_NAMES.includes(name)) return {
|
|
2897
|
+
glyph: "🔒",
|
|
2898
|
+
tip: "files.glyph.lock"
|
|
2899
|
+
};
|
|
2900
|
+
if (TEST_NAME.test(name)) return {
|
|
2901
|
+
glyph: "🧪",
|
|
2902
|
+
tip: "files.glyph.tests"
|
|
2903
|
+
};
|
|
2904
|
+
if (name === "dockerfile" || name.startsWith("dockerfile.")) return {
|
|
2905
|
+
glyph: "🐳",
|
|
2906
|
+
tip: "files.glyph.docker"
|
|
2907
|
+
};
|
|
2908
|
+
if (MAKE_NAMES.includes(name)) return {
|
|
2909
|
+
glyph: "🛠️",
|
|
2910
|
+
tip: "files.glyph.scripts"
|
|
2911
|
+
};
|
|
2912
|
+
if (name === ".gitignore" || name === ".gitattributes") return {
|
|
2913
|
+
glyph: "🚫",
|
|
2914
|
+
tip: "files.glyph.ignore"
|
|
2915
|
+
};
|
|
2916
|
+
if (name === "license" || name.startsWith("license.") || name === "copying") return {
|
|
2917
|
+
glyph: "⚖️",
|
|
2918
|
+
tip: "files.glyph.license"
|
|
2919
|
+
};
|
|
2920
|
+
if (name === ".env" || name.startsWith(".env.")) return {
|
|
2921
|
+
glyph: "⚙️",
|
|
2922
|
+
tip: "files.glyph.config"
|
|
2923
|
+
};
|
|
2924
|
+
if (ext !== "") {
|
|
2925
|
+
for (const [exts, glyph, tip] of EXT_BUCKETS) if (exts.includes(ext)) return {
|
|
2926
|
+
glyph,
|
|
2927
|
+
tip
|
|
2928
|
+
};
|
|
2929
|
+
}
|
|
2930
|
+
return {
|
|
2931
|
+
glyph: "📄",
|
|
2932
|
+
tip: "files.form.text"
|
|
2933
|
+
};
|
|
2934
|
+
}
|
|
2935
|
+
/** The row icon for one file entry: form first (image/dir), then the file-name tables. */
|
|
2936
|
+
function glyphOf(path, form) {
|
|
2937
|
+
if (form === "image") return {
|
|
2938
|
+
glyph: "🖼",
|
|
2939
|
+
tip: "files.form.image"
|
|
2940
|
+
};
|
|
2941
|
+
const trimmed = path.endsWith("/") ? path.slice(0, -1) : path;
|
|
2942
|
+
const base = trimmed.slice(trimmed.lastIndexOf("/") + 1);
|
|
2943
|
+
return form === "dir" ? dirGlyph(base) : fileGlyph(base);
|
|
2944
|
+
}
|
|
2945
|
+
/**
|
|
2946
|
+
* A search op's detail: the pattern, with the include filter appended when
|
|
2947
|
+
* one narrowed the call. A patternless (malformed) search has no detail.
|
|
2948
|
+
*/
|
|
2949
|
+
function searchDetailOf(args) {
|
|
2950
|
+
const pattern = args?.pattern;
|
|
2951
|
+
if (typeof pattern !== "string" || pattern === "") return void 0;
|
|
2952
|
+
const include = args?.include;
|
|
2953
|
+
return typeof include === "string" && include !== "" ? `${pattern} (${include})` : pattern;
|
|
2954
|
+
}
|
|
2955
|
+
/**
|
|
2956
|
+
* The files a search demonstrably reached, read off the result's bounded
|
|
2957
|
+
* presentation meta (grep groups matched lines by file; glob lists paths).
|
|
2958
|
+
* Only the COMPLETE list attributes: a capped search (`truncated`) names a
|
|
2959
|
+
* partial file set, and a malformed meta names none — both fall back to the
|
|
2960
|
+
* call's own target. Each entry carries the reported match count.
|
|
2961
|
+
*/
|
|
2962
|
+
function searchFilesOf(meta) {
|
|
2963
|
+
if (meta === null || typeof meta !== "object") return null;
|
|
2964
|
+
const m = meta;
|
|
2965
|
+
if (m.truncated !== false) return null;
|
|
2966
|
+
const files = [];
|
|
2967
|
+
if (m.shape === "matches" && Array.isArray(m.files)) for (const f of m.files) {
|
|
2968
|
+
if (f === null || typeof f !== "object") continue;
|
|
2969
|
+
const group = f;
|
|
2970
|
+
if (typeof group.path === "string" && group.path !== "" && Array.isArray(group.matches)) files.push({
|
|
2971
|
+
path: group.path,
|
|
2972
|
+
hits: group.matches.length
|
|
2973
|
+
});
|
|
2974
|
+
}
|
|
2975
|
+
else if (m.shape === "paths" && Array.isArray(m.paths)) {
|
|
2976
|
+
for (const p of m.paths) if (typeof p === "string" && p !== "") files.push({
|
|
2977
|
+
path: p,
|
|
2978
|
+
hits: 0
|
|
2979
|
+
});
|
|
2980
|
+
}
|
|
2981
|
+
return files.length > 0 ? files : null;
|
|
2982
|
+
}
|
|
2983
|
+
/**
|
|
2984
|
+
* Narrow one block of a conversation node's `subCalls` tree to a settled
|
|
2985
|
+
* nested call, or null. The join is defensive — a running call has no result
|
|
2986
|
+
* kind yet, and any malformed block is dropped, never thrown. (Null and
|
|
2987
|
+
* non-object blocks never reach here: the folding loop pre-filters them.)
|
|
2988
|
+
*/
|
|
2989
|
+
function subCallOf(block) {
|
|
2990
|
+
const b = block;
|
|
2991
|
+
if (b.kind !== "tool-result") return null;
|
|
2992
|
+
if (b.call === null || typeof b.call !== "object") return null;
|
|
2993
|
+
const call = b.call;
|
|
2994
|
+
if (typeof call.name !== "string" || typeof call.argsRaw !== "string") return null;
|
|
2995
|
+
if (typeof b.seq !== "number" || !Number.isFinite(b.seq)) return null;
|
|
2996
|
+
return {
|
|
2997
|
+
name: call.name,
|
|
2998
|
+
argsRaw: call.argsRaw,
|
|
2999
|
+
seq: b.seq,
|
|
3000
|
+
...typeof b.time === "number" ? { time: b.time } : {},
|
|
3001
|
+
...b.isError === true ? { err: true } : { err: false },
|
|
3002
|
+
...Array.isArray(b.subCalls) ? { subCalls: b.subCalls } : {}
|
|
3003
|
+
};
|
|
3004
|
+
}
|
|
3005
|
+
/** The run_code call's model-authored description — the nested ops' "why". */
|
|
3006
|
+
function programOf(conv) {
|
|
3007
|
+
const description = parseCallArgs(conv?.call?.argsRaw)?.description;
|
|
3008
|
+
return typeof description === "string" && description !== "" ? description : void 0;
|
|
3009
|
+
}
|
|
3010
|
+
/**
|
|
3011
|
+
* Depth guard for nested Code-Mode trees. The SDK bindings exclude `run_code`
|
|
3012
|
+
* itself, so a real tree is one level deep; the cap only bounds defensive
|
|
3013
|
+
* re-entry over a malformed join.
|
|
3014
|
+
*/
|
|
3015
|
+
const SUBCALL_MAX_DEPTH = 8;
|
|
3016
|
+
/**
|
|
3017
|
+
* Fold one nested Code-Mode tree: every settled sub-dispatch whose arguments
|
|
3018
|
+
* resolve to a file target books one op, attributed to the nested tool and
|
|
3019
|
+
* located on the parent run_code result. `seen` holds the already-visited
|
|
3020
|
+
* blocks, so a malformed (cyclic) join cannot loop.
|
|
3021
|
+
*/
|
|
3022
|
+
function foldSubCalls(blocks, parent, program, add, seen, depth) {
|
|
3023
|
+
if (depth > SUBCALL_MAX_DEPTH) return;
|
|
3024
|
+
for (const block of blocks) {
|
|
3025
|
+
if (block === null || typeof block !== "object" || seen.has(block)) continue;
|
|
3026
|
+
seen.add(block);
|
|
3027
|
+
const sub = subCallOf(block);
|
|
3028
|
+
if (sub !== null) {
|
|
3029
|
+
const args = parseCallArgs(sub.argsRaw);
|
|
3030
|
+
const kind = args !== null ? kindOfCall(sub.name, args) : null;
|
|
3031
|
+
const path = kind !== null ? pathOfArgs(sub.name, args) : null;
|
|
3032
|
+
if (args !== null && kind !== null && path !== null) {
|
|
3033
|
+
const { added, removed } = deltaOf(sub.name, args);
|
|
3034
|
+
const detail = kind === "search" && typeof args.path === "string" && args.path !== "" ? searchDetailOf(args) : void 0;
|
|
3035
|
+
add({
|
|
3036
|
+
seq: sub.seq,
|
|
3037
|
+
...parent.gone !== void 0 ? { gone: parent.gone } : {},
|
|
3038
|
+
kind,
|
|
3039
|
+
tool: sub.name,
|
|
3040
|
+
...sub.time !== void 0 ? { time: sub.time } : {},
|
|
3041
|
+
err: sub.err,
|
|
3042
|
+
added,
|
|
3043
|
+
removed,
|
|
3044
|
+
...detail !== void 0 ? { detail } : {},
|
|
3045
|
+
parent: parent.seq,
|
|
3046
|
+
...program !== void 0 ? { program } : {}
|
|
3047
|
+
}, path);
|
|
3048
|
+
}
|
|
3049
|
+
if (sub.subCalls !== void 0) foldSubCalls(sub.subCalls, parent, program, add, seen, depth + 1);
|
|
3050
|
+
}
|
|
3051
|
+
}
|
|
3052
|
+
}
|
|
2520
3053
|
/** Fold every served tool-result node into per-file activity. */
|
|
2521
3054
|
function activityOf(nodes, convOf, before) {
|
|
2522
3055
|
const totals = {
|
|
@@ -2540,35 +3073,14 @@ window.__ModuleLoader__.load({
|
|
|
2540
3073
|
removed: 0
|
|
2541
3074
|
};
|
|
2542
3075
|
const byPath = /* @__PURE__ */ new Map();
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
const kind = kindOfTool(n.tool);
|
|
2547
|
-
if (kind === null) continue;
|
|
2548
|
-
const tool = n.tool;
|
|
2549
|
-
const conv = convOf(n.seq);
|
|
2550
|
-
const args = parseCallArgs(conv?.call?.argsRaw);
|
|
2551
|
-
const path = pathOfArgs(tool, args);
|
|
2552
|
-
if (path === null || args === null) continue;
|
|
2553
|
-
totals[kind].ops++;
|
|
2554
|
-
const { added, removed } = deltaOf(tool, args);
|
|
2555
|
-
const detail = kind === "search" && typeof args.path === "string" && args.path !== "" && typeof args.pattern === "string" && args.pattern !== "" ? args.pattern : void 0;
|
|
2556
|
-
const op = {
|
|
2557
|
-
seq: n.seq,
|
|
2558
|
-
...n.gone !== void 0 ? { gone: n.gone } : {},
|
|
2559
|
-
kind,
|
|
2560
|
-
tool,
|
|
2561
|
-
...n.time !== void 0 ? { time: n.time } : {},
|
|
2562
|
-
err: n.err === true || conv.isError === true,
|
|
2563
|
-
added,
|
|
2564
|
-
removed,
|
|
2565
|
-
...detail !== void 0 ? { detail } : {}
|
|
2566
|
-
};
|
|
3076
|
+
/** Book one executed op under its file; the totals and the entry move together. */
|
|
3077
|
+
const add = (op, path) => {
|
|
3078
|
+
totals[op.kind].ops++;
|
|
2567
3079
|
let entry = byPath.get(path);
|
|
2568
3080
|
if (entry === void 0) {
|
|
2569
3081
|
entry = {
|
|
2570
3082
|
path,
|
|
2571
|
-
form: formOf(tool, path),
|
|
3083
|
+
form: formOf(op.tool, path),
|
|
2572
3084
|
reads: 0,
|
|
2573
3085
|
writes: 0,
|
|
2574
3086
|
searches: 0,
|
|
@@ -2579,13 +3091,63 @@ window.__ModuleLoader__.load({
|
|
|
2579
3091
|
};
|
|
2580
3092
|
byPath.set(path, entry);
|
|
2581
3093
|
}
|
|
2582
|
-
if (kind === "read") entry.reads++;
|
|
2583
|
-
else if (kind === "write") entry.writes++;
|
|
3094
|
+
if (op.kind === "read") entry.reads++;
|
|
3095
|
+
else if (op.kind === "write") entry.writes++;
|
|
2584
3096
|
else entry.searches++;
|
|
2585
|
-
entry.added += added;
|
|
2586
|
-
entry.removed += removed;
|
|
3097
|
+
entry.added += op.added;
|
|
3098
|
+
entry.removed += op.removed;
|
|
2587
3099
|
if (op.err) entry.errs++;
|
|
2588
3100
|
entry.ops.push(op);
|
|
3101
|
+
};
|
|
3102
|
+
for (const n of nodes) {
|
|
3103
|
+
if (n.cat !== "tool") continue;
|
|
3104
|
+
if (before !== null && n.seq >= before) continue;
|
|
3105
|
+
const tool = n.tool;
|
|
3106
|
+
if (tool === void 0) continue;
|
|
3107
|
+
try {
|
|
3108
|
+
const conv = convOf(n.seq);
|
|
3109
|
+
const staticKind = kindOfTool(tool);
|
|
3110
|
+
const args = staticKind !== null || tool === "str_replace_editor" ? parseCallArgs(conv?.call?.argsRaw) : null;
|
|
3111
|
+
const kind = staticKind ?? kindOfCall(tool, args);
|
|
3112
|
+
if (kind !== null) {
|
|
3113
|
+
const err = n.err === true || conv?.isError === true;
|
|
3114
|
+
const files = kind === "search" ? searchFilesOf(conv?.meta) : null;
|
|
3115
|
+
if (files !== null) {
|
|
3116
|
+
const detail = searchDetailOf(args);
|
|
3117
|
+
for (const f of files) add({
|
|
3118
|
+
seq: n.seq,
|
|
3119
|
+
...n.gone !== void 0 ? { gone: n.gone } : {},
|
|
3120
|
+
kind,
|
|
3121
|
+
tool,
|
|
3122
|
+
...n.time !== void 0 ? { time: n.time } : {},
|
|
3123
|
+
err,
|
|
3124
|
+
added: 0,
|
|
3125
|
+
removed: 0,
|
|
3126
|
+
...detail !== void 0 ? { detail } : {},
|
|
3127
|
+
...f.hits > 0 ? { hits: f.hits } : {}
|
|
3128
|
+
}, f.path);
|
|
3129
|
+
} else if (args !== null) {
|
|
3130
|
+
const path = pathOfArgs(tool, args);
|
|
3131
|
+
if (path !== null) {
|
|
3132
|
+
const { added, removed } = deltaOf(tool, args);
|
|
3133
|
+
const detail = kind === "search" && typeof args.path === "string" && args.path !== "" ? searchDetailOf(args) : void 0;
|
|
3134
|
+
add({
|
|
3135
|
+
seq: n.seq,
|
|
3136
|
+
...n.gone !== void 0 ? { gone: n.gone } : {},
|
|
3137
|
+
kind,
|
|
3138
|
+
tool,
|
|
3139
|
+
...n.time !== void 0 ? { time: n.time } : {},
|
|
3140
|
+
err,
|
|
3141
|
+
added,
|
|
3142
|
+
removed,
|
|
3143
|
+
...detail !== void 0 ? { detail } : {}
|
|
3144
|
+
}, path);
|
|
3145
|
+
}
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3148
|
+
const subCalls = conv?.subCalls;
|
|
3149
|
+
if (subCalls !== void 0 && subCalls.length > 0) foldSubCalls(subCalls, n, programOf(conv), add, /* @__PURE__ */ new Set(), 1);
|
|
3150
|
+
} catch {}
|
|
2589
3151
|
}
|
|
2590
3152
|
const entries = [...byPath.values()];
|
|
2591
3153
|
for (const e of entries) {
|
|
@@ -3308,9 +3870,6 @@ window.__ModuleLoader__.load({
|
|
|
3308
3870
|
//#region src/client/components/fileCard.tsx
|
|
3309
3871
|
function makeFileCard(kit, settings) {
|
|
3310
3872
|
const { t, fmt, fmtTime } = kit;
|
|
3311
|
-
function formGlyph(form) {
|
|
3312
|
-
return form === "image" ? "🖼" : form === "dir" ? "📁" : "📄";
|
|
3313
|
-
}
|
|
3314
3873
|
function matches(e, f) {
|
|
3315
3874
|
if (f === "all") return true;
|
|
3316
3875
|
if (f === "image") return e.form === "image";
|
|
@@ -3358,7 +3917,7 @@ window.__ModuleLoader__.load({
|
|
|
3358
3917
|
ops: activity.totals.image.ops
|
|
3359
3918
|
}
|
|
3360
3919
|
];
|
|
3361
|
-
const opLine = (op) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-time" }, op.time !== void 0 ? fmtTime(op.time) : "—"), /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-tool" }, op.tool), op.detail !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-detail" }, op.detail) : null, op.added + op.removed > 0 ? /* @__PURE__ */ React.createElement(DeltaPair, {
|
|
3920
|
+
const opLine = (op) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-time" }, op.time !== void 0 ? fmtTime(op.time) : "—"), /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-tool" }, op.tool), op.detail !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-detail" }, op.detail) : null, op.hits !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-detail" }, t("files.hits", { n: fmt(op.hits) })) : null, op.detail === void 0 && op.hits === void 0 && op.program !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-detail" }, op.program) : null, op.added + op.removed > 0 ? /* @__PURE__ */ React.createElement(DeltaPair, {
|
|
3362
3921
|
added: op.added,
|
|
3363
3922
|
removed: op.removed
|
|
3364
3923
|
}) : null, op.err ? /* @__PURE__ */ React.createElement("span", {
|
|
@@ -3410,6 +3969,7 @@ window.__ModuleLoader__.load({
|
|
|
3410
3969
|
const slash = trimmed.lastIndexOf("/");
|
|
3411
3970
|
const dir = slash >= 0 ? trimmed.slice(0, slash + 1) : "";
|
|
3412
3971
|
const base = slash >= 0 ? trimmed.slice(slash + 1) : trimmed;
|
|
3972
|
+
const glyph = glyphOf(e.path, e.form);
|
|
3413
3973
|
return /* @__PURE__ */ React.createElement("div", {
|
|
3414
3974
|
key: e.path,
|
|
3415
3975
|
className: "lc-fa-item" + (open ? " lc-fa-item-on" : "")
|
|
@@ -3422,8 +3982,8 @@ window.__ModuleLoader__.load({
|
|
|
3422
3982
|
}
|
|
3423
3983
|
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }, "▸"), /* @__PURE__ */ React.createElement("span", {
|
|
3424
3984
|
className: "lc-fa-form",
|
|
3425
|
-
title: t(
|
|
3426
|
-
},
|
|
3985
|
+
title: t(glyph.tip)
|
|
3986
|
+
}, glyph.glyph), /* @__PURE__ */ React.createElement("span", { className: "lc-fa-path" }, dir !== "" ? /* @__PURE__ */ React.createElement("em", null, dir) : null, /* @__PURE__ */ React.createElement("b", null, base)), e.reads > 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
3427
3987
|
className: "lc-fa-badge lc-fa-b-read",
|
|
3428
3988
|
title: t("files.kind.read")
|
|
3429
3989
|
}, /* @__PURE__ */ React.createElement("i", null), fmt(e.reads)) : null, e.writes > 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
@@ -3438,10 +3998,11 @@ window.__ModuleLoader__.load({
|
|
|
3438
3998
|
}) : null, e.errs > 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
3439
3999
|
className: "lc-br-err-dot",
|
|
3440
4000
|
title: t("files.errs", { n: e.errs })
|
|
3441
|
-
}) : null, e.ops[0].time !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-time" }, fmtTime(e.ops[0].time)) : null), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-fa-ops" }, e.ops.map((op) => {
|
|
4001
|
+
}) : null, e.ops[0].time !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-fa-time" }, fmtTime(e.ops[0].time)) : null), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-fa-ops" }, e.ops.map((op, i) => {
|
|
3442
4002
|
const onLocate = props.onLocate;
|
|
4003
|
+
const key = `${op.seq}:${i}`;
|
|
3443
4004
|
return onLocate !== void 0 ? /* @__PURE__ */ React.createElement("button", {
|
|
3444
|
-
key
|
|
4005
|
+
key,
|
|
3445
4006
|
type: "button",
|
|
3446
4007
|
className: "lc-fa-op lc-fa-op-link",
|
|
3447
4008
|
title: t("files.locate"),
|
|
@@ -3449,7 +4010,7 @@ window.__ModuleLoader__.load({
|
|
|
3449
4010
|
onLocate(op);
|
|
3450
4011
|
}
|
|
3451
4012
|
}, opLine(op)) : /* @__PURE__ */ React.createElement("div", {
|
|
3452
|
-
key
|
|
4013
|
+
key,
|
|
3453
4014
|
className: "lc-fa-op"
|
|
3454
4015
|
}, opLine(op));
|
|
3455
4016
|
})) : null);
|
|
@@ -3512,7 +4073,7 @@ window.__ModuleLoader__.load({
|
|
|
3512
4073
|
return function PluginInfo() {
|
|
3513
4074
|
const [latest, setLatest] = React.useState(null);
|
|
3514
4075
|
React.useEffect(() => {
|
|
3515
|
-
if ("0.34.
|
|
4076
|
+
if ("0.34.1".includes("-dev")) return;
|
|
3516
4077
|
let on = true;
|
|
3517
4078
|
fetchLatestVersion().then((v) => {
|
|
3518
4079
|
if (on && v) setLatest(v);
|
|
@@ -3521,13 +4082,18 @@ window.__ModuleLoader__.load({
|
|
|
3521
4082
|
on = false;
|
|
3522
4083
|
};
|
|
3523
4084
|
}, []);
|
|
3524
|
-
const update = latest !== null && isNewerVersion(latest, "0.34.
|
|
3525
|
-
const nameValue = ["dsh-context (v0.34.
|
|
4085
|
+
const update = latest !== null && isNewerVersion(latest, "0.34.1") ? latest : null;
|
|
4086
|
+
const nameValue = ["dsh-context (v0.34.1)"];
|
|
3526
4087
|
if (update) nameValue.push(/* @__PURE__ */ React.createElement("span", {
|
|
3527
4088
|
key: "update",
|
|
3528
4089
|
className: "lc-pi-update"
|
|
3529
4090
|
}, "↑ v" + update));
|
|
3530
|
-
return /* @__PURE__ */ React.createElement("div", { className: "lc-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("plugin.title")), /* @__PURE__ */ React.createElement("
|
|
4091
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-card" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("plugin.title")), /* @__PURE__ */ React.createElement("a", {
|
|
4092
|
+
className: "lc-card-sub lc-pi-hint",
|
|
4093
|
+
href: PLUGIN_REPO,
|
|
4094
|
+
target: "_blank",
|
|
4095
|
+
rel: "noreferrer"
|
|
4096
|
+
}, t("plugin.hint"))), /* @__PURE__ */ React.createElement("div", { className: "lc-pi-grid" }, row(t("plugin.name"), nameValue, PLUGIN_REPO + "/releases"), row(t("plugin.github"), PLUGIN_REPO_SHORT, PLUGIN_REPO)));
|
|
3531
4097
|
};
|
|
3532
4098
|
}
|
|
3533
4099
|
//#endregion
|
|
@@ -4353,11 +4919,12 @@ window.__ModuleLoader__.load({
|
|
|
4353
4919
|
filesBefore
|
|
4354
4920
|
]);
|
|
4355
4921
|
const locateFileOp = React.useCallback((op) => {
|
|
4356
|
-
const
|
|
4922
|
+
const seq = op.parent ?? op.seq;
|
|
4923
|
+
const step = locateStepOf(requests, seq, op.gone);
|
|
4357
4924
|
if (step === null) return;
|
|
4358
4925
|
setNodeFocus({
|
|
4359
4926
|
step,
|
|
4360
|
-
seq
|
|
4927
|
+
seq,
|
|
4361
4928
|
cat: "tool"
|
|
4362
4929
|
});
|
|
4363
4930
|
}, [requests]);
|
|
@@ -4526,7 +5093,7 @@ window.__ModuleLoader__.load({
|
|
|
4526
5093
|
}
|
|
4527
5094
|
//#endregion
|
|
4528
5095
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles.css.mjs
|
|
4529
|
-
const css = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-stats{grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:6px;display:grid}.lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:6px;display:flex}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:help;border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tipped:hover .lc-stat-q{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary)}.lc-stat-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:280px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-stat-tipped:hover .lc-stat-tip{opacity:1}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);margin-left:auto;font-size:12px;font-weight:400}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-settings-card{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;transition:border-color .16s,background .16s}.lc-settings-card:hover{border-color:var(--dsw-alias-label-dimmed)}.lc-settings-open,.lc-settings-open:hover{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.lc-settings-head{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.lc-settings-headtext{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.lc-settings-name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.lc-settings-desc{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.lc-settings-chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.lc-settings-open .lc-settings-chevron{transform:rotate(180deg)}.lc-settings-body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding:4px 0 12px}.lc-settings-row{align-items:center;gap:8px;padding:8px 0;display:flex}.lc-settings-label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:14px}.lc-settings-select{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.lc-settings-select:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.lc-settings-select:disabled{opacity:.5;cursor:default}.lc-settings-note{color:var(--dsw-alias-label-tertiary);margin:12px 0 4px;font-size:12px;line-height:1.5}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:#8080802e;border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);border-radius:5px;transition:opacity .12s;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:3px 8px;font-size:12px;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg{transition:filter .12s,opacity .12s}.lc-stacked-free{box-sizing:border-box;transition:box-shadow .12s,opacity .12s}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:1px 6px;transition:background-color .12s;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow .12s}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-mid{top:69px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l1);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-mid{top:74px}.lc-grid-zero{border-top-style:solid;border-top-color:#80808080}.lc-bar{cursor:pointer;border-radius:2px;flex:none;align-items:flex-end;width:14px;height:100%;transition:opacity .12s,background-color .12s;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;top:0;left:0;box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline:1px dashed var(--dsw-alias-brand-primary);outline-offset:1px}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-up,.lc-bar-down{width:100%;display:flex;position:absolute;left:0}.lc-bar-up{flex-direction:column-reverse}.lc-bar-down{flex-direction:column}.lc-bar-up>div,.lc-bar-down>div{width:100%}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;border-radius:3px;flex:none;height:14px;font-size:10px;font-weight:600;line-height:14px;transition:filter .12s,opacity .12s;overflow:hidden}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{text-overflow:ellipsis;max-width:100%;display:inline-block;overflow:hidden}.lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-bottom:10px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary);font-size:13px}.lc-detail-time{font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:12px}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-metric{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);border-radius:6px;padding:2px 8px;font-size:12px;font-weight:600}.lc-detail-metric-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-detail-metric-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-detail-rows{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:4px 24px;margin-top:10px;display:grid}.lc-brief{flex-direction:column;gap:2px;min-height:76px;margin:-4px 0 10px;display:flex}.lc-brief-row{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;margin-left:-6px;margin-right:-6px;padding:3px 6px;font-family:inherit;font-size:12px;line-height:1.5;transition:background-color .12s;display:flex}.lc-brief-row-link:hover{background:var(--dsw-alias-interactive-bg-hover)}button.lc-brief-row-link{cursor:pointer}.lc-brief-tag{box-sizing:border-box;text-align:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:56px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;position:relative}.lc-brief-tip{z-index:6;white-space:normal;text-align:left;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:240px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-brief-tag:hover .lc-brief-tip{opacity:1}.lc-brief-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-empty{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-tertiary);flex:1;overflow:hidden}.lc-brief-fact{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:160px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:260px;color:var(--dsw-alias-label-primary);border-radius:5px;align-items:center;gap:5px;padding:0 7px;font-size:12px;transition:background-color .12s;display:inline-flex;overflow:hidden}.lc-brief-chip-grow{flex:1;max-width:none}.lc-brief-chip-tag{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:120px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-chip-link{cursor:pointer}.lc-brief-chip-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-brief-more{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-detail-row{align-items:center;gap:8px;display:flex}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:#8080802e;border-radius:3px;flex:1;height:5px;display:block;position:relative;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-bar-zero{border-left:1px solid #80808073;position:absolute;top:0;bottom:0;left:50%}.lc-bar-fill-up,.lc-bar-fill-down{height:100%;display:block;position:absolute;top:0}.lc-bar-fill-up{border-radius:0 3px 3px 0;left:50%}.lc-bar-fill-down{border-radius:3px 0 0 3px;right:50%}.lc-detail-num{text-align:right;font-variant-numeric:tabular-nums;width:52px}.lc-detail-num-up{color:var(--dsw-alias-state-success-primary)}.lc-detail-num-down{color:var(--dsw-alias-state-error-primary)}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:280px}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head>.lc-card:first-child{flex:7 1 0;min-width:360px}.lc-head>.lc-card:last-child{flex:3 1 0;min-width:220px}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-row:hover .lc-pi-value{text-decoration:underline}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:#a855f7}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-event-icon.lc-event-mode{color:var(--dsw-alias-label-secondary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{color:#8b5cf6;background:#8b5cf626}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-kind-mode{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 15%, transparent);color:var(--dsw-alias-label-secondary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}.lc-fa-ctl{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.lc-fa-ctl .lc-gran{margin-left:0}.lc-fa-n{opacity:.75;margin-left:4px;font-weight:700}.lc-fa-search{min-width:80px;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;outline:none;flex:1;padding:3px 8px;font-size:12px}.lc-fa-search:focus{border-color:var(--dsw-alias-label-dimmed)}.lc-fa-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:6px;font-size:12px;display:flex}.lc-fa-meta .lc-fa-sort{flex:none}.lc-fa-meta-delta{position:relative}.lc-fa-meta-tip{z-index:6;white-space:normal;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:260px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-fa-meta-delta:hover .lc-fa-meta-tip{opacity:1}.lc-fa-item{border:1px solid #0000;border-radius:8px;transition:background-color .12s,border-color .12s}.lc-fa-item-on{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l1)}.lc-fa-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;align-items:center;gap:7px;padding:6px 8px;font-size:12px;transition:background-color .12s;display:flex}.lc-fa-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-form{text-align:center;opacity:.85;flex:none;width:16px;font-size:11px}.lc-fa-path{word-break:break-all;flex:1;min-width:0}.lc-fa-path em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-fa-badge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-badge i{background:currentColor;border-radius:50%;width:5px;height:5px;display:inline-block}.lc-fa-b-read{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent)}.lc-fa-b-write{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent)}.lc-fa-b-search{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)}.lc-fa-chip-read,.lc-fa-chip-read:hover{color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write,.lc-fa-chip-write:hover{color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search,.lc-fa-chip-search:hover{color:var(--dsw-alias-state-warn-primary)}.lc-fa-chip-read.lc-gran-on,.lc-fa-chip-read.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write.lc-gran-on,.lc-fa-chip-write.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search.lc-gran-on,.lc-fa-chip-search.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);color:var(--dsw-alias-state-warn-primary)}.lc-fa-delta{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;gap:5px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-up{color:var(--dsw-alias-state-success-primary)}.lc-fa-down{color:var(--dsw-alias-state-error-primary)}.lc-fa-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.lc-fa-ops{border-left:2px solid var(--dsw-alias-border-l1);flex-direction:column;gap:1px;margin:0 8px 8px 15px;padding:2px 0 2px 10px;display:flex}.lc-fa-op{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:3px 6px;font-size:11px;transition:background-color .12s;display:flex}.lc-fa-op-link{cursor:pointer}.lc-fa-op-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-op-time{width:58px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none}.lc-fa-op-tool{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px;font-size:11px}.lc-fa-op-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}.lc-modal-backdrop{z-index:200;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-modal-close:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-retry{color:var(--dsw-alias-brand-primary);font:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:12px;text-decoration:underline}.lc-br-retry:hover{filter:brightness(1.15)}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;transition:background-color .12s;display:flex}.lc-br-cat-row:hover,.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{border-radius:2px;flex:none;width:8px;height:8px;transition:box-shadow .12s;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;color:var(--dsw-alias-label-secondary);flex:none;transition:transform .12s}.lc-br-chev-on{transform:rotate(90deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;transition:background-color .12s;display:flex}.lc-br-elem-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-err-dot{background:var(--dsw-alias-state-error-primary);width:6px;height:6px;box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-radius:50%;flex:none}.lc-br-tag{min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-dim{color:var(--dsw-alias-label-secondary)}.lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;min-width:0;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.lc-ts-card-count{margin-left:auto}.lc-ts-card-right{align-items:center;gap:8px;margin-left:auto;display:inline-flex}.lc-ts-card-meta{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;font-weight:400}.lc-ts-call-state{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 7px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.lc-ts-call-state i{background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}.lc-ts-call-ok{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.lc-ts-call-err{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,140px) minmax(0,90px) 56px minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-ts-json-toggle:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;overflow-wrap:anywhere;white-space:pre-line;scrollbar-width:thin;min-width:0;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow:hidden auto}.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-ts-desc-md div p{margin:6px 0}.lc-ts-desc-md div pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;margin:6px 0}.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-ts-desc-md div table code{font-size:inherit}.lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:8px;padding:6px;display:flex}.lc-att-item:hover{border-color:var(--dsw-alias-border-l2,var(--dsw-alias-border-l1));background:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;justify-content:center;align-items:center;width:64px;height:64px;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.3}.lc-att-row{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}.lc-att-row-label{min-width:3.2em;font-weight:400;display:inline-block}.lc-att-lightbox{z-index:1000;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.lc-att-lightbox-mask{background:var(--dsw-alias-bg-mask-1,#00000073);backdrop-filter:var(--dsw-mask-blur,blur(2px));position:absolute;inset:0}.lc-att-lightbox-img{object-fit:contain;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));max-width:min(100%,1600px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);border-radius:12px;position:relative}.lc-att-lightbox-close{z-index:1;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l1));background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));width:36px;height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:999px;place-items:center;padding:0;display:grid;position:fixed;top:20px;right:20px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])){display:none}.lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link{stroke-width:1.5px;stroke-opacity:.45}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-width:2px;stroke-linecap:round;stroke-dasharray:2 7;animation:.9s linear infinite lc-agent-flow}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{fill:#0000;transition:fill .12s}.lc-agent-hover .lc-agent-halo,.lc-agent-node:focus-visible .lc-agent-halo{fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);animation:1.8s ease-in-out infinite lc-agent-glow}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}.lc-agent-track{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-border-l1);stroke-width:1.5px}.lc-agent-seg{fill:none;stroke-width:9px;transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{fill:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,#3b82f6);flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
|
|
5096
|
+
const css = ".lc-root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);padding:16px 20px 32px;font-size:13px;overflow-y:auto}.lc-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;margin-bottom:14px;padding:14px 16px}.lc-card-title{flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:600;display:flex}.lc-card-title-text{white-space:nowrap;flex:none}.lc-stats{grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:6px;display:grid}.lc-stat{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:2px;min-width:0;padding:6px;display:flex}.lc-stat-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:600;overflow:hidden}.lc-stat-value{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:center;font-size:14px;font-weight:600;overflow:hidden}.lc-stat-sub{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.lc-stat-tipped{position:relative}.lc-stat-q{text-align:center;width:11px;height:11px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);cursor:help;border-radius:50%;margin-left:4px;font-size:9px;font-style:normal;font-weight:700;line-height:11px;display:inline-block}.lc-stat-tipped:hover .lc-stat-q{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-primary)}.lc-stat-tip{z-index:6;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:280px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-stat-tipped:hover .lc-stat-tip{opacity:1}.lc-stat-tip-prices{border-top:1px dashed var(--dsw-alias-border-l1);margin-top:5px;padding-top:5px;display:block}.lc-stat-tip-head{font-weight:600;display:block}.lc-stat-tip-row{margin-top:2px;display:block}.lc-stat-tip-model{color:var(--dsw-alias-label-primary)}.lc-card-sub{color:var(--dsw-alias-label-secondary);margin-left:auto;font-size:12px;font-weight:400}.lc-gran,.lc-kinds{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-trend-ctl{align-items:center;gap:6px;margin-left:auto;display:flex}.lc-trend-ctl .lc-gran{margin-left:0}.lc-gran-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-gran-btn:hover{color:var(--dsw-alias-label-primary)}.lc-gran-on,.lc-gran-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-settings-card{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);border-radius:12px;transition:border-color .16s,background .16s}.lc-settings-card:hover{border-color:var(--dsw-alias-label-dimmed)}.lc-settings-open,.lc-settings-open:hover{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.lc-settings-head{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.lc-settings-headtext{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.lc-settings-name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.lc-settings-desc{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.lc-settings-chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.lc-settings-open .lc-settings-chevron{transform:rotate(180deg)}.lc-settings-body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding:4px 0 12px}.lc-settings-row{align-items:center;gap:8px;padding:8px 0;display:flex}.lc-settings-label{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:14px}.lc-settings-select{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.lc-settings-select:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.lc-settings-select:disabled{opacity:.5;cursor:default}.lc-settings-note{color:var(--dsw-alias-label-tertiary);margin:12px 0 4px;font-size:12px;line-height:1.5}.lc-overview-num{align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.lc-overview-num>b{font-size:20px}.lc-overview-num span{color:var(--dsw-alias-label-secondary)}.lc-overview-pct{margin-left:auto;font-size:11px}.lc-overview-pct b{color:var(--dsw-alias-label-primary);margin-right:4px;font-size:20px}.lc-stacked-wrap{width:100%;position:relative}.lc-stacked{background:#8080802e;border-radius:5px;width:100%;display:flex;position:relative;overflow:hidden}.lc-occupied-box{border:2px solid var(--dsw-alias-label-tertiary);box-sizing:border-box;pointer-events:none;opacity:0;box-shadow:0 0 0 1px var(--dsw-alias-bg-layer-2);border-radius:5px;transition:opacity .12s;position:absolute;top:0;bottom:0;left:0}.lc-occupied-box-on{opacity:1}.lc-bar-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:3px 8px;font-size:12px;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);transform:translate(-50%);box-shadow:0 2px 8px #0000002e}.lc-bar-tip-on{opacity:1}.lc-stacked>div{height:100%}.lc-stacked-seg{transition:filter .12s,opacity .12s}.lc-stacked-free{box-sizing:border-box;transition:box-shadow .12s,opacity .12s}.lc-stacked-seg-on{filter:brightness(1.18)}.lc-reserve{z-index:1;pointer-events:auto;cursor:help;background:repeating-linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-state-warn-primary) 24%, transparent) 0 5px, transparent 5px 10px);position:absolute;top:0;bottom:0}.lc-stacked-free-on{border:2px dashed var(--dsw-alias-label-secondary);border-radius:3px}.lc-stacked-dim .lc-stacked-seg{opacity:.35}.lc-stacked-dim .lc-stacked-seg-on{opacity:1}.lc-stacked-dim .lc-stacked-free{opacity:.35}.lc-stacked-dim .lc-stacked-free-on{opacity:1}.lc-legend{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin-top:10px;display:grid}.lc-chip{min-width:0;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:1px 6px;transition:background-color .12s;display:flex}.lc-chip-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:600;overflow:hidden}.lc-chip-nums{white-space:nowrap;flex:none;align-items:baseline;gap:6px;margin-left:auto;display:inline-flex}.lc-chip i,.lc-detail-row i{border-radius:2px;width:8px;height:8px;display:inline-block}.lc-chip i{transition:box-shadow .12s}.lc-chip em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-chip-on{background:var(--dsw-alias-interactive-bg-hover);font-weight:600}.lc-chip-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-chartrow{align-items:stretch;gap:6px;display:flex}.lc-axis{box-sizing:border-box;width:40px;height:150px;color:var(--dsw-alias-label-secondary);padding-top:18px;font-size:11px;position:relative}.lc-axis span{line-height:1;position:absolute;right:0}.lc-axis-top{top:13px}.lc-axis-mid{top:69px}.lc-axis-bot{top:125px}.lc-chart-wrap{flex:1;min-width:0;position:relative}.lc-chart-scroll{scrollbar-gutter:stable;padding-bottom:var(--dsh-scrollbar-width,8px);overflow:auto hidden}.lc-chart{box-sizing:border-box;align-items:flex-end;gap:2px;width:max-content;min-width:100%;height:130px;padding-top:18px;display:flex;position:relative}.lc-grid{border-top:1px dashed var(--dsw-alias-border-l1);pointer-events:none;position:absolute;left:0;right:0}.lc-grid-top{top:18px}.lc-grid-mid{top:74px}.lc-grid-zero{border-top-style:solid;border-top-color:#80808080}.lc-bar{cursor:pointer;border-radius:2px;flex:none;align-items:flex-end;width:14px;height:100%;transition:opacity .12s,background-color .12s;display:flex;position:relative}.lc-chart-dim .lc-bar{opacity:.35}.lc-chart-dim .lc-bar-in-turn{opacity:1}.lc-chart-dim .lc-turn{opacity:.35}.lc-chart-dim .lc-turn-on{opacity:1}.lc-chart-tip{z-index:5;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);pointer-events:none;border-radius:6px;padding:3px 8px;font-size:12px;position:absolute;top:0;left:0;box-shadow:0 2px 8px #0000002e}.lc-bar:hover{background:var(--dsw-alias-bg-layer-2)}.lc-bar-hovered{outline:1px dashed var(--dsw-alias-brand-primary);outline-offset:1px}.lc-bar-selected{outline:2px solid var(--dsw-alias-label-primary);outline-offset:1px}.lc-bar-in-turn{background:#80808024}.lc-bar-stack{flex-direction:column-reverse;width:100%;display:flex}.lc-bar-stack>div{width:100%}.lc-bar-up,.lc-bar-down{width:100%;display:flex;position:absolute;left:0}.lc-bar-up{flex-direction:column-reverse}.lc-bar-down{flex-direction:column}.lc-bar-up>div,.lc-bar-down>div{width:100%}.lc-bar-marker{color:var(--dsw-alias-state-warn-primary);font-size:11px;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.lc-turns{gap:2px;width:max-content;min-width:100%;margin-top:4px;display:flex}.lc-turn{box-sizing:border-box;text-align:center;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;border-radius:3px;flex:none;height:14px;font-size:10px;font-weight:600;line-height:14px;transition:filter .12s,opacity .12s;overflow:hidden}.lc-turn-on{filter:brightness(1.35);color:var(--dsw-alias-label-primary)}.lc-turn-label{text-overflow:ellipsis;max-width:100%;display:inline-block;overflow:hidden}.lc-detail{border-top:1px solid var(--dsw-alias-border-l1);margin-top:12px;padding-top:12px}.lc-detail-head{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-bottom:10px;display:flex}.lc-detail-head b{color:var(--dsw-alias-label-primary);font-size:13px}.lc-detail-time{font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:12px}.lc-detail-marker{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);border-radius:6px;padding:1px 7px;font-size:11px}.lc-detail-tag{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:0 6px;font-size:11px}.lc-detail-metric{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--dsw-alias-label-primary);background:color-mix(in srgb, var(--dsw-alias-label-secondary) 14%, transparent);border-radius:6px;padding:2px 8px;font-size:12px;font-weight:600}.lc-detail-metric-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-detail-metric-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-detail-rows{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:4px 24px;margin-top:10px;display:grid}.lc-brief{flex-direction:column;gap:2px;min-height:76px;margin:-4px 0 10px;display:flex}.lc-brief-row{min-width:0;color:var(--dsw-alias-label-primary);text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;margin-left:-6px;margin-right:-6px;padding:3px 6px;font-family:inherit;font-size:12px;line-height:1.5;transition:background-color .12s;display:flex}.lc-brief-row-link:hover{background:var(--dsw-alias-interactive-bg-hover)}button.lc-brief-row-link{cursor:pointer}.lc-brief-tag{box-sizing:border-box;text-align:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:56px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;position:relative}.lc-brief-tip{z-index:6;white-space:normal;text-align:left;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:240px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-brief-tag:hover .lc-brief-tip{opacity:1}.lc-brief-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-empty{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-tertiary);flex:1;overflow:hidden}.lc-brief-fact{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);max-width:160px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);min-width:0;max-width:260px;color:var(--dsw-alias-label-primary);border-radius:5px;align-items:center;gap:5px;padding:0 7px;font-size:12px;transition:background-color .12s;display:inline-flex;overflow:hidden}.lc-brief-chip-grow{flex:1;max-width:none}.lc-brief-chip-tag{text-overflow:ellipsis;white-space:nowrap;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);max-width:120px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 6px;font-size:11px;overflow:hidden}.lc-brief-chip-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-brief-chip-link{cursor:pointer}.lc-brief-chip-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-brief-more{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-detail-row{align-items:center;gap:8px;display:flex}.lc-detail-label{white-space:nowrap;min-width:70px;color:var(--dsw-alias-label-secondary)}.lc-bar-track{background:#8080802e;border-radius:3px;flex:1;height:5px;display:block;position:relative;overflow:hidden}.lc-bar-fill{border-radius:3px;height:100%;display:block}.lc-bar-zero{border-left:1px solid #80808073;position:absolute;top:0;bottom:0;left:50%}.lc-bar-fill-up,.lc-bar-fill-down{height:100%;display:block;position:absolute;top:0}.lc-bar-fill-up{border-radius:0 3px 3px 0;left:50%}.lc-bar-fill-down{border-radius:3px 0 0 3px;right:50%}.lc-detail-num{text-align:right;font-variant-numeric:tabular-nums;width:52px}.lc-detail-num-up{color:var(--dsw-alias-state-success-primary)}.lc-detail-num-down{color:var(--dsw-alias-state-error-primary)}.lc-detail-pct{text-align:right;width:34px;color:var(--dsw-alias-label-secondary)}.lc-cols{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.lc-col{flex:1;min-width:280px}.lc-cols>.lc-card,.lc-col>.lc-card:last-child{margin-bottom:0}.lc-col-browser{flex-direction:column;display:flex}.lc-col-browser>.lc-card{flex:1}.lc-head>.lc-card:first-child{flex:7 1 0;min-width:360px}.lc-head>.lc-card:last-child{flex:3 1 0;min-width:220px}.lc-pi-grid{grid-template-columns:1fr;gap:8px;display:grid}.lc-pi-row{min-width:0;color:inherit;flex-direction:row;justify-content:space-between;align-items:baseline;gap:12px;text-decoration:none;display:flex}.lc-pi-row:hover .lc-pi-value{text-decoration:underline}.lc-pi-hint{text-decoration:none}.lc-pi-hint:hover{text-decoration:underline}.lc-pi-update{color:var(--dsw-alias-state-warn-primary);white-space:nowrap;margin-left:6px;font-size:11px}.lc-pi-label{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;font-weight:600;overflow:hidden}.lc-pi-value{min-width:0;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;text-align:right;font-size:13px;font-weight:600;overflow:hidden}.lc-events,.lc-fa-list{flex-direction:column;gap:2px;height:320px;display:flex;overflow-y:auto}.lc-event{align-items:center;gap:8px;padding:3px 0;display:flex}.lc-event-icon{text-align:center;width:18px;color:var(--dsw-alias-state-warn-primary)}.lc-event-icon.lc-event-inject{color:#a855f7}.lc-event-icon.lc-event-model{color:var(--dsw-alias-brand-primary)}.lc-event-icon.lc-event-mode{color:var(--dsw-alias-label-secondary)}.lc-kind{white-space:nowrap;border-radius:4px;flex:none;padding:1px 6px;font-size:10px;font-weight:600}.lc-kind-inject{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-kind-compaction{background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent);color:var(--dsw-alias-state-error-primary)}.lc-kind-prune{color:#8b5cf6;background:#8b5cf626}.lc-kind-model{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent);color:var(--dsw-alias-brand-primary)}.lc-kind-mode{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 15%, transparent);color:var(--dsw-alias-label-secondary)}.lc-event-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.lc-event-at{color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;font-size:11px}.lc-event-tokens{color:var(--dsw-alias-state-success-primary);white-space:nowrap;font-weight:600}.lc-event-tokens.lc-up{color:var(--dsw-alias-state-warn-primary)}.lc-event-time{color:var(--dsw-alias-label-secondary);font-size:12px}.lc-fa-ctl{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.lc-fa-ctl .lc-gran{margin-left:0}.lc-fa-n{opacity:.75;margin-left:4px;font-weight:700}.lc-fa-search{min-width:80px;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;outline:none;flex:1;padding:3px 8px;font-size:12px}.lc-fa-search:focus{border-color:var(--dsw-alias-label-dimmed)}.lc-fa-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:6px;font-size:12px;display:flex}.lc-fa-meta .lc-fa-sort{flex:none}.lc-fa-meta-delta{position:relative}.lc-fa-meta-tip{z-index:6;white-space:normal;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:max-content;max-width:260px;color:var(--dsw-alias-label-primary);pointer-events:none;opacity:0;border-radius:6px;padding:6px 10px;font-size:12px;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0000002e}.lc-fa-meta-delta:hover .lc-fa-meta-tip{opacity:1}.lc-fa-item{border:1px solid #0000;border-radius:8px;transition:background-color .12s,border-color .12s}.lc-fa-item-on{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l1)}.lc-fa-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;align-items:center;gap:7px;padding:6px 8px;font-size:12px;transition:background-color .12s;display:flex}.lc-fa-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-form{text-align:center;opacity:.85;flex:none;width:16px;font-size:11px}.lc-fa-path{word-break:break-all;flex:1;min-width:0}.lc-fa-path em{color:var(--dsw-alias-label-secondary);font-style:normal}.lc-fa-badge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-badge i{background:currentColor;border-radius:50%;width:5px;height:5px;display:inline-block}.lc-fa-b-read{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent)}.lc-fa-b-write{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent)}.lc-fa-b-search{color:var(--dsw-alias-state-warn-primary);background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)}.lc-fa-chip-read,.lc-fa-chip-read:hover{color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write,.lc-fa-chip-write:hover{color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search,.lc-fa-chip-search:hover{color:var(--dsw-alias-state-warn-primary)}.lc-fa-chip-read.lc-gran-on,.lc-fa-chip-read.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);color:var(--dsw-alias-brand-primary)}.lc-fa-chip-write.lc-gran-on,.lc-fa-chip-write.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent);color:var(--dsw-alias-state-success-primary)}.lc-fa-chip-search.lc-gran-on,.lc-fa-chip-search.lc-gran-on:hover{background:color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent);color:var(--dsw-alias-state-warn-primary)}.lc-fa-delta{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;gap:5px;font-size:11px;font-weight:600;display:inline-flex}.lc-fa-up{color:var(--dsw-alias-state-success-primary)}.lc-fa-down{color:var(--dsw-alias-state-error-primary)}.lc-fa-time{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.lc-fa-ops{border-left:2px solid var(--dsw-alias-border-l1);flex-direction:column;gap:1px;margin:0 8px 8px 15px;padding:2px 0 2px 10px;display:flex}.lc-fa-op{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:3px 6px;font-size:11px;transition:background-color .12s;display:flex}.lc-fa-op-link{cursor:pointer}.lc-fa-op-link:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-fa-op-time{width:58px;color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none}.lc-fa-op-tool{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px;font-size:11px}.lc-fa-op-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:1;overflow:hidden}.lc-empty{color:var(--dsw-alias-label-secondary);text-align:center;padding:18px 0}.lc-error{flex-direction:column;align-items:center;gap:8px;padding:40px 16px;display:flex}.lc-error-msg{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);overflow-wrap:anywhere;border-radius:6px;max-width:100%;padding:4px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.lc-error-retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:6px;padding:4px 14px;font-size:12px}.lc-error-retry:hover{border-color:var(--dsw-alias-label-primary)}.lc-foot{color:var(--dsw-alias-label-secondary);margin-top:4px;font-size:12px}.lc-modal-backdrop{z-index:200;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lc-modal-card{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);width:min(720px,100vw - 48px);max-height:min(82vh,760px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);color:var(--dsw-alias-label-primary);border-radius:12px;padding:16px 18px 18px;font-size:13px;overflow-y:auto}.lc-modal-head{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.lc-modal-title{font-size:14px;font-weight:600}.lc-modal-close{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;margin-left:auto;padding:2px 6px;font-family:inherit;font-size:18px;line-height:1}.lc-modal-close:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}.lc-br-hint{color:var(--dsw-alias-label-secondary);white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400}.lc-br-pick{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;max-width:240px;padding:3px 6px;font-size:12px}.lc-br-meta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:6px 16px;margin-bottom:8px;display:flex}.lc-br-meta b{color:var(--dsw-alias-label-primary)}.lc-br-meta .lc-actual{color:var(--dsw-alias-state-success-primary)}.lc-br-note{color:var(--dsw-alias-label-secondary);margin-top:8px;font-size:12px}.lc-br-retry{color:var(--dsw-alias-brand-primary);font:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:12px;text-decoration:underline}.lc-br-retry:hover{filter:brightness(1.15)}.lc-br-cats{flex-direction:column;gap:4px;margin-top:10px;display:flex}.lc-br-cat{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;overflow:hidden}.lc-br-cat-empty{opacity:.55}.lc-br-cat-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;transition:background-color .12s;display:flex}.lc-br-cat-row:hover,.lc-br-cat-on{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-cat-on i{box-shadow:0 0 0 1px var(--dsw-alias-brand-primary)}.lc-br-cat-row i{border-radius:2px;flex:none;width:8px;height:8px;transition:box-shadow .12s;display:inline-block}.lc-br-cat-label{font-weight:600}.lc-br-cat-count{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}.lc-br-count-grp{flex:1;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-chev{width:12px;color:var(--dsw-alias-label-secondary);flex:none;transition:transform .12s}.lc-br-chev-on{transform:rotate(90deg)}.lc-br-tokens{color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-delta,.lc-br-tdelta{white-space:nowrap;border-radius:4px;flex:none;padding:0 5px;font-size:11px;font-weight:600}.lc-br-delta-up,.lc-br-tdelta-up{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 15%, transparent)}.lc-br-delta-down,.lc-br-tdelta-down{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 15%, transparent)}.lc-br-tokens-grp{flex:none;align-items:center;gap:4px;min-width:0;display:inline-flex}.lc-br-pct{text-align:right;width:36px;color:var(--dsw-alias-label-secondary);flex:none;font-size:12px}.lc-br-body{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:2px;padding:4px 6px;display:flex}.lc-br-elem{border-radius:6px}.lc-br-elem-on{background:var(--dsw-alias-interactive-bg-active)}.lc-br-elem-row{width:100%;color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:5px 6px;font-size:12px;transition:background-color .12s;display:flex}.lc-br-elem-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lc-br-err-dot{background:var(--dsw-alias-state-error-primary);width:6px;height:6px;box-shadow:0 0 0 2px color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-radius:50%;flex:none}.lc-br-tag{min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);text-overflow:ellipsis;white-space:nowrap;border-radius:4px;max-width:220px;padding:0 6px;font-size:11px;overflow:hidden}.lc-br-preview{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.lc-br-time{color:var(--dsw-alias-label-secondary);flex:none;font-size:11px}.lc-br-content{flex-direction:column;gap:6px;padding:2px 6px 8px 26px;display:flex}.lc-br-dim{color:var(--dsw-alias-label-secondary)}.lc-ts-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;min-width:0;overflow:hidden}.lc-ts-card-head{color:var(--dsw-alias-label-secondary);border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.lc-ts-card-head b{color:var(--dsw-alias-label-primary)}.lc-ts-call-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.lc-ts-card-count{margin-left:auto}.lc-ts-card-right{align-items:center;gap:8px;margin-left:auto;display:inline-flex}.lc-ts-card-meta{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;font-weight:400}.lc-ts-call-state{white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:2px 7px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.lc-ts-call-state i{background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}.lc-ts-call-ok{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.lc-ts-call-err{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.lc-ts-desc-body{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:320px;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-param-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,140px) minmax(0,90px) 56px minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-param-row:first-of-type{border-top:0}.lc-ts-param-name{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.lc-ts-param-type{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.lc-ts-param-req{color:var(--dsw-alias-state-warn-primary);font-size:11px;font-weight:600}.lc-ts-param-req-off{color:var(--dsw-alias-label-secondary);font-size:11px}.lc-ts-param-desc{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;grid-column:1/-1;line-height:1.5}.lc-ts-params-empty{color:var(--dsw-alias-label-secondary);padding:8px 10px;font-size:12px}.lc-ts-arg-row{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:minmax(0,96px) 1fr;align-items:start;column-gap:12px;padding:6px 10px;font-size:12px;display:grid}.lc-ts-arg-row:first-of-type{border-top:0}.lc-ts-arg-row .lc-ts-param-name{text-overflow:unset;white-space:normal;overflow-wrap:anywhere;overflow:visible}.lc-ts-arg-val{color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;max-height:200px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;overflow-y:auto}.lc-ts-json{flex-direction:column;gap:4px;display:flex}.lc-ts-json-toggle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:0;font-size:11px}.lc-ts-json-toggle:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}.lc-rich-seg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;gap:2px;margin-left:auto;padding:1px;display:flex}.lc-rich-seg-btn{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1}.lc-rich-seg-btn:hover{color:var(--dsw-alias-label-primary)}.lc-rich-seg-on,.lc-rich-seg-on:hover{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.lc-ts-desc-md{color:var(--dsw-alias-label-primary);word-break:break-word;overflow-wrap:anywhere;white-space:pre-line;scrollbar-width:thin;min-width:0;max-height:320px;padding:4px 10px;font-size:12px;line-height:1.55;overflow:hidden auto}.lc-ts-desc-md>div{font-size:13px;line-height:1.55}.lc-ts-desc-md div :is(h1,h2,h3,h4,h5,h6){margin:10px 0 4px;font-size:13px;font-weight:600}.lc-ts-desc-md div p{margin:6px 0}.lc-ts-desc-md div pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;margin:6px 0}.lc-ts-desc-md div :not(pre)>code{box-decoration-break:clone;padding:1px 5px;line-height:1.3;font-size:1em!important}.lc-ts-desc-md div table code{font-size:inherit}.lc-att-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:8px 10px;display:grid}.lc-att-item{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:8px;padding:6px;display:flex}.lc-att-item:hover{border-color:var(--dsw-alias-border-l2,var(--dsw-alias-border-l1));background:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-att-thumb{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;justify-content:center;align-items:center;width:64px;height:64px;padding:0;display:flex;overflow:hidden}.lc-att-thumb img{object-fit:cover;width:100%;height:100%;display:block}.lc-att-ph,.lc-att-err{color:var(--dsw-alias-label-secondary);text-align:center;padding:2px;font-size:10px}.lc-att-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.lc-att-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.3}.lc-att-row{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:11px}.lc-att-row-label{min-width:3.2em;font-weight:400;display:inline-block}.lc-att-lightbox{z-index:1000;place-items:center;padding:40px;display:grid;position:fixed;inset:0}.lc-att-lightbox-mask{background:var(--dsw-alias-bg-mask-1,#00000073);backdrop-filter:var(--dsw-mask-blur,blur(2px));position:absolute;inset:0}.lc-att-lightbox-img{object-fit:contain;background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));max-width:min(100%,1600px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3,0 12px 32px #0006);border-radius:12px;position:relative}.lc-att-lightbox-close{z-index:1;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l1));background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1));width:36px;height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:999px;place-items:center;padding:0;display:grid;position:fixed;top:20px;right:20px}[data-conversation-scroll]:has(.lc-root)>[data-composer-seat]:not(:has([data-approval-key],[data-question-key],[data-plan-review-key])){display:none}.lc-agents-chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.lc-agents-chip{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:2px 8px;font-size:11px}.lc-agents-chip-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-stage{margin:0 -4px;padding:0 4px;overflow-x:auto}.lc-agents-svg{max-width:none;margin:0 auto;display:block}.lc-agents-link{stroke-width:1.5px;stroke-opacity:.45}.lc-agents-link-live{stroke-opacity:.85}.lc-agents-flow{stroke-width:2px;stroke-linecap:round;stroke-dasharray:2 7;animation:.9s linear infinite lc-agent-flow}@keyframes lc-agent-flow{to{stroke-dashoffset:-9px}}.lc-agent-node{outline:none}.lc-agent-clickable{cursor:pointer}.lc-agent-halo{fill:#0000;transition:fill .12s}.lc-agent-hover .lc-agent-halo,.lc-agent-node:focus-visible .lc-agent-halo{fill:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}.lc-agent-self .lc-agent-halo{fill:var(--dsw-alias-bg-layer-2)}.lc-agent-running .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent);animation:1.8s ease-in-out infinite lc-agent-glow}.lc-agent-done .lc-agent-halo{fill:color-mix(in srgb, var(--dsw-alias-state-success-primary) 7%, transparent)}@keyframes lc-agent-glow{0%,to{opacity:1}50%{opacity:.4}}.lc-agent-track{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-border-l1);stroke-width:1.5px}.lc-agent-seg{fill:none;stroke-width:9px;transition:stroke-dasharray .3s,stroke-dashoffset .3s}.lc-agent-free{stroke:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agent-pct{fill:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;pointer-events:none;font-size:11px;font-weight:600}.lc-agent-caption{text-align:center;pointer-events:none;width:100%;line-height:1.25}.lc-agent-label{color:var(--dsw-alias-label-primary);overflow-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.lc-agent-tokens{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:10px}.lc-agents-solo{padding:4px 0 10px}.lc-agents-inspector{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0;margin-top:10px;padding:7px 10px;font-size:12px;display:flex}.lc-agents-inspector-name{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.lc-agents-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 6px;font-size:10px}.lc-agent-self-badge{vertical-align:1px;margin-left:5px}.lc-agents-badge-on{color:var(--dsw-alias-state-success-primary);border-color:color-mix(in srgb, var(--dsw-alias-state-success-primary) 40%, transparent)}.lc-agents-inspector-stats{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lc-agents-inspector-open{color:var(--dsw-alias-brand-primary,#3b82f6);flex:none;margin-left:auto}.lc-agents-legend{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:4px 14px;margin-top:8px;font-size:11px;display:flex}.lc-agents-legend-item{align-items:center;gap:5px;display:inline-flex}.lc-agents-legend-item i{border-radius:2px;width:8px;height:8px}.lc-agents-legend-free{background:color-mix(in srgb, var(--dsw-alias-label-secondary) 18%, transparent)}.lc-agents-legend-edge{border-top:2px dashed var(--dsw-alias-label-secondary);border-radius:0!important;width:14px!important;height:0!important}";
|
|
4530
5097
|
const tagId = "dsh-context/styles.css";
|
|
4531
5098
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
4532
5099
|
const tag = document.createElement("style");
|