dsh-context 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/lib/client.js +480 -94
- package/lib/index.d.ts +9 -0
- package/lib/index.js +255 -3
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -100,6 +100,9 @@ window.__ModuleLoader__.load({
|
|
|
100
100
|
"files.noMatch": "没有匹配当前过滤条件的文件",
|
|
101
101
|
"files.locate": "在上下文浏览器中查看此次操作",
|
|
102
102
|
"files.hits": "{n} 处命中",
|
|
103
|
+
"files.readTip": "读取第 {a}–{b} 行",
|
|
104
|
+
"files.open": "在系统中打开",
|
|
105
|
+
"files.readEst": "按调用参数 limit 估算的读取行数",
|
|
103
106
|
"files.errs": "{n} 次失败",
|
|
104
107
|
"files.form.image": "图片",
|
|
105
108
|
"files.form.dir": "目录",
|
|
@@ -120,10 +123,8 @@ window.__ModuleLoader__.load({
|
|
|
120
123
|
"files.glyph.python": "Python",
|
|
121
124
|
"files.glyph.notebook": "Notebook",
|
|
122
125
|
"files.glyph.shell": "Shell",
|
|
123
|
-
"files.glyph.web": "网页",
|
|
124
126
|
"files.glyph.style": "样式",
|
|
125
127
|
"files.glyph.database": "数据库",
|
|
126
|
-
"files.glyph.code": "代码",
|
|
127
128
|
"files.glyph.data": "数据清单",
|
|
128
129
|
"files.glyph.markdown": "标记文档",
|
|
129
130
|
"files.glyph.log": "日志",
|
|
@@ -132,6 +133,24 @@ window.__ModuleLoader__.load({
|
|
|
132
133
|
"files.glyph.archive": "压缩包",
|
|
133
134
|
"files.glyph.font": "字体",
|
|
134
135
|
"files.glyph.media": "媒体",
|
|
136
|
+
"files.glyph.lang.ts": "TypeScript",
|
|
137
|
+
"files.glyph.lang.js": "JavaScript",
|
|
138
|
+
"files.glyph.lang.go": "Go",
|
|
139
|
+
"files.glyph.lang.rust": "Rust",
|
|
140
|
+
"files.glyph.lang.java": "Java",
|
|
141
|
+
"files.glyph.lang.kotlin": "Kotlin",
|
|
142
|
+
"files.glyph.lang.ruby": "Ruby",
|
|
143
|
+
"files.glyph.lang.php": "PHP",
|
|
144
|
+
"files.glyph.lang.c": "C",
|
|
145
|
+
"files.glyph.lang.cpp": "C++",
|
|
146
|
+
"files.glyph.lang.csharp": "C#",
|
|
147
|
+
"files.glyph.lang.scala": "Scala",
|
|
148
|
+
"files.glyph.lang.lua": "Lua",
|
|
149
|
+
"files.glyph.lang.dart": "Dart",
|
|
150
|
+
"files.glyph.lang.swift": "Swift",
|
|
151
|
+
"files.glyph.lang.vue": "Vue",
|
|
152
|
+
"files.glyph.lang.svelte": "Svelte",
|
|
153
|
+
"files.glyph.lang.html": "HTML",
|
|
135
154
|
"agents.title": "Agent 网络",
|
|
136
155
|
"agents.sub": "当前 Agent 与子 Agent 的实时上下文 · 点击节点跳转会话",
|
|
137
156
|
"agents.chip.count": "{n} 个 Agent",
|
|
@@ -187,6 +206,11 @@ window.__ModuleLoader__.load({
|
|
|
187
206
|
"browser.noHeader": "此数据来自旧版插件:仅提供 token 估算,无实际内容",
|
|
188
207
|
"browser.noEpoch": "该步骤的头部内容(系统提示词 / 工具定义)不在保留范围内",
|
|
189
208
|
"browser.noContent": "完整内容不在当前加载的消息窗口内(在聊天页加载更早历史后可查看)",
|
|
209
|
+
"browser.search.user": "按消息内容过滤…",
|
|
210
|
+
"browser.search.inject": "按注入内容过滤…",
|
|
211
|
+
"browser.search.assistant": "按回复或调用过滤…",
|
|
212
|
+
"browser.search.tool": "按工具或参数过滤…",
|
|
213
|
+
"browser.rowNoMatch": "没有匹配当前过滤条件的行",
|
|
190
214
|
"browser.loading": "正在从更早的会话历史加载完整内容…",
|
|
191
215
|
"browser.notInLog": "会话日志中未找到该条目的完整内容(可能已被压缩或清理)",
|
|
192
216
|
"browser.loadFailed": "内容加载失败,点击重试",
|
|
@@ -194,8 +218,16 @@ window.__ModuleLoader__.load({
|
|
|
194
218
|
"tool.desc": "描述",
|
|
195
219
|
"tool.params": "参数",
|
|
196
220
|
"tool.paramsEmpty": "(无参数)",
|
|
221
|
+
"tool.plugin": "该工具的注册插件(仅供参考)",
|
|
222
|
+
"tool.unknown": "未知插件",
|
|
223
|
+
"tool.unknownTitle": "因早于上下文插件加载或原插件已卸载,无法查询该工具的提供者",
|
|
197
224
|
"tool.jsonToggle": "查看原始 JSON",
|
|
198
225
|
"tool.jsonHide": "收起",
|
|
226
|
+
"tool.search": "按名称、描述或参数过滤…",
|
|
227
|
+
"tool.sort.size": "按大小",
|
|
228
|
+
"tool.sort.name": "按名称",
|
|
229
|
+
"tool.sortTip": "工具排序:按 token 大小(默认)或名称",
|
|
230
|
+
"tool.noMatch": "没有匹配当前过滤条件的工具",
|
|
199
231
|
"rich.raw": "原文",
|
|
200
232
|
"rich.md": "Markdown",
|
|
201
233
|
"rich.toMd": "按 Markdown 渲染查看",
|
|
@@ -319,6 +351,9 @@ window.__ModuleLoader__.load({
|
|
|
319
351
|
"files.noMatch": "No files match the current filters",
|
|
320
352
|
"files.locate": "Reveal this operation in the Context Browser",
|
|
321
353
|
"files.hits": "{n} hits",
|
|
354
|
+
"files.readTip": "Read lines {a}–{b}",
|
|
355
|
+
"files.open": "Open on your system",
|
|
356
|
+
"files.readEst": "Lines read, estimated from the limit argument",
|
|
322
357
|
"files.errs": "{n} failed",
|
|
323
358
|
"files.form.image": "Image",
|
|
324
359
|
"files.form.dir": "Directory",
|
|
@@ -339,10 +374,8 @@ window.__ModuleLoader__.load({
|
|
|
339
374
|
"files.glyph.python": "Python",
|
|
340
375
|
"files.glyph.notebook": "Notebook",
|
|
341
376
|
"files.glyph.shell": "Shell",
|
|
342
|
-
"files.glyph.web": "Web page",
|
|
343
377
|
"files.glyph.style": "Styles",
|
|
344
378
|
"files.glyph.database": "Database",
|
|
345
|
-
"files.glyph.code": "Code",
|
|
346
379
|
"files.glyph.data": "Data / manifest",
|
|
347
380
|
"files.glyph.markdown": "Markup document",
|
|
348
381
|
"files.glyph.log": "Log",
|
|
@@ -351,6 +384,24 @@ window.__ModuleLoader__.load({
|
|
|
351
384
|
"files.glyph.archive": "Archive",
|
|
352
385
|
"files.glyph.font": "Font",
|
|
353
386
|
"files.glyph.media": "Media",
|
|
387
|
+
"files.glyph.lang.ts": "TypeScript",
|
|
388
|
+
"files.glyph.lang.js": "JavaScript",
|
|
389
|
+
"files.glyph.lang.go": "Go",
|
|
390
|
+
"files.glyph.lang.rust": "Rust",
|
|
391
|
+
"files.glyph.lang.java": "Java",
|
|
392
|
+
"files.glyph.lang.kotlin": "Kotlin",
|
|
393
|
+
"files.glyph.lang.ruby": "Ruby",
|
|
394
|
+
"files.glyph.lang.php": "PHP",
|
|
395
|
+
"files.glyph.lang.c": "C",
|
|
396
|
+
"files.glyph.lang.cpp": "C++",
|
|
397
|
+
"files.glyph.lang.csharp": "C#",
|
|
398
|
+
"files.glyph.lang.scala": "Scala",
|
|
399
|
+
"files.glyph.lang.lua": "Lua",
|
|
400
|
+
"files.glyph.lang.dart": "Dart",
|
|
401
|
+
"files.glyph.lang.swift": "Swift",
|
|
402
|
+
"files.glyph.lang.vue": "Vue",
|
|
403
|
+
"files.glyph.lang.svelte": "Svelte",
|
|
404
|
+
"files.glyph.lang.html": "HTML",
|
|
354
405
|
"agents.title": "Agent Network",
|
|
355
406
|
"agents.sub": "Live context of this agent and its subagents · click a node to open its session",
|
|
356
407
|
"agents.chip.count": "{n} agents",
|
|
@@ -406,6 +457,11 @@ window.__ModuleLoader__.load({
|
|
|
406
457
|
"browser.noHeader": "Served by an older plugin build: token estimates only, no content",
|
|
407
458
|
"browser.noEpoch": "The header content (System Prompt / Tool Schemas) of this step is outside retention",
|
|
408
459
|
"browser.noContent": "Full content is outside the loaded message window (load older history in Chat to view)",
|
|
460
|
+
"browser.search.user": "Filter by message text…",
|
|
461
|
+
"browser.search.inject": "Filter injected context…",
|
|
462
|
+
"browser.search.assistant": "Filter by reply or calls…",
|
|
463
|
+
"browser.search.tool": "Filter by tool or arguments…",
|
|
464
|
+
"browser.rowNoMatch": "No rows match the current filter",
|
|
409
465
|
"browser.loading": "Loading full content from older session history…",
|
|
410
466
|
"browser.notInLog": "This item is not in the session log anymore (it may have been compacted away or cleared)",
|
|
411
467
|
"browser.loadFailed": "Load failed — click to retry",
|
|
@@ -413,8 +469,16 @@ window.__ModuleLoader__.load({
|
|
|
413
469
|
"tool.desc": "Description",
|
|
414
470
|
"tool.params": "Parameters",
|
|
415
471
|
"tool.paramsEmpty": "(no parameters)",
|
|
472
|
+
"tool.plugin": "The registering plugin of this tool (for reference)",
|
|
473
|
+
"tool.unknown": "Unknown plugin",
|
|
474
|
+
"tool.unknownTitle": "The tool was registered before the context plugin loaded, or its plugin has been unloaded, so its provider cannot be determined",
|
|
416
475
|
"tool.jsonToggle": "View Raw JSON",
|
|
417
476
|
"tool.jsonHide": "Collapse",
|
|
477
|
+
"tool.search": "Filter by name, description, or parameters…",
|
|
478
|
+
"tool.sort.size": "By size",
|
|
479
|
+
"tool.sort.name": "By name",
|
|
480
|
+
"tool.sortTip": "Sort tools by token size (default) or name",
|
|
481
|
+
"tool.noMatch": "No tools match the current filter",
|
|
418
482
|
"rich.raw": "Raw",
|
|
419
483
|
"rich.md": "Markdown",
|
|
420
484
|
"rich.toMd": "View as Markdown",
|
|
@@ -794,6 +858,51 @@ window.__ModuleLoader__.load({
|
|
|
794
858
|
}
|
|
795
859
|
return headers;
|
|
796
860
|
}
|
|
861
|
+
/**
|
|
862
|
+
* The SESSION's workspace root — the `cwd` its session-list row carries (the
|
|
863
|
+
* host session canon, not the host process's own launch directory) — or
|
|
864
|
+
* undefined when the face is absent, the snapshot is malformed, or the row
|
|
865
|
+
* names no cwd. Every field is re-proved — the no-white-screen guarantee.
|
|
866
|
+
*/
|
|
867
|
+
function workspaceOf(ctx, sessionId) {
|
|
868
|
+
if (typeof sessionId !== "string" || sessionId === "") return void 0;
|
|
869
|
+
try {
|
|
870
|
+
const sessions = ctx.get("sessions");
|
|
871
|
+
const snapshot = typeof sessions?.list?.getSnapshot === "function" ? sessions.list.getSnapshot() : void 0;
|
|
872
|
+
const byId = snapshot !== null && typeof snapshot === "object" ? snapshot.byId : void 0;
|
|
873
|
+
const row = byId !== null && typeof byId === "object" ? byId[sessionId] : void 0;
|
|
874
|
+
const cwd = row !== null && typeof row === "object" ? row.cwd : void 0;
|
|
875
|
+
return typeof cwd === "string" && cwd !== "" ? cwd : void 0;
|
|
876
|
+
} catch {
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
/** Whether this deployment can hand a path to the user's native desktop (the
|
|
881
|
+
* host description's `canOpenPath`); false when unknown. */
|
|
882
|
+
function canOpenPathsOf(ctx) {
|
|
883
|
+
try {
|
|
884
|
+
const source = ctx.get("connection")?.hostDescription;
|
|
885
|
+
const snapshot = typeof source?.getSnapshot === "function" ? source.getSnapshot() : void 0;
|
|
886
|
+
return (snapshot !== null && typeof snapshot === "object" ? snapshot.canOpenPath : void 0) === true;
|
|
887
|
+
} catch {
|
|
888
|
+
return false;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
/**
|
|
892
|
+
* The system path opener, or undefined when the deployment lacks the RPC.
|
|
893
|
+
* Fire-and-forget: rejections (unknown path, no desktop) swallow — the
|
|
894
|
+
* affordance is best-effort by nature.
|
|
895
|
+
*/
|
|
896
|
+
function openPathVia(ctx) {
|
|
897
|
+
const host = ctx.get("connection")?.api?.host;
|
|
898
|
+
if (host === void 0 || typeof host.openPath !== "function") return void 0;
|
|
899
|
+
const openPath = host.openPath.bind(host);
|
|
900
|
+
return (path) => {
|
|
901
|
+
try {
|
|
902
|
+
openPath({ path }).catch(() => {});
|
|
903
|
+
} catch {}
|
|
904
|
+
};
|
|
905
|
+
}
|
|
797
906
|
//#endregion
|
|
798
907
|
//#region src/client/historyPage.ts
|
|
799
908
|
/** Narrow one served row to a validated durable event envelope, or null. */
|
|
@@ -1480,6 +1589,37 @@ window.__ModuleLoader__.load({
|
|
|
1480
1589
|
return /* @__PURE__ */ React.createElement(Section, { label: props.label }, /* @__PURE__ */ React.createElement("pre", { className: "lc-ts-desc-body lc-br-dim" }, props.text));
|
|
1481
1590
|
}
|
|
1482
1591
|
/**
|
|
1592
|
+
* The search text of one tool's raw schema. The schema is log data this view
|
|
1593
|
+
* does not own — a hostile value (cyclic, throwing getters) degrades to no
|
|
1594
|
+
* matchable text instead of taking the row, or the browser, down.
|
|
1595
|
+
*/
|
|
1596
|
+
function schemaTextOf(schema) {
|
|
1597
|
+
try {
|
|
1598
|
+
return JSON.stringify(schema ?? "");
|
|
1599
|
+
} catch {
|
|
1600
|
+
return "";
|
|
1601
|
+
}
|
|
1602
|
+
}
|
|
1603
|
+
/**
|
|
1604
|
+
* The shared row-filter toolbar of a category body: a text input plus an
|
|
1605
|
+
* optional trailing control group (the tools' size/name sort). Stays mounted
|
|
1606
|
+
* on an empty match so the filter can always be cleared from the UI.
|
|
1607
|
+
*/
|
|
1608
|
+
function RowToolbar(props) {
|
|
1609
|
+
return /* @__PURE__ */ React.createElement("div", { className: "lc-br-toolctl" }, /* @__PURE__ */ React.createElement("input", {
|
|
1610
|
+
className: "lc-br-tool-search",
|
|
1611
|
+
value: props.value,
|
|
1612
|
+
placeholder: props.placeholder,
|
|
1613
|
+
onChange: (ev) => {
|
|
1614
|
+
props.onChange(ev.target.value);
|
|
1615
|
+
}
|
|
1616
|
+
}), props.children !== void 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
1617
|
+
className: "lc-gran",
|
|
1618
|
+
role: "group",
|
|
1619
|
+
title: props.tip
|
|
1620
|
+
}, props.children) : null);
|
|
1621
|
+
}
|
|
1622
|
+
/**
|
|
1483
1623
|
* Full tool-row body: description, parsed parameter table (when the schema carries one), raw JSON behind a per-row toggle — the JSON open
|
|
1484
1624
|
* state is per-row so two expanded tools stay independent.
|
|
1485
1625
|
*/
|
|
@@ -1764,6 +1904,8 @@ window.__ModuleLoader__.load({
|
|
|
1764
1904
|
const [sel, setSel] = React.useState("live");
|
|
1765
1905
|
const [openCat, setOpenCat] = React.useState(null);
|
|
1766
1906
|
const [openElem, setOpenElem] = React.useState(null);
|
|
1907
|
+
const [rowQuery, setRowQuery] = React.useState("");
|
|
1908
|
+
const [toolSort, setToolSort] = React.useState("size");
|
|
1767
1909
|
const convNodes = typeof props.useSession === "function" ? props.useSession((s) => s.nodes) : void 0;
|
|
1768
1910
|
const [fetched, setFetched] = React.useState(() => /* @__PURE__ */ new Map());
|
|
1769
1911
|
const bySeq = React.useMemo(() => {
|
|
@@ -1861,6 +2003,7 @@ window.__ModuleLoader__.load({
|
|
|
1861
2003
|
return;
|
|
1862
2004
|
}
|
|
1863
2005
|
setOpenCat(c);
|
|
2006
|
+
setRowQuery("");
|
|
1864
2007
|
setOpenElem(c === "system" && view.header?.system !== void 0 ? "sys" : null);
|
|
1865
2008
|
};
|
|
1866
2009
|
const toggleElem = (key) => {
|
|
@@ -1870,7 +2013,7 @@ window.__ModuleLoader__.load({
|
|
|
1870
2013
|
* Expandable element row; `err` rows carry the red run-state dot right after the chevron (the chat's failed-tool marker) so a failed
|
|
1871
2014
|
* result scans while collapsed.
|
|
1872
2015
|
*/
|
|
1873
|
-
const elemRow = (key, tag, preview, tokens, time, body, err = false) => {
|
|
2016
|
+
const elemRow = (key, tag, preview, tokens, time, body, err = false, trailing = null) => {
|
|
1874
2017
|
const open = openElem === key;
|
|
1875
2018
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1876
2019
|
key,
|
|
@@ -1881,10 +2024,10 @@ window.__ModuleLoader__.load({
|
|
|
1881
2024
|
onClick: () => {
|
|
1882
2025
|
toggleElem(key);
|
|
1883
2026
|
}
|
|
1884
|
-
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }
|
|
2027
|
+
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }), err ? /* @__PURE__ */ React.createElement("span", {
|
|
1885
2028
|
className: "lc-br-err-dot",
|
|
1886
2029
|
title: t("node.failed")
|
|
1887
|
-
}) : null, tag !== null ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-tag" }, tag) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-preview" }, preview), time !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-time" }, fmtTime(time)) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-tokens" }, "≈" + fmt(tokens))), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, body) : null);
|
|
2030
|
+
}) : null, tag !== null ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-tag" }, tag) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-preview" }, preview), trailing !== null ? trailing : null, time !== void 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-time" }, fmtTime(time)) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-tokens" }, "≈" + fmt(tokens))), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-br-content" }, body) : null);
|
|
1888
2031
|
};
|
|
1889
2032
|
const catBody = (c) => {
|
|
1890
2033
|
if (c === "system") {
|
|
@@ -1909,17 +2052,37 @@ window.__ModuleLoader__.load({
|
|
|
1909
2052
|
show: t("tool.jsonToggle"),
|
|
1910
2053
|
hide: t("tool.jsonHide")
|
|
1911
2054
|
};
|
|
1912
|
-
|
|
2055
|
+
const q = rowQuery.trim().toLowerCase();
|
|
2056
|
+
const shown = view.header.tools.filter((tool) => q === "" || tool.name.toLowerCase().includes(q) || (tool.description ?? "").toLowerCase().includes(q) || (tool.plugin ?? "").toLowerCase().includes(q) || schemaTextOf(tool.schema).toLowerCase().includes(q)).sort((a, b) => toolSort === "size" ? b.tokens - a.tokens : a.name < b.name ? -1 : 1);
|
|
2057
|
+
const toolctl = /* @__PURE__ */ React.createElement(RowToolbar, {
|
|
2058
|
+
value: rowQuery,
|
|
2059
|
+
placeholder: t("tool.search"),
|
|
2060
|
+
tip: t("tool.sortTip"),
|
|
2061
|
+
onChange: setRowQuery
|
|
2062
|
+
}, ["size", "name"].map((k) => /* @__PURE__ */ React.createElement("button", {
|
|
2063
|
+
key: k,
|
|
2064
|
+
type: "button",
|
|
2065
|
+
className: "lc-gran-btn" + (toolSort === k ? " lc-gran-on" : ""),
|
|
2066
|
+
onClick: () => {
|
|
2067
|
+
setToolSort(k);
|
|
2068
|
+
}
|
|
2069
|
+
}, t("tool.sort." + k))));
|
|
2070
|
+
if (shown.length === 0) return /* @__PURE__ */ React.createElement("div", null, toolctl, /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, t("tool.noMatch")));
|
|
2071
|
+
return /* @__PURE__ */ React.createElement("div", null, toolctl, shown.map((tool) => {
|
|
2072
|
+
const trailing = tool.plugin !== void 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
2073
|
+
className: "lc-br-tag lc-br-tool-plugin",
|
|
2074
|
+
title: tool.plugin === "<unknown-plugin>" ? t("tool.unknownTitle") : t("tool.plugin")
|
|
2075
|
+
}, tool.plugin === "<unknown-plugin>" ? t("tool.unknown") : tool.plugin) : null;
|
|
1913
2076
|
return elemRow("tool:" + tool.name, null, tool.name, tool.tokens, void 0, /* @__PURE__ */ React.createElement(ToolSchema, {
|
|
1914
2077
|
description: tool.description,
|
|
1915
2078
|
schema: tool.schema,
|
|
1916
2079
|
rich,
|
|
1917
2080
|
lines: lineLabel,
|
|
1918
2081
|
labels
|
|
1919
|
-
}));
|
|
1920
|
-
});
|
|
2082
|
+
}), false, trailing);
|
|
2083
|
+
}));
|
|
1921
2084
|
}
|
|
1922
|
-
|
|
2085
|
+
const rows = (byCat[c] ?? []).slice().reverse().map((n) => {
|
|
1923
2086
|
const conv = bySeq.get(n.seq);
|
|
1924
2087
|
const rowErr = n.cat === "tool" && toolErrOf(n, conv).err;
|
|
1925
2088
|
let tag = null;
|
|
@@ -1938,28 +2101,43 @@ window.__ModuleLoader__.load({
|
|
|
1938
2101
|
tag = t("form." + (n.form || "context"));
|
|
1939
2102
|
if (n.text !== void 0 && n.text !== "") preview = n.form === "snapshot" ? t("node.snapshot") + n.text : n.text;
|
|
1940
2103
|
}
|
|
1941
|
-
return
|
|
1942
|
-
|
|
2104
|
+
return {
|
|
2105
|
+
n,
|
|
1943
2106
|
conv,
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
},
|
|
1949
|
-
labels: {
|
|
1950
|
-
thinking: t("block.thinking"),
|
|
1951
|
-
answer: t("block.answer"),
|
|
1952
|
-
content: t("block.content"),
|
|
1953
|
-
result: t("block.result"),
|
|
1954
|
-
summary: t("block.summary"),
|
|
1955
|
-
images: t("attach.images"),
|
|
1956
|
-
other: t("attach.other"),
|
|
1957
|
-
lines: lineLabel,
|
|
1958
|
-
callState: (err, exit) => /* @__PURE__ */ React.createElement("span", { className: "lc-ts-call-state " + (err ? "lc-ts-call-err" : "lc-ts-call-ok") }, /* @__PURE__ */ React.createElement("i", null), err ? t("call.fail") + (exit !== null ? " · " + t("call.exit", { n: exit }) : "") : t("call.ok"))
|
|
1959
|
-
},
|
|
1960
|
-
hint: conv === void 0 ? missNote : t("browser.noContent")
|
|
1961
|
-
}), rowErr);
|
|
2107
|
+
rowErr,
|
|
2108
|
+
tag,
|
|
2109
|
+
preview
|
|
2110
|
+
};
|
|
1962
2111
|
});
|
|
2112
|
+
const q = rowQuery.trim().toLowerCase();
|
|
2113
|
+
const shown = q === "" ? rows : rows.filter((r) => (r.tag ?? "").toLowerCase().includes(q) || r.preview.toLowerCase().includes(q));
|
|
2114
|
+
const rowctl = /* @__PURE__ */ React.createElement(RowToolbar, {
|
|
2115
|
+
value: rowQuery,
|
|
2116
|
+
placeholder: t("browser.search." + c),
|
|
2117
|
+
onChange: setRowQuery
|
|
2118
|
+
});
|
|
2119
|
+
if (shown.length === 0) return /* @__PURE__ */ React.createElement("div", null, rowctl, /* @__PURE__ */ React.createElement("div", { className: "lc-br-note" }, t("browser.rowNoMatch")));
|
|
2120
|
+
return /* @__PURE__ */ React.createElement("div", null, rowctl, shown.map(({ n, conv, rowErr, tag, preview }) => elemRow(`n${n.seq}`, tag, preview, n.tokens, n.time, /* @__PURE__ */ React.createElement(NodeContent, {
|
|
2121
|
+
node: n,
|
|
2122
|
+
conv,
|
|
2123
|
+
rich,
|
|
2124
|
+
img: {
|
|
2125
|
+
Card: ImageCard,
|
|
2126
|
+
load: props.loadImage
|
|
2127
|
+
},
|
|
2128
|
+
labels: {
|
|
2129
|
+
thinking: t("block.thinking"),
|
|
2130
|
+
answer: t("block.answer"),
|
|
2131
|
+
content: t("block.content"),
|
|
2132
|
+
result: t("block.result"),
|
|
2133
|
+
summary: t("block.summary"),
|
|
2134
|
+
images: t("attach.images"),
|
|
2135
|
+
other: t("attach.other"),
|
|
2136
|
+
lines: lineLabel,
|
|
2137
|
+
callState: (err, exit) => /* @__PURE__ */ React.createElement("span", { className: "lc-ts-call-state " + (err ? "lc-ts-call-err" : "lc-ts-call-ok") }, /* @__PURE__ */ React.createElement("i", null), err ? t("call.fail") + (exit !== null ? " · " + t("call.exit", { n: exit }) : "") : t("call.ok"))
|
|
2138
|
+
},
|
|
2139
|
+
hint: conv === void 0 ? missNote : t("browser.noContent")
|
|
2140
|
+
}), rowErr)));
|
|
1963
2141
|
};
|
|
1964
2142
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1965
2143
|
className: "lc-card",
|
|
@@ -2012,7 +2190,7 @@ window.__ModuleLoader__.load({
|
|
|
2012
2190
|
onClick: () => {
|
|
2013
2191
|
toggleCat(c.key);
|
|
2014
2192
|
}
|
|
2015
|
-
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }
|
|
2193
|
+
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }), /* @__PURE__ */ React.createElement("i", { style: { background: c.color } }), /* @__PURE__ */ React.createElement("span", { className: "lc-br-cat-label" }, catLabel(c.key)), /* @__PURE__ */ React.createElement("span", { className: "lc-br-count-grp" }, /* @__PURE__ */ React.createElement("span", { className: "lc-br-cat-count" }, t("browser.items", { n: count })), countDelta !== null && countDelta !== 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-delta lc-br-delta-" + (countDelta > 0 ? "up" : "down") }, `${countDelta > 0 ? "+" : ""}${countDelta}`) : null), /* @__PURE__ */ React.createElement("span", { className: "lc-br-tokens-grp" }, tokenDelta !== null && tokenDelta !== 0 ? /* @__PURE__ */ React.createElement("span", { className: "lc-br-tdelta lc-br-tdelta-" + (tokenDelta > 0 ? "up" : "down") }, (tokenDelta > 0 ? "+" : "") + fmt(tokenDelta)) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-br-tokens" }, "≈" + fmt(v))), /* @__PURE__ */ React.createElement("span", { className: "lc-br-pct" }, total > 0 ? `${Math.round(v / total * 100)}%` : "")), open ? /* @__PURE__ */ React.createElement("div", { className: "lc-br-body" }, catBody(c.key)) : null);
|
|
2016
2194
|
})));
|
|
2017
2195
|
};
|
|
2018
2196
|
}
|
|
@@ -2579,6 +2757,39 @@ window.__ModuleLoader__.load({
|
|
|
2579
2757
|
removed: 0
|
|
2580
2758
|
};
|
|
2581
2759
|
}
|
|
2760
|
+
/** The exact window a read's result meta reports: `offset` plus the retained
|
|
2761
|
+
* `lines` array (the same bounded payload the read card renders from). Null
|
|
2762
|
+
* for a foreign or malformed meta. */
|
|
2763
|
+
function readWindowOf(meta) {
|
|
2764
|
+
if (meta === null || typeof meta !== "object") return null;
|
|
2765
|
+
const m = meta;
|
|
2766
|
+
if (typeof m.path !== "string" || m.path === "") return null;
|
|
2767
|
+
if (typeof m.offset !== "number" || !Number.isFinite(m.offset) || m.offset < 1) return null;
|
|
2768
|
+
if (!Array.isArray(m.lines) || m.lines.length === 0) return null;
|
|
2769
|
+
return {
|
|
2770
|
+
start: m.offset,
|
|
2771
|
+
count: m.lines.length
|
|
2772
|
+
};
|
|
2773
|
+
}
|
|
2774
|
+
/** The limit estimate: the tool reads up to `limit` lines from `offset`;
|
|
2775
|
+
* absent when the call reads unbounded. */
|
|
2776
|
+
function readEstimateOf(args) {
|
|
2777
|
+
const limit = args.limit;
|
|
2778
|
+
return typeof limit === "number" && Number.isFinite(limit) && limit > 0 ? {
|
|
2779
|
+
count: Math.floor(limit),
|
|
2780
|
+
est: true
|
|
2781
|
+
} : void 0;
|
|
2782
|
+
}
|
|
2783
|
+
/** What a read op shows: the exact window off the result meta, else the
|
|
2784
|
+
* limit estimate, else nothing (an unbounded read names no footprint). */
|
|
2785
|
+
function readOf(meta, args) {
|
|
2786
|
+
const win = readWindowOf(meta);
|
|
2787
|
+
if (win !== null) return {
|
|
2788
|
+
start: win.start,
|
|
2789
|
+
count: win.count
|
|
2790
|
+
};
|
|
2791
|
+
return readEstimateOf(args);
|
|
2792
|
+
}
|
|
2582
2793
|
const IMAGE_EXT = /\.(png|jpe?g|gif|webp|svg|bmp|ico|avif)$/i;
|
|
2583
2794
|
/** The file's form — multimodal reads and image extensions scan apart; a trailing slash marks a directory target. */
|
|
2584
2795
|
function formOf(tool, path) {
|
|
@@ -2678,24 +2889,148 @@ window.__ModuleLoader__.load({
|
|
|
2678
2889
|
"justfile",
|
|
2679
2890
|
"cmakelists.txt"
|
|
2680
2891
|
];
|
|
2681
|
-
/** A test file by name: a standalone or delimited `test`, an inline `.test
|
|
2682
|
-
const TEST_NAME = /(^|[^a-z0-9])test([^a-z0-9]|$)|\.
|
|
2683
|
-
/**
|
|
2684
|
-
|
|
2892
|
+
/** A test file by name: a standalone or delimited `test`, or an inline `.test.`. */
|
|
2893
|
+
const TEST_NAME = /(^|[^a-z0-9])test([^a-z0-9]|$)|\.test\./;
|
|
2894
|
+
/**
|
|
2895
|
+
* Programming-language files render as letter badges over their language's
|
|
2896
|
+
* color (GitHub Linguist shades). Checked before the emoji buckets, so a
|
|
2897
|
+
* language file never falls through to one.
|
|
2898
|
+
*/
|
|
2899
|
+
const CODE_LANGS = [
|
|
2900
|
+
[
|
|
2901
|
+
["tsx"],
|
|
2902
|
+
"TSX",
|
|
2903
|
+
"#3178c6",
|
|
2904
|
+
"files.glyph.lang.ts"
|
|
2905
|
+
],
|
|
2906
|
+
[
|
|
2907
|
+
["ts"],
|
|
2908
|
+
"TS",
|
|
2909
|
+
"#3178c6",
|
|
2910
|
+
"files.glyph.lang.ts"
|
|
2911
|
+
],
|
|
2912
|
+
[
|
|
2913
|
+
[
|
|
2914
|
+
"js",
|
|
2915
|
+
"jsx",
|
|
2916
|
+
"mjs",
|
|
2917
|
+
"cjs"
|
|
2918
|
+
],
|
|
2919
|
+
"JS",
|
|
2920
|
+
"#f7df1e",
|
|
2921
|
+
"files.glyph.lang.js"
|
|
2922
|
+
],
|
|
2685
2923
|
[
|
|
2686
2924
|
[
|
|
2687
2925
|
"py",
|
|
2688
2926
|
"pyi",
|
|
2689
2927
|
"pyw"
|
|
2690
2928
|
],
|
|
2691
|
-
"
|
|
2929
|
+
"PY",
|
|
2930
|
+
"#3572a5",
|
|
2692
2931
|
"files.glyph.python"
|
|
2693
2932
|
],
|
|
2694
2933
|
[
|
|
2695
2934
|
["ipynb"],
|
|
2696
|
-
"
|
|
2935
|
+
"NB",
|
|
2936
|
+
"#da5b0b",
|
|
2697
2937
|
"files.glyph.notebook"
|
|
2698
2938
|
],
|
|
2939
|
+
[
|
|
2940
|
+
["go"],
|
|
2941
|
+
"GO",
|
|
2942
|
+
"#00add8",
|
|
2943
|
+
"files.glyph.lang.go"
|
|
2944
|
+
],
|
|
2945
|
+
[
|
|
2946
|
+
["rs"],
|
|
2947
|
+
"RS",
|
|
2948
|
+
"#dea584",
|
|
2949
|
+
"files.glyph.lang.rust"
|
|
2950
|
+
],
|
|
2951
|
+
[
|
|
2952
|
+
["java"],
|
|
2953
|
+
"JV",
|
|
2954
|
+
"#b07219",
|
|
2955
|
+
"files.glyph.lang.java"
|
|
2956
|
+
],
|
|
2957
|
+
[
|
|
2958
|
+
["kt", "kts"],
|
|
2959
|
+
"KT",
|
|
2960
|
+
"#a97bff",
|
|
2961
|
+
"files.glyph.lang.kotlin"
|
|
2962
|
+
],
|
|
2963
|
+
[
|
|
2964
|
+
["rb"],
|
|
2965
|
+
"RB",
|
|
2966
|
+
"#701516",
|
|
2967
|
+
"files.glyph.lang.ruby"
|
|
2968
|
+
],
|
|
2969
|
+
[
|
|
2970
|
+
["php"],
|
|
2971
|
+
"PHP",
|
|
2972
|
+
"#4f5d95",
|
|
2973
|
+
"files.glyph.lang.php"
|
|
2974
|
+
],
|
|
2975
|
+
[
|
|
2976
|
+
["c", "h"],
|
|
2977
|
+
"C",
|
|
2978
|
+
"#555555",
|
|
2979
|
+
"files.glyph.lang.c"
|
|
2980
|
+
],
|
|
2981
|
+
[
|
|
2982
|
+
[
|
|
2983
|
+
"cpp",
|
|
2984
|
+
"cc",
|
|
2985
|
+
"cxx",
|
|
2986
|
+
"hpp"
|
|
2987
|
+
],
|
|
2988
|
+
"C++",
|
|
2989
|
+
"#f34b7d",
|
|
2990
|
+
"files.glyph.lang.cpp"
|
|
2991
|
+
],
|
|
2992
|
+
[
|
|
2993
|
+
["cs"],
|
|
2994
|
+
"C#",
|
|
2995
|
+
"#178600",
|
|
2996
|
+
"files.glyph.lang.csharp"
|
|
2997
|
+
],
|
|
2998
|
+
[
|
|
2999
|
+
["scala"],
|
|
3000
|
+
"SC",
|
|
3001
|
+
"#c22d40",
|
|
3002
|
+
"files.glyph.lang.scala"
|
|
3003
|
+
],
|
|
3004
|
+
[
|
|
3005
|
+
["lua"],
|
|
3006
|
+
"LUA",
|
|
3007
|
+
"#000080",
|
|
3008
|
+
"files.glyph.lang.lua"
|
|
3009
|
+
],
|
|
3010
|
+
[
|
|
3011
|
+
["dart"],
|
|
3012
|
+
"DA",
|
|
3013
|
+
"#00b4ab",
|
|
3014
|
+
"files.glyph.lang.dart"
|
|
3015
|
+
],
|
|
3016
|
+
[
|
|
3017
|
+
["swift"],
|
|
3018
|
+
"SW",
|
|
3019
|
+
"#f05138",
|
|
3020
|
+
"files.glyph.lang.swift"
|
|
3021
|
+
],
|
|
3022
|
+
[
|
|
3023
|
+
["vue"],
|
|
3024
|
+
"VUE",
|
|
3025
|
+
"#41b883",
|
|
3026
|
+
"files.glyph.lang.vue"
|
|
3027
|
+
],
|
|
3028
|
+
[
|
|
3029
|
+
["svelte"],
|
|
3030
|
+
"SV",
|
|
3031
|
+
"#ff3e00",
|
|
3032
|
+
"files.glyph.lang.svelte"
|
|
3033
|
+
],
|
|
2699
3034
|
[
|
|
2700
3035
|
[
|
|
2701
3036
|
"sh",
|
|
@@ -2704,7 +3039,8 @@ window.__ModuleLoader__.load({
|
|
|
2704
3039
|
"fish",
|
|
2705
3040
|
"ps1"
|
|
2706
3041
|
],
|
|
2707
|
-
"
|
|
3042
|
+
"SH",
|
|
3043
|
+
"#89e051",
|
|
2708
3044
|
"files.glyph.shell"
|
|
2709
3045
|
],
|
|
2710
3046
|
[
|
|
@@ -2713,8 +3049,9 @@ window.__ModuleLoader__.load({
|
|
|
2713
3049
|
"htm",
|
|
2714
3050
|
"xhtml"
|
|
2715
3051
|
],
|
|
2716
|
-
"
|
|
2717
|
-
"
|
|
3052
|
+
"HT",
|
|
3053
|
+
"#e34c26",
|
|
3054
|
+
"files.glyph.lang.html"
|
|
2718
3055
|
],
|
|
2719
3056
|
[
|
|
2720
3057
|
[
|
|
@@ -2724,14 +3061,28 @@ window.__ModuleLoader__.load({
|
|
|
2724
3061
|
"less",
|
|
2725
3062
|
"styl"
|
|
2726
3063
|
],
|
|
2727
|
-
"
|
|
3064
|
+
"CSS",
|
|
3065
|
+
"#563d7c",
|
|
2728
3066
|
"files.glyph.style"
|
|
2729
3067
|
],
|
|
2730
3068
|
[
|
|
2731
3069
|
["sql"],
|
|
2732
|
-
"
|
|
3070
|
+
"SQL",
|
|
3071
|
+
"#e38c00",
|
|
2733
3072
|
"files.glyph.database"
|
|
2734
|
-
]
|
|
3073
|
+
]
|
|
3074
|
+
];
|
|
3075
|
+
/**
|
|
3076
|
+
* Badge text by fill luminance: white on dark shades, near-black on light
|
|
3077
|
+
* ones (the JS yellow, the shell green) — a fixed dark tone, never pure
|
|
3078
|
+
* black, so it sits quietly next to the white badges.
|
|
3079
|
+
*/
|
|
3080
|
+
function badgeTextColor(hex) {
|
|
3081
|
+
const n = parseInt(hex.slice(1), 16);
|
|
3082
|
+
return (.299 * (n >> 16 & 255) + .587 * (n >> 8 & 255) + .114 * (n & 255)) / 255 < .6 ? "#ffffff" : "#1f2328";
|
|
3083
|
+
}
|
|
3084
|
+
/** Extension buckets for non-code files, most specific first. */
|
|
3085
|
+
const EXT_BUCKETS = [
|
|
2735
3086
|
[
|
|
2736
3087
|
[
|
|
2737
3088
|
"yaml",
|
|
@@ -2836,38 +3187,6 @@ window.__ModuleLoader__.load({
|
|
|
2836
3187
|
],
|
|
2837
3188
|
"🎬",
|
|
2838
3189
|
"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
3190
|
]
|
|
2872
3191
|
];
|
|
2873
3192
|
function dirGlyph(base) {
|
|
@@ -2922,6 +3241,12 @@ window.__ModuleLoader__.load({
|
|
|
2922
3241
|
tip: "files.glyph.config"
|
|
2923
3242
|
};
|
|
2924
3243
|
if (ext !== "") {
|
|
3244
|
+
for (const [exts, label, color, tip] of CODE_LANGS) if (exts.includes(ext)) return {
|
|
3245
|
+
glyph: label,
|
|
3246
|
+
tip,
|
|
3247
|
+
color,
|
|
3248
|
+
text: badgeTextColor(color)
|
|
3249
|
+
};
|
|
2925
3250
|
for (const [exts, glyph, tip] of EXT_BUCKETS) if (exts.includes(ext)) return {
|
|
2926
3251
|
glyph,
|
|
2927
3252
|
tip
|
|
@@ -2942,6 +3267,33 @@ window.__ModuleLoader__.load({
|
|
|
2942
3267
|
const base = trimmed.slice(trimmed.lastIndexOf("/") + 1);
|
|
2943
3268
|
return form === "dir" ? dirGlyph(base) : fileGlyph(base);
|
|
2944
3269
|
}
|
|
3270
|
+
const DRIVE_PATH = /^[a-zA-Z]:[\\/]/;
|
|
3271
|
+
/**
|
|
3272
|
+
* The absolute form of a real file path: verbatim when already absolute,
|
|
3273
|
+
* resolved against the workspace root when relative, and undefined when a
|
|
3274
|
+
* relative path has no root to resolve against (the system open can't reach
|
|
3275
|
+
* it). Callers keep search-pattern "paths" away from here.
|
|
3276
|
+
*/
|
|
3277
|
+
function absPathOf(path, workspace) {
|
|
3278
|
+
if (path.startsWith("/") || DRIVE_PATH.test(path)) return path;
|
|
3279
|
+
if (workspace === void 0 || workspace === "" || path.startsWith(".")) return void 0;
|
|
3280
|
+
return workspace.replace(/\/+$/, "") + "/" + path.replace(/^\/+/, "");
|
|
3281
|
+
}
|
|
3282
|
+
/**
|
|
3283
|
+
* The row's display form of a path: inside the workspace (or already
|
|
3284
|
+
* workspace-relative) it shortens to a './'-prefixed relative — an absolute
|
|
3285
|
+
* path outside the workspace, a Windows drive path, and an already-'.'
|
|
3286
|
+
* relative keep their verbatim form.
|
|
3287
|
+
*/
|
|
3288
|
+
function displayPathOf(path, workspace) {
|
|
3289
|
+
const root = workspace !== void 0 && workspace.length > 1 ? workspace.replace(/\/+$/, "") : void 0;
|
|
3290
|
+
if (root !== void 0) {
|
|
3291
|
+
if (path === root) return "./";
|
|
3292
|
+
if (path.startsWith(root + "/")) return "./" + path.slice(root.length + 1);
|
|
3293
|
+
}
|
|
3294
|
+
if (path.startsWith("/") || DRIVE_PATH.test(path) || path.startsWith(".")) return path;
|
|
3295
|
+
return "./" + path;
|
|
3296
|
+
}
|
|
2945
3297
|
/**
|
|
2946
3298
|
* A search op's detail: the pattern, with the include filter appended when
|
|
2947
3299
|
* one narrowed the call. A patternless (malformed) search has no detail.
|
|
@@ -3031,7 +3383,9 @@ window.__ModuleLoader__.load({
|
|
|
3031
3383
|
const path = kind !== null ? pathOfArgs(sub.name, args) : null;
|
|
3032
3384
|
if (args !== null && kind !== null && path !== null) {
|
|
3033
3385
|
const { added, removed } = deltaOf(sub.name, args);
|
|
3034
|
-
const
|
|
3386
|
+
const narrowed = typeof args.path === "string" && args.path !== "";
|
|
3387
|
+
const detail = kind === "search" && narrowed ? searchDetailOf(args) : void 0;
|
|
3388
|
+
const read = kind === "read" ? readOf(void 0, args) : void 0;
|
|
3035
3389
|
add({
|
|
3036
3390
|
seq: sub.seq,
|
|
3037
3391
|
...parent.gone !== void 0 ? { gone: parent.gone } : {},
|
|
@@ -3042,9 +3396,10 @@ window.__ModuleLoader__.load({
|
|
|
3042
3396
|
added,
|
|
3043
3397
|
removed,
|
|
3044
3398
|
...detail !== void 0 ? { detail } : {},
|
|
3399
|
+
...read !== void 0 ? { read } : {},
|
|
3045
3400
|
parent: parent.seq,
|
|
3046
3401
|
...program !== void 0 ? { program } : {}
|
|
3047
|
-
}, path);
|
|
3402
|
+
}, path, kind === "search" && !narrowed);
|
|
3048
3403
|
}
|
|
3049
3404
|
if (sub.subCalls !== void 0) foldSubCalls(sub.subCalls, parent, program, add, seen, depth + 1);
|
|
3050
3405
|
}
|
|
@@ -3073,8 +3428,9 @@ window.__ModuleLoader__.load({
|
|
|
3073
3428
|
removed: 0
|
|
3074
3429
|
};
|
|
3075
3430
|
const byPath = /* @__PURE__ */ new Map();
|
|
3076
|
-
/** Book one executed op under its file; the totals and the entry move together.
|
|
3077
|
-
|
|
3431
|
+
/** Book one executed op under its file; the totals and the entry move together.
|
|
3432
|
+
* `pattern` marks a pathless search's pattern-as-target row (a display-only flag). */
|
|
3433
|
+
const add = (op, path, pattern = false) => {
|
|
3078
3434
|
totals[op.kind].ops++;
|
|
3079
3435
|
let entry = byPath.get(path);
|
|
3080
3436
|
if (entry === void 0) {
|
|
@@ -3087,7 +3443,8 @@ window.__ModuleLoader__.load({
|
|
|
3087
3443
|
added: 0,
|
|
3088
3444
|
removed: 0,
|
|
3089
3445
|
errs: 0,
|
|
3090
|
-
ops: []
|
|
3446
|
+
ops: [],
|
|
3447
|
+
...pattern ? { pattern: true } : {}
|
|
3091
3448
|
};
|
|
3092
3449
|
byPath.set(path, entry);
|
|
3093
3450
|
}
|
|
@@ -3130,7 +3487,9 @@ window.__ModuleLoader__.load({
|
|
|
3130
3487
|
const path = pathOfArgs(tool, args);
|
|
3131
3488
|
if (path !== null) {
|
|
3132
3489
|
const { added, removed } = deltaOf(tool, args);
|
|
3133
|
-
const
|
|
3490
|
+
const narrowed = typeof args.path === "string" && args.path !== "";
|
|
3491
|
+
const detail = kind === "search" && narrowed ? searchDetailOf(args) : void 0;
|
|
3492
|
+
const read = kind === "read" ? readOf(conv?.meta, args) : void 0;
|
|
3134
3493
|
add({
|
|
3135
3494
|
seq: n.seq,
|
|
3136
3495
|
...n.gone !== void 0 ? { gone: n.gone } : {},
|
|
@@ -3140,8 +3499,9 @@ window.__ModuleLoader__.load({
|
|
|
3140
3499
|
err,
|
|
3141
3500
|
added,
|
|
3142
3501
|
removed,
|
|
3143
|
-
...detail !== void 0 ? { detail } : {}
|
|
3144
|
-
|
|
3502
|
+
...detail !== void 0 ? { detail } : {},
|
|
3503
|
+
...read !== void 0 ? { read } : {}
|
|
3504
|
+
}, path, kind === "search" && !narrowed);
|
|
3145
3505
|
}
|
|
3146
3506
|
}
|
|
3147
3507
|
}
|
|
@@ -3888,8 +4248,9 @@ window.__ModuleLoader__.load({
|
|
|
3888
4248
|
const [query, setQuery] = React.useState("");
|
|
3889
4249
|
const [openPath, setOpenPath] = React.useState(null);
|
|
3890
4250
|
const q = query.trim().toLowerCase();
|
|
4251
|
+
const displayOf = (e) => e.pattern === true ? e.path : displayPathOf(e.path, props.workspace);
|
|
3891
4252
|
const countOf = (e) => filter === "read" ? e.reads : filter === "write" ? e.writes : filter === "search" ? e.searches : e.ops.length;
|
|
3892
|
-
const shown = activity.entries.filter((e) => matches(e, filter) && (q === "" || e.
|
|
4253
|
+
const shown = activity.entries.filter((e) => matches(e, filter) && (q === "" || displayOf(e).toLowerCase().includes(q))).sort((a, b) => sort === "count" ? countOf(b) - countOf(a) || b.ops[0].seq - a.ops[0].seq : sort === "latest" ? b.ops[0].seq - a.ops[0].seq : a.path < b.path ? -1 : 1);
|
|
3893
4254
|
const chips = [
|
|
3894
4255
|
{
|
|
3895
4256
|
key: "all",
|
|
@@ -3917,13 +4278,19 @@ window.__ModuleLoader__.load({
|
|
|
3917
4278
|
ops: activity.totals.image.ops
|
|
3918
4279
|
}
|
|
3919
4280
|
];
|
|
3920
|
-
const opLine = (op) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-
|
|
4281
|
+
const opLine = (op) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-tool" }, op.tool), op.read !== void 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
4282
|
+
className: "lc-fa-read",
|
|
4283
|
+
title: "est" in op.read ? t("files.readEst") : t("files.readTip", {
|
|
4284
|
+
a: fmt(op.read.start),
|
|
4285
|
+
b: fmt(op.read.start + op.read.count - 1)
|
|
4286
|
+
})
|
|
4287
|
+
}, ("est" in op.read ? "≈" : ">>") + fmt(op.read.count)) : null, 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, {
|
|
3921
4288
|
added: op.added,
|
|
3922
4289
|
removed: op.removed
|
|
3923
4290
|
}) : null, op.err ? /* @__PURE__ */ React.createElement("span", {
|
|
3924
4291
|
className: "lc-br-err-dot",
|
|
3925
4292
|
title: t("node.failed")
|
|
3926
|
-
}) : null);
|
|
4293
|
+
}) : null, /* @__PURE__ */ React.createElement("span", { className: "lc-fa-op-time" }, op.time !== void 0 ? fmtTime(op.time) : "—"));
|
|
3927
4294
|
return /* @__PURE__ */ React.createElement("div", { className: "lc-card lc-col" }, /* @__PURE__ */ React.createElement("div", { className: "lc-card-title" }, /* @__PURE__ */ React.createElement("span", { className: "lc-card-title-text" }, t("files.title")), /* @__PURE__ */ React.createElement("span", { className: "lc-card-sub" }, props.scope)), activity.entries.length === 0 ? /* @__PURE__ */ React.createElement("div", { className: "lc-empty" }, t("files.empty")) : /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "lc-fa-ctl" }, /* @__PURE__ */ React.createElement("div", { className: "lc-gran" }, chips.map((c) => /* @__PURE__ */ React.createElement("button", {
|
|
3928
4295
|
key: c.key,
|
|
3929
4296
|
type: "button",
|
|
@@ -3965,11 +4332,13 @@ window.__ModuleLoader__.load({
|
|
|
3965
4332
|
}
|
|
3966
4333
|
}, t("files.sort." + k))))), shown.length === 0 ? /* @__PURE__ */ React.createElement("div", { className: "lc-empty" }, t("files.noMatch")) : /* @__PURE__ */ React.createElement("div", { className: "lc-fa-list" }, shown.map((e) => {
|
|
3967
4334
|
const open = openPath === e.path;
|
|
3968
|
-
const
|
|
4335
|
+
const display = displayOf(e);
|
|
4336
|
+
const trimmed = display.endsWith("/") ? display.slice(0, -1) : display;
|
|
3969
4337
|
const slash = trimmed.lastIndexOf("/");
|
|
3970
4338
|
const dir = slash >= 0 ? trimmed.slice(0, slash + 1) : "";
|
|
3971
4339
|
const base = slash >= 0 ? trimmed.slice(slash + 1) : trimmed;
|
|
3972
4340
|
const glyph = glyphOf(e.path, e.form);
|
|
4341
|
+
const abs = e.pattern === true ? void 0 : absPathOf(e.path, props.workspace);
|
|
3973
4342
|
return /* @__PURE__ */ React.createElement("div", {
|
|
3974
4343
|
key: e.path,
|
|
3975
4344
|
className: "lc-fa-item" + (open ? " lc-fa-item-on" : "")
|
|
@@ -3980,10 +4349,23 @@ window.__ModuleLoader__.load({
|
|
|
3980
4349
|
onClick: () => {
|
|
3981
4350
|
setOpenPath(open ? null : e.path);
|
|
3982
4351
|
}
|
|
3983
|
-
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }
|
|
4352
|
+
}, /* @__PURE__ */ React.createElement("span", { className: "lc-br-chev" + (open ? " lc-br-chev-on" : "") }), /* @__PURE__ */ React.createElement("span", {
|
|
3984
4353
|
className: "lc-fa-form",
|
|
3985
4354
|
title: t(glyph.tip)
|
|
3986
|
-
}, glyph.
|
|
4355
|
+
}, glyph.color !== void 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
4356
|
+
className: "lc-fa-lang",
|
|
4357
|
+
style: {
|
|
4358
|
+
background: glyph.color,
|
|
4359
|
+
color: glyph.text
|
|
4360
|
+
}
|
|
4361
|
+
}, glyph.glyph) : glyph.glyph), /* @__PURE__ */ React.createElement("span", { className: "lc-fa-path" }, dir !== "" ? /* @__PURE__ */ React.createElement("em", null, dir) : null, abs !== void 0 && props.onOpen !== void 0 ? /* @__PURE__ */ React.createElement("b", {
|
|
4362
|
+
className: "lc-fa-file",
|
|
4363
|
+
title: t("files.open"),
|
|
4364
|
+
onClick: (ev) => {
|
|
4365
|
+
ev.stopPropagation();
|
|
4366
|
+
props.onOpen?.(abs);
|
|
4367
|
+
}
|
|
4368
|
+
}, base) : /* @__PURE__ */ React.createElement("b", null, base)), e.reads > 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
3987
4369
|
className: "lc-fa-badge lc-fa-b-read",
|
|
3988
4370
|
title: t("files.kind.read")
|
|
3989
4371
|
}, /* @__PURE__ */ React.createElement("i", null), fmt(e.reads)) : null, e.writes > 0 ? /* @__PURE__ */ React.createElement("span", {
|
|
@@ -4073,7 +4455,7 @@ window.__ModuleLoader__.load({
|
|
|
4073
4455
|
return function PluginInfo() {
|
|
4074
4456
|
const [latest, setLatest] = React.useState(null);
|
|
4075
4457
|
React.useEffect(() => {
|
|
4076
|
-
if ("0.
|
|
4458
|
+
if ("0.36.0".includes("-dev")) return;
|
|
4077
4459
|
let on = true;
|
|
4078
4460
|
fetchLatestVersion().then((v) => {
|
|
4079
4461
|
if (on && v) setLatest(v);
|
|
@@ -4082,8 +4464,8 @@ window.__ModuleLoader__.load({
|
|
|
4082
4464
|
on = false;
|
|
4083
4465
|
};
|
|
4084
4466
|
}, []);
|
|
4085
|
-
const update = latest !== null && isNewerVersion(latest, "0.
|
|
4086
|
-
const nameValue = ["dsh-context (v0.
|
|
4467
|
+
const update = latest !== null && isNewerVersion(latest, "0.36.0") ? latest : null;
|
|
4468
|
+
const nameValue = ["dsh-context (v0.36.0)"];
|
|
4087
4469
|
if (update) nameValue.push(/* @__PURE__ */ React.createElement("span", {
|
|
4088
4470
|
key: "update",
|
|
4089
4471
|
className: "lc-pi-update"
|
|
@@ -4918,6 +5300,8 @@ window.__ModuleLoader__.load({
|
|
|
4918
5300
|
convOf,
|
|
4919
5301
|
filesBefore
|
|
4920
5302
|
]);
|
|
5303
|
+
const workspace = typeof ctx.get === "function" ? workspaceOf(ctx, typeof sessionId === "string" ? sessionId : void 0) : void 0;
|
|
5304
|
+
const fileOpener = React.useMemo(() => typeof ctx.get === "function" && canOpenPathsOf(ctx) ? openPathVia(ctx) : void 0, [ctx]);
|
|
4921
5305
|
const locateFileOp = React.useCallback((op) => {
|
|
4922
5306
|
const seq = op.parent ?? op.seq;
|
|
4923
5307
|
const step = locateStepOf(requests, seq, op.gone);
|
|
@@ -5064,6 +5448,8 @@ window.__ModuleLoader__.load({
|
|
|
5064
5448
|
}, t("kind." + k))))), /* @__PURE__ */ React.createElement(EventList, { events: shownEvents })), /* @__PURE__ */ React.createElement(FileCard, {
|
|
5065
5449
|
activity: fileActivity,
|
|
5066
5450
|
scope: fileScope,
|
|
5451
|
+
workspace,
|
|
5452
|
+
onOpen: fileOpener,
|
|
5067
5453
|
onLocate: locateFileOp
|
|
5068
5454
|
})), /* @__PURE__ */ React.createElement(AgentGraph, {
|
|
5069
5455
|
sessionId: typeof sessionId === "string" ? sessionId : void 0,
|
|
@@ -5093,7 +5479,7 @@ window.__ModuleLoader__.load({
|
|
|
5093
5479
|
}
|
|
5094
5480
|
//#endregion
|
|
5095
5481
|
//#region \0dsh-global-css:/home/runner/work/dsh-context/dsh-context/src/client/styles.css.mjs
|
|
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}";
|
|
5482
|
+
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,.lc-br-toolctl{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,.lc-br-tool-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,.lc-br-tool-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{opacity:.85;flex:none;justify-content:center;align-items:center;width:20px;height:14px;font-size:11px;display:flex}.lc-fa-lang{border-radius:4px;justify-content:center;align-items:center;min-width:16px;height:13px;padding:0 2px;font-size:8px;font-weight:700;line-height:1;display:inline-flex}.lc-fa-row .lc-br-chev{margin-right:-2px}.lc-fa-path{word-break:break-all;flex:1;min-width:0}.lc-fa-file{cursor:pointer}.lc-fa-file:hover{text-decoration:underline}.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{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;flex:none;margin-left:auto}.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-fa-read{color:var(--dsw-alias-brand-primary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:11px;font-weight:600}.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;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;display:flex}.lc-br-chev:before{content:\"\";border-bottom:1px solid;border-right:1px solid;width:5px;height:5px;transition:transform .12s;transform:rotate(-45deg)}.lc-br-chev-on:before{transform:rotate(45deg)}.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-tool-plugin{color:var(--dsw-alias-brand-primary);background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent);border-color:#0000;border-radius:6px;font-size:12px}.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}";
|
|
5097
5483
|
const tagId = "dsh-context/styles.css";
|
|
5098
5484
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
5099
5485
|
const tag = document.createElement("style");
|