edgeone 1.5.9 → 1.6.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 +26 -26
- package/edgeone-bin/edgeone.js +3 -3
- package/edgeone-dist/cli.js +86879 -2307
- package/edgeone-dist/libs-pages-agent-toolkit/README.md +8 -0
- package/edgeone-dist/libs-pages-agent-toolkit/pages_agent_toolkit-0.1.40-py3-none-any.whl +0 -0
- package/edgeone-dist/libs-pages-blob-python/README.md +38 -0
- package/edgeone-dist/libs-pages-blob-python/pages_blob_python-0.11.0-py3-none-any.whl +0 -0
- package/edgeone-dist/pages/dev/runner-worker.js +86521 -2090
- package/edgeone-dist/pages/observability-python/__init__.py +32 -0
- package/edgeone-dist/pages/observability-python/_compat.py +69 -0
- package/edgeone-dist/pages/observability-python/apm/__init__.py +13 -0
- package/edgeone-dist/pages/observability-python/apm/config.py +85 -0
- package/edgeone-dist/pages/observability-python/apm/llm_semconv.py +53 -0
- package/edgeone-dist/pages/observability-python/apm/metrics_bridge.py +226 -0
- package/edgeone-dist/pages/observability-python/apm/span_exporter.py +384 -0
- package/edgeone-dist/pages/observability-python/bootstrap.py +158 -0
- package/edgeone-dist/pages/observability-python/build.py +119 -0
- package/edgeone-dist/pages/observability-python/context_patches.py +167 -0
- package/edgeone-dist/pages/observability-python/context_propagator.py +78 -0
- package/edgeone-dist/pages/observability-python/registry.json +95 -0
- package/edgeone-dist/pages/observability-python/registry.py +141 -0
- package/edgeone-dist/pages/observability-python/telemetry.py +214 -0
- package/edgeone-dist/pages/observability-python/tracer.py +165 -0
- package/edgeone-dist/pages/templates/agent-python/__init__.py +11 -0
- package/edgeone-dist/pages/templates/agent-python/adapter.py +908 -0
- package/edgeone-dist/pages/templates/agent-python/context.py +689 -0
- package/edgeone-dist/pages/templates/agent-python/local_blob_store.py +172 -0
- package/edgeone-dist/pages/templates/agent-python/memory.py +2301 -0
- package/edgeone-dist/pages/templates/agent-python/runtime.py +839 -0
- package/edgeone-dist/pages/templates/agent-python/store.py +204 -0
- package/edgeone-dist/studio/ui/assets/agent-obs-Dvi4IpEy.js +4 -0
- package/edgeone-dist/studio/ui/assets/agent-obs-qDJCE0TQ.css +1 -0
- package/edgeone-dist/studio/ui/assets/highlight-ClXAL37H.js +3 -0
- package/edgeone-dist/studio/ui/assets/index-Cz5oQnXW.css +1 -0
- package/edgeone-dist/studio/ui/assets/index-DD3d108t.js +1 -0
- package/edgeone-dist/studio/ui/assets/moment-BYRO94Ou.js +10 -0
- package/edgeone-dist/studio/ui/assets/react-dom-ZzBHVjtL.js +24 -0
- package/edgeone-dist/studio/ui/assets/react-hnpCyKql.js +17 -0
- package/edgeone-dist/studio/ui/assets/tea-CADagUwM.css +1 -0
- package/edgeone-dist/studio/ui/assets/tea-Slf_ajmf.js +334 -0
- package/edgeone-dist/studio/ui/favicon.ico +0 -0
- package/edgeone-dist/studio/ui/index.html +31 -0
- package/libs-pages-agent-toolkit/README.md +8 -0
- package/libs-pages-agent-toolkit/pages_agent_toolkit-0.1.40-py3-none-any.whl +0 -0
- package/libs-pages-blob-python/README.md +38 -0
- package/libs-pages-blob-python/pages_blob_python-0.11.0-py3-none-any.whl +0 -0
- package/package.json +33 -7
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# src/pages/builder/templates/agent-python/store.py
|
|
2
|
+
"""Agent store — InMemoryStore for dev, BlobBackedStore for production."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import json
|
|
7
|
+
import time
|
|
8
|
+
from typing import Any, Optional
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
STORE_ENVELOPE_VERSION = 1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# ─── Envelope helpers (match Node store.ts format) ───
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _build_envelope(value: Any, ttl: Optional[int] = None) -> dict:
|
|
18
|
+
"""Wrap a value in the cross-language envelope format."""
|
|
19
|
+
expires_at: Optional[int] = None
|
|
20
|
+
if ttl is not None and ttl > 0:
|
|
21
|
+
expires_at = int(time.time() * 1000) + int(ttl * 1000)
|
|
22
|
+
return {
|
|
23
|
+
"__eo_pages_store_v": STORE_ENVELOPE_VERSION,
|
|
24
|
+
"value": value,
|
|
25
|
+
"expiresAt": expires_at,
|
|
26
|
+
"updatedAt": int(time.time() * 1000),
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _read_envelope(data: Any) -> Optional[dict]:
|
|
31
|
+
"""Extract envelope if data matches the versioned format. Returns None otherwise."""
|
|
32
|
+
if not isinstance(data, dict):
|
|
33
|
+
return None
|
|
34
|
+
if data.get("__eo_pages_store_v") != STORE_ENVELOPE_VERSION:
|
|
35
|
+
return None
|
|
36
|
+
expires_at = data.get("expiresAt")
|
|
37
|
+
if not (expires_at is None or isinstance(expires_at, (int, float))):
|
|
38
|
+
return None
|
|
39
|
+
updated_at = data.get("updatedAt")
|
|
40
|
+
if not isinstance(updated_at, (int, float)):
|
|
41
|
+
return None
|
|
42
|
+
return {
|
|
43
|
+
"__eo_pages_store_v": STORE_ENVELOPE_VERSION,
|
|
44
|
+
"value": data.get("value"),
|
|
45
|
+
"expiresAt": expires_at,
|
|
46
|
+
"updatedAt": updated_at,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _is_expired(expires_at: Optional[int]) -> bool:
|
|
51
|
+
return expires_at is not None and expires_at <= int(time.time() * 1000)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# ─── InMemoryStore (dev / fallback) ───
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class InMemoryStore:
|
|
58
|
+
"""Dict-based store with TTL and envelope semantics for local dev."""
|
|
59
|
+
|
|
60
|
+
def __init__(self) -> None:
|
|
61
|
+
self._data: dict[str, Any] = {}
|
|
62
|
+
self._expiry: dict[str, float] = {}
|
|
63
|
+
|
|
64
|
+
async def get(self, key: str) -> Optional[Any]:
|
|
65
|
+
self._evict(key)
|
|
66
|
+
return self._data.get(key)
|
|
67
|
+
|
|
68
|
+
async def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
69
|
+
self._data[key] = value
|
|
70
|
+
if ttl is not None:
|
|
71
|
+
self._expiry[key] = time.monotonic() + ttl
|
|
72
|
+
elif key in self._expiry:
|
|
73
|
+
del self._expiry[key]
|
|
74
|
+
|
|
75
|
+
async def delete(self, key: str) -> None:
|
|
76
|
+
self._data.pop(key, None)
|
|
77
|
+
self._expiry.pop(key, None)
|
|
78
|
+
|
|
79
|
+
async def list(self, *, prefix: Optional[str] = None) -> dict:
|
|
80
|
+
now = time.monotonic()
|
|
81
|
+
keys = []
|
|
82
|
+
for k in sorted(self._data.keys()):
|
|
83
|
+
exp = self._expiry.get(k)
|
|
84
|
+
if exp is not None and now > exp:
|
|
85
|
+
continue
|
|
86
|
+
if prefix is None or k.startswith(prefix):
|
|
87
|
+
keys.append(k)
|
|
88
|
+
return {"keys": keys, "complete": True}
|
|
89
|
+
|
|
90
|
+
def _evict(self, key: str) -> None:
|
|
91
|
+
exp = self._expiry.get(key)
|
|
92
|
+
if exp is not None and time.monotonic() > exp:
|
|
93
|
+
self._data.pop(key, None)
|
|
94
|
+
self._expiry.pop(key, None)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# ─── BlobBackedStore (production) ───
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class BlobBackedStore:
|
|
101
|
+
"""Persistent store backed by pages-blob, with envelope format matching Node agent."""
|
|
102
|
+
|
|
103
|
+
def __init__(self, blob_store: Any) -> None:
|
|
104
|
+
"""
|
|
105
|
+
Args:
|
|
106
|
+
blob_store: A pages_blob.Store instance from get_store(name).
|
|
107
|
+
"""
|
|
108
|
+
self._blob = blob_store
|
|
109
|
+
|
|
110
|
+
async def get(self, key: str) -> Optional[Any]:
|
|
111
|
+
raw = await self._blob.get(key, type="text")
|
|
112
|
+
if raw is None:
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
parsed = _try_parse_json(raw)
|
|
116
|
+
envelope = _read_envelope(parsed)
|
|
117
|
+
|
|
118
|
+
if envelope:
|
|
119
|
+
if _is_expired(envelope["expiresAt"]):
|
|
120
|
+
await self._blob.delete(key)
|
|
121
|
+
return None
|
|
122
|
+
return envelope["value"]
|
|
123
|
+
|
|
124
|
+
# Backward compat: raw data without envelope
|
|
125
|
+
return parsed
|
|
126
|
+
|
|
127
|
+
async def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
128
|
+
envelope = _build_envelope(value, ttl)
|
|
129
|
+
payload = json.dumps(envelope, ensure_ascii=False)
|
|
130
|
+
await self._blob.set(key, payload)
|
|
131
|
+
|
|
132
|
+
async def delete(self, key: str) -> None:
|
|
133
|
+
await self._blob.delete(key)
|
|
134
|
+
|
|
135
|
+
async def list(self, *, prefix: Optional[str] = None) -> dict:
|
|
136
|
+
result = await self._blob.list(prefix=prefix)
|
|
137
|
+
keys = [blob.key for blob in result.blobs]
|
|
138
|
+
return {"keys": keys, "complete": True}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _try_parse_json(raw: str) -> Any:
|
|
142
|
+
try:
|
|
143
|
+
return json.loads(raw)
|
|
144
|
+
except (json.JSONDecodeError, TypeError, ValueError):
|
|
145
|
+
return raw
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# ─── SyncStoreWrapper (for executor threads) ───
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class SyncStoreWrapper:
|
|
152
|
+
"""同步 wrapper —— 在 run_in_executor 等非 event-loop 线程里调 async store。
|
|
153
|
+
|
|
154
|
+
典型场景:CrewAI 的 crew.kickoff() 是同步调用,在 executor 线程里跑,
|
|
155
|
+
无法 await。通过 asyncio.run_coroutine_threadsafe 把协程提交回主 event loop。
|
|
156
|
+
|
|
157
|
+
用法(handler 内)::
|
|
158
|
+
|
|
159
|
+
async def handler(ctx):
|
|
160
|
+
import asyncio
|
|
161
|
+
|
|
162
|
+
def sync_work():
|
|
163
|
+
# 这里跑在 executor 线程,不能 await
|
|
164
|
+
cached = ctx.store_sync.get("key")
|
|
165
|
+
ctx.store_sync.set("key", value, ttl=3600)
|
|
166
|
+
return cached
|
|
167
|
+
|
|
168
|
+
result = await asyncio.get_running_loop().run_in_executor(None, sync_work)
|
|
169
|
+
|
|
170
|
+
⚠️ 不要在 async handler 顶层直接用 store_sync —— 会死锁。
|
|
171
|
+
async 上下文直接 ``await ctx.store.get(...)`` 即可。
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
def __init__(self, async_store: Any, loop: asyncio.AbstractEventLoop, timeout: float = 30.0) -> None:
|
|
175
|
+
self._store = async_store
|
|
176
|
+
self._loop = loop
|
|
177
|
+
self._timeout = timeout
|
|
178
|
+
|
|
179
|
+
def _run(self, coro: Any) -> Any:
|
|
180
|
+
# 死锁保护:如果当前线程就是 event loop 线程,
|
|
181
|
+
# run_coroutine_threadsafe + future.result() 会永远阻塞。
|
|
182
|
+
try:
|
|
183
|
+
running = asyncio.get_running_loop()
|
|
184
|
+
except RuntimeError:
|
|
185
|
+
running = None
|
|
186
|
+
if running is self._loop:
|
|
187
|
+
raise RuntimeError(
|
|
188
|
+
"SyncStoreWrapper._run() 被在 event loop 线程调用,这会导致死锁。"
|
|
189
|
+
"请在 async 上下文里直接 await store 的异步方法。"
|
|
190
|
+
)
|
|
191
|
+
future = asyncio.run_coroutine_threadsafe(coro, self._loop)
|
|
192
|
+
return future.result(timeout=self._timeout)
|
|
193
|
+
|
|
194
|
+
def get(self, key: str) -> Optional[Any]:
|
|
195
|
+
return self._run(self._store.get(key))
|
|
196
|
+
|
|
197
|
+
def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
198
|
+
return self._run(self._store.set(key, value, ttl=ttl))
|
|
199
|
+
|
|
200
|
+
def delete(self, key: str) -> None:
|
|
201
|
+
return self._run(self._store.delete(key))
|
|
202
|
+
|
|
203
|
+
def list(self, *, prefix: Optional[str] = None) -> dict:
|
|
204
|
+
return self._run(self._store.list(prefix=prefix))
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{r as nt}from"./react-hnpCyKql.js";import{r as rt,a as lt,l as ut,b as st}from"./tea-Slf_ajmf.js";import{r as ot}from"./moment-BYRO94Ou.js";import{c as it,j as ct}from"./highlight-ClXAL37H.js";var f=nt,k=lt,i=rt,$e=ut,Ke=st,dt=ot,mt=it,ft=ct;function de(e){return e&&e.__esModule?e:{default:e}}var a=de(f),q=de(dt),Ve=de(mt),gt=de(ft);function G(e){return String(e).padStart(2,"0")}function Te(e){const t=new Date(e);return`${G(t.getMonth()+1)}-${G(t.getDate())} ${G(t.getHours())}:${G(t.getMinutes())}:${G(t.getSeconds())}`}function Pe(e){const t=typeof e=="number"?e:Number(String(e).trim());return Number.isFinite(t)?t>=1e12?Te(t):t>=1e9?Te(t*1e3):String(e):String(e)}function ht({dataSource:e,color:t="#5B9DFF",...n}){const r=e.map(l=>Pe(l.Name)),u=[{data:e.map(l=>l.Data)}];return a.default.createElement(Ke.CoreLine,{...n,color:[t],grid:{show:!0,left:0,right:0,top:16,bottom:0},xAxis:{data:r,axisLine:{show:!1,lineStyle:{}},axisTick:{show:!1},axisLabel:{color:"#9CA3AF",margin:10},splitLine:{show:!1}},yAxis:{axisLine:{show:!1,lineStyle:{}},axisTick:{show:!1},axisLabel:{color:"#9CA3AF",formatter:l=>`${l} `},splitLine:{show:!0}},series:u})}function pt({dataSource:e,color:t,...n}){const r=Array.from(new Set(e.map(s=>Pe(s.Name)))),l=Array.from(new Set(e.map(s=>s.Type))).map(s=>({name:s,data:e.filter(o=>o.Type===s).map(o=>o.Data)}));return a.default.createElement(Ke.CompareLine,{...n,color:t,grid:{show:!0,left:0,right:0,top:16,bottom:0},xAxis:{data:r,axisLine:{show:!1,lineStyle:{}},axisTick:{show:!1},axisLabel:{color:"#9CA3AF",margin:10},splitLine:{show:!1}},yAxis:{axisLine:{show:!1,lineStyle:{}},axisTick:{show:!1},axisLabel:{color:"#9CA3AF",formatter:s=>`${s} `},splitLine:{show:!0}},series:l})}function je({children:e,loading:t}){return a.default.createElement("div",{className:"agent-obs-loading"},a.default.createElement("div",{className:"agent-obs-loading-content"},e),a.default.createElement("div",{className:`agent-obs-loading-mask${t?"":" agent-obs-loading-mask--hidden"}`},a.default.createElement(k.Icon,{type:"loading"})))}function Et(){return a.default.createElement("svg",{width:"550",height:"181",viewBox:"0 0 550 181",fill:"none",xmlns:"http://www.w3.org/2000/svg"},a.default.createElement("line",{y1:"90.5",x2:"550",y2:"90.5",stroke:"#F0F0F0"}),a.default.createElement("line",{y1:"180.5",x2:"550",y2:"180.5",stroke:"#F0F0F0"}),a.default.createElement("line",{y1:"0.5",x2:"550",y2:"0.5",stroke:"#F0F0F0"}))}function vt(){return a.default.createElement("div",{className:"agent-obs-empty"},a.default.createElement("div",{className:"agent-obs-empty-bg"},a.default.createElement(Et,null)),a.default.createElement("div",{className:"agent-obs-empty-text"},i.t("暂无数据")))}var Fe=260;function bt({title:e,unit:t,data:n,jumpTo:r,loading:u,isMultiLine:l,openInNewTab:s}){const o=!u&&(!n||n.length===0),c=a.default.createElement("div",{className:"agent-obs-card-header"},a.default.createElement("div",{className:"agent-obs-card-titlebox"},a.default.createElement("div",{className:"agent-obs-card-title"},e),a.default.createElement("div",{className:"agent-obs-card-unit"},t??" ")),r&&a.default.createElement("div",{className:"agent-obs-card-jump"},a.default.createElement($e.ChevronRightIcon,{size:24}))),m=r?a.default.createElement("a",{className:"agent-obs-card-link",href:r,target:s?"_blank":void 0,rel:s?"noopener noreferrer":void 0},c):c,d=()=>{if(!n||n.length===0)return a.default.createElement("div",{className:"agent-obs-card-empty",style:{height:Fe}},o?a.default.createElement(vt,null):null);const g=l?pt:ht;return a.default.createElement(g,{height:Fe,smooth:!0,size:2,dataSource:n})};return a.default.createElement(k.Card,{className:"agent-obs-card",bordered:!1},a.default.createElement(k.Card.Body,{className:"agent-obs-card-body"},m,a.default.createElement("div",{className:"agent-obs-card-chart"},a.default.createElement(je,{loading:u},d()))))}var qe={agent_call:"Agent 调用",model_call:"模型调用",model_error_rate:"模型调用错误率",model_avg_latency:"模型调用平均耗时",token_total:"Token 总消耗",avg_token_per_model:"平均 Token/模型调用",agent_call_chart:"Agent 调用",model_call_chart:"模型调用",model_error_rate_chart:"模型调用错误率",model_avg_latency_chart:"模型调用平均耗时",token_total_chart:"Token 总消耗",avg_token_per_model_chart:"平均 Token/模型调用"},Ae={agent_call:"次",model_call:"次",model_error_rate:"%",model_avg_latency:"s",agent_call_chart:"次",model_call_chart:"次",model_error_rate_chart:"%",model_avg_latency_chart:"s"};function ye(e){if(e)return i.t(e)}function ze(e,t){return ye(qe[e]||t)||e}function Ce(e,t){return e in qe?ye(Ae[e]):ye(Ae[e]||t)}function kt(e,t){if(e===0)return"flat";const n=e>0;return((t??"higherIsBetter")==="higherIsBetter"?n:!n)?"up":"down"}function Q(e){const t=typeof e=="number"?e:Number(e.trim());if(!Number.isFinite(t))return String(e);const n=t.toFixed(2).replace(/\.00$/,"").replace(/(\.\d)0$/,"$1");return n==="-0"?"0":n}var _t=new Set(["token_total","avg_token_per_model"]);function yt(e){const t=typeof e.Value=="number"?e.Value:Number(e.Value.trim());return Number.isFinite(t)&&t===0?{valueText:"-"}:!_t.has(e.Key)||!Number.isFinite(t)?{valueText:Q(e.Value),unit:Ce(e.Key,e.Unit)}:t>=1e8?{valueText:Q(t/1e8),unit:i.t("亿")}:t>=1e4?{valueText:Q(t/1e4),unit:i.t("万")}:{valueText:Q(e.Value),unit:Ce(e.Key,e.Unit)}}function Ct(){return[{Key:"agent_call",Label:i.t("Agent 调用"),Value:"-"},{Key:"model_call",Label:i.t("模型调用"),Value:"-"},{Key:"model_error_rate",Label:i.t("模型调用错误率"),Value:"-",Unit:"%"},{Key:"model_avg_latency",Label:i.t("模型调用平均耗时"),Value:"-",Unit:"s"},{Key:"token_total",Label:i.t("Token 总消耗"),Value:"-"},{Key:"avg_token_per_model",Label:i.t("平均 Token/模型调用"),Value:"-"}]}var wt=new Set(["model_error_rate","model_avg_latency"]);function Nt({item:e}){const t=typeof e.Yoy=="number"&&!wt.has(e.Key),{valueText:n,unit:r}=yt(e);return a.default.createElement("div",{className:"agent-obs-overview-cell"},a.default.createElement("div",{className:"agent-obs-overview-label"},ze(e.Key,e.Label)),a.default.createElement("div",{className:"agent-obs-overview-value-row"},a.default.createElement("span",{className:"agent-obs-overview-value"},n),r&&a.default.createElement("span",{className:"agent-obs-overview-unit"},r)),t&&a.default.createElement("div",{className:"agent-obs-overview-delta"},a.default.createElement("span",{className:"agent-obs-overview-delta-label"},i.t("日同比")),a.default.createElement("span",{className:`agent-obs-overview-delta-value agent-obs-overview-delta-value--${kt(e.Yoy,e.DeltaSemantic)}`},e.Yoy>0?"+":"",Q(e.Yoy),"%")))}function xt({items:e,title:t,loading:n}){const u=!!e&&e.length>0?e:Ct();if(u.length===0)return null;const l=!!n;return a.default.createElement(k.Card,{className:"agent-obs-overview",bordered:!1},a.default.createElement(k.Card.Body,null,a.default.createElement("div",{className:"agent-obs-overview-title"},t?i.t(t):i.t("用量概览")),a.default.createElement("div",{className:l?"agent-obs-overview-grid agent-obs-overview-grid--loading":"agent-obs-overview-grid"},u.map(s=>a.default.createElement(Nt,{key:s.Key,item:s})),l&&a.default.createElement("div",{className:"agent-obs-overview-loading-mask"},a.default.createElement(k.Icon,{type:"loading"})))))}function Ue(e){const[t,n]=f.useState(!1),r=f.useCallback(()=>{t||(n(!0),e().catch(()=>{}).then(()=>n(!1)))},[t,e]);return{refreshing:t,trigger:r}}var me=7;function Tt(){return[{value:"1hour",text:i.t("近1小时")},{value:"6hour",text:i.t("近6小时")},{value:"24hour",text:i.t("近24小时")},{value:"3day",text:i.t("近3天")},{value:"7day",text:i.t("近7天")}]}function Ft(){return[{value:"30min",text:i.t("近30分钟")},{value:"1hour",text:i.t("近1小时")},{value:"6hour",text:i.t("近6小时")},{value:"24hour",text:i.t("近24小时")},{value:"3day",text:i.t("近3天")},{value:"7day",text:i.t("近7天")}]}function At(e){const t=q.default();return{"1hour":[t.clone().subtract(1,"hour"),t.clone()],"6hour":[t.clone().subtract(6,"hours"),t.clone()],"24hour":[t.clone().subtract(24,"hours"),t.clone()],"3day":[t.clone().subtract(3,"days"),t.clone()],"7day":[t.clone().subtract(me,"days"),t.clone()]}[e]||null}function Mt(e){const t=q.default();return{"30min":[t.clone().subtract(30,"minutes"),t.clone()],"1hour":[t.clone().subtract(1,"hour"),t.clone()],"6hour":[t.clone().subtract(6,"hours"),t.clone()],"24hour":[t.clone().subtract(24,"hours"),t.clone()],"3day":[t.clone().subtract(3,"days"),t.clone()],"7day":[t.clone().subtract(me,"days"),t.clone()]}[e]||null}function Ye(e){const t=q.default(),n=t.clone().subtract(me,"days").startOf("day");return!(e.isAfter(t,"day")||e.isBefore(n,"day"))}function We(e,t){const n=q.default(),r=n.clone().subtract(me,"days"),u=n.format("YYYY-MM-DD"),l=r.format("YYYY-MM-DD"),s=e==null?void 0:e[t==="start"?0:1],o=s?s.format("YYYY-MM-DD"):u;return{disabledHours:()=>{const c=[];if(o===u)for(let m=n.hour()+1;m<=23;m++)c.push(m);if(o===l)for(let m=0;m<r.hour();m++)c.push(m);return c},disabledMinutes:c=>{const m=[];if(o===u&&c===n.hour())for(let d=n.minute()+1;d<=59;d++)m.push(d);if(o===l&&c===r.hour())for(let d=0;d<r.minute();d++)m.push(d);return m},disabledSeconds:(c,m)=>{const d=[];if(o===u&&c===n.hour()&&m===n.minute())for(let g=n.second()+1;g<=59;g++)d.push(g);if(o===l&&c===r.hour()&&m===r.minute())for(let g=0;g<r.second();g++)d.push(g);return d}}}var{RangePicker:Lt}=k.DatePicker,St=()=>e=>{const t=q.default();return{"15min":[t.clone().subtract(15,"minutes"),t.clone()],"1hour":[t.clone().subtract(1,"hour"),t.clone()],"6hour":[t.clone().subtract(6,"hours"),t.clone()],"12hour":[t.clone().subtract(12,"hours"),t.clone()],"24hour":[t.clone().subtract(24,"hours"),t.clone()]}[e]||null};function Rt(){return[{value:"15min",text:i.t("近15分钟")},{value:"1hour",text:i.t("近1小时")},{value:"6hour",text:i.t("近6小时")},{value:"12hour",text:i.t("近12小时")},{value:"24hour",text:i.t("近24小时")}]}var It=({onChange:e,defaultValue:t=null,defaultSegmentValue:n="15min",quickOptions:r=Rt(),rangeGenerator:u=St(),className:l,style:s,selectStyle:o,selectClassName:c,rangePickerStyle:m,rangePickerClassName:d,disabledDate:g,disabledTime:h,showTime:v={format:"HH:mm:ss",minuteStep:1,secondStep:1},placeholder:y=[i.t("开始时间"),i.t("结束时间")],selectPlaceholder:C=i.t("请选择时间范围")})=>{const[w,x]=f.useState(n),[A,L]=f.useState(()=>!t&&n?u(n):t);function D(F){const[S,V]=F;return r.reduce((W,P)=>{const p=u(P.value);if(p){const N=V.diff(S,"minutes"),b=p[1].diff(p[0],"minutes");if(Math.abs(N-b)<=1&&V.diff(q.default(),"minutes")<=1)return P.value}return W},null)}const M=F=>{x(F);const S=u(F);S&&(L(S),e==null||e(S,F))},K=F=>{L(F);const S=D(F);x(S),e==null||e(F,S)};return a.default.createElement("div",{className:l,style:s},a.default.createElement(k.Select,{appearance:"button",options:r,value:w||void 0,onChange:M,placeholder:C,className:c,style:o,listWidth:130}),a.default.createElement(Lt,{showTime:v,value:A||void 0,onChange:K,disabledDate:g,disabledTime:h,placeholder:y,className:d,style:m}))},Ge=It;function He(){return[{value:"all",text:i.t("全部环境")},{value:"production",text:i.t("生产环境")},{value:"preview",text:i.t("预览环境")}]}function Dt({selectedEnvironment:e,selectedTimeRange:t,customRange:n,onEnvironmentChange:r,onTimeChange:u,refreshFunction:l}){const s=f.useMemo(He,[]),o=f.useMemo(Ft,[]),{refreshing:c,trigger:m}=Ue(l),d=`${t||"custom"}-${n?n[0].valueOf():"null"}`;return a.default.createElement(k.Card,{className:"agent-obs-filter"},a.default.createElement(k.Card.Body,{className:"agent-obs-filter-body"},a.default.createElement(k.Space,{wrap:!0},a.default.createElement(k.Select,{appearance:"button",options:s,value:e,onChange:g=>r(g),listWidth:130}),a.default.createElement(Ge,{key:d,defaultSegmentValue:t,defaultValue:n,quickOptions:o,rangeGenerator:Mt,disabledDate:Ye,disabledTime:We,onChange:u,className:"quick-date-picker",selectClassName:"time-range-select",selectStyle:{marginRight:"-1px"},rangePickerClassName:"time-range-picker",showTime:{format:"HH:mm:ss",minuteStep:1,secondStep:1},placeholder:[i.t("开始时间"),i.t("结束时间")],selectPlaceholder:i.t("请选择时间范围")}),a.default.createElement(k.Button,{icon:"refresh",className:`agent-obs-filter-refresh${c?" agent-obs-filter-refresh--rotating":""}`,onClick:m}),a.default.createElement(k.Bubble,{content:i.t("数据延迟 < 10min")},a.default.createElement("span",{className:"agent-obs-filter-tip"},a.default.createElement($e.ErrorCircleIcon,null))))))}function Ot(e,t){const n=f.useRef(e);f.useEffect(()=>{const r=n.current;Object.keys(e).some(l=>r[l]!==e[l])&&(n.current=e,t==null||t(e))},[e])}var Bt={environment:"all",timeRange:"24hour",customRange:null};function $t({overview:e,charts:t,loading:n,defaultFilter:r,onFilterChange:u,onRefresh:l,columns:s=2}){const[o,c]=f.useState({...Bt,...r});Ot(o,u);const m=g=>c(h=>({...h,...g})),d=async()=>{l?await l(o):u==null||u(o)};return a.default.createElement("div",{className:"agent-obs"},a.default.createElement(Dt,{selectedEnvironment:o.environment,selectedTimeRange:o.timeRange,customRange:o.customRange,onEnvironmentChange:g=>m({environment:g}),onTimeChange:(g,h)=>{m(h?{timeRange:h,customRange:null}:{customRange:g,timeRange:null})},refreshFunction:d}),a.default.createElement(xt,{items:e,loading:n}),a.default.createElement(Kt,{charts:t??[],columns:s,loading:n}))}function Kt({charts:e,columns:t,loading:n}){const r=Math.max(1,Math.floor(24/t)),u=e.length>0?e:Vt(),l=Pt(u,t);return a.default.createElement(a.default.Fragment,null,l.map((s,o)=>a.default.createElement(k.Row,{key:o},s.map((c,m)=>a.default.createElement(k.Col,{key:c.Key,span:r,style:m%2===0?{paddingLeft:0}:{paddingRight:0}},a.default.createElement(bt,{title:ze(c.Key,c.Title),unit:Ce(c.Key,c.Unit),data:c.Series,isMultiLine:c.IsMultiLine,jumpTo:c.jumpTo,openInNewTab:c.openInNewTab,loading:n}))))))}function Vt(){return[{Key:"agent_call_chart",Title:i.t("Agent 调用"),Unit:i.t("次"),Series:[]},{Key:"model_call_chart",Title:i.t("模型调用"),Unit:i.t("次"),Series:[]},{Key:"model_error_rate_chart",Title:i.t("模型调用错误率"),Unit:"%",Series:[]},{Key:"model_avg_latency_chart",Title:i.t("模型调用平均耗时"),Unit:"s",Series:[]},{Key:"token_total_chart",Title:i.t("Token 总消耗"),Series:[]},{Key:"avg_token_per_model_chart",Title:i.t("平均 Token/模型调用"),Series:[]}]}function Pt(e,t){if(t<=0)return[e];const n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function jt({environment:e,timeRange:t,customRange:n,keyword:r,onEnvironmentChange:u,onTimeChange:l,onKeywordChange:s,onSearchSubmit:o,refreshFunction:c}){const m=f.useMemo(He,[]),d=f.useMemo(Tt,[]),{refreshing:g,trigger:h}=Ue(c),v=`${t||"custom"}-${n?n[0].valueOf():"null"}`;return a.default.createElement(k.Card,{className:"filter-card agent-obs-traces-filter"},a.default.createElement(k.Card.Body,null,a.default.createElement(k.Space,{wrap:!0},a.default.createElement(k.Select,{appearance:"button",options:m,value:e,onChange:y=>u(y),className:"log-filter-select",listWidth:130}),a.default.createElement(Ge,{key:v,defaultSegmentValue:t,defaultValue:n,quickOptions:d,rangeGenerator:At,disabledDate:Ye,disabledTime:We,onChange:l,className:"quick-date-picker",selectClassName:"time-range-select",selectStyle:{marginRight:"-1px"},rangePickerClassName:"time-range-picker",showTime:{format:"HH:mm:ss",minuteStep:1,secondStep:1},placeholder:[i.t("开始时间"),i.t("结束时间")],selectPlaceholder:i.t("请选择时间范围")}),a.default.createElement(k.SearchBox,{className:"traces-filter-search",placeholder:i.t("可根据 run-id 和 conversation-id 搜索"),value:r,onChange:y=>s(y),onSearch:y=>o(y||""),onPressEnter:()=>o(r),onClear:()=>{s(""),o("")}}),a.default.createElement(k.Button,{type:"primary",onClick:h,loading:g},i.t("刷新")))))}var{filterable:qt,stylize:zt}=k.Table.addons,ie="-";function Ut(e){return{all:"",production:i.t("生产"),preview:i.t("预览"),dev:i.t("开发"),development:i.t("开发")}[e]||e}function we(e){return{success:i.t("成功"),failed:i.t("失败")}[e]}function Yt(){return[{value:"success",text:we("success")},{value:"failed",text:we("failed")}]}var Wt={environment:"all",timeRange:"1hour",customRange:null,statuses:[],keyword:"",pageIndex:1,pageSize:10};function Gt(e){return e.HasError?"failed":"success"}function Ht(e){return e??ie}function Xt(e){return e?q.default(e).format("YYYY-MM-DD HH:mm:ss.SSS"):ie}function Qt({rows:e,pagination:t,loading:n,onRowClick:r,onQueryChange:u,defaultQuery:l}){const s=f.useMemo(Yt,[]),[o,c]=f.useState({...Wt,...l}),m=(h,v=!0)=>{c(y=>{const C={...y,...h,...v?{pageIndex:1}:{}};return u==null||u(C),C})},d=f.useMemo(()=>[{key:"traceId",header:i.t("TraceId (run-id)"),width:260,render:h=>a.default.createElement("a",{className:"agent-obs-traces-trace-id",onClick:v=>{v.preventDefault(),r==null||r(h)},href:"#"},h.TraceId)},{key:"env",header:i.t("环境"),width:80,render:h=>{const v=h.Env||"all";if(v==="all")return ie;const y=String(v).replace(/[^a-zA-Z0-9_-]/g,"-");return a.default.createElement(k.Badge,{className:`agent-obs-traces-env agent-obs-traces-env--${y}`},Ut(v))}},{key:"status",header:i.t("状态"),width:100,render:h=>{const v=Gt(h);return a.default.createElement("span",{className:`agent-obs-traces-status agent-obs-traces-status--${v}`},we(v))}},{key:"totalTokens",header:i.t("Total Tokens"),width:140,render:h=>Ht(h.TotalToken)},{key:"durationMs",header:i.t("响应时间(秒)"),width:160,render:h=>h.DurationMs!=null?(Math.ceil(h.DurationMs/100)/10).toFixed(1):ie},{key:"startTime",header:i.t("开始时间"),width:200,render:h=>Xt(h.StartTimeMs)}],[r]),g=()=>{if(n&&e.length===0)return a.default.createElement(k.StatusTip,{status:"loading"});if(!n&&e.length===0)return a.default.createElement(k.StatusTip,{status:"empty"})};return a.default.createElement("div",{className:"agent-obs-traces"},a.default.createElement(k.Card,null,a.default.createElement("div",{className:"agent-obs-traces-wrapper"},a.default.createElement(je,{loading:n&&e.length>0},a.default.createElement(k.Table,{className:"agent-obs-traces-table",records:e,recordKey:h=>h.TraceId,columns:d,bordered:!1,topTip:g(),bottomTip:e.length>0?a.default.createElement(k.Pagination,{recordCount:t.total,pageSizeOptions:[10,20,30,50,100],pageSize:t.pageSize,pageIndex:t.pageIndex,stateTextVisible:!0,pageSizeVisible:!0,pageIndexVisible:!0,jumpVisible:!0,endJumpVisible:!0,disabled:n,onPagingChange:({pageIndex:h,pageSize:v})=>{m({pageIndex:h,pageSize:v},!1)}}):void 0,addons:[qt({type:"multiple",column:"status",value:o.statuses,onChange:h=>m({statuses:h}),all:{value:"__all__",text:i.t("全部")},options:s}),zt({bodyClassName:"agent-obs-traces-table-body",bodyStyle:{borderBottom:"none"}})]})))))}var Zt={environment:"all",timeRange:"24hour",customRange:null,keyword:""};function Jt({rows:e,pagination:t,loading:n,onRowClick:r,defaultFilter:u,onQueryChange:l,onRefresh:s}){const[o,c]=f.useState({...Zt,...u}),[m,d]=f.useState(o.keyword),g=f.useRef({environment:o.environment,timeRange:o.timeRange,customRange:o.customRange,statuses:[],keyword:o.keyword,pageIndex:1,pageSize:t.pageSize}),h=()=>{l==null||l({...g.current,environment:o.environment,timeRange:o.timeRange,customRange:o.customRange,keyword:o.keyword})},v=f.useRef(o);f.useEffect(()=>{const w=v.current;Object.keys(o).some(A=>w[A]!==o[A])&&(v.current=o,g.current={...g.current,pageIndex:1},h())},[o]);const y=w=>c(x=>({...x,...w})),C=async()=>{const w=(m||"").trim();w!==m&&d(w);const x={...g.current,environment:o.environment,timeRange:o.timeRange,customRange:o.customRange,keyword:w,pageIndex:w!==o.keyword?1:g.current.pageIndex};if(w!==o.keyword){const A={...o,keyword:w};v.current=A,g.current={...g.current,pageIndex:1},c(A)}s?await s(x):l==null||l(x)};return a.default.createElement("div",{className:"agent-obs"},a.default.createElement(jt,{environment:o.environment,timeRange:o.timeRange,customRange:o.customRange,keyword:m,onEnvironmentChange:w=>y({environment:w}),onTimeChange:(w,x)=>{y(x?{timeRange:x,customRange:null}:{customRange:w,timeRange:null})},onKeywordChange:d,onSearchSubmit:w=>{const x=(w||"").trim();d(x),x!==o.keyword&&y({keyword:x})},refreshFunction:C}),a.default.createElement(Qt,{rows:e,pagination:t,loading:n,onRowClick:r,defaultQuery:g.current,onQueryChange:w=>{g.current=w,h()}}))}var ea=["AGENT","CHAIN","LLM","TOOL","RETRIEVER","RERANKER","EMBEDDING","EVALUATOR","GUARDRAIL","PROMPT","MANUAL","INTERNAL"];function te(e){if(!e)return null;const t=e.trim().toUpperCase();return t==="GENERATION"?"LLM":ea.includes(t)?t:null}var Z="langfuse.";function B(e,t){var n;const r=`${Z}${t}`,u=(n=e.Tags)==null?void 0:n.find(l=>l.Key===r);return u==null?void 0:u.Value}function Y(e,t){for(const n of t){const r=B(e,n);if(r!==void 0&&r!=="")return r}}function ta(e,t){var n;const r=(n=e.Tags)==null?void 0:n.find(u=>u.Key===t);return r==null?void 0:r.Value}function se(e,t){const n=ta(e,t);return n!==void 0&&n!==""?n:B(e,t)}function aa(e,t){for(const n of t){const r=se(e,n);if(r!==void 0&&r!=="")return r}}function Xe(e){const t=te(B(e,"openinference.span.kind"));if(t)return t;const n=te(B(e,"gen_ai.span.kind"));if(n)return n;const r=B(e,"span.kind"),u=te(r);if(u)return u;for(const s of e.Tags||[]){const o=te(s.Value);if(o)return o}const l=(e.OperationName||"").toLowerCase();return l.includes("chat")||l.includes("llm")||l.includes("openai")?"LLM":l.includes("tool")||l.includes("get_")?"TOOL":l.includes("retriev")?"RETRIEVER":l.includes("embed")?"EMBEDDING":l.includes("prompt")?"PROMPT":l.includes("agent")?"AGENT":"UNKNOWN"}function na(e){const t=ge(e,"openinference.span.kind")||ge(e,"gen_ai.span.kind")||ge(e,"span.kind");return t||Xe(e)}function ge(e,t){const n=B(e,t);if(typeof n!="string")return;const r=n.trim();return r||void 0}function Qe(e){const t=se(e,"error");if(t)return t.toLowerCase()==="true";const n=se(e,"statusCode")||se(e,"otel.status_code");return n?n==="2"||n.toUpperCase()==="ERROR":!1}function ra(e){return aa(e,["exception.message","exception.type","status_message","otel.status_description","error.message"])}function Ze(e){const t=e.StartTime/1e3,n=e.Duration/1e3,r=t+n,u=m=>{if(m===void 0||m==="")return;const d=Number(m);return Number.isFinite(d)?d:void 0},l=u(Y(e,["llm.token_count.prompt","gen_ai.usage.input_tokens","gen_ai.usage.prompt_tokens"])),s=u(Y(e,["llm.token_count.completion","gen_ai.usage.completion_tokens","gen_ai.usage.output_tokens"])),o=u(Y(e,["llm.token_count.total","gen_ai.usage.total_tokens"])),c=o!==void 0?o:l!==void 0||s!==void 0?(l??0)+(s??0):void 0;return{startMs:t,endMs:r,durationMs:n,model:Y(e,["llm.model_name","gen_ai.response.model","gen_ai.request.model"]),inputTokens:l,outputTokens:s,totalTokens:c,cost:u(B(e,"llm.cost"))}}function Me(e,t){const n=e.get(t);if(n)return n;const r={toolCalls:new Map};return e.set(t,r),r}function la(e,t){const n=e.toolCalls.get(t);if(n)return n;const r={};return e.toolCalls.set(t,r),r}function ua(e){const t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}}function Le(e,t){const n=`${Z}${t}`,r=new Map;(e.Tags||[]).forEach(l=>{if(!l.Key.startsWith(`${n}.`)||!l.Value)return;const s=l.Key.slice(n.length+1),o=s.match(/^(\d+)\.message\.(role|content)$/);if(o){const m=Me(r,Number(o[1]));o[2]==="role"&&(m.role=l.Value),o[2]==="content"&&(m.content=l.Value);return}const c=s.match(/^(\d+)\.message\.tool_calls\.(\d+)\.tool_call\.function\.(name|arguments)$/);if(c){const m=Me(r,Number(c[1])),d=la(m,Number(c[2]));c[3]==="name"&&(d.name=l.Value),c[3]==="arguments"&&(d.arguments=l.Value)}});const u=[];return Array.from(r.entries()).sort(([l],[s])=>l-s).forEach(([,l])=>{l.content&&u.push(l.role?`${l.role}: ${l.content}`:l.content),Array.from(l.toolCalls.entries()).sort(([s],[o])=>s-o).forEach(([s,o])=>{const c=[o.name?`Tool: ${o.name}`:`Tool #${s+1}`];o.arguments&&c.push(`Arguments: ${ua(o.arguments)}`),u.push(c.join(`
|
|
2
|
+
`))})}),u.length?u.join(`
|
|
3
|
+
|
|
4
|
+
`):void 0}function sa(e){const t=Le(e,"llm.input_messages"),n=Le(e,"llm.output_messages");return{input:t||Y(e,["input.value","gen_ai.prompt"]),output:n||Y(e,["output.value","gen_ai.completion"])}}function oa(e){const t=new Set(["input.value","output.value","input.mime_type","output.mime_type","tapm.relocated","tapm.source_pipeline","topic.id","index.app.id","time_bucket","peer.service","component","status_code_xx","traceID","origin.operation","service.instance"]),n=["llm.input_messages.","llm.output_messages."],r=new Set(["error","error.message","error.type","error.stack","exception.message","exception.type","exception.stacktrace","statusCode","otel.status_code","otel.status_description","status_message"]),u=[],l=new Set;return(e.Tags||[]).forEach(s=>{if(!s.Key||!s.Key.startsWith(Z))return;const o=s.Key.slice(Z.length);!o||t.has(o)||n.some(c=>o.startsWith(c))||l.has(o)||(l.add(o),u.push({Key:o,Value:s.Value}))}),(e.Tags||[]).forEach(s=>{!s.Key||s.Key.startsWith(Z)||r.has(s.Key)&&(l.has(s.Key)||(l.add(s.Key),u.push({Key:s.Key,Value:s.Value})))}),u}function ia(e){const n=(e.References||[]).find(r=>r.RefType==="CHILD_OF"&&r.SpanId);return(n==null?void 0:n.SpanId)||null}function ca(e){const t=new Map;for(const u of e){const l=Ze(u);t.set(u.SpanId,{span:u,spanId:u.SpanId,parentId:ia(u),kind:Xe(u),children:[],startMs:l.startMs,endMs:l.endMs,durationMs:l.durationMs,hasError:Qe(u)})}const n=[];for(const u of t.values())u.parentId&&t.has(u.parentId)?t.get(u.parentId).children.push(u):n.push(u);const r=u=>{u.sort((l,s)=>l.startMs-s.startMs),u.forEach(l=>r(l.children))};return r(n),n}var O=168,ce=56,Se=56,ae=28,he=48,Re=40;function da(e){const t=[],n=[],r=new Map,u=d=>{if(r.has(d.spanId))return r.get(d.spanId);if(d.children.length===0)return r.set(d.spanId,O),O;const g=d.children.reduce((v,y,C)=>v+u(y)+(C>0?ae:0),0),h=Math.max(O,g);return r.set(d.spanId,h),h},l=(d,g,h)=>{const v=u(d),C=h+v/2-O/2,w=Re+g*(ce+Se);t.push({id:d.spanId,x:C,y:w,level:g,node:d});let x=h+(v-d.children.reduce((L,D,M)=>L+u(D)+(M>0?ae:0),0))/2,A=Number.NEGATIVE_INFINITY;d.children.forEach(L=>{const D=u(L),M=L.startMs<A?"parallel":"seq";l(L,g+1,x),n.push({from:d.spanId,to:L.spanId,label:M,dashed:M==="parallel"||L.kind==="LLM"}),A=Math.max(A,L.endMs),x+=D+ae})};let s=he;e.forEach(d=>{const g=u(d);l(d,0,s),s+=g+ae*2});const o=Math.max(...t.map(d=>d.x+O),he*2)+he,c=Math.max(...t.map(d=>d.level),0),m=Re*2+(c+1)*ce+c*Se;return{nodes:t,edges:n,width:o,height:m}}function fe(e){return!Number.isFinite(e)||e<0?"-":e<1?`${e.toFixed(2)}ms`:e<1e3?`${e.toFixed(e<10?2:1)}ms`:`${(e/1e3).toFixed(2)}s`}function pe(e){return e==null||!Number.isFinite(e)?"-":e.toLocaleString()}function ma(e){if(!e)return"-";const t=new Date(e),n=(r,u=2)=>String(r).padStart(u,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function Je(e){if(!e)return null;const t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return null;try{return JSON.parse(t)}catch{return null}}function $({size:e=16,className:t,style:n,label:r,viewBox:u,children:l}){return a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,viewBox:u,fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-label":i.t(r),className:t,style:n},l)}function fa(e){return a.default.createElement($,{...e,label:"AGENT",viewBox:"2 0.25 20 20"},a.default.createElement("rect",{x:"5",y:"7",width:"14",height:"11",rx:"2.5"}),a.default.createElement("path",{d:"M12 4v3"}),a.default.createElement("circle",{cx:"12",cy:"3.5",r:"1"}),a.default.createElement("circle",{cx:"9.5",cy:"12",r:"1.1"}),a.default.createElement("circle",{cx:"14.5",cy:"12",r:"1.1"}),a.default.createElement("path",{d:"M9.5 15.5h5"}),a.default.createElement("path",{d:"M3.5 12.5v2M20.5 12.5v2"}))}function ga(e){return a.default.createElement($,{...e,label:"CHAIN",viewBox:"2 2 20 20"},a.default.createElement("path",{d:"M9.5 14.5a3.5 3.5 0 0 1 0-4.95l2.12-2.12a3.5 3.5 0 0 1 4.95 4.95l-1.06 1.06"}),a.default.createElement("path",{d:"M14.5 9.5a3.5 3.5 0 0 1 0 4.95l-2.12 2.12a3.5 3.5 0 0 1-4.95-4.95l1.06-1.06"}))}function ha(e){return a.default.createElement($,{...e,label:"EMBEDDING",viewBox:"2.9 2.9 18.2 18.2"},a.default.createElement("circle",{cx:"6",cy:"6",r:"1.6"}),a.default.createElement("circle",{cx:"18",cy:"6",r:"1.6"}),a.default.createElement("circle",{cx:"6",cy:"18",r:"1.6"}),a.default.createElement("circle",{cx:"18",cy:"18",r:"1.6"}),a.default.createElement("circle",{cx:"12",cy:"12",r:"2.2"}),a.default.createElement("path",{d:"M7.4 7.4 10.4 10.4M16.6 7.4l-3 3M7.4 16.6l3-3M16.6 16.6l-3-3"}))}function pa(e){return a.default.createElement($,{...e,label:"EVALUATOR",viewBox:"2.5 2.5 19 19"},a.default.createElement("path",{d:"M12 4v16"}),a.default.createElement("path",{d:"M5 9h14"}),a.default.createElement("path",{d:"M8 9 5 15a3 3 0 0 0 6 0L8 9Z"}),a.default.createElement("path",{d:"M16 9l-3 6a3 3 0 0 0 6 0l-3-6Z"}),a.default.createElement("path",{d:"M8 20h8"}))}function Ea(e){return a.default.createElement($,{...e,label:"GUARDRAIL",viewBox:"1.5 1.5 21 21"},a.default.createElement("path",{d:"M12 3 4 6v6c0 4.5 3.4 8.4 8 9 4.6-.6 8-4.5 8-9V6l-8-3Z"}),a.default.createElement("path",{d:"m9 12 2 2 4-4"}))}function va({size:e=16,className:t,style:n}){return a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,viewBox:"0 0 16 16",fill:"currentColor",stroke:"none","aria-label":i.t("LLM"),className:t,style:n},a.default.createElement("path",{d:"M6.75098 2.91992C6.96271 2.80436 7.21893 2.80436 7.43066 2.91992C7.6754 3.05361 7.83917 3.54583 8.16699 4.5293L8.38477 5.18262C8.56011 5.70865 8.64848 5.97198 8.79785 6.19043C8.93022 6.38394 9.09751 6.55122 9.29102 6.68359C9.50951 6.83305 9.77263 6.92128 10.2988 7.09668L10.9531 7.31445C11.936 7.64209 12.4277 7.80621 12.5615 8.05078C12.6771 8.26252 12.6771 8.51873 12.5615 8.73047C12.4279 8.9752 11.9364 9.13905 10.9531 9.4668L10.2988 9.68555C9.77276 9.8609 9.50948 9.94826 9.29102 10.0977C9.09752 10.23 8.93022 10.3973 8.79785 10.5908C8.64839 10.8093 8.56016 11.0724 8.38477 11.5986L8.16699 12.2529C7.8393 13.236 7.67528 13.7275 7.43066 13.8613C7.21893 13.9769 6.96271 13.9769 6.75098 13.8613C6.50636 13.7275 6.34234 13.236 6.01465 12.2529L5.79688 11.5986C5.62148 11.0724 5.53325 10.8093 5.38379 10.5908C5.25142 10.3973 5.08412 10.23 4.89062 10.0977C4.67216 9.94826 4.40888 9.8609 3.88281 9.68555L3.22852 9.4668C2.24527 9.13905 1.75373 8.9752 1.62012 8.73047C1.50455 8.51873 1.50455 8.26252 1.62012 8.05078C1.75398 7.80621 2.2456 7.64209 3.22852 7.31445L3.88281 7.09668C4.40901 6.92128 4.67213 6.83305 4.89062 6.68359C5.08413 6.55122 5.25142 6.38394 5.38379 6.19043C5.53316 5.97198 5.62153 5.70865 5.79688 5.18262L6.01465 4.5293C6.34247 3.54583 6.50624 3.05361 6.75098 2.91992ZM12.8184 0.693359C12.9088 0.64411 13.0179 0.64411 13.1084 0.693359C13.2132 0.750535 13.2836 0.961008 13.4238 1.38184L13.5596 1.78809C13.6346 2.01303 13.6724 2.12529 13.7363 2.21875C13.793 2.30158 13.8644 2.37303 13.9473 2.42969C14.0407 2.49361 14.153 2.53147 14.3779 2.60645L14.7842 2.74219C15.205 2.88246 15.4155 2.95286 15.4727 3.05762C15.5219 3.14809 15.5219 3.25719 15.4727 3.34766C15.4155 3.45241 15.205 3.52281 14.7842 3.66309L14.3779 3.79883C14.153 3.87381 14.0407 3.91166 13.9473 3.97559C13.8644 4.03225 13.793 4.10369 13.7363 4.18652C13.6724 4.27998 13.6346 4.39225 13.5596 4.61719L13.4238 5.02344C13.2836 5.44427 13.2132 5.65474 13.1084 5.71191C13.0179 5.76116 12.9088 5.76116 12.8184 5.71191C12.7136 5.65474 12.6432 5.44427 12.5029 5.02344L12.3672 4.61719C12.2922 4.39225 12.2544 4.27998 12.1904 4.18652C12.1338 4.10369 12.0623 4.03225 11.9795 3.97559C11.886 3.91166 11.7738 3.87381 11.5488 3.79883L11.1426 3.66309C10.7218 3.52281 10.5113 3.45241 10.4541 3.34766C10.4049 3.25719 10.4049 3.14809 10.4541 3.05762C10.5113 2.95286 10.7218 2.88246 11.1426 2.74219L11.5488 2.60645C11.7738 2.53147 11.886 2.49361 11.9795 2.42969C12.0623 2.37303 12.1338 2.30158 12.1904 2.21875C12.2544 2.12529 12.2922 2.01303 12.3672 1.78809L12.5029 1.38184C12.6432 0.961008 12.7136 0.750535 12.8184 0.693359Z"}))}function ba(e){return a.default.createElement($,{...e,label:"PROMPT",viewBox:"3.5 2.5 19 19"},a.default.createElement("path",{d:"M5 5h14v10H9l-4 4V5Z"}),a.default.createElement("path",{d:"M8.5 9.5h7M8.5 12h4.5"}),a.default.createElement("path",{d:"m17 17 1.5 1.5L21 16"}))}function ka(e){return a.default.createElement($,{...e,label:"RERANKER",viewBox:"2.5 2 20 20"},a.default.createElement("path",{d:"M4 7h10"}),a.default.createElement("path",{d:"M4 12h7"}),a.default.createElement("path",{d:"M4 17h12"}),a.default.createElement("path",{d:"M18 4v16"}),a.default.createElement("path",{d:"m15 7 3-3 3 3"}),a.default.createElement("path",{d:"m15 17 3 3 3-3"}))}function _a(e){return a.default.createElement($,{...e,label:"RETRIEVER",viewBox:"1.5 1.75 21 21"},a.default.createElement("ellipse",{cx:"9",cy:"6",rx:"6",ry:"2.5"}),a.default.createElement("path",{d:"M3 6v6c0 1.38 2.69 2.5 6 2.5s6-1.12 6-2.5V6"}),a.default.createElement("path",{d:"M3 12v4c0 1.38 2.69 2.5 6 2.5 1 0 1.96-.1 2.82-.28"}),a.default.createElement("circle",{cx:"17",cy:"17",r:"3"}),a.default.createElement("path",{d:"m21 21-1.8-1.8"}))}function ya({size:e=16,className:t,style:n}){return a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,viewBox:"0 0 16 16",fill:"currentColor",stroke:"none","aria-label":i.t("TOOL"),className:t,style:n},a.default.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.3473 7.71709C11.4282 8.63549 10.0466 8.78881 8.95807 8.20271L4.22084 12.938C3.90023 13.2583 3.38052 13.2583 3.05951 12.938C2.7393 12.6173 2.7393 12.0985 3.05951 11.7778L7.79754 7.04251C7.21188 5.95517 7.36538 4.57517 8.28405 3.65677C8.83493 3.1063 9.55371 2.84447 10.2753 2.83566C9.51933 3.63956 9.52933 4.90145 10.3157 5.68733C11.1016 6.47281 12.3641 6.48282 13.1684 5.72737C13.1596 6.44839 12.8982 7.16662 12.3473 7.71709ZM13.6565 4.14959C13.4542 4.37699 13.1184 4.66644 12.6371 5.10722C12.1274 5.61647 11.4058 5.61647 10.8961 5.10722C10.386 4.59718 10.386 3.87656 10.8961 3.36692C11.3659 2.89731 11.8708 2.34122 11.8628 2.33882C10.4976 1.70907 8.82854 1.95249 7.7036 3.07667C6.6782 4.10116 6.38598 5.57683 6.81733 6.86235L2.47945 11.1981C1.83823 11.8387 1.83823 12.8776 2.47945 13.5181C3.12068 14.1587 4.16007 14.1587 4.80129 13.5181L9.13875 9.18276C10.426 9.61473 11.9023 9.32169 12.9277 8.2972C14.0511 7.17422 14.2846 5.51278 13.6565 4.14959Z"}))}function Ca(e){return a.default.createElement($,{...e,label:"MANUAL",viewBox:"0 0 24 24"},a.default.createElement("path",{d:"M15.5 4.5 19.5 8.5 9 19l-4.5 1L5.5 15.5 15.5 4.5Z"}),a.default.createElement("path",{d:"m13.5 6.5 4 4"}),a.default.createElement("path",{d:"M5.5 15.5 9 19"}))}function Ie(e){return a.default.createElement($,{...e,label:"UNKNOWN",viewBox:"0 0 24 24"},a.default.createElement("path",{d:"M8 4 Q5 4 5 7 L5 10 Q5 12 3 12 Q5 12 5 14 L5 17 Q5 20 8 20"}),a.default.createElement("path",{d:"M16 4 Q19 4 19 7 L19 10 Q19 12 21 12 Q19 12 19 14 L19 17 Q19 20 16 20"}),a.default.createElement("circle",{cx:"12",cy:"12",r:"1.4",fill:"currentColor",stroke:"none"}))}var De={AGENT:fa,CHAIN:ga,LLM:va,TOOL:ya,RETRIEVER:_a,RERANKER:ka,EMBEDDING:ha,EVALUATOR:pa,GUARDRAIL:Ea,PROMPT:ba,MANUAL:Ca,INTERNAL:Ie,UNKNOWN:Ie};function wa({kind:e,...t}){const n=De[e]||De.UNKNOWN;return a.default.createElement(n,{...t})}var J=20,j=32,ne="#A8A29E",Ee=6,ve=16,re=e=>e*J+J/2;function Na({ancestorsIsLast:e,isLast:t,isRoot:n,hasChildren:r,isExpanded:u,onToggle:l}){const s=e.length,c=(s+1)*J,m=j/2,d=[];if(e.forEach((v,y)=>{if(v)return;const C=re(y)+.5;d.push(a.default.createElement("line",{key:`anc-${y}`,x1:C,y1:-.5,x2:C,y2:j+.5,stroke:ne,strokeWidth:1,shapeRendering:"crispEdges"}))}),!n){const v=re(s-1)+.5,y=re(s),C=t?m-Ee:j+.5;d.push(a.default.createElement("line",{key:"vline",x1:v,y1:-.5,x2:v,y2:C,stroke:ne,strokeWidth:1,shapeRendering:"crispEdges"}));const w=`M ${v} ${m-Ee} Q ${v} ${m} ${v+Ee} ${m} L ${y} ${m}`;d.push(a.default.createElement("path",{key:"arc",d:w,fill:"none",stroke:ne,strokeWidth:1}))}if(r&&u){const v=re(s)+.5;d.push(a.default.createElement("line",{key:"vdown",x1:v,y1:m+ve/2,x2:v,y2:j+.5,stroke:ne,strokeWidth:1,shapeRendering:"crispEdges"}))}const g=s*J+(J-ve)/2,h=(j-ve)/2;return a.default.createElement("span",{className:"agent-obs-td-tree-indent",style:{width:c,flex:`0 0 ${c}px`,height:j}},a.default.createElement("svg",{className:"agent-obs-td-tree-lines",width:c,height:j,viewBox:`0 0 ${c} ${j}`,"aria-hidden":"true"},d),a.default.createElement("span",{className:"agent-obs-td-tree-control",style:{left:g,top:h}},r?a.default.createElement("span",{className:`agent-obs-td-tree-expander ${u?"agent-obs-td-tree-expander--expanded":""}`,onClick:v=>{v.stopPropagation(),l()}},a.default.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10","aria-hidden":"true"},a.default.createElement("path",{d:"M2.5 3.5 L5 6 L7.5 3.5",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}))):a.default.createElement("span",{className:"agent-obs-td-tree-leaf-dot"})))}function et(e){const{node:t,depth:n,ancestorsIsLast:r,isLast:u,expanded:l,toggle:s,activeId:o,onActiveChange:c}=e,m=t.children.length>0,d=l.has(t.spanId),g=o===t.spanId;return a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{className:`agent-obs-td-tree-row ${g?"agent-obs-td-tree-row--active":""} ${t.hasError?"agent-obs-td-tree-row--error":""}`,onClick:()=>c(t.spanId)},a.default.createElement(Na,{ancestorsIsLast:r,isLast:u,isRoot:n===0,hasChildren:m,isExpanded:d,onToggle:()=>s(t.spanId)}),a.default.createElement("div",{className:"agent-obs-td-tree-row-content"},a.default.createElement("span",{className:"agent-obs-td-tree-icon"},a.default.createElement(wa,{kind:t.kind,size:t.kind==="UNKNOWN"||t.kind==="INTERNAL"?14:16})),a.default.createElement("span",{className:"agent-obs-td-tree-name",title:t.span.OperationName},t.span.OperationName),a.default.createElement("span",{className:"agent-obs-td-tree-dur"},fe(t.durationMs)))),m&&d&&t.children.map((h,v)=>a.default.createElement(et,{key:h.spanId,node:h,depth:n+1,ancestorsIsLast:[...r,v===t.children.length-1],isLast:v===t.children.length-1,expanded:l,toggle:s,activeId:o,onActiveChange:c})))}function xa(e){const t=[],n=r=>{t.push(r.spanId),r.children.forEach(n)};return e.forEach(n),t}function Ta({roots:e,activeId:t,onActiveChange:n}){const[r,u]=f.useState(()=>new Set(xa(e))),l=s=>{u(o=>{const c=new Set(o);return c.has(s)?c.delete(s):c.add(s),c})};return a.default.createElement("div",{className:"agent-obs-td-tree"},e.map((s,o)=>a.default.createElement(et,{key:s.spanId,node:s,depth:0,ancestorsIsLast:[],isLast:o===e.length-1,expanded:r,toggle:l,activeId:t,onActiveChange:n})))}function Fa(e){const t=[],n=(r,u)=>{t.push({node:r,depth:u}),r.children.forEach(l=>n(l,u+1))};return e.forEach(r=>n(r,0)),t}function Aa(e){return e>3e4?"#F36C06":e>1e4?"#EAB308":e>3e3?"#3B82F6":"#22C55E"}function be(e){if(!Number.isFinite(e)||e<=0)return"0s";const t=e/1e3,n=t<1?t.toFixed(2):t.toFixed(1);return`${parseFloat(n)}s`}var Ma=14;function La({roots:e,activeId:t,onActiveChange:n}){const r=f.useMemo(()=>Fa(e),[e]),{traceStart:u,totalMs:l}=f.useMemo(()=>{if(!r.length)return{traceStart:0,totalMs:0};const c=Math.min(...r.map(d=>d.node.startMs)),m=Math.max(...r.map(d=>d.node.startMs+d.node.durationMs));return{traceStart:c,totalMs:m-c}},[r]),s=[be(0),be(l/2),be(l)],o=["start","mid","end"];return a.default.createElement("div",{className:"agent-obs-td-timeline-wrapper"},a.default.createElement("div",{className:"agent-obs-td-timeline-axis"},a.default.createElement("div",{className:"agent-obs-td-timeline-axis-label"},i.t("Span")),a.default.createElement("div",{className:"agent-obs-td-timeline-axis-track"},s.map((c,m)=>a.default.createElement(k.Text,{key:m,className:`agent-obs-td-timeline-axis-tick agent-obs-td-timeline-axis-tick--${o[m]}`},c))),a.default.createElement("div",{className:"agent-obs-td-timeline-axis-dur"},i.t("Duration"))),a.default.createElement("div",{className:"agent-obs-td-timeline"},r.map(({node:c,depth:m})=>{const d=l>0?(c.startMs-u)/l*100:0,g=l>0?Math.max(c.durationMs/l*100,.2):0,h=t===c.spanId,v=c.hasError?"#e54545":Aa(c.durationMs);return a.default.createElement("div",{key:c.spanId,className:`agent-obs-td-timeline-row ${h?"agent-obs-td-timeline-row--active":""}`,onClick:()=>n(c.spanId)},a.default.createElement("div",{className:"agent-obs-td-timeline-label",style:{paddingLeft:m*Ma}},a.default.createElement("span",{className:"agent-obs-td-timeline-label-op",title:c.span.OperationName},c.span.OperationName)),a.default.createElement("div",{className:"agent-obs-td-timeline-track"},a.default.createElement("div",{className:"agent-obs-td-timeline-track-line"}),a.default.createElement("div",{className:"agent-obs-td-timeline-bar",style:{left:`${d}%`,width:`${g}%`,background:v}})),a.default.createElement("div",{className:"agent-obs-td-timeline-dur"},fe(c.durationMs)))})))}var tt=.25,at=2,le=.1,ue=24;function Sa(e,t=22){return e?e.length>t?`${e.slice(0,t-1)}…`:e:""}function Ra(e,t,n,r){const u=Math.max((r-t)/2,20);return`M ${e} ${t} C ${e} ${t+u}, ${n} ${r-u}, ${n} ${r}`}function ke(e){return Math.min(at,Math.max(tt,e))}function Ia(e){return e==="parallel"?i.t("Parallel"):i.t("Sequential")}function Da({roots:e,activeId:t,onActiveChange:n}){const r=f.useMemo(()=>da(e),[e]),u=f.useMemo(()=>{const p=new Map;return r.nodes.forEach(N=>p.set(N.id,{x:N.x,y:N.y})),p},[r]),l=f.useRef(null),[s,o]=f.useState({w:0,h:0}),[c,m]=f.useState(1),[d,g]=f.useState({x:0,y:0}),[h,v]=f.useState(!1),y=f.useCallback((p,N,b,E)=>{if(p<ue*2+1||N<ue*2+1||!b||!E)return{scale:1,x:0,y:0};const _=ke(Math.min((p-ue*2)/b,(N-ue*2)/E,1));return{scale:_,x:(p-b*_)/2,y:(N-E*_)/2}},[]),C=f.useCallback(()=>{const p=y(s.w,s.h,r.width,r.height);m(p.scale),g({x:p.x,y:p.y})},[y,s.w,s.h,r.width,r.height]),w=f.useRef(""),x=`${r.width}x${r.height}`;f.useLayoutEffect(()=>{const p=l.current;if(!p)return;const N=p.clientWidth,b=p.clientHeight;if(o({w:N,h:b}),N>0&&b>0&&r.width>0&&r.height>0){const T=y(N,b,r.width,r.height);m(T.scale),g({x:T.x,y:T.y}),w.current=x,v(!0)}let E=0;const _=new ResizeObserver(()=>{cancelAnimationFrame(E),E=requestAnimationFrame(()=>{const T=p.clientWidth,I=p.clientHeight;o(R=>R.w===T&&R.h===I?R:{w:T,h:I})})});return _.observe(p),()=>{cancelAnimationFrame(E),_.disconnect()}},[]),f.useEffect(()=>{if(!s.w||!s.h||!r.width||!r.height||w.current===x)return;w.current=x;const p=y(s.w,s.h,r.width,r.height);m(p.scale),g({x:p.x,y:p.y}),v(!0)},[x,s.w,s.h,r.width,r.height,y]);const A=f.useCallback((p,N,b)=>{m(E=>{const _=ke(p);return _===E?E:(g(T=>({x:N-(N-T.x)*(_/E),y:b-(b-T.y)*(_/E)})),_)})},[]),L=()=>A(c+le,s.w/2,s.h/2),D=()=>A(c-le,s.w/2,s.h/2);f.useEffect(()=>{const p=l.current;if(!p)return;const N=b=>{b.preventDefault();const E=p.getBoundingClientRect(),_=b.clientX-E.left,T=b.clientY-E.top,I=b.deltaY<0?1+le:1/(1+le);m(R=>{const z=ke(R*I);return z===R?R:(g(ee=>({x:_-(_-ee.x)*(z/R),y:T-(T-ee.y)*(z/R)})),z)})};return p.addEventListener("wheel",N,{passive:!1}),()=>p.removeEventListener("wheel",N)},[]);const M=f.useRef({active:!1,startX:0,startY:0,originX:0,originY:0}),[K,F]=f.useState(!1),S=p=>{p.button!==0||p.target.closest(".agent-obs-td-graph-node")||(M.current={active:!0,startX:p.clientX,startY:p.clientY,originX:d.x,originY:d.y},F(!0),p.preventDefault())};f.useEffect(()=>{if(!K)return;const p=b=>{if(!M.current.active)return;const E=b.clientX-M.current.startX,_=b.clientY-M.current.startY;g({x:M.current.originX+E,y:M.current.originY+_})},N=()=>{M.current.active=!1,F(!1)};return window.addEventListener("mousemove",p),window.addEventListener("mouseup",N),()=>{window.removeEventListener("mousemove",p),window.removeEventListener("mouseup",N)}},[K]);const V=Math.round(c*100),W=c<at-1e-6,P=c>tt+1e-6;return a.default.createElement("div",{ref:l,className:`agent-obs-td-graph${K?" agent-obs-td-graph--panning":""}`,onMouseDown:S},a.default.createElement("svg",{className:"agent-obs-td-graph-svg",width:s.w||r.width,height:s.h||r.height},h&&a.default.createElement("g",{transform:`translate(${d.x}, ${d.y}) scale(${c})`},a.default.createElement("g",null,r.edges.map((p,N)=>{const b=u.get(p.from),E=u.get(p.to);if(!b||!E)return null;const _=b.x+O/2,T=b.y+ce,I=E.x+O/2,R=E.y,z=(_+I)/2,ee=(T+R)/2;return a.default.createElement("g",{key:`edge-${N}`},a.default.createElement("path",{className:`agent-obs-td-graph-edge ${p.dashed?"agent-obs-td-graph-edge--dashed":""}`,d:Ra(_,T,I,R)}),a.default.createElement("text",{className:"agent-obs-td-graph-edge-label",x:z,y:ee,textAnchor:"middle",dy:"-2"},Ia(p.label)))})),a.default.createElement("g",null,r.nodes.map(p=>{const{x:N,y:b,node:E}=p,_=t===E.spanId;return a.default.createElement("g",{key:E.spanId,className:`agent-obs-td-graph-node agent-obs-td-graph-node--${E.kind}${E.hasError?" agent-obs-td-graph-node--error":""}${_?" agent-obs-td-graph-node--active":""}`,transform:`translate(${N}, ${b})`,onClick:()=>n(E.spanId)},a.default.createElement("rect",{className:"agent-obs-td-graph-node-box",width:O,height:ce,rx:8,ry:8}),a.default.createElement("text",{className:"agent-obs-td-graph-node-op",x:O/2,y:22,textAnchor:"middle"},a.default.createElement("title",null,E.span.OperationName),Sa(E.span.OperationName,22)),a.default.createElement("text",{className:"agent-obs-td-graph-node-dur",x:O/2,y:40,textAnchor:"middle"},fe(E.durationMs)))})))),a.default.createElement("div",{className:"agent-obs-td-graph-toolbar",onMouseDown:p=>p.stopPropagation(),onWheel:p=>p.stopPropagation()},a.default.createElement("button",{type:"button",className:"agent-obs-td-graph-toolbar-btn",onClick:L,disabled:!W,"aria-label":i.t("zoom in")},"+"),a.default.createElement("span",{className:"agent-obs-td-graph-toolbar-percent"},V,"%"),a.default.createElement("button",{type:"button",className:"agent-obs-td-graph-toolbar-btn",onClick:D,disabled:!P,"aria-label":i.t("zoom out")},"−"),a.default.createElement("span",{className:"agent-obs-td-graph-toolbar-divider"}),a.default.createElement("button",{type:"button",className:"agent-obs-td-graph-toolbar-btn agent-obs-td-graph-toolbar-fit",onClick:C,"aria-label":i.t("fit to view")},a.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("path",{d:"M2 5V2h3M14 5V2h-3M2 11v3h3M14 11v3h-3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})))))}var Oe=!1;function Oa(){Oe||(Ve.default.registerLanguage("json",gt.default),Oe=!0)}function Ba(e,t=2){const n=JSON.stringify(e,null,t);return Oa(),Ve.default.highlight(n,{language:"json"}).value}function $a({span:e,closeBtn:t,attrsLoading:n,attrsError:r}){if(!e)return a.default.createElement("div",{className:"agent-obs-td-detail"},a.default.createElement("div",{className:"agent-obs-td-detail-header"},a.default.createElement("span",{className:"agent-obs-td-detail-header-title"}),t),a.default.createElement("div",{className:"agent-obs-td-detail-empty"},i.t("请选择左侧节点查看详情")));const u=na(e),l=Ze(e),s=sa(e),o=oa(e),c=Qe(e),m=c?ra(e):void 0,d=B(e,"agent.conversation_id")||B(e,"session.id");return a.default.createElement("div",{className:"agent-obs-td-detail"},a.default.createElement("div",{className:"agent-obs-td-detail-header"},a.default.createElement("span",{className:"agent-obs-td-detail-header-title",title:e.OperationName},e.OperationName),a.default.createElement("span",{className:`agent-obs-td-detail-badge ${c?"agent-obs-td-detail-badge--error":"agent-obs-td-detail-badge--ok"}`},c?i.t("ERROR"):i.t("OK")),t),a.default.createElement("div",{className:"agent-obs-td-detail-metrics"},a.default.createElement(H,{label:i.t("Total Tokens"),value:pe(l.totalTokens)}),a.default.createElement(H,{label:i.t("Tokens in"),value:pe(l.inputTokens)}),a.default.createElement(H,{label:i.t("Tokens out"),value:pe(l.outputTokens)}),a.default.createElement(H,{label:i.t("Duration"),value:fe(l.durationMs)}),a.default.createElement(H,{label:i.t("Model"),value:l.model||"-"})),a.default.createElement("div",{className:"agent-obs-td-detail-info"},a.default.createElement("div",{className:"agent-obs-td-detail-pills"},a.default.createElement(X,{label:i.t("Timestamp"),value:ma(l.startMs)}),a.default.createElement(X,{label:i.t("SpanId"),value:e.SpanId}),a.default.createElement(X,{label:i.t("TraceId"),value:B(e,"traceID")||e.TraceId}),a.default.createElement(X,{label:i.t("SpanKind"),value:u}),a.default.createElement(X,{label:i.t("ConversionID"),value:d??"-"})),s.input&&s.output&&a.default.createElement(a.default.Fragment,null,a.default.createElement(_e,{title:i.t("Input"),value:s.input}),a.default.createElement(_e,{title:i.t("Output"),value:s.output})),m&&a.default.createElement(_e,{title:i.t("Error"),value:m,titleClassName:"agent-obs-td-detail-io-title--error"})),a.default.createElement("div",{className:"agent-obs-td-detail-attrs-wrap"},n?a.default.createElement("div",{className:"agent-obs-td-detail-attrs-loading"},a.default.createElement(k.LoadingTip,null)):r?a.default.createElement(k.Alert,{type:"error"},r):a.default.createElement(qa,{attrs:o,io:s})))}function H({label:e,value:t}){return a.default.createElement("div",{className:"agent-obs-td-detail-metric"},a.default.createElement("div",{className:"agent-obs-td-detail-metric-label"},e),a.default.createElement("div",{className:"agent-obs-td-detail-metric-value",title:typeof t=="string"?t:void 0},t))}function X({label:e,value:t}){return a.default.createElement("div",{className:"agent-obs-td-detail-pill",title:`${e}: ${t}`},a.default.createElement("span",{className:"agent-obs-td-detail-pill-label"},e),a.default.createElement("span",{className:"agent-obs-td-detail-pill-value"},t))}function oe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function U(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Ne(e,t=0){if(t>6||e===null||e===void 0)return null;if(Array.isArray(e)){for(const n of e){const r=Ne(n,t+1);if(r)return r}return null}if(!oe(e))return null;if(Array.isArray(e.messages)&&e.messages.length)return e.messages;for(const n of Object.keys(e)){const r=Ne(e[n],t+1);if(r)return r}return null}function Ka(e){if(typeof e=="string")return e.trim()||void 0;if(!oe(e))return;const t=U(e.content)||U(e.text);if(t)return t;const n=oe(e.data)?e.data:null;if(n){const u=U(n.content)||U(n.text);if(u)return u}const r=oe(e.kwargs)?e.kwargs:null;if(r){const u=U(r.content)||U(r.text);if(u)return u}}function Va(e){const t=Je(e);if(t===null)return e;const n=Ne(t);if(n&&n.length)for(let r=n.length-1;r>=0;r-=1){const u=Ka(n[r]);if(u)return u}return e}function _e({title:e,value:t,titleClassName:n}){const r=Va(t);return a.default.createElement("div",{className:"agent-obs-td-detail-io"},a.default.createElement("div",{className:`agent-obs-td-detail-io-title ${n||""}`},e),a.default.createElement("pre",{className:"agent-obs-td-detail-io-content"},r))}var Pa=["llm","gen_ai","openai"];function ja(e,t){return t.some(n=>e===n||e.startsWith(`${n}.`))}function Be(e){return ja(e,Pa)}function qa({attrs:e,io:t}){const n=f.useMemo(()=>{const o=[];return t.input&&o.push({Key:"input.value",Value:t.input}),t.output&&o.push({Key:"output.value",Value:t.output}),o},[t.input,t.output]),r=f.useMemo(()=>e.filter(o=>Be(o.Key)),[e]),u=f.useMemo(()=>e.filter(o=>!Be(o.Key)),[e]),l=r.length>0,s=f.useMemo(()=>[...n,...u],[n,u]);return l?a.default.createElement(za,{llmAttrs:r,otherAttrs:s}):a.default.createElement(k.Tabs,{tabs:[{id:"span",label:i.t("Span Attributes")}],activeId:"span"},a.default.createElement(k.TabPanel,{id:"span"},a.default.createElement(xe,{attrs:s})))}function za({llmAttrs:e,otherAttrs:t}){const[n,r]=f.useState("llm"),u=[{id:"llm",label:i.t("LLM Attributes")},{id:"other",label:i.t("Other Attributes")}];return a.default.createElement(k.Tabs,{tabs:u,activeId:n,onActive:l=>r(l.id)},a.default.createElement(k.TabPanel,{id:"llm"},a.default.createElement(xe,{attrs:e})),a.default.createElement(k.TabPanel,{id:"other"},a.default.createElement(xe,{attrs:t})))}function xe({attrs:e}){return e.length?a.default.createElement("div",{className:"agent-obs-td-detail-attrs"},e.map((t,n)=>a.default.createElement(Ua,{key:`${t.Key}-${n}`,attr:t}))):a.default.createElement("div",{className:"agent-obs-td-detail-attrs-empty"},i.t("无属性"))}function Ua({attr:e}){const[t,n]=f.useState(!1),[r,u]=f.useState(!1),l=f.useRef(null),s=f.useMemo(()=>Je(e.Value),[e.Value]),o=e.Value||"-",c=s!==null;f.useLayoutEffect(()=>{if(t&&!c)return;const h=l.current;if(!h)return;const v=()=>{u(h.scrollWidth>h.clientWidth+1)};if(v(),typeof ResizeObserver>"u")return;const y=new ResizeObserver(v);return y.observe(h),()=>y.disconnect()},[o,t,c]);const m=c||r,d=t&&!c?"agent-obs-td-detail-attr-value--expanded":"",g=!t||c?o:void 0;return a.default.createElement("div",{className:"agent-obs-td-detail-attr"},a.default.createElement("div",{className:"agent-obs-td-detail-attr-main"},m?a.default.createElement("span",{className:`agent-obs-td-detail-attr-caret ${t?"agent-obs-td-detail-attr-caret--expanded":""}`,onClick:()=>n(h=>!h)},"▶"):a.default.createElement("span",{className:"agent-obs-td-detail-attr-caret agent-obs-td-detail-attr-caret--placeholder"}),a.default.createElement("span",{className:"agent-obs-td-detail-attr-key",title:e.Key},e.Key),a.default.createElement("span",{ref:l,className:`agent-obs-td-detail-attr-value ${d}`,title:g},o)),m&&t&&s!==null&&a.default.createElement("pre",{className:"agent-obs-td-detail-attr-json hljs",dangerouslySetInnerHTML:{__html:Ba(s)}}))}function Ya(){return[{id:"tree",label:i.t("Tree")},{id:"timeline",label:i.t("Timeline")},{id:"graph",label:i.t("Graph")}]}function Wa({visible:e,onClose:t,traceId:n,fetchDetail:r,fetchSpanDetail:u,defaultTab:l="tree",width:s="80vw"}){const[o,c]=f.useState(l),[m,d]=f.useState(null),[g,h]=f.useState(!1),[v,y]=f.useState(null),[C,w]=f.useState(null),[x,A]=f.useState(()=>new Map),[L,D]=f.useState(!1),[M,K]=f.useState(null),F=f.useRef(null);f.useEffect(()=>{if(!e||!n)return;let b=!1;return h(!0),y(null),d(null),w(null),A(new Map),D(!1),K(null),F.current=null,r(n).then(E=>{var _;if(!b&&(d(E),(_=E==null?void 0:E.Spans)!=null&&_.length)){const T=E.Spans.reduce((I,R)=>I.StartTime<R.StartTime?I:R);w(T.SpanId)}}).catch(E=>{b||y((E==null?void 0:E.message)||i.t("加载失败"))}).finally(()=>{b||h(!1)}),()=>{b=!0}},[e,n,r]),f.useEffect(()=>{e||c(l)},[e,l]);const{roots:S,spanMap:V}=f.useMemo(()=>{var b;if(!((b=m==null?void 0:m.Spans)!=null&&b.length))return{roots:[],spanMap:new Map};const E=new Map;return m.Spans.forEach(_=>E.set(_.SpanId,_)),{roots:ca(m.Spans),spanMap:E}},[m]),W=f.useMemo(()=>{if(!C)return null;const b=V.get(C)||null;if(!b)return null;const E=x.get(C);return E?{...b,Tags:E.Tags&&E.Tags.length?E.Tags:b.Tags,Logs:E.Logs&&E.Logs.length?E.Logs:b.Logs}:b},[C,V,x]);f.useEffect(()=>{if(!e||!n||!C||!u)return;const b=V.get(C);if(!b||x.has(C)||b.Tags&&b.Tags.length>0)return;F.current=C;let E=!1;return D(!0),K(null),u(n,C).then(_=>{E||F.current!==C||A(T=>{const I=new Map(T);return I.set(C,{Tags:Array.isArray(_==null?void 0:_.Tags)?_.Tags:[],Logs:Array.isArray(_==null?void 0:_.Logs)?_.Logs:[]}),I})}).catch(_=>{E||F.current!==C||K((_==null?void 0:_.message)||i.t("加载失败"))}).finally(()=>{E||F.current!==C||D(!1)}),()=>{E=!0}},[e,n,C,u,V,x]);const P=f.useCallback(b=>{w(b)},[]),p=f.useMemo(Ya,[]),N=()=>g?a.default.createElement("div",{className:"agent-obs-td-drawer-loading"},a.default.createElement(k.LoadingTip,null)):v?a.default.createElement("div",{className:"agent-obs-td-drawer-error"},a.default.createElement(k.Alert,{type:"error"},v)):!m||!S.length?a.default.createElement("div",{className:"agent-obs-td-drawer-empty"},i.t("暂无数据")):o==="tree"?a.default.createElement(Ta,{roots:S,activeId:C,onActiveChange:P}):o==="timeline"?a.default.createElement(La,{roots:S,activeId:C,onActiveChange:P}):a.default.createElement(Da,{roots:S,activeId:C,onActiveChange:P});return a.default.createElement(k.Drawer,{className:"agent-obs-td-drawer",style:{width:s,height:"calc(100vh - 50px)",boxSizing:"border-box"},visible:e,placement:"right",size:"xl",title:null,disableCloseIcon:!0,onClose:t,outerClickClosable:!0,showMask:!0},a.default.createElement("div",{className:"agent-obs-td-drawer-body"},a.default.createElement("div",{className:"agent-obs-td-drawer-left"},a.default.createElement(k.Tabs,{className:"agent-obs-td-drawer-tabs",style:{height:40},variant:"card-outline",tabs:p,animated:!1,defaultActiveId:o,onActive:b=>c(b.id)}),a.default.createElement("div",{style:{paddingLeft:10},className:`agent-obs-td-drawer-view${o==="graph"?" agent-obs-td-drawer-view--graph":""}`},N())),a.default.createElement("div",{className:"agent-obs-td-drawer-right"},g||v?null:a.default.createElement($a,{span:W,attrsLoading:L,attrsError:M,closeBtn:a.default.createElement("button",{type:"button",className:"agent-obs-td-drawer-close",onClick:t,"aria-label":i.t("关闭")},a.default.createElement(k.Icon,{type:"close",size:20}))}))))}var Ga={zh:{k_1vdb2c7:"Agent 调用",k_00hhj74:"ConversionID",k_1opac2j:"Duration",k_03sgcnx:"ERROR",k_037uk0t:"Error",k_030ock3:"Input",k_1l3vgxz:"LLM Attributes",k_1tv2hle:"LLM 调用次数",k_02vcuqy:"Model",k_003hnfl:"OK",k_130omsu:"Other Attributes",k_0sl6zfe:"Output",k_151iedo:"Sequential",k_0yhbajy:"Parallel",k_11rfpuu:"Span Attributes",k_0yisj0j:"Tree",k_01oqkxq:"Timeline",k_02yf5ih:"Graph",k_1len88c:"TraceId (RunId)",k_0yj2fzd:"Span",k_0rakmad:"zoom in",k_0jw4x30:"zoom out",k_04p9rpk:"fit to view",k_03r8nh8:"AGENT",k_03jowco:"CHAIN",k_038v7ai:"EMBEDDING",k_0e3gmau:"EVALUATOR",k_0uolhdi:"GUARDRAIL",k_037699k:"LLM",k_1ga8ach:"PROMPT",k_1sjjr8z:"RERANKER",k_1babzmh:"RETRIEVER",k_0yjq7ul:"TOOL",k_1bemrrz:"MANUAL",k_1a804jx:"UNKNOWN",k_0j7hjgk:"SpanId",k_1dcdm1t:"SpanKind",k_1tkqbyj:"Timestamp",k_16wdblm:"Token 总消耗",k_1087kga:"Tokens in",k_0csyyqr:"Tokens out",k_1pugrjj:"Total Tokens",k_1tn04w9:"TraceId",k_00046ua:"万",k_00046tr:"个",k_00046qi:"亿",k_002r79h:"全部",k_17cbs21:"全部环境",k_002qzi3:"关闭",k_003lxmq:"刷新",k_0f8b3ws:"加载失败",k_003m8qf:"参数",k_0pa2i2z:"可根据 run-id 和 conversation-id 搜索",k_14tn4z1:"响应时间(秒)",k_002umy9:"失败",k_003pmuv:"工具",k_02p3axw:"平均 Token/模型调用",k_003qqk4:"开发",k_0by9bfw:"开始时间",k_003qe0a:"成功",k_1f3mps5:"数据延迟 < 10min",k_03cutj0:"无属性",k_0zn4ylg:"模型调用",k_01fa579:"模型调用错误率",k_07hvn81:"模型调用平均耗时",k_03e5hqz:"日同比",k_13qhqgp:"暂无数据",k_0004138:"次",k_003nzwy:"状态",k_003s37t:"环境",k_003twt9:"生产",k_17bw8lt:"生产环境",k_0fwgfbc:"用量概览",k_0bycnor:"结束时间",k_0mvqrk5:"请选择左侧节点查看详情",k_0ld10w7:"请选择时间范围",k_1gd9xqm:"近12小时",k_0vd4sg9:"近15分钟",k_126g2v0:"近1小时",k_1gd9wh7:"近24小时",k_0vd6ff2:"近30分钟",k_126g2vv:"近6小时",k_03g9k26:"近3天",k_03g9k5m:"近7天",k_002uzrd:"预览",k_17c63b9:"预览环境"},en:{k_1vdb2c7:"Agent Calls",k_00hhj74:"Conversation ID",k_1opac2j:"Duration",k_03sgcnx:"ERROR",k_037uk0t:"Error",k_030ock3:"Input",k_1l3vgxz:"LLM Attributes",k_1tv2hle:"LLM Calls",k_02vcuqy:"Model",k_003hnfl:"OK",k_130omsu:"Other Attributes",k_0sl6zfe:"Output",k_151iedo:"Sequential",k_0yhbajy:"Parallel",k_11rfpuu:"Span Attributes",k_0yisj0j:"Tree",k_01oqkxq:"Timeline",k_02yf5ih:"Graph",k_1len88c:"Trace ID (Run ID)",k_0yj2fzd:"Span",k_0rakmad:"Zoom in",k_0jw4x30:"Zoom out",k_04p9rpk:"Fit to view",k_03r8nh8:"AGENT",k_03jowco:"CHAIN",k_038v7ai:"EMBEDDING",k_0e3gmau:"EVALUATOR",k_0uolhdi:"GUARDRAIL",k_037699k:"LLM",k_1ga8ach:"PROMPT",k_1sjjr8z:"RERANKER",k_1babzmh:"RETRIEVER",k_0yjq7ul:"TOOL",k_1bemrrz:"MANUAL",k_1a804jx:"UNKNOWN",k_0j7hjgk:"Span ID",k_1dcdm1t:"Span Kind",k_1tkqbyj:"Timestamp",k_16wdblm:"Total Token Usage",k_1087kga:"Tokens In",k_0csyyqr:"Tokens Out",k_1pugrjj:"Total Tokens",k_1tn04w9:"Trace ID",k_00046ua:"Ten Thousand",k_00046tr:"items",k_00046qi:"Billion",k_002r79h:"All",k_17cbs21:"All Environments",k_002qzi3:"Close",k_003lxmq:"Refresh",k_0f8b3ws:"Load Failed",k_003m8qf:"Parameters",k_0pa2i2z:"Search by run-id or conversation-id",k_14tn4z1:"Response Time (s)",k_002umy9:"Failed",k_003pmuv:"Tool",k_02p3axw:"Average Tokens per Model Call",k_003qqk4:"Development",k_0by9bfw:"Start Time",k_003qe0a:"Success",k_1f3mps5:"Data latency < 10 min",k_03cutj0:"No attributes",k_0zn4ylg:"Model Calls",k_01fa579:"Model Error Rate",k_07hvn81:"Average Model Latency",k_03e5hqz:"Day-over-day",k_13qhqgp:"No Data",k_0004138:"times",k_003nzwy:"Status",k_003s37t:"Environment",k_003twt9:"Production",k_17bw8lt:"Production Environment",k_0fwgfbc:"Usage Overview",k_0bycnor:"End Time",k_0mvqrk5:"Select a node on the left to view details",k_0ld10w7:"Select a time range",k_1gd9xqm:"Last 12 Hours",k_0vd4sg9:"Last 15 Minutes",k_126g2v0:"Last 1 Hour",k_1gd9wh7:"Last 24 Hours",k_0vd6ff2:"Last 30 Minutes",k_126g2vv:"Last 6 Hours",k_03g9k26:"Last 3 Days",k_03g9k5m:"Last 7 Days",k_002uzrd:"Preview",k_17c63b9:"Preview Environment"}},Ja=$t,en=Jt,tn=Wa,an=Ga;export{Ja as A,tn as T,an as a,en as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-obs-loading{position:relative;width:100%}.agent-obs-loading-content{width:100%}.agent-obs-loading-mask{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff9;transition:opacity .3s ease-in;z-index:10;display:flex;justify-content:center;align-items:center}.agent-obs-loading-mask--hidden{opacity:0;pointer-events:none}.agent-obs-empty{width:100%;height:100%;position:relative}.agent-obs-empty-bg{height:100%;padding-top:3px;display:flex;justify-content:center;align-items:center}.agent-obs-empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#fff;padding:4px;font-size:12px;color:#888;line-height:1.4}.agent-obs-filter{margin-bottom:10px}.agent-obs-filter-body{position:relative}.agent-obs-filter-tip{position:absolute;right:20px;top:30px;transform:translateY(-50%)}@keyframes agent-obs-filter-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.agent-obs-filter-refresh:hover{background-color:#fff!important}.agent-obs-filter-refresh--rotating{animation:agent-obs-filter-rotate 1s linear infinite}.agent-obs-traces-filter{margin-bottom:20px}.agent-obs-traces-filter .filter-actions{display:inline-flex;align-items:center;gap:8px;flex-wrap:nowrap}.agent-obs-traces-filter .traces-filter-search{width:280px!important}.agent-obs-traces-filter .quick-date-picker{display:inline-flex;align-items:center}.agent-obs-traces-filter .quick-date-picker .time-range-picker [class*=-datetimepicker__input][class*=-datepicker__input--range]{width:315px}.agent-obs-overview{margin-bottom:10px;min-height:160px}.agent-obs-overview-title{font-size:14px;font-weight:600;color:#000;margin-bottom:16px}.agent-obs-overview-grid{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px 0}.agent-obs-overview-grid--loading .agent-obs-overview-cell{visibility:hidden}.agent-obs-overview-loading-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.agent-obs-overview-cell{position:relative;display:flex;flex-direction:column;gap:8px;padding:0 24px}.agent-obs-overview-cell:after{content:"";position:absolute;right:0;top:8px;bottom:8px;width:1px;background-color:#e5e5e5}.agent-obs-overview-cell:last-child:after{display:none}.agent-obs-overview-cell:first-child{padding-left:0}.agent-obs-overview-label{font-size:14px;color:#000;line-height:1.4}.agent-obs-overview-value-row{display:flex;align-items:baseline}.agent-obs-overview-value{font-size:24px;font-weight:500;color:#000;line-height:1.2}.agent-obs-overview-unit{font-size:14px;color:#888;margin-left:2px}.agent-obs-overview-delta{font-size:12px;line-height:1.4}.agent-obs-overview-delta-label{color:#888;margin-right:6px}.agent-obs-overview-delta-value--up{color:#16a34a}.agent-obs-overview-delta-value--down{color:#e54545}.agent-obs-overview-delta-value--flat{color:#888}.agent-obs-card-body{padding:24px}.agent-obs-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.agent-obs-card-titlebox{display:flex;flex-direction:column;gap:6px}.agent-obs-card-title{font-size:14px;font-weight:600;color:#000;line-height:1.4}.agent-obs-card-unit{font-size:12px;color:#888;line-height:1.4}.agent-obs-card-jump{cursor:pointer;display:flex;align-items:center;color:#000}.agent-obs-card-link{text-decoration:none;color:inherit;display:block}.agent-obs-card-chart{margin-top:8px}.agent-obs-card-empty{width:100%;display:flex;justify-content:center;align-items:center}.agent-obs-traces-wrapper{background-color:#fff;padding:16px 20px}.agent-obs-traces-table [class*=-table__header] [class*=-dropdown-filter]{display:flex;align-items:center;padding:0}.agent-obs-traces-table [class*=-table__header] [class*=-dropdown-filter] .ruyi-icon.ruyi-icon-filter{position:static;margin-left:4px;flex:0 0 auto}.agent-obs-traces-trace-id{color:var(--tea-color-text-brand-default, #006eff);cursor:pointer;text-decoration:none}.agent-obs-traces-trace-id:hover{color:var(--tea-color-text-brand-hover, #006eff);text-decoration:none}.agent-obs-traces-trace-id:visited{color:var(--tea-color-text-brand-default, #006eff)}.agent-obs-traces-env--production{background-color:#e8f5ec;color:#16a34a}.agent-obs-traces-env--preview{background-color:#e8f1ff;color:#006eff}.agent-obs-traces-status--success{color:var(--tea-color-text-success-default, #16a34a)}.agent-obs-traces-status--failed,.agent-obs-traces-status--timeout{color:var(--tea-color-text-error-default, #e54545)}.agent-obs-traces-status--running{color:var(--tea-color-text-weak, #888)}.agent-obs-td-drawer [class$=-drawer__body-inner],.agent-obs-td-drawer [class*="-drawer__body-inner "]{height:100%!important}.agent-obs-td-drawer>[class$=-drawer__body],.agent-obs-td-drawer>[class*="-drawer__body "]{padding-top:0!important;padding-left:0!important;padding-right:0!important}.agent-obs-td-drawer [class$=-tabs__tabitem],.agent-obs-td-drawer [class*="-tabs__tabitem "]{margin-right:0!important;line-height:30px!important}.agent-obs-td-drawer-tabs{margin-bottom:12px}.agent-obs-td-drawer-close{flex:0 0 auto;border:none;background:transparent;cursor:pointer;color:#888;padding:8px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;transition:background .15s}.agent-obs-td-drawer-close:hover{background:#f0f2f5;color:#000}.agent-obs-td-drawer-body{display:flex;height:100%;min-height:0}.agent-obs-td-drawer-left{width:480px;border-right:1px solid #e5e5e5;display:flex;flex-direction:column;min-height:0;overflow:hidden;height:100%}.agent-obs-td-drawer-view{flex:1 1 auto;min-height:0;overflow:auto}.agent-obs-td-drawer-view--graph{overflow:hidden}.agent-obs-td-drawer-right{flex:1;height:100%;overflow:auto;padding:20px 24px;background:#fff;position:relative}.agent-obs-td-drawer-loading,.agent-obs-td-drawer-error,.agent-obs-td-drawer-empty{padding:60px 16px;display:flex;justify-content:center;align-items:center;color:#888;font-size:13px;width:100%}.agent-obs-td-tree{display:flex;flex-direction:column;font-size:13px;color:#000}.agent-obs-td-tree-row{display:flex;align-items:center;height:32px;box-sizing:border-box;padding:0 8px 0 0;cursor:pointer;border-radius:4px;position:relative}.agent-obs-td-tree-row:hover .agent-obs-td-tree-row-content{background:#f0f2f5}.agent-obs-td-tree-row--active .agent-obs-td-tree-row-content{background:#eef3ff}.agent-obs-td-tree-row--active .agent-obs-td-tree-icon{color:#1c66e5}.agent-obs-td-tree-row--active .agent-obs-td-tree-name,.agent-obs-td-tree-row--active .agent-obs-td-tree-dur{color:#006eff}.agent-obs-td-tree-row--error .agent-obs-td-tree-name{color:#e54545}.agent-obs-td-tree-row-content{flex:1 1 auto;min-width:0;display:flex;align-items:center;height:100%;border-radius:4px}.agent-obs-td-tree-indent{position:relative;align-self:stretch;display:block}.agent-obs-td-tree-lines{display:block}.agent-obs-td-tree-control{position:absolute;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center}.agent-obs-td-tree-expander{width:16px;height:16px;border-radius:50%;background:#eceae7;color:#666;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .15s}.agent-obs-td-tree-expander:hover{background:#e0ddda}.agent-obs-td-tree-expander:not(.agent-obs-td-tree-expander--expanded){transform:rotate(-90deg)}.agent-obs-td-tree-leaf-dot{width:6px;height:6px;border-radius:50%;background:#a8a29e;display:inline-block}.agent-obs-td-tree-icon{flex:0 0 auto;display:inline-flex;color:#333;margin-left:6px;margin-right:8px}.agent-obs-td-tree-name{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.agent-obs-td-tree-dur{flex:0 0 auto;font-size:12px;color:#a8a29e;margin-left:auto;padding-left:12px;padding-right:8px;font-variant-numeric:tabular-nums}.agent-obs-td-timeline-wrapper{display:flex;flex-direction:column;font-size:13px}.agent-obs-td-timeline-axis{position:sticky;top:0;z-index:2;background:#fff;display:flex;align-items:center;gap:8px;border-bottom:1px solid #e5e5e5;padding:6px 8px;font-size:12px;color:#a8a29e}.agent-obs-td-timeline-axis-label{flex:0 0 200px}.agent-obs-td-timeline-axis-track{flex:1 1 auto;position:relative;display:flex;font-size:11px}.agent-obs-td-timeline-axis-dur{flex:0 0 70px;text-align:right}.agent-obs-td-timeline-axis-tick{flex:1 1 0}.agent-obs-td-timeline-axis-tick--start{text-align:left}.agent-obs-td-timeline-axis-tick--mid{text-align:center}.agent-obs-td-timeline-axis-tick--end{text-align:right}.agent-obs-td-timeline-row{display:flex;align-items:center;gap:8px;padding:6px 8px;cursor:pointer;border-radius:4px}.agent-obs-td-timeline-row:hover{background:#f0f2f5}.agent-obs-td-timeline-row--active{background:#eef3ff}.agent-obs-td-timeline-label{flex:0 0 200px;display:flex;align-items:center;gap:6px;overflow:hidden}.agent-obs-td-timeline-label-icon{flex:0 0 auto;display:inline-flex;color:#333}.agent-obs-td-timeline-label-op{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-obs-td-timeline-track{flex:1 1 auto;position:relative;height:16px}.agent-obs-td-timeline-track-line{position:absolute;left:0;right:0;top:50%;height:1px;background:#e9ecf1;transform:translateY(-50%)}.agent-obs-td-timeline-bar{position:absolute;top:50%;height:10px;transform:translateY(-50%);border-radius:2px;min-width:2px}.agent-obs-td-timeline-dur{flex:0 0 70px;font-size:12px;color:#a8a29e;text-align:right;font-variant-numeric:tabular-nums}.agent-obs-td-graph{position:relative;width:100%;height:100%;overflow:hidden;background:#fff;cursor:grab;-webkit-user-select:none;user-select:none}.agent-obs-td-graph--panning{cursor:grabbing}.agent-obs-td-graph-svg{display:block;width:100%;height:100%}.agent-obs-td-graph-toolbar{position:absolute;top:12px;right:16px;display:inline-flex;align-items:center;height:36px;padding:0 6px;background:#fff;border:1px solid #e5e5e5;border-radius:8px;box-shadow:0 2px 8px #0000000f;cursor:default;-webkit-user-select:none;user-select:none;z-index:2}.agent-obs-td-graph-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:4px;color:#000;font-size:18px;line-height:1;cursor:pointer;transition:background-color .15s}.agent-obs-td-graph-toolbar-btn:hover:not(:disabled){background:#f3f4f6}.agent-obs-td-graph-toolbar-btn:disabled{color:#cbd5e1;cursor:not-allowed}.agent-obs-td-graph-toolbar-percent{min-width:44px;padding:0 4px;color:#000;font-size:13px;font-variant-numeric:tabular-nums;text-align:center}.agent-obs-td-graph-toolbar-divider{width:1px;height:18px;margin:0 4px;background:#e5e5e5}.agent-obs-td-graph-toolbar-fit{color:#006eff}.agent-obs-td-graph-node{cursor:pointer}.agent-obs-td-graph-node-box{fill:#fff;stroke-width:2}.agent-obs-td-graph-node--AGENT .agent-obs-td-graph-node-box{stroke:#4e5ff2;fill:#eef0ff}.agent-obs-td-graph-node--CHAIN .agent-obs-td-graph-node-box,.agent-obs-td-graph-node--TOOL .agent-obs-td-graph-node-box{stroke:#16a34a;fill:#e9f6ef}.agent-obs-td-graph-node--LLM .agent-obs-td-graph-node-box{stroke:#7b61ff;fill:#f1edff}.agent-obs-td-graph-node--RETRIEVER .agent-obs-td-graph-node-box,.agent-obs-td-graph-node--RERANKER .agent-obs-td-graph-node-box{stroke:#0ea5e9;fill:#e6f4fb}.agent-obs-td-graph-node--EMBEDDING .agent-obs-td-graph-node-box{stroke:#f59e0b;fill:#fdf3e1}.agent-obs-td-graph-node--EVALUATOR .agent-obs-td-graph-node-box,.agent-obs-td-graph-node--GUARDRAIL .agent-obs-td-graph-node-box{stroke:#e54545;fill:#fde8e8}.agent-obs-td-graph-node--PROMPT .agent-obs-td-graph-node-box{stroke:#8b5cf6;fill:#f1edff}.agent-obs-td-graph-node--UNKNOWN .agent-obs-td-graph-node-box{stroke:#a8a29e;fill:#f6f7f9}.agent-obs-td-graph-node--error .agent-obs-td-graph-node-box{stroke:#e54545!important}.agent-obs-td-graph-node--active .agent-obs-td-graph-node-box{stroke-width:3}.agent-obs-td-graph-node-op{font-size:13px;font-weight:500;fill:#000}.agent-obs-td-graph-node-dur{font-size:12px;fill:#a8a29e}.agent-obs-td-graph-node--LLM .agent-obs-td-graph-node-op{fill:#7b61ff}.agent-obs-td-graph-edge{stroke:#a8a29e;stroke-width:1.5;fill:none}.agent-obs-td-graph-edge--dashed{stroke-dasharray:4 4;stroke:#7b61ff;opacity:.7}.agent-obs-td-graph-edge-label{font-size:11px;fill:#a8a29e}.agent-obs-td-detail{font-size:13px;color:#000}.agent-obs-td-detail-empty{padding:40px 16px;color:#888;font-size:13px;text-align:center}.agent-obs-td-detail-header{display:flex;align-items:center;gap:8px;margin-bottom:14px}.agent-obs-td-detail-header-icon{flex:0 0 auto;display:inline-flex;color:#7b61ff}.agent-obs-td-detail-header-title{flex:1 1 auto;font-size:16px;font-weight:600;color:#000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-obs-td-detail-badge{flex:0 0 auto;padding:2px 10px;border-radius:10px;font-size:12px;font-weight:500}.agent-obs-td-detail-badge--ok{background:#d7f7e3;color:#16a34a}.agent-obs-td-detail-badge--error{background:#fdd7d7;color:#e54545}.agent-obs-td-detail-metrics{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:14px}.agent-obs-td-detail-metric{background:#f5f6f8;border-radius:4px;padding:10px 12px;min-width:0}.agent-obs-td-detail-metric-label{font-size:12px;color:#888;line-height:1.4;margin-bottom:2px}.agent-obs-td-detail-metric-value{font-size:14px;font-weight:500;color:#000;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-obs-td-detail-info{background-color:#f3f4f7;padding:15px 30px;display:flex;gap:20px;flex-direction:column;margin:0 -24px}.agent-obs-td-detail-pills{display:flex;flex-wrap:wrap;gap:16px}.agent-obs-td-detail-pill{display:inline-flex;align-items:center;gap:8px;background:#d6d3d1;border-radius:4px;padding:4px 10px;font-size:12px;max-width:100%;overflow:hidden}.agent-obs-td-detail-pill-label{color:#888;flex:0 0 auto}.agent-obs-td-detail-pill-value{color:#000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}.agent-obs-td-detail-io{padding:12px 14px;background-color:#fff}.agent-obs-td-detail-io-title{font-size:12px;color:#888;margin-bottom:8px}.agent-obs-td-detail-io-title--error{color:#e54545}.agent-obs-td-detail-io-content{font-size:13px;color:#000;white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto;font-family:Menlo,Consolas,Courier New,monospace;line-height:1.5;margin:0}.agent-obs-td-detail-io-empty{color:#888;font-family:inherit}.agent-obs-td-detail-attrs-wrap{margin-top:16px;padding-top:8px}.agent-obs-td-detail-attrs{display:flex;flex-direction:column}.agent-obs-td-detail-attrs-empty{padding:16px;font-size:12px;color:#888}.agent-obs-td-detail-attrs-loading{padding:24px 16px;display:flex;align-items:center;justify-content:center}.agent-obs-td-detail-attr{border-bottom:1px solid #e5e5e5;padding:8px 0}.agent-obs-td-detail-attr:last-child{border-bottom:none}.agent-obs-td-detail-attr-main{display:flex;align-items:flex-start;gap:8px;font-size:12px;font-family:Menlo,Consolas,Courier New,monospace}.agent-obs-td-detail-attr-caret{flex:0 0 14px;width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;color:#a8a29e;font-size:8px;cursor:pointer;transition:transform .15s;margin-top:2px}.agent-obs-td-detail-attr-caret--placeholder{cursor:default;visibility:hidden}.agent-obs-td-detail-attr-caret--expanded{transform:rotate(90deg)}.agent-obs-td-detail-attr-key{flex:0 0 280px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#000}.agent-obs-td-detail-attr-value{flex:1 1 auto;min-width:0;color:#000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-obs-td-detail-attr-value--expanded{white-space:pre-wrap;word-break:break-word;overflow:visible}.agent-obs-td-detail-attr-json{margin:8px 0 0 22px;padding:10px 12px;background:#f5f6f8;border-radius:4px;font-size:12px;color:#000;font-family:Menlo,Consolas,Courier New,monospace;white-space:pre;overflow:auto;max-height:300px}.hljs{background:transparent}.hljs .hljs-attr{color:#0550ae}.hljs .hljs-string{color:#0a7b30}.hljs .hljs-number,.hljs .hljs-literal{color:#cf222e}.hljs .hljs-punctuation{color:#57606a}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
function we(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const i=e[t],l=typeof i;(l==="object"||l==="function")&&!Object.isFrozen(i)&&we(i)}),e}class he{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function Oe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function C(e,...t){const i=Object.create(null);for(const l in e)i[l]=e[l];return t.forEach(function(l){for(const b in l)i[b]=l[b]}),i}const Ve="</span>",pe=e=>!!e.scope,Qe=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const i=e.split(".");return[`${t}${i.shift()}`,...i.map((l,b)=>`${l}${"_".repeat(b+1)}`)].join(" ")}return`${t}${e}`};class qe{constructor(t,i){this.buffer="",this.classPrefix=i.classPrefix,t.walk(this)}addText(t){this.buffer+=Oe(t)}openNode(t){if(!pe(t))return;const i=Qe(t.scope,{prefix:this.classPrefix});this.span(i)}closeNode(t){pe(t)&&(this.buffer+=Ve)}value(){return this.buffer}span(t){this.buffer+=`<span class="${t}">`}}const de=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class te{constructor(){this.rootNode=de(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const i=de({scope:t});this.add(i),this.stack.push(i)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,i){return typeof i=="string"?t.addText(i):i.children&&(t.openNode(i),i.children.forEach(l=>this._walk(t,l)),t.closeNode(i)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(i=>typeof i=="string")?t.children=[t.children.join("")]:t.children.forEach(i=>{te._collapse(i)}))}}class me extends te{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,i){const l=t.root;i&&(l.scope=`language:${i}`),this.add(l)}toHTML(){return new qe(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function H(e){return e?typeof e=="string"?e:e.source:null}function xe(e){return L("(?=",e,")")}function et(e){return L("(?:",e,")*")}function tt(e){return L("(?:",e,")?")}function L(...e){return e.map(i=>H(i)).join("")}function nt(e){const t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function ne(...e){return"("+(nt(e).capture?"":"?:")+e.map(l=>H(l)).join("|")+")"}function Re(e){return new RegExp(e.toString()+"|").exec("").length-1}function it(e,t){const i=e&&e.exec(t);return i&&i.index===0}const st=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function ie(e,{joinWith:t}){let i=0;return e.map(l=>{i+=1;const b=i;let _=H(l),c="";for(;_.length>0;){const r=st.exec(_);if(!r){c+=_;break}c+=_.substring(0,r.index),_=_.substring(r.index+r[0].length),r[0][0]==="\\"&&r[1]?c+="\\"+String(Number(r[1])+b):(c+=r[0],r[0]==="("&&i++)}return c}).map(l=>`(${l})`).join(t)}const rt=/\b\B/,ye="[a-zA-Z]\\w*",se="[a-zA-Z_]\\w*",Ne="\\b\\d+(\\.\\d+)?",Se="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Ae="\\b(0b[01]+)",ct="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",ot=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=L(t,/.*\b/,e.binary,/\b.*/)),C({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(i,l)=>{i.index!==0&&l.ignoreMatch()}},e)},U={begin:"\\\\[\\s\\S]",relevance:0},at={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[U]},lt={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[U]},ut={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Y=function(e,t,i={}){const l=C({scope:"comment",begin:e,end:t,contains:[]},i);l.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const b=ne("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return l.contains.push({begin:L(/[ ]+/,"(",b,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),l},ft=Y("//","$"),gt=Y("/\\*","\\*/"),ht=Y("#","$"),pt={scope:"number",begin:Ne,relevance:0},dt={scope:"number",begin:Se,relevance:0},Et={scope:"number",begin:Ae,relevance:0},bt={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[U,{begin:/\[/,end:/\]/,relevance:0,contains:[U]}]},_t={scope:"title",begin:ye,relevance:0},Mt={scope:"title",begin:se,relevance:0},wt={begin:"\\.\\s*"+se,relevance:0},Ot=function(e){return Object.assign(e,{"on:begin":(t,i)=>{i.data._beginMatch=t[1]},"on:end":(t,i)=>{i.data._beginMatch!==t[1]&&i.ignoreMatch()}})};var F=Object.freeze({__proto__:null,APOS_STRING_MODE:at,BACKSLASH_ESCAPE:U,BINARY_NUMBER_MODE:Et,BINARY_NUMBER_RE:Ae,COMMENT:Y,C_BLOCK_COMMENT_MODE:gt,C_LINE_COMMENT_MODE:ft,C_NUMBER_MODE:dt,C_NUMBER_RE:Se,END_SAME_AS_BEGIN:Ot,HASH_COMMENT_MODE:ht,IDENT_RE:ye,MATCH_NOTHING_RE:rt,METHOD_GUARD:wt,NUMBER_MODE:pt,NUMBER_RE:Ne,PHRASAL_WORDS_MODE:ut,QUOTE_STRING_MODE:lt,REGEXP_MODE:bt,RE_STARTERS_RE:ct,SHEBANG:ot,TITLE_MODE:_t,UNDERSCORE_IDENT_RE:se,UNDERSCORE_TITLE_MODE:Mt});function xt(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function Rt(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function yt(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=xt,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Nt(e,t){Array.isArray(e.illegal)&&(e.illegal=ne(...e.illegal))}function St(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function At(e,t){e.relevance===void 0&&(e.relevance=1)}const Tt=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const i=Object.assign({},e);Object.keys(e).forEach(l=>{delete e[l]}),e.keywords=i.keywords,e.begin=L(i.beforeMatch,xe(i.begin)),e.starts={relevance:0,contains:[Object.assign(i,{endsParent:!0})]},e.relevance=0,delete i.beforeMatch},kt=["of","and","for","in","not","or","if","then","parent","list","value"],It="keyword";function Te(e,t,i=It){const l=Object.create(null);return typeof e=="string"?b(i,e.split(" ")):Array.isArray(e)?b(i,e):Object.keys(e).forEach(function(_){Object.assign(l,Te(e[_],t,_))}),l;function b(_,c){t&&(c=c.map(r=>r.toLowerCase())),c.forEach(function(r){const u=r.split("|");l[u[0]]=[_,Ct(u[0],u[1])]})}}function Ct(e,t){return t?Number(t):Dt(e)?0:1}function Dt(e){return kt.includes(e.toLowerCase())}const Ee={},B=e=>{console.error(e)},be=(e,...t)=>{console.log(`WARN: ${e}`,...t)},v=(e,t)=>{Ee[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Ee[`${e}/${t}`]=!0)},X=new Error;function ke(e,t,{key:i}){let l=0;const b=e[i],_={},c={};for(let r=1;r<=t.length;r++)c[r+l]=b[r],_[r+l]=!0,l+=Re(t[r-1]);e[i]=c,e[i]._emit=_,e[i]._multi=!0}function Bt(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw B("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),X;if(typeof e.beginScope!="object"||e.beginScope===null)throw B("beginScope must be object"),X;ke(e,e.begin,{key:"beginScope"}),e.begin=ie(e.begin,{joinWith:""})}}function Lt(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw B("skip, excludeEnd, returnEnd not compatible with endScope: {}"),X;if(typeof e.endScope!="object"||e.endScope===null)throw B("endScope must be object"),X;ke(e,e.end,{key:"endScope"}),e.end=ie(e.end,{joinWith:""})}}function vt(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function jt(e){vt(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),Bt(e),Lt(e)}function Pt(e){function t(c,r){return new RegExp(H(c),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class i{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(r,u){u.position=this.position++,this.matchIndexes[this.matchAt]=u,this.regexes.push([u,r]),this.matchAt+=Re(r)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const r=this.regexes.map(u=>u[1]);this.matcherRe=t(ie(r,{joinWith:"|"}),!0),this.lastIndex=0}exec(r){this.matcherRe.lastIndex=this.lastIndex;const u=this.matcherRe.exec(r);if(!u)return null;const O=u.findIndex((P,Z)=>Z>0&&P!==void 0),M=this.matchIndexes[O];return u.splice(0,O),Object.assign(u,M)}}class l{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(r){if(this.multiRegexes[r])return this.multiRegexes[r];const u=new i;return this.rules.slice(r).forEach(([O,M])=>u.addRule(O,M)),u.compile(),this.multiRegexes[r]=u,u}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(r,u){this.rules.push([r,u]),u.type==="begin"&&this.count++}exec(r){const u=this.getMatcher(this.regexIndex);u.lastIndex=this.lastIndex;let O=u.exec(r);if(this.resumingScanAtSamePosition()&&!(O&&O.index===this.lastIndex)){const M=this.getMatcher(0);M.lastIndex=this.lastIndex+1,O=M.exec(r)}return O&&(this.regexIndex+=O.position+1,this.regexIndex===this.count&&this.considerAll()),O}}function b(c){const r=new l;return c.contains.forEach(u=>r.addRule(u.begin,{rule:u,type:"begin"})),c.terminatorEnd&&r.addRule(c.terminatorEnd,{type:"end"}),c.illegal&&r.addRule(c.illegal,{type:"illegal"}),r}function _(c,r){const u=c;if(c.isCompiled)return u;[Rt,St,jt,Tt].forEach(M=>M(c,r)),e.compilerExtensions.forEach(M=>M(c,r)),c.__beforeBegin=null,[yt,Nt,At].forEach(M=>M(c,r)),c.isCompiled=!0;let O=null;return typeof c.keywords=="object"&&c.keywords.$pattern&&(c.keywords=Object.assign({},c.keywords),O=c.keywords.$pattern,delete c.keywords.$pattern),O=O||/\w+/,c.keywords&&(c.keywords=Te(c.keywords,e.case_insensitive)),u.keywordPatternRe=t(O,!0),r&&(c.begin||(c.begin=/\B|\b/),u.beginRe=t(u.begin),!c.end&&!c.endsWithParent&&(c.end=/\B|\b/),c.end&&(u.endRe=t(u.end)),u.terminatorEnd=H(u.end)||"",c.endsWithParent&&r.terminatorEnd&&(u.terminatorEnd+=(c.end?"|":"")+r.terminatorEnd)),c.illegal&&(u.illegalRe=t(c.illegal)),c.contains||(c.contains=[]),c.contains=[].concat(...c.contains.map(function(M){return Ht(M==="self"?c:M)})),c.contains.forEach(function(M){_(M,u)}),c.starts&&_(c.starts,r),u.matcher=b(u),u}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=C(e.classNameAliases||{}),_(e)}function Ie(e){return e?e.endsWithParent||Ie(e.starts):!1}function Ht(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return C(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ie(e)?C(e,{starts:e.starts?C(e.starts):null}):Object.isFrozen(e)?C(e):e}var Ut="11.11.1";class $t extends Error{constructor(t,i){super(t),this.name="HTMLInjectionError",this.html=i}}const ee=Oe,_e=C,Me=Symbol("nomatch"),Gt=7,Ce=function(e){const t=Object.create(null),i=Object.create(null),l=[];let b=!0;const _="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let r={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:me};function u(n){return r.noHighlightRe.test(n)}function O(n){let a=n.className+" ";a+=n.parentNode?n.parentNode.className:"";const h=r.languageDetectRe.exec(a);if(h){const d=k(h[1]);return d||(be(_.replace("{}",h[1])),be("Falling back to no-highlight mode for this block.",n)),d?h[1]:"no-highlight"}return a.split(/\s+/).find(d=>u(d)||k(d))}function M(n,a,h){let d="",w="";typeof a=="object"?(d=n,h=a.ignoreIllegals,w=a.language):(v("10.7.0","highlight(lang, code, ...args) has been deprecated."),v("10.7.0",`Please use highlight(code, options) instead.
|
|
2
|
+
https://github.com/highlightjs/highlight.js/issues/2277`),w=n,d=a),h===void 0&&(h=!0);const N={code:d,language:w};G("before:highlight",N);const I=N.result?N.result:P(N.language,N.code,h);return I.code=N.code,G("after:highlight",I),I}function P(n,a,h,d){const w=Object.create(null);function N(s,o){return s.keywords[o]}function I(){if(!f.keywords){x.addText(E);return}let s=0;f.keywordPatternRe.lastIndex=0;let o=f.keywordPatternRe.exec(E),g="";for(;o;){g+=E.substring(s,o.index);const p=A.case_insensitive?o[0].toLowerCase():o[0],R=N(f,p);if(R){const[T,Ze]=R;if(x.addText(g),g="",w[p]=(w[p]||0)+1,w[p]<=Gt&&(z+=Ze),T.startsWith("_"))g+=o[0];else{const Je=A.classNameAliases[T]||T;S(o[0],Je)}}else g+=o[0];s=f.keywordPatternRe.lastIndex,o=f.keywordPatternRe.exec(E)}g+=E.substring(s),x.addText(g)}function K(){if(E==="")return;let s=null;if(typeof f.subLanguage=="string"){if(!t[f.subLanguage]){x.addText(E);return}s=P(f.subLanguage,E,!0,ge[f.subLanguage]),ge[f.subLanguage]=s._top}else s=J(E,f.subLanguage.length?f.subLanguage:null);f.relevance>0&&(z+=s.relevance),x.__addSublanguage(s._emitter,s.language)}function y(){f.subLanguage!=null?K():I(),E=""}function S(s,o){s!==""&&(x.startScope(o),x.addText(s),x.endScope())}function ae(s,o){let g=1;const p=o.length-1;for(;g<=p;){if(!s._emit[g]){g++;continue}const R=A.classNameAliases[s[g]]||s[g],T=o[g];R?S(T,R):(E=T,I(),E=""),g++}}function le(s,o){return s.scope&&typeof s.scope=="string"&&x.openNode(A.classNameAliases[s.scope]||s.scope),s.beginScope&&(s.beginScope._wrap?(S(E,A.classNameAliases[s.beginScope._wrap]||s.beginScope._wrap),E=""):s.beginScope._multi&&(ae(s.beginScope,o),E="")),f=Object.create(s,{parent:{value:f}}),f}function ue(s,o,g){let p=it(s.endRe,g);if(p){if(s["on:end"]){const R=new he(s);s["on:end"](o,R),R.isMatchIgnored&&(p=!1)}if(p){for(;s.endsParent&&s.parent;)s=s.parent;return s}}if(s.endsWithParent)return ue(s.parent,o,g)}function We(s){return f.matcher.regexIndex===0?(E+=s[0],1):(m=!0,0)}function ze(s){const o=s[0],g=s.rule,p=new he(g),R=[g.__beforeBegin,g["on:begin"]];for(const T of R)if(T&&(T(s,p),p.isMatchIgnored))return We(o);return g.skip?E+=o:(g.excludeBegin&&(E+=o),y(),!g.returnBegin&&!g.excludeBegin&&(E=o)),le(g,s),g.returnBegin?0:o.length}function Fe(s){const o=s[0],g=a.substring(s.index),p=ue(f,s,g);if(!p)return Me;const R=f;f.endScope&&f.endScope._wrap?(y(),S(o,f.endScope._wrap)):f.endScope&&f.endScope._multi?(y(),ae(f.endScope,s)):R.skip?E+=o:(R.returnEnd||R.excludeEnd||(E+=o),y(),R.excludeEnd&&(E=o));do f.scope&&x.closeNode(),!f.skip&&!f.subLanguage&&(z+=f.relevance),f=f.parent;while(f!==p.parent);return p.starts&&le(p.starts,s),R.returnEnd?0:o.length}function Xe(){const s=[];for(let o=f;o!==A;o=o.parent)o.scope&&s.unshift(o.scope);s.forEach(o=>x.openNode(o))}let W={};function fe(s,o){const g=o&&o[0];if(E+=s,g==null)return y(),0;if(W.type==="begin"&&o.type==="end"&&W.index===o.index&&g===""){if(E+=a.slice(o.index,o.index+1),!b){const p=new Error(`0 width match regex (${n})`);throw p.languageName=n,p.badRule=W.rule,p}return 1}if(W=o,o.type==="begin")return ze(o);if(o.type==="illegal"&&!h){const p=new Error('Illegal lexeme "'+g+'" for mode "'+(f.scope||"<unnamed>")+'"');throw p.mode=f,p}else if(o.type==="end"){const p=Fe(o);if(p!==Me)return p}if(o.type==="illegal"&&g==="")return E+=`
|
|
3
|
+
`,1;if(q>1e5&&q>o.index*3)throw new Error("potential infinite loop, way more iterations than matches");return E+=g,g.length}const A=k(n);if(!A)throw B(_.replace("{}",n)),new Error('Unknown language: "'+n+'"');const Ye=Pt(A);let Q="",f=d||Ye;const ge={},x=new r.__emitter(r);Xe();let E="",z=0,D=0,q=0,m=!1;try{if(A.__emitTokens)A.__emitTokens(a,x);else{for(f.matcher.considerAll();;){q++,m?m=!1:f.matcher.considerAll(),f.matcher.lastIndex=D;const s=f.matcher.exec(a);if(!s)break;const o=a.substring(D,s.index),g=fe(o,s);D=s.index+g}fe(a.substring(D))}return x.finalize(),Q=x.toHTML(),{language:n,value:Q,relevance:z,illegal:!1,_emitter:x,_top:f}}catch(s){if(s.message&&s.message.includes("Illegal"))return{language:n,value:ee(a),illegal:!0,relevance:0,_illegalBy:{message:s.message,index:D,context:a.slice(D-100,D+100),mode:s.mode,resultSoFar:Q},_emitter:x};if(b)return{language:n,value:ee(a),illegal:!1,relevance:0,errorRaised:s,_emitter:x,_top:f};throw s}}function Z(n){const a={value:ee(n),illegal:!1,relevance:0,_top:c,_emitter:new r.__emitter(r)};return a._emitter.addText(n),a}function J(n,a){a=a||r.languages||Object.keys(t);const h=Z(n),d=a.filter(k).filter(oe).map(y=>P(y,n,!1));d.unshift(h);const w=d.sort((y,S)=>{if(y.relevance!==S.relevance)return S.relevance-y.relevance;if(y.language&&S.language){if(k(y.language).supersetOf===S.language)return 1;if(k(S.language).supersetOf===y.language)return-1}return 0}),[N,I]=w,K=N;return K.secondBest=I,K}function De(n,a,h){const d=a&&i[a]||h;n.classList.add("hljs"),n.classList.add(`language-${d}`)}function V(n){let a=null;const h=O(n);if(u(h))return;if(G("before:highlightElement",{el:n,language:h}),n.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",n);return}if(n.children.length>0&&(r.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(n)),r.throwUnescapedHTML))throw new $t("One of your code blocks includes unescaped HTML.",n.innerHTML);a=n;const d=a.textContent,w=h?M(d,{language:h,ignoreIllegals:!0}):J(d);n.innerHTML=w.value,n.dataset.highlighted="yes",De(n,h,w.language),n.result={language:w.language,re:w.relevance,relevance:w.relevance},w.secondBest&&(n.secondBest={language:w.secondBest.language,relevance:w.secondBest.relevance}),G("after:highlightElement",{el:n,result:w,text:d})}function Be(n){r=_e(r,n)}const Le=()=>{$(),v("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function ve(){$(),v("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let re=!1;function $(){function n(){$()}if(document.readyState==="loading"){re||window.addEventListener("DOMContentLoaded",n,!1),re=!0;return}document.querySelectorAll(r.cssSelector).forEach(V)}function je(n,a){let h=null;try{h=a(e)}catch(d){if(B("Language definition for '{}' could not be registered.".replace("{}",n)),b)B(d);else throw d;h=c}h.name||(h.name=n),t[n]=h,h.rawDefinition=a.bind(null,e),h.aliases&&ce(h.aliases,{languageName:n})}function Pe(n){delete t[n];for(const a of Object.keys(i))i[a]===n&&delete i[a]}function He(){return Object.keys(t)}function k(n){return n=(n||"").toLowerCase(),t[n]||t[i[n]]}function ce(n,{languageName:a}){typeof n=="string"&&(n=[n]),n.forEach(h=>{i[h.toLowerCase()]=a})}function oe(n){const a=k(n);return a&&!a.disableAutodetect}function Ue(n){n["before:highlightBlock"]&&!n["before:highlightElement"]&&(n["before:highlightElement"]=a=>{n["before:highlightBlock"](Object.assign({block:a.el},a))}),n["after:highlightBlock"]&&!n["after:highlightElement"]&&(n["after:highlightElement"]=a=>{n["after:highlightBlock"](Object.assign({block:a.el},a))})}function $e(n){Ue(n),l.push(n)}function Ge(n){const a=l.indexOf(n);a!==-1&&l.splice(a,1)}function G(n,a){const h=n;l.forEach(function(d){d[h]&&d[h](a)})}function Ke(n){return v("10.7.0","highlightBlock will be removed entirely in v12.0"),v("10.7.0","Please use highlightElement now."),V(n)}Object.assign(e,{highlight:M,highlightAuto:J,highlightAll:$,highlightElement:V,highlightBlock:Ke,configure:Be,initHighlighting:Le,initHighlightingOnLoad:ve,registerLanguage:je,unregisterLanguage:Pe,listLanguages:He,getLanguage:k,registerAliases:ce,autoDetection:oe,inherit:_e,addPlugin:$e,removePlugin:Ge}),e.debugMode=function(){b=!1},e.safeMode=function(){b=!0},e.versionString=Ut,e.regex={concat:L,lookahead:xe,either:ne,optional:tt,anyNumberOfTimes:et};for(const n in F)typeof F[n]=="object"&&we(F[n]);return Object.assign(e,F),e},j=Ce({});j.newInstance=()=>Ce({});var Wt=j;j.HighlightJS=j;j.default=j;function Kt(e){const t={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},i={match:/[{}[\],:]/,className:"punctuation",relevance:0},l=["true","false","null"],b={scope:"literal",beginKeywords:l.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:l},contains:[t,i,e.QUOTE_STRING_MODE,b,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}var zt=Kt;export{Wt as c,zt as j};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-obs .tea-row.tea-grid{margin:0}.agent-studio-app.tea-layout{height:100vh;display:flex!important;flex-direction:column!important}.agent-studio-app .tea-layout__body{flex:1;min-height:0;display:flex!important;flex-direction:row!important}.agent-studio-app>.tea-nav{background-color:#000!important;border-bottom:1px solid rgba(153,153,153,.3);padding:0 28px!important;flex-shrink:0;display:flex;align-items:center}.agent-studio-app .tea-nav__logo{display:flex!important;align-items:center;height:100%;background:transparent!important}.agent-studio-app .tea-nav__logo:before{display:none}.agent-studio-app .tea-nav__logo>a{color:#fff!important;text-decoration:none!important;display:flex;align-items:center;padding:0!important;background:transparent!important}.agent-studio-app .tea-nav__logo>a:hover{text-decoration:none!important}.agent-studio-app .tea-nav__flex-end{flex:1}.agent-studio-app .tea-nav__service{display:flex;align-items:center;height:100%;background:transparent!important;color:#ffffffeb!important;padding:0!important}.agent-studio-app .tea-nav__service:hover{background:transparent!important}.agent-studio-app .tea-nav__service>a{color:#ffffffeb!important;text-decoration:none!important;background:transparent!important;padding:0!important}.agent-studio-app .tea-layout__sidebar{width:223px!important;flex-shrink:0;background-color:#000!important;height:100%}.agent-studio-app .tea-layout__sidebar .tea-menu{width:223px;background-color:#000!important;border:none!important;height:100%}.agent-studio-app .tea-layout__sidebar .tea-menu__header:empty,.agent-studio-app .tea-layout__sidebar .tea-menu__header:not(:has(.tea-menu__title)){display:none}.agent-studio-app .tea-layout__sidebar .tea-menu__body{background-color:#000!important;width:223px;padding:0}.agent-studio-app .tea-layout__sidebar .tea-menu__list{padding:0!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.tea-menu__label{padding:0!important;background:transparent!important;cursor:default!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.tea-menu__label>.tea-menu__item{background:transparent!important;padding:14px 29px 8px!important;cursor:default!important;color:#ffffff73!important;border:none!important;font-family:PingFang SC,system-ui,-apple-system,sans-serif!important;font-size:12px!important;font-weight:500!important;letter-spacing:.3px;height:auto!important;line-height:1.5!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.tea-menu__label>.tea-menu__item:hover{background:transparent!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.tea-menu__label>.tea-menu__item:before{display:none!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.tea-menu__label>.tea-menu__item .tea-menu__text{color:#ffffff73!important;font-size:12px!important;font-weight:500!important;padding:0!important;line-height:1.5!important;max-width:none!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label){padding:0!important;margin:0!important;background:transparent!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label)>.tea-menu__item{display:flex!important;align-items:center!important;height:40px!important;padding:0 0 0 29px!important;background:transparent!important;color:#ffffff8c!important;font-family:PingFang SC,system-ui,-apple-system,sans-serif!important;font-size:14px!important;font-weight:600!important;line-height:40px!important;border:none!important;border-radius:0!important;margin:0!important;text-decoration:none!important;cursor:pointer!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label)>.tea-menu__item:before{display:none!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label):not(.is-selected)>.tea-menu__item:hover{background-color:#ffffff0f!important;color:#ffffffeb!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label)>.tea-menu__item>svg:first-child{color:#888;margin-right:21px;flex-shrink:0;width:20px!important;height:20px!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label):not(.is-selected)>.tea-menu__item:hover>svg:first-child{color:#fff}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li:not(.tea-menu__label)>.tea-menu__item>.tea-menu__text{color:inherit!important;font-size:14px!important;font-weight:600!important;padding:0!important;line-height:40px!important;vertical-align:middle!important;max-width:none!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.is-selected>.tea-menu__item,.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.is-selected>.tea-menu__item:hover{background-color:#1c66e5!important;color:#fff!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.is-selected>.tea-menu__item>svg:first-child{color:#fff!important}.agent-studio-app .tea-layout__sidebar .tea-menu__list>li.is-selected>.tea-menu__item>.tea-menu__text{color:#fff!important}.agent-studio-app .tea-layout__content{flex:1;display:flex!important;flex-direction:column!important;background-color:#f5f7fa;overflow:auto;min-width:0;height:100%}.agent-studio-app .tea-layout__content-header{background-color:#fff;flex-shrink:0}.agent-studio-app .tea-layout__content-header .tea-layout__header-title{padding:14px 35px}.agent-studio-app .tea-layout__content-header .tea-content-header__text,.agent-studio-app .tea-layout__content-header h1,.agent-studio-app .tea-layout__content-header h2,.agent-studio-app .tea-layout__content-header .tea-h1,.agent-studio-app .tea-layout__content-header .tea-h2{font-family:PingFang SC,system-ui,-apple-system,sans-serif!important;font-size:16px!important;font-weight:600!important;color:#000!important;height:auto!important;line-height:1.5!important;margin:0!important}.agent-studio-app .tea-layout__content-body{flex:1;overflow:auto;background-color:#f5f7fa}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as c,j as n,R as y}from"./react-hnpCyKql.js";import{i as I,g as E,L as f,N as m,M as h}from"./tea-Slf_ajmf.js";import{a as w,T as b,A as O,b as M}from"./agent-obs-Dvi4IpEy.js";import{c as F}from"./react-dom-ZzBHVjtL.js";import"./moment-BYRO94Ou.js";import"./highlight-ClXAL37H.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();const x="edgeone_studio_lang",T=["zh","en"];function P(){try{const t=window.localStorage.getItem(x);if(t&&T.includes(t))return t}catch{}return(navigator.language||"").toLowerCase().startsWith("zh")?"zh":"en"}const p=P();window.VERSION=p;const _=w[p]||w.zh||{};I.init({translation:_});const C=new Set;function A(e){return C.add(e),()=>C.delete(e)}function k(e){if(!T.includes(e)||e===S)return;const t=E();if(!t){try{window.localStorage.setItem(x,e)}catch{}window.location.reload();return}const s=w[e]||{};t.addResourceBundle(e,"translation",s,!0,!0),t.changeLanguage(e);try{window.localStorage.setItem(x,e)}catch{}S=e,C.forEach(r=>r(e))}let S=p;window.__EDGEONE_STUDIO_SWITCH_LANG__=k;const N=["/agent-metrics","/agent-traces","/agent-studio"],B="/agent-metrics";function v(){try{const e=window.location.pathname;for(const t of N)if(e===t||e.startsWith(`${t}/`))return t}catch{}return B}function j(){return`${v()}/v1`}async function z(e){const t=new URLSearchParams;t.set("limit",String(e.pageSize??10)),t.set("offset",String(((e.pageIndex??1)-1)*(e.pageSize??10))),e.keyword&&t.set("keyword",e.keyword),e.statuses&&e.statuses.length===1&&t.set("statusGroup",e.statuses[0]),e.timeRange&&t.set("timeRange",e.timeRange),e.customRange&&(t.set("startedAtMin",String(e.customRange[0].valueOf())),t.set("startedAtMax",String(e.customRange[1].valueOf())));const s=await fetch(`${j()}/traces.list?${t.toString()}`);if(!s.ok)throw new Error(`fetch traces failed: ${s.status}`);const r=await s.json();return{rows:r.Traces||[],pagination:{pageIndex:e.pageIndex??1,pageSize:e.pageSize??10,total:r.Total??0}}}const L="agent.request:";function U(e){var t;return(t=e==null?void 0:e.Spans)!=null&&t.length?{...e,Spans:e.Spans.map(s=>({...s,...typeof s.OperationName=="string"&&s.OperationName.startsWith(L)?{OperationName:s.OperationName.slice(L.length)}:{}}))}:e}async function D(e){const t=await fetch(`${j()}/traces/${encodeURIComponent(e)}.detail`);if(!t.ok)throw new Error(`fetch trace detail failed: ${t.status}`);const s=await t.json();return U(s)}async function W(e={}){const t=new URLSearchParams;e.timeRange&&t.set("timeRange",e.timeRange),e.startTimeMs&&t.set("startedAtMin",String(e.startTimeMs)),e.endTimeMs&&t.set("startedAtMax",String(e.endTimeMs));const s=await fetch(`${j()}/metrics?${t.toString()}`);if(!s.ok)throw new Error(`fetch metrics failed: ${s.status}`);return s.json()}const $={overview:"/agent-metrics",traces:"/agent-traces"},H={"/agent-metrics":"overview","/agent-traces":"traces","/agent-studio":"overview"},G={environment:"all",timeRange:"24hour",customRange:null,statuses:[],keyword:"",pageIndex:1,pageSize:10};function R(){try{return H[v()]??"overview"}catch{return"overview"}}function V(e){try{const t=$[e];if(v()===t)return;const r=new URL(window.location.href);r.pathname=t,window.history.pushState({tab:e},"",r.toString())}catch{}}function X({initialLang:e}){const[t,s]=c.useState(()=>R()),[r,o]=c.useState(e);c.useEffect(()=>A(o),[]);const[i,l]=c.useState(!1),[a,d]=c.useState(null),g=c.useCallback(u=>{s(u),V(u)},[]);return c.useEffect(()=>{const u=()=>s(R());return window.addEventListener("popstate",u),()=>window.removeEventListener("popstate",u)},[]),n.jsxs(f,{className:"agent-studio-app",children:[n.jsx(m,{left:n.jsx(m.Item,{type:"logo",children:n.jsx(K,{})}),right:n.jsx(m.Item,{type:"default",children:n.jsx(Z,{current:r})})}),n.jsxs(f.Body,{children:[n.jsx(f.Sider,{children:n.jsx(h,{theme:"dark",children:n.jsxs(h.Group,{title:"Observability",children:[n.jsx(h.Item,{title:"Agent Metrics",icon:n.jsx(Q,{}),selected:t==="overview",onClick:()=>g("overview")}),n.jsx(h.Item,{title:"Agent Traces",icon:n.jsx(Y,{}),selected:t==="traces",onClick:()=>g("traces")})]})})}),n.jsxs(f.Content,{children:[t==="overview"&&n.jsx(J,{}),t==="traces"&&n.jsx(q,{onRowClick:u=>{d(u.TraceId),l(!0)}})]},r)]}),n.jsx(b,{visible:i,traceId:a,fetchDetail:u=>D(u),onClose:()=>l(!1)})]})}function K(){return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[n.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 28 28",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0,children:[n.jsx("path",{d:"M27.7784 16.4944C27.924 15.6849 28 14.8513 28 14C28 13.2803 27.9457 12.5734 27.841 11.8829C27.8005 11.6162 27.5679 11.424 27.2981 11.424H18.2935C17.999 11.424 17.7846 11.1446 17.8608 10.86L18.9267 6.88207C19.0054 6.58829 19.2716 6.384 19.5758 6.384H24.9239C25.2793 6.384 25.4903 5.99169 25.2795 5.70554C22.7306 2.24513 18.6275 0 14 0C6.26801 0 0 6.26801 0 14C0 17.5202 1.29921 20.7369 3.44429 23.1969C3.67271 23.4588 4.0922 23.3504 4.18175 23.0146L7.27934 11.3986C7.33622 11.1853 7.17545 10.976 6.95468 10.976H4.26421C3.96986 10.976 3.75549 10.697 3.83134 10.4126L4.70485 7.13693C4.77038 6.89118 4.99334 6.72137 5.24762 6.7161C8.17874 6.65542 11.0752 5.88815 13.647 4.4841C13.9129 4.33898 14.2342 4.58196 14.1561 4.87457L8.45823 26.2418C8.37314 26.5608 8.53186 26.8961 8.83881 27.0179C10.4359 27.6517 12.1773 28 14 28C18.4191 28 22.3599 25.9526 24.9257 22.7546C25.153 22.4713 24.9444 22.064 24.5811 22.064H15.4425C15.148 22.064 14.9336 21.7846 15.0098 21.5L16.0757 17.5221C16.1544 17.2283 16.4207 17.024 16.7248 17.024H27.1324C27.4479 17.024 27.7226 16.8049 27.7784 16.4944Z",fill:"url(#edgeone-logo-grad)"}),n.jsx("defs",{children:n.jsxs("linearGradient",{id:"edgeone-logo-grad",x1:"4.816",y1:"2.352",x2:"22.288",y2:"23.184",gradientUnits:"userSpaceOnUse",children:[n.jsx("stop",{stopColor:"#00DDFF"}),n.jsx("stop",{offset:"1",stopColor:"#0C60F2"})]})})]}),n.jsx("span",{style:{fontFamily:"Oxygen, system-ui, -apple-system, sans-serif",fontSize:18,fontWeight:700,color:"#FFFFFF",letterSpacing:"-0.18px",lineHeight:1.33},children:"EdgeOne Makers"})]})}function Q(){return n.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:[n.jsx("path",{d:"M2.5 2.5V15.8333C2.5 16.2754 2.67559 16.6993 2.98816 17.0118C3.30072 17.3244 3.72464 17.5 4.16667 17.5H17.5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M15 14.1667V7.5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M10.8335 14.1667V4.16675",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M6.6665 14.1667V11.6667",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function Y(){return n.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",children:[n.jsx("path",{d:"M2.06202 12.3481C1.97868 12.1236 1.97868 11.8766 2.06202 11.6521C2.87372 9.68397 4.25153 8.00116 6.02079 6.81701C7.79004 5.63287 9.87106 5.00073 12 5.00073C14.129 5.00073 16.21 5.63287 17.9792 6.81701C19.7485 8.00116 21.1263 9.68397 21.938 11.6521C22.0214 11.8766 22.0214 12.1236 21.938 12.3481C21.1263 14.3163 19.7485 15.9991 17.9792 17.1832C16.21 18.3674 14.129 18.9995 12 18.9995C9.87106 18.9995 7.79004 18.3674 6.02079 17.1832C4.25153 15.9991 2.87372 14.3163 2.06202 12.3481Z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("circle",{cx:"12",cy:"12",r:"3",stroke:"currentColor",strokeWidth:"2"})]})}function Z(e){const t=s=>{s!==e.current&&k(s)};return n.jsx("div",{style:{display:"inline-flex",gap:2,padding:2,background:"rgba(255, 255, 255, 0.08)",borderRadius:6,fontSize:12},children:["zh","en"].map(s=>{const r=s===e.current;return n.jsx("button",{onClick:()=>t(s),style:{border:"none",padding:"3px 12px",borderRadius:4,cursor:r?"default":"pointer",background:r?"#FFFFFF":"transparent",color:r?"#000000":"rgba(255, 255, 255, 0.55)",fontWeight:r?600:400,transition:"background-color 0.15s ease, color 0.15s ease"},children:s==="zh"?"中":"EN"},s)})})}function J(){const[e,t]=c.useState([]),[s,r]=c.useState([]),[o,i]=c.useState(!0),l=c.useCallback(a=>{i(!0);const d=a==null?void 0:a.customRange;return W({environment:a==null?void 0:a.environment,timeRange:d?null:a==null?void 0:a.timeRange,startTimeMs:d?d[0].valueOf():null,endTimeMs:d?d[1].valueOf():null}).then(g=>{t(g.overview),r(g.charts)}).finally(()=>i(!1))},[]);return c.useEffect(()=>{l()},[l]),n.jsxs(n.Fragment,{children:[n.jsx(f.Content.Header,{showBackButton:!1,title:"Metrics"}),n.jsx(f.Content.Body,{full:!0,children:n.jsx("div",{style:{padding:16},children:n.jsx(O,{overview:e,charts:s,loading:o,onFilterChange:a=>{l(a)},onRefresh:l})})})]})}function q(e){const[t,s]=c.useState([]),[r,o]=c.useState({pageIndex:1,pageSize:10,total:0}),[i,l]=c.useState(!0),a=c.useCallback(d=>(l(!0),z(d).then(g=>{s(g.rows),o(g.pagination)}).finally(()=>l(!1))),[]);return c.useEffect(()=>{a(G)},[a]),n.jsxs(n.Fragment,{children:[n.jsx(f.Content.Header,{showBackButton:!1,title:"Traces"}),n.jsx(f.Content.Body,{full:!0,children:n.jsx("div",{style:{padding:16},children:n.jsx(M,{rows:t,pagination:r,loading:i,onQueryChange:d=>{a(d)},onRefresh:a,onRowClick:e.onRowClick})})})]})}F.createRoot(document.getElementById("root")).render(n.jsx(y.StrictMode,{children:n.jsx(X,{initialLang:p})}));
|